Sisällysluettelo:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 vaihetta (kuvilla)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 vaihetta (kuvilla)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 vaihetta (kuvilla)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 vaihetta (kuvilla)
Video: LG Life’s Good Award : Conference - Full | LG 2024, Heinäkuu
Anonim
Image
Image
Piirikaavio
Piirikaavio

Tämä projekti on tehty kurssille Technology for Concept Design TUDelftissä

Lopputuote on ESP-32-pohjainen LED-lamppu, joka on kytketty palvelimeen. Prototyyppiä varten lampulla on kaksi toimintoa; sateenkaaritehoste, joka lähettää rauhoittavaa värinsiirtoa kohti ympäristöään ja toiseksi äänen visualisoija, jossa LED -pikselit "tanssivat" äänitason mukaan. Järjestelmä on yhdistetty wifi -verkkoon ja käyttäjä voi valita lampusta haluamansa tehon WIFI -yhteyden kautta.

Halpa ESP-32-mikrosiru tarjoaa meille tehokkaita suorittimia, sisäänrakennetun hallitunnistimen, lämpötila-anturin, kosketusanturin sekä wifi- ja bluetooth-ominaisuuden. Vaikka tähän projektiin valittiin vain kaksi tehostetta, tämän”älykkään” lampun vaikutus on rajaton. Sitä käytetään ilmoittamaan käyttäjälle säästä tai huoneen lämpötilasta, lamppu itsessään voi toimia hälytyksen laukaisimena tai se voi antaa rauhoittavan auringonvalon sängyn vieressä simuloimalla auringonnousua mukavan herätyskokemuksen saavuttamiseksi.

Vaihe 1: Tarvittava materiaali

Arduino esp32

Äänianturi

Nelisuuntainen kaksisuuntainen logiikan tasomuunnin

Neopixel led 2m 60 led/m

Hyppyjohdot

Micro -USB -kaapeli sovittimella

Internet-yhteys

Vaihe 2: Piirikaavio

Piirustuskaavio piirrettiin ja piiri tehtiin sen mukaisesti, kuten on annettu

alla oleva kaavio.

Vaihe 3: Arduino -koodi

Tässä tehtiin ensin visualisointikoodi. Sitten kaksi esimerkkikoodia

; "Neoplxel RGBW starndtest"; ja "simpleWebServerWifi" muutettiin ja integroitiin visualisointikoodiin. Vaikka koodi on edelleen ajoittain viallinen (satunnaisen ledin valo syttyy ajoittain). Seuraava koodin iterointi (kun saamme tarpeeksi aikaa) päivitetään.

#sisältää

#ifdef _AVR_

#sisältää

#loppu Jos

const int numReadings = 5;

int lukemat [numReadings];

int readIndex = 0;

int yhteensä = 0;

int keskiarvo = 0;

int micPin = 33;

#määritä PIN 4

#määrittele NUM_LEDS 120

#määrittele KIRKKAUS 100

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

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

#sisältää

#sisältää

char ssid = "oma verkko"; // verkkosi SSID (nimi)

char pass = "secretPassword"; // verkkosi salasana

int keyIndex = 0; // verkkoavaimesi Indeksinumero (tarvitaan vain WEP: lle)

int -tila = WL_IDLE_STATUS;

WiFi -palvelinpalvelin (80);

mitätön asennus ()

{

Sarja.alku (9600); // sarjaliikenteen alustaminen

pinMode (9, LÄHTÖ); // aseta LED -nastatila

// tarkista kilven läsnäolo:

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

Serial.println ("WiFi -suojaa ei ole");

kun taas (totta); // älä jatka

}

Merkkijono fv = WiFi.firmwareVersion ();

jos (fv! = "1.1.0") {

Serial.println ("Päivitä laiteohjelmisto");

}

// yritä muodostaa yhteys Wifi -verkkoon:

while (tila! = WL_CONNECTED) {

Serial.print ("Yritetään muodostaa yhteys verkkoon nimeltä:");

Sarja.println (ssid); // tulosta verkon nimi (SSID);

// Yhdistä WPA/WPA2 -verkkoon. Vaihda tämä rivi, jos käytät avointa tai WEP -verkkoa:

tila = WiFi.begin (ssid, pass);

// odota 10 sekuntia yhteyden muodostamiseen:

viive (10000);

}

server.begin (); // käynnistä verkkopalvelin portista 80

printWifiStatus (); // olet nyt yhteydessä, joten tulosta tila

}

{

Sarja.alku (9600);

strip.setBrightness (KIRKKAUS);

strip.begin ();

strip.show (); // Alusta kaikki pikselit pois päältä

pinMode (micPin, INPUT);

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

lukemat [thisReading] = 0;

}

}

mitätön sateenkaari (uint8_t wait) {

uint16_t i, j;

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

varten (i = 0; i

strip.setPixelColor (i, Pyörä ((i+j) & 255));

}

strip.show ();

viive (odota);

}

}

void visualizer () {

yhteensä = yhteensä - lukemat [readIndex];

lukemat [readIndex] = analoginen lukema (micPin);

yhteensä = yhteensä + lukemat [readIndex];

readIndex = lukuindeksi + 1;

if (readIndex> = numReadings) {

lukuindeksi = 0;

}

keskiarvo = yhteensä / lukemattomat lukemat;

viive (1);

int mikpikseli = (keskiarvo-100)/5;

Serial.println (mikropikseli);

jos (mikropikseli> 0) {

{

(int j = 0; j <= mikropikseli; j ++)

strip.setPixelColor (j, (mikropikseli*2), 0, (90 mikropikseliä), 0);

(int j = mikropikseli; j <= NUM_LEDS; j ++)

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

strip.show ();

}

}

jos (mikropikseli <0) {

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

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

strip.show ();

}

}

void loop () {

{

WiFiClient -asiakas = server.available (); // kuuntele saapuvia asiakkaita

if (client) {// jos saat asiakkaan, Serial.println ("uusi asiakas"); // tulosta viesti sarjaportista

Merkkijono currentLine = ""; // tee merkkijono pitääksesi asiakkaan saapuvat tiedot

while (client.connected ()) {// silmukka, kun asiakas on yhteydessä

if (client.available ()) {// jos tavulta on luettavissa tavua, char c = asiakas.luku (); // lue sitten tavu

Serial.write (c); // tulosta se sarjamonitorista

if (c == '\ n') {// jos tavu on uuden rivin merkki

// jos nykyinen rivi on tyhjä, sinulla on kaksi uuden rivin merkkiä peräkkäin.

// se on asiakkaan HTTP -pyynnön loppu, joten lähetä vastaus:

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

// HTTP -otsikot alkavat aina vastauskoodilla (esim. HTTP/1.1 200 OK)

// ja sisältötyyppi, jotta asiakas tietää mitä on tulossa, sitten tyhjä rivi:

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

client.println ("Sisältötyyppi: teksti/html");

client.println ();

// HTTP -vastauksen sisältö seuraa otsikkoa:

client.print ("Napsauta tätä Ota Rainbow -tehoste käyttöön");

client.print ("Napsauta tätä Käynnistä visualisoija");

// HTTP -vastaus päättyy toiseen tyhjään riviin:

client.println ();

// murtautua while -silmukasta:

tauko;

} else {// jos sinulla on uusi rivi, poista currentLine:

currentLine = "";

}

} else if (c! = '\ r') {// jos sinulla on muuta kuin vaunun palautusmerkki, currentLine += c; // lisää se nykyisen rivin loppuun

}

// Tarkista, onko asiakaspyyntö "GET /H" tai "GET /L":

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

Sateenkaari (10); // Sateenkaaritehoste käytössä

}

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

Visualisoija (); // Visualizer on päällä

}

}

}

// sulje yhteys:

client.stop ();

Serial.println ("asiakas katkaistu");

}

}

void printWifiStatus () {

// tulosta sen verkon SSID, johon olet liitetty:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// tulosta WiFi -kilven IP -osoite:

IPAdd ip = WiFi.localIP ();

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

Sarja.println (ip);

// tulostaa vastaanotetun signaalin voimakkuuden:

pitkä rssi = WiFi. RSSI ();

Serial.print ("signaalin voimakkuus (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// tulosta minne mennä selaimessa:

Serial.print ( Jos haluat nähdä tämän sivun toiminnassa, avaa selain osoitteeseen

Sarja.println (ip);

}

}

uint32_t Wheel (tavu WheelPos) {

WheelPos = 255 - WheelPos;

jos (WheelPos <85) {

palautusliuska. Väri (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

jos (WheelPos <170) {

WheelPos -= 85;

palautusliuska. Väri (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

palautusliuska. Väri (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t punainen (uint32_t c) {

paluu (c >> 16);

}

uint8_t vihreä (uint32_t c) {

paluu (c >> 8);

}

uint8_t sininen (uint32_t c) {

palautus (c);

}

}

//Sarja.println (mikropikseli);

}

Vaihe 4: 3d -lampun pohjan tulostaminen

3d Lampun pohjan tulostaminen
3d Lampun pohjan tulostaminen

Lampun pohjan kolmiulotteinen malli mitattiin, suunniteltiin ja painettiin riittävän suurilla mitoilla, jotta se mahtuu kaikkiin sähköosiin pohjaosan sisällä.

Vaihe 5: LED -lisälaite

LED -lisälaite
LED -lisälaite

Ledit käärittiin pahvirullaan ja kiinnitettiin kaksipuolisella teipillä, alaosaan porattiin reikä langan johtamiseksi

Vaihe 6: Lampun kotelo

Lampun kotelo
Lampun kotelo

Kotelo tehtiin etsimällä läpinäkyvä pullo, jonka leveys oli samanlainen kuin lampun kanta ja korkeus kuin LED -kiinnike. Tämä peitettiin sitten paksulla paperilla paremman valon leviämisen vuoksi. Vaihtoehtoisesti lampun kotelona on mahdollista käyttää himmeää lasia tai läpikuultavia muoviputkia.

Vaihe 7: Asennus

Perustaa
Perustaa

Kaikki liimattiin yhteen ja koottiin. Ja lamppu oli valmis testaukseen !.

Suositeltava: