Բովանդակություն:

Եվս մեկ խելացի եղանակային կայան, բայց : 6 քայլ (նկարներով)
Եվս մեկ խելացի եղանակային կայան, բայց : 6 քայլ (նկարներով)

Video: Եվս մեկ խելացի եղանակային կայան, բայց : 6 քայլ (նկարներով)

Video: Եվս մեկ խելացի եղանակային կայան, բայց : 6 քայլ (նկարներով)
Video: հ1-ի հաղորդավարուհին չկարողացավ զսպել լացը` զոհերի մասին խոսելիս 2024, Հունիսի
Anonim
Image
Image
Եվս մեկ խելացի եղանակային կայան, բայց…
Եվս մեկ խելացի եղանակային կայան, բայց…
Եվս մեկ խելացի եղանակային կայան, բայց…
Եվս մեկ խելացի եղանակային կայան, բայց…
Եվս մեկ խելացի եղանակային կայան, բայց…
Եվս մեկ խելացի եղանակային կայան, բայց…

Լավ, ես գիտեմ, որ նման եղանակային կայաններ կան ամենուր, բայց մի քանի րոպե ժամանակ պահանջեք ՝ տեսնելու տարբերությունը…

  • Ցածր հզորություն
  • 2 էլեկտրոնային թղթի ցուցադրում…
  • բայց 10 տարբեր էկրաններ:
  • ESP32- ի հիման վրա
  • արագացուցիչ և ջերմաստիճանի / խոնավության տվիչներ
  • Wifi թարմացում
  • 3D տպագիր պատյան

և շատ այլ օգտակար հնարքներ…

Հիմնական գաղափարն այն է, որ երկու էկրանների վրա տարբեր տեղեկություններ ցուցադրվեն ՝ կախված տուփի կողմնորոշումից: Գործը զուգահեռաբար արկղի տեսքով է ՝ սալահատակ, մի տեսակ գոտիով, որը ծառայում է որպես ոտք:

Պարագաներ

Ինչպես տեսնում եք, համակարգը բաղկացած է էլեկտրոնային թղթի 2 էկրաններից և 3D տպագիր տուփից: Բայց դրա մեջ շատ բան կա.

  • ESP32
  • Մեկ MPU6050 արագացուցիչ
  • DHT22 սենսոր
  • LiPo մարտկոց
  • PCB ՝ ամբողջը միացնելու համար
  • Տնական duPont թելեր

և Wi-Fi կապ: Իրականում հայտարարված է 3 ցանց, համակարգը դրանք մեկ առ մեկ ստուգում է, մինչև հաջողվի միանալ:

Քայլ 1: Ինչու՞ մեկ այլ եղանակային կայան:

Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան
Ինչու՞ մեկ այլ եղանակային կայան

Գաղափարն այն է, որ տարբեր տիպի տեղեկատվություն ցուցադրվի երկու էկրաններին `կախված տուփի կողմնորոշումից: Գործը ունի զուգահեռ տուփի տեսք, սալահատակ, մի տեսակ գոտիով, որը ծառայում է որպես հենարան կանգուն դարձնելու համար:

Արագաչափը հայտնաբերում է շարժումն ու կողմնորոշումը և միացնում է ցուցադրումները:

Էներգիա խնայելու համար ես ընտրեցի էլեկտրոնային թղթի էկրանները (տես ստորև բերված հղումները), որոնք պահպանում են էկրանը, նույնիսկ եթե դրանք այլևս սնուցված չեն: Նմանապես ESP32- ի դեպքում ես ընտրեցի Lolin32 մոդուլը (հայտնի է իր խնայողությամբ) և ես պետք է սովորեի, թե ինչպես կառավարել խորը քունը, ինչպես նաև արագացուցիչի միջոցով առաջացած ընդհատման արթնանալը:

Էկրանները միացված են SPI- ի միջոցով, ես բավականին փնտռեցի ՝ նախքան ESP32- ին միացնելու ճիշտ կապերը գտնելը, իմանալով, որ ինձ նաև արագացուցիչի համար անհրաժեշտ է I2C, մարտկոցի լարման չափման համար ՝ DHT22- ը կարդալու համար քորոց: ESP32- ը գրեթե ամբողջությամբ լիցքավորված է: Իմանալով, որ որոշ կապումներն ընթեռնելի են (ես դրանք օգտագործել եմ DHT սենսորի համար), մյուսները չեն կարող օգտագործվել Wifi- ի հետ միասին, ճիշտ կոնֆիգուրացիան գտնելը մի փոքր բարդ էր:

Տուփը կարող է կողմնորոշվել 4 ուղղությամբ ՝ գումարած հարթ: Ընդհանուր առմամբ, 4*2+2 = 10 հնարավոր տեսակի տեղեկատվություն ցուցադրվում է ընդամենը 2 էկրանով: Այսպիսով, դա թույլ է տալիս ցուցադրել շատ բաներ.

  • Ամսաթիվը և օրվա սուրբը
  • Ընթացիկ ժամանակը
  • Եղանակի այսօրվա կանխատեսում
  • Եղանակի կանխատեսումներ առաջիկա ժամերի համար
  • Եղանակի կանխատեսումներ առաջիկա օրերի համար
  • Մարտկոցի լիցքավորման մակարդակը
  • Եվ քանի որ ես դեռ տեղ ունեի, պատահական մեջբերում մասնագիտացված կայքից:

Քայլ 2: Ի՞նչ է ձեզ անհրաժեշտ:

Ի՞նչ է ձեզ պետք
Ի՞նչ է ձեզ պետք
Ի՞նչ է ձեզ պետք
Ի՞նչ է ձեզ պետք
Ի՞նչ է ձեզ պետք
Ի՞նչ է ձեզ պետք
  • ESP32: Lolin32 մոդուլ (շատ ցածր էներգիա, հագեցած մարտկոցի միակցիչով, կարող է լիցքավորել մարտկոցը USB plus- ի միջոցով)
  • 2 դիպուկ էկրան ՝ 4.2 դյույմ և 2.9 դյույմ: Ես ընտրեցի մոդելները Good Display խանութից:
  • DHT22 սենսոր
  • MCU6050 արագացուցիչ - գիրոմետր I2C սենսոր
  • LiPo մարտկոց
  • Մարտկոցի լարման չափման համար `2 10k դիմադրություն, 1 100k դիմադրություն, 1 100nF կոնդենսատոր, 1 MOSFET տրանզիստոր
  • Sոդման և զոդման սարք, տպագիր տպատախտակ
  • Գործի համար 3D տպիչի հասանելիություն

Կցված պատկերը ցույց է տալիս PCB- ի վրա բոլոր բաղադրիչների դիրքը. Ես պետք է տարածք խնայեի պատյանում տեղավորվելու համար, որը չպետք է չափազանց մեծ լինի:

Եղանակի տվյալները ստանալու համար անհրաժեշտ է նաև գրանցվել եղանակի API- ներում և ձեր բանալիները տեղադրել «Variables.h» ֆայլում (տես ստորև):

Եղանակի կայքեր.

  • apixu
  • accuweather

Քայլ 3: Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…

Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…
Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…
Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…
Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…
Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…
Այս նախագիծը ստիպեց ինձ մտածել և սովորել շատ…

Ենթադրվում էր, որ այս համակարգը ցածր էներգիայի էր, այնպես որ կարիք չունեք մարտկոցը լիցքավորելու ամեն օր … Էներգիա խնայելու համար ես ընտրեցի էլեկտրոնային թղթի էկրաններ, որոնք պահպանում են էկրանը, նույնիսկ եթե դրանք այլևս սնուցված չեն: Նմանապես ESP32- ի դեպքում ես ընտրեցի Lolin32 մոդուլը (որը հայտնի է իր խնայողությամբ) և ես պետք է սովորեի, թե ինչպես կառավարել խորը քունը և արագացուցիչի միջոցով առաջացած արթնության ահազանգը:

Տուփը կարող է կողմնորոշվել 4 ուղղությամբ, ավելի հարթ: Ընդհանուր առմամբ, 4*2+2 = 10 ցուցադրվող տեղեկատվության հնարավոր տեսակները: Այսպիսով, դա թույլ է տալիս շատ բաներ անել ՝ ամսաթիվը և օրվա սուրբը, ժամը, եղանակի այսօրվա կանխատեսումը, առաջիկա ժամերի կամ օրերի եղանակի կանխատեսումները, մարտկոցի լիցքավորման մակարդակը և պատահական մեջբերում մասնագիտացված կայքից:

Շատ բան պետք է փնտրել ինտերնետում, և ինչպես գիտեք. WiFi- ն էներգախնայողության թշնամին է…

Այսպիսով, մենք պետք է կառավարենք կապը `արդի տեղեկատվությունը ցուցադրելու համար, բայց առանց չափազանց շատ ժամանակ ծախսելու միացմանը: Մեկ այլ բավականին բարդ խնդիր ՝ բավականին ճշգրիտ ժամանակ պահելը: Ինձ RTC- ի կարիք չկա, քանի որ ես ժամանակ եմ գտնում ինտերնետում, բայց ESP32- ի ներքին ժամացույցը բավականին ցատկում է, հատկապես քնի ժամանակ: Ես ստիպված էի մի միջոց գտնել ՝ բավականաչափ ճշգրիտ մնալու համար, մինչ սպասում էի ժամացույցը ինտերնետով վերականգնելուն: Ես այն համաժամացնում եմ ինտերնետում ամեն ժամ:

Այսպիսով, փոխզիջում կա ինքնավարության (ինտերնետ կապերի հաճախականության) և ցուցադրվող տեղեկատվության ճշգրտության միջև:

Մեկ այլ խնդիր, որը պետք է լուծվի, հիշողությունն է: Երբ ESP32- ը խոր քնի մեջ է, հիշողությունը կորչում է, բացառությամբ այն, ինչ կոչվում է RTC RAM: Այս հիշողությունը 4 ՄԲ լայնություն ունի, որից միայն 2 -ը կարող են օգտագործվել ծրագրի համար: Այս հիշողության մեջ ես պետք է պահեմ տարբեր ծրագրային փոփոխականներ, որոնք պետք է պահվեն մեկ կատարումից մյուսը ՝ քնի փուլից հետո. Եղանակի կանխատեսում, ժամանակ և ամսաթիվ, պատկերակների ֆայլի անուններ, մեջբերումներ և այլն: Ես պետք է սովորեի դրանով զբաղվել:.

Խոսելով սրբապատկերների մասին, դրանք պահվում են SPIFFS- ում ՝ ESP32 ֆայլային համակարգում: Wunderground եղանակի անվճար API- ի փակվելուց հետո ես ստիպված եղա փնտրել եղանակի տվյալների անվճար մատակարարներ: Ես ընտրեցի երկուսը ՝ մեկը ընթացիկ օրվա եղանակի համար ՝ 12 ժամ կանխատեսումներով, և մյուսը ՝ բազմօրյա կանխատեսումների համար: Սրբապատկերները նույնը չեն, այնպես որ դա ինձ առաջացրեց երկու նոր խնդիր.

  • Ընտրեք պատկերակների հավաքածու
  • Համապատասխանեցրեք այս պատկերակները 2 կայքերի կանխատեսման կոդերին

Այս նամակագրությունը նույնպես պահվել է RTC RAM- ում, որպեսզի այն ամեն անգամ չբեռնվի:

Սրբապատկերների հետ կապված վերջին խնդիրը: Անհնար է դրանք բոլորը պահել SPIFFS- ում: Տարածքը չափազանց փոքր է իմ բոլոր ֆայլերի համար: Անհրաժեշտ էր անել պատկերի սեղմում: Ես Python- ում գրեցի մի սցենար, որը կարդում է իմ պատկերակի ֆայլերը և սեղմում դրանք RLE- ում, այնուհետև սեղմված ֆայլերը պահում եմ SPIFFS- ում: Այնտեղ անցկացվեց:

Բայց էլեկտրոնային թղթի ցուցադրման գրադարանը վերցնում է միայն BMP տիպի ֆայլեր, այլ ոչ թե սեղմված պատկերներ: Այսպիսով, ես ստիպված էի գրել լրացուցիչ գործառույթ, որպեսզի կարողանայի ցուցադրել իմ պատկերակները այս սեղմված ֆայլերից:

Ինտերնետում կարդացած տվյալները հաճախ json ձևաչափով են ՝ եղանակի տվյալներ, օրվա սուրբ: Ես դրա համար օգտագործում եմ (մեծ) arduinoJson գրադարանը: Բայց մեջբերումներն այդպիսին չեն: Ես դրանք վերցնում եմ նվիրված կայքից, ուստի ես պետք է դրանք կարդամ ՝ ուղղակիորեն դիտելով վեբ էջի բովանդակությունը: Դրա համար ես պետք է կոնկրետ կոդ գրեի: Ամեն օր, կեսգիշերին մոտ, ծրագիրը գնում է այս կայք և կարդում մոտ տասը պատահական մեջբերում և պահում դրանք RTC RAM- ում: Նրանցից մեկը պատահականորեն ցուցադրվում է նրանց մեջ, երբ պատյանն ուղղված է մեծ էկրանին դեպի վեր:

Ես ձեզ փոխանցում եմ ընդգծված նիշերի ցուցադրման խնդիրը (կներեք, բայց մեջբերումները ֆրանսերեն են)…

Երբ փոքր էկրանը բարձրանում է, մարտկոցի լարումը ցուցադրվում է ՝ մնացած մակարդակն ավելի լավ տեսնելու գծագրով: Մարտկոցի լարումը կարդալու համար անհրաժեշտ էր էլեկտրոնային հավաքույթ կատարել: Քանի որ չափումը չպետք է լիցքաթափի մարտկոցը, ես օգտագործեցի ինտերնետում գտնված դիագրամ, որն օգտագործում է MOSFET տրանզիստորը որպես անջատիչ, որպեսզի հոսանքը սպառի միայն այն ժամանակ, երբ չափումը կատարվում է:

Որպեսզի կարողանամ կատարել այս միացումը և ամեն ինչ տեղավորել տուփի մեջ, որն ուզում էի հնարավորինս փոքր, ես պետք է պատրաստեի PCB ՝ համակարգի բոլոր բաղադրիչները միացնելու համար: Սա իմ առաջին PCB- ն է: Իմ բախտը բերեց, քանի որ ամեն ինչ առաջին անգամ լավ աշխատեց այս կողմում…

Տեսեք իմպլանտացիայի քարտեզը. «Արգելված գոտին» այն տարածք է, որը վերապահված է USB մալուխը միացնելու համար: Lolin32 մոդուլը թույլ է տալիս լիցքավորել մարտկոցը USB- ի միջոցով. Մարտկոցը լիցքավորվում է, եթե USB մալուխը միացված է, և մոդուլը միաժամանակ աշխատում է:

Վերջին կետը `տառատեսակները: Տարբեր չափերի ՝ համարձակ թե ոչ, դրանք պետք է ստեղծվեին և պահվեին: Adafruit GFX գրադարանը շատ լավ է հոգ տանում դրա մասին, երբ ճիշտ գրացուցակում տեղադրեք տառատեսակի ֆայլերը: Ֆայլերը ստեղծելու համար ես օգտագործեցի Font Converter կայքը, շատ հարմար:

Համոզվեք, որ ընտրել եք.

  • Նախադիտման ցուցադրում ՝ TFT 2.4"
  • Գրադարանային տարբերակ ՝ Adafruit GFX տառատեսակ

Այսպիսով, ամփոփելու համար. Մեծ նախագիծ, որը թույլ տվեց ինձ սովորել շատ բաներ:

Քայլ 4: Էլեկտրոնային թղթի ցուցադրումների օգտագործումը

Էլեկտրոնային թղթի ցուցադրման օգտագործումը
Էլեկտրոնային թղթի ցուցադրման օգտագործումը

Այս էկրանների հիմնական թերությունը հստակ տեսանելի է տեսանյութում. Ցուցադրման թարմացումը տևում է մեկ կամ երկու վայրկյան և կատարվում է բռնկումով (երկու էկրանների նորմալ և շրջված տարբերակների այլընտրանքային ցուցադրում): Եղանակի մասին տեղեկատվության համար դա ընդունելի է, քանի որ ես այն շատ հաճախ չեմ թարմացնում (ամեն ժամ, բացառությամբ տուփի կողմնորոշման փոփոխության): Բայց ոչ այն ժամանակվա համար: Ահա թե ինչու (և սպառումը սահմանափակելու համար) ես դեռ օգտագործում եմ HH: MM էկրանը (ոչ թե վայրկյանները):

Այսպիսով, ես ստիպված էի այլ կերպ փնտրել ցուցադրումը թարմացնելու համար: Այս էկրանները (դրանցից մի քանիսը) ապահովում են մասնակի թարմացում (կիրառվում է էկրանի մի հատվածի կամ ամբողջ էկրանին …), բայց դա ինձ համար լավ չէր, քանի որ իմ մեծ էկրանը (որը ցույց է տալիս ժամանակը) պահպանում է պիքսելների ուրվականները որոնք փոխարինվում են: Օրինակ ՝ 10:12 -ից 10:13 անցնելիս «2» -ը մի փոքր տեսանելի է «3» -ի ներսում, և այն ավելի տեսանելի է դառնում «4» -ից, «5» -ից և այլն: Ես կցանկանայի նշելու, որ դա իմ էկրանին է վերաբերում. ես դա քննարկեցի էլեկտրոնային թղթի ցուցադրման գրադարանի GxEPD2 հեղինակի հետ, ով ինձ ասաց, որ ինքը չի դիտում այս երևույթը սեփական էկրաններով: Մենք փորձեցինք փոխել պարամետրերը ՝ չհաջողվելով ուրվականների որս կատարել:

Այսպիսով, մենք պետք է այլ լուծում գտնեինք. Ես առաջարկեցի մասնակի կրկնակի թարմացում անել, ինչը լուծեց խնդիրը (համենայն դեպս դա ինձ բավարարում է): Theամերն անցնում են առանց էկրանը թարթելու և ուրվականներ չկան: Այնուամենայնիվ, փոփոխությունն անմիջապես չի կատարվում. Ժամանակը փոխելու համար պահանջվում է մի փոքր ավելի քան մեկ վայրկյան:

Քայլ 5: Պատրաստել այն

Այն պատրաստելը
Այն պատրաստելը
Այն պատրաստելը
Այն պատրաստելը
Այն պատրաստելը
Այն պատրաստելը
Այն պատրաստելը
Այն պատրաստելը

Ապահովելու համար, որ կողմնորոշման փոփոխության ժամանակ ոչինչ չի շարժվում ներսում, տարբեր բաղադրիչները (դիսփլեյներ, էլեկտրոնային մոդուլներ, PCB, մարտկոցներ) սոսնձված են սոսինձ ատրճանակով: PCB- ի տակ լարերը ուղղելու համար ես այն տեղադրեցի անջատիչների միջոցով պատրաստված ոտքերի վրա, նույնը վերաբերում է մարտկոցին:

Շուտով ես կտեղադրեմ արտաքին USB խոսափողի միակցիչ, այնպես որ ստիպված չեմ լինի բացել պատյանը մարտկոցը լիցքավորելու համար:

Միգուցե ես նույնպես շահագրգռված կլինեմ թարմացնել OTA- ն ՝ այդ ամենը կատարելագործելու համար…:

Քայլ 6: Կոդ և ֆայլեր

Image
Image

Երեք արխիվային ֆայլ տրամադրվում է.

  • Եղանակի կայան. Zip. Arduino կոդը ՝ Arduino IDE- ի միջոցով վերբեռնելու համար
  • Boite ecran.zip. CAD և 3D տպիչ ֆայլեր պատյանների համար
  • data.zip: ESP32- ի SPIFFS- ում վերբեռնվող ֆայլերը:

Եթե չգիտեք, թե ինչպես ֆայլեր վերբեռնել ESP32- ի SPIFFS- ում, պարզապես կարդացեք այս ձեռնարկը, որը ներկայացնում է շատ օգտակար հավելում և ինչպես օգտագործել այն Arduino IDE- ում:

Խորը քնի ծրագրավորումը բավականին տարբերվում է Arduino- ի ստանդարտ ծրագրավորումից: ESP32- ի համար դա նշանակում է, որ ESP32- ն արթնանում է և կատարում կարգավորումը, այնուհետև քնում: Այսպիսով, loop գործառույթը դատարկ է և երբեք չի կատարվում:

Նախաստորագրման որոշ փուլ պետք է գործադրվի միայն մեկ անգամ ՝ առաջին կատարման ժամանակ (օրինակ ՝ ժամանակ ստանալը, եղանակի տվյալները, մեջբերումները և այլն), ուստի ESP32- ը պետք է իմանա ՝ ընթացիկ արթնացումն առաջինն է, թե ոչ. Դրա համար ՝ լուծումը RTC RAM- ում փոփոխականի պահպանումն է (որը ակտիվ է մնում նույնիսկ խոր քնի փուլերում), որն ավելանում է յուրաքանչյուր արթնանալիս: Եթե դա հավասար է 1 -ի, ապա դա առաջին կատարումն է, և ESP32- ն անցնում է սկզբնավորման փուլին, հակառակ դեպքում այս փուլը բաց է թողնվում:

ESP32- ը արթնացնելու համար կան մի քանի հնարավորություններ.

  • Erամաչափի արթնացում. Կոդը հաշվարկում է քնելուց առաջ խոր քնի տևողությունը: Սա օգտագործվում է օրվա մեջբերումների և սուրբ ժամանակի (յուրաքանչյուր 1, 2, 3 կամ 5 րոպե) կամ եղանակի տվյալները (յուրաքանչյուր 3 կամ 4 ժամը) թարմացնելու համար (յուրաքանչյուր 24 ժամ)
  • Ընդմիջման արթնացում. Արագացուցիչը ազդանշան է ուղարկում, որն օգտագործվում է ESP32- ն արթնացնելու համար: Սա օգտագործվում է կողմնորոշման փոփոխությունը հայտնաբերելու և ցուցադրումները թարմացնելու համար
  • Հպման տվիչների արթնացում. ESP32- ը հագեցած է մի քանի կապում, որոնք գործում են որպես հպման տվիչներ, բայց դրանք չեն կարող օգտագործվել ժամաչափի արթնացման հետ, այնպես որ ես դա չեմ օգտագործել:

Կան այլ ծրագրավորման հնարքներ ՝ ծածկագրում ՝ էներգիան խնայելիս ժամանակը ճշգրիտ պահելու համար (այսինքն ՝ NTP սերվերը ամեն րոպե չմիացնելով), Adafruit GFX գրադարանի կողմից չաջակցվող շեշտադրումները հեռացնելու համար, ցուցադրումը թարմացնելուց, եթե անհրաժեշտ չէ արագացուցիչի պարամետրեր սահմանել հատկապես ընդհատման արթնացման համար, ժամաչափի արթնացման դեպքում ճշգրիտ հաշվարկել քնի ժամանակը, խուսափել Սերիական վահանակից, եթե միացված չէ IDE- ին (նորից էներգիա խնայելու համար), անջատել wifi, երբ դրա կարիքը չկա, և այլն … և կոդը լի է մեկնաբանություններով, որոնք օգնում են հասկանալ գործառույթները:

Շնորհակալություն այս Ուղեցույցը կարդալու համար (իմ առաջինը): Հուսով եմ, որ ձեզ դուր կգա և կվայելեք այս եղանակային կայանի ստեղծումը:

Սենսորների մրցույթ
Սենսորների մրցույթ

Երկրորդ տեղը սենսորների մրցույթում

Խորհուրդ ենք տալիս: