Spisu treści:

Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino Wykonana we właściwy sposób: 8 kroków (ze zdjęciami)
Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino Wykonana we właściwy sposób: 8 kroków (ze zdjęciami)

Wideo: Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino Wykonana we właściwy sposób: 8 kroków (ze zdjęciami)

Wideo: Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino Wykonana we właściwy sposób: 8 kroków (ze zdjęciami)
Wideo: Jak i gdzie powiesić czujnik stacji pogody – meteo 2024, Lipiec
Anonim
Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino wykonana we właściwy sposób
Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino wykonana we właściwy sposób
Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino wykonana we właściwy sposób
Stacja pogodowa NaTaLia: stacja pogodowa zasilana energią słoneczną Arduino wykonana we właściwy sposób

Po roku udanej pracy w 2 różnych lokalizacjach dzielę się planami mojego projektu stacji pogodowej zasilanej energią słoneczną i wyjaśniam, w jaki sposób ewoluował w system, który naprawdę może przetrwać przez długi czas z energii słonecznej. Jeśli zastosujesz się do moich instrukcji i użyjesz dokładnie tych samych materiałów, co wymienione, możesz zbudować stację pogodową zasilaną energią słoneczną, która będzie działać przez wiele lat. Właściwie jedynym czynnikiem ograniczającym czas działania jest żywotność baterii, której używasz.

Krok 1: Działanie stacji pogodowej

1, Nadajnik: Puszka montowana na zewnątrz z panelem słonecznym, która okresowo wysyła telemetrię pogodową (temperatura, wilgotność, indeks cieplny, siła słoneczna) do odbiornika wewnętrznego.

2, Odbiornik: Jednostka wewnętrzna wykonana z Raspberry PI 2 + Arduino Mega z podłączonym odbiornikiem RF 433 Mhz do odbioru danych. W mojej konfiguracji to urządzenie nie ma żadnej funkcji lokalnego wyświetlacza LCD. Działa niedbale. Główny program C zajmuje się odbieraniem danych przychodzących z Arduino przez port szeregowy, a następnie logowaniem danych do pliku tekstowego i udostępnianiem ostatnich odebranych danych przez telnet dla innych urządzeń w celu odpytania ich.

Stacja steruje oświetleniem w moim domu poprzez odczyt fotorezystora (który określa czy na zewnątrz jest dzień czy noc). Odbiornik jest w moim przypadku bezgłowy, ale można łatwo zmodyfikować projekt, aby dodać wyświetlacz LCD. Jednym z urządzeń wykorzystujących, przetwarzających i wyświetlających dane pogodowe ze stacji jest mój inny projekt: Ironforge the NetBSD Toaster.

Krok 2: Pierwsze wersje

Pierwsze wersje
Pierwsze wersje
Pierwsze wersje
Pierwsze wersje
Pierwsze wersje
Pierwsze wersje
Pierwsze wersje
Pierwsze wersje

W sieci jest wiele projektów fotowoltaicznych, ale wiele z nich popełnia powszechny błąd polegający na tym, że system z czasem pobiera z baterii więcej energii, którą panel słoneczny może uzupełnić, szczególnie w pochmurne, ciemne zimowe miesiące.

Podczas projektowania systemu zasilanego energią słoneczną liczy się ZUŻYCIE ENERGII na wszystkich komponentach: mikrokontroler, nadajnik radiowy, regulator napięcia itp.

Używanie dużego komputera, takiego jak raspberry pi lub energochłonnego urządzenia Wi-Fi, takiego jak ESP, tylko do zbierania i przesyłania kilku bitów danych pogodowych, byłoby przesadą, ale jak pokażę w tym samouczku, nawet mała płytka Arduino jest.

Najlepiej jest zawsze mierzyć prąd podczas procesu budowy za pomocą miernika lub oscyloskopu (przydatne, gdy próbujesz mierzyć małe skoki podczas pracy w bardzo krótkich odstępach czasu (milisekundach)).

Na pierwszym zdjęciu widać moją pierwszą stację (opartą na Arduino Nano) i drugą płytkę Arduino Barebone Atmega 328P.

Pierwsza wersja, choć działała idealnie (monitorowanie środowiska i przesyłanie danych drogą radiową) miała zbyt duży pobór prądu ~46mA i rozładowywała baterię w ciągu kilku tygodni.

Wszystkie wersje korzystały z następującej baterii:

18650 6000 mAh Chroniony akumulator litowo-jonowy Wbudowana płyta ochronna

AKTUALIZUJ na tych bateriach ScamFire. Chociaż jest to dość stary Instructable, nadal czułem się zmuszony go poprawić z powodu tej fałszywej baterii. NIE kupuj wspomnianej baterii, wykonuj własne badania na temat innych baterii LION/LIPO, wszystkie baterie 3,7 V będą działać z tym projektem.

W końcu zdążyłem zdemaskować baterię ScamFire, aby zobaczyć, jaka jest jej rzeczywista pojemność. Dlatego przeprowadzimy 2 obliczenia obok rzeczywistych i "reklamowanych" mocy.

Przede wszystkim jest to jedna rzecz, że ta bateria jest fałszywa i nic, co twierdzą, że to nie jest prawdą, nowe wersje są jeszcze gorsze, skopiowały podróbkę z pominięciem 2-centowego obwodu ochronnego, więc nic nie powstrzyma ich rozładowania do zera.

Mały artykuł o bateriach LION/LIPO:

TLDR:

Oznacza to, że maksymalne napięcie ogniwa wynosi 4,2 V, a napięcie „nominalne” (średnie) to 3,7 V.

Na przykład tutaj jest profil napięcia dla „klasycznej” baterii 3,7 V/4,2 V. Napięcie zaczyna się od 4,2 maksimum i szybko spada do około 3,7 V przez większość czasu pracy baterii. Po osiągnięciu 3,4 V bateria jest rozładowana, a przy 3,0 V obwód odcinający odłącza baterię.

Moje pomiary na fikcyjnym obciążeniu:

Akumulator naładowany: 4,1 V

Odcięcie ustawione na: 3.4V

Symulacja obciążenia: 0,15 A (moje urządzenie miało mały problem ze spadkiem poniżej tego).

Zmierzona pojemność: 0,77Ah daje gratisowe 0,8Ah czyli 800mAh zamiast reklamowanego 6000mAh!

Ponieważ ta bateria nie miała nawet obwodu zabezpieczającego, mogłem swobodnie zejść niżej, ale przy 3,4V po 10 minutach już się wywala do 3,0V.

Dlatego przy prostych obliczeniach bateria zapewnia:

Teoretyczny

Napięcie akumulatora = 3,7 V

Moc =3,7x6000= 22000 mWh

Prawdziwy

Napięcie akumulatora =3,7VMoc =3,7x800= 2960 mWh

Wersja: 0.1 ARDUINO NANO BASED

Nawet z biblioteką LowPower Arduino nano pobiera ~16 mA (w trybie uśpienia) -> FAIL.

Teoretyczny

Pavg=VxIśr =5Vx16mA= 80 mW

Żywotność baterii = 22000/80 = 275 godzin = około 11 dni

RealPavg=VxIśr =5Vx16mA= 80 mW

Żywotność baterii = 800/80 = 10 godzin

Wersja: 0.2 Atmega 328P Barebone

Moc pobierana przez ATmega328 zależy w dużej mierze od tego, co z nim robisz. Siedząc tam w stanie domyślnym, może używać 16mA @ 5V podczas pracy na 16MHz.

Gdy ATmega328P jest w trybie aktywnym, będzie nieprzerwanie wykonywać kilka milionów instrukcji na sekundę. Co więcej, wbudowany konwerter analogowo-cyfrowy urządzeń peryferyjnych (ADC), szeregowy interfejs urządzeń peryferyjnych (SPI), zegar 0, 1, 2, interfejs dwuprzewodowy (I2C), USART, zegar nadzoru (WDT) i wykrywanie Brown-out (BOD) zużywają energię.

Aby oszczędzać energię, MCU ATmega328P obsługuje wiele trybów uśpienia, a nieużywane urządzenia peryferyjne można wyłączyć. Tryby uśpienia różnią się tym, które części pozostają aktywne, czasem trwania snu i czasem potrzebnym do przebudzenia (okres budzenia). Tryb uśpienia i aktywne urządzenia peryferyjne można kontrolować za pomocą bibliotek uśpienia i zasilania odbiornika AVR lub, bardziej zwięźle, za pomocą doskonałej biblioteki Low-Power.

Biblioteka Low-Power jest prosta w użyciu, ale bardzo wydajna. Instrukcja LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); ustawia MCU w tryb SLEEP_MODE_PWR_DOWN przez 16 ms do 8 s, w zależności od pierwszego argumentu. Wyłącza ADC i BOD. Uśpienie po wyłączeniu oznacza, że wszystkie funkcje chipa są wyłączone do następnego przerwania. Ponadto zewnętrzny oscylator jest zatrzymywany. Tylko przerwania poziomu na INT1 i INT2, przerwania zmiany pinów, dopasowanie adresu TWI/I2C lub WDT, jeśli są włączone, mogą obudzić MCU. Dzięki temu jednemu stwierdzeniu zminimalizujesz zużycie energii. W przypadku 3,3 V Pro Mini bez diody LED zasilania i bez regulatora (patrz poniżej), która uruchamia zestawienie, zużycie energii wynosi 4,5 μA. Jest to bardzo zbliżone do tego, o czym wspomniano w arkuszu danych ATmega328P dla uśpienia przy wyłączonym zasilaniu z włączonym WDT 4,2 μA (arkusz danych połączony ze źródłami). Dlatego jestem przekonany, że funkcja powerDown wyłączy wszystko, co jest rozsądnie możliwe. Za pomocą instrukcji LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);, WDT zostanie wyłączone i nie obudzisz się, dopóki nie zostanie wyzwolone przerwanie.

Tak więc w konfiguracji barebone możemy przełączyć chip w tryb uśpienia na 5 minut, podczas gdy zużywa on bardzo mało energii (0,04 mA bez urządzeń peryferyjnych). Jednak to tylko układ Atmega 328P z oscylatorem kwarcowym i nic więcej, wzmacniacz napięcia zastosowany w tej konfiguracji do podbicia napięcia akumulatora z 3,7 V -> 5,0 V również pobiera 0,01 mA.

Jednym ze stałych drenów napięcia był dodany fotorezystor zwiększający zużycie w trybie uśpienia do ogólnego 1 mA (obejmuje to wszystkie komponenty).

Wzór na obliczenie dokładnego zużycia przez urządzenie zarówno w trybie uśpienia, jak i wybudzenia to:

Iśr = (Tona*Ion + Tsleep*Isleep) / (Ton +Tsleep)

Jon = 13mA

Pochodzi to głównie z nadajnika RF433 Mhz:

Nadajnik:

Napięcie robocze: 3V - 12V dla max. pobór mocy 12VPrąd roboczy: maks. Mniej niż 40mA maks. i min. 9mATryb rezonansu: (SAW)Tryb modulacji: ASKCzęstotliwość robocza: Eve 315MHz lub 433MHzMoc transmisji: 25mW (315MHz przy 12V)Błąd częstotliwości: +150kHz (maks.)Prędkość: mniej niż 10Kbps

Uśpienie = 1mA

Byłoby znacznie mniej bez fotorezystora.

Czas Trunon Ton=250 mS = 0,25s

Czas snu Tsleep= 5 min = 300s

Iśr = (Tona*Ion + Tsleep*Isleep) / (Ton +Tsleep)

Iśr = (0,25s*13mA + 300s*1mA) / (0,25s+300s)

śr=1,26 mA

Śr=VxŚr=5Vx1,26mA=6 mW

Teoretyczny

Żywotność baterii = 22000mWh/6mW = 3666 godzin = około 152 dni

Prawdziwy

Żywotność baterii = 800mWh/6mW = 133 godziny = około 5,5 dnia

Mimo, że były to wciąż lepsze serie UltraFire, z których początkowo korzystałem, można było zauważyć, że bez panelu słonecznego lub niskiego poboru prądu 1mA ten projekt nie przetrwałby długo.

Zapraszam do zbudowania stacji i wpisania swoich ustaleń i obliczeń do komentarzy, a ja zaktualizuję artykuł. Byłbym również wdzięczny za wyniki z różnymi MCU i konwerterami doładowania.

Krok 3: Budowanie udanej stacji pogodowej

Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej
Budowanie udanej stacji pogodowej

Chociaż jest to pierwsza udana wersja, zawiera trochę błędów na zdjęciach i nie mogę ich przerobić, ponieważ stacje są już wdrożone. Dwa wzmacniacze napięcia pokazane na rysunku są dostępne w chwili pisania tego tekstu do modelowania lotniczego i innych zastosowań. Kiedy przeprojektowałem swoją stację, myślałem o zakupie mniejszej i bardziej wydajnej płytki podwyższającej napięcie, jednak mniejszy rozmiar zdecydowanie nie oznacza, że jest bardziej wydajna.

Nowy mały moduł na zdjęciu, który nie ma nawet diody LED, sam z siebie pobrał 3mA (*FAIL*), więc zostałem przy mojej starej płytce:

Sterowanie PFM DC-DC USB 0.9V-5V do 5V dc Boost Step-up Moduł zasilania

W chwili pisania tego tekstu moduł ten jest nadal dostępny w serwisie eBay za 99 centów, ale jeśli zdecydujesz się na użycie innego wzmacniacza, zawsze sprawdź pobór mocy w trybie gotowości. Przy dobrej jakości boosterze nie powinien być większy niż mój (0,01 mA), chociaż mała dioda na pokładzie musiała zostać odlutowana.

Krok 4: Lista sprzętu

Lista sprzętu
Lista sprzętu
  • 18650 6000 mAh Chroniony akumulator litowo-jonowy Wbudowana płyta ochronna
  • Atmega 328P16M 5V z bootloaderem
  • Zestaw Adafruit DC Boarduino (kompatybilny z Arduino) (z ATmega328) < będzie to dobra inwestycja, jeśli robisz przyszłe projekty barebone
  • Fotorezystor fotorezystor Fotorezystor Optorezystor 5mm GL5539
  • Dioda 1A 1000V 1N4007 IN4007 DO-41 Diody prostownicze
  • Sterowanie PFM DC-DC USB 0.9V-5V do 5V dc Boost Step-up Moduł zasilania
  • 1.6W 5.5V 266mA Mini moduł panelu słonecznego System ładowania ogniw epoksydowych DIY
  • TP405 5V Mini USB 1A Moduł ładowarki do ładowania akumulatorów litowych
  • Zestaw nadajnika i odbiornika RF 433Mhz do pilota Arduino/ARM/MC < Zestaw zawiera nadajnik i odbiornik
  • IP65 Przełącznik Protector Skrzynka przyłączeniowa Zewnętrzna wodoodporna obudowa 150x110x70mm
  • Nowy moduł czujnika temperatury i wilgotności względnej DHT22 dla Arduino
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini przełącznik, 1x1N4007dioda
  • Rezonator / Oscylator Ceramiczny 16 MHz Adafruit [ADA1873]
  • Arduino UNO/Mega itp dla stacji odbiorczej + Raspberry PI 1/2/3
  • Przezroczyste plastikowe pudełko akrylowe (opcjonalnie)

Możesz je wszystkie znaleźć w serwisie eBay, nie chcę promować żadnych sprzedawców poprzez linki do ich stron, a linki i tak znikną w przyszłości.

Uwagi do listy sprzętu:

Na wszelki wypadek, gdybyś zamurował Atmegę jakoś programowaniem, kup ich więcej, to samo dotyczy wzmacniacza napięcia i kontrolera ładowania słonecznego.

Ładowarka słoneczna zawiera 2 małe kolorowe diody LED, które włączają się tylko w przypadku ładowania słonecznego i wskazują (czerwony->ładowanie, niebieski->pełne naładowanie). Te również można odlutować. To raczej daje trochę więcej soku do baterii podczas ładowania.

Jak widać na mojej liście nie ma uchwytów na baterie. Czemu? Ponieważ są zawodni. Miałem niezliczoną ilość okazji, kiedy bateria wyrwała się z uchwytu i straciła połączenie. Zwłaszcza jeśli twoja konfiguracja jest zamontowana na wysokim słupie czasowym, takim jak mój, otwarty na wszelkie trudne warunki pogodowe. Nawet zamknąłem baterię w uchwycie za pomocą 2 zamków błyskawicznych i nadal udało się ją wysunąć. Nie rób tego, po prostu usuń zewnętrzną powłokę z akumulatora i przylutuj przewody bezpośrednio do spodu akumulatora, zawierające obwód zabezpieczający przed przeładowaniem (nie omijaj zabezpieczenia). Uchwyt baterii może służyć wyłącznie do trzymania baterii w urządzeniu.

TP405 5V Mini USB 1A płytka do ładowania baterii litowej: niestety ta płyta nie zawiera zabezpieczenia przed prądem wstecznym do panelu słonecznego, w tym celu będziesz potrzebować 1 dodatkowej diody, która zostanie umieszczona między jedną nogą panelu słonecznego a obwodem ładowania, aby zatrzymać prąd. spływać z powrotem do panelu słonecznego w nocy.

Krok 5: Montaż

montaż
montaż
montaż
montaż
montaż
montaż

Ta plansza zawiera stosunkowo niewiele elementów, a znaczniki na planszy są dość proste.

Upewnij się, że NIE wkładasz Atmega328P w niewłaściwy sposób (może to nagrzać się i zepsuć układ, może też zniszczyć wzmacniacz napięcia).

W tej konfiguracji chip jest skierowany w dół (mały otwór w kształcie litery U oznaczający PIN1). Wszystkie pozostałe elementy powinny być oczywiste.

Użyj kabla ekranowanego (np.: kabel audio z CDrom) dla LDR. W niektórych przypadkach (przez wiele tygodni testów) okazało się, że zakłóca transmisję sygnału radiowego. Był to jeden z tych błędów, które trudno było rozwiązać, więc jeśli nie chcesz problemów, po prostu użyj kabla ekranowanego, koniec historii.

LED: Dioda LED na dole pudełka została pierwotnie dodana do migania, gdy jest wychodząca transmisja radiowa, ale później uznałem to za marnowanie energii i miga tylko 3 razy podczas procesu uruchamiania.

TP: to punkt testowy do pomiaru prądu w całym obwodzie.

DHT22: Nie kupuj taniego DHT11, wydaj 50 centów więcej, aby uzyskać biały DHT22, który może również mierzyć ujemne temperatury.

Krok 6: Projekt obudowy

Projekt obudowy
Projekt obudowy
Projekt obudowy
Projekt obudowy
Projekt obudowy
Projekt obudowy

Chociaż to trochę przesada, wydrukowana w 3D kostka (weather_cube) została stworzona, aby utrzymać czujnik temperatury DHT22 na miejscu. Kostka jest przyklejona do dolnej części obudowy IP i posiada tylko 1 otwór, przez który powietrze dociera do czujnika. Do dziury dodałem siatkę na pszczoły, osy i inne małe muchy.

Opcjonalnie można zastosować zewnętrzną skrzynkę, aby uczynić stację bardziej wodoodporną w przypadku montowania jej na maszcie na wolnym powietrzu.

Pomysł na 1 użyteczną funkcję: dodanie dużej metalowej płyty dachowej 1-2 cm na górze pudełka, która zapewni cień od słońca w lecie, chociaż może to również odciągnąć nasze użyteczne światło słoneczne od panelu. Możesz wymyślić wzór, który oddziela panel od pudełka (pozostawiając panel na słońcu, pudełko w cieniu).

Na zdjęciach: jedna ze stacji usunięta ze środowiska pracy po 1 roku, napięcie akumulatora wciąż oszałamiające 3,9V, żadna część pudełka nie jest uszkodzona przez wodę, chociaż siatka, którą przykleiłem na dole kostki, była rozdarta. Powodem, dla którego stacja musiała być serwisowana, jest błąd połączenia na złączu LDR, chociaż kabel połączeniowy wydawał się nadal na swoim miejscu, połączenie zostało zerwane, dlatego pin czasami pływał, zapewniając złe odczyty analogowe LDR. Sugestia: jeśli używasz standardowych kabli połączeniowych komputera, sklej je wszystkie na gorąco, gdy stacja będzie działała idealnie, aby tego uniknąć.

Krok 7: Oprogramowanie

Oprogramowanie
Oprogramowanie

Kod oprogramowania będzie wymagał 3 zewnętrznych bibliotek (LowPower, DHT, VirtualWire). Ostatnio miałem problem ze znalezieniem niektórych z nich w Internecie, więc załączam je w osobnym pliku ZIP. Bez względu na to, z jakiego systemu operacyjnego korzystasz z systemu Linux / Windows, po prostu znajdź folder biblioteki Arduino IDE i rozpakuj je tam.

Tylko uwaga, niezależnie od tego, że już odradzam kupowanie DHT11, jeśli użyjesz złego typu czujnika DHT, program po prostu zawiesi się na zawsze na początku w sekcji inicjalizacji (nie zobaczysz nawet, że dioda startowa mrugnie 3 razy).

Kod pętli głównej jest bardzo prosty, najpierw odczytuje wartości środowiskowe (temperatura, indeks cieplny, wilgotność, nasłonecznienie), wysyła je przez radio, a następnie wykorzystuje bibliotekę lowpower, aby uśpić Arduino na 5 minut.

Odkryłem, że obniżenie szybkości transmisji zwiększy stabilność transmisji radiowych. Stacja wysyła bardzo małą ilość danych, 300 bps w zupełności wystarczy. Nie zapominaj również, że nadajnik działa dopiero od ok. godz. 4,8V, w przyszłej wersji 3,3V może to prowadzić do jeszcze gorszej jakości transmisji (przesyłanie danych przez ściany i inne przeszkody). Mam problem z używaniem Arduino Mega podłączonego do Raspberry PI 2 zasilającego Mega z PI, że nie otrzymałem żadnej transmisji. Rozwiązaniem było zasilanie Mega z osobnego zewnętrznego zasilacza 12V.

Krok 8: Wersja 2 (oparta na ESP32)

Wersja 2 (oparta na ESP32)
Wersja 2 (oparta na ESP32)
Wersja 2 (oparta na ESP32)
Wersja 2 (oparta na ESP32)
Wersja 2 (oparta na ESP32)
Wersja 2 (oparta na ESP32)

Wszystko, co może się zepsuć, pęknie, cytując starego dobrego Murphy'ego, i ostatecznie po latach stacje zawiodły w tajemniczy sposób. Zaczęto wysyłać bełkotliwe dane słoneczne, które sięgały dziesiątek tysięcy, co jest niemożliwe ze względu na: Płytka Arduino zawiera 6 kanałów (8 kanałów w Mini i Nano, 16 w Mega), 10-bitowy przetwornik analogowo-cyfrowy. Oznacza to, że będzie mapować napięcia wejściowe od 0 do 5 woltów na wartości całkowite od 0 do 1023. Tak więc po wielokrotnej wymianie radia, LDR i przeprogramowaniu Atmegi 328P zrezygnowałem i uznałem, że czas na innowacje. Chodźmy ESP32.

Płyta, której użyłem to: ESP32 WEMOS LOLIN32 Lite V1.0.0 Karta Wifi i Bluetooth Rev1 MicroPython 4MB FLASH

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

Mikrokontroler ESP-32

Napięcie robocze 3.3V Cyfrowe styki we/wy 19 styki wejścia analogowego 6 Prędkość zegara (maks.) 240Mhz Flash 4M bajtów Długość 5mm Szerokość 2,54mm Waga 4g

Który w przeciwieństwie do tego na zdjęciu nie posiada logo LOLIN (podróbka z Chin). Moją pierwszą miłą niespodzianką było to, że pinout wydrukowany na płytce był zgodny z pinoutem Arduino! Po uporaniu się z tyloma tablicami noname, gdzie musiałem cały dzień szukać pinoutów, zmęczony popełnianiem błędów, w końcu pojawiła się tablica, w której pinouty są proste WoW!

Oto jednak ciemna strona tej historii:

Początkowo podłączyłem LDR do A15 czyli pin 12 bo łatwiej było skleić piny razem na gorąco. Następnie mam 4095 odczytów (co jest maksimum, które można uzyskać z AnlogRead na ESP32), co doprowadzało mnie do szału, ponieważ jedynym powodem przebudowy stacji były zepsute odczyty LDR ze starego (DHT nadal działał dobrze). Okazuje się więc, że:

esp 32 integruje dwa 12-bitowe rejestry ACD. ADC1 z 8 kanałami podłączonymi do GPIO 32-39 i ADC2 z 10 kanałami w kolejnych pinach. Chodzi o to, że ESP32 używa ADC2 do zarządzania funkcjami Wi-Fi, więc jeśli używasz Wifi, nie możesz użyć tego rejestru. Interfejs API sterownika ADC obsługuje ADC1 (8 kanałów, dołączonych do GPIO 32-39) i ADC2 (10 kanałów, dołączonych do GPIO 0, 2, 4, 12-15 i 25-27). Jednak korzystanie z ADC2 ma pewne ograniczenia dla aplikacji:

ADC2 jest używany przez sterownik Wi-Fi. Dlatego aplikacja może używać ADC2 tylko wtedy, gdy sterownik Wi-Fi nie został uruchomiony. Niektóre piny ADC2 są używane jako piny do spinania (GPIO 0, 2, 15), dlatego nie można ich swobodnie używać. Tak jest w przypadku następujących oficjalnych zestawów rozwojowych:

Więc podłączenie LDR od pinu 12 do A0, który jest VP, rozwiązało wszystko, ale nie rozumiem, dlaczego wymieniają nawet piny ADC2 jako dostępne dla producentów. Ilu innych hobbistów zmarnowało mnóstwo czasu, zanim to rozgryzło? Przynajmniej oznacz nieużyteczne szpilki kolorem czerwonym lub czymś takim lub w ogóle nie wspominaj o tym w instrukcji, aby inni producenci mogli się o nich dowiedzieć tylko wtedy, gdy naprawdę ich potrzebują. Całym celem ESP32 jest korzystanie z WIFI, wszyscy używają go z WIFI.

Dobry początek, jak skonfigurować Arduino IDE dla tej płyty:

Mimo, że umieściłem to w kodzie tutaj, to znowu brzmi:

Ten kod może nie skompilować się dla innych modeli ESP32 niż Weemos LOLIN 32!

Ustawienia kompilacji: -Użyj wysyłania/szeregowego: 115200 -Użyj procesora/pamięci RAM: 240Mhz (Wifi|BT) -Użyj częstotliwości flash: 80Mhz

W sieci jest mnóstwo stacji pogodowych opartych na ESP32, są one o wiele bardziej popularne niż moja wersja 1 z chipem barebone, ponieważ są łatwiejsze w konfiguracji, nie potrzebujesz programatora, po prostu podłącz urządzenie na USB i zaprogramuj je i ich tryb głębokiego uśpienia doskonale sprawdza się przez długi czas pracy na baterii. Od samego początku była to pierwsza rzecz, którą przetestowałem jeszcze przed wlutowaniem pinów breakout, ponieważ jak zauważyłem wiele miejsc w tym projekcie, NAJWAŻNIEJSZE jest zużycie energii, a przy obecnej (fałszywej) baterii i małym panelu słonecznym stan gotowości moc naprawdę nie może przekroczyć 1-2 mA, w przeciwnym razie projekt nie będzie w stanie utrzymać się w dłuższej perspektywie.

Po raz kolejny miłą niespodzianką było to, że tryb głębokiego uśpienia działa zgodnie z reklamą. Podczas głębokiego snu prąd był tak niski, że mój tani multimetr nie mógł go nawet zmierzyć (u mnie działa).

Podczas wysyłania danych prąd wynosił około 80mA (czyli około 5 razy więcej niż wtedy, gdy Atmega 328P budziła się i transmitowała), jednak nie zapominaj, że z V1 wystąpił średni pobór mocy 1mA na LDR w trybie uśpienia (które również zależało od poziomu światła i wyszło z 0,5mA - 1mA), którego teraz nie ma.

Teraz, gdy bateria UltraFire jest zdemaskowana, jeśli używasz tej samej baterii, możesz się spodziewać:

Iśr = (Tona*Ion + Tsleep*Isleep) / (Ton +Tsleep)

Iśr = (2s*80mA + 300s*0,01mA) / (2s+300s) Iśr = 0,5mA

Śr=VxŚr=5Vx0,5mA=2,5 mW

Teoretyczny

Żywotność baterii = 22000mWh/2,5mW = 8800 godzin = około 366 dni

Prawdziwy

Żywotność baterii = 800mWh/2,5mW = 320 godzin = około 13 dni

Nie miałem możliwości dokładnego zmierzenia czasu włączenia, ale z moimi poprawkami osiąga on około 2 sekund.

Nie chciałem spędzać popołudnia na kodowaniu wszystkiego na zamówienie, więc szukałem innych stacji pogodowych na Instructables opartych na ESP32, aby zobaczyć, co robią dla przechowywania danych. Ze smutkiem zauważyłem, że korzystają z nieelastycznych i ograniczonych witryn, takich jak chmura pogody. Ponieważ nie jestem fanem „chmury”, a ich kod dawno się zepsuł, ponieważ strona zmieniła od tego czasu API, poświęciłem 10 minut na stworzenie niestandardowego rozwiązania, ponieważ nie jest to tak trudne, jak mogłoby się wydawać. Zacznijmy!

Przede wszystkim nie ma zdjęcia płytki drukowanej osobno dla tego projektu, ponieważ używa dokładnie tych samych komponentów (przepraszam za wlutowane w brzydki obraz płytki prototypowej) co V1, z tą różnicą, że wszystko działa na 3,3V. DHT połączył się z podciągnięciem do VCC, LDR podciągnął się z 10 tys. Problem, który można zobaczyć w przypadku akumulatorów 18650, takich jak moja chińska podróbka (6500 mAh ultra sun fire lol:D), polega na tym, że zaczynają one krzywą rozładowania od około 4,1 V nowej ery i idą, aż ich obwód odcięcia włączy się, aby zatrzymać uszkodzenie ogniw (tych, którzy mają to szczęście, że je mają). To nigdzie nie jest dla nas dobre, jak wejście 3.3V. Chociaż ta płyta LOLIN ma złącze baterii litowej i obwód ładowania, w tym projekcie chciałem odnowić większość tego, co mogłem ze starej stacji, więc ze starym 18650 NIE MOŻNA używać tej wbudowanej ładowarki. Rozwiązanie było banalnie proste: odciąłem kabel micro USB przylutowany do 5V ze starego wzmacniacza napięcia i voila problem rozwiązany, ponieważ płytka na microUSB ma regulator.

Czyli różnica między starą a nową wersją która w starym akumulatorze dostarcza 3,7V -> podbite do 5V -> ardu działa na 5V -> wszystkie podzespoły działają na 5V.

W nowym: bateria dostarcza 3,7V -> podbity do 5V -> regulowany przez pokładowy reg na ESP32 -> wszystkie podzespoły działają na 3,3V.

Jeśli chodzi o oprogramowanie, będziemy potrzebować również innej biblioteki DHT, DHT Arduino nie jest kompatybilny z ESP. To, czego potrzebujemy, nazywa się DHT ESP.

Zacząłem opierać swój kod na przykładzie DHT dostarczonym przez ten kod. Działanie kodu to:

1, pobierz dane środowiskowe z danych DHT + Solar z fotokomórki;

2, Połącz się z Wi-Fi ze statycznym adresem IP!

3, Opublikuj dane w skrypcie php

4, idź spać na 10 minut

Jak zauważysz, dostroiłem kod pod kątem wydajności, aby absolutnie zminimalizować czas budzenia, ponieważ zużywa on 5 razy więcej energii niż stary projekt, gdy jest włączony. Jak to zrobiłem? Po pierwsze, jeśli wystąpi JAKIKOLWIEK rodzaj błędu, funkcja getTemperature() zwróci wartość false (co oznacza ponowne 10 minut snu). Może to oznaczać, że nie można zainicjować czujnika DHT lub połączenie Wi-Fi nie jest dostępne. Jak zauważyłeś, zwykła pętla while() do ciągłego próbowania połączenia Wi-Fi na zawsze została również usunięta, ale trzeba było pozostawić tam 1 sekundowe opóźnienie, w przeciwnym razie nie zawsze będzie się łączyć i zależy to również od typu AP, obciążenia itp., jak szybko się stanie, z 0.5s mam niespójne zachowanie (czasami nie mogłem się połączyć). Jeśli ktoś zna lepszy sposób na zrobienie tego, zostaw to w komentarzach. Dopiero gdy dane DHT zostaną odczytane ORAZ połączenie Wi-Fi zostanie uruchomione, spróbuje przesłać dane do skryptu na serwerze WWW. Wszelkiego rodzaju funkcje marnujące czas, takie jak Serial.println(), są również wyłączone w normalnym trybie operacyjnym. Jako serwer używam również IP, aby uniknąć niepotrzebnego wyszukiwania DNS, w moim kodzie zarówno domyślna brama, jak i serwer dns ustawione na 0.0.0.0.

Nie rozumiem, dlaczego tak trudno jest stworzyć własne API, skoro wystarczy:

sprintf(odpowiedź, "temp=%d&hum=%d&hi=%d&sol=%d", temp, hum, hi, sol);

int httpResponseCode =

Umieszczasz ten mały kod php do dowolnego raspberry pi i możesz od razu wykonywać zadania system() na podstawie telemetrii, takie jak włączanie wentylatorów lub włączanie świateł, jeśli zrobi się wystarczająco ciemno.

Kilka uwag na temat kodu:

WiFi.config(statyczny adres IP, brama, podsieć, dns); // MUSI być po tym, jak Wifi zacznie się jak głupie…

tryb WiFi (WIFI_STA); // MUSI inaczej utworzy również niechciany AP

Tak, teraz wiesz. Również kolejność konfiguracji IP może się zmieniać za pośrednictwem platform. Najpierw wypróbowałem inne przykłady, w których zostały przełączone wartości bramy i podsieci. Dlaczego ustawić statyczne IP? Cóż, to całkiem oczywiste, jeśli masz dedykowane urządzenie w swojej sieci, takie jak serwer linux z uruchomionym isc dhcpd, nie chcesz stu milionów wpisów w dzienniku, gdy ESP budzi się i pobiera adres IP z DHCP. Routery zwykle nie rejestrują skojarzeń, więc pozostanie to niezauważone. Taka jest cena oszczędzania energii.

V2 nigdy nie był w stanie utrzymać się z powodu złej jakości baterii i po prostu założyłem ją na adapter, więc jeśli chcesz zbudować V1 lub V2 NIE kupuj wspomnianej baterii, zrób własne badania na temat baterii (dowolny 18650 ponad 2000 mAh reklamowanej pojemności w serwisie eBay to oszustwo z dużym prawdopodobieństwem).

Zalecana: