INHOUDSOPGAWE:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 stappe (met foto's)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 stappe (met foto's)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 stappe (met foto's)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 stappe (met foto's)
Video: DSLR - пора мигрировать в беззеркалку? 2024, November
Anonim
Image
Image
Stroombaandiagram
Stroombaandiagram

Hierdie projek word gedoen vir die kursus Tegnologie vir konsepontwerp by die TUDelft

Die finale produk is 'n ESP-32 basis LED-lamp en is aan die bediener gekoppel. Vir die prototipe het die lamp twee funksies; 'n reënboog -effek wat 'n strelende kleur wat na sy omgewing verskuif, uitstraal en tweedens 'n klankvisualiseerder waar die LED -pixels "dans" volgens klankvlakke. Die stelsel is aan wifi gekoppel en die gebruiker kan via WIFI kies watter effek hy van die lamp wil hê.

Die goedkoop ESP-32-mikroskyfie bied ons kragtige verwerkers, ingeboude saalsensor, temperatuursensor, aanraaksensor en ook wifi- en bluetooth-vermoëns. Alhoewel slegs twee effekte vir hierdie projek gekies is, is die implikasie van hierdie 'slim' lamp onbeperk. Dit word gebruik om die weer of die temperatuur van die kamer aan te dui, die lamp self kan 'n alarmskakelaar wees, of dit kan 'n kalmerende sonlig laat skyn langs u bed, wat die sonsopkoms simuleer vir 'n aangename wakker ervaring.

Stap 1: materiaal benodig

Arduino esp32

Klanksensor

Vier-rigting tweerigting-logiese vlakomskakelaar

Neopixel gelei 2m 60 led/m

Springdrade

Mikro -USB -kabel met adapter

internet konneksie

Stap 2: Kringdiagram

'N Skakeldiagram is geteken en die stroombaan is dienooreenkomstig gemaak soos in

die diagram hieronder.

Stap 3: Arduino -kode

Hier is eerstens visualisererskode gemaak. Dan twee voorbeeldkode

; "Neoplxel RGBW starndtest"; en “simpleWebServerWifi” is aangepas en geïntegreer in die visualiseringskode. Alhoewel die kode soms nog steeds karig is (die toevallige LED brand soms). Die volgende herhaling van die kode (sodra ons genoeg tyd kry) sal opgedateer word.

#insluit

#ifdef _AVR_

#insluit

#endif

const int numReadings = 5;

int lesings [numReadings];

int readIndex = 0;

int totaal = 0;

int gemiddelde = 0;

int micPin = 33;

#definieer PIN 4

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

#insluit

#insluit

char ssid = "jou netwerk"; // jou netwerk SSID (naam)

char pass = "secretPassword"; // u netwerkwagwoord

int keyIndex = 0; // jou indeksnommer vir netwerksleutels (slegs nodig vir WEP)

int status = WL_IDLE_STATUS;

WiFiServer -bediener (80);

leemte opstelling ()

{

Serial.begin (9600); // initialiseer reekskommunikasie

pinMode (9, UITGANG); // stel die LED -penmodus in

// kyk na die teenwoordigheid van die skild:

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

Serial.println ("WiFi -skild nie teenwoordig nie");

terwyl (waar); // moenie aangaan nie

}

String fv = WiFi.firmwareVersion ();

as (fv! = "1.1.0") {

Serial.println ("Gradeer asseblief die firmware op");

}

// probeer om aan te sluit op die Wifi -netwerk:

terwyl (status! = WL_CONNECTED) {

Serial.print ("Poging om verbinding te maak met die netwerk genaamd:");

Serial.println (ssid); // druk die netwerknaam (SSID) af;

// Koppel aan WPA/WPA2 -netwerk. Verander hierdie reël as u 'n oop of WEP -netwerk gebruik:

status = WiFi.begin (ssid, pass);

// wag 10 sekondes vir verbinding:

vertraging (10000);

}

bediener.begin (); // begin die webbediener op poort 80

printWifiStatus (); // jy is nou verbind, dus druk die status uit

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Initialiseer alle pixels na 'af'

pinMode (micPin, INPUT);

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

lesings [thisReading] = 0;

}

}

leë reënboog (wag nie) {

uint16_t i, j;

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

vir (i = 0; i

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

}

strip.show ();

vertraag (wag);

}

}

leemte visualiseerder () {

totaal = totaal - lesings [leesIndeks];

lesings [readIndex] = analogRead (micPin);

totaal = totaal + lesings [leesIndeks];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

gemiddelde = totaal / getalLesings;

vertraging (1);

int micpixel = (gemiddelde-100)/5;

Serial.println (mikpixel);

as (mikpixel> 0) {

{

vir (int j = 0; j <= micpixel; j ++)

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

vir (int j = micpixel; j <= NUM_LEDS; j ++)

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

strip.show ();

}

}

as (mikpixel <0) {

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

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

strip.show ();

}

}

leemte -lus () {

{

WiFiClient -kliënt = server.available (); // luister na inkomende kliënte

as (kliënt) {// as u 'n kliënt kry, Serial.println ("nuwe kliënt"); // druk 'n boodskap uit die seriële poort

String currentLine = ""; // maak 'n string om inkomende data van die kliënt te bewaar

terwyl (client.connected ()) {// loop terwyl die kliënt verbind is

if (client.available ()) {// as daar grepe is om van die kliënt af te lees, char c = client.read (); // lees dan 'n greep

Reeks.skryf (c); // druk die seriële monitor uit

if (c == '\ n') {// as die byte 'n nuwe reël is

// as die huidige reël leeg is, het jy twee nuwe reëlkarakters in 'n ry.

// dit is die einde van die HTTP -versoek van die kliënt, so stuur 'n antwoord:

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

// HTTP -opskrifte begin altyd met 'n antwoordkode (bv. HTTP/1.1 200 OK)

// en 'n inhoudstipe sodat die kliënt weet wat kom, dan 'n leë reël:

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

client.println ("Inhoudstipe: teks/html");

client.println ();

// die inhoud van die HTTP -antwoord volg op die opskrif:

client.print ("Klik hier Skakel Rainbow -effek aan");

client.print ("Klik hier Skakel Visualizer aan");

// Die HTTP -antwoord eindig met nog 'n leë reël:

client.println ();

// breek uit die while -lus:

breek;

} anders {// as u 'n nuwe lyn gekry het, maak die huidige lyn skoon:

currentLine = "";

}

} anders as (c! = '\ r') {// as u iets anders het as 'n karretjie, currentLine += c; // voeg dit by aan die einde van die currentLine

}

// Kyk of die kliëntversoek 'GET /H' of 'GET /L' was:

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

Reënboog (10); // Reënboog -effek aangeskakel

}

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

Visualiseerder (); // Visualizer is aangeskakel

}

}

}

// sluit die verbinding:

client.stop ();

Serial.println ("kliënt ontkoppel");

}

}

ongeldig printWifiStatus () {

// druk die SSID van die netwerk waaraan u gekoppel is:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// druk die IP -adres van u WiFi -skild af:

IPAddress ip = WiFi.localIP ();

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

Serial.println (ip);

// druk die ontvangen seinsterkte af:

lang rssi = WiFi. RSSI ();

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

Serial.print (rssi);

Serial.println ("dBm");

// druk waarheen u in 'n blaaier moet gaan:

Serial.print ( Om 'n bladsy in aksie te sien, maak 'n blaaier oop vir

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

as (WheelPos <85) {

retourstrook. Kleur (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

as (WheelPos <170) {

WheelPos -= 85;

retourstrook. Kleur (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

retourstrook. Kleur (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t rooi (uint32_t c) {

terugkeer (c >> 16);

}

uint8_t groen (uint32_t c) {

terugkeer (c >> 8);

}

uint8_t blou (uint32_t c) {

opgawe (c);

}

}

//Serial.println(micpixel);

}

Stap 4: 3D -druk van die basis van die lamp

3D Druk die basis van die lamp af
3D Druk die basis van die lamp af

'N 3D -model van die lampvoet is gemeet, ontwerp en gedruk met afmetings wat groot genoeg is om al die elektriese komponente in die basisvak te pas.

Stap 5: Led Attachment

Led Attachment
Led Attachment

Led's is in kartonrol opgerol en met dubbelzijdige band vasgemaak, 'n gat in die onderste gedeelte geboor om die draad deur te trek

Stap 6: Lampomhulsel

Lampomhulsel
Lampomhulsel

'N Omhulsel is gemaak deur 'n deursigtige bottel met dieselfde breedte as die lampvoet en die hoogte as die LED -aanhangsel te vind. Dit is dan bedek met dik papier vir 'n beter verspreiding van lig. Alternatiewelik is dit moontlik om matglas of deurskynende plastiekbuise as lampomhulsel te gebruik.

Stap 7: Opstel

Stel op
Stel op

Alles is vasgeplak en bymekaargemaak. En die lamp was gereed om te toets!

Aanbeveel: