Spisu treści:

Zasilana energią słoneczną lampa XOD: 9 kroków (ze zdjęciami)
Zasilana energią słoneczną lampa XOD: 9 kroków (ze zdjęciami)

Wideo: Zasilana energią słoneczną lampa XOD: 9 kroków (ze zdjęciami)

Wideo: Zasilana energią słoneczną lampa XOD: 9 kroków (ze zdjęciami)
Wideo: Huawei Mate 50 Pro - recenzja, Mobzilla odc. 569 2024, Grudzień
Anonim
Zasilana energią słoneczną lampa XOD
Zasilana energią słoneczną lampa XOD

W większości sklepów z artykułami domowymi i sprzętem dostępne są niedrogie słoneczne lampy ogrodowe/chodnikowe. Ale jak mówi stare powiedzenie, zwykle dostajesz to, za co płacisz. Zwykłe obwody ładowania i oświetlenia, których używają, są proste i tanie, ale uzyskana moc światła nie jest imponująca (i ledwie wystarczająca dla każdego, kto korzysta z chodnika, aby zobaczyć, dokąd zmierza!)

To moja próba zaprojektowania modułu oświetleniowego poza siecią, który jest znaczącym ulepszeniem, a jednocześnie jest stosunkowo niedrogi w wykonaniu. Dając mu trochę „mózgu”. XOD.io to nowe IDE zgodne z wbudowaną platformą programistyczną Arduino, w której można „pisać” kod graficznie. Środowisko przenosi Twój szkic graficzny do nowoczesnego C ++, który jest niezwykle wydajny w generowaniu kompaktowego kodu i generuje kod źródłowy w pełni kompatybilny z podstawowym Arduino IDE bez konieczności dodatkowych zewnętrznych zależności. W ten sposób nawet małe, niedrogie mikrokontrolery z ograniczonymi zasobami programowymi i pamięciowymi mogą być wykorzystywane do wykonywania złożonych zadań.

Ten projekt pokazuje, jak dwa współpracujące ze sobą mikrokontrolery ATTiny85 kompatybilne z Arduino mogą być wykorzystane do zarządzania zapotrzebowaniem na moc lampy. Pierwszy procesor zajmuje się odczytywaniem danych środowiskowych z zewnętrznego sprzętu, a drugi próbuje zebrać jak najwięcej energii słonecznej w ciągu dnia, a następnie sterować oświetleniem diody LED o dużej mocy, gdy akumulator rozładowuje się w nocy. Drugi procesor wykonuje swoje zadanie poprzez kompaktową implementację sterowania „logiką rozmytą”. Oprogramowanie dla obu chipów zostało opracowane wyłącznie w środowisku XOD.

Krok 1: Wymagane materiały

Arduino IDE, najnowsza wersja, z rozszerzeniem ATTinyCore instalowanym z menedżera "Boards"

Programator Sparkfun USBTinyISP ATTiny, 11801 lub odpowiednik strony produktu Sparkfun

Regulowany niskonapięciowy konwerter doładowania Pololu z wejściem wyłączającym, U1V11A lub równoważna strona produktu Pololu

Dioda LED wysokiej mocy biała lub RGB z radiatorem, wspólną anodą, Adafruit 2524 lub równoważną stroną produktu Adafruit

Microchip ATTiny85 w 8-pinowej obudowie DIP, 2 strony produktu Mouser

8-pinowe gniazda DIP IC, 2

Kondensator zbiorczy, 16 v 220 uF

Kondensator wyjściowy, 6.3v 47uF

Rezystory ograniczające prąd, 50 omów 1/4 wat

Rezystory podciągające i2c, 4,7k, 2

Rezystory dzielnika napięcia panelu, 1/4 W, 100k, 470k

Rezystor czujnika prądu, 10 omów 1⁄2 W tolerancja 1%

Kondensatory obejściowe, ceramiczne 0,1uF, 2

2 akumulatory litowo-jonowe 3,7 V 100 mAh, PKCELL LP401 lub odpowiednik

Gniazdo wejściowe wtyku baryłkowego do panelu, 1

Mini listwy zaciskowe 3”x3” płytka lutownicza i cienki przewód solid-core do wykonywania połączeń

Do testów prawie na pewno będą potrzebne oscyloskop, multimetr i zasilacz laboratoryjny

Krok 2: Konfiguracja środowiska

Konfiguracja środowiska
Konfiguracja środowiska

Środowisko XOD nie obsługuje procesorów z serii ATTiny po wyjęciu z pudełka, ale korzystając z kilku bibliotek innych firm ze świata Arduino, łatwo jest dodać obsługę tej serii AVR. Pierwszym krokiem jest zainstalowanie biblioteki „ATTinyCore” z menu rozwijanego „Narzędzia → Tablica → Menedżer tablicy” Arduino IDE. Upewnij się, że ustawienia pokazane na dołączonym obrazku są poprawne - pamiętaj, że musisz nacisnąć "Burn bootloader", aby zmienić bezpieczniki napięcia i ustawienia prędkości taktowania przed wgraniem jakiegokolwiek kodu!

Kod źródłowy tej biblioteki jest dostępny pod adresem:

Inną przydatną biblioteką, którą można uzyskać z repozytorium, jest „FixedPoints”, która jest implementacją matematyki stałoprzecinkowej w czasie kompilacji dla procesorów obsługiwanych przez Arduino. ATTiny ma ograniczoną pamięć SRAM i pamięć programu i bardzo pomaga w zmniejszaniu ostatecznego rozmiaru szkicu, aby użyć 2-bajtowej liczby całkowitej do ogólnego przechowywania danych, a nie typu zmiennoprzecinkowego, który wymaga 4 bajtów na AVR. Szybkość wykonywania powinna również zostać poprawiona, ponieważ ATTiny nie ma jednostki mnożenia sprzętowego, a tym bardziej sprzętu zmiennoprzecinkowego!

Kod źródłowy jest dostępny pod adresem:

Samouczek na temat tworzenia, transpilowania i wdrażania szkiców graficznych XOD pod adresem: https://github.com/Pharap/FixedPointsArduino bardzo pomoże w zrozumieniu, w jaki sposób zostały utworzone dołączone pliki źródłowe.

Krok 3: Przegląd projektu

Przegląd projektu
Przegląd projektu
Przegląd projektu
Przegląd projektu

Na płycie dwa procesory ATTiny85 są połączone interfejsem i2c i współpracują ze sobą w celu zarządzania wykrywaniem napięcia panelu słonecznego, prądu płynącego do akumulatora z konwertera doładowania, gdy panel jest podświetlony, napięcia akumulatora i akumulatora temperatura.

Przetwornica doładowania jest gotowym modułem opartym na układzie scalonym Texas Instruments TPS6120, który może przyjąć napięcie wejściowe tak niskie, jak 0,5 wolta i zwiększyć je do dowolnego miejsca od 2 do 5 woltów. Rdzeń czujnika składa się z kilku bloków funkcjonalnych. Zegar główny zaczyna działać, gdy tylko do konwertera doładowania zostanie doprowadzone zasilanie z wejścia panelu słonecznego. Rozpoczyna się wykonywanie szkicu, a pierwszą rzeczą jest ustalenie, czy panel jest wystarczająco oświetlony, aby zapewnić prąd ładowania do akumulatora.

Napięcie panelu słonecznego przechodzi przez dwa filtry cyfrowe, a jeśli przekracza pewien próg, system określa, że panel jest oświetlony i bramkuje zegar główny do monitora pomiaru prądu. Jest to kanał przetwornika analogowo-cyfrowego w układzie, skonfigurowany różnicowo, który wykrywa napięcie na 10 omowym rezystorze o tolerancji 1% połączonym szeregowo między wyjściem konwertera doładowania a wejściem akumulatora. Gdy panel nie jest podświetlony, ATTiny wysyła sygnał do drugiego ATTiny, mówiąc mu, aby monitorował moc diody LED zamiast ładowania, a następnie wyłączał konwerter doładowania i izolował wejście, aby akumulator nie wysyłał prądu z powrotem przez panel.

Drugi rdzeń ATTiny to miejsce, w którym działa kontroler LED i system monitorowania naładowania akumulatora. Dane o napięciu panelu, napięciu akumulatora i prądzie ładowania akumulatora są przesyłane do tego rdzenia w celu przetworzenia przez sieć logiczną rozmytą, która próbuje wygenerować odpowiedni sygnał PWM do podania na pin SHTDN, kontrolując w ten sposób ilość prądu przesyłanego do akumulatora do ładowania go, gdy świeci – podstawowa forma śledzenia maksymalnego punktu mocy (MPPT). Otrzymuje również sygnał z rdzenia czujnika, który mówi mu, czy powinien włączyć lub wyłączyć diodę LED, w zależności od mocy wyjściowej rdzenia czujnika / nocna klapka.

Gdy dioda LED jest aktywna w nocy, ATTiny monitoruje dane o napięciu akumulatora wysyłane do niego od swojego kumpla i własny czujnik temperatury na chipie, aby uzyskać przybliżone oszacowanie, ile energii jest wpychane do diody LED (napięcie akumulatora spada a temperatura chipa wzrasta wraz z prądem pobieranym z jego pinów.) Sieć rozmytej logiki powiązana z łatką LED PWM próbuje ocenić, jaka moc baterii jest nadal dostępna, i zmniejszyć intensywność diody LED, gdy bateria jest rozładowana.

Krok 4: Tworzenie niestandardowych łat z podstawowej biblioteki XOD

Tworzenie niestandardowych łat z podstawowej biblioteki XOD
Tworzenie niestandardowych łat z podstawowej biblioteki XOD
Tworzenie niestandardowych łat z podstawowej biblioteki XOD
Tworzenie niestandardowych łat z podstawowej biblioteki XOD

Do tego projektu użyto kilku niestandardowych węzłów poprawek, z których niektóre można łatwo zbudować w całości z dołączonych węzłów XOD, a niektóre zostały zaimplementowane w C++.

Pierwszy z dwóch niestandardowych węzłów poprawek na zdjęciach to implementacja wykładniczego filtru średniej ruchomej. Jest to niskoprzepustowy cyfrowy filtr dolnoprzepustowy stosowany szeregowo w szkicu, raz do filtrowania przychodzącego napięcia panelu słonecznego dla rdzenia logicznego, a raz do zasilania wyzwalacza, który określa długoterminowe oświetlenie otoczenia. Zobacz wpis w Wikipedii na temat wygładzania wykładniczego.

Struktura węzłów na obrazie jest po prostu bezpośrednią graficzną reprezentacją funkcji transferu w artykule, połączoną ze sobą za pomocą linków z odpowiednich wejść do wyjść. W bibliotece znajduje się węzeł odroczenia, który umożliwia utworzenie pętli sprzężenia zwrotnego (XOD ostrzeże Cię, jeśli utworzysz pętlę sprzężenia zwrotnego bez wstawiania opóźnienia w pętli, jak opisano w modelu wykonania XOD). łatka działa dobrze, to proste.

Drugi niestandardowy węzeł krosowy jest odmianą standardowego przerzutnika dołączonego do XOD, który jest zasilany filtrowanym napięciem panelu. Zatrzaskuje się na wysokim lub niskim poziomie w zależności od tego, czy sygnał wejściowy jest powyżej lub poniżej pewnego progu. Węzły Cast są używane do konwersji wartości wyjściowych logicznych na typ danych impulsowych w celu wyzwolenia przerzutnika, gdy stan przechodzi od niskiego do wysokiego. Miejmy nadzieję, że projekt tego węzła poprawki powinien być nieco oczywisty na podstawie zrzutu ekranu.

Krok 5: Tworzenie niestandardowych poprawek za pomocą C++

Tworzenie niestandardowych poprawek za pomocą C++
Tworzenie niestandardowych poprawek za pomocą C++

W przypadku specjalnych wymagań, w których wymagana funkcjonalność węzła byłaby zbyt złożona, aby można ją było łatwo przedstawić graficznie lub które opierają się na bibliotekach Arduino, które nie są natywne dla standardowego środowiska Arduino, XOD ułatwia osobom z pewną znajomością C/C++ pisanie niewielkich fragmentów kod, który można następnie zintegrować z poprawką tak samo, jak każdy inny węzeł utworzony przez użytkownika lub magazyn. Wybranie „utwórz nową łatkę” z menu plików tworzy pusty arkusz do pracy, a węzły wejściowe i wyjściowe można przeciągnąć z sekcji „węzły” podstawowej biblioteki. Następnie można przeciągnąć węzeł „nie zaimplementowany-w-xod”, a po kliknięciu wywoła on edytor tekstu, w którym wymagana funkcjonalność może zostać zaimplementowana w C++. Jak obsłużyć stan wewnętrzny i uzyskać dostęp do portów wejściowych i wyjściowych z kodu C++, omówiono tutaj.

Jako przykład implementacji niestandardowych poprawek w C ++, dwie kolejne niestandardowe łatki dla rdzenia sterownika służą do oszacowania napięcia zasilania i temperatury rdzenia rdzenia sterownika. Wraz z rozmytą siecią pozwala to na przybliżone oszacowanie pozostałej mocy baterii dostępnej do zasilania diod LED, gdy jest ciemno.

Płatka czujnika temperatury jest również zasilana wyjściem czujnika napięcia zasilającego, aby uzyskać lepsze oszacowanie – wykrywanie temperatury rdzenia pozwala nam uzyskać zgrubne oszacowanie, ile mocy jest spalone w diodach, i w połączeniu z odczytem napięcia zasilania, gdy wyczerpanie akumulatora dalsze przybliżone oszacowanie, ile pozostało energii akumulatora. Nie musi być superdokładny; jeśli rdzeń „wie”, że diody LED pobierają dużo prądu, ale napięcie baterii gwałtownie spada, prawdopodobnie można śmiało powiedzieć, że moc baterii nie wystarczy na długo i czas wyłączyć lampę.

Krok 6: Budowa

Budowa
Budowa
Budowa
Budowa
Budowa
Budowa

Projekt zbudowałem na małym kawałku płytki prototypowej z miedzianymi podkładkami pod części przewlekane. Używanie gniazd dla układów scalonych bardzo pomaga w programowaniu/modyfikowaniu/testowaniu; USBTiny ISP firmy Sparkfun ma podobne gniazdo na swojej płytce, więc zaprogramowanie dwóch układów polega po prostu na podłączeniu programatora do portu USB komputera, wgraniu przetranspilowanego kodu XOD z dołączonych plików Arduino.ino z odpowiednimi ustawieniami płytki i programatora, oraz następnie delikatnie wyjmując chipy z gniazda programatora i wkładając je w gniazda płyty prototypowej.

Moduł konwertera doładowania oparty na Pololu TPS6120 jest dostarczany na płytce riser wlutowanej do płyty prototypowej na listwach pinowych, dzięki czemu można zaoszczędzić miejsce, montując niektóre komponenty pod spodem. W moim prototypie umieściłem pod spodem dwa rezystory podciągające 4,7k. Są one wymagane, aby magistrala i2c między układami działała poprawnie - bez nich komunikacja nie będzie działać prawidłowo! Po prawej stronie płyty znajduje się gniazdo wejściowe dla wtyczki panelu słonecznego i wejściowego kondensatora magazynującego. Najlepiej spróbować połączyć gniazdo i tę zaślepkę bezpośrednio ze sobą „przebiegami” lutowia, a nie przewodu łączącego, aby uzyskać jak najmniejszą rezystancję ścieżki. Ciągi lutowia są następnie używane do podłączenia dodatniego zacisku kondensatora bezpośrednio do zacisku napięcia wejściowego modułu doładowania, a styk uziemienia modułu doładowania bezpośrednio do styku uziemienia gniazda.

Po prawej i lewej stronie gniazd dla dwóch ATTinys znajdują się kondensatory despike/deglitching 0,1 uF. Komponenty te są również ważne, aby nie pominąć i powinny być podłączone do pinów zasilania i uziemienia układów scalonych tak krótką i bezpośrednią ścieżką, jak to możliwe. Rezystor wyczuwania prądu 10 omów znajduje się po lewej stronie, jest podłączony zgodnie z wyjściem z konwertera doładowania, a każda strona jest podłączona do pinu wejściowego rdzenia czujnika - te piny są skonfigurowane do pracy jako różnicowy ADC do pośredniego pomiaru prąd do akumulatora. Połączenia między pinami IC dla magistrali i2c a pinem wyłączającym konwertera doładowania itp. można wykonać za pomocą przewodu połączeniowego na spodzie płyty prototypowej, bardzo cienki drut połączeniowy z solidnym rdzeniem świetnie się do tego nadaje. Ułatwia zmiany, a także wygląda o wiele ładniej niż bieganie bluzy między otworami na górze.

Moduł LED, którego użyłem, był trójkolorową jednostką RGB, moim planem było, aby wszystkie trzy diody LED były aktywne, gdy bateria była prawie w pełni naładowana, i powoli zanikała niebieska dioda LED na żółtą, gdy ładunek został wyczerpany. Ale ta funkcja nie została jeszcze zaimplementowana. Pojedyncza biała dioda LED z jednym rezystorem ograniczającym prąd również będzie działać poprawnie.

Krok 7: Testowanie, część 1

Testowanie, część 1
Testowanie, część 1

Po zaprogramowaniu obu układów ATTiny za pomocą dołączonych plików szkicu za pomocą programatora USB ze środowiska Arduino, pomaga przetestować, czy dwa rdzenie w prototypie działają prawidłowo przed próbą naładowania akumulatora z panelu słonecznego. Idealnie wymaga to podstawowego oscyloskopu, multimetru i zasilacza laboratoryjnego.

Pierwszą rzeczą do sprawdzenia jest to, że na płycie nie ma zwarć przed podłączeniem układów scalonych, baterii i panelu do gniazd, aby uniknąć możliwych uszkodzeń! Najprostszym sposobem na to jest użycie zasilacza laboratoryjnego, który w takiej sytuacji może ograniczyć swój prąd wyjściowy do bezpiecznej wartości. Użyłem mojego zestawu zasilania ławki przy 3 woltach i limicie 100 mA podłączonego do zacisków wejściowych panelu słonecznego do dodatnich i ujemnych przewodów zasilających. Przy zainstalowanych tylko elementach pasywnych nie powinno być zasadniczo żadnego poboru prądu zarejestrowanego na monitorze prądu zasilacza, o którym można by mówić. Jeśli występuje znaczny przepływ prądu lub zasilanie przechodzi w ograniczenie prądu, coś poszło nie tak i należy sprawdzić płytkę, aby upewnić się, że nie ma błędnych połączeń lub kondensatorów z odwróconą polaryzacją.

Następnym krokiem jest upewnienie się, że konwerter doładowania działa poprawnie. Na płytce znajduje się potencjometr śrubowy, przy włączonym zasilaniu i odpowiednio podłączonych czterech pinach konwertera, potencjometr należy obracać małą końcówką śrubokręta, aż napięcie na zacisku wyjściowym modułu wskaże około 3,8 do 3,9 woltów. Ta wartość DC nie zmieni się podczas pracy, rdzeń sterownika będzie kontrolować średnie napięcie wyjściowe poprzez pulsowanie pinu wyłączającego modułu.

Krok 8: Testowanie, część 2

Testowanie, część 2
Testowanie, część 2
Testowanie, część 2
Testowanie, część 2

Następną rzeczą do sprawdzenia jest to, że komunikacja i2c działa OK, przy wyłączeniu zasilania płyty można zainstalować rdzeń czujnika IC. Na oscyloskopie powinny być pulsujące sygnały zarówno na pinie 5, jak i na pinie 7 fizycznego chipa, ten sterownik i2c na chipie próbuje wysłać dane do swojego kumpla. Po wyłączeniu rdzenia sterownika można zainstalować i ponownie sprawdzić połączenie oscyloskopem, na obu liniach powinna być widoczna większa sekwencja impulsów. Oznacza to, że chipy komunikują się poprawnie.

Lekko naładowana bateria pomaga w ostatecznym pełnym teście. Do tego celu można również użyć zasilacza laboratoryjnego, z limitem prądu ustawionym na około 50 mA i napięciem nadal na poziomie 3,8 V, pozostawiając akumulator LiPo podłączony bezpośrednio przez kilka minut.

Ostatnim krokiem jest przetestowanie całego systemu - gdy wszystko jest podłączone, jeśli panel jest zakryty przez dziesięć lub 15 sekund, światło powinno się zapalić, napędzane przez wyjście PWM rdzenia sterownika. Gdy panel jest mocno nasłoneczniony, akumulator powinien być ładowany z wyjścia konwertera doładowania. Sieć logiki rozmytej można pośrednio sprawdzić, aby sprawdzić, czy działa poprawnie, patrząc na linię PWM napędzającą pin wyłączający konwertera doładowania; wraz ze wzrostem natężenia oświetlenia przy niskim stanie naładowania akumulatora szerokość impulsu powinna wzrosnąć, pokazując, że im więcej mocy jest dostępnej ze światła słonecznego, rdzeń sterownika sygnalizuje, że do akumulatora należy przesłać więcej mocy!

Krok 9: Dodatek dotyczący logiki rozmytej

Dodatek dotyczący logiki rozmytej
Dodatek dotyczący logiki rozmytej

Logika rozmyta to technika uczenia maszynowego, którą można wykorzystać do sterowania systemami sprzętowymi, w których istnieje niepewność wielu parametrów kontrolowanego systemu, co sprawia, że jawne rozwiązanie sterowania danymi wejściowymi do wyjściowych jest trudne do matematycznego zapisania. Osiąga się to za pomocą wartości logicznych, które mieszczą się w przedziale od 0 (fałsz) do 1 (prawda), wyrażając niepewność w wartości bardziej podobnej do sposobu, w jaki zrobiłby to człowiek („w większości prawdziwe” lub „niezupełnie prawdziwe”) i zezwalając na szarą strefę między stwierdzeniami, które są w 100% prawdziwe i w 100% fałszywe. Sposobem na osiągnięcie tego jest najpierw pobranie próbek zmiennych wejściowych, na których ma opierać się decyzja, i ich „rozmycie”.

Sercem każdego systemu logiki rozmytej jest „rozmyta pamięć skojarzeniowa”. Przypomina to macierz, w której w przypadku układu ładowania akumulatora przechowywany jest zestaw wartości 3x3 z zakresu od 0 do 1. Wartości w macierzy można z grubsza powiązać z tym, w jaki sposób człowiek rozumowałby, jaki powinien być współczynnik PWM kontrolujący pin SHTDN konwertera doładowania, w zależności od tego, jak powyższa funkcja członkostwa kwalifikuje dany zestaw wejść. Na przykład, jeśli napięcie wejściowe panelu jest wysokie, ale prąd pobierany do akumulatora jest niski, prawdopodobnie oznacza to, że można pobrać więcej mocy, a ustawienie PWM nie jest optymalne i powinno zostać zwiększone. I odwrotnie, jeśli napięcie panelu spadnie, ale ładowarka nadal próbuje wepchnąć duży prąd do akumulatora, również zostanie zmarnowana, więc najlepiej byłoby zmniejszyć sygnał PWM do konwertera doładowania. Gdy sygnały wejściowe zostaną „rozmyte” w zestaw rozmyty, są one mnożone przez te wartości, podobnie jak wektor jest mnożony przez macierz, w celu wygenerowania przekształconego zestawu, który jest reprezentatywny dla tego, jak intensywnie „wiedza” zawiera komórkę macierzy należy uwzględnić w końcowej funkcji kombinacji.

Korzystanie z węzła „not-implemented-in-xod”, który umożliwia węzły XOD implementujące niestandardowe funkcje zbyt skomplikowane, aby można je było wykonać z podstawowych bloków konstrukcyjnych, oraz trochę C++ w stylu Arduino, pamięć asocjacyjną, funkcję ważenia i „ fuzzifier” podobne do bloków opisanych w tym odnośniku: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 są proste w wykonaniu i znacznie łatwiejsze do eksperymentowania.

Zalecana: