Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota

Gelip 01 Nov 2021 14:54 2475 6
IGE-XAO
  • Co zrobić kiedy popsuł nam się oryginalny pilot tak, że nie działa część przycisków i nie pomaga czyszczenie i/lub wymiana gumek, nie chcemy kupować oryginału ani zamiennika tylko kupić od razu pilot uniwersalny, którym możemy zastąpić kilka pilotów?

    Kupując zamiennik nie ma 100% pewności iż będą działać wszystkie fukcje z oryginalnego pilota a uniwersalny - zwłaszcza starszy, tańszy może nie mieć w bazie naszego urządzenia lub mogą nie działać wszystkie przyciski, co właśnie mi się przydarzyło. Kupiłem pilot uniwersalny z funkcją uczenia. Niestety okazało się, iż nie ma on w bazie kodów do mojego urządzenia ale udało mi się go nauczyć działających przycisków z uszkodzonego pilota. No ale w tym momencie wyszło na to iż "Zamienił stryjek siekierkę na kijek" bo mam już drugi pilot w którym działa tylko ta sama część przycisków :| :|

    Pomyślałem iż nie będę znowu kupował innego pilota, nie mając 100% pewności czy zadziała z moim urządzeniem. Zastanawiałem się jakby tu nauczyć pilot brakujących przycisków - kody przycisków musimy skądś wziąć i czymś wysłać.

    I tu z pomocą przychodzi mój projekt: Arduino, dioda IR, dosłownie jeden rezystor 100om i kilka kabelków + płytka stykowa bo wybrałem wersję Arduino Nano (zlutowane goldpiny). Nie trzeba nawet żadnego mikroprzełącznika czy ATtiny a kody wysyłamy z poziomu konsoli szeregowej. Dodatkowo wykorzystałem jeszcze odbiornik IR TSOP 1736 aby odczytać wartości i protokół w jakim nadaje pilot oryginalny i wyszło mi iż to protokół NEC. Uważam iż schematu nie ma co zamieszczać bo zrobiłem wyraźne zdjęcie na którym wszystko widać:
    Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota

    No dobra ale skąd wziąć kody brakujących przycisków?

    Arduino jest na tyle popularne iż wielu użytkowników nagrało już takie kody i udostępnia je w Internecie w formacie HEX 32-bit unsigned integer np. 0x807F08F7 - a to za sprawą tego iż Arduino IDE zawiera przykładowe szkice do odbioru i wysyłania kodów w takim formacie.
    Wystarczy skopiować dany kod - nawet jak jest od innego przycisku, wysłać go przez Arduino do urządzenia, sprawdzić za jaką funkcję odpowiada w naszym urządzeniu a następnie nagrać sygnał pilotem uczącym.

    Niektórzy producenci udostępniają takie dane (format NEC) w tabelce np. w instrukcji serwisowej ale jako adres urządzenia i polecenie - ADDR, CMD np. 04 08
    W Internecie można też znaleźć dane przycisków wielu urządzeń w formacie LIRC, Pronto czy innym.

    Jest bardzo dobry konwerter sygnałów IR działający pod Javą - IR Scrutinizer. Potrafi on także wygenerować kod Pronto po podaniu danych ADDR, CMD a także eksportować go do innego formatu np. ICT który z kolei odczyta program IR Scope 2.01 w którym odczytamy wartość 32-bit unsigned int - patrz A=$xxxxxxxx w IRP Form:
    Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota

    Dodano po 25 [minuty]:

    Na upartego znając parametr NEC ADDR wartość CMD przycisku można zgadnąć w ciemno:
    • w IrScrutinizer w menu Options -> Output Text Format wybieramy Pronto Hex ("CCF")
    • na zakładce Generate wybieramy Protocol: nec1, podajemy wartości D (ADDR) oraz F (CMD)
    • klikamy Generate i "To Scrutinize signal" po czym przechodzimy na zakładkę Scrutinize signal
    • klikamy Scrutinize, usuwamy 4 ostatnie wartości word xxxx xxxx xxxx xxxx na końcu i ponownie klikamy Scrutinize
    • zamieniamy czwartą wartość 0002 na 0000 i jeszcze raz na Scrutinize
    • eksportujemy kod do pliku ICT, otwieramy w IR Scope 2.01 i odczytujemy wartość A=$xxxxxxxx
    • za pomocą Arduino testujemy kod

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    Gelip
    Level 32  
    Offline 
    Gelip wrote 3474 posts with rating 269, helped 196 times. Been with us since 2003 year.
  • IGE-XAO
  • #2
    mpier
    Level 26  
    Witam,
    bardzo przekombinowałeś z tymi kodami i konwerterami. Przecież cały ten kod składa się jedynie z adresu i polecenia (ADDR, CMD). U Ciebie na pierwszym zdjęciu odpowiednio 128 i 08 (Hex: 80 i 08). Tu masz "generator poleceń": 0, 1, 2, ..., 255.

    Pozdrawiam.

    Dodano po 2 [godziny] 11 [minuty]:

    Raczej 1 i 16 (Hex: 01 i 10), jeśli dany kod to gotowy ciąg do wysłania. Na jedno wychodzi.
  • IGE-XAO
  • #3
    Gelip
    Level 32  
    @mpier
    Nic nie przekombinowałem. To są tylko zdjęcia poglądowe IR Scrutinizer aby pokazać co potrafi. Ten program nie był mi w zasadzie do niczego potrzebny bo kody w formacie 32-bit unsigned int 0x807Fxxxx dla Arduino znalazłem w Internecie.

    Przy okazji bardzo dużo nauczyłem się o IR. Kod IR może być w wielu formatach - to zależy od oprogramowania - ADDR + CMD, RAW, Pronto czy 32-bit unsigned int w którym Arduino ma szkice w bibliotece IRRemote.
    mpier wrote:
    Tu masz "generator poleceń": 0, 1, 2, ..., 255.
    Jaki generator, gdzie???

    A czym miałbym niby wysłać ten kod do urządzenia czy mojego pilota uniwersalnego z funkcją uczenia ??? Są zapewne jakieś nadajniki na RS-232 czy na USB ale ja wybrałem Arduino + płytka stykowa.

    Oczywiście na Arduino też znalazłem generator kodu w postaci ADDR + CMD ale na ATtiny (pierwszy link do YT - TinyRemote):
    Czy do tych projektów ATTiny wystarczy kupić Arduino Nano?
    Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota

    ale to dodatkowa robota bo trzeba kupić ATtiny, sklecić 4-ro przyciskowy nadajnik i programować od nowa dla 4 przycisków - nie praktyczne w moim przypadku bo musiałbym kilka razy programować kolejne 4 przyciski a tak to napisałem sobie szkic, który działa z samym Arduino i wystarczy podać kod w konsoli i nie trzeba wgrywać za każdym razem innego szkicu dla innego przycisku:
    Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota

    Dodano po 10 [minuty]:

    Priorytetem w tym artykule jest szybka nauka pilota uniwersalnego - kładę pilot na przeciwko diody IR w Arduino w odleglości 1 cm, w notatniku mam spisane wszystkie kody przycisków i po kolei kopiuje, wklejam w Serial Monitor w Arduino IDE i nagrywam je w pilocie - raptem 5 minut roboty.

    Dodano po 7 [minuty]:

    W tabelce kody w formacie Arduino HEX oraz ADDR CMD.

    Spoiler:
    ADDR = adres urządzenia 01

    Arduino HEXData (CMD)Name
    807F807F01STANDBY
    807F40BF02MUTE
    807FC03F03FAVOURITE albo 807F0EF1 (IRDA z Remocon)
    807FA05F05AUDIO
    807F609F06TTX
    807FE01F07SUBTITLE
    807F10EF08EPG
    807F906F09TV/RADIO
    807F08F710CH+ (Up)
    807F887711CH- (Down)
    807F48B712VOL+ (Right)
    807FC83713VOL- (Left)
    807F28D714PLAY
    807FA85715REPEAT
    807F689716BLUE (Planowane nagrywanie)
    807FE81717PAUSE (Time Shift Play/Pause lub Play/Pause odtwarzacz)
    807F18E718STOP
    807F38C71cREV
    807FB8471dFWD
    807F78871ePREV
    807FF8071fNEXT
    807F50AF0aMENU
    807FD02F0bEXIT
    807F30CF0cINFO
    807FB04F0dRECALL (Back)
    807FF00F0fOK (Lista kanałów)
    807F02FD400
    807F827D411
    807F42BD422
    807FC23D433
    807F22DD444
    807FA25D455
    807F629D466
    807FE21D477
    807F12ED488
    807F926D499
    807F52AD4aGOTO
    807F8A7551RED
    807F4AB552GREEN (Przełącza rozdzielczość ekranu)
    807FCA3553YELLOW (Przełącza format obrazu)
    807FAA5555PAGE+
    807F6A9556PAGE-
    807FEA1557PVR
    807F1AE558REC
    807F867961Muzyka z USB
    807F46B962Restart
    807FC63963Pokazuje CVBS (format dźwięku)
    807F26D964Pokazuje RGB (format obrazu)
    807FA65965Pokazuje 16:9 (rozdzielczość obrazu)
    807F6699664:3 Full
    807F0EF170Przewodnik instalacji (domyślne ustawienia - kasuje listę programów)
    807FFF00ffChyba znak zapytania TXT i PVR USB
  • #4
    mpier
    Level 26  
    Chodziło mi tylko o sposób generowania "w formacie HEX 32-bit unsigned integer np. 0x807F08F7". Kod NEC u Ciebie to cztery bajty: (ADDR),(~ADDR),(CMD),(~CMD). Symbol ~ to negacja bitowa. Dla "ułatwienia" bity w powyższych bajtach zapisane są w odwrotnej kolejności.
    Przykład dla ADDR = 0x01, CMD = 0x10, czyli u Ciebie CH+:
    0x01, 0xFE, 0x10, 0xEF.
    Bity w bajtach w odwrotnej kolejności:
    0x80, 0x7F, 0x08, 0xF7.
    Kod w całości:
    0x807F08F7.
    Teraz generujesz wszystkie możliwe kody dla danego adresu: 0, 1, 2, ..., 255, wysyłasz i jeśli któryś Ci pasuje zapisujesz do pilota. Może być tak: ENTER wysyła kolejny kod a SPACJA wysyła jeszcze raz ten sam, tym razem do pilota. Dziwne, że biblioteka sama tego nie robi.
  • #5
    Gelip
    Level 32  
    mpier wrote:
    Teraz generujesz wszystkie możliwe kody dla danego adresu: 0, 1, 2, ..., 255, wysyłasz i jeśli któryś Ci pasuje zapisujesz do pilota.

    Ale czym mam to wygenerować i czym wysłać? Ja wiem, że są protokoły NEC, Panasonic, Sony i inne ale po co mi to jak Arduino ma gotowy szkic bazujący na danych 32-bit integer.
  • #6
    mpier
    Level 26  
    Nie znam Arduino, ale wysyłasz tak samo jak teraz:
    Code: c
    Log in, to see the code
    Efekt:
    Pilot uniwersalny z funkcją uczenia jako zamiennik uszkodzonego pilota
  • #7
    Gelip
    Level 32  
    @mpier
    mpier wrote:
    Nie znam Arduino, ale wysyłasz tak samo jak teraz:

    Błąd kompilacji:
    Code:
    'cp' was not declared in this scope


    Dodano po 27 [minuty]:

    Dobra chyba wiem o co chodzi. To o czym piszesz faktycznie jest możliwe ale wymaga biblioteki IRRemote w wersji 3.x a ja używam 2.0.1 ze względu na to: Arduino Nano i błąd kompilacji

    Dodano po 3 [minuty]:

    https://github.com/Arduino-IRremote/Arduino-IRremote

    Features of the 3.x version

    No more need to use 32 bit hex values in your code. Instead a (8 bit) command value is provided for decoding (as well as an 16 bit address and a protocol number).

    Dodano po 1 [godziny] 20 [minuty]:

    To rozumiem:
    mpier wrote:
    Przykład dla ADDR = 0x01, CMD = 0x10, czyli u Ciebie CH+:
    0x01, 0xFE, 0x10, 0xEF.

    ale skąd z powyższego wyszło Ci to ???:
    mpier wrote:
    Bity w bajtach w odwrotnej kolejności:
    0x80, 0x7F, 0x08, 0xF7.
    Kod w całości:
    0x807F08F7.

    Przecież ADDR dla całego pilota jest ten sam 01 a tylko inne CMD dla przycisków. Coś chyba mieszasz i ten adres 32-bit integer to nie jest żadna odwrotność ADDR,CMD

    Dodano po 7 [minuty]:

    Kod 32 int np. przycisku REC 807F1AE5 to negacja liczb ale nie ADDR, CMD bo ADDR=01, CMD=58. Negacja to by było 01FE58A7