Mündəricat:
- Addım 1: Lazım olan material
- Addım 2: Dövrə Şeması
- Addım 3: Arduino Kodu
- Addım 4: Lampanın Zəminin 3d Çap Edilməsi
- Addım 5: Led Əlavəsi
- Addım 6: Lampa Qutusu
- Addım 7: Quraşdırma
Video: Ağıllı Lampa (TCfD) - Göy qurşağı + Musiqi Vizualizatoru: 7 addım (şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
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
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
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
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
Hər şey bir -birinə yapışdırıldı və yığıldı. Və lampa bəzi sınaqlara hazır idi!
Tövsiyə:
Lazer Musiqi Vizualizatoru: 5 addım
Laser Music Visualizer: Sevdiyiniz mahnıların necə səsləndiyini bilirsiniz. İndi bir vizuallaşdırıcı düzəldə bilərsiniz və onların necə göründüyünü görə bilərsiniz. Bu belə işləyir: Dinamik vasitəsilə səs çaldığınızda dinamikin diafraqması titrəyir. Bu titrəmələr bağlı güzgünü hərəkətə gətirir
LightBox Musiqi Vizualizatoru: 5 addım (şəkillərlə)
LightBox Musiqi Vizualizatoru: LightBox, musiqiyə uyğun gözəl işıq nümunələri yaratmaq üçün musiqini təhlil etmək üçün telefonunuzun və ya tabletinizin daxili mikrofonundan istifadə edir. Sadəcə tətbiqə başlayın, telefonunuzu və ya planşetinizi səs mənbəyinə yaxın bir yerə qoyun və qutunuz görsənəcək
Musiqi Vizualizatoru olan Bluetooth Dinamik: 10 Addım (Şəkillərlə birlikdə)
Musiqi Vizualizatorlu Bluetooth Dinamik: Bu təlimatda, yuxarıda musiqi vizualizatoru olan bu Bluetooth Dinamikini necə qurduğumu göstərəcəyəm. Həqiqətən sərin görünür və mahnını dinləmə anını daha da zəhmli edir. Vizualizatoru açmaq istəməyinizə qərar verə bilərsiniz
Musiqi Vizualizatoru (osiloskop): 4 addım (şəkillərlə)
Musiqi Vizualizatoru (osiloskop): Bu musiqi vizuallaşdırıcı, musiqinizin təcrübəsinə daha çox dərinlik əlavə etmək üçün əla bir yol təqdim edir və qurmaq olduqca asandır. Bəzi tətbiqlər üçün həqiqi bir osiloskop olaraq da faydalı ola bilər:
Nixie Tube Musiqi Vizualizatoru: 10 addım (şəkillərlə)
Nixie Tube Musiqi Vizualizatoru: iTunesun yuxarısındakı kiçik çubuqlardan ilhamlanan hipnozlaşdırıcı bir musiqi vizualizatoru. Ekran olaraq on dörd Rus IN-13 Nixie bargraph borusu istifadə olunur. Hər bir nixie borusunun yandığı uzunluq, müəyyən bir tezliyin həcmini göstərir