Siłownik 12V i sterowanie mikrokontrolerem Atmega88PA AVR
Podstawowym problemem w sterowaniu siłownikiem jest odpowiedni dobór komponentów aby obsłużyć różnicę napięć i prądów z którymi pracują siłownik i mikrokontroler. Z dokumentacji wynika że siłownik działa z napięciem 12V oraz potrafi pobrać do 1.5A. W moim zastosowaniu potrzebuję niezbyt dużego akumulatora 12V.
Jeśli chcemy zasilić mikrokontroler z tego samego akumulatora potrzebujemy obniżyć napięcie do 5V do czego doskonale nadaje się stabilizator napięcia.
Większy problem stanowi sterowanie siłownikiem, nie możemy podpiąć bezpośrednio pinu mikrokontrolera do siłownika. Potrzebujemy tutaj przekaźnika, załatwi to wprawdzie problem zasilenia siłownika 12V i przełączenia z pomocą 5V ale prąd przekaźnika jest zbyt duży dla pinu mikrokontrolera. Do włączenia przekaźnika potrzebujemy tranzystora połączonego z pinem i stabilizatorem napięcia co już trochę komplikuje nasz układ.
Ostatnio w moje ręce wpadł siłownik 12V 1000N, stosowany przeważnie do otwierania bramy. Dzisiaj stworzę coś bardziej praktycznego, rozwiązującego konkretny problem. Tym problemem jest kurnik i drzwiczki, które trzeba otwierać każdego ranka żeby kury wyszły się popaść. Gdy kury wieczorem pójdą spać trzeba te drzwiczki zamknąć.
Po co czekać do wieczora aż kury pójdą spać skoro może się to odbywać automatycznie według określonej konfiguracji. Stworzymy sobie dzisiaj ultra prostą wersję. Za pomocą siłownika będziemy co jakiś czas otwierać i zamykać drzwiczki.
Akumulator żelowy XTREME 12V 17Ah (82-212)
Jak zwykle potrzebujemy jakiegoś źródła zasilania. Do obsłużenia siłownika potrzebujemy trochę większego prądu niż do tej pory, jednak w naszym przypadku gdzie siłownik będzie pracował dwa razy niecałą minutę nie potrzebujemy jakoś specjalnie dużego akumulatora. Taki 1.2Ah na potrzeby nauki tutaj wystarczy.
Do zasilania układu wybrałem akumulator aż 17Ah jest to duży zapas, później będzie można podpiąć jeszcze kilka rzeczy. Głównym wyznacznikiem takiego wyboru jest to że akurat taki miałem pod ręką, możliwe że później będę chciał dodać jakieś ciekawe funkcjonalności.

Stabilizator napięcia L7805CV
Dobrym sposobem na obniżenie napięcia z akumulatora 12V do napięcia z którym pracuje większość mikrokontrolerów jest zastosowanie stabilizatora napięcia. L7805CV. Jest to bardzo popularny stabilizator za pomocą którego możemy obniżyć napięcie do 5V.
Napięcie wejściowe L7805CV musi mieścić się w przedziale 7 – 35V. Nasz akumulator 12V doskonale się tutaj wpasowuje aczkolwiek ten stabilizator nada się też do innych projektów gdzie wykorzystamy zasilanie baterią 9V lub akumulatorem 24V.
Maksymalny prąd wyjściowy może być do 1.5A z czym przy prądzie około 1A i wyżej trzeba już zainstalować dodatkowe chłodzenie w postaci radiatora.
W naszym przypadku nie powinien się nawet nagrzać ponieważ będziemy potrzebować prądu w okolicach 100mA przy włączonym przekaźniku.

Podłączenie stabilizatora napięcia L7805CV
W tym stabilizatorze patrząc od przodu (czyli na napisy tak jak na obrazku powyżej) podpinamy:
- INPUT – plus z akumulatora (12V)
- GROUND – minus z akumulatora
- OUTPUT – tutaj będziemy mieli nasz plus 5V, z tego wyjścia będziemy zasilać nasz mikrokontroler i przekaźniki.

Tranzystor CTBC547B (NPN)
Do sterowania przekaźnikami będziemy potrzebować tranzystorów. Najlepiej takich typu NPN, w takim tranzystorze ustawiamy stan wysoki na pinie mikrokontrolera aby prąd popłynął. Prąd maksymalny tego tranzystora to 100mA, wydaje mi się że to wprost idealny tranzystor do tego projektu, choć może to trochę blisko prądu pracy przekaźnika.

W tym tranzystorze, jeśli patrzysz na napis tak jak na powyższym obrazku to podłączamy:
- Kolektor – wyjście z cewki przekaźnika
- Baza – przez rezystor z pinu naszego mikrokontrolera
- Emiter – GND czyli minus

Przekaźnik NT73-2C-S12
Przekaźnik to urządzenie, bez którego raczej trudno byłoby obsłużyć siłownik za pomocą małego mikrokontrolera. W tym przypadku mamy 5 wyjść. dwa są połączone za pomocą cewki. Jeśli dostarczymy napięcie na cewce przełącznik przeskakuje z NC do NO.


Gdy napięcie do cewki nie jest podłączone to obwód jest zamknięty pomiędzy COM i NC. Jeśli damy napięcie na cewkę to wtedy styki się przełączą i obwód się zamknie pomiędzy COM a NO.
W ten sposób podpinając np minus z jednej strony cewki a z drugiej pin naszego kontrolera możemy uruchomić nasz siłownik. Do mojego projektu będziemy potrzebować dwóch takich przekaźników. Za pomocą pierwszego przekaźnika uruchomimy wysunięcie siłownika zaś za pomocą drugiego schowanie. Czyli jednym przekaźnikiem otwieramy drzwi zaś drugim zamykamy.
Uwaga na zbyt duży prąd!!!
Cewka w tym przekaźniku jest zasilana napięciem 5v, jest to napięcie z którym pracuje mikrokontroler więc pod tym względem wszystko fajnie. Jednak musimy pamiętać o poborze prądu kiedy cewka jest zasilana. To bardzo ważna sprawa ponieważ taki przekaźnik potrafi pobierać nawet 60mA. Górna granica co możemy wyciągnąć z pinu kontrolera to 40mA więc musimy wykorzystać tranzystor do sterowania tym przełącznikiem.

Siłownik elektryczny Super Power Jack Mini 1000N 5,4mm/s 12V – wysuw 25cm
Jest to jeden z tańszych siłowników (choć i tak kosztuje 169 zł na ten moment). Co ciekawe przeglądają opinie trafiłem na jedną o dokładnie takim samym zastosowaniu jak moje czyli automat do zamykania kurnika 😀

Siłownik ten jest stosunkowo mocny, teoria głosi że za jego pomocą można by podnieść ok 100kg. Jednak jego praca jest bardzo powolna. Biorąc pod uwagę prędkość i 25cm wysówu będzie się rozwijał ponad 46 sekund. Jednak w moim zastosowaniu w ogóle nie jest to problemem.
Aby się wpiąć w ten siłownik potrzebujemy wykorzystać dwa z czterech wyprowadzeń. Za pomocą pozostałych będzie można odczytać jego pozycję, ale na razie nie pójdziemy aż tak daleko. Siłownik jest zabezpieczony przed nadmiernych rozwinięciem czy zwinięciem.
Aby dostać się do podłączeń należy odkręcić tylną pokrywę. Znajdziemy tam między innymi kostkę do której możemy podłączyć cztery kable tak jak na moim obrazku poniżej. W tym przypadku do zasilania są kable czarny i czerwony. Jeśli czerwony podepniemy do plusa akumulatora 12V a czarny do minusa siłownik będzie się wysuwał. Jeśli zamienimy plus z minusem będzie się wsuwał.

Siłownikiem sterujemy ustawiając napięcie 12V i zmieniając bieguny. Oznacza to że jak już otworzymy drzwi, aby je zamknąć trzeba zamienić bieguny na ten sam czas. (pewnie jakieś 45 sekund jeśli potrzebujemy rozsunąć prawie cały.
Podłączenie jest stosunkowo proste ponieważ wejście COM obu przekaźników łączymy do wyjść zasilania siłownika. Wyjście NC łączymy do minusa a NO do plusa. Teraz jak aktywujemy jeden przekaźnik to siłownik będzie działał w jedną stronę a jak drugi to w drugą. Cewki z jeden strony łączymy do GND a z drugiej do wybranego pinu mikrokontrolera.

Składamy układ
Kod programu
Tym razem nie wysiliłem się zbytnio ze stosowaniem precyzyjnego zegara itd. Po prostu uruchamiam urządzenie o 17. Przechodzi test po 10 sekundach otwieram i zamykam i znowu otwieram i tak zostawiam do 20. O 20 zamykam czekam do 6 otwieram i czekam znowu do 20 żeby zamknąć i tak w pętli.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
int main(void) { //Sterowanie za pomocą pc5 i pc4 DDRC |= (1<<PC4); DDRC |= (1<<PC5); //czekam 10 sekund _delay_ms(10000); //otwieram przez 30 sekund PORTC |= (1<<PC5); PORTC &= ~(1<<PC4); _delay_ms(30000); //zatrzymuję na 10 sekund PORTC &= ~(1<<PC5); _delay_ms(10000); //od razu zamykam żeby zobaczyć czy dobrze jest PORTC |= (1<<PC4); PORTC &= ~(1<<PC5); _delay_ms(30000); PORTC &= ~(1<<PC4); _delay_ms(10000); //otwieram na 3 godziny żeby o 20 zamknąć PORTC |= (1<<PC5); PORTC &= ~(1<<PC4); _delay_ms(30000); //zatrzymuję na 3h = 10 800 PORTC &= ~(1<<PC5); for(int i = 0; i < 10800; i++){ _delay_ms(1000); } while (1) { //zamykam o 20 PORTC |= (1<<PC4); PORTC &= ~(1<<PC5); _delay_ms(30000); PORTC &= ~(1<<PC4); //czekam do 6 rano 10 h = 36000s for(int i = 0; i < 36000; i++){ _delay_ms(1000); } //otwieram rano PORTC |= (1<<PC5); PORTC &= ~(1<<PC4); _delay_ms(30000); PORTC &= ~(1<<PC5); //czekam do wieczora 14 h = 50 400s for(int i = 0; i < 50400; i++){ _delay_ms(1000); } } } |