Mundarija:
- 1 -qadam: kerakli materiallar
- 2 -qadam: O'chirish diagrammasi
- 3 -qadam: Arduino kodi
- 4 -qadam: Chiroq bazasini 3d bosib chiqarish
- 5 -qadam: Led qo'shimchasi
- 6 -qadam: Chiroqni o'rnatish
- 7 -qadam: sozlash
Video: Aqlli chiroq (TCfD) - Kamalak + Musiqa vizualizatori: 7 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:28
Bu loyiha TUDelftda kontseptual dizayn texnologiyasi kursi uchun qilingan
Yakuniy mahsulot-bu ESP-32 asosiy LED chiroq va serverga ulangan. Prototip uchun chiroq ikkita funktsiyaga ega; tinchlantiruvchi rang chiqaruvchi kamalak effekti, uning atrofiga qarab nurni o'zgartiradi, ikkinchidan, ovozli vizualizator, bu erda LED piksellari tovush darajasiga ko'ra "raqsga tushadi". Tizim Wi -Fi tarmog'iga ulangan va foydalanuvchi WIFI orqali chiroqdan qanday effekt olishni xohlashini tanlashi mumkin.
Arzon ESP-32 mikrochipi bizga kuchli protsessorlar, ichki sensorlar, harorat sensori, sensorli sensor, shuningdek wifi va bluetooth imkoniyatlarini taqdim etadi. Shu bilan birga, ushbu loyiha uchun faqat ikkita effekt tanlangan bo'lsa -da, bu "aqlli" chiroqning ta'siri cheksizdir. U foydalanuvchiga ob -havoni yoki xonaning haroratini ko'rsatish uchun ishlatiladi, chiroq o'zi signalizatsiya vazifasini o'tashi mumkin yoki sizning yotog'ingiz yonida quyosh chiqishini taqlid qilib, quyosh chiqishini taqlid qilib, uyg'onishni yaxshi his qiladi.
1 -qadam: kerakli materiallar
Arduino esp32
Ovoz sensori
To'rt tomonlama ikki yo'nalishli mantiq darajasi konvertori
Neopixel 2m 60 led/m
Jumper simlari
Adapterli mikro USB kabeli
Internetga ulanish
2 -qadam: O'chirish diagrammasi
O'chirish diagrammasi chizilgan va shunga muvofiq sxema tuzilgan
quyidagi diagramma.
3 -qadam: Arduino kodi
Bu erda, birinchi navbatda, vizualizator kodi yaratildi. Keyin ikkita misol kodi
"Neoplxel RGBW starndtest"; va "simpleWebServerWifi" vizualizator kodiga o'zgartirildi va birlashtirildi. Garchi kod vaqti -vaqti bilan xato qilsa ham (vaqti -vaqti bilan tasodifiy chiroq yonib turadi). Kodning keyingi iteratsiyasi (etarli vaqtga ega bo'lgach) yangilanadi.
#qo'shing
#ifdef _AVR_
#qo'shing
#endif
const int numReadings = 5;
int o'qishlari [numReadings];
int readIndex = 0;
int jami = 0;
int o'rtacha = 0;
int micPin = 33;
#PIN kodni belgilang 4
#ta'rif NUM_LEDS 120
#yorqinlik 100 ni aniqlang
Adafruit_NeoPixel tasmasi = 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 };
#qo'shing
#qo'shing
char ssid = "sizning tarmoq"; // sizning tarmoq SSID (ismingiz)
char pass = "secretPassword"; // tarmoq parolingiz
int keyIndex = 0; // sizning tarmoq kalitingiz indeks raqami (faqat WEP uchun kerak)
int holati = WL_IDLE_STATUS;
WiFiServer serveri (80);
bo'sh o'rnatish ()
{
Serial.begin (9600); // ketma -ket aloqani ishga tushirish
pinMode (9, OUTPUT); // LED pin rejimini o'rnating
// qalqon borligini tekshiring:
agar (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("Wi -Fi qalqoni mavjud emas");
while (rost); // davom etma
}
String fv = WiFi.firmwareVersion ();
agar (fv! = "1.1.0") {
Serial.println ("Iltimos, dasturiy ta'minotni yangilang");
}
// Wi -Fi tarmog'iga ulanishga urinish:
vaqt (holat! = WL_CONNECTED) {
Serial.print ("Quyidagi nomli tarmoqqa ulanishga urinilmoqda:");
Serial.println (ssid); // tarmoq nomini (SSID) chop etish;
// WPA/WPA2 tarmog'iga ulanish. Agar ochiq yoki WEP tarmog'idan foydalansangiz, bu qatorni o'zgartiring:
status = WiFi.begin (ssid, pass);
// ulanish uchun 10 soniya kuting:
kechikish (10000);
}
server.begin (); // 80 -portda veb -serverni ishga tushiring
printWifiStatus (); // siz hozir ulandingiz, shuning uchun maqomni chop eting
}
{
Serial.begin (9600);
strip.setBrightness (Yorqinligi);
strip.begin ();
strip.show (); // Barcha piksellarni o'chirib qo'ying
pinMod (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
o'qishlar [thisReading] = 0;
}
}
bo'sh kamalak (uint8_t kutmang) {
uint16_t i, j;
uchun (j = 0; j <256; j ++) {
uchun (i = 0; i
strip.setPixelColor (i, g'ildirak ((i+j) & 255)));
}
strip.show ();
kechikish (kutish);
}
}
bo'sh vizualizatsiya () {
jami = jami - o'qishlar [readIndex];
o'qishlar [readIndex] = analogRead (micPin);
jami = jami + o'qishlar [readIndex];
readIndex = readIndex + 1;
agar (readIndex> = numReadings) {
readIndex = 0;
}
o'rtacha = jami / sonO'qishlar;
kechikish (1);
int mikpixel = (o'rtacha-100)/5;
Ketma -ket.println (mikpixel);
agar (mikpixel> 0) {
{
uchun (int j = 0; j <= mikpiksel; j ++)
strip.setPixelColor (j, (mikpixel*2), 0, (90-piksel), 0);
uchun (int j = micpixel; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
agar (mikpiksel <0) {
uchun (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
void loop () {
{
WiFiClient mijozi = server.available (); // kiruvchi mijozlarni tinglang
if (mijoz) {// agar siz mijoz olsangiz, Serial.println ("yangi mijoz"); // ketma -ket portdan xabar chop eting
String currentLine = ""; // mijozdan keladigan ma'lumotlarni ushlab turish uchun satr yarating
while (client.connected ()) {// loop mijoz ulangan paytda
if (client.available ()) {// agar mijozdan o'qiladigan baytlar bo'lsa, char c = client.read (); // keyin bayt o'qing
Serial.write (c); // ketma -ket monitorni chop eting
if (c == '\ n') {// agar bayt yangi qatorli belgi bo'lsa
// agar joriy satr bo'sh bo'lsa, sizda ketma -ket ikkita yangi satr belgisi bor.
// bu mijoz HTTP so'rovining oxiri, shuning uchun javob yuboring:
if (currentLine.length () == 0) {
// HTTP sarlavhalari har doim javob kodidan boshlanadi (masalan, HTTP/1.1 200 OK)
// va kontent turi, shuning uchun mijoz nima bo'layotganini biladi, keyin bo'sh satr:
client.println ("HTTP/1.1 200 OK");
client.println ("Kontent turi: matn/html");
mijoz.println ();
// HTTP javobining tarkibi sarlavhadan keyin keladi:
client.print ("Bu erga bosing, kamalak effektini yoqing");
client.print ("Bu erga bosing, Visualizer -ni yoqing");
// HTTP javobi boshqa bo'sh satr bilan tugaydi:
mijoz.println ();
// vaqt tsiklidan chiqib ketish:
tanaffus;
} else {// agar sizda yangi qator bo'lsa, currentLine -ni tozalang:
currentLine = "";
}
} if if (c! = '\ r') {// agar sizda aravani qaytarish belgisidan boshqa biror narsa bo'lsa, currentLine += c; // uni currentLine oxiriga qo'shing
}
// Mijoz so'rovi "GET /H" yoki "GET /L" ekanligini tekshiring:
if (currentLine.endsWith ("Get /R")) {
Kamalak (10); // Kamalak effekti yoqilgan
}
if (currentLine.endsWith ("GET /V")) {
Vizualizatsiya (); // Vizualizator yoqilgan
}
}
}
// ulanishni yoping:
client.stop ();
Serial.println ("mijoz uzildi");
}
}
yaroqsiz printWifiStatus () {
// ulangan tarmoq SSID -ni chop eting:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// WiFi qalqonining IP manzilini chop eting:
IPAddress ip = WiFi.localIP ();
Serial.print ("IP -manzil:");
Serial.println (ip);
// olingan signal kuchini chop eting:
uzoq rssi = WiFi. RSSI ();
Serial.print ("signal kuchi (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// brauzerda qaerga borishni chop eting:
Serial.print ("Bu sahifani amalda ko'rish uchun https:// ga brauzer oching");
Serial.println (ip);
}
}
uint32_t g'ildirak (bayt WheelPos) {
WheelPos = 255 - WheelPos;
agar (WheelPos <85) {
Qaytish chizig'i Rang (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
agar (WheelPos <170) {
WheelPos -= 85;
Qaytish chizig'i Rang (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
Qaytish chizig'i Rang (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t qizil (uint32_t c) {
qaytish (c >> 16);
}
uint8_t yashil (uint32_t c) {
qaytish (c >> 8);
}
uint8_t ko'k (uint32_t c) {
qaytish (v);
}
}
//Serial.println (mikpixel);
}
4 -qadam: Chiroq bazasini 3d bosib chiqarish
Chiroq tayanchining 3d modeli o'lchandi, loyihalashtirildi va bosma bo'linma ichidagi barcha elektr komponentlariga mos keladigan o'lchamda chop etildi.
5 -qadam: Led qo'shimchasi
Ledlar karton rulonga o'ralgan va ikki tomonlama lenta yordamida biriktirilgan, pastki qismida simni o'tkazish uchun teshik ochilgan.
6 -qadam: Chiroqni o'rnatish
Kenglik, chiroqning poydevoriga va balandligi LED qo'shimchasiga o'xshash shaffof shishani topib, muhofaza qilindi. Keyin yorug'lik yaxshiroq tarqalishi uchun u qalin qog'oz bilan qoplangan. Shu bilan bir qatorda, muzqaymoqli shisha yoki shaffof plastmassa naychalarni chiroq muhofazasi sifatida ishlatish mumkin.
7 -qadam: sozlash
Hammasi bir -biriga yopishtirilgan va yig'ilgan. Va chiroq ba'zi sinovlarga tayyor edi!
Tavsiya:
Musiqa lazer vizualizatori: 5 qadam
Laser Music Visualizer: Siz o'zingiz yoqtirgan qo'shiqlar qanday eshitilishini bilasiz. Endi siz vizualizator yasashingiz va ularning qanday ko'rinishini ko'rishingiz mumkin. Bu shunday ishlaydi: karnay orqali ovoz chiqarilganda, karnayning diafragmasi titraydi. Bu tebranishlar oynani biriktirib qo'yadi
LightBox musiqa vizualizatori: 5 qadam (rasmlar bilan)
LightBox musiqa vizualizatori: LightBox musiqaga mos keladigan chiroyli yorug'lik naqshlarini yaratish uchun musiqani tahlil qilish uchun telefoningiz yoki planshetingizning o'rnatilgan mikrofonidan foydalanadi. Ilovani ishga tushiring, telefoningizni yoki planshetingizni tovush manbasiga yaqin joyda joylashtiring, shunda qutingiz tasvirni ko'radi
Arduino bilan musiqa vizualizatori: 5 qadam
Arduino bilan musiqa vizualizatori: Interaktiv musiqa vizualizatori KomponentlariLM338T x5Potentiometr x2 (1k va 10k) 1N4006 diode x5Kondensator x2 (1uF va 10uF) rezistorlar x3 (416, 10k va 1k) Aux ajratuvchi
Musiqa vizualizatori (osiloskop): 4 qadam (rasmlar bilan)
Musiqiy vizualizator (osiloskop): Bu musiqiy vizualizator sizning musiqangiz tajribasiga chuqurlik qo'shishning ajoyib usulini beradi va uni yaratish juda oson. Bu, shuningdek, ba'zi ilovalar uchun haqiqiy osiloskop sifatida foydali bo'lishi mumkin: -eski crt (deyarli hamma b & am
Nixie Tube musiqa vizualizatori: 10 qadam (rasmlar bilan)
Nixie Tube Musiqa Vizualizatori: iTunes tepasida joylashgan kichik chiziqlardan ilhomlangan gipnoz qiluvchi musiqa vizualizatori. Displey sifatida o'n to'rtta ruscha IN-13 Nixie bargraf quvurlari ishlatiladi. Har bir nixie trubkasi yonib turadigan uzunlik ma'lum bir chastotaning hajmini ko'rsatadi