Sadržaj:

Pametna lampa (TCfD) - Rainbow + muzički vizualizator: 7 koraka (sa slikama)
Pametna lampa (TCfD) - Rainbow + muzički vizualizator: 7 koraka (sa slikama)

Video: Pametna lampa (TCfD) - Rainbow + muzički vizualizator: 7 koraka (sa slikama)

Video: Pametna lampa (TCfD) - Rainbow + muzički vizualizator: 7 koraka (sa slikama)
Video: MUZICKA ZVECKA SA PROJEKTOROM ZA DECU | IGRACKEZADECU.INFO 2024, Juli
Anonim
Image
Image
Dijagram kola
Dijagram kola

Ovaj projekat je urađen za predmet Tehnologija za konceptualni dizajn na TUDelft -u

Konačni proizvod je osnovna LED lampa ESP-32 i povezana je sa serverom. Za prototip, lampa ima dvije funkcije; efekat duge koji emituje umirujući sjaj koji menja boju prema okolini i drugo vizualizator zvuka gde LED pikseli „plešu“u skladu sa nivoima zvuka. Sistem je spojen na wifi i korisnik može izabrati željeni efekat lampe putem WIFI -ja.

Jeftini mikročip ESP-32 pruža nam moćne procesore, ugrađeni senzor hodnika, senzor temperature, senzor dodira, kao i mogućnost WiFi i bluetooth. Ovim, iako su za ovaj projekt odabrana samo dva efekta, implikacija ove „pametne“lampe je neograničena. Koristilo bi se za označavanje vremena korisniku ili temperature prostorije, sama lampa 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 ugodno iskustvo buđenja.

Korak 1: Potreban materijal

Arduino esp32

Senzor zvuka

Četverosmjerni dvosmjerni pretvarač logičkih nivoa

Neopixel LED 2m 60 LED/m

Žice za kratkospojnike

Mikro USB kabl sa adapterom

priključak za internet

Korak 2: Dijagram kola

Dijagram kola je nacrtan i kolo je napravljeno prema tome kako je dato 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 u kod 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 (kada dobijemo dovoljno vremena) bit će ažurirana.

#include

#ifdef _AVR_

#include

#endif

const int numReadings = 5;

int očitanja [numReadings];

int readIndex = 0;

int ukupno = 0;

int prosjek = 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);

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

#include

#include

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

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 server (80);

void setup ()

{

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

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

// provjerite 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:");

Serial.println (ssid); // ispisuje naziv mreže (SSID);

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

status = WiFi.begin (ssid, pass);

// čekati 10 sekundi na vezu:

kašnjenje (10000);

}

server.begin (); // pokrećemo web server 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čitavanja [thisReading] = 0;

}

}

void rainbow (uint8_t wait) {

uint16_t i, j;

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

za (i = 0; i

strip.setPixelColor (i, Točak ((i+j) & 255));

}

strip.show ();

kašnjenje (čekanje);

}

}

vizualizator praznina () {

ukupno = ukupno - očitanja [readIndex];

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

ukupno = ukupno + očitavanja [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

prosek = ukupno / brojČitanja;

kašnjenje (1);

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

Serial.println (mikpiksela);

if (mik. piksela> 0) {

{

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

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

za (int j = mikpiksela; 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škivanje dolaznih klijenata

if (client) {// ako dobijete klijenta, Serial.println ("novi klijent"); // ispisuje poruku sa serijskog porta

String 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 sa klijenta, char c = client.read (); // tada čitajte bajt

Serial.write (c); // odštampajte serijski monitor

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

// ako je trenutni red 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 tip sadržaja kako bi klijent znao šta dolazi, zatim prazan red:

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 još jednim praznim redom:

client.println ();

// probiti se iz while petlje:

break;

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

currentLine = "";

}

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

}

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

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

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

}

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

Vizualizator (); // Vizualizator je uključen

}

}

}

// zatvorite vezu:

client.stop ();

Serial.println ("klijent nije povezan");

}

}

void printWifiStatus () {

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

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

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

IP adresa ip = WiFi.localIP ();

Serial.print ("IP adresa:");

Serial.println (ip);

// ispisuje jačinu primljenog signala:

long rssi = WiFi. RSSI ();

Serial.print ("jačina signala (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// ispisati gdje ići u pregledniku:

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

Serial.println (ip);

}

}

uint32_t Wheel (bajt 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 štampanje osnove lampe

3D štampanje baze lampe
3D štampanje baze lampe

3D model osnove lampe je izmjeren, dizajniran i odštampan sa dimenzijama dovoljno velikim da stanu u sve električne komponente unutar pretinca za bazu.

Korak 5: Led dodatak

Led Attachment
Led Attachment

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

Kućište je napravljeno pronalaskom prozirne boce slične širine kao osnova lampe i visine kao LED dodatak. Ovo je zatim prekriveno debelim papirom radi bolje difuzije svjetlosti. Alternativno, moguće je upotrijebiti matirano staklo ili prozirne plastične cijevi kao kućište lampe.

Korak 7: Postavljanje

Postaviti
Postaviti

Sve je bilo zalijepljeno i sastavljeno. I lampa je bila spremna za neko testiranje !.

Preporučuje se: