Obsah:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 kroků (s obrázky)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 kroků (s obrázky)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 kroků (s obrázky)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 kroků (s obrázky)
Video: LG Life’s Good Award : Conference - Full | LG 2024, Červenec
Anonim
Image
Image
Kruhový diagram
Kruhový diagram

Tento projekt je zpracován pro kurz Technologie pro koncepční design na TUDelftu

Konečným produktem je základní LED kontrolka ESP-32 a je připojena k serveru. U prototypu má lampa dvě funkce; duhový efekt, který vydává uklidňující záři měnící barvu směrem ke svému okolí a za druhé zvukový vizualizér, kde pixely LED „tančí“podle úrovní zvuku. Systém je připojen k wifi a uživatel si může pomocí WIFI vybrat, jaký efekt od lampy chce.

Levný mikročip ESP-32 nám poskytuje výkonné procesory, vestavěný Hallov senzor, teplotní senzor, dotykový senzor a také možnosti wifi a bluetooth. S tímto, Zatímco pro tento projekt byly vybrány pouze dva efekty, implikace této „chytré“lampy je neomezená. Slouží k indikaci počasí uživateli nebo teploty v místnosti, samotná lampa může fungovat jako spoušť alarmu nebo může poskytnout uklidňující záři slunečního světla vedle vaší postele simulující východ slunce pro příjemný zážitek z probuzení.

Krok 1: Potřebný materiál

Arduino esp32

Zvukový senzor

Čtyřcestný obousměrný převodník logické úrovně

Neopixelová LED 2m 60 LED/m

Propojovací vodiče

Micro USB kabel s adaptérem

připojení k internetu

Krok 2: Schéma zapojení

Bylo nakresleno schéma zapojení a podle toho bylo provedeno zapojení

níže uvedený diagram.

Krok 3: Arduino kód

Zde byl nejprve vytvořen kód vizualizátoru. Potom dva ukázkové kódy

; „Hvězdný test neoplxel RGBW“; a „simpleWebServerWifi“bylo upraveno a integrováno do kódu vizualizátoru. Přestože je kód občas stále chybný (čas od času se rozsvítí náhodné LED). Další iterace kódu (jakmile získáme dostatek času) bude aktualizována.

#zahrnout

#ifdef _AVR_

#zahrnout

#endif

const int numReadings = 5;

int čtení [numReadings];

int readIndex = 0;

int celkem = 0;

int průměr = 0;

int micPin = 33;

#definovat PIN 4

#define NUM_LEDS 120

#define BRIGHTNESS 100

Proužek Adafruit_NeoPixel = 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 };

#zahrnout

#zahrnout

char ssid = "vaše Síť"; // SSID vaší sítě (název)

char pass = "secretPassword"; // vaše síťové heslo

int keyIndex = 0; // váš síťový klíč Indexové číslo (potřebné pouze pro WEP)

int status = WL_IDLE_STATUS;

Server WiFiServer (80);

neplatné nastavení ()

{

Serial.begin (9600); // inicializace sériové komunikace

pinMode (9, VÝSTUP); // nastavení režimu pin LED

// zkontrolujte přítomnost štítu:

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

Serial.println („WiFi štít není k dispozici“);

while (true); // nepokračuj

}

Řetězec fv = WiFi.firmwareVersion ();

if (fv! = "1.1.0") {

Serial.println („Upgradujte firmware“);

}

// pokus o připojení k síti Wifi:

while (status! = WL_CONNECTED) {

Serial.print ("Pokus o připojení k síti s názvem:");

Serial.println (ssid); // vytiskněte název sítě (SSID);

// Připojení k síti WPA/WPA2. Pokud používáte otevřenou nebo WEP síť, změňte tento řádek:

status = WiFi.begin (ssid, pass);

// počkejte 10 sekund na připojení:

zpoždění (10 000);

}

server.begin (); // spusťte webový server na portu 80

printWifiStatus (); // jste připojeni, vytiskněte si stav

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Inicializace všech pixelů na 'vypnuto'

pinMode (micPin, INPUT);

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

hodnoty [thisReading] = 0;

}

}

prázdná duha (uint8_t čekat) {

uint16_t i, j;

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

pro (i = 0; i

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

}

strip.show ();

zpoždění (čekání);

}

}

void visualizer () {

celkem = celkem - hodnoty [readIndex];

hodnoty [readIndex] = analogRead (micPin);

celkem = celkem + čtení [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

průměr = celkem / početČtení;

zpoždění (1);

int micpixel = (průměr-100)/5;

Serial.println (micpixel);

if (micpixel> 0) {

{

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

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

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

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

strip.show ();

}

}

if (micpixel <0) {

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

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

strip.show ();

}

}

prázdná smyčka () {

{

Klient WiFiClient = server.available (); // poslouchat příchozí klienty

if (client) {// if you get a client, Serial.println („nový klient“); // vytiskne zprávu ze sériového portu

Řetězec currentLine = ""; // vytvoření řetězce pro uchování příchozích dat od klienta

while (client.connected ()) {// smyčka, zatímco klient je připojen

if (client.available ()) {// pokud existují bajty ke čtení od klienta, char c = client.read (); // pak přečtěte bajt

Serial.write (c); // vytiskněte sériový monitor

if (c == '\ n') {// pokud je bajt znak nového řádku

// pokud je aktuální řádek prázdný, máte za sebou dva znaky nového řádku.

// tím klientský požadavek HTTP končí, pošlete tedy odpověď:

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

// Záhlaví HTTP vždy začínají kódem odpovědi (např. HTTP/1.1 200 OK)

// a typ obsahu, aby klient věděl, co přijde, pak prázdný řádek:

client.println ("HTTP/1,1 200 OK");

client.println ("Typ obsahu: text/html");

client.println ();

// obsah odpovědi HTTP následuje za záhlavím:

client.print („Klikněte sem Zapnout efekt duhy“);

client.print („Klikněte sem Zapnout Visualizer“);

// Odpověď HTTP končí dalším prázdným řádkem:

client.println ();

// vylomení smyčky while:

přestávka;

} else {// pokud máte nový řádek, vymažte currentLine:

currentLine = "";

}

} else if (c! = '\ r') {// pokud máte něco jiného než znak návratu na vozík, currentLine += c; // přidejte jej na konec currentLine

}

// Zkontrolujte, zda byl požadavek klienta „GET /H“nebo „GET /L“:

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

Duha (10); // Duhový efekt zapnutý

}

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

Visualizer (); // Visualizer je zapnutý

}

}

}

// ukončení spojení:

client.stop ();

Serial.println („klient odpojen“);

}

}

zrušit printWifiStatus () {

// vytiskněte SSID sítě, ke které jste připojeni:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// vytiskněte IP adresu WiFi štítu:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP adresa:");

Serial.println (ip);

// vytiskněte sílu přijímaného signálu:

dlouhý rssi = WiFi. RSSI ();

Serial.print ("síla signálu (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// vytiskněte, kam v prohlížeči jít:

Serial.print ( Chcete -li tuto stránku zobrazit v akci, otevřete prohlížeč na adrese

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

if (WheelPos <85) {

zpětný proužek. barva (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

if (WheelPos <170) {

WheelPos -= 85;

zpětný proužek. Barva (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

zpětný proužek. Barva (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t červená (uint32_t c) {

návrat (c >> 16);

}

uint8_t zelená (uint32_t c) {

návrat (c >> 8);

}

uint8_t modrá (uint32_t c) {

návrat (c);

}

}

//Serial.println(micpixel);

}

Krok 4: 3D tisk patice lampy

3D tisk základny lampy
3D tisk základny lampy

Byl změřen 3D model základny lampy, navržen a vytištěn s rozměry dostatečně velkými, aby se do něj vešly všechny elektrické komponenty uvnitř prostoru pro základnu.

Krok 5: LED příloha

LED příloha
LED příloha

LED diody byly navinuty v lepenkové roli a připevněny pomocí oboustranné pásky, ve spodní části byl vyvrtán otvor, kterým prošel drát

Krok 6: Kryt lampy

Kryt lampy
Kryt lampy

Ohrada byla vyrobena nalezením průhledné láhve s podobnou šířkou jako základna lampy a výškou jako nástavec LED. To bylo poté pokryto silným papírem pro lepší difuzi světla. Alternativně je možné jako pouzdro lampy použít matné sklo nebo průsvitné plastové trubice.

Krok 7: Nastavení

Založit
Založit

Vše bylo slepeno a smontováno. A lampa byla připravena na nějaké testování!

Doporučuje: