Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'solar'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 3 wyniki

  1. Wprowadzenie W artykule zostanie przedstawiony sposób na optymalizację układów mikroprocesorowych pod względem wykorzystania zasilania. Celem jest przedstawienie prostych metod, które nie wymagają znacznych ingerencji w konstruowany układ, a jednocześnie dających wymierne korzyści. Efekty uzyskane na podstawie lektury tego artykułu pozwolą na lepsze zrozumienie konstrukcji procesora w kwestii budowy układu zegarowego. Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac » Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay. Zaczynamy na 8 bitach Na potrzeby zobrazowania toku myślenia zostaną wplątane w rozważania losy hipotetycznego młodego człowieka, którego nazwiemy Adam. Adam jest młodym elektronikiem, z pewnością przyszłym inżynierem, który od swoich rówieśników słyszał, że oni projektują, programują i uruchamiają. Adam zasięgnął informacji o co tu chodzi. Zakupił płytkę Arduino UNO, zasilacz sieciowy i pełen zapału zainstalował środowisko Arduino IDE. Chcąc wiedzieć jak pokierować swoim rozwojem, zapisał się do odpowiedniej grupy dyskusyjnej i zadał pytanie „mam arduino i co mogę na nim zrobić?” . Odpowiedź pełna sarkazmu, którego nie wyczuł, brzmiała: „Zamrugać diodą LED”. Ów młody człowiek znalazł przykład „blink.ino”, wczytał, skompilował i wgrał do płytki. Ku swemu wielkiemu zaskoczeniu na płytce zaczęła migać dioda LED. Z uśmiechem na twarzy, nie wiedząc tak naprawdę co zrobił, stwierdził: „Jestem programistą”. setup(){ pinMode(13, output); } main() { digitalWrite(13, HIGH); dely(1000); digitalWrite(13. LOW); delay(1000); } Rysunek 1. Arduino UNO Na listingu nr 1 znajduje się cały program, napisany w Arduino (zobacz ramkę „Dlaczego Arduino?”), mrugający diodą LED. Czy ten kod jest optymalny? Patrząc z punktu widzenia programisty, który nie wie jak jest zbudowany mikroprocesor: TAK, ten kod jest optymalny. Z punktu widzenia inżyniera, dobrze znającego architekturę wewnętrzną procesora oraz możliwości jakie daje programowanie niskopoziomowe: NIE, ponieważ to co powstanie po kompilacji będzie bardzo nadmiarowe. Prześledźmy co procesor będzie robić: W funkcji setup zostaje skonfigurowany pin nr 13 procesora jako wyjście. Nr 13 to tylko symboliczna nazwa jednego z wyjść płytki Arduino UNO. Nr 13 odnosi się w tym przypadku do PortB.5 procesora. Do tego pinu jest podłączona dioda LED poprzez rezystor o wartości 500 Ohm. W funkcji main, w pierwszej linii pin 13 jest ustawiany w stan wysoki, dioda LED świeci. Następnie, przez 1000 ms, procesor czeka, aż upłynie 1000 ms. Procesor zajmuje się tylko sobą, czekając aż upłynie 1000 ms. Po tym czasie pin 13 ustawiany jest w stan niski, dioda LED gaśnie. I znowu procesor nic innego nie robi, tylko czeka aż upłynie kolejne 1000 ms. I tak na okrągło, przez ponad 99,9% czasu procesor nic nie robi, tylko sprawdza, czy skończyło się 1000 ms. Schemat nr 1. Zobrazowanie podłączenia diody LED na płytce Arduino UNO W czasie oczekiwania na upłynięcie 1000 ms procesor mógłby robić pożyteczniejsze rzeczy niż tylko zajmowanie się samym sobą. Jeżeli już nie damy mu żadnego konkretnego zadania, to niech nic nie robi, dosłownie nic. Młodzi ludzie, tacy jak Adam, mając nikłą wiedzę elektronika, nie zważają na wykorzystanie energii. Podłączają zasilacz sieciowy do Arduino i nie przejmują się ile to zużyje energii. Płytka arduino UNO sama z siebie, bez procesora, pobiera 19,2 mA. Gdy włożymy procesor, który nie był jeszcze zaprogramowany, pobór prądu wzrośnie do 36,7 mA, a podłączona diod LED będzie pobierała kolejne 2,7mA. W tym momencie Adam się relaksuje. Natomiast my zajmiemy się optymalizacją układu, to będzie praca dla inżyniera. Wykorzystamy przy okazji notę katalogową naszego procesora. Optymalizacja W celu optymalizacji zużycia energii możemy zastosować diodę LED, która potrzebuje mniejszy prąd by świecić, możemy zmniejszyć zużycie energii przez procesor, a nawet możemy wymontować zbędne elementy z płytki Arduino UNO. To ostatnie nie jest wskazane, bo płytka ta jeszcze nie raz zostanie zapewne użyta. Z diodą LED jest tak, że została ona wlutowana z rezystorem na płytce i jej wymiana będzie kłopotliwa. Pozostaje nam zoptymalizowanie procesora, zmontowanie układu np. na płytce stykowej. Będziemy potrzebować procesor, rezonator kwarcowy 16MHz, diodę led, kilka rezystorów o różnej wartości, oczywiście płytkę stykową, kabelki, zasilacz, stabilizatory i programator AVR ISP lub dowolny inny pozwalający na programowanie procesora. Schemat nr 2. Podłączenie samego procesora Ale dlaczego prowadzimy takie rozważania? Nie zawsze będziemy mieli obok naszego urządzenia gniazdko zasilania o nieograniczonej energii i napięciu 230V. Wtedy zasilimy nasze urządzenie z baterii lub akumulatora. Co zrobić, żeby urządzenie pracowało nieprzerwanie przez 1 miesiąc? Należy dać taką baterię, która ma odpowiednią pojemność. To prawda. A co zrobić, żeby urządzenie pracowało przez cały rok? Czy należy dać 12 takich baterii? Po dobrej optymalizacji może się okazać, że nie musi to być konieczne. Przeanalizujemy, na przytoczonym wcześniej przykładzie Blink, jak optymalizacja programowa i sprzętowa przyczyni się do zmniejszenia zużycia energii. W tym celu zamiast używać płytki Arduino UNO użyjemy samego procesora Atmega328 i zasilimy go napięciem 6V poprzez stabilizator 5V, a wszystko będziemy montować na płytce stykowej. Pobór prądu w naszym układzie będzie wyglądał jak przebieg prostokątny o wypełnieniu 50%. Dolny poziom prądu będzie odpowiadał stanowi, gdy dioda LED jest zgaszona (poziom L), natomiast poziom górny będzie odpowiadał stanowi, gdy dioda LED świeci (poziom H).Sam procesor pobiera 14.5 mA, a dioda LED 2.7 mA. Będą to dla nas dane odniesienia. Średni prąd pobierany przez układ to 15,8mA. W ciągu doby układ pobierze 380 mAh. Chcąc zasilić układ z baterii 4 x 1.5V (np. AA o pojemności ok 2000 mAh) układ będzie pracować 5dni i 6 godzin. (dla płytki Arduino będzie to 2 dni i 4 godziny). W ten oto prosty sposób wydłużyliśmy czas pracy o ponad 100%. Optymalizacja nr 1: zmieniamy diodę LED na bardziej energooszczędną, zastosujemy inny rezystor. Zastosujemy diodę, która by świecić potrzebuje zaledwie 0,15 mA. W ten sposób zmniejszyliśmy prąd pobierany przez diodę. Czas pracy na baterii wydłuży się do 5 dni i 16 godzin. W ten sposób, niejako w gratisie, otrzymaliśmy 10 godzin pracy w stosunku do układu podstawowego na płytce stykowej oraz 84h w porównaniu do układu na oryginalnym Arduino. Wykres nr 1. Zależność prądu zasilania od napięcia zasilania dla dwóch przykładowych częstotliwości zegara Optymalizacja nr 2: zmniejszamy napięcie zasilania do 4.5 V, czyli wykorzystamy tylko 3 ogniwa AA. Nie używamy w tym momencie już żadnego stabilizatora Zwiększamy wartość rezystora zachowując parametry świecenia diody LED, możemy zauważyć że zmniejszył się prąd pobierany przez procesor. Teraz nasz układ pobiera średnio 11,35 mA i będzie pracował 7 dni i 8 godzin. Optymalizacja nr 3. Przełączymy pracę procesora na wewnętrzny układ zegarowy 8MHz. Wcześniej oczywiście należy zmodyfikować parametr funkcji delay, aby zachować odpowiednią częstotliwość migania diody LED. W tym przypadku, ponieważ zmniejszyliśmy częstotliwość o połowę, więc musimy ten parametr także zmniejszyć o połowę, czyli użyjemy delay(500). Nasz układ będzie pobierał średnio 7,55 mAh, a czas pracy na bateriach wydłuży się do 11 dni i 1 godzinę. Wykres nr 2. Pobór prądu w zależności od częstotliwości zegara i napięcia zasilania Optymalizacja nr 4. Procesor atmega328 ma możliwość zmiany konfiguracji, aby częstotliwość rezonatora była zmniejszona ośmiokrotnie. Wymagana jest tylko odpowiednia konfiguracja Fuse bitów. W tak prostym programie jak blink, nie musimy mieć tak szybkiego procesora. Ustawmy Fuse bit CKDIV8 na aktywny. Spowoduje to, że procesor będzie pracować z częstotliwością ośmiokrotnie mniejszą. Aby uzyskać tę samą częstotliwość migania diody LED musimy troszkę zmienić nasz program. W miejsce oryginalnego delay(1000) wstawmy delay(500/8) lub delay(65). Po kompilacji, wgraniu i przestawienie fuse bitu, dioda nadal miga, tak jak wcześniej, ale średni prąd pobierany przez układ zmniejszył się do 3.7 mA . W efekcie optymalizacji nr 4 nasz układ będzie pracować 22 dni i 13 godzin W nocie katalogowej, wykres powyżej, możemy zobaczyć, że napięcie zasilania możemy zmniejszyć aż do 1.8V. Niestety nie mamy takiej baterii, ale możemy odłączyć kolejną. Wykres nr 3. Maksymalna częstotliwość w zależności od napięcia zasilania Optymalizacja nr 5. Zasilamy nasz układ tym razem z dwóch baterii AA, czyli napięciem 3V. Oczywiście zmieniamy rezystor przy diodzie, aby zasilać ją tym samym prądem co poprzednio. Program, zegar i fuse bity zostawiamy niezmienione. Tym razem otrzymujemy zapotrzebowanie na prąd przez procesor na poziomie 1.1 mA. Nasz układ będzie pracować przez 75 dni i 22 godzin. Optymalizacja nr 6. Wykorzystamy wbudowany w procesor wewnętrzny układ zegarowy o częstotliwości 128kHz. W naszym przypadku, po korekcie w funkcji delay, nadal układ będzie migać diodą LED. Oczywiście pozostawiamy CKDIV8 aktywny uzyskując częstotliwość zegara 16kHz. Średni pobór prądu przez nasz układ wyniesie 0,5 mA, a czas pracy na dwóch bateriach AA, wyniesie 166 dni i 15 godziny. Można wykonać optymalizację nr 7 poprzez zmniejszenie napięcia zasilania do 2.4V, wykorzystując dwa ogniwa akumulatorków o pojemności 2000 mAh. Dioda LED już przestanie prawie świecić, ale układ nadal będzie pracować pobierając średnio 0.35 mA, a czas pracy osiągnie 238 dni i 2 godziny. Idąc dalej można wykonać optymalizacja nr 8. I wykorzystać wbudowany w procesor tryb zmniejszonego pobory prądu poprzez jego usypianie. Taki zabieg spowoduje, że procesor będzie pobierać jeszcze mniej prądu, ale to zadanie pozostawiam czytelnikowi. Krótkie podsumowanie tego co zrobiliśmy Tabela nr 1. Podsumowanie optymalizacji Atmega328 Dzięki zastosowaniu kilku optymalizacji wydłużyliśmy czas pracy naszego, bardzo prostego, układu. Poza tym zmniejszyliśmy o połowę ilość potrzebnych ogniw do zasilania, co zmniejszyło koszty eksploatacji. Wydłużyliśmy czas pracy naszego urządzenia 76 krotnie, wykorzystując o połowę mniej baterii. A jeżeli już kupimy 4 baterie, tak jak to miało miejsce w pierwszej wersji, ale podłączając je równolegle w pakiecie 2 x 2 baterie, to uzyskujemy ponad 150 krotne wydłużenie czasu pracy naszego układu w porównaniu do użycia oryginalnego Arduino UNO. Czytelnik może pokusić się o zgłębienie wiedzy o możliwościach procesorów w omawianej kwestii. Jest dostępna literatura omawiająca to zagadnienie. Ten artykuł ma za zadanie tylko przybliżyć to zagadnienie szerszemu gronu odbiorców, którzy dopiero zaczynają przygodę z mikroprocesorami. Można jeszcze zastosować bardziej ambitne metody zarządzania energią[ii], ale to już zostawiam czytelnikowi. Rozwinięcie na 32 bitach Nasz Adam o tym wszystkim co zrobiliśmy nie wiedział. Ale jego ambicja przerastała jego wiedzę. Napisał, czyli przekopiował swój pierwszy program i stwierdził: „ale przecież to tylko 8-bitowy procesor, użyję 32-bitowego”. Jak pomyślał, tak zrobił, zakupił Arduino M0, skorzystał ze swojego pierwszego programu, skompilował go, wgrał i…. dioda LED miga. Radość wielka, Adam „napisał” swój pierwszy program na procesor 32-bitowy. Znów jest szczęśliwy, choć nadal nie wie co robi procesor. Program wygląda identycznie jak poprzednio. Więc przypomnę co robi procesor. Procesor w funkcji main, w pierwszej linii pin 13 ustawia w stanie wysokim, dioda LED świeci. Następnie, przez 1000ms, procesor SAMD21G18 czeka, aż upłynie 1000ms, robi to szybciej, bo jest szybszy od Atmega328. Procesor zajmuje się tylko sobą, czekając aż upłynie 1000ms. Nudzi się. Po tym czasie pin 13 ustawiany jest w stanie niskim, dioda LED gaśnie. I znowu procesor nic innego nie robi, tylko czeka aż upłynie kolejne 1000ms. I tak na okrągło, przez 99,99% czasu procesor nic nie robi, tylko bardzo szybko sprawdza, czy skończyło się 1000ms. Rysunek 2. Arduino M0 Płytka Arduno M0 została zasilona z 4 baterii AAA, tak jak poprzednio. Średni pobór prądu wynosił 26.8 mA, a czas pracy układu, na używanych wcześniej bateriach, wynosi 3 dni i 2 godzin. Optymalizacja W przypadku procesora SAMD21G18 również możemy przeprowadzić podobną optymalizację. Ograniczymy się tylko dwóch etapów, w którym zasilimy płytkę z 2 baterii AAA . Optymalizacja nr 1. Aby ograniczyć zużycie prądy przez elementy dodatkowe na płytce wykorzystamy podobnie jak poprzednio sam procesor oraz tylko te elementy, które będą niezbędne do pracy. Po optymalizacji otrzymaliśmy średni prąd zasilania wynoszący 9,6 mA. Nasz układ będzie nieprzerwalnie pracować przez 8 dni i 14 godzin. Optymalizacja nr 2. Przy użyciu trybu pracy SLEEP dla omawianego procesora możemy obniżyć pobór prądu do ok 6uA. Mając takie możliwości możemy w czasie gdy dioda LED ma być zgaszona uśpimy procesor. Przy wcześniejszej optymalizacji osiągnęliśmy średni pobór prądu na poziomie 9,6 mA, teraz usypiając procesor przez połowę czas uzyskamy 4,8 mA. Wynik może nie powala bo i tak spora wartość, ale pamiętajmy, to jest o 50% mniej. Po tej optymalizacji otrzymaliśmy średni prąd zasilania wynoszący 4,8 mA. Nasz układ będzie nieprzerwalnie pracować przez 17 dni i 4 godzin. Jeżeli chodzi o optymalizację częstotliwości zapraszam do analizy noty katalogowej producenta i wykonania własnych testów. Krótkie podsumowanie tego co zrobiliśmy Tabela nr 2. Podsumowanie optymalizacji SAMD21G18 Podsumowanie Porównajmy teraz obie płytki Arduino. Obie posiadają podobną ilość pinów do wykorzystania, obie można zasilić albo z USB, albo z zewnętrznego zasilacza, obie pracują na maksymalnych prędkościach zegara jakie udostępnia producent. Procesor w Arduino Uno ma piny, które można obciążyć większym prądem niż w procesor w Arduino M0. Oba procesory mają możliwość korzystania z metod zarządzania zasilaniem, tym samym zmniejszania prądu zasilania procesora. Dla naszego Adama, jest bez znaczenia, która płytkę wykorzysta, ale dla czytelnika tego artykułu zapewne już nie. Nie zawsze jest sens używać najmocniejszy procesor, skoro słabszy i tańszy zrobi dokładnie to samo. Dla prostych aplikacji, które nie wymagają „super szybkości” procesor Atmega328 wydaje się być lepszym rozwiązaniem w porównaniu do SAMD21G18. Natomiast gdy budujemy aplikację bardzo skomplikowaną, wymagającą szybkich operacji i krótkich czasów reakcji to SAMD21G18 tym razem będzie lepszy od Atmega328. Wszystko należy przekalkulować. Jeżeli zoptymalizujemy nasz układ sprzętowo i programowo, to możemy podkusić się o zrobienie układu, który będzie niezależny od zasilania zewnętrznego. Możemy zasilać układ np. z energii słonecznej, która zostanie dostarczona przez ogniwo słoneczne. Podczas dnia nadmiar energii wytworzonej przez ogniwo można gromadzić w akumulatorze, z którego układ będzie zasilany nocą. Dobór ogniwa i akumulatora zależy już od tego jak skomplikowany mamy układ i jakie ma zapotrzebowanie na energię, ale ważne jest by układ działał cały czas. Ktoś mógłby powiedzieć perpetuum mobile, ale my powiemy że korzystamy z energii odnawialnej. Dlaczego Arduino Nie ma wątpliwości, że rozwój elektroniki sprawił, że wiele narzędzi i produktów stało się bardziej dostępnych dla zwykłego użytkownika. Idea Arduino doprowadziła to stanu, w którym to każdy może spróbować, w naszym przypadku, programowania i konstruowania elektroniki. Programowanie w Arduino jest bardzo proste, a programista nie musi znać budowy wewnętrznej procesorów, co w przypadku innych środowisk jest konieczne. Samo środowisko jest bezpłatne. Moduły Arduino stały się bardzo dostępne na naszym rynku, a za sprawą „specjalistów” z Chin również cenowo bardzo atrakcyjne. Wsparcie producenta i dostępność dokumentacji jest szczególnym ułatwieniem w budowaniu i programowaniu układów. Rozpowszechnienie Arduino na całym świecie sprawiło, że użytkowników i osób w nim programujących jest wielu. Jest bardzo wiele grup dyskusyjnych, forum internetowych czy repozytoriów na których jest omawianych całe mnóstwo problemów i ich rozwiązań, bibliotek napisanych przez użytkowników, czy po prostu opisów typu „jak zrobić…”. To wszystko sprawia, że zamieszczony w tym artykule opis dotyczy Arduino, od którego to zaczyna przygodę z programowaniem najwięcej osób.
  2. Witam, ostatnio wszedłem w posiadanie czterech 13,5 V paneli słonecznych i chcę z nich zrobić zasilanie do stacji pogodowej arduino. Rozumiem że będę potrzebować zasilania kiedy pogoda nie będzie sprzyjać. Jestem zielony jeżeli chodzi o elektrotechnikę i mam parę pytań: Jaką baterię polecacie do utrzymania takiej stacji pogodowej? W jaki sposób powinienem połączyć panele tak aby były w stanie najwydajniej ładować baterię? Jaki moduł ładowania byłby odpowiedni do mojego zastosowania? Czy ten moduł byłby ok gdybym zastosował przetwornicę step-down (do 5,5 V) gdy panele generują 13,5 V przy maksymalnym słońcu? Wiem że te panele mogą być trochę za mocne na ten projekt, ale na prawdę nie mam na nie pomysłu. Może zamiast stacji pogodowej powinienem coś innego z nimi zrobić?
  3. Zrobiłem prosty IoT: NodeMCU + BMP280, pracujący 2s, dwa razy w ciągu minuty, a w pozostałym czasie deepsleep, czyli średnie obciążenie powinno być mniejsze niż 20mA. Na razie zasilam to powerbankiem, ale wolałbym coś bardziej niezależnego, np. panel słoneczny. Znalazłem w sieci projekt stacji pogodowej z wemos, baterią słoneczną, 1 akumulatorem i do tego modułem TP4056: https://www.instructables.com/id/Solar-Powered-WiFi-Weather-Station/ (załączam obrazek). Jest bardzo prosty, bez dodatkowych stepup-ów, czy też rezystorów do regulacji prądu ładowania. Chciałem się upewnić, czy na pewno ta konfiguracja działa poprawnie? Czyli, czy w słoneczne dni panel solarny ładuje akumulator, a w pozostałym czasie kontroler ma zasilanie z akumulatora? Wcześniej przejrzałem b. pobieżnie wątki z forum i wynika z nich, że raczej takie urządzenie powinno być bardziej skomplikowane.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.