niedziela, 28 października 2018

Zdalne sterowanie - podczerwień


Tym razem opiszę w jaki sposób zapewnić zdalne sterowanie układów elektronicznych bazujących na Arduino przy pomocy pilota na podczerwień.
Zabawę rozpoczynam od podłączenia do Arduino odbiornika IR - w moim przypadku jest to czujnik TSOP2236 działający na częstotliwości 36kHz przy napięciu zasilania od 4,5 do 5,5V czyli dokładnie takim jakie możemy odebrać z Arduino. Prawidłowe podłączenie czujnika przedstawiam poniżej:



Przykład 1.

Podłączam czujnik do Arduino (między pin 5V Arduino a nóżkę 5V czujnika należy wpiąć rezystor 100Ω ograniczający prąd) i kieruję na niego diodę nadawczą pilota (może to być np. pilot od telewizora). Efekty działania  układu w postaci kodów wciśniętych klawiszy (dla każdego pilota będą inne) mogę obserwować na monitorze portu szeregowego Arduino IDE.

Elementy układu:

  • 1 x płytka stykowa
  • 1 x Arduino Uno lub Pro Mini
  • 1 x odbiornik IR TSOP2236
  • 1 x opornik 100Ω
  • 5 x przewody połączeniowe
Sketch Arduino:




Przykład 2.
Zachowuję poprzednio wykorzystany układ połączeń i modyfikuję sketch - tak aby naciśnięcie dowolnego klawisza pilota zwracało zamiast jego kodu jego etykietę. W klauzuli swich - case uwzględniłem także kod, który sygnalizował zbyt długie przyciśnięcie któregokolwiek z klawiszy oraz (na wypadek zmiany pilota) generowanie niezamapowanych kodów klawiszy.

Elementy układu:

  • 1 x płytka stykowa
  • 1 x Arduino Uno lub Pro Mini
  • 1 x odbiornik IR TSOP2236
  • 1 x opornik 100Ω
  • 5 x przewody połączeniowe


Sketch Arduino:




Przykład 3.
Do poprzednio wykorzystywanego układu podłączam czerwoną diodę LED wraz z opornikiem 330 którą będę sterował pilotem na podczerwień. Przyciśnięcie klawisza "OK" na moim pilocie spowoduje zapalenie lub wyłączenie diody natomiast przyciski "Up" i "Down" będą odpowiedzialne za stopniowe rozjaśnianie i przygaszanie diody.

Elementy układu:

  • 1 x płytka stykowa
  • 1 x Arduino Uno lub Pro Mini
  • 1 x odbiornik IR TSOP2236
  • 1 x opornik 100Ω
  • 1 x czerwona dioda świecąca
  • 1 x opornik 330Ω
  • 7 x przewody połączeniowe
Sketch Arduino:



Pliki do pobrania: Tutaj.


Dowiedz się więcej:


sobota, 27 października 2018

Konewka

Opiszę tutaj budowę elektronicznej konewki - mojego pierwszego projektu, w którym
postanowiłem skorzystać z innej niż Arduino Uno R3 płytki z mikrokontrolerem ATmega.
I pierwszego, w którym zrezygnowałem z płytki stykowej i zacząłem lutować.

Układ korzystając z podłączonego czujnika sprawdza poziom wilgotności w doniczce i jeśli jest on niewystarczający uruchamia na trzy sekundę pompę, która podlewa roślinkę. Jeśli roślinka nie wymaga podlewania konewka przy pomocy sygnalizacji dźwiękowej informuje o przeprowadzonej inspekcji wilgotności i zasypia na kolejne 24 godziny. Dodatkowo układ wyposażony został w przycisk resetu czasu podlewania, który pozwala na zmianę pory uruchamiania cyklu nawadniania i ręczne uruchomienie pompy.




Dlaczego nie Uno? Powody są dwa i oba oczywiste:

  • duże rozmiary płytki
  • wysoka cena Arduino Uno R3 (nawet jeśli tylko klona) 

Po rozpatrzeniu możliwych wariantów zdecydowałem zbudować mój projekt z wykorzystaniem Arduino Pro Mini, które jest względnie tanie, małe i zgodne z Arduino Uno R3.
Do załadowania program do Arduino Pro Mini wykorzystałem konwerter PL2303TA z wyjściem USB - UART/RS232. W tym celu podłączyłem wyprowadzenia konwertera do złącza programowania Arduino Pro Mini:

  • czerwone - VCC;
  • czarne - GND;
  • zielone - RXI;
  • białe - TX0.
Aby ładowanie programu mogło zakończyć się sukcesem, po skompilowaniu programu i wyświetleniu przez Arduino IDE komunikatu o rozpoczęciu wgrywania należy wcisnąć na chwilę przycisk Reset na płytce Arduino Pro Mini.


Elementy układu:

  • 1 x Arduino Pro Mini 5V/16MHz
  • 1 x płytka prototypowa 5 x 7
  • 1 x mini pompa do wody 3V/5V DC, 3W
  • 1 x czujnik wilgotności gleby FC-28
  • 1 x stabilizator napięcia LM7805CV
  • 2 x kondensatory ceramiczne 100nF
  • 1 x tranzystor MOSFET IRL540N
  • 1 x opornik 10kΩ
  • 1 x tact switch
  • 1 x buzzer bez generatora
  • 2 x złącze ARK dwupinowe
  • 1 z złącze szpilkowe dwupinowe


Realizacja:

Stabilizacja napięcia. Podstawowym problemem w przypadku projektu wykorzystującego pompę (a konkretnie silnik, który ją napędza), jest zabezpieczenie Arduino przed skutkami wysokiego poboru prądu i wahaniami napięcia wynikającego z załączania i wyłączania silnika. Co prawda Arduino posiada wbudowany stabilizator napięcia jednak jego możliwości są ograniczone i bezpieczniej jest wykorzystać zewnętrzny stabilizator. Ja zdecydowałem się na układ LM7805CV, który zapewnia stabilizację napięcia dostarczanego do Arduino na poziomie 5V przy maksymalnym prądzie 1,5A. Napięcie zasilania powinno zawierać się w zakresie od 7 do 25V. Dla zabezpieczenia przed ewentualnymi zakłóceniami, między masą a złączami Vin oraz Vout stabilizatora umieszcza się kondensatory ceramiczne 100nF.

Sterowanie pompą. Pompa wykorzystywana w projekcie wymaga większego prądu niż ten, który jest w stanie dostarczyć Arduino (czyli maksymalnie 40mA na pin). Podłączona zostanie więc bezpośrednio do zewnętrznego źródła zasilania a sterowanie jego załączaniem i wyłączaniem będzie realizowane przez Arduino z MOSFETEM IRL540N w roli przełącznika. W tym celu Bramkę tranzystora łączę z Arduino (do niej kierowany będzie sygnał sterujący z pinu 8 mikrokontrolera), Dren łączę z masą pompy a Źródło z masą mikrokontrolera. Między Bramkę a Źródło wpinam rezystor sprzęgający, co zapewni występowanie na Bramce stanu niskiego zawsze, kiedy Arduino nie wysyła na nią stanu wysokiego. Masy źródła zasilania pompy i Arduino muszą być ze sobą połączone. Kiedy Arduino poda stan wysoki na Bramkę, tranzystor zaczyna przewodzić prąd zasilający pompę (jej plus podłączony jest bezpośrednio pod źródło zasilania).
Podłączenie czujnika wilgotności. Czujnik wilgotności gleby FC-28 posiada cztery złącza:

  • GND łączę z masą układu;
  • VCC podłączam do pinu 11 Arduino;
  • złącze analogowe A0 podłączam do pinu A0 mikrokontrolera;
  • wyjście cyfrowe D0 pozostawiam niepodłączone (sterowanie wilgotnością chcę regulować z mikrokontrolera w zależności od odczytanego poziomu sygnału analogowego a nie cyfrowo poprzez regulację potencjometru wbudowanego w czujnik).

Komentarza wymaga podłączenie zasilania czujnika (VCC) do pinu 11 zamiast do pinu 5V Arduino. Dzięki takiemu podejściu napięcie na czujniku nie jest utrzymywane przez cały czas a podawane tylko zgodnie z cyklem monitorowania wilgotności (który został ustawiony na 24 godziny). Nie tylko pozwala to na zaoszczędzenie energii ale również opóźnia proces starzenia się czujnika.

Wyposażenie opcjonalne. Dla zapewnienia większej kontroli nad systemem nawadniającym dodałem jeszcze tact switch (podłączony do pinu 10 Arduino), którego wciśnięcie powoduje reset zegara cyklu monitorowania i uruchomienie pierwszego podlewania. Długość cyklu ustawiona na 24 godziny i czasu podlewania ustawionego na 3 sekundy nie ulega zmianie - te dwie zmienne wydają mi się optymalnie dobrane do potrzeb życiowych roślinki. Po wypełnieniu się cyklu Arduino podaje napięcie na czujnik, dokonuje pomiaru wilgotności i w razie potrzeby uruchamia pompę podlewającą roślinkę. Jeżeli wilgotność jest wystarczająco wysoka i nie ma potrzeby podlewania uruchamiany jest buzzer (podłączony do portu 9), który sygnalizuje że nawadnianie tym razem jest zbędne. Buzzer wykorzystany jest także do sygnalizacji skorzystania z tact switcha.

Całość zlutowałem na płytce prototypowej 5x7cm zamontowanej w estetycznym półprzezroczystym pojemniku (pierwotnie przeznaczonym do celów spożywczych). Do płytki przylutowałem jeszcze dwa dwupinowe złącza ARK (jedno do podłączenia pompy a drugie do połączenia płytki z gniazdem do obudowy) oraz złącze szpilkowe do połączenia z zamontowanym na obudowie tact switchem. Arduino Pro Mini zostało podłączone z płytką za pośrednictwem wtyków kołkowych (to one a nie mikrokontroler są do niej przylutowane) co umożliwia w razie potrzeby łatwy demontaż.

Sketch Arduino:



Pliki do pobrania: Tutaj.