Indholdsfortegnelse:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trin (med billeder)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trin (med billeder)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trin (med billeder)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trin (med billeder)
Video: LG Life’s Good Award : Conference - Full | LG 2024, December
Anonim
Image
Image
Kredsløbsdiagram
Kredsløbsdiagram

Dette projekt udføres på kurset Teknologi til konceptdesign på TUDelft

Det endelige produkt er en ESP-32 base LED-lampe og er forbundet til serveren. Til prototypen har lampen to funktioner; en regnbueeffekt, der udsender en beroligende farveskiftende glød mod sine omgivelser og for det andet lydvisualisator, hvor LED -pixels "danser" efter lydniveauer. Systemet er forbundet til wifi, og brugeren kan vælge, hvilken effekt de ønsker fra lampen via WIFI.

Den billige ESP-32 mikrochip giver os kraftfulde processorer, indbygget hall-sensor, temperatursensor, berøringssensor og også wifi og bluetooth-kapacitet. Med dette, mens kun to effekter blev valgt til dette projekt, er implikationen af denne "smarte" lampe ubegrænset. Det ville blive brugt til at angive vejret for brugeren eller temperaturen i rummet, selve lampen kan fungere som en alarmudløser, eller det kan give et beroligende sollys ved siden af din seng og simulere solopgang for en dejlig vågneoplevelse.

Trin 1: Nødvendigt materiale

Arduino esp32

Lydsensor

Firevejs tovejs logisk niveauomformer

Neopixel LED 2m 60 LED/m

Jumper ledninger

Micro USB -kabel med adapter

internetforbindelse

Trin 2: Kredsløbsdiagram

Et kredsløbsdiagram blev tegnet, og kredsløbet blev lavet i overensstemmelse hermed som angivet i

diagrammet herunder.

Trin 3: Arduino -kode

Her blev der for det første lavet en visualisererkode. Derefter to eksempler på kode

; "Neoplxel RGBW starndtest"; og “simpleWebServerWifi” blev ændret og integreret i visualiseringskoden. Selvom koden til tider stadig er buggy (tilfældig LED lyser af og til). Næste iteration af koden (når vi får nok tid) vil blive opdateret.

#omfatte

#ifdef _AVR_

#omfatte

#Afslut Hvis

const int numReadings = 5;

int aflæsninger [numReadings];

int readIndex = 0;

int total = 0;

int gennemsnit = 0;

int micPin = 33;

#definer pinkode 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 };

#omfatte

#omfatte

char ssid = "dit netværk"; // dit netværks -SSID (navn)

char pass = "secretPassword"; // din netværksadgangskode

int keyIndex = 0; // din netværksnøgle Indeksnummer (kun nødvendigt for WEP)

int status = WL_IDLE_STATUS;

WiFiServer -server (80);

ugyldig opsætning ()

{

Serial.begin (9600); // initialisere seriel kommunikation

pinMode (9, OUTPUT); // indstil LED pin -tilstand

// tjek for skjoldets tilstedeværelse:

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

Serial.println ("WiFi -skjold ikke til stede");

mens (sandt); // ikke fortsætte

}

String fv = WiFi.firmwareVersion ();

hvis (fv! = "1.1.0") {

Serial.println ("Opgrader venligst firmwaren");

}

// forsøg på at oprette forbindelse til Wifi -netværk:

mens (status! = WL_CONNECTED) {

Serial.print ("Forsøger at oprette forbindelse til netværk navngivet:");

Serial.println (ssid); // udskriv netværksnavnet (SSID);

// Opret forbindelse til WPA/WPA2 -netværk. Skift denne linje, hvis du bruger åbent eller WEP -netværk:

status = WiFi.begin (ssid, pass);

// vent 10 sekunder på forbindelse:

forsinkelse (10000);

}

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

printWifiStatus (); // du har forbindelse nu, så udskriv status

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Initialiser alle pixels til 'off'

pinMode (micPin, INPUT);

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

aflæsninger [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 - aflæsninger [readIndex];

aflæsninger [readIndex] = analogRead (micPin);

total = total + aflæsninger [readIndex];

readIndex = readIndex + 1;

hvis (readIndex> = numReadings) {

readIndex = 0;

}

gennemsnit = total / numReadings;

forsinkelse (1);

int micpixel = (gennemsnit-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 (); // lyt efter indgående klienter

hvis (klient) {// hvis du får en klient, Serial.println ("ny klient"); // udskriv en besked ud af den serielle port

String currentLine = ""; // lav en streng for at gemme indgående data fra klienten

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

if (client.available ()) {// hvis der er bytes at læse fra klienten, char c = client.read (); // læs en byte

Serial.write (c); // udskriv den serielle skærm

hvis (c == '\ n') {// hvis byte er et nyt linjetegn

// hvis den aktuelle linje er tom, har du to newline -tegn i træk.

// det er slutningen på klientens HTTP -anmodning, så send et svar:

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

// HTTP -headere starter altid med en svarskode (f.eks. HTTP/1.1 200 OK)

// og en indholdstype, så klienten ved, hvad der kommer, derefter en tom linje:

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

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

client.println ();

// indholdet af HTTP -svaret følger overskriften:

client.print ("Klik her Slå Rainbow -effekt til");

client.print ("Klik her Slå Visualizer til");

// HTTP -svaret slutter med endnu en tom linje:

client.println ();

// bryde ud af mens loop:

pause;

} ellers {// hvis du har en ny linje, skal du rydde currentLine:

currentLine = "";

}

} ellers hvis (c! = '\ r') {// hvis du har andet end en vognretur, currentLine += c; // tilføj det til slutningen af currentLine

}

// Kontroller, om klientanmodningen var "GET /H" eller "GET /L":

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

Regnbue (10); // Rainbow -effekt slået til

}

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

Visualizer (); // Visualizer er slået til

}

}

}

// luk forbindelsen:

client.stop ();

Serial.println ("klient afbrudt");

}

}

void printWifiStatus () {

// udskriv SSID for det netværk, du er knyttet til:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// udskriv dit WiFi -skjolds IP -adresse:

IPAddress ip = WiFi.localIP ();

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

Serial.println (ip);

// udskriv den modtagne signalstyrke:

lang rssi = WiFi. RSSI ();

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

Serial.print (rssi);

Serial.println ("dBm");

// print hvor du skal hen i en browser:

Serial.print ( For at se denne side i aktion skal du åbne en browser til

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

hvis (WheelPos <85) {

returstrimmel. Farve (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

hvis (WheelPos <170) {

WheelPos -= 85;

returstrimmel. Farve (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

returstrimmel. Farve (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t rød (uint32_t c) {

retur (c >> 16);

}

uint8_t grøn (uint32_t c) {

retur (c >> 8);

}

uint8_t blå (uint32_t c) {

retur (c);

}

}

//Serial.println(micpixel);

}

Trin 4: 3d Udskrivning af lampens bund

3d Udskrivning af lampens bund
3d Udskrivning af lampens bund

En 3d -model af lampefoden blev målt, designet og printet med dimensioner, der var store nok til at passe til alle de elektriske komponenter inde i bundrummet.

Trin 5: Led vedhæftet fil

Led vedhæftet fil
Led vedhæftet fil

Led’er blev viklet i paprulle og fastgjort ved hjælp af dobbeltsidet tape, der blev boret et hul i den nederste del for at føre tråden igennem

Trin 6: Lampeindkapsling

Lampe kabinet
Lampe kabinet

Et kabinet blev lavet ved at finde en gennemsigtig flaske med lignende bredde som lampefod og højde som LED -vedhæftet fil. Dette blev derefter dækket med tykt papir for bedre diffusion af lys. Alternativt er det muligt at bruge frostet glas eller gennemsigtige plastrør som lampeindretning.

Trin 7: Opsætning

Opsætning
Opsætning

Alt blev limet sammen og samlet. Og lampen var klar til nogle test !.

Anbefalede: