Sadržaj:

Pametna lampa (TCfD) - Rainbow + Glazbeni vizualizator: 7 koraka (sa slikama)
Pametna lampa (TCfD) - Rainbow + Glazbeni vizualizator: 7 koraka (sa slikama)

Video: Pametna lampa (TCfD) - Rainbow + Glazbeni vizualizator: 7 koraka (sa slikama)

Video: Pametna lampa (TCfD) - Rainbow + Glazbeni vizualizator: 7 koraka (sa slikama)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Srpanj
Anonim
Image
Image
Kružni dijagram
Kružni dijagram

Ovaj je projekt urađen za kolegij Tehnologija za idejno projektiranje na TUDelftu

Konačni proizvod je osnovna LED svjetiljka ESP-32 i spojena je na poslužitelj. Za prototip, svjetiljka ima dvije funkcije; efekt duge koji emitira umirujući sjaj koji mijenja boju prema okolini i drugo vizualizator zvuka gdje LED pikseli "plešu" prema razinama zvuka. Sustav je spojen na wifi i korisnik može izabrati željeni učinak lampe putem WIFI -ja.

Jeftini mikročip ESP-32 pruža nam moćne procesore, ugrađeni senzor hodnika, osjetnik temperature, osjetnik na dodir, a također i mogućnost WiFi i bluetooth. Time su, iako su za ovaj projekt odabrana samo dva učinka, implikacija ove „pametne“lampe neograničena. Koristio bi se za označavanje vremena korisniku ili temperature prostorije, sama svjetiljka može djelovati kao okidač alarma ili može dati smirujući sjaj sunčeve svjetlosti pored vašeg kreveta simulirajući izlazak sunca za ugodan doživljaj buđenja.

Korak 1: Potreban materijal

Arduino esp32

Senzor zvuka

Četverosmjerni dvosmjerni pretvarač logičke razine

Neopixel LED 2m 60 led/m

Kratkospojne žice

Mikro USB kabel s adapterom

priključak za internet

Korak 2: Dijagram kruga

Nacrtan je dijagram kruga i prema tome je napravljeno kolo kako je dano u

donji dijagram.

Korak 3: Arduino kod

Ovdje je prvo napravljen kod vizualizatora. Zatim, dva primjera koda

; "Neoplxel RGBW starndtest"; i "simpleWebServerWifi" je izmijenjen i integriran unutar koda vizualizatora. Iako je kod s vremena na vrijeme još uvijek neispravan (nasumično LED svjetlo se pali s vremena na vrijeme). Sljedeća iteracija koda (kad dobijemo dovoljno vremena) bit će ažurirana.

#uključi

#ifdef _AVR_

#uključi

#završi ako

const int numReadings = 5;

int očitanja [numReadings];

int readIndex = 0;

int ukupno = 0;

int prosjek = 0;

int micPin = 33;

#definirajte PIN 4

#define NUM_LEDS 120

#definirajte SVJETLOST 100

Adafruit_NeoPixel traka = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

bajt 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 };

#uključi

#uključi

char ssid = "vaša mreža"; // vaš mrežni SSID (naziv)

char pass = "secretPassword"; // vašu mrežnu lozinku

int keyIndex = 0; // vaš indeksni broj ključa mreže (potreban samo za WEP)

int status = WL_IDLE_STATUS;

WiFiServer poslužitelj (80);

void setup ()

{

Serial.begin (9600); // inicijalizacija serijske komunikacije

pinMode (9, OUTPUT); // postavljanje LED pin načina rada

// provjeriti prisutnost štita:

if (WiFi.status () == WL_NO_SHIELD) {{100} {101}

Serial.println ("WiFi štit nije prisutan");

while (istina); // ne nastavljaj

}

Niz fv = WiFi.firmwareVersion ();

if (fv! = "1.1.0") {

Serial.println ("Molimo nadogradite firmver");

}

// pokušaj povezivanja na Wifi mrežu:

while (status! = WL_CONNECTED) {

Serial.print ("Pokušaj povezivanja na mrežu pod nazivom:");

Serijski.println (ssid); // ispisati naziv mreže (SSID);

// Povezivanje na WPA/WPA2 mrežu. Promijenite ovaj redak ako koristite otvorenu ili WEP mrežu:

status = WiFi.početak (ssid, prolaz);

// pričekajte 10 sekundi za povezivanje:

kašnjenje (10000);

}

server.begin (); // pokretanje web poslužitelja na portu 80

printWifiStatus (); // sada ste povezani pa ispišite status

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Pokretanje svih piksela na "isključeno"

pinMode (micPin, INPUT);

for (int thisReading = 0; thisReading <numReadings; thisReading ++) {

očitanja [thisReading] = 0;

}

}

void rainbow (uint8_t wait) {

uint16_t i, j;

za (j = 0; j <256; j ++) {

za (i = 0; i

strip.setPixelColor (i, kotačić ((i+j) & 255));

}

strip.show ();

odgoda (čekanje);

}

}

vizualizator praznina () {

ukupno = ukupno - očitanja [readIndex];

očitanja [readIndex] = analogRead (micPin);

ukupno = ukupno + očitanja [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {{100} {101}

readIndex = 0;

}

prosjek = ukupno / brojReadings;

odgoda (1);

int mikropiksela = (prosječno-100)/5;

Serijski.println (miksela);

if (miksela> 0) {

{

za (int j = 0; j <= mikpiksela; j ++)

strip.setPixelColor (j, (mik. piksela*2), 0, (90-mik. piksela), 0);

za (int j = mikropiksela; j <= NUM_LEDS; j ++)

strip.setPixelColor (j, 0, 0, 0, 0);

strip.show ();

}

}

if (miksela <0) {

za (int j = 0; j <= 20; j ++)

strip.setPixelColor (j, 0, 0, 50, 0);

strip.show ();

}

}

void loop () {{100} {101}

{

WiFiClient klijent = server.available (); // osluškivati dolazne klijente

if (client) {// ako dobijete klijenta, Serial.println ("novi klijent"); // ispis poruke putem serijskog porta

Niz currentLine = ""; // napraviti niz za čuvanje dolaznih podataka od klijenta

while (client.connected ()) {// petlja dok je klijent povezan

if (client.available ()) {// ako ima bajtova za čitanje s klijenta, char c = client.read (); // tada pročitajte bajt

Serial.write (c); // ispisati serijski monitor

if (c == '\ n') {// ako je bajt znak novog retka

// ako je trenutni redak prazan, imate dva znaka novog reda zaredom.

// to je kraj HTTP zahtjeva klijenta, pa pošaljite odgovor:

if (currentLine.length () == 0) {

// HTTP zaglavlja uvijek počinju kodom odgovora (npr. HTTP/1.1 200 OK)

// i vrstu sadržaja kako bi klijent znao što dolazi, a zatim prazan redak:

client.println ("HTTP/1.1 200 OK");

client.println ("Vrsta sadržaja: tekst/html");

client.println ();

// sadržaj HTTP odgovora slijedi zaglavlje:

client.print ("Kliknite ovdje Uključi Rainbow efekt");

client.print ("Kliknite ovdje Uključi vizualizator");

// HTTP odgovor završava drugim praznim retkom:

client.println ();

// probiti se iz while petlje:

pauza;

} else {// ako imate novi redak, izbrišite currentLine:

currentLine = "";

}

} else if (c! = '\ r') {// ako imate bilo što drugo osim znaka za vraćanje nosača, currentLine += c; // dodamo ga na kraj trenutne linije

}

// Provjerite je li zahtjev klijenta "GET /H" ili "GET /L":

if (currentLine.endsWith ("GET /R")) {

Duga (10); // Uključen efekt duge

}

if (currentLine.endsWith ("GET /V")) {

Vizualizator (); // Vizualizator je uključen

}

}

}

// prekida vezu:

client.stop ();

Serial.println ("klijent nije povezan");

}

}

void printWifiStatus () {

// ispisati SSID mreže na koju ste povezani:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// ispisati IP adresu vašeg WiFi štita:

IP adresa ip = WiFi.localIP ();

Serial.print ("IP adresa:");

Serijski.println (ip);

// ispisuje snagu primljenog signala:

dugi rssi = WiFi. RSSI ();

Serial.print ("snaga signala (RSSI):");

Serijski.ispis (rssi);

Serial.println ("dBm");

// ispisati gdje ići u pregledniku:

Serial.print ( Da biste vidjeli ovu stranicu na djelu, otvorite preglednik na

Serijski.println (ip);

}

}

uint32_t kotač (byte WheelPos) {

WheelPos = 255 - WheelPos;

if (WheelPos <85) {

povratna traka. Boja (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

if (WheelPos <170) {

WheelPos -= 85;

povratna traka. Boja (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

povratna traka. Boja (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t crveno (uint32_t c) {

return (c >> 16);

}

uint8_t zelena (uint32_t c) {

return (c >> 8);

}

uint8_t plavo (uint32_t c) {

return (c);

}

}

//Serial.println(micpixel);

}

Korak 4: 3D ispis baze svjetiljke

3D ispis baze svjetiljke
3D ispis baze svjetiljke

3D model baze svjetiljke je izmjeren, dizajniran i ispisan s dimenzijama dovoljno velikim da stanu u sve električne komponente unutar pretinca za bazu.

Korak 5: Led prilog

Led prilog
Led prilog

Led -ovi su namotani u kartonsku rolu i pričvršćeni dvostranom trakom, a u donjem dijelu izbušena je rupa za prolazak žice

Korak 6: Kućište lampe

Kućište lampe
Kućište lampe

Ograđivanje je napravljeno pronalaskom prozirne boce slične širine kao dno lampe i visine kao LED nastavak. Zatim je prekriven debelim papirom radi bolje difuzije svjetlosti. Alternativno, moguće je upotrijebiti matirano staklo ili prozirne plastične cijevi kao kućište svjetiljke.

Korak 7: Postavljanje

Postaviti
Postaviti

Sve je bilo zalijepljeno i sastavljeno. I lampa je bila spremna za neka testiranja !.

Preporučeni: