Cuprins:
- Pasul 1: Material necesar
- Pasul 2: Diagrama circuitului
- Pasul 3: Cod Arduino
- Pasul 4: Imprimarea 3D a bazei lămpii
- Pasul 5: atașament cu led
- Pasul 6: Carcasa lămpii
- Pasul 7: Configurare
Video: Lampă inteligentă (TCfD) - Vizualizator Rainbow + Music: 7 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Acest proiect este realizat pentru cursul Tehnologie pentru Concept Design la TUDelft
Produsul final este o lampă LED de bază ESP-32 și este conectat la server. Pentru prototip, lampa are două funcții; un efect curcubeu care emite o lumină liniștitoare care schimbă culoarea spre mediul înconjurător și în al doilea rând vizualizator de sunet în care pixelii LED „dansează” în funcție de nivelurile sonore. Sistemul este conectat la wifi și utilizatorul poate alege ce efect dorește de la lampă prin WIFI.
Microcipul ESP-32 ieftin ne oferă procesoare puternice, senzor hol încorporat, senzor de temperatură, senzor tactil și, de asemenea, capacitate wifi și bluetooth. Cu aceasta, Deși au fost alese doar două efecte pentru acest proiect, implicația acestei lămpi „inteligente” este nelimitată. Ar fi folosit pentru a indica vremea utilizatorului sau temperatura camerei, lampa în sine poate acționa ca un declanșator de alarmă sau poate oferi o strălucire calmantă a soarelui lângă pat simulând răsăritul soarelui pentru o experiență plăcută de trezire.
Pasul 1: Material necesar
Arduino esp32
Senzor de sunet
Convertor de nivel bidirecțional în patru direcții
Led Neopixel 2m 60 led / m
Sârme de jumper
Cablu micro USB cu adaptor
conexiune internet
Pasul 2: Diagrama circuitului
A fost desenată o schemă de circuit și circuitul a fost realizat în consecință așa cum este dat în
diagrama de mai jos.
Pasul 3: Cod Arduino
Aici a fost creat mai întâi codul vizualizatorului. Apoi, două exemple de cod
; „Neoplxel RGBW starndtest”; iar „simpleWebServerWifi” a fost modificat și integrat în codul vizualizatorului. Deși codul este încă buggy uneori (ledul aleator se aprinde din când în când). Următoarea iterație a codului (odată ce obținem suficient timp) va fi actualizată.
#include
#ifdef _AVR_
#include
#endif
const int numCitiri = 5;
citiri int [numCitiri];
int readIndex = 0;
int total = 0;
int medie = 0;
int micPin = 33;
#define PIN 4
#define NUM_LEDS 120
#define BRIGHTNESS 100
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
octet neopix_gamma = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 };
#include
#include
char ssid = "Rețeaua ta"; // SSID-ul rețelei (nume)
char pass = "secretPassword"; // parola de rețea
int cheieIndex = 0; // cheia dvs. de rețea Numărul indexului (necesar doar pentru WEP)
int status = WL_IDLE_STATUS;
Server WiFi Server (80);
configurare nulă ()
{
Serial.begin (9600); // inițializați comunicarea în serie
pinMode (9, OUTPUT); // setați modul pin LED
// verificați prezența scutului:
if (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("scutul WiFi nu este prezent");
while (adevărat); // nu continua
}
String fv = WiFi.firmwareVersion ();
if (fv! = "1.1.0") {
Serial.println („Vă rugăm să actualizați firmware-ul”);
}
// încercați să vă conectați la rețeaua Wifi:
while (stare! = WL_CONNECTED) {
Serial.print („Încercarea de a vă conecta la rețeaua denumită:”);
Serial.println (ssid); // tipăriți numele rețelei (SSID);
// Conectați-vă la rețeaua WPA / WPA2. Schimbați această linie dacă utilizați rețea deschisă sau WEP:
status = WiFi.begin (ssid, pass);
// așteptați 10 secunde pentru conexiune:
întârziere (10000);
}
server.begin (); // porniți serverul web pe portul 80
printWifiStatus (); // ești conectat acum, așa că tipărește starea
}
{
Serial.begin (9600);
strip.setBrightness (LUMINOSITATE);
strip.begin ();
strip.show (); // Inițializați toți pixelii la „dezactivat”
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
lecturi [thisReading] = 0;
}
}
gol curcubeu (uint8_t așteptați) {
uint16_t i, j;
pentru (j = 0; j <256; j ++) {
pentru (i = 0; i
strip.setPixelColor (i, Wheel ((i + j) & 255));
}
strip.show ();
întârziere (așteptați);
}
}
vizualizator nul () {
total = total - lecturi [readIndex];
lecturi [readIndex] = analogRead (micPin);
total = total + citiri [readIndex];
readIndex = readIndex + 1;
if (readIndex> = numReadings) {
readIndex = 0;
}
medie = total / numCitiri;
întârziere (1);
int micpixel = (medie-100) / 5;
Serial.println (micpixel);
if (micpixel> 0) {
{
for (int j = 0; j <= micpixel; j ++)
strip.setPixelColor (j, (micpixel * 2), 0, (90-micpixel), 0);
for (int j = micpixel; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
if (micpixel <0) {
pentru (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
bucla nulă () {
{
Client WiFiClient = server.available (); // ascultați clienții care intră
if (client) {// dacă primiți un client, Serial.println („client nou”); // tipăriți un mesaj în portul serial
String currentLine = ""; // faceți un șir pentru a păstra datele primite de la client
while (client.connected ()) {// bucla în timp ce clientul este conectat
if (client.available ()) {// dacă există octeți de citit de la client, char c = client.read (); // citiți un octet, apoi
Serial.write (c); // imprimați-l pe monitorul serial
if (c == '\ n') {// dacă octetul este un caracter de linie nouă
// dacă linia curentă este goală, ai două caractere de linie nouă la rând.
// acesta este sfârșitul cererii HTTP client, așa că trimiteți un răspuns:
if (currentLine.length () == 0) {
// Anteturile HTTP încep întotdeauna cu un cod de răspuns (de ex. HTTP / 1.1 200 OK)
// și un tip de conținut, astfel încât clientul să știe ce urmează, apoi o linie goală:
client.println ("HTTP / 1.1 200 OK");
client.println („Tip conținut: text / html”);
client.println ();
// conținutul răspunsului HTTP urmează antetul:
client.print („Faceți clic aici Activați efectul Curcubeu”);
client.print („Faceți clic aici Activați Visualizer”);
// Răspunsul HTTP se încheie cu o altă linie goală:
client.println ();
// ieși din bucla while:
pauză;
} else {// dacă ați obținut o linie nouă, apoi ștergeți currentLine:
currentLine = "";
}
} else if (c! = '\ r') {// dacă ai altceva în afară de un caracter return car, currentLine + = c; // adăugați-l la sfârșitul curentului
}
// Verificați dacă solicitarea clientului a fost „GET / H” sau „GET / L”:
if (currentLine.endsWith ("GET / R")) {
Curcubeu (10); // Efectul curcubeu este activat
}
if (currentLine.endsWith ("GET / V")) {
Vizualizator (); // Vizualizatorul este pornit
}
}
}
// închideți conexiunea:
client.stop ();
Serial.println („client deconectat”);
}
}
void printWifiStatus () {
// tipăriți SSID-ul rețelei la care sunteți atașat:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// tipăriți adresa IP a scutului WiFi:
IPAddress ip = WiFi.localIP ();
Serial.print („Adresă IP:”);
Serial.println (ip);
// tipăriți puterea semnalului primit:
rssi lung = WiFi. RSSI ();
Serial.print ("puterea semnalului (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// tipăriți unde să mergeți într-un browser:
Serial.print („Pentru a vedea această pagină în acțiune, deschideți un browser la
Serial.println (ip);
}
}
uint32_t Wheel (octet WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos <85) {
bandă de întoarcere. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
if (WheelPos <170) {
WheelPos - = 85;
bandă de întoarcere. Culoare (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos - = 170;
bandă de întoarcere. Culoare (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t roșu (uint32_t c) {
return (c >> 16);
}
uint8_t verde (uint32_t c) {
return (c >> 8);
}
uint8_t albastru (uint32_t c) {
return (c);
}
}
//Serial.println(micpixel);
}
Pasul 4: Imprimarea 3D a bazei lămpii
Un model 3D al bazei lămpii a fost măsurat, proiectat și tipărit cu dimensiuni suficient de mari pentru a se potrivi tuturor componentelor electrice din interiorul compartimentului bazei.
Pasul 5: atașament cu led
Ledurile erau înfășurate în role de carton și atașate folosind bandă dublă, o gaură a fost găurită în partea de jos pentru a trece firul prin
Pasul 6: Carcasa lămpii
O incintă a fost realizată prin găsirea unei sticle transparente cu lățimea similară cu baza lămpii și înălțimea ca accesoriul LED. Aceasta a fost apoi acoperită cu hârtie groasă pentru o mai bună difuzie a luminii. Alternativ, este posibil să se utilizeze sticlă mată sau tuburi din plastic translucid ca incintă a lămpii.
Pasul 7: Configurare
Totul era lipit și asamblat. Și lampa era gata pentru niște teste !.
Recomandat:
Lumina blițului LED Rhythm Music: 9 pași (cu imagini)
Lumina blițului LED Music Rhythm: În acest proiect, vom realiza un circuit de lumină bliț LED Music Rhythm folosind microfonul și BC547 pe panou și PCB, unde luminile cu benzi led vor clipi cu ritmul muzicii. Microfonul va simți ritmul muzicii și va genera un pul electric
Tobias - Arduino Music Box With TVout: 5 pași (cu imagini)
Tobias - Arduino Music Box With TVout: Mai întâi de toate, permiteți-mi să-l prezint pe Tobias, ursuletul uriaș de pluș al iubitei mele, care este inspirația pentru acest proiect. Tobias are o personalitate, construită în timp, în timp ce ne întrebăm în glumă în mintea noastră ce face în timp ce ea este plecată la serviciu. Proiectul a fost
Music Box cu Mini Monitor (OLED) și LED: 8 pași (cu imagini)
Music Box With Mini Monitor (OLED) și LED: Ideea mea a fost o cutie care să redea muzică atunci când o deschideți. De asemenea, are un afișaj cu un emoji care se trezește, salutându-vă. Există, de asemenea, un LED care se aprinde dacă țineți rezistența sensibilă la forță strânsă între degete, în timp ce
Raspberry Pi Music Player: 10 pași (cu imagini)
Raspberry Pi Music Player: Ați venit vreodată acasă și ați dorit ca niște muzică de fundal să se răcească fără să trebuiască să porniți computerul, telefonul sau orice alt dispozitiv? Am spus problema. În următorul instructabil vă arăt conceptul un player de muzică offline funcționează
Lampă de birou Arduino Music Reactive: 8 pași (cu imagini)
Lampă Arduino Music Reactive Desktop: Bună ziua tuturor! În această versiune, vom realiza o lampă reactivă pentru desktop cu LED-uri, utilizând componente simple și câteva programe de bază Arduino. Face un efect impresionant în care lumina va dansa pe toate sunetele și muzica. Am finalizat acest proiect cu un coechipier