Բովանդակություն:
- Քայլ 1: Անհրաժեշտ նյութեր
- Քայլ 2: Շղթայի դիագրամ
- Քայլ 3: Arduino կոդ
- Քայլ 4. Լամպի հիմքը 3d տպելը
- Քայլ 5: Առաջնորդված հավելված
- Քայլ 6: Լամպի պարիսպ
- Քայլ 7: Կարգավորում
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Այս նախագիծը կատարվում է TUDelft- ում Technology for Concept Design դասընթացի համար
Վերջնական արտադրանքը ESP-32 բազային LED լամպ է և միացված է սերվերին: Նախատիպի համար լամպն ունի երկու գործառույթ. ծիածանի էֆեկտ, որն արտացոլում է հանգստացնող գույն, որը փոխում է փայլը դեպի շրջակայքը և երկրորդ ՝ ձայնային արտացոլիչ, որտեղ LED պիքսելները «պարում են» ըստ ձայնի մակարդակի: Համակարգը միացված է wifi- ին, և օգտվողը կարող է ընտրել, թե ինչ ազդեցություն են ուզում լամպից WIFI- ի միջոցով:
Էժան ESP-32 միկրոչիպը մեզ տրամադրում է հզոր պրոցեսորներ, ներկառուցված սրահի սենսոր, ջերմաստիճանի տվիչ, հպման ցուցիչ, ինչպես նաև wifi և bluetooth հնարավորություններ: Մինչդեռ այս նախագծի համար ընտրվել է ընդամենը երկու էֆեկտ, այս «խելացի» լամպի ենթատեքստն անսահմանափակ է: Այն կօգտագործվի օգտագործողին եղանակը կամ սենյակի ջերմաստիճանը նշելու համար, լամպն ինքնին կարող է ազդանշանի ազդանշան հանդիսանալ կամ կարող է հանգստացնող արևի փայլ հաղորդել ձեր անկողնու կողքին ՝ արևածագը մոդելավորելով հաճելի արթնանալու փորձի համար:
Քայլ 1: Անհրաժեշտ նյութեր
Arduino esp32
Ձայնի տվիչ
Չորս ուղղությամբ երկկողմանի տրամաբանական մակարդակի փոխարկիչ
Neopixel led 2m 60 led/մ
Jumper լարերը
Միկրո USB մալուխ ՝ ադապտորով
Ինտերնետ կապը
Քայլ 2: Շղթայի դիագրամ
Շրջանակային դիագրամ կազմվեց և համապատասխանաբար կազմվեց միացում, ինչպես տրված է
ստորև բերված դիագրամը:
Քայլ 3: Arduino կոդ
Այստեղ նախ կազմվեց վիզուալիզատորի կոդը: Այնուհետև երկու օրինակ կոդ
; «Neoplxel RGBW աստղային փորձարկում»; և «simpleWebServerWifi» - ն փոփոխվել և ինտեգրվել է վիզուալիզատոր կոդի մեջ: Թեև ծածկագիրը երբեմն դեռ խափանված է (պատահական լուսադիոդի լուսավորություն ժամանակ առ ժամանակ): Կոդի հաջորդ կրկնությունը (բավական ժամանակ ստանալուց հետո) կթարմացվի:
#ներառում
#ifdef _AVR_
#ներառում
#էնդիֆ
const int numReadings = 5;
int ընթերցումներ [numReadings];
int readIndex = 0;
int ընդհանուր = 0;
int միջին = 0;
int micPin = 33;
#սահմանեք PIN 4
#սահմանել NUM_LEDS 120
#սահմանեք ՊԱՀՔՈ 100ԹՅՈՆԸ 100
Adafruit_NeoPixel շերտ = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
բայթ 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 };
#ներառում
#ներառում
char ssid = "yourNetwork"; // ձեր ցանցի SSID (անունը)
char pass = "secretPassword"; // ձեր ցանցի գաղտնաբառը
int keyIndex = 0; // ձեր ցանցի բանալու ինդեքսի համարը (անհրաժեշտ է միայն WEP- ի համար)
int կարգավիճակ = WL_IDLE_STATUS;
WiFiServer սերվեր (80);
դատարկ կարգավորում ()
{
Serial.begin (9600); // սկզբնավորել սերիական հաղորդակցությունը
pinMode (9, OUTPUT); // սահմանել LED փին ռեժիմը
// ստուգեք վահանի առկայությունը.
եթե (WiFi.status () == WL_NO_SHIELD) {
Serial.println («WiFi վահանը ներկա չէ»);
իսկ (ճշմարիտ); // մի շարունակիր
}
Լարային fv = WiFi.firmwareVersion ();
եթե (fv! = "1.1.0") {
Serial.println («Խնդրում ենք բարելավել որոնվածը»);
}
// Wifi ցանցին միանալու փորձ.
իսկ (կարգավիճակ! = WL_CONNECTED) {
Serial.print ("Փորձում եմ միանալ ցանցին անունով.");
Serial.println (ssid); // տպել ցանցի անունը (SSID);
// Միացեք WPA/WPA2 ցանցին: Փոխեք այս տողը, եթե օգտագործում եք բաց կամ WEP ցանց.
կարգավիճակ = WiFi.begin (ssid, pass);
// սպասեք 10 վայրկյան կապի համար.
ուշացում (10000);
}
server.begin (); // գործարկեք վեբ սերվերը 80 նավահանգստում
printWifiStatus (); // Դուք այժմ միացված եք, այնպես որ տպեք կարգավիճակը
}
{
Serial.begin (9600);
strip.setBrightness (BRIGHTNESS);
strip.begin ();
strip.show (); // Նախագծել բոլոր պիքսելները «անջատված»
pinMode (micPin, INPUT);
համար (int thisReading = 0; thisReading <numReadings; thisReading ++) {
ընթերցումներ [thisReading] = 0;
}
}
դատարկ ծիածան (uint8_t սպասել) {
uint16_t i, j;
համար (j = 0; j <256; j ++) {
համար (i = 0; i
strip.setPixelColor (i, անիվ ((i+j) & 255));
}
strip.show ();
ուշացում (սպասել);
}
}
դատարկ վիզուալիզատոր () {
ընդհանուր = ընդհանուր - ընթերցումներ [readIndex];
ընթերցումներ [readIndex] = analogRead (micPin);
ընդհանուր = ընդհանուր + ընթերցումներ [readIndex];
readIndex = readIndex + 1;
եթե (readIndex> = numReadings) {
readIndex = 0;
}
միջին = ընդհանուր / թվային ընթերցումներ;
ուշացում (1);
int micpixel = (միջին -100)/5;
Serial.println (միկպիքսել);
եթե (micpixel> 0) {
{
համար (int j = 0; j <= micpixel; j ++)
strip.setPixelColor (j, (micpixel*2), 0, (90-micpixel), 0);
(int j = micpixel; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
եթե (micpixel <0) {
համար (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
դատարկ շրջան () {
{
WiFiClient client = server.available (); // լսեք մուտքային հաճախորդների համար
եթե (հաճախորդ) {// եթե հաճախորդ եք ստանում, Serial.println («նոր հաճախորդ»); // հաղորդագրություն տպել սերիական նավահանգստից
String currentLine = ""; // կատարել տող `հաճախորդից մուտքային տվյալները պահելու համար
while (client.connected ()) {// հանգույց, մինչ հաճախորդը միացված է
if (client.available ()) {// եթե հաճախորդից կարդալու բայթեր կան, char c = client.read (); // կարդալ բայթ, ապա
Սերիա. Գրել (գ); // տպեք այն սերիական մոնիտորը
եթե (c == '\ n') {// եթե բայթը նոր տողի նիշ է
// եթե ընթացիկ տողը դատարկ է, դուք անընդմեջ ստացել եք երկու նոր տողի նիշ:
// սա հաճախորդի HTTP հարցման վերջն է, այնպես որ ուղարկեք պատասխան.
եթե (currentLine.length () == 0) {
// HTTP վերնագրերը միշտ սկսվում են պատասխան կոդով (օրինակ ՝ HTTP/1.1 200 OK)
// և բովանդակության տեսակ, որպեսզի հաճախորդը իմանա, թե ինչ է սպասվում, ապա դատարկ տող.
client.println ("HTTP/1.1 200 OK");
client.println ("Բովանդակության տեսակ. տեքստ/html");
client.println ();
// HTTP պատասխանի բովանդակությունը հետևում է վերնագրին.
client.print («Կտտացրեք այստեղ Միացնել ainիածանի էֆեկտը»);
client.print («Կտտացրեք այստեղ Միացնել Visualizer»);
// HTTP պատասխանը ավարտվում է մեկ այլ դատարկ տողով.
client.println ();
// դուրս գալ while օղակից:
ընդմիջում;
} else {// եթե ունեք նոր գիծ, ապա ջնջեք currentLine- ը ՝
currentLine = "";
}
} else if (c! = '\ r') {// եթե դուք ունեք որևէ այլ բան, բացի կառքի վերադարձի բնույթից, currentLine += c; // ավելացնել այն ընթացիկ գծի վերջում
}
// Ստուգեք ՝ արդյոք հաճախորդի հարցումը «GET /H» կամ «GET /L» էր.
if (currentLine.endsWith ("GET /R")) {
Ainիածան (10); // Rիածանի էֆեկտը միացված է
}
if (currentLine.endsWith ("GET /V")) {
Visualizer (); // Visualizer- ը միացված է
}
}
}
// փակել կապը.
client.stop ();
Serial.println («հաճախորդն անջատված է»);
}
}
void printWifiStatus () {
// տպեք այն ցանցի SSID- ը, որին կցված եք.
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// տպեք ձեր WiFi վահանի IP հասցեն.
IPAddress ip = WiFi.localIP ();
Serial.print («IP հասցե ՝»);
Serial.println (ip);
// տպել ստացված ազդանշանի ուժը.
երկար rssi = WiFi. RSSI ();
Serial.print ("ազդանշանի ուժգնություն (RSSI):");
Serial.print (rssi);
Serial.println («dBm»);
// տպեք, թե ուր գնալ դիտարկիչում.
Serial.print ("Այս էջը գործնականում տեսնելու համար դիտարկիչը բացեք https:// հասցեով");
Serial.println (ip);
}
}
uint32_t Անիվ (բայթ WheelPos) {
WheelPos = 255 - WheelPos;
եթե (WheelPos <85) {
վերադարձի շերտ. Գույն (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
եթե (WheelPos <170) {
WheelPos -= 85;
վերադարձի շերտ. Գույն (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
վերադարձի շերտ. Գույն (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t կարմիր (uint32_t գ) {
վերադարձ (c >> 16);
}
uint8_t կանաչ (uint32_t գ) {
վերադարձ (c >> 8);
}
uint8_t կապույտ (uint32_t գ) {
վերադարձ (գ);
}
}
//Serial.println(micpixel);
}
Քայլ 4. Լամպի հիմքը 3d տպելը
Լամպի բազայի 3D մոդելը չափվել, նախագծվել և տպագրվել է չափսերով բավականաչափ մեծ, որպեսզի տեղավորվեն բազայի խցիկի ներսում առկա բոլոր էլեկտրական բաղադրիչները:
Քայլ 5: Առաջնորդված հավելված
Led- երը փաթաթված էին ստվարաթղթե գլանափաթեթով և ամրացված երկկողմանի ժապավենի միջոցով, ներքևի հատվածում անցք էր փորված ՝ մետաղալարն անցնելու համար
Քայլ 6: Լամպի պարիսպ
Պարիսպ է ստեղծվել `գտնելով թափանցիկ շիշ, որի լայնությունը նման է լամպի հիմքին և բարձրությանը, ինչպես LED- ի կցորդը: Այնուհետև այն ծածկված էր հաստ թուղթով ՝ լույսի ավելի լավ տարածման համար: Այլապես, հնարավոր է օգտագործել ցրտահարված ապակի կամ կիսաթափանցիկ պլաստիկ խողովակներ `որպես լամպի պատյան:
Քայլ 7: Կարգավորում
Ամեն ինչ սոսնձված էր և հավաքված: Եվ լամպը պատրաստ էր որոշ փորձարկումների:
Խորհուրդ ենք տալիս:
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: 6 քայլ (նկարներով)
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control. Այս նախագիծը arduino- ի միջոցով ձեր հեռախոսի միջոցով Bluetooth- ի միջոցով վերահսկում է RGB լուսադիոդային ժապավենը: Կարող եք փոխել գույնը, համաժամեցնել լույսերը երաժշտության հետ կամ ստիպել դրանք ինքնաբերաբար հարմարվել շրջակա լուսավորության համար
Arduino Music Desk Lamp Bluetooth- ով: 9 քայլ
Arduino Music Desk Lamp Bluetooth- ով: Բարև ձեզ: Այս Ուղեցույցում ես պատրաստվում եմ պայծառ բան կառուցել: Թույլ տվեք ձեզ ներկայացնել իմ նոր գրասեղանի լամպը: Դա էժան diy լուծում է `ձեր ձանձրալի գրասեղանը DJ գիշերային գրավչության վերածելու համար: Կամ գուցե ոչ: Բայց ես ձեզ հավաստիացնում եմ, որ վերջնական արտադրությունը
LightBox Music Visualizer: 5 քայլ (նկարներով)
LightBox Music Visualizer. LightBox- ը օգտագործում է ձեր հեռախոսի կամ պլանշետի ներկառուցված խոսափողը ՝ երաժշտությունը վերլուծելու համար ՝ ստեղծելով երաժշտությանը համապատասխանող գեղեցիկ լուսային նախշեր: Պարզապես գործարկեք ծրագիրը, տեղադրեք ձեր հեռախոսը կամ պլանշետը ձայնի աղբյուրի մոտ ինչ -որ տեղ, և ձեր տուփը կպատկերացնի
Arduino Music Reactive Desktop Lamp: 8 քայլ (նկարներով)
Arduino Music Reactive Desktop Lamp: Բարև բոլորին: Այս կառուցման մեջ մենք պատրաստելու ենք ռեակտիվ LED աշխատասեղան ՝ օգտագործելով պարզ բաղադրիչներ և որոշ հիմնական Arduino ծրագրավորում: Այն տպավորիչ ազդեցություն է թողնում, որտեղ լույսը պարելու է բոլոր հնչյունների և երաժշտության ներքո: Այս նախագիծը ես ավարտեցի թիմակիցիս հետ
Nixie Tube Music Visualizer: 10 քայլ (նկարներով)
Nixie Tube Music Visualizer. Հիպնոսացնող երաժշտական վիզուալիզատոր, որը ներշնչված է iTunes- ի վերևի այդ փոքրիկ շերտերից: Որպես ցուցադրում օգտագործվում են տասնչորս ռուսական IN-13 Nixie բարգրաֆ խողովակներ: Երկարությունը, որը լուսավորում է յուրաքանչյուր նիքսի խողովակ, ներկայացնում է որոշակի հաճախականության ծավալը մ