Innholdsfortegnelse:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trinn (med bilder)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trinn (med bilder)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trinn (med bilder)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trinn (med bilder)
Video: LG Life’s Good Award : Conference - Full | LG 2024, Juli
Anonim
Image
Image
Kretsdiagram
Kretsdiagram

Dette prosjektet er gjort for emnet Teknologi for konseptdesign ved TUDelft

Sluttproduktet er en ESP-32 LED-lampe og er koblet til serveren. For prototypen har lampen to funksjoner; en regnbueeffekt som avgir en beroligende fargeskiftende glød mot omgivelsene og for det andre lydvisualiserer der LED -pikslene "danser" etter lydnivåer. Systemet er koblet til wifi, og brukeren kan velge hvilken effekt de vil ha fra lampen via WIFI.

Den billige ESP-32-mikrobrikken gir oss kraftige prosessorer, innebygd hallsensor, temperatursensor, berøringssensor og også wifi- og bluetooth-funksjoner. Med dette, mens bare to effekter ble valgt for dette prosjektet, er implikasjonen av denne "smarte" lampen ubegrenset. Det vil bli brukt til å indikere været for brukeren, eller temperaturen i rommet, selve lampen kan fungere som en alarmutløser, eller den kan gi en beroligende sollys ved siden av sengen din som simulerer soloppgang for en hyggelig oppvåkningsopplevelse.

Trinn 1: Nødvendig materiale

Arduino esp32

Lydsensor

Fireveis toveis logisk nivåomformer

Neopixel led 2m 60 led/m

Jumper ledninger

Micro USB -kabel med adapter

Internett-tilkobling

Trinn 2: Kretsdiagram

Et kretsdiagram ble tegnet og kretsen ble laget tilsvarende som angitt i

diagrammet nedenfor.

Trinn 3: Arduino -kode

Her ble det først laget en visualiseringskode. Deretter to eksempler på kode

; "Neoplxel RGBW starndtest"; og “simpleWebServerWifi” ble endret og integrert i visualiseringskoden. Selv om koden til tider fortsatt er buggy (tilfeldige LED lyser av og til). Neste iterasjon av koden (når vi får nok tid) vil bli oppdatert.

#inkludere

#ifdef _AVR_

#inkludere

#slutt om

const int numReadings = 5;

int avlesninger [numReadings];

int readIndex = 0;

int totalt = 0;

int gjennomsnitt = 0;

int micPin = 33;

#definere PIN 4

#define NUM_LEDS 120

#define BRIGHTNESS 100

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

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

#inkludere

#inkludere

char ssid = "dittNettverk"; // nettverks -SSID (navn)

char pass = "secretPassword"; // nettverkspassordet ditt

int keyIndex = 0; // nettverksnøkkelen din Indeksnummer (bare nødvendig for WEP)

int status = WL_IDLE_STATUS;

WiFiServer -server (80);

ugyldig oppsett ()

{

Serial.begin (9600); // initialisere seriell kommunikasjon

pinMode (9, OUTPUT); // angi LED -pin -modus

// sjekk om skjoldet er tilstede:

hvis (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("WiFi -skjold ikke tilstede");

mens (sant); // ikke fortsett

}

String fv = WiFi.firmwareVersion ();

hvis (fv! = "1.1.0") {

Serial.println ("Oppgrader fastvaren");

}

// forsøk på å koble til Wifi -nettverk:

mens (status! = WL_CONNECTED) {

Serial.print ("Forsøk på å koble til nettverk med navn:");

Serial.println (ssid); // skrive ut nettverksnavnet (SSID);

// Koble til WPA/WPA2 -nettverk. Endre denne linjen hvis du bruker åpent eller WEP -nettverk:

status = WiFi.begin (ssid, pass);

// vent 10 sekunder på tilkobling:

forsinkelse (10000);

}

server.begin (); // start webserveren på port 80

printWifiStatus (); // du er tilkoblet nå, så skriv ut statusen

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Initialiser alle piksler til "av"

pinMode (micPin, INPUT);

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

avlesninger [thisReading] = 0;

}

}

ugyldig regnbue (uint8_t vent) {

uint16_t i, j;

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

for (i = 0; i

strip.setPixelColor (i, Wheel ((i+j) & 255));

}

strip.show ();

forsinkelse (vent);

}

}

void visualizer () {

total = total - avlesninger [readIndex];

avlesninger [readIndex] = analogRead (micPin);

total = total + avlesninger [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

gjennomsnitt = total / numReadings;

forsinkelse (1);

int micpixel = (gjennomsnitt-100)/5;

Serial.println (micpixel);

hvis (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 ();

}

}

hvis (micpixel <0) {

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

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

strip.show ();

}

}

void loop () {

{

WiFiClient -klient = server.available (); // lytte etter innkommende klienter

if (klient) {// hvis du får en klient, Serial.println ("ny klient"); // skriv ut en melding ut den serielle porten

String currentLine = ""; // lage en streng for å lagre innkommende data fra klienten

while (client.connected ()) {// loop mens klienten er tilkoblet

if (client.available ()) {// hvis det er byte å lese fra klienten, char c = client.read (); // les en byte, da

Serial.write (c); // Skriv ut den serielle skjermen

if (c == '\ n') {// hvis byten er et nytt linjetegn

// hvis den gjeldende linjen er tom, har du to nylinjetegn på rad.

// det er slutten på klientens HTTP -forespørsel, så send et svar:

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

// HTTP -overskrifter starter alltid med en responskode (f.eks. HTTP/1.1 200 OK)

// og en innholdstype slik at klienten vet hva som kommer, deretter en tom linje:

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

client.println ("Innholdstype: tekst/html");

client.println ();

// innholdet i HTTP -svaret følger overskriften:

client.print ("Klikk her Slå på Rainbow -effekt");

client.print ("Klikk her Slå på Visualizer");

// HTTP -svaret ender med en annen tom linje:

client.println ();

// bryte ut av mens -løkken:

gå i stykker;

} annet {// hvis du har en ny linje, fjern deretter currentLine:

currentLine = "";

}

} annet hvis (c! = '\ r') {// hvis du har noe annet enn en vognretur, currentLine += c; // legg den til slutten av currentLine

}

// Sjekk om klientforespørselen var "GET /H" eller "GET /L":

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

Regnbue (10); // Rainbow -effekt slått på

}

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

Visualizer (); // Visualizer er slått på

}

}

}

// steng tilkoblingen:

client.stop ();

Serial.println ("klient frakoblet");

}

}

void printWifiStatus () {

// Skriv ut SSID for nettverket du er koblet til:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// Skriv ut WiFi -skjoldets IP -adresse:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP -adresse:");

Serial.println (ip);

// Skriv ut mottatt signalstyrke:

lang rssi = WiFi. RSSI ();

Serial.print ("signalstyrke (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// Skriv ut hvor du skal dra i en nettleser:

Serial.print ( For å se denne siden i bruk, åpne en nettleser for

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

hvis (WheelPos <85) {

returlist. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

hvis (WheelPos <170) {

WheelPos -= 85;

returlist. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

returlist. Farge (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t rød (uint32_t c) {

retur (c >> 16);

}

uint8_t grønn (uint32_t c) {

retur (c >> 8);

}

uint8_t blå (uint32_t c) {

retur (c);

}

}

//Serial.println(micpixel);

}

Trinn 4: 3D -utskrift av lampens base

3d Skrive ut lampens base
3d Skrive ut lampens base

En 3d -modell av lampefoten ble målt, designet og skrevet ut med dimensjoner som var store nok til å passe alle elektriske komponenter inne i baserommet.

Trinn 5: Led -vedlegg

LED -vedlegg
LED -vedlegg

Led -er ble viklet i papprull og festet med dobbeltsidig tape, et hull ble boret i den nedre delen for å føre tråden gjennom

Trinn 6: Lampehus

Lampehus
Lampehus

Et kabinett ble laget ved å finne en gjennomsiktig flaske med lignende bredde som lampefoten og høyden som LED -tilbehøret. Dette ble deretter dekket med tykt papir for bedre diffusjon av lys. Alternativt er det mulig å bruke frostet glass eller gjennomskinnelige plastrør som lampehus.

Trinn 7: Oppsett

Oppsett
Oppsett

Alt ble limt sammen og satt sammen. Og lampen var klar for noen tester !.

Anbefalt: