Cuprins:

Lampă inteligentă (TCfD) - Vizualizator Rainbow + Music: 7 pași (cu imagini)
Lampă inteligentă (TCfD) - Vizualizator Rainbow + Music: 7 pași (cu imagini)

Video: Lampă inteligentă (TCfD) - Vizualizator Rainbow + Music: 7 pași (cu imagini)

Video: Lampă inteligentă (TCfD) - Vizualizator Rainbow + Music: 7 pași (cu imagini)
Video: Lampa inteligenta UV bactericida 2024, Noiembrie
Anonim
Image
Image
Diagrama circuitului
Diagrama circuitului

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

Imprimarea 3D a bazei lămpii
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

Atașament Led
Atașament 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

Incinta lampii
Incinta lampii

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

Înființat
Înființat

Totul era lipit și asamblat. Și lampa era gata pentru niște teste !.

Recomandat: