Siłownik 12V i sterowanie mikrokontrolerem Atmega88PA AVR

SIłownik potrzebuje zbyt dużego prądu nie mówiąc już od tym że za pomocą mikrokontrolera nie jesteśmy w stanie dostarczyć napięcia 12V. 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.

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 zmienia się konfiguracja pozostałych wyjść.

Przekaźnik NT73-2C-S12
Przekaźnik NT73-2C-S12 schemat podłączenia

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.

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 elektryczny Super Power Jack Mini 1000N

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łownik elektryczny Super Power Jack Mini jak podłączyć

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.

Siłownik schemat podłączenia

Redukcja napięcia

Nie będziemy dawać dwóch źródeł napięcia mając akumulator 12V. Możemy tutaj wykorzystać stabilizator napięcia lub rezystory. Ostatnio omówiliśmy dzielnik napięcia więc spróbujemy go wykorzystać i w tym momencie. Trzeba dobrać odpowiednie rezystory. Wiemy że mamy z 12V zrobić 5V czyli uzyskać 7V spadku. Przypomnijmy sobie wzór z artykułu Pomiar napięcia i przetwornik ADC

Napięcie wyjściowe = (R2/(R1+R2)) * Napięcie wejściowe

Jeśli damy R1 dwa razy większy to otrzymamy x = (200/(400+200)) * 12V = 200/600 *12 = 1/3 *12 =4V.

Przy założeniu że mikrokontroler pracuje pod napięciem w przedziale 3,3V – 5V to powinien dobrze działać. Jeśli chcesz dokładniej dobić do 5V zmniejsz trochę R1 np z 400K do 280K. Dając Wartości najbliższe proporcji 200 do 280 powinno się udać najbliższy wynik temu co potrzebujemy.

(200/(280+200)) * 12 = (200/480) * 12 = 0,41666.. *12V = 5V

Dzielnik napięcia z 12V na 5V

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.

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);
		}
    }
}