Բովանդակություն:
- Պարագաներ
- Քայլ 1: Պատմություն
- Քայլ 2: HARDWARE SETUP
- Քայլ 3: FՐԱԳՐԱՅԻՆ ԿԱՐԳԱՎՈՐՈՄ
- Քայլ 4. Տեսություն և մեթոդաբանություն
- Քայլ 5: Տեղական ժամանակի ստացում
- Քայլ 6: theարթուցիչի կարգավորում
- Քայլ 7: Սարքի տեղադրում
- Քայլ 8: Կոճակների տեղադրում
- Քայլ 9: Խնդիրների վերացում
- Քայլ 10: Arduino կոդ
Video: Խելացի զարթուցիչ ՝ օգտագործելով Magicbit (Arduino) ՝ 10 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Այս ձեռնարկը ցույց է տալիս, թե ինչպես կարելի է խելացի զարթուցիչ պատրաստել ՝ օգտագործելով OLED էկրան Magicbit dev տախտակում ՝ առանց որևէ RTC մոդուլ օգտագործելու:
Պարագաներ
- Magicbit
- USB-A- ից մինչև Micro-USB մալուխ
Քայլ 1: Պատմություն
Այս ձեռնարկում մենք կսովորենք, թե ինչպես կարելի է խելացի զարթուցիչ պատրաստել Magicbit- ի միջոցով:
Քայլ 2: HARDWARE SETUP
Միացրեք ձեր Magicbit- ը համակարգչին `օգտագործելով USB մալուխ:
Քայլ 3: FՐԱԳՐԱՅԻՆ ԿԱՐԳԱՎՈՐՈՄ
Բացեք ձեր Arduino IDE- ն և տեղադրեք տախտակը Arduino IDE- ով: Հետևյալ հղումը վերաբերում է, թե ինչպես դա անել: Այսպիսով, մենք ձեզ խորհուրդ ենք տալիս նախ գնալ հղում և ծանոթանալ Magic bit- ին:
magicbit-arduino.readthedocs.io/hy/latest/…
Այժմ ընտրեք տախտակի ճիշտ տեսակը և նավահանգիստը: Այս դեպքում տախտակի տեսակը Magicbit է: Գրադարաններն արդեն տեղադրված են, երբ գտնվում են Magicbit գրադարաններում:
Քայլ 4. Տեսություն և մեթոդաբանություն
Եթե նայեք առաջին տեսանյութին, կտեսնեք, որ էկրանն ունի 2 էկրան:
- ժամացույցի էկրան, որը ցույց է տալիս ժամանակի մանրամասները
- ազդանշանային էկրան, որը ցույց է տալիս ահազանգի մանրամասները
Այս երկու էկրանի միջև փոխանակման համար մենք օգտագործեցինք Magicbit- ում երկուսի ցանկացած կոճակ: Այս կոճակները միացված են Magicbit- ում ESP32- ի 35 (ձախ կոճակ) և 34 (աջ կոճակ) կապումներին: Timeամանակը և այլ մանրամասներ ցույց տալու համար մենք օգտագործեցինք ներկառուցված OLED էկրան ՝ կախարդում:
Եկեք խոսենք այն մասին, թե ինչպես են աշխատում այս գրաֆիկական էկրանները:
Theամացույցի էկրանն ունի անալոգային ժամացույց, թվային ժամացույց, ամսաթիվ, ամիս և տարի տեքստեր:
Անալոգային ժամացույց ստեղծելու համար մենք օգտագործում ենք որոշ գրաֆիկական գործառույթներ, որոնք առկա են Adafriut GFX կոչվող գրաֆիկական գրադարանում: Օգտագործելով շրջանակի գործառույթը և գծի գործառույթը, մենք ստեղծում ենք ժամացույցի անալոգային դեմք: Պարզ երկրաչափական գործառույթները, որոնք կոչվում են sin և cos, օգտագործվում են ժամացույցի սլաքների դիրքի համար: Այսպիսով, մենք մուտքագրում ենք միայն պտտվող ձեռքերի ժամանակին համապատասխանող անկյունը: դրա համար մենք սկզբում ժամանակը փոխարկում ենք հետևյալի.
- րոպեական անկյուն = րոպե*(360/60)
- ժամերի անկյուն = ժամ*(360/12)
Angleամացույցի դեմքի կենտրոնի և ժամացույցի դեմքի 12 համարի միջև չափվող անկյունը: Sin և cos գործառույթների միջոցով կարող ենք հաշվարկել ժամ և րոպե տողերի ծայրերի x և y կոորդինատները: Ստորև բերված նկարը նկարագրում է, թե ինչպես է դա տեղի ունենում:
Ըստ կոորդինատների մենք տպում ենք ժամ և րոպե ձեռքով `գծեր գծելով: Adafruit GFX գրադարանում կա նաև տեքստի տպման գործառույթ: Այն օգնում է տպել այլ մանրամասներ (ամսաթիվը, ամիսը և ժամը ցուցադրվում են թվանշաններով) ցուցադրման վրա: Դուք կարող եք փոխել անալոգային ժամացույցի դիրքը և տեքստի դիրքերը ՝ փոփոխելով պարամետրերը ծածկագրում:
Ինչպես և ժամացույցի էկրանին, մենք Adafruit GFX գրադարանում տեքստի տպման գործառույթ ենք օգտագործել OLED էկրանին համապատասխան վայրերում տպագրվող թվերի համար:
Քայլ 5: Տեղական ժամանակի ստացում
Theամացույցի ամենակարևոր մասն այն է, թե ինչպես ենք մենք ճշգրիտ ստանում տեղական ժամանակը: Այդ նպատակով կարող եք օգտագործել արտաքին RTC ժամացույցի մոդուլ կամ ներկառուցված RC ժամացույց ESP32- ում `Magicbit- ում: Այս նախագծում մենք օգտագործեցինք երկրորդ մեթոդը: Այս մեթոդով մենք օգտագործում ենք NTP (ցանցային ժամանակի նախակոչ) հաճախորդ ՝ տեղական ժամանակն ինտերնետից ստանալու համար: Ինտերնետ հասանելիության համար մենք օգտագործեցինք ներկառուցված WIFI սարք ESP32- ում: Հետևաբար, առաջին փուլում մենք օգտագործում ենք WIFI ՝ ինտերնետ մուտք գործելու համար ՝ տրամադրելով SSID և գաղտնաբառ: Այնուհետև gmtOffset- ը և daylightOffset- ը փոփոխականների մեջ պետք է կազմաձևենք վայրկյանների ընթացքում: Այս փոփոխականների արժեքները տարբերվում են աշխարհի տարածաշրջանից տարածաշրջան: gmtOffset- ը նշանակում է GMT- ից տարբերվող վայրկյանների քանակը: dayերեկվա լույսերի մեծամասնության համար Offset- ը 3600 է: Այն կարող եք գտնել ինտերնետում: Տեղական ժամանակի ստացումից հետո մենք այլևս չենք օգտագործում WIFI: Քանի որ այդ դեպքում մենք տեղական ժամանակը հաշվարկում ենք ESP32- ի ներկառուցված RC ժամացույցից: Դա արվում է time.h գրադարանի միջոցով: Arduino- ում կա մի պարզ օրինակ (Arduino> Օրինակներ> ESP32> >ամանակ> պարզություն), որպեսզի կարողանաք իմանալ, թե ինչպես է դա հետագայում աշխատում: Նաև այս հղումները կարող եք օգտագործել NTP հաճախորդի վերաբերյալ լրացուցիչ գիտելիքների համար:
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Տեղական ժամանակը ճիշտ ստանալուց հետո մենք փոխում ենք մեր ժամանակը ՝ ցույց տալով տեքստերը և անկյունը ՝ ըստ այդ ժամանակի տեղեկատվության յուրաքանչյուր հանգույցում:
Քայլ 6: theարթուցիչի կարգավորում
Սեղմելով ձախ և աջ կոճակները, կարող եք փոխել ահազանգի ամսաթիվը և ժամը ընտրությունը: Theարթուցիչի ամսաթիվը և ժամը փոխելիս համոզվեք, որ անջատեք ահազանգը: Ամսաթիվը և ժամը սահմանելուց հետո միացրեք ահազանգը: Քանի որ եթե ահազանգը միացված է, և երբ ահազանգի ժամանակը հավասար է ձեր ընթացիկ ժամանակին այն կարգավորելիս, ահազանգի ազդանշանը կզանգի: Հիմնական հանգույցում միշտ ստուգում է ընթացիկ տեղական ժամանակը և ահազանգի տվյալները հավասար են: Եթե դրանք հավասար են, ապա Magicbit- ում կանաչ և LED լուսադիոդային ազդանշանը կաշխատի մեկ րոպեի ընթացքում:
Քայլ 7: Սարքի տեղադրում
Մենք օգտագործում ենք PWM զարկերակը ՝ ազդանշան ստեղծելու համար ՝ օգտագործելով codeC- ում analogCwrite () գործառույթը: Գրադարանի բոլոր գործառույթների պատճառով ESP32- ը վավեր է Magicbit- ի համար: Դուք կարող եք փոխել ազդանշանի ձայնային ազդանշանի ազդանշանը `հաճախականության և PWM արժեքի փոփոխությունից:
techtutorialsx.com/2017/06/15/esp32-arduin…
Այս էջը նկարագրում է, թե ինչպես է ազդանշանն աշխատում ESP32- ի հետ:
Քայլ 8: Կոճակների տեղադրում
Բոլոր վիճակները փոխելու համար մենք օգտագործեցինք Magicbit- ի երկու ներկառուցված կոճակներ: Հիմնական հանգույցը միշտ ստուգում է երկու կոճակների վիճակը: Քանի որ դրանք ներսից քաշվեցին, այնտեղ նորմալ վիճակը բարձր ազդանշան է: Այսպիսով, դուք կարող եք տեսնել, որ այդ կապանքների թվային ընթերցումը 1 -ն է: Լռելյայն փուլում էկրանը ցույց է տալիս ժամացույցի ինտերֆեյսը: Այդ ժամանակ, երբ երկու կոճակներից որևէ մեկը սեղմված է, այն էկրանը փոխում է ահազանգի: Նաև ժամանակը հաշվում ենք վայրկյաններով ՝ վերջին անգամից, երբ կոճակը սեղմված է: Եթե այդ հաշվարկն ավելի մեծ է, քան որոշված նախնական տևողությունը, ապա էկրանը կցուցադրի ժամացույցի էկրանը:
Կոդը գրված է ՝ օգտագործելով հիմնական գործառույթները սկսնակների համար: Այսպիսով, կոդը պարզ է հասկանալ, և դուք կարող եք սովորել, թե ինչպես է այն աշխատում ՝ հղում կատարելով ծածկագրին:
Քայլ 9: Խնդիրների վերացում
Երբեմն ժամացույցը մի փոքր ուշ է սկսվում կամ գրաֆիկան ճիշտ չի ցուցադրվում: Հետեւյալ խորհուրդները կօգնեն լուծել իրավիճակը:
- Համոզվեք, որ ճիշտ SSID և գաղտնաբառ եք տվել
- Փոխեք NTP սերվերը (կարող եք գտնել բազմաթիվ սերվերներ ինտերնետից, որոնք վերաբերում են ձեր տարածաշրջանին):
- Փոխում է ինտերնետ կապը: (հնարավոր է նաև բջջային թեժ կետը):
Բացի այդ, դուք կարող եք ամեն ինչ շտկել ՝ օգտագործելով սերիական մոնիտորը: OLED- ի ցուցադրումից բացի, սերիական մոնիտորը ցույց է տալիս ժամանակի մասին տեղեկատվությունը:
Քայլ 10: Arduino կոդ
// գրադարաններ OLED ցուցադրման համար
#ներառում
#ներառել #ներառել #սահմանել OLED_RESET 4 #ներառել // wifi գրադարան միացման համար #ներառել «time.h» // գրադարան RC ժամացույց // սահմանել մուտքի և ելքի քորոցների անուններ #սահմանել RightButton 34 #սահմանել LeftButton 35 #սահմանել GreenLED 16 #սահմանել Buzzer 25 int PreTime = 0; int հաշվում = 0; int currentTime = 0; struct tm timeinfo; const char* ssid = "YOUR SSID"; // wifi մանրամասները const char* գաղտնաբառ = "ՔՈ գաղտնաբառ"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // ահազանգի փոփոխականներ int dateIndex = 0; int timeIndex = 0; int selectIndex = -1; bool buzzerOn = 0; int rect [6] [4] = {{5, 0, 118, 16}, {1, 22, 30, 22}, {37, 22, 30, 22}, {73, 22, 55, 22}, {31, 44, 30, 20}, {67, 44, 30, 20}}; // ընտրական ուղղանկյուն const char* ntpServer = "asia.pool.ntp.org"; // սերվերի կալանք երկար gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 էկրան (128, 64); // OLED չափը սահմանում է բայթ clockCenterY = (ցուցադրում. Բարձրություն () + 16)/2; // անալոգային ժամացույցի դեմքի մանրամասներ բայթ clockCenterX = (ցուցադրում. Բարձրություն () - 16)/2; բայթ clockRadius = 23; bool state = 0; // էկրանը միացված կամ անջատված է բուլյան տագնապ = 0; // ահազանգի ընթացիկ վիճակ String alarmState = "Alarm ON"; // alarm on/off // տատանվող ժամանակի տվյալների փոփոխականներ char dayName [10]; ածխածնի օր [3]; char ամիս [10]; ածխածին տարի [5]; այրման ժամեր [3]; այրման րոպեներ [3]; char ամսվա համար [3]; ածխային վայրկյաններ [3]; // կոճակի փոփոխականներ bool RightState = 1; bool LeftState = 1; // buzzer փոփոխականներ int channel = 0; int Հաճախականություն = 2000; int PWM = 200; int լուծում = 8; void setup () {// սահմանել մուտքի և ելքերի pinMode (RightButton, INPUT); pinMode (LeftButton, INPUT); pinMode (GreenLED, OUTPUT); pinMode (Buzzer, OUTPUT); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // intialize display display.display (); ուշացում (3000); display.clearDisplay (); ledcSetup (0, հաճախականություն, լուծում); // կարգավորել pwm պարամետրերը ledcAttachPin (Buzzer, 0); Serial.begin (115200); // ինտերիզացնել սերիական հաղորդակցությունը // միանալ WiFi- ին Serial.printf ("Միացում %s- ին", ssid); WiFi.begin (ssid, գաղտնաբառ); while (WiFi.status ()! = WL_CONNECTED) {ուշացում (500); Serial.print ("."); } Serial.println ("ՄԻԱՎԱ" "); // init և ստանալ ժամանակը configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // անջատել WiFi- ն, քանի որ այն այլևս կարիք չունի WiFi.disconnect (ճշմարիտ); WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // ստացեք ընթացիկ ժամանակը // պահեք աջ և ձախ կոճակի վիճակները RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // chaeck the buttouns are pressed if (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // երբ կոճակը սեղմված է, ազդանշանի ազդանշանի հետաձգումը (100); եթե (վիճակ == 0) {// անցնել ազդանշանային էկրանի շրջանակի վիճակին = 1; // փոխել վիճակը տագնապի վիճակի (վիճակ == 1 && (հաշվում է) <5) {// եթե ահազանգի էկրանին և ժամանակի բացակայության դեպքում calcAlarm (); // հաշվարկել տագնապի տեղեկատվության ժամանակի արժեքները showAlarm (); // ցույց տալ արժեքները} else {// եթե ժամացույցի մեջ է էկրանի վիճակ = 0; display.clearDisplay (); clockFace (); // անալոգային ժամացույցի դեմք printLocalTime (); // ժամացույցի դեմքով տպել ժամանակը և տպել այլ մանրամասներ} onAlarm (); // համեմատել տագնապի ժամանակը տեղական ժամանակի հետ և միացնել տագնապի հետաձգումը (100); // հետաձգում ահազանգ միացված և անջատված} void clockFace () {// caalog ժամացույցի երևույթ: selctions.so- ն վերակայեք -1 -ի (-1 = alarn- ը միացված է կամ անջատված է) selectIndex = -1; } dateAndTimeSelection (selectIndex); // փոխել selction} void dateAndTimeSelection (int index) {if (index == -1) {// ահազանգը միացված կամ անջատված է, եթե (RightState == 0) {// միացնել և անջատել ազդանշանի միջև, եթե (alarmState == "Alarm ON") {alarmState = "Alarm OFF"; } else {alarmState = "Ահազանգը միացված է"; }}} else {if (RightState == 0) {// այլ ընտրություններում պատկերում ենք զանգվածի alarmDateTime- ում առնչվող ամսաթիվը կամ ժամը [index] = alarmDateTime [index] + 1; // ինդեքսը ընտրություն է}} int համեմատել [4] = {12, 2030, 23, 59}; // ամսաթվերի և տարիների վերին սահմանները int համեմատամսյակում [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // int resetValue ամիսների վերին սահմանը [4] = {1, 2020, 0, 0}; // մեկնարկային արժեքներ (int i = 1; համեմատում եմ [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> համեմատություն ամիս [alarmDateTime [1] - 1]) { /զրոյացնել vlaues, եթե ամիսներն իրենց սահմաններից ավելի մեծ են alarmDateTime [0] = 1; }} void showAlarm () {// տպել ահազանգի մանրամասները String alarmDateTime0 = լարային (alarmDateTime [0]); // խայթերը փոխարկել ցուցադրելու համար String alarmDateTime1 = Լար (alarmDateTime [1]); Լարային alarmDateTime2 = Լար (alarmDateTime [2]); Լարային alarmDateTime3 = Լար (alarmDateTime [3]); Լարային alarmDateTime4 = Լար (alarmDateTime [4]); // եթե արժեքներն ունեն մեկ 1 թվանշան, ապա դրանց ավելացրեք «0»: եթե (alarmDateTime [0]
Խորհուրդ ենք տալիս:
Խելացի զարթուցիչ - Intel Edison - Iot RoadShow - Սան Պաուլո. 4 քայլ
Խելացի rmարթուցիչ - Intel Edison - Iot RoadShow - Սան Պաուլո. Մեծ քաղաքում ապրող կամ աշխատող յուրաքանչյուրի մեծ արժանիքներից է ժամանակի կառավարումը: Մեր օրերում ուղևորությունները մշտական են, և քանի որ երթևեկը հիմնական գործոններից մեկն է: Մտածելով դրա մասին ՝ ես պատրաստեցի մի փոքրիկ ծրագիր, որն օգտագործում է Google M- ի հետ ինտեգրումը
WakeupNow - Խելացի զարթուցիչ `8 քայլ
WakeupNow - Smart rmարթուցիչ. Ինչպես բոլորը գիտեն, ուսանողների կյանքը շատ ծանր է, նրանք երկար օր ունեն դասախոսություններով, շատ տնային աշխատանքներով և ընդհանրապես, նրանք խենթ կյանք ունեն: Նրանք ժամանակ ունեն ոչնչի համար, և եթե նրանց առաջարկեք օրվա ընթացքում մի քանի ժամ ավելացնել, նրանք ուրախ կլինեն: Չբացահայտել
Wake Me Up - խելացի զարթուցիչ `6 քայլ
Wake Me Up - խելացի զարթուցիչ. Wake me up- ը խելացի զարթուցիչ է, որը կարող է օգտագործվել նաև որպես խելացի լույս: Ներկառուցված լուսարձակը նմանակում է ձեր սենյակ մտնող բնական լույսը: Սա հնարավորություն է տալիս հանգիստ, բնական ճանապարհով սկսել ձեր օրը: Theարթուցիչը հագեցած է նաև 4*7 սեգմենտով
IoT- ի վրա հիմնված խելացի այգեգործություն և խելացի գյուղատնտեսություն ՝ օգտագործելով ESP32: 7 քայլ
IoT- ի վրա հիմնված խելացի այգեգործություն և խելացի գյուղատնտեսություն ՝ օգտագործելով ESP32. Աշխարհը փոխվում է ժամանակի և գյուղատնտեսության հետ միասին: Այսօր մարդիկ ամենուր ինտեգրում են էլեկտրոնիկան, և գյուղատնտեսությունը դրանում բացառություն չէ: Էլեկտրոնիկայի այս միաձուլումը գյուղատնտեսությունում օգնում է ֆերմերներին և այգիներ կառավարող մարդկանց: Այս
GOOB - խելացի զարթուցիչ. 15 քայլ (նկարներով)
GOOB - խելացի զարթուցիչ. GOOB- ը հապավում է «Ստացեք անկողնուց», իմ նախագծի համար հարմար տեղանուն: Ես ուզում էի ստեղծել մի սարք, որը կարող է օգնել ինձ արթնացնել առավոտյան, քանի որ դա ամենահեշտ գործը չէ: Հիմնական գաղափարն այն է, որ զարթուցիչը չի դադարում ալարը