İçindekiler:

NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı: 8 Adım (Resimlerle)
NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı: 8 Adım (Resimlerle)

Video: NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı: 8 Adım (Resimlerle)

Video: NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı: 8 Adım (Resimlerle)
Video: Egzoz nasıl patlatılır ? 2024, Haziran
Anonim
NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı
NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı
NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı
NaTaLia Hava İstasyonu: Arduino Güneş Enerjili Hava İstasyonu Doğru Şekilde Yapıldı

2 farklı lokasyonda 1 yıllık başarılı operasyondan sonra güneş enerjili meteoroloji istasyonu proje planlarımı paylaşıyor ve güneş enerjisinden gerçekten uzun süreler boyunca hayatta kalabilen bir sisteme nasıl evrildiğini anlatıyorum. Talimatlarımı takip ederseniz ve listelenenlerle aynı malzemeleri kullanırsanız, uzun yıllar çalışacak güneş enerjisiyle çalışan bir hava istasyonu inşa edebilirsiniz. Aslında ne kadar süreceğini sınırlayan tek faktör, kullandığınız pilin ömrüdür.

Adım 1: Hava İstasyonu Çalışması

1, Verici: Hava durumu telemetrisini (Sıcaklık, Nem, Isı İndeksi, Güneş Gücü) periyodik olarak iç alıcı üniteye gönderen güneş panelli dış mekana monte kutu.

2, Alıcı: Veri alımı için bağlı 433 Mhz RF Alıcıya sahip Raspberry PI 2 + Arduino Mega'dan yapılmış iç ünite. Kurulumumda bu ünitede herhangi bir yerel LCD ekran işlevi yoktur. Dikkatsizce koşar. Bir ana C programı, Arduino'dan gelen verileri seri aracılığıyla alır, ardından verileri bir metin dosyasına kaydeder ve son alınan verileri diğer cihazların sorgulaması için telnet aracılığıyla kullanılabilir hale getirir.

İstasyon, fotorezistörün (dışarıda gündüz mü yoksa gece mi olduğunu belirleyen) okumasıyla evimdeki ışıkları kontrol ediyor. Alıcı benim durumumda başsızdır ancak projeyi bir LCD ekran eklemek için kolayca değiştirebilirsiniz. İstasyondan gelen hava durumu verilerini kullanan, ayrıştıran ve görüntüleyen cihazlardan biri de diğer projem: Ironforge the NetBSD Toaster.

2. Adım: İlk Sürümler

İlk Sürümler
İlk Sürümler
İlk Sürümler
İlk Sürümler
İlk Sürümler
İlk Sürümler
İlk Sürümler
İlk Sürümler

İnternette çok sayıda güneş enerjisi projesi var, ancak bunların çoğu, özellikle bulutlu, karanlık kış aylarında, sistemin güneş panelinin yenileyebileceğinden zamanla pilden daha fazla enerji alması gibi yaygın bir hatayı yapıyor.

Güneş enerjisiyle çalışan bir sistem tasarladığınızda, tüm bileşenlerde önemli olan tek şey GÜÇ TÜKETİMİ: mcu, radyo vericisi, voltaj regülatörü vb.

Ahududu pi gibi büyük bir bilgisayar veya ESP gibi güç tüketen bir wifi cihazı sadece birkaç bit hava durumu verilerini toplamak ve taşımak için aşırıya kaçabilir, ancak bu derste göstereceğim gibi küçük bir Arduino kartı bile.

En iyisi, inşa süreciniz sırasında her zaman bir metre veya bir dürbün ile akımı ölçmektir (işlem sırasında çok kısa zaman aralıklarında (milisaniye) kullanımdaki küçük ani artışları ölçmeye çalıştığınızda kullanışlıdır).

İlk resimde ilk (Arduino Nano Tabanlı) istasyonumu ve ikinci Arduino Barebone Atmega 328P kartımı görebilirsiniz.

İlk sürüm, mükemmel çalışmasına rağmen (ortamı izleme ve radyo yoluyla veri gönderme) çok yüksek güç tüketimi ~ 46mA'ya sahipti ve pili birkaç hafta içinde boşalttı.

Tüm sürümler aşağıdaki pili kullanıyordu:

18650 6000mAh Korumalı Li-ion Şarj Edilebilir Pil Dahili Koruma Levhası

Bu ScamFire pillerle ilgili GÜNCELLEME. Bu oldukça eski bir Eğitilebilir Dosya olmasına rağmen, bu sahte pil nedeniyle hala düzeltmeye mecbur hissettim. Bahsedilen pili satın almayın, diğer LION/LIPO piller hakkında kendi araştırmanızı yapın, tüm 3.7V piller bu projede çalışacaktır.

Sonunda gerçek kapasitesinin ne olduğunu görmek için ScamFire pilini çürütmek için zamanım oldu. Bu nedenle, gerçek ve "ilan" kapasitelerle 2 hesaplamayı yan yana yapacağız.

Her şeyden önce, bu pilin sahte olduğu ve bu konuda iddia ettikleri hiçbir şeyin doğru olmadığı bir şey var, yeni sürümler daha da kötü, 2 cent koruma devresini dışarıda bırakarak sahteyi kopyaladılar, böylece hiçbir şey pillerin sıfıra kadar boşalmasını engelleyemez.

LION/LIPO piller hakkında küçük bir makale:

TLDR:

Bunun anlamı, hücrenin maksimum voltajının 4,2v ve "nominal" (ortalama) voltajın 3,7V olmasıdır.

Örneğin, burada bir "klasik" 3.7V/4.2V pil için voltaj profili verilmiştir. Voltaj maksimum 4,2'de başlar ve pil ömrünün çoğu için hızla yaklaşık 3,7V'ye düşer. 3.4V'a bastığınızda pil biter ve 3.0V'da kesme devresi pilin bağlantısını keser.

Sahte bir yük kullanarak ölçümlerim:

Pil şarjlı: 4.1V

Kesme ayarı: 3.4V

Yük simülasyonu: 0.15A (cihazım bundan daha düşük seviyelere çıkmakta biraz sorun yaşadı.)

Ölçülen kapasite: 0.77Ah, reklamı yapılan 6000mAh yerine 800mAh olan karşılıksız bir 0,8 Ah verir!

Bu pilin koruma devresi bile olmadığı için rahatça daha da düşebiliyordum ama 10 dakika sonra 3.4V'de zaten 3.0V'a düşüyor.

Bu nedenle basit hesaplamalarla pil şunları sağlar:

Teorik

Pil voltajı =3.7V

Güç =3.7x6000= 22000 mWh

Gerçek

Akü voltajı =3.7VGüç =3.7x800= 2960 mWh

Sürüm: 0.1 ARDUINO NANO TABANLI

LowPower kitaplığı ile bile bir Arduino nano ~ 16 mA (uyku modunda) -> BAŞARISIZ tüketir.

Teorik

Pavg=VxIavg =5Vx16mA= 80 mW

Pil ömrü = 22000/80 =275 saat = yaklaşık 11 gün

RealPavg=VxIavg=5Vx16mA= 80 mW

Pil ömrü = 800/80 =10 saat

Sürüm: 0.2 Atmega 328P Barebone

Bir ATmega328 tarafından tüketilen güç, onunla ne yaptığınıza çok bağlıdır. Orada varsayılan durumda otururken, 16MHz'de çalışırken 16mA @ 5V kullanabilir.

ATmega328P Aktif Moddayken, saniyede birkaç milyon talimatı sürekli olarak yürütür. Ayrıca, Dahili Çevre Birimleri Analogdan Dijitale Dönüştürücü (ADC), Seri Çevresel Arabirim (SPI), Zamanlayıcı 0, 1, 2, İki Kablolu Arabirim (I2C), USART, Watchdog Zamanlayıcı (WDT) ve Kararma Algılama (BOD) güç tüketir.

Güçten tasarruf etmek için ATmega328P MCU bir dizi uyku modunu destekler ve kullanılmayan çevre birimleri kapatılabilir. Uyku modları, hangi bölümlerin aktif kaldığına, uyku süresine ve uyanmak için gereken süreye (uyanma süresi) göre farklılık gösterir. Uyku modu ve aktif çevre birimleri, AVR uyku ve güç kitaplıkları ile veya daha kısaca, mükemmel Düşük Güç kitaplığı ile kontrol edilebilir.

Low-Power kitaplığının kullanımı basittir ancak çok güçlüdür. LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF) ifadesi; MCU'yu ilk argümana bağlı olarak 16 ms ila 8 s için SLEEP_MODE_PWR_DOWN'a koyar. ADC ve BOD'yi devre dışı bırakır. Kapatma uykusu, bir sonraki kesintiye kadar tüm çip işlevlerinin devre dışı bırakıldığı anlamına gelir. Ayrıca, harici osilatör durdurulur. Yalnızca INT1 ve INT2'deki seviye kesmeleri, pin değiştirme kesmeleri, TWI/I2C adres eşleşmesi veya etkinleştirilmişse WDT, MCU'yu uyandırabilir. Yani tek bir ifade ile enerji tüketimini minimuma indireceksiniz. Açıklamayı çalıştıran güç LED'i ve regülatörsüz (aşağıya bakın) 3,3 V Pro Mini için enerji tüketimi 4,5 μA'dır. Bu, WDT'nin 4.2 μA etkin olduğu (kaynaklarda bağlantılı veri sayfası) güç kapatma uykusu için ATmega328P veri sayfasında belirtilenlere çok yakındır. Bu nedenle, powerDown işlevinin makul olarak mümkün olan her şeyi kapattığından oldukça eminim. LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); ifadesi ile WDT devre dışı bırakılır ve bir kesme tetiklenene kadar uyanmazsınız.

Böylece barebone kurulumu ile çipi çok az enerji tüketirken (çevre birimleri olmadan 0,04 mA) 5 dakika uyku moduna alabiliyoruz. Ancak bu yalnızca kristal osilatörlü Atmega 328P yongasıdır ve başka bir şey değildir, bu konfigürasyonda akü voltajını 3,7V -> 5,0 V arasında artırmak için kullanılan voltaj yükseltici de 0,01 mA tüketir.

Bir sabit voltaj tahliyesi, uyku modunda tüketimi toplam 1 mA'ya yükselten eklenen foto dirençti (bu, tüm bileşenleri içerir).

Hem uyku hem de uyandırma modunda cihazın kesin tüketimini hesaplama formülü:

Iavg = (Ton*İyon + Uyku*Uyku) / (Ton +Tuyku)

İyon = 13mA

Bu çoğunlukla RF433 Mhz vericisinden geliyor:

verici:

Çalışma voltajı: 3V - 12V için maks. güç kullanımı 12VÇalışma akımı: max 40mA'dan az max ve min 9mARRezonans modu: (SAW)Modülasyon modu: ASKÇalışma frekansı: Eve 315MHz Veya 433MHzİletim gücü: 25mW (12V'de 315MHz)Frekans hatası: +150kHz (maks)Hız: 10Kbps'den az

Uyku = 1mA

Fotodirenç olmadan önemli ölçüde daha az olurdu.

Trunon zamanı Ton=250 mS = 0.25s

Uyku süresi Tuyku= 5 dak = 300s

Iavg = (Ton*İyon + Uyku*Uyku) / (Ton +Tuyku)

Iavg = (0.25s*13mA + 300s*1mA) / (0.25s+300s)

ortalama=1.26mA

Pavg=VxIavg =5Vx1.26mA=6 mW

Teorik

Pil ömrü = 22000mWh/6mW = 3666 saat = yaklaşık 152 gün

Gerçek

Pil ömrü = 800mWh/6mW = 133 saat = yaklaşık 5,5 gün

Bunlar hala daha iyi bir UltraFire serisi olmasına rağmen, başlangıçta kullandığımdan, güneş paneli veya düşük 1mA tüketimi olmadan bu projenin uzun süre dayanamayacağını görebiliyordunuz.

İstasyonu inşa etmekten çekinmeyin ve bulgularınızı ve hesaplamalarınızı yorumlara yazın, ben de makaleyi güncelleyeceğim. Farklı MCU'lar ve güçlendirici dönüştürücülerle elde edilen sonuçları da takdir ediyorum.

3. Adım: Başarılı Bir Hava İstasyonu İnşa Etme

Başarılı Bir Hava İstasyonu İnşa Etme
Başarılı Bir Hava İstasyonu İnşa Etme
Başarılı Bir Hava İstasyonu İnşa Etmek
Başarılı Bir Hava İstasyonu İnşa Etmek
Başarılı Bir Hava İstasyonu İnşa Etme
Başarılı Bir Hava İstasyonu İnşa Etme
Başarılı Bir Hava İstasyonu İnşa Etme
Başarılı Bir Hava İstasyonu İnşa Etme

İlk başarılı sürüm olmasına rağmen, resimlerde biraz hata içeriyor ve istasyonlar zaten konuşlandırılmış olduğu için bunları yeniden yapamıyorum. Resimde gösterilen iki voltaj yükseltici, aero-modelleme ve diğer uygulamalar için yazı yazılırken elde edilebilir. İstasyonumu yeniden tasarladığımda, daha küçük ve daha verimli bir voltaj yükseltme kartı almayı düşünüyordum, ancak boyut olarak daha küçük olması kesinlikle daha verimli olduğu anlamına gelmez.

Resimdeki gösterge led'i bile olmayan yeni küçük modül aslında kendi kendine 3mA (*FAIL*) boşalttı, bu yüzden eski anakartımla kaldım:

PFM Kontrolü DC-DC USB 0.9V-5V - 5V dc Boost Yükseltme Güç Kaynağı Modülü

Bu modülün yazıldığı sırada Ebay'de 99 cent'e hala mevcut, ancak başka bir güçlendirici kullanmaya karar verirseniz, her zaman beklemedeki güç tüketimini kontrol edin. İyi kalitede bir güçlendirici ile benimkinden (0,01 mA) fazla olmamalıdır, ancak gemideki küçük LED'in lehimlenmesi gerekmesine rağmen.

4. Adım: Donanım Listesi

Donanım Listesi
Donanım Listesi
  • 18650 6000mAh Korumalı Li-ion Şarj Edilebilir Pil Dahili Koruma Levhası
  • Önyükleyicili Atmega 328P16M 5V
  • Adafruit DC Boarduino (Arduino uyumlu) Kit (w/ATmega328) < Gelecekte barebone projeleri yapıyorsanız bu iyi bir yatırım olacak
  • Fotoğraf Işığına Duyarlı Direnç Fotodirenç Optorezistör 5mm GL5539
  • 1A 1000V Diyot 1N4007 IN4007 DO-41 Doğrultucu Diyotlar
  • PFM Kontrolü DC-DC USB 0.9V-5V - 5V dc Boost Yükseltme Güç Kaynağı Modülü
  • 1.6W 5.5V 266mA Mini Güneş Paneli Modülü Sistemi Epoksi Hücre Şarj Cihazı DIY
  • TP405 5V Mini USB 1A Lityum Pil Şarj Kartı Şarj Modülü
  • Arduino/ARM/MC uzaktan kumanda için 433Mhz RF verici ve alıcı bağlantı kiti < Kit, hem verici hem de alıcı içerir
  • IP65 Anahtar Koruyucu Bağlantı Kutusu Dış Mekan Su Geçirmez Muhafaza 150x110x70mm
  • Arduino için Yeni DHT22 Sıcaklık ve Bağıl Nem Sensörü Modülü
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini Switch, 1x1N4007diyot
  • Adafruit 16 MHz Seramik Rezonatör / Osilatör [ADA1873]
  • Alıcı istasyonu + Raspberry PI 1/2/3 için Arduino UNO/Mega vb.
  • Şeffaf Akrilik Plastik Kutu (isteğe bağlı)

Bunların hepsini Ebay'de bulabilirsiniz, ben hiçbir satıcının sayfalarına link vererek reklamını yapmak istemiyorum ve linkler zaten gelecekte ölecek.

Donanım listesi için notlar:

Atmega'yı bir şekilde programlama ile daha fazlasını satın almanız durumunda, aynı şey voltaj yükseltici ve solar şarj kontrolörü için de geçerlidir.

Solar şarj cihazı, yalnızca solar şarj durumunda açılan ve (kırmızı-> şarj, mavi-> tam şarj durumları) gösteren 2 küçük renkli LED içerir. Bunlar lehimsiz de olabilir. Şarj sırasında bataryaya biraz daha fazla meyve suyu verir.

Gördüğünüz gibi listemde pil tutucu yok. Niye ya? Çünkü güvenilmezler. Pilin tutucusundan çıktığı ve bağlantının kesildiği sayısız durum yaşadım. Özellikle kurulumunuz benimki gibi yüksek bir çanak direğe monte edilmişse, her türlü zorlu hava koşuluna açık. Pili 2 fermuarlı tutucuya bile sıkıştırdım ve yine de dışarı çıkmayı başardı. Bunu yapmayın, sadece pilin dış kaplamasını çıkarın ve telleri aşırı şarj koruma devresini içeren doğrudan pilin altına lehimleyin (korumayı atlamayın). Pil tutucu, yalnızca pili cihazda yerinde tutmak için kullanılabilir.

TP405 5V Mini USB 1A Lityum Pil Şarj Panosu: Maalesef bu panoda güneş paneline ters akım koruması yoktur bunun için güneş panelinin bir ayağı ile şarj devresi arasına yerleştirilecek 1 diyot daha gerekli akımı durdurmak için şarj devresi geceleri güneş paneline geri akmak için.

Adım 5: Montaj

toplantı
toplantı
toplantı
toplantı
toplantı
toplantı

Bu pano nispeten az sayıda bileşen içerir ve panodaki işaretçiler oldukça basittir.

Atmega328P'yi yanlış şekilde TAKMADIĞINIZDAN emin olun (bu, çipi ısıtıp tuğlayı bozabilir, voltaj yükselticiyi de bozabilir).

Bu kurulumda çip aşağı bakar (PIN1'i işaretleyen küçük U deliği). Diğer tüm bileşenler açık olmalıdır.

LDR için blendajlı kablo kullanın (örn.: CDrom'dan gelen Ses Kablosu iyi olacaktır). Bazı durumlarda (haftalarca süren testler), radyo sinyali iletimini engellediği ortaya çıktı. Bu, giderilmesi zor olan hatalardan biriydi, bu yüzden sorun istemiyorsanız, ekranlı bir kablo kullanın, hikayenin sonu.

LED: Kutunun altındaki LED, giden radyo iletimi olduğunda yanıp sönecek şekilde eklendi, ancak daha sonra bunu güç kaybı olarak düşündüm ve açılış sürecinde yalnızca 3 kez yanıp sönüyor.

TP: genel devre için akımı ölçmek için test noktasıdır.

DHT22: Ucuz DHT11'i almayın, negatif sıcaklıkları da ölçebilen beyaz DHT22'yi almak için 50 sent daha harcayın.

Adım 6: Kasa Tasarımı

Kasa Tasarımı
Kasa Tasarımı
Kasa Tasarımı
Kasa Tasarımı
Kasa Tasarımı
Kasa Tasarımı

Biraz abartı olsa da, DHT22 sıcaklık sensörünü yerinde tutmak için 3D baskılı bir küp (weather_cube) yapıldı. Küp, IP kutusunun altına yapıştırılmıştır ve havanın sensöre ulaşması için yalnızca 1 deliğe sahiptir. Arılara, yaban arılarına ve diğer küçük sineklere karşı deliğe bir ağ ekledim.

Açıkta bir çanak direğe monte etmeniz durumunda istasyonu daha su geçirmez hale getirmek için isteğe bağlı olarak harici bir kutu kullanılabilir.

1 kullanışlı özellik için fikir: kutunun üstüne 1-2 cm'lik büyük bir metal çatı plakası eklemek, yaz aylarında güneşten gölge sağlayan, ancak bu aynı zamanda panelden faydalı güneş ışığımızı da alabilir. Panel ile kutuyu birbirinden ayıran (paneli güneşte, kutuyu gölgede bırakarak) bir tasarım ortaya çıkarabilirsiniz.

Resimlerde: 1 yıl sonra istasyonlardan biri çalışma ortamından kaldırıldı, akü voltajı hala çarpıcı 3.9V, kutunun hiçbir yerinde su hasarı yok, ancak küpün altına yapıştırdığım ağ yırtıldı. İstasyonun servise alınmasının nedeni, LDR konektöründeki bağlantı hatasıdır, ancak atlama kablosu hala yerinde görünse de bağlantı kopmuştur, bu nedenle pim bazen hatalı LDR analog okumaları sağlayan yüzer haldeydi. Öneri: Standart PC atlama kabloları kullanıyorsanız, bunu önlemek için istasyon mükemmel çalıştıktan sonra hepsini yapıştırın.

7. Adım: Yazılım

Yazılım
Yazılım

Yazılım kodu 3 harici kitaplık gerektirir (LowPower, DHT, VirtualWire). Son zamanlarda bazılarını kolayca çevrimiçi bulmakta sorun yaşadım, bu yüzden onları ayrı bir ZIP dosyasına ekledim. Hangi işletim sistemini kullandığınızdan bağımsız olarak Linux/Windows'u kullanın, Arduino IDE'nizin kütüphane klasörünü bulun ve onları oraya çıkarın.

Sadece bir not, zaten DHT11'i satın almamanızı tavsiye etmeme rağmen, yanlış tipte DHT sensörü kullanırsanız, program başlangıçta başlatma bölümünde sonsuza kadar askıda kalacaktır (başlangıç ledinin 3 kez yanıp söndüğünü bile görmeyeceksiniz).

Ana döngü kodu çok basittir, önce ortam değerlerini (sıcaklık, ısı indeksi, nem, güneş) okur, radyo aracılığıyla gönderir, sonra Arduino'yu 5 dakika uykuya almak için düşük güç kütüphanesini kullanır.

Baud hızını düşürmenin radyo yayınlarının kararlılığını artıracağını buldum. İstasyon çok az miktarda veri gönderiyor, 300 bps fazlasıyla yeterli. Ayrıca vericinin yalnızca yakl. 4.8V, gelecekteki 3.3V versiyonunda bu daha da kötü iletim kalitesine yol açabilir (duvarlardan ve diğer engellerden veri gönderme). PI'den Mega'ya güç sağlayan bir Raspberry PI 2'ye bağlı bir Arduino Mega kullanırken herhangi bir iletim almadığım bir sorunla karşılaştım. Çözüm, Mega'yı ayrı bir harici 12V güç kaynağından çalıştırmaktı.

Adım 8: Sürüm 2 (ESP32 Tabanlı)

Sürüm 2 (ESP32 Tabanlı)
Sürüm 2 (ESP32 Tabanlı)
Sürüm 2 (ESP32 Tabanlı)
Sürüm 2 (ESP32 Tabanlı)
Sürüm 2 (ESP32 Tabanlı)
Sürüm 2 (ESP32 Tabanlı)

Kırılabilecek her şey eski güzel Murphy'den alıntı yapmak için kırılacak ve sonunda yıllar sonra istasyonlar gizemli yollarda başarısız oldu. Biri, onbinlere ulaşan anlamsız güneş verileri göndermeye başladı, bu şu nedenle imkansız: Arduino kartı 6 kanal (Mini ve Nano'da 8 kanal, Mega'da 16 kanal), 10-bit analogdan dijitale dönüştürücü içerir. Bu, 0 ile 5 volt arasındaki giriş voltajlarını 0 ile 1023 arasındaki tamsayı değerleriyle eşleştireceği anlamına gelir. Bu yüzden telsizi, LDR'yi değiştirdikten ve Atmega 328P'yi birçok kez yeniden programladıktan sonra vazgeçtim ve inovasyon zamanının geldiğine karar verdim. ESP32'ye gidelim.

Kullandığım anakart şuydu: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi ve Bluetooth Kartı Rev1 MicroPython 4MB FLASH

wiki.wemos.cc/products:lolin32:lolin32_lit…

Mikrodenetleyici ESP-32

Çalışma Gerilimi 3.3V Dijital I/O Pinleri 19 Analog Giriş Pinleri 6 Saat Hızı(Maks) 240Mhz Flaş 4M bayt Uzunluk 5mm Genişlik 2.54mm Ağırlık 4g

Resimdekinden farklı olarak LOLIN logosuna sahip olmayan (Çin'den sahte). İlk hoş sürprizim, tahtaya basılan pin çıkışının Arduino pin çıkışı ile eşleşmesiydi! Bütün gün boyunca pinout'ları aramak zorunda kaldığım pek çok isimsiz pano ile uğraştıktan sonra, hata yapmaktan yoruldum, nihayet pinout'un dümdüz olduğu bir tahta WoW!

Ancak burada hikayenin karanlık tarafı var:

Başlangıçta LDR'yi pim 12 olan A15'e bağladım çünkü pimleri birbirine yapıştırmak daha kolaydı. Sonra 4095 okuma aldım (ESP32'de AnlogRead ile alabileceğiniz maksimum değer) bu beni deliye döndürdü çünkü istasyonu yeniden inşa etmemin tüm nedeni eskisinden gelen bozuk LDR okumalarıydı (DHT hala iyi çalışıyordu)). Böylece ortaya çıkıyor:

esp 32, iki adet 12 bitlik ACD kaydını entegre eder. ADC1 ile 8 kanal GPIO'lara bağlı 32-39 ve ADC2 beyaz başka pinlerde 10 kanal. Mesele şu ki, ESP32, wifi işlevlerini yönetmek için ADC2'yi kullanır, bu nedenle Wifi kullanıyorsanız, bu kaydı kullanamazsınız. ADC sürücü API'si, ADC1'i (32 - 39 GPIO'lara bağlı 8 kanal) ve ADC2'yi (10 kanal, GPIO'lar 0, 2, 4, 12 - 15 ve 25 - 27'ye bağlı) destekler. Ancak, ADC2'nin kullanımı, uygulama için bazı kısıtlamalara sahiptir:

ADC2, Wi-Fi sürücüsü tarafından kullanılır. Bu nedenle uygulama, Wi-Fi sürücüsü başlamadığında yalnızca ADC2'yi kullanabilir. ADC2 pinlerinin bir kısmı çemberleme pini (GPIO 0, 2, 15) olarak kullanıldığı için serbestçe kullanılamaz. Aşağıdaki resmi Geliştirme Kitlerinde durum böyledir:

Yani LDR'yi pin 12'den VP olan A0'a bağlamak her şeyi çözdü ama anlamıyorum neden yapımcılar için mevcut olarak ADC2 pinlerini listeliyorlar. Başka kaç hobbist bunu çözene kadar tonlarca zaman harcadı? En azından kullanılamayan pimleri kırmızı veya başka bir şeyle işaretleyin veya kılavuzda bundan hiç bahsetmeyin, böylece diğer üreticiler ancak gerçekten ihtiyaç duyduklarında onlar hakkında bilgi edinebilirler. ESP32'nin tüm amacı WIFI ile kullanmaktır, herkes WIFI ile kullanır.

Bu kart için Arduino IDE'nin nasıl kurulacağına iyi bir başlangıç:

Buradaki koda koymama rağmen, bir kez daha gidiyor:

Bu kod, Weemos LOLIN 32'den başka ESP32 modelleri için derlenmeyebilir!

Yapı ayarları: -Yükleme/seri kullan: 115200 -CPU/ram kullan: 240Mhz(Wifi|BT) -Flaş frekansı kullan: 80 Mhz

İnternette tonlarca ESP32 tabanlı hava istasyonu var, bunlar barebone çipli sürüm 1'den çok daha yaygın çünkü kurulumları daha kolay, programcıya ihtiyacınız yok, sadece cihazı usb'ye takın ve programlayın. derin uyku modu, pille uzun süre çalışmak için mükemmeldir. Yarasadan hemen önce bu, koparma pimlerinde lehimlemeden önce bile test ettiğim ilk şeydi çünkü bu projede birden fazla yer belirttiğim gibi EN önemli şey güç tüketimi ve mevcut (sahte) pil ve küçük güneş paneli ile bekleme güç gerçekten 1-2mAs'ın üzerine çıkamaz, aksi takdirde proje kendini uzun vadede sürdüremez.

Derin uyku modunun ilan edildiği gibi çalışması yine hoş bir sürpriz oldu. Derin uyku sırasında akım o kadar düşüktü ki ucuz multimetrem onu ölçemedi bile (benim için çalışıyor).

Veri gönderme sırasında akım 80mA civarındaydı (bu, Atmega 328P'nin uyanıp iletim yaptığı zamandan yaklaşık 5 kat daha fazla), ancak V1 ile uyku modunda LDR'de ortalama 1mA güç tüketimi olduğunu unutmayın (bu da ışık seviyelerine bağlıydı ve şimdi gitti 0,5mA - 1mA'dan gitti.

Şimdi, aynı pili kullanırsanız, UltraFire pili çürütüldüğüne göre şunları bekleyebilirsiniz:

Iavg = (Ton*İyon + Uyku*Uyku) / (Ton +Tuyku)

Iavg = (2s*80mA + 300s*0.01mA) / (2s+300s) Iavg = 0,5mA

Pavg=VxIavg =5Vx0.5mA=2,5 mW

Teorik

Pil ömrü = 22000mWh/2,5mW = 8800 saat = yaklaşık 366 gün

Gerçek

Pil ömrü = 800mWh/2,5mW = 320 saat = yaklaşık 13 gün

Açılma zamanını tam olarak ölçecek bir kapsamım yoktu, ancak ince ayarlarımla 2 saniye civarında bitiyor.

Öğleden sonrayı her şeyi özel kodlamaya harcamak istemedim, bu yüzden veri depolama için ne yaptıklarını görmek için ESP32'ye dayalı Instructables'ta başka hava istasyonları aradım. Ne yazık ki, weathercloud gibi esnek olmayan ve sınırlı siteler kullandıklarını fark ettiler. "Bulut" hayranı olmadığım ve sitenin API'sini o zamandan beri değiştirdiği için kodları uzun süre bozulduğu için, özel bir çözüm yapmak için 10 dakikamı harcadım çünkü sanıldığı kadar zor değil. Başlayalım!

Her şeyden önce, bu proje için ayrı bir devre kartı resmi yok, çünkü V1 ile tamamen aynı bileşenleri kullanıyor (çirkin devre tahtası resminde lehimlendiği için üzgünüm), her şeyin 3.3V bitmesi farkıyla. DHT, VCC'ye bir pullup ile bağlandı, LDR ise 10k ile aşağı çekildi. Çin sahte ürünüm gibi 18650 pillerle görebileceğiniz sorun (6500 mAh ultra güneş ateşi lol: D), deşarj eğrisini yaklaşık 4.1V yeni çağdan başlatmaları ve hücre hasarını durdurmak için kesme devreleri devreye girene kadar devam etmeleridir (sahip olacak kadar şanslı olanlar). Bu, 3.3V girişi olarak bizim için hiçbir yerde iyi değil. Bu projede bu LOLIN kartının bir lityum pil konektörü ve şarj devresi olmasına rağmen, eski istasyondan yapabildiklerimin çoğunu yenilemek istedim, bu nedenle eski 18650 ile bu yerleşik şarj cihazını KULLANAMAZSINIZ. Çözüm çok basitti: Eski voltaj yükselticiden 5V'a lehimlenmiş bir mikro USB kablosunu kestim ve microUSB'deki kartta regülatör olduğundan, işte sorun çözüldü.

Yani eski ve yeni sürüm arasındaki fark, eski pilde 3.7V -> 5V'a yükseltilmiş -> ardu 5V'da çalışıyor -> tüm bileşenler 5V'da çalışıyor.

Yenisinde: pil 3.7V sağlar -> 5V'a yükseltilir -> ESP32'de yerleşik kayıt aracılığıyla düzenlenir -> tüm bileşenler 3.3V üzerinde çalışır.

Yazılım açısından başka bir DHT kütüphanesine de ihtiyacımız olacak, Arduino'nun DHT'si ESP'lerle uyumlu değil. İhtiyacımız olana DHT ESP denir.

Kodumu, bu kodun sağladığı DHT örneğine dayandırmaya başladım. Kodun çalışması şu şekildedir:

1, fotoselden DHT + Solar verilerinden çevresel verileri alın

2, statik IP ile wifi'ye bağlanın

3, verileri bir php betiğine POST

4, 10 dakika uyu

Fark edeceğiniz gibi, eski proje açıldığında olduğundan 5 kat daha fazla güç tükettiğinden, uyanma süresini kesinlikle en aza indirmek için verimlilik kodunu ayarladım. Bunu nasıl yaptım? Her şeyden önce, HERHANGİ bir hata varsa, getTemperature() işlevi false ile dönecektir (bu, tekrar 10 dakika uyku anlamına gelir). Bu, DHT sensörünün başlatılamaması veya wifi bağlantısının mevcut olmaması gibi olabilir. Fark ettiğiniz gibi, wifi ilişkilendirmesini sonsuza kadar denemeye devam etmek için olağan while() döngüsü de kaldırıldı, ancak orada 1 saniyelik bir gecikme bırakılması gerekiyordu, aksi takdirde her zaman bağlanmaz ve ayrıca AP türüne, yüke vb. ne kadar hızlı bağlıdır. 0,5s ile tutarsız davranışlar elde ettim (bazen bağlanamadı). Bunu yapmanın daha iyi bir yolunu bilen biri varsa, lütfen yorumlarda bırakın. Yalnızca DHT verileri okunduğunda VE wifi bağlantısı kurulduğunda, verileri web sunucusundaki komut dosyasına göndermeye çalışır. Serial.println()'ler gibi her türlü zaman kaybı işlevi normal çalışma modunda da devre dışı bırakılır. Sunucu olarak ayrıca gereksiz bir DNS aramasını önlemek için IP kullanıyorum, kodumda hem varsayılan ağ geçidi hem de dns sunucusu 0.0.0.0 olarak ayarlandı.

Tek gereken şu olduğunda kendi API'nizi oluşturmanın neden bu kadar zor olduğunu anlamıyorum:

sprintf(yanıt, "temp=%d&hum=%d&hi=%d&sol=%d", temp, uğultu, merhaba, sol);

int httpResponseCode =

Bu küçük php kodunu herhangi bir ahududu pi'ye koyarsınız ve fanları açmak veya yeterince karanlık olursa ışıkları yakmak gibi telemetriye dayalı system() görevlerini hemen yapabilirsiniz.

Kodla ilgili bazı notlar:

WiFi.config(staticIP, ağ geçidi, alt ağ, dns); // Wifi ne kadar aptalca başladıktan sonra OLMALIDIR…

WiFi.modu(WIFI_STA); // ZORUNLU aksi takdirde istenmeyen bir AP de yaratacaktır

Evet, şimdi biliyorsun. Ayrıca IP yapılandırmalarının sırası platformlar arasında değişebilir, önce ağ geçidi ve alt ağ değerlerinin değiştirildiği diğer örnekleri denedim. Neden statik IP ayarlamalı? Oldukça açık, ağınızda isc dhcpd çalıştıran bir linux sunucusu gibi özel bir kutunuz varsa, ESP uyandığında ve DHCP'den IP'yi aldığında yüz milyon günlük girişi istemezsiniz. Yönlendiriciler normalde ilişkilendirmeleri günlüğe kaydetmez, bu nedenle görünmez. Bu, enerji tasarrufunun bedelidir.

V2, kalitesiz pil nedeniyle kendini hiçbir zaman sürdüremedi ve ben sadece bir adaptöre taktım, bu yüzden V1 veya V2'yi oluşturmak istiyorsanız, belirtilen pili satın almayın, piller hakkında kendi araştırmanızı yapın (herhangi bir 18650 Ebay'de 2000 mAh üzerinde reklamı yapılan kapasite, yüksek olasılıkla bir aldatmacadır).

Önerilen: