Tartalomjegyzék:

Intelligens lámpa (TCfD) - Rainbow + Music Visualizer: 7 lépés (képekkel)
Intelligens lámpa (TCfD) - Rainbow + Music Visualizer: 7 lépés (képekkel)

Videó: Intelligens lámpa (TCfD) - Rainbow + Music Visualizer: 7 lépés (képekkel)

Videó: Intelligens lámpa (TCfD) - Rainbow + Music Visualizer: 7 lépés (képekkel)
Videó: Kabbalah: Secretos del Zohar - clase 1 Preliminares 2024, November
Anonim
Image
Image
Kördiagramm
Kördiagramm

Ez a projekt a TUDelft Technology for Concept Design tanfolyamán készült

A végtermék egy ESP-32 alap LED-es lámpa, és a szerverhez van csatlakoztatva. A prototípus esetében a lámpának két funkciója van; szivárvány effektus, amely megnyugtató színváltó fényt bocsát ki a környezete felé, másodszor pedig hangerő -megjelenítő, ahol a LED -es pixelek a hangszintnek megfelelően „táncolnak”. A rendszer csatlakozik a wifi -hez, és a felhasználó választhat, hogy milyen hatást szeretne a lámpától a WIFI -n keresztül.

Az olcsó ESP-32 mikrochip erőteljes processzorokat, beépített hall-érzékelőt, hőmérséklet-érzékelőt, érintésérzékelőt, valamint wifi és bluetooth képességet biztosít számunkra. Ezzel a projekthez csak két effektust választottak, ennek az „intelligens” lámpának a hatékonysága határtalan. Arra szolgál, hogy jelezze a felhasználónak az időjárást, vagy a szoba hőmérsékletét, maga a lámpa riasztásként működhet, vagy nyugtató napfényt adhat az ágy mellett, amely a napfelkeltét szimulálja a kellemes ébredés érdekében.

1. lépés: Szükséges anyag

Arduino esp32

Hangérzékelő

Négyirányú kétirányú logikai szintváltó

Neopixel led 2m 60 led/m

Jumper vezetékek

Micro USB kábel adapterrel

Internet kapcsolat

2. lépés: Áramköri diagram

Áramköri rajzot rajzoltak, és az áramkört ennek megfelelően készítették el, ahogyan az itt le van írva

az alábbi diagramot.

3. lépés: Arduino kód

Itt először vizualizáló kódot készítettünk. Ezután két példakód

; „Neoplxel RGBW starndtest”; és az „simpleWebServerWifi” módosult és a vizualizátor kódjába integrálódott. Bár a kód időnként még mindig hibás (a véletlenszerű ledek időnként kigyulladnak). A kód következő iterációja (ha lesz elég időnk) frissítésre kerül.

#befoglalni

#ifdef _AVR_

#befoglalni

#endif

const int numReadings = 5;

int olvasmányok [numReadings];

int readIndex = 0;

int összesen = 0;

int átlag = 0;

int micPin = 33;

#define PIN 4

#define NUM_LEDS 120

#define FÉNYESSÉG 100

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

bájt 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 };

#befoglalni

#befoglalni

char ssid = "az Ön hálózata"; // a hálózati SSID (név)

char pass = "secretPassword"; // a hálózati jelszó

int keyIndex = 0; // a hálózati kulcs indexszáma (csak WEP esetén szükséges)

int állapot = WL_IDLE_STATUS;

WiFiServer szerver (80);

üres beállítás ()

{

Sorozat.kezdet (9600); // inicializálja a soros kommunikációt

pinMode (9, KIMENET); // állítsa be a LED tű módját

// ellenőrizze a pajzs jelenlétét:

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

Serial.println ("WiFi pajzs nincs jelen");

míg (igaz); // ne folytasd

}

Karakterlánc fv = WiFi.firmwareVersion ();

ha (fv! = "1.1.0") {

Serial.println ("Kérjük, frissítse a firmware -t");

}

// megpróbál csatlakozni a Wifi hálózathoz:

while (állapot! = WL_CONNECTED) {

Serial.print ("Csatlakozás a hálózathoz:");

Soros.println (ssid); // nyomtatja ki a hálózat nevét (SSID);

// Csatlakozás WPA/WPA2 hálózathoz. Nyílt vagy WEP hálózat használata esetén módosítsa ezt a sort:

állapot = WiFi.begin (ssid, pass);

// várjon 10 másodpercet a csatlakozásra:

késleltetés (10000);

}

szerver.begin (); // indítsa el a webszervert a 80 -as porton

printWifiStatus (); // most csatlakozott, ezért nyomtassa ki az állapotot

}

{

Sorozat.kezdet (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Inicializálja az összes képpontot "kikapcsolt" állapotba

pinMode (micPin, INPUT);

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

leolvasások [thisReading] = 0;

}

}

void rainbow (uint8_t wait) {

uint16_t i, j;

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

mert (i = 0; i

strip.setPixelColor (i, Kerék ((i+j) & 255));

}

strip.show ();

késleltetés (várakozás);

}

}

void visualizer () {

összesen = összesen - leolvasások [readIndex];

értékek [readIndex] = analóg olvasat (micPin);

összesen = összes + leolvasás [readIndex];

readIndex = readIndex + 1;

if (readIndex> = számReadings) {

readIndex = 0;

}

átlag = összes / számReadings;

késleltetés (1);

int micpixel = (átlagos-100)/5;

Soros.println (mikpixel);

if (mikpixel> 0) {

{

esetén (int j = 0; j <= mikpixel; j ++)

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

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

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

strip.show ();

}

}

if (mikpixel <0) {

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

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

strip.show ();

}

}

void loop () {

{

WiFiClient kliens = szerver.available (); // figyelje a bejövő ügyfeleket

if (kliens) {// ha ügyfelet kap, Serial.println ("új kliens"); // üzenet nyomtatása a soros portról

String currentLine = ""; // karakterlánc készítése a kliensről érkező adatok tárolására

while (client.connected ()) {// ciklus, amíg az ügyfél csatlakozik

if (client.available ()) {// ha bájtokat kell olvasni az ügyféltől, char c = kliens.olvasás (); // akkor olvass egy bájtot

Soros.írás (c); // nyomtassa ki a soros monitort

if (c == '\ n') {// ha a bájt újsoros karakter

// ha az aktuális sor üres, akkor két újsoros karakter van egymás után.

// ez a vége az ügyfél HTTP -kérésének, ezért küldjön választ:

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

// A HTTP fejlécek mindig válaszkóddal kezdődnek (pl. HTTP/1.1 200 OK)

// és egy tartalomtípust, hogy az ügyfél tudja, mi jön, majd egy üres sort:

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

client.println ("Tartalom-típus: szöveg/html");

client.println ();

// a HTTP válasz tartalma a fejlécet követi:

client.print ("Kattintson ide A szivárványhatás bekapcsolása");

client.print ("Kattintson ide a Visualizer bekapcsolása");

// A HTTP válasz egy másik üres sorral végződik:

client.println ();

// kitörni a while ciklusból:

szünet;

} else {// ha új sort kapott, akkor törölje a currentLine -t:

currentLine = "";

}

} else if (c! = '\ r') {// ha mást is kapsz, mint egy kocsi visszatérési karaktert, currentLine += c; // hozzáadjuk a currentLine végéhez

}

// Ellenőrizze, hogy az ügyfél kérése "GET /H" vagy "GET /L" volt:

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

Szivárvány (10); // A szivárvány hatás be van kapcsolva

}

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

Vizualizátor (); // A vizualizátor be van kapcsolva

}

}

}

// zárja be a kapcsolatot:

client.stop ();

Serial.println ("kliens leválasztva");

}

}

void printWifiStatus () {

// annak a hálózatnak az SSID -jének nyomtatása, amelyhez csatlakozik:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// a WiFi pajzs IP -címének kinyomtatása:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP -cím:");

Soros.println (ip);

// a vett jelerősség kinyomtatása:

hosszú rssi = WiFi. RSSI ();

Serial.print ("jelerősség (RSSI):");

Soros.nyomtatás (rssi);

Soros.println ("dBm");

// nyomtatás, hová kell menni a böngészőben:

Serial.print ("Az oldal működésének megtekintéséhez nyisson meg egy böngészőt a https://" címre);

Soros.println (ip);

}

}

uint32_t Kerék (byte WheelPos) {

WheelPos = 255 - WheelPos;

ha (WheelPos <85) {

visszatérő csík. Szín (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

ha (WheelPos <170) {

WheelPos -= 85;

visszatérő csík. Szín (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

visszatérő csík. Szín (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t piros (uint32_t c) {

visszatérés (c >> 16);

}

uint8_t zöld (uint32_t c) {

visszatérés (c >> 8);

}

uint8_t blue (uint32_t c) {

visszatérés (c);

}

}

//Serial.println(micpixel);

}

4. lépés: 3d A lámpa aljának nyomtatása

3d A lámpa talpának nyomtatása
3d A lámpa talpának nyomtatása

A lámpatartó 3D -s modelljét megmérték, megtervezték és kinyomtatták, és mérete elég nagy ahhoz, hogy elférjen az alaptérben található összes elektromos alkatrész.

5. lépés: LED -es rögzítés

Led melléklet
Led melléklet

A LED -eket karton tekercsbe tekercselték, és kétoldalas szalaggal rögzítették, az alsó részen lyukat fúrtak a vezeték átvezetéséhez

6. lépés: Lámpaház

Lámpaház
Lámpaház

A burkolatot úgy készítették el, hogy egy átlátszó palackot találtak, amelynek szélessége megegyezik a lámpatartó magasságával, és magassága, mint a LED tartozék. Ezt követően vastag papírral borították be a fény jobb eloszlása érdekében. Alternatív megoldásként matt üveg vagy áttetsző műanyag csövek is használhatók lámpaházként.

7. lépés: Beállítás

Beállít
Beállít

Mindent összeragasztottak és összeszereltek. És a lámpa készen állt néhány tesztelésre !.

Ajánlott: