Arduino Remote Control

Remote control (pilot zdalnego sterowania) – powszechne narzędzie, bardzo dobrze wszystkim znane i powszechnie przez wielu z nas używane np do obsługi telewizora radia itd…
Skoro wszyscy już wiemy o jakiej „zabawce” mowa dalsze słowa wstępu są już nie potrzebne i od razu możemy przejść do przykładu pierwszego.

Przykład I

Co nam będzie potrzebne?
> Arduino UNO (lub inny mikrokontroler)
> płytka stykowa i garść kabelków
> pilot
> odbiornik podczerwieni ( w moim przypadku częstotliwość pracy wynosi 36 kHz)

 

Sposób podpięcia odbiornika podczerwieni (Patrząc od lewej strony):
Pierwszy pin – GND
Drugi pin – +5V
Trzeci pin – sygnał pin 11 arduino

#include <IRremote.h>

IRrecv irrecv(11); 
decode_results results;

void setup()
{
	Serial.begin(9600);
	irrecv.enableIRIn(); 
}

void loop() 
{
	if (irrecv.decode(&results)) 
	{
		Serial.println(results.value, HEX);
		irrecv.resume(); 
	}

	delay(100);
}

Analiza kodu

  • #include <IRremote.h> – Biblioteka do obsługi pilota do pobranie tutaj:
    https://github.com/z3t0/Arduino-IRremote
  • decode_results results; – obiekt biblioteki dekodującej sygnał
  • IRrecv irrecv(11);  tworzymy nowy obiekt a w konstruktorze ustawiamy nr naszego pinu (pin 11)
  • irrecv.enableIRIn(); – rozpoczynany nasłuchiwanie w ceku wyłapania sygnału
  • irrecv.decode(&results) – funkcja zwraca 0 (false) jeśli nie został wykryty żaden sygnał 1 (true) jeśli jakiś sygnał został wyłapany.
  • Serial.println(results.value, HEX); – wyświetlamy na ekranie serial monitora:
    • results.value – wyłapaną wartość pilota
    • HEX – ustawiamy aby wyświetlić wyłapany sygnał w formie kodu szesnastkowego.
  • irrecv.resume();  – funkcja wznawiająca wykrywanie nowych sygnałów, bezwzględnie powinna być umieszczona po irrecv.decode()
  • delay(100); – dobrze jest także dodać na końcu linii krótką przerwę dla programu

    Efekt działania programu:

W czasie naciśnięcia przycisku na ekranie serial monitora powinien pojawić się kod przycisku. Kod przycisku należy zapisać, zostanie on wykorzystany później (kod FFFFFFFFF jest błędnym kodem, wynikającym np z byt szybkiego przełączania przyciskami).

Przykład II

#include <IRremote.h>

IRrecv irrecv(11); 
decode_results results;

int led[4] = {2,4,6,8};
bool led_status[4];

void setup()
{
	for (int i = 0; i < 4; i++)
	{
		pinMode(led[i], OUTPUT);
		led_status[i] = false;
		digitalWrite(led[i], led_status[i]);

	}

	irrecv.enableIRIn(); 
}

void loop() 
{
	if (irrecv.decode(&results)) 
	{
		switch (results.value)
		{
		case 0xFF609F: // up led 0
		{
			led_status[0] = !led_status[0];
			break;
		}
		case 0xFF22DD: // down led 1
		{
			led_status[1] = !led_status[1];
			break;
		}
		case 0xFFE21D: // left led 2
		{
			led_status[2] = !led_status[2];
			break;
		}
		case 0xFF02FD: // right led 3
		{	
			led_status[3] = !led_status[3];
			break;
		}
		case 0xFFE01F: // endter 
		{
			for (int i = 0; i < 4; i++)
			{
				led_status[i] = false;
			}
			break;
		}

		}

		irrecv.resume(); 
	}

	for (int i = 0; i < 4; i++)
	{
		digitalWrite(led[i], led_status[i]);
	}

	delay(100);
}

 

Sposób odłączenia:

Do poprzedniego zestawu dokładamy 4 diody, 4 rezystory 220Ω. Diody podpinamy do pinów 2 4 6 i 8 oraz poprzez rezystor łączymy do masy.
int led[4] = {2,4,6,8}; – tablica z numerami pinów każdej diody
bool led_status[4]; – tablica ze stanami każdej diody

for (int i = 0; i < 4; i++)
	{
		pinMode(led[i], OUTPUT);
		led_status[i] = false;
		digitalWrite(led[i], led_status[i]);

	}

Wszystkie diody ustawiamy jako wyjście oraz jako stan zero czyli LOW.

if (irrecv.decode(&results)) 
	{
		switch (results.value)
		{
		case 0xFF609F: // up led 0
		{
			led_status[0] = !led_status[0];
			break;
		}
		case 0xFF22DD: // down led 1
		{
			led_status[1] = !led_status[1];
			break;
		}
		case 0xFFE21D: // left led 2
		{
			led_status[2] = !led_status[2];
			break;
		}
		case 0xFF02FD: // right led 3
		{	
			led_status[3] = !led_status[3];
			break;
		}
		case 0xFFE01F: // endter 
		{
			for (int i = 0; i < 4; i++)
			{
				led_status[i] = false;
			}
			break;
		}

		}

		irrecv.resume(); 
	}

Sprawdzamy czy został wyłapany jakiś sygnał. Jeśli został odebrany jakiś sygnał w warunku switch i case sprawdzamy jego wartość oraz wykonujemy konkretną operację – zmiana stanu diody. Każdy z 4 przycisków zapala lub gasi jedną diodę, przycisk piąty gasi wszystkie diody.

Uwaga adres diody podajemy z dopiskiem „0x” na początku np dla kodu FF111F do warunku wpisujemy kod 0xFF111F.

for (int i = 0; i < 4; i++)
	{
		digitalWrite(led[i], led_status[i]);
	}

Zmiany stanu diody zachodzą na tablicy stanów, na koniec musimy więc zaktualizować nasze diody.

Dzięki bibliotece IRremote możliwe jest także wysyłanie sygnałów jeśli podepniemy nadajnik IR. Na dzień dzisiejszy nie interesowałem się tą metodą ale jeśli pojawi się takie zainteresowanie lub kiedyś uda mi się taką zdobyć postaram się o tym napisać jeszcze kilka słów.

W razie pytań zapraszam do komentarzy lub na naszą grupę 🙂 Pozdrawiam LearnDuino Team.

Maciej Szostak

Create Account



Log In Your Account