Kolejnym moim testem jest podłączenie odbiornika podczerwieni.
Zakupiłem odbiornik IR typu TSOP4838.
Nie mam dokładnej dokumentacji, ale z tego co wyczytałem pracuje na częstotliwości 38kHz, ma duży zasięg (niby do 35m), odbiór sygnału pod kątem do 45° i co najważniejsze dobrze pracuje na 3.3V. Można go dostać dość łatwo, mnie kosztował ~3 zł.
Źródło: vishay.com |
Nie mam dokładnej dokumentacji, ale z tego co wyczytałem pracuje na częstotliwości 38kHz, ma duży zasięg (niby do 35m), odbiór sygnału pod kątem do 45° i co najważniejsze dobrze pracuje na 3.3V. Można go dostać dość łatwo, mnie kosztował ~3 zł.
UPDATE: dokumentacja TUTAJ
OSTRZEŻENIE !
Przy podłączaniu wszelkich kabelków należy zachować ostrożność, gdyż może zakończyć się to uszkodzeniem sprzętu lub uszczerbkiem na zdrowiu. Robisz to na własną odpowiedzialność.
UKŁAD
Podłączenie jest banalne, pierwszy pin do GPIO18 (6 z prawej), drugi pin to GND, trzeci pin to 3.3V.
Instalujemy:
apt-get install lircŁadujemy moduł:
modprobe lirc_rpi
w syslogu powinno pojawić się
Dec 31 16:29:04 raspberrypi kernel: [11871.816457] lirc_rpi: auto-detected active low receiver on GPIO pin 18
powinno pojawić się też urzadzenie
# ls -la /dev/lirc0 crw-rw---T 1 root video 250, 0 Dec 31 16:29 /dev/lirc0
następnie
mode2 -d /dev/lirc0
bierzemy pilota (dowolnego - może być od telewizora) i każde wciśnięcie klawisza powinno generować komunikaty pulse space z numerkami...
Coś w tym stylu:
Coś w tym stylu:
space 17826 pulse 129 space 803 pulse 174 space 790 pulse 100 space 18114 pulse 183 space 806 pulse 205 space 775 pulse 157 space 18484 pulse 222 space 1516
Są to "kody", które odpowiadają wciśnięciu poszczególnych klawiszy. Zamysł jest więc taki, żeby wychwycić taki kod i po jego wystąpieniu wywołać konkretne zdarzenie.
Skorzystamy więc z demona lirc.
LIRC to bardzo ciekawy projekt. Wiele mówiący skrót Linux Infrared remote control. Polecam poczytanie dokumentacji i możliwości.
Projekt oferuje masę gotowych konfigów - lista supportowanych pilotów:
http://lirc.sourceforge.net/remotes/
Ja gdzieś wygrzebałem bardzo stary pilot, więc wygeneruję sobie plik konfiguracyjny sam.
Najpierw przyda się znajomość dostępnych nazw poszczególnych klawiszy.
np dla klawisza 1 w moim pilocie raw_code wygląda tak:
Kopiujemy wygenerowany plik do /etc/lirc. Następnie musimy przygotować kolejny plik:
Możemy uruchomić irexec jako demon poprzez:
i aplikacja będzie działać na stałe w tle.
Dokumentacja z parametrami TUTAJ
Warto zwrócić uwagę na parametr repeat - czyli co się stanie jeśli drugi raz wciśniemy dany przycisk. Nieraz nie chcemy przecież, żeby dana aplikacja odpaliła się raz jeszcze, ale np chcemy żeby okno zrobiło się aktywne (np. wyskoczyło okno wcześniej zminimalizowane). Ogólnie jest to dość potężny projekt, więc da się z nim dużo zrobić.
No to teraz ogranicza nas już tylko wyobraźnia. Możemy podpiąć dowolną aplikację pod dowolny przycisk w pilocie i sterować różnymi zdarzeniami (np. uruchomienie XBMC, przeglądarki, wyłączenie systemu, zapalenie diody itp).
Jeszcze tylko dodam, że istnieje projekt umożliwiający współpracę z python-em. Więcej szczegółów http://pylirc.mccabe.nu/
Jest nawet w repozytorium Raspbian-a, więc można go zainstalować:
Skorzystamy więc z demona lirc.
LIRC to bardzo ciekawy projekt. Wiele mówiący skrót Linux Infrared remote control. Polecam poczytanie dokumentacji i możliwości.
Projekt oferuje masę gotowych konfigów - lista supportowanych pilotów:
http://lirc.sourceforge.net/remotes/
Ja gdzieś wygrzebałem bardzo stary pilot, więc wygeneruję sobie plik konfiguracyjny sam.
Najpierw przyda się znajomość dostępnych nazw poszczególnych klawiszy.
irrecord --list-namespacenastępnie odpalamy (tu zmiana (lircd.conf) dzięki komentarzom - dzięki:) )
irrecord -d /dev/lirc0 ~/lircd.confczyli generator konfiguracji. Każe nam powciskać różne klawisze, po czym mamy gotowy plik z kodami raw dla każdego klawisza pilota.
np dla klawisza 1 w moim pilocie raw_code wygląda tak:
name KEY_1 9096 4465 621 515 619 520 601 512 625 519 585 546 600 517 620 517 616 521 598 516 625 1649 600 1662 610 1632 623 1653 599 1655 616 1634 631 1646 597 517 625 512 595 1659 620 517 617 521 597 520 627 510 616 522 594 1655 595 1658 619 520 616 1633 632 1644 599 1654 618 1636 620 1654 600
Kopiujemy wygenerowany plik do /etc/lirc. Następnie musimy przygotować kolejny plik:
# cat /etc/lirc/hardware.conf # Arguments which will be used when launching lircd LIRCD_ARGS="--uinput" #Don't start lircmd even if there seems to be a good config file #START_LIRCMD=false #Don't start irexec, even if a good config file seems to exist. #START_IREXEC=false #Try to load appropriate kernel modules LOAD_MODULES=true # Run "lircd --driver=help" for a list of supported drivers. DRIVER="default" # usually /dev/lirc0 is the correct setting for systems using udev DEVICE="/dev/lirc0" MODULES="lirc_rpi" # Default configuration files for your hardware if any LIRCD_CONF="" LIRCMD_CONF=""
i możemy wystartować demon
/etc/init.d/lirc start
Weryfikujemy działanie przez komendę:
irw
przy wciśnięciu każdego zdefiniowanego klawisza powinna pojawić się jego nazwa:
0000000000000001 00 KEY_1 pilotMOJ 0000000000000002 00 KEY_2 pilotMOJ 0000000000000003 00 KEY_3 pilotMOJ 000000000000000b 00 KEY_OK pilotMOJ
Tak więc teraz możemy zmapować przycisk do dowolnej komendy. Tworzymy w katalogu domowym plik .lircrc i umieszczamy w nim definicję:
# cat ~/.lircrc begin prog = irexec button = KEY_1 config = echo "Klawisz '1' wcisniety!" end
uruchamiamy
irexec
i wciskamy na pilocie przycisk 1, powinno się pojawić
Klawisz '1' wcisniety!Inna opcja. Tworzymy skrypt, upewniamy się, że jest uruchamialny lub korzystamy z już utworzonego. Ja np po wciśnięciu OK chce mieć wyświetloną temperaturę na dworzu. Korzystam ze skryptu opisanego TUTAJ i dodaję:
begin prog = irexec button = KEY_OK config = echo "Temperatura w tym momencie:"; /projekty/temperatura/getTemp.sh end
Możemy uruchomić irexec jako demon poprzez:
irexec -d
i aplikacja będzie działać na stałe w tle.
Dokumentacja z parametrami TUTAJ
Warto zwrócić uwagę na parametr repeat - czyli co się stanie jeśli drugi raz wciśniemy dany przycisk. Nieraz nie chcemy przecież, żeby dana aplikacja odpaliła się raz jeszcze, ale np chcemy żeby okno zrobiło się aktywne (np. wyskoczyło okno wcześniej zminimalizowane). Ogólnie jest to dość potężny projekt, więc da się z nim dużo zrobić.
No to teraz ogranicza nas już tylko wyobraźnia. Możemy podpiąć dowolną aplikację pod dowolny przycisk w pilocie i sterować różnymi zdarzeniami (np. uruchomienie XBMC, przeglądarki, wyłączenie systemu, zapalenie diody itp).
Jeszcze tylko dodam, że istnieje projekt umożliwiający współpracę z python-em. Więcej szczegółów http://pylirc.mccabe.nu/
Jest nawet w repozytorium Raspbian-a, więc można go zainstalować:
apt-get install python-pylirc
Inne zastosowanie.
Np jeśli mamy problemy z libcec, a chcemy korzystać z pilota w XBMC (wspomniane TUTAJ), możemy podpiąć odbiornik i korzystać z dobrodziejstw pilota (jako, że sposób podłączenia jest banalny możemy to zrobić nawet bez płytki stykowej). Oczywiście nie musimy ograniczać się do XBMC - możemy wykorzystać pilota do innych aplikacji. Masa aplikacji multimedialnych ma gotowe konfigi dla pilotów.
Poza tym możemy podpiąć się do wielu domowych urządzeń (np. lampka nocna), czy całe systemy "home automation" i sterować nimi za pomocą zwykłego pilota. Tu prawie nie ma ograniczeń (aczkolwiek zazwyczaj przydaje się już nieco bardziej zaawansowana wiedza z zakresu elektroniki).
Hej,
OdpowiedzUsuńA orientujesz się jaki element mógłby posłużyć jako nadajnik podczerwieni? Chciałbym z poziomu R-Pi sterować wieżą (Użyć R-Pi jako pilota)
Pozdrawiam
Thot
Cześć!
UsuńMożna kupić diody nadawcze IR za mniej niż 1zł. Jest też możliwość zakupienia nadajnika IR działającego przez USB. Ja sobie niedawno zamówiłem diodę, jednakże nie miałem czasu jeszcze potestować tego rozwiązania. Mam nadzieję, że wkrótce się uda ....
więc teoretycznie przy wykorzystaniu lirc (irsend) powinno dać się wysłać dany sygnał...
pozdrawiam
Witam!
OdpowiedzUsuńMiał może kolega problem z double press? Podczas korzystania z komendy irc, aby wywołać zdarzenie przyciśnięcia muszę dwa razy nacisnąć jakiś przycisk. Próbowałem różnych rozwiązań z zagranicznych for ale niestety żadne nie działało.
Pozdrawiam
Witam!
UsuńPrzepraszam za czas odpowiedzi ale ostatnio mam sporo na głowie.
Ja nie miałem takiego problemu. Wszystko zadziałało ok.
Czy za każdym razem trzeba wcisnąć guzik 2 razy? Czy nieraz działa za pierwszym razem?
Czy rozwiązanie ze strony projektu:
http://www.lirc.org/faq.html
"Most of the time I have to push a button twice for LIRC to recognize it. What's wrong?"
nie pomaga?
Ja w takiej sytuacji spróbowałbym może z innym pilotem albo
przyjrzał się raz jeszcze konfiguracji (co prawdopodobnie już zostało zrobione).
Pozdrawiam
Witam!
UsuńNic nie szkodzi :)
Tak za każdym razem należało wcisnąć 2 razy guzik. Nigdy nie działało za pierwszym razem.
Posiadam wielofunkcyjny pilot(VIVANCO UR 89) zawierający przyciski TV, VCR, DVD itp. Chciałem ustawić, aby za pomocą przycisku TV mógłbym sterować telewizorem, a przyciskiem VCR raspberry. Do konfiguracji wykorzystałem irrecord. Niby wszystko działało, ale trzeba było za każdym razem wciskać każdy zdefiniowany przycisk 2 razy.
Następnie na stronie projektu znalazłem plik konfiguracyjny mojego pilota, okazało się, że jedynie za pomocą przyciku TV można wykonać sterowanie. Przy każdym innym przycisku(VCR, DVD itp.) występował problem. Widocznie program koniguracyjny nie mógł do końca poradzić sobie z dekodowaniem sygnałów. W utworzonym pliku konfiguracyjnym brakowało pól bits, flags, one, zero itp. Mam nadzieję, że przyda się to osobom które miały podobny problem.
Pozdrawiam :)
Dzięki za podzielenie się tą wiedzą :)
Usuńpozdrawiam
Jest chyba literówka:
OdpowiedzUsuń"
następnie odpalamy
irrecord -d /dev/lirc0 ~/lirc.conf
"
Powinny być chyba lircd.conf
Przynajmniej u mnie :)
cześć
UsuńJa korzystam z pliku lirc.conf - pod taką nazwą wygenerowałem sobie konfig.
O ile się nie mylę nazwa pliku może być z resztą dowolna ;)
pozdrawiam
Tzn. chodzi mi o to, że robiłem wg. Twojego opisu (kopiuj, wklej), więc też wygenerowałem pod nazwą lirc.conf. Ale dopóki nie zmieniłem na lircd.conf to nie działało... Gdzieś pewnie można podać ścieżkę do pliku konfiguracyjnego, ale domyślna u mnie wydaje się być /etc/lirc/lircd.conf :)
UsuńDzięki za informację. Ja wygenerowałem pod nazwą lirc.conf i działało.
UsuńNo ale masz rację - moja wypowiedź nie jest w 100% jasna.
Dodam do posta Twoją uwagę (jeśli nie masz nic przeciwko).
A przy okazji na jakim systemie pracujesz?
pozdrawiam
Na malince Raspbian :)
UsuńA na PC mam Ubuntu :)
Oczywiście - nie mam nic przeciwko :)
Przepraszam, że nie odpisywałem, ale nie dostałem maila o odpowiedzi :(
Odradzam kupowanie IRDy na USB, ja kupiłem a dopiero później przeczytałem:
OdpowiedzUsuń"Is my USB IrDA dongle supported by LIRC?
No, it's technically not possible to use USB IrDA dongles (as specified by the Infrared Data Association) with LIRC. This does not apply to USB receivers in general."
http://www.lirc.org/faq.html
Dzięki za tą uwagę...
Usuńmój błąd że podałem tą informację bez sprawdzenia... (ja nie używałem irdy przez usb)
pozdrawiamm
W opisie jest mowa że odbiornik IR na 3,3V
OdpowiedzUsuńCzy można podłączyć odbiornik IR na 5V ?
Szczerze mówiąc ja (zaznaczam że nie jestem specem od elektroniki) bym odradził podłączenie odbiornika bezpośrednio do 5V, gdyż urządzenie nie jest dostosowane do obsługi więcej niż 3.3V (brak żadnego zabezpieczenia prądowego). Grozi to conajmniej uszkodzeniem portu (a może być gorzej)....
Usuńpozdrawiam
Fajna sprawa. Po dwóch dniach walki udało mi się zamapować pilota od DVD Philipsa.
OdpowiedzUsuńMam problem z wysłaniem klawisza BACKSPACE do xbmc.
Próbowałem zamapować KEY_BACKSPACE pod różne klawisze pilota, ale zawsze działał tak jak KEY_DOWN.
Czy macie jakieś sugestie co mogę jeszcze zrobić?
Pozdrawiam
Witam.
OdpowiedzUsuńMam taki mały problem, może byłbyś w stanie mi pomóc.
IR zamontowane, sterowniki załadowane, wszystko pomapowane razem z plikiem konfiguracyjnym, problem pojawia się gdy chce odpalić IRW lub IREXEC, tak jakbym w ogóle nie miał tych narzędzi. LIRC zainstalowany poprzez apt-get.
Poradziłem sobie. Problemem był błąd jak już tutaj ktoś wyżej wspomniał w nazwie pliku. Zamiast lirc.conf powinien mieć lircd.conf. Pozdrawam ~drag_op.
UsuńWitam, czy możliwe jest wykorzystanie LIRC jako bibliotekę w programie napisanym w C lub jak to zrealizować? Chciałbym zrealizować sterowanie silnikiem DC, obroty w lewo/prawo na podstawie przycisków wciśniętych na pilocie. Jest to do zrealizowania? Dzięki, pozdrawiam.
OdpowiedzUsuńSam czegoś takiego szukam, niekoniecznie do C++, może być również do pythona. Chciałbym sterować wyświetlanymi opcjami na wyświetlaczu 16x2 i uruchamiać z pilota pewne parametry.
UsuńUdało mi się to zrobić, ale nie za pomocą LIRC'a. Zamist tego skorzystałem z gotowej biblioteki pigpio. Więcej pod tym linkiem (wraz z przykładami): http://abyz.co.uk/rpi/pigpio/
UsuńDobry poradnik, wszystko się udało. Niestety po podłączeniu karty wifi USB, pilot reaguje raz na kilka prób, a mode2 wypluwa cały czas kody jakby pilot był wciśniety. Sprawę rozwiązałem dając rezystor 100 Ohm na linię 3.3V i kondensator 4.7uF między 3.3V i GND. Teraz wszystkie śmieci są filtrowane. Może komuś się przyda :)
OdpowiedzUsuńFajnie opisane Pytanie do autora Czy opisałby jak podpiąć i skonfigurować kilka odbiorników podczerwieni Mam plan umieszczenia po jednym odbiorniku w każdym pokoju i kuchni (Razem 3)
OdpowiedzUsuńWartościowy wpis
OdpowiedzUsuńPrzydatne treści można znaleźć na tym blogu
OdpowiedzUsuńSuper artykuł
OdpowiedzUsuńCiekawie wykonany test. Gratuluję pomysłowości i doskonałego wpisu.
OdpowiedzUsuńSuper wpis
OdpowiedzUsuńTen wpis jest bardzo interesujący
OdpowiedzUsuńPouczający jest ten wpis.
OdpowiedzUsuńCiekawe informacje
OdpowiedzUsuńBardzo lubię tak interesujące wpisy
OdpowiedzUsuń