Mündəricat:

Ağıllı Lampa (TCfD) - Göy qurşağı + Musiqi Vizualizatoru: 7 addım (şəkillərlə)
Ağıllı Lampa (TCfD) - Göy qurşağı + Musiqi Vizualizatoru: 7 addım (şəkillərlə)

Video: Ağıllı Lampa (TCfD) - Göy qurşağı + Musiqi Vizualizatoru: 7 addım (şəkillərlə)

Video: Ağıllı Lampa (TCfD) - Göy qurşağı + Musiqi Vizualizatoru: 7 addım (şəkillərlə)
Video: Xiaomidən ağıllı lampa! MI Smart Led Lamp Essential özəlliyi nədir? 2024, Noyabr
Anonim
Image
Image
Dövrə diaqramı
Dövrə diaqramı

Bu layihə TUDelft -də Konsept Dizayn Texnologiyası kursu üçün hazırlanmışdır

Son məhsul ESP-32 əsas LED lampadır və serverə qoşulub. Prototip üçün lampanın iki funksiyası var; sakitləşdirici bir rəng yayan bir göy qurşağı effekti və ətrafa doğru LED işıqlarının səs səviyyəsinə görə "rəqs etdiyi" səs vizualizatoru. Sistem wifi -yə qoşulub və istifadəçi WIFI vasitəsilə lampadan hansı effekti istədiyini seçə bilir.

Ucuz ESP-32 mikroçipi bizə güclü prosessorlar, quraşdırılmış salon sensoru, temperatur sensoru, toxunma sensoru, həmçinin wifi və bluetooth qabiliyyəti təqdim edir. Bununla birlikdə, bu layihə üçün yalnız iki effekt seçilsə də, bu "ağıllı" lampanın mənası sonsuzdur. İstifadəçiyə havanı və ya otağın istiliyini göstərmək üçün istifadə ediləcək, lampanın özü həyəcan siqnalı kimi çıxış edə bilər və ya gözəl bir oyanış təcrübəsi üçün yatağınızın yanında günəşin doğuşunu təqlid edən sakitləşdirici günəş işığı verə bilər.

Addım 1: Lazım olan material

Arduino esp32

Səs sensoru

Dörd yollu iki istiqamətli məntiq səviyyəsi çeviricisi

Neopixel led 2m 60 led/m

Jumper telləri

Adapteri olan mikro USB kabeli

İnternet bağlantısı

Addım 2: Dövrə Şeması

Bir dövrə diaqramı tərtib edildi və buna uyğun olaraq dövrə edildi

aşağıdakı diaqram.

Addım 3: Arduino Kodu

Burada əvvəlcə vizuallaşdırıcı kod hazırlanmışdır. Sonra, iki nümunə kodu

; "Neoplxel RGBW starndtest"; və "simpleWebServerWifi" vizualizator kodu daxilində dəyişdirildi və birləşdirildi. Kod hələ də bəzən səhv olsa da (təsadüfi LED zaman -zaman işıq saçır). Kodun növbəti iterasiyası (kifayət qədər vaxt əldə etdikdə) yenilənəcək.

#daxil edin

#ifdef _AVR_

#daxil edin

#endif

const int numReadings = 5;

int oxunuşları [numReadings];

int readIndex = 0;

int cəmi = 0;

int orta = 0;

int micPin = 33;

#PIN kodunu təyin edin 4

#NUM_LEDS 120 təyin edin

#Parlaqlıq 100 təyin edin

Adafruit_NeoPixel şeridi = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

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

#daxil edin

#daxil edin

char ssid = "şəbəkəniz"; // şəbəkənizin SSID (adı)

char pass = "secretPassword"; // şəbəkə parolunuz

int keyIndex = 0; // şəbəkə açarınızın indeks nömrəsi (yalnız WEP üçün lazımdır)

int vəziyyəti = WL_IDLE_STATUS;

WiFiServer serveri (80);

boş quraşdırma ()

{

Serial.begin (9600); // serial ünsiyyətini işə salın

pinMode (9, Çıxış); // LED pin rejimini təyin edin

// qalxanın olub olmadığını yoxlayın:

əgər (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("WiFi qalxanı yoxdur");

while (doğru); // davam etmə

}

String fv = WiFi.firmwareVersion ();

əgər (fv! = "1.1.0") {

Serial.println ("Zəhmət olmasa firmware proqramını təkmilləşdirin");

}

// Wifi şəbəkəsinə qoşulmaq cəhdi:

isə (status! = WL_CONNECTED) {

Serial.print ("Adlı Şəbəkəyə qoşulmağa cəhd edilir:");

Serial.println (ssid); // şəbəkə adını (SSID) çap edin;

// WPA/WPA2 şəbəkəsinə qoşulun. Açıq və ya WEP şəbəkəsindən istifadə edərkən bu xətti dəyişdirin:

status = WiFi.begin (ssid, pass);

// əlaqə üçün 10 saniyə gözləyin:

gecikmə (10000);

}

server.begin (); // veb serverini 80 portunda işə salın

printWifiStatus (); // indi bağlısınız, buna görə də vəziyyəti çap edin

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Bütün pikselləri "söndürmək" üçün başladın

pinMode (micPin, GİRİŞ);

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

oxunuşlar [thisReading] = 0;

}

}

boş göy qurşağı (uint8_t gözləyin) {

uint16_t i, j;

üçün (j = 0; j <256; j ++) {

üçün (i = 0; i

strip.setPixelColor (i, Təkər ((i+j) & 255));

}

strip.show ();

gecikmə (gözləmək);

}

}

boş vizualizator () {

total = total - oxunuşlar [readIndex];

oxunuşlar [readIndex] = analogRead (micPin);

total = cəmi + oxunuşlar [readIndex];

readIndex = readIndex + 1;

əgər (readIndex> = numReadings) {

readIndex = 0;

}

orta = ümumi / sayıOxumlar;

gecikmə (1);

int micpixel = (orta-100)/5;

Serial.println (mikpixel);

əgər (mikpiksel> 0) {

{

üçün (int j = 0; j <= micpixel; j ++)

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

üçün (int j = micpixel; j <= NUM_LEDS; j ++)

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

strip.show ();

}

}

əgər (mikpiksel <0) {

üçün (int j = 0; j <= 20; j ++)

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

strip.show ();

}

}

boşluq döngəsi () {

{

WiFiClient müştəri = server.available (); // gələn müştəriləri dinləyin

if (müştəri) {// bir müştəri alsanız, Serial.println ("yeni müştəri"); // serial portundan bir mesaj yazdırın

String currentLine = ""; // müştəridən daxil olan məlumatları saxlamaq üçün String yaradın

while (client.connected ()) {// müştəri bağlı ikən loop

if (client.available ()) {// müştəridən oxumaq üçün bayt varsa, char c = client.read (); // bir bayt oxuyun

Serial.write (c); // seriyalı monitoru çap edin

if (c == '\ n') {// bayt yeni sətir xarakteridirsə

// cari sətir boşdursa, ardıcıl olaraq iki yeni sətir simvolu alırsınız.

// bu, müştəri HTTP sorğusunun sonudur, buna görə cavab göndərin:

əgər (currentLine.length () == 0) {

// HTTP başlıqları həmişə cavab kodu ilə başlayır (məsələn, HTTP/1.1 200 OK)

müştəri nəyin gəldiyini bilməsi üçün // və məzmun növü, sonra boş bir xətt:

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

client.println ("Məzmun növü: mətn/html");

müştəri.println ();

// HTTP cavabının məzmunu başlığı izləyir:

client.print ("Bura vurun Göy qurşağı effektini yandırın");

client.print ("Buraya vurun Vizualizatoru yandırın");

// HTTP cavabı başqa bir boş sətirlə bitir:

müştəri.println ();

// while döngəsindən çıxın:

fasilə;

} başqa {// yeni bir xəttiniz varsa, currentLine silin:

currentLine = "";

}

} else if (c! = '\ r') {// bir vaqon geri qaytarma xarakterindən başqa bir şeyiniz varsa, currentLine += c; // cari xəttin sonuna əlavə edin

}

// Müştəri sorğusunun "GET /H" və ya "GET /L" olub olmadığını yoxlayın:

əgər (currentLine.endsWith ("GET /R")) {

Göy qurşağı (10); // Göy qurşağı effekti açıldı

}

əgər (currentLine.endsWith ("GET /V")) {

Vizualizator (); // Vizualizator aktivdir

}

}

}

// əlaqəni bağlayın:

client.stop ();

Serial.println ("müştəri əlaqəsi kəsildi");

}

}

boş çapWifiStatus () {

// bağlı olduğunuz şəbəkənin SSID -ni çap edin:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// WiFi qalxanınızın IP ünvanını çap edin:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP ünvanı:");

Serial.println (ip);

// alınan siqnal gücünü çap edin:

uzun rssi = WiFi. RSSI ();

Serial.print ("siqnal gücü (RSSI):");

Serial. çap (rssi);

Serial.println ("dBm");

// brauzerdə hara gedəcəyinizi yazın:

Serial.print ("Bu səhifəni fəaliyyətdə görmək üçün https:// üçün bir brauzer açın");

Serial.println (ip);

}

}

uint32_t Təkər (WheelPos baytı) {

WheelPos = 255 - WheelPos;

əgər (WheelPos <85) {

geri zolaq. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

əgər (WheelPos <170) {

WheelPos -= 85;

geri zolaq. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

geri zolaq. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t qırmızı (uint32_t c) {

qayıt (c >> 16);

}

uint8_t yaşıl (uint32_t c) {

qayıt (c >> 8);

}

uint8_t mavi (uint32_t c) {

qayıt (c);

}

}

//Serial.println(micpixel);

}

Addım 4: Lampanın Zəminin 3d Çap Edilməsi

3d Lampanın Baza Çapı
3d Lampanın Baza Çapı

Lampa bazasının 3d modeli ölçülüb, dizayn edilib və baza bölməsinin içərisindəki bütün elektrik komponentlərinə uyğun olacaq ölçüdə çap edilib.

Addım 5: Led Əlavəsi

Led Əlavə
Led Əlavə

Ledlər karton rulonda bükülmüş və iki tərəfli lent istifadə edərək yapışdırılmış, alt hissədə teldən keçmək üçün bir delik açılmışdır.

Addım 6: Lampa Qutusu

Lampa Korpusu
Lampa Korpusu

Genişlik, lampa bazası və LED lövhəsi kimi hündürlüyü oxşar olan şəffaf bir şüşə tapılaraq bir korpus düzəldildi. Daha sonra işığın daha yaxşı yayılması üçün qalın kağızla örtülmüşdür. Alternativ olaraq, lampa qapağı kimi buzlu şüşə və ya yarı şəffaf plastik borulardan istifadə etmək mümkündür.

Addım 7: Quraşdırma

Qurmaq
Qurmaq

Hər şey bir -birinə yapışdırıldı və yığıldı. Və lampa bəzi sınaqlara hazır idi!

Tövsiyə: