Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
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!