Mündəricat:

Başqa bir Ağıllı Hava İstasyonu, Amma : 6 Addım (Şəkillərlə)
Başqa bir Ağıllı Hava İstasyonu, Amma : 6 Addım (Şəkillərlə)

Video: Başqa bir Ağıllı Hava İstasyonu, Amma : 6 Addım (Şəkillərlə)

Video: Başqa bir Ağıllı Hava İstasyonu, Amma : 6 Addım (Şəkillərlə)
Video: WhatsApp-ın bu hiyləsini bilirsən? 😎 2024, Iyun
Anonim
Image
Image
Daha bir Ağıllı Hava İstasyonu, amma…
Daha bir Ağıllı Hava İstasyonu, amma…
Başqa bir Ağıllı Hava İstasyonu, amma…
Başqa bir Ağıllı Hava İstasyonu, amma…
Daha bir Ağıllı Hava İstasyonu, amma…
Daha bir Ağıllı Hava İstasyonu, amma…

Tamam, bilirəm ki, hər yerdə bu qədər hava stansiyası var, amma fərqi görmək üçün bir neçə dəqiqə çəkin …

  • Az enerji
  • 2 elektron kağız ekranı…
  • amma 10 fərqli ekran!
  • ESP32 əsaslıdır
  • akselerometr və temperatur / rütubət sensorlar
  • Wifi yeniləməsi
  • 3D çap qutusu

və bir çox başqa faydalı fəndlər …

Əsas fikir, qutunun istiqamətindən asılı olaraq hər iki ekranda müxtəlif məlumatlar göstərməkdir. Kassa, bir ayaq kimi xidmət edən bir növ kəmərli bir səki daşı olan parallelepiped qutusu şəklindədir.

Təchizat

Gördüyünüz kimi, sistem 2 elektron kağız ekranı və 3D çap qutusundan ibarətdir. Ancaq içərisində çox şey var:

  • Bir ESP32
  • Bir MPU6050 sürətölçən
  • DHT22 sensoru
  • LiPo batareyası
  • Hər şeyi birləşdirmək üçün bir PCB
  • Evdə hazırlanmış duPont mövzuları

və Wi-Fi bağlantısı. Əslində 3 şəbəkə elan olunduqda, sistem bağlanmağa müvəffəq olana qədər onları bir -bir sınayır.

Addım 1: Niyə başqa bir hava stansiyası?

Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?
Niyə başqa bir hava stansiyası?

Fikir, qutunun istiqamətindən asılı olaraq hər iki ekranda müxtəlif növ məlumatlar göstərməkdir. Çanta paralellepipedik bir qutu şəklindədir, səki daşdır və dayana bilməsi üçün dayaq rolunu oynayan bir növ kəmərdir.

Akselerometr hərəkəti və istiqaməti aşkar edir və ekranları işə salır.

Enerjiyə qənaət etmək üçün, artıq işləməsə də ekranı saxlayan e-kağız ekranlarını (aşağıda verilənlərə baxın) seçdim. Eyni şəkildə ESP32 üçün, Lolin32 modulunu (qənaətcilliyi ilə məşhur) seçdim və dərin yuxu və akselerometr tərəfindən yaranan fasilədə oyanmağı öyrənməliydim.

Ekranlar SPI vasitəsi ilə bağlanır, ESP32 -yə bağlamaq üçün doğru sancaqlar tapmadan əvvəl xeyli axtardım, çünki akselerometr üçün I2C, DHT22 -i oxumaq üçün bir pin və batareyanın gərginliyinin ölçülməsi üçün 2 digərinə ehtiyacım var. ESP32 demək olar ki, tam doldurulmuşdur! Bəzi pinlərin yalnız oxumaq üçün olduğunu bildiyim üçün (DHT sensoru üçün istifadə etdim), digərləri Wifi ilə birlikdə istifadə edilə bilməz, düzgün konfiqurasiyanı tapmaq bir az çətin idi.

Qutu 4 istiqamətə yönəldilə bilər, üstəgəl düzdür. Ümumilikdə 4*2+2 = 10 mümkün məlumat növünü yalnız 2 ekranda göstərməyə imkan verir. Beləliklə, bir çox şeyi göstərməyə imkan verir:

  • Tarix və günün müqəddəsləri
  • Cari vaxt
  • Bugünkü hava proqnozu
  • Yaxın saatlarda hava proqnozları
  • Yaxın günlər üçün hava proqnozları
  • Batareyanın şarj səviyyəsi
  • Hələ yerim olduğu üçün, xüsusi bir veb saytından təsadüfi bir təklif.

Addım 2: Nə lazımdır?

Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
  • ESP32: Lolin32 modulu (çox aşağı güc, batareya konnektoru ilə təchiz olunmuşdur, batareyanı USB plus vasitəsilə doldura bilər)
  • 2 epaper ekranı: 4.2 düym və 2.9 düym. Modelləri Good Display mağazasından seçdim.
  • DHT22 sensoru
  • MCU6050 akselerometr - girometr I2C sensoru
  • LiPo batareyası
  • Batareya gərginliyinin ölçülməsi üçün: 2 10k rezistor, 1100k rezistor, 1 100nF kondansatör, 1 MOSFET tranzistor
  • Lehim və lehimləmə dəmiri, çap dövrə lövhəsi
  • Kassa üçün 3D printerə giriş

Əlavə edilmiş şəkil, PCB üzərindəki bütün komponentlərin mövqeyini göstərir: Çantaya sığması üçün çox böyük olmamalı yer saxlamalı oldum.

Hava məlumatlarını əldə etmək üçün hava API -lərində qeydiyyatdan keçməlisiniz və açarlarınızı 'Variables.h' faylına düzgün yerlərə qoymalısınız (aşağıya baxın).

Hava saytları:

  • apixu
  • accuweather

Addım 3: Bu Layihə məni çox düşündürdü və öyrəndi …

Bu Layihə məni çox düşündürdü və öyrəndi …
Bu Layihə məni çox düşündürdü və öyrəndi …
Bu Layihə məni çox düşündürdü və öyrəndi …
Bu Layihə məni çox düşündürdü və öyrəndi …
Bu Layihə məni çox düşündürdü və öyrəndi …
Bu Layihə məni çox düşündürdü və öyrəndi …

Bu sistemin aşağı gücə malik olması lazım idi, buna görə hər gecə batareyanı doldurmağa ehtiyac yoxdur … Enerjiyə qənaət etmək üçün, artıq işləməsələr də ekranı saxlayan e-kağız ekranlarını seçdim. Eyni şəkildə ESP32 üçün, Lolin32 modulunu (qənaətcilliyi ilə məşhur) seçdim və dərin yuxunun idarə olunmasını və akselerometr tərəfindən yaranan fasilədə oyanış zəngini öyrənməliydim.

Qutu 4 istiqamətə yönəldilə bilər, daha düzdür. Bütün bunlar 4*2+2 = 10 mümkün məlumat növünü göstərir. Beləliklə, bir çox şeyi etməyə imkan verir: tarix və günün müqəddəsləri, vaxt, bugünkü hava proqnozu, yaxın saatlarda və ya günlərdə hava proqnozları, batareyanın doldurulma səviyyəsi və ixtisaslaşmış bir saytdan təsadüfi bir qiymət.

İnternetdə axtarılan çox şey var və bildiyiniz kimi: WiFi enerji qənaətinin düşmənidir …

Ən son məlumatları göstərmək üçün çox vaxt sərf etmədən əlaqəni idarə etməliyik. Başqa bir olduqca mürəkkəb problem: kifayət qədər dəqiq bir vaxt saxlamaq. İnternetdə vaxt tapa bildiyim üçün RTC -yə ehtiyacım yoxdur, ancaq ESP32 -nin daxili saatı, xüsusən də yuxu dövründə bir qədər sürüşür. İnternetdə saatı sıfırlamağı gözləyərkən kifayət qədər dəqiq qalmağın bir yolunu tapmalı oldum. Hər saat internetdə yenidən sinxronlaşdırıram.

Beləliklə, muxtariyyət (İnternet əlaqələrinin tezliyi) ilə göstərilən məlumatların dəqiqliyi arasında bir fərq var.

Həll edilməli başqa bir problem yaddaşdır. ESP32 dərin yuxuda olduqda, RTC RAM adlanan şey istisna olmaqla, yaddaş itir. Bu yaddaş 4MB genişliyindədir ki, onlardan yalnız 2 -si proqram üçün istifadə oluna bilər. Bu yaddaşda bir yuxu mərhələsindən sonra bir icra müddətindən digərinə saxlanmalı olan müxtəlif proqram dəyişənlərini saxlamalıyam: hava proqnozları, vaxt və tarix, simge fayl adları, sitatlar və s..

Nişanlar haqqında danışarkən, onlar SPIFFS -də, ESP32 fayl sistemində saxlanılır. Pulsuz Wunderground hava API -nin bağlanmasından sonra digər pulsuz hava məlumatı təminatçılarını axtarmalı oldum. Mən ikisini seçdim: biri cari günün hava şəraiti üçün, 12 saatlıq proqnozla, digəri isə çox günlük proqnozlar üçün. Nişanlar eyni deyil, buna görə mənə iki yeni problem yaratdı:

  • Bir simge dəsti seçin
  • Bu nişanları 2 saytın proqnoz kodlarına uyğunlaşdırın

Bu yazışma da hər dəfə yenidən yüklənməməsi üçün RTC RAM -da saxlanılmışdır.

Nişanlarla bağlı son problem. Hamısını SPIFFS -də saxlamaq mümkün deyil. Bütün fayllarım üçün yer çox kiçikdir. Şəkil sıxışdırmaq lazım idi. Python -da simge fayllarımı oxuyan və onları RLE -ə sıxışdıran və sonra sıxılmış faylları SPIFFS -də saxlayan bir skript yazdım. Orada keçirdi.

Lakin elektron kağız ekran kitabxanası yalnız BMP tipli faylları götürür, sıxılmış şəkilləri yox. Bu sıxılmış fayllardan nişanlarımı göstərmək üçün əlavə bir funksiya yazmalı oldum.

İnternetdə oxunan məlumatlar çox vaxt json formatındadır: hava məlumatları, günün müqəddəsləri. Bunun üçün (böyük) arduinoJson kitabxanasından istifadə edirəm. Ancaq sitatlar belə deyil. Onları xüsusi bir saytdan götürdüyüm üçün birbaşa veb səhifənin məzmununa baxaraq oxumalıyam. Bunun üçün xüsusi bir kod yazmalıydım. Hər gün, gecə yarısına yaxın, proqram bu sayta girir və təxminən on təsadüfi sitatı oxuyur və RTC RAM -da saxlayır. Mənzil böyük ekran yuxarıya doğru yönəldildikdə biri təsadüfi olaraq göstərilir.

Vurğulanan simvolların göstərilməsi problemini sizə çatdırıram (üzr istəyirəm, amma alıntılar fransız dilindədir) ….

Kiçik ekran yuxarı qaldıqda, qalan səviyyəni daha yaxşı görmək üçün bir şəkil ilə batareya gərginliyi göstərilir. Batareyanın gərginliyini oxumaq üçün elektron montaj etmək lazım idi. Ölçmə batareyanı boşaltmamalı olduğu üçün yalnız ölçmə aparıldıqda cərəyanı istehlak etmək üçün MOSFET tranzistorunu açar kimi istifadə edən internetdə tapılan bir diaqramdan istifadə etdim.

Bu dövrəni edə bilmək və hər şeyi mümkün olan ən kiçik qutuya yerləşdirmək üçün sistemin bütün komponentlərini birləşdirmək üçün bir PCB hazırlamalı oldum. Bu mənim ilk PCB -dir. Şanslı idim, çünki hər şey bu tərəfdə ilk dəfə yaxşı işləyirdi …

İmplantasiya xəritəsinə baxın: "qadağan edilmiş zona" USB kabelini bağlamaq üçün ayrılmış bir sahədir. Lolin32 modulu batareyanı USB vasitəsilə doldurmağa imkan verir: USB kabeli qoşulduqda batareya doldurulur və modul eyni zamanda işləyir.

Son nöqtə: şriftlər. Müxtəlif ölçülü, cəsarətli və ya olmayan, yaradılmalı və saxlanılmalıdır. Adafruit GFX kitabxanası, şrift sənədlərini düzgün qovluğa yüklədikdən sonra buna çox diqqət yetirir. Faylları yaratmaq üçün Font Converter saytından istifadə etdim, çox rahat!

Seçdiyinizə əmin olun:

  • Ön görünüş ekranı: TFT 2.4"
  • Kitabxana versiyası: Adafruit GFX Font

Xülasə etmək üçün: çox şey öyrənməyimə imkan verən böyük bir layihə

Addım 4: E-kağız ekranlarından istifadə

E-kağız ekranlarından istifadə
E-kağız ekranlarından istifadə

Bu ekranların əsas dezavantajı videoda aydın görünür: ekranın yenilənməsi bir və ya iki saniyə çəkir və yanıb -sönməklə aparılır (iki ekranın normal və tərs versiyalarının alternativ göstərilməsi). Hava məlumatları üçün məqbuldur, çünki çox vaxt yeniləmirəm (qutunun istiqamətinin dəyişməsi istisna olmaqla hər saat). Amma bu zaman üçün deyil. Buna görə (və istehlakı məhdudlaşdırmaq üçün) hələ də HH: MM ekranını istifadə edirəm (saniyələr deyil).

Ekranı yeniləmək üçün başqa bir yol axtarmalı oldum. Bu ekranlar (bəziləri) qismən bir yeniləməni dəstəkləyir (ya ekranın bir sahəsinə, ya da bütün ekrana tətbiq olunur …) amma mənim üçün yaxşı deyildi, çünki mənim böyük ekranım (vaxtı göstərən) piksellərin xəyallarını saxlayır. ki, əvəz olunur. Məsələn, 10: 12 -dən 10:13 -ə keçərkən '2' '3' -ün içərisində bir az görünür və istədiyim '4', '5' və s. Sonra daha da aydın görünür. Bunun mənim ekrana aid olduğunu qeyd etmək üçün: GxEPD2 elektron kağız kitabxanasının müəllifi ilə bu fenomeni öz ekranları ilə müşahidə etmədiyini söylədim. Xəyal ovlamaqda uğur qazanmadan parametrləri dəyişdirməyə çalışdıq.

Başqa bir həll tapmalı olduq: problemi həll edən qismən ikiqat təravət etməyi təklif etdim (heç olmasa mənim üçün qənaətbəxşdir). Saatlar ekran yanıb -sönmədən keçir və heç bir xəyal yoxdur. Ancaq dəyişiklik dərhal deyil: vaxtı dəyişdirmək üçün bir saniyədən bir az çox vaxt lazımdır.

Addım 5: Hazırlayın

Bunu etmək
Bunu etmək
Bunu etmək
Bunu etmək
Bunu etmək
Bunu etmək
Bunu etmək
Bunu etmək

İstiqamət dəyişdikdə içəridə heç bir şeyin hərəkət etməməsini təmin etmək üçün fərqli komponentlər (displeylər, elektron modullar, PCB -lər, batareyalar) yapışqan tabancası ilə yapışdırılır. Telləri PCB -nin altına yönəltmək üçün aralıqlarla hazırlanmış ayaqlara quraşdırdım, eyni şey batareya üçün də keçərlidir.

Tezliklə xarici bir USB mikrofon konnektoru quracağam, buna görə batareyanı doldurmaq üçün çantanı açmamalıyam.

Bəlkə də hamısını mükəmməlləşdirmək üçün OTA tərəfindən yenilənməkdə maraqlı olaram ….

Addım 6: Kod və Dosyalar

Image
Image

Üç arxiv faylı verilir:

  • Hava stansiyası.zip: Arduino IDE istifadə edərək yükləmək üçün Arduino kodu
  • Boite ecran.zip: kassa üçün CAD və 3D printer faylları
  • data.zip: ESP32 -nin SPIFFS -də yüklənəcək fayllar.

Faylları ESP32 -nin SPIFFS -ə necə yükləməyi bilmirsinizsə, çox faydalı bir plugin təqdim edən və Arduino IDE -də necə istifadə edəcəyinizi öyrənin.

Dərin yuxu proqramlaşdırması bir Arduinonun standart proqramlaşdırmasından çox fərqlidir. ESP32 üçün, bu, ESP32 -nin oyandığını və quruluşu yerinə yetirdiyini, sonra yuxuya getdiyini bildirir. Beləliklə, loop funksiyası boşdur və heç vaxt icra edilmir.

Bəzi başlanğıc mərhələsi ilk icra zamanı yalnız bir dəfə aparılmalıdır (məsələn, vaxt, hava məlumatları, sitatlar və s.) Çözüm, hər oyanışda artırılan (dərin yuxu mərhələlərində belə aktiv olaraq qalan) RTC RAM-da bir dəyişəni saxlamaqdır. 1 -ə bərabərdirsə, bu ilk icra və ESP32 başlanğıc mərhələsini keçir, əks halda bu mərhələ atlanır.

ESP32 -ni oyatmaq üçün bir neçə variant var:

  • Taymerin oyanması: kod, yatmazdan əvvəl dərin yuxunun müddətini hesablayır. Bu günün (hər 1, 2, 3 və ya 5 dəqiqədə) və ya hava məlumatlarını (hər 3 və ya 4 saatda) və günün müqəddəslərinin (hər 24 saatda) yenilənməsi üçün istifadə olunur.
  • Aradan oyanma: akselerometr ESP32-ni oyatmaq üçün istifadə olunan bir siqnal göndərir. Bu, oriyentasiya dəyişikliyini aşkar etmək və ekranları yeniləmək üçün istifadə olunur
  • Toxunma sensorunun oyanması: ESP32, sensor kimi işləyən bir neçə sancaqla təchiz olunmuşdur, lakin taymerin oyanması ilə istifadə edilə bilməz, buna görə də mən bunu istifadə etməmişəm.

Kodun başqa bir yerində, enerjiyə qənaət edərkən vaxtı dəqiq saxlamaq üçün (yəni hər dəqiqə NTP serverini bağlamayın), Adafruit GFX kitabxanası tərəfindən dəstəklənməyən vurğuları aradan qaldırmaq üçün ekranı yeniləməmək üçün akselerometr parametrlərini xüsusilə fasiləli oyanma üçün təyin etmək, taymerin oyanması halında yatmaq vaxtını dəqiq hesablamaq, IDE-yə qoşulmadıqda Serial konsolunu istifadə etməkdən çəkinmək (enerjiyə yenidən qənaət etmək üçün) ehtiyac yoxdur. ehtiyac olmadıqda wifi və s.… və kod funksiyaları anlamağa kömək edən şərhlərlə doludur.

Bu təlimatı oxuduğunuz üçün təşəkkür edirəm (mənim ilk kitabım). Ümid edirəm ki, bəyənəcəksiniz və bu hava stansiyasını düzəltməkdən zövq alacaqsınız

Sensorlar Müsabiqəsi
Sensorlar Müsabiqəsi

Sensorlar yarışmasında ikinci yeri tutdu

Tövsiyə: