Odbiornik podczerwieni TSOP2238

Podczerwień to jeden z najpopularniejszych sposobów na łączność bezprzewodową. Często używa się jej do sterowania robotami. Jedną z zalet podczerwieni jest jej prostota: wystarczy kilka elementów, (prawie) dowolny pilot (np. od telewizora) – i gotowe.

IR_00

Podczerwień

Sterowanie podczerwienią polega na przesyłaniu danych od nadajnika do odbiornika za pośrednictwem fal o długości pomiędzy światłem widzialnym a radiowymi (zob. wikipedia). Wciśnięcie klawisza na pilocie (nadajniku) powoduje wysłanie serii impulsów do odbiornika charakterystycznych dla danego przycisku i schematu kodowania, który używa pilot.

Niestety w tym paśmie znajduje się wiele zakłóceń. Dlatego sygnały IR są modulowane, najczęściej nośną 38kHz. Częstotliwość ta została wybrana dlatego, że jest dość unikalna a więc łatwiejsza do wyłowienia  przez odbiornik.

Na czym polega modulacja?

IR_05Komunikacja to seria '0′ i '1′ transmitowanych zgodnie zgodnie z zasadami ustalonymi przez protokół. Na niższym poziomie, każde zero i jedynka to fragment (cykl) o odpowiedniej długości – np. 1 ms dla zera i 2 ms dla 1. Każdy fragment składa się z części, gdzie sygnał jest wysoki i niski. Zamiast jednak transmitować stan wysoki jako sygnał ciągły – zamieniany jest na taki o częstotliwości 38kHz.

Sygnał z diody IR na analizatorze logicznym
Sygnał z diody IR na analizatorze logicznym (konsola szeregowa z wydrukiem z programu załączonego poniżej)

Ciekawostka: jeżeli skierujecie pilota podczerwonego na aparat telefonu komórkowego – zobaczycie rozbłyski strumienia IR na ekranie. Niektóre telefony jak np. iPhone 6 mają filtr podczerwony – wtedy błysków nie zobaczycie. Skierujcie pilota zamiast na tylny – na przedni aparat iPhone 6. Tylny aparat nie ma filtru IR (podejrzane: tutaj).

Co potrzebuję?

Hardware

Do sterowania robotem za pomocą podczerwieni potrzebujecie:

  • Pilota na podczerwień, np. taki,
  • Odbiornika podczerwieni, np. TSOP2238,
  • Kondensator elektrolityczny, np. 4.7uF.

Nie pomijajcie kondensatora. Wiele przykładów w Sieci go nie zawiera. Zastosowanie kondensatora skutkuje znacznie mniejszą ilością odbieranych zakłóceń.

Upewnijcie się co do wyprowadzeń Waszego odbiornika podczerwieni: w szczególności położenia masy i zasilania.

Odwrotne podłączenie zasilania może doprowadzić do spalenia odbiornika. Upewnijcie się również, czy Wasz odbiornik pracuje na 3,3 czy 5v!

Mój TSOP2238:

TSOP 2238
TSOP 2238

Podłączenie jest proste:

ir_2Tutaj do komunikacji wykorzystałem pin D2 Arduino.

Software

Dla Arduino używam zazwyczaj biblioteki napisanej przez cyborg5. Pobierzcie ją ze strony github i rozpakujcie.

Dla linuksa do pobrania biblioteki możecie użyć git’a. Jeżeli go jeszcze nie macie:

Następnie pobierzcie archiwum:

Git działa też oczywiście na Windows – wystarczy użyć linii komend git’a (git bash).

Katalog „IRlib” trzeba skopiować do miejsca wskazanego w preferencjach Arduino IDE:

IR_01Po restarcie nowa biblioteka powinna pojawić się w menu „Szkic/Dodaj bibliotekę”:

IR_03

Kody klawiszy

Do napisania programu brakuje nam jeszcze jednego szczegółu: kodów klawiszy. Każde przyciśnięcie klawisza na pilocie zostanie przetransportowane przez kanał podczerwieni do odbiornika. Biblioteka zinterpretuje odebrane sygnały zgodnie z kodowaniem charakterystycznym dla danego pilota i dostarczy nam wciśnięty klawisz jako pewną liczbę. Liczba ta będzie inna dla każdego klawisza i rodzaju pilota. Żeby napisać kompletny program potrzebujecie znać te kody.

Otwórzcie nowy szkic, dodajcie do niego bibliotekę IRLib. W ten sposób na górze programu pojawią się nagłówki:

Uwaga: bibliotekę musicie dodać przez „Szkic/Dodaj bibliotekę”. Samo wkopiowanie nagłówków do kodu nic nie da!

Teraz zdefiniujemy pin, do którego podłączony jest wyjście OUT odbiornika podczerwieni, tutaj D2:

Stwórzmy obiekty do obsługi biblioteki IR i zainicjujmy je w funkcji setup() (razem z portem szeregowym):

Ten krótki program wyświetli na konsoli szeregowej kody klawiszy:

Razem:

Teraz wystarczy załadować kod na Arduino i uruchomić monitor portu szeregowego (Shift+CTRL+M). Wciskanie klawiszy wygeneruje na ekranie ich kody:
IR_04
Interesują nas te kody, które są różne od „FFFF”. Sprawdźcie, który klawisz generuje jaki kod.

Sterowanie robotem

Do sterowania robotem pozostało uzupełnić funkcję loop():


„0x” to przedrostek oznaczający liczbę szesnastkową!

Źródła

9 myśli w temacie “Odbiornik podczerwieni TSOP2238”

    1. Witaj,
      W tym projekcie używam TSOP 2238; trochę zależy też od samego samego pilota – na jakiej częstotliwości pracuje. Jeżeli używasz Arduino upewnij się, że wybrany przez Ciebie czujnik pracuje na 5v. Wybór płytka- czujnik zależy od projektu – czasem bardziej opłaca się użyć gotowej płytki – chociaż ja zazwyczaj wolę eksperymentować z różnymi kondensatorami i rezystorami.

    1. SoftwareSerial – tu jej chyba nie użyłem:) To biblioteka, która pozwala na stworzenie dodatkowego portu szeregowego – oprócz tego na pinach D0/D1. Różnica polega na tym, że na pinach D0/D1 jest port sprzętowy – a SoftwareSerial pozwala na stworzenie emulowanego portu na dowolnych pinach. W ten sposób można mieć np. 2 porty szeregowe.

Dodaj komentarz