Mundarija:

Aqlli chiroq (TCfD) - Kamalak + Musiqa vizualizatori: 7 qadam (rasmlar bilan)
Aqlli chiroq (TCfD) - Kamalak + Musiqa vizualizatori: 7 qadam (rasmlar bilan)

Video: Aqlli chiroq (TCfD) - Kamalak + Musiqa vizualizatori: 7 qadam (rasmlar bilan)

Video: Aqlli chiroq (TCfD) - Kamalak + Musiqa vizualizatori: 7 qadam (rasmlar bilan)
Video: 71-dars: Aqlli chiroqlar (smart) 2024, Noyabr
Anonim
Image
Image
O'chirish diagrammasi
O'chirish diagrammasi

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 asosini 3d bosib chiqarish
Chiroq asosini 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

Led qo'shimchasi
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

Chiroq muhofazasi
Chiroq muhofazasi

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

Sozlash
Sozlash

Hammasi bir -biriga yopishtirilgan va yig'ilgan. Va chiroq ba'zi sinovlarga tayyor edi!

Tavsiya: