Arduino – współpraca z projektorami NEC, EPSON

Arduino – współpraca z projektorami NEC, EPSON

Komunikacja RS232 Arduino  z projektorami NEC, EPSON

Temat podany w tytule porusza tylko kwestię komunikacji z projektorami, natomiast jest tylko częścią dużego projektu, który ze względu na specyfikę sali w jakiej jest używany nie nadaje się w całości do publikacji. Myślę jednak, że ze względu na znikome informacje w sieci na temat Arduino sterującego projektorami, może się to komuś przydać.

          Postanowiłem zaprojektować sterownik do obsługi oświetlenia z możliwością wysyłania sygnału zał/wył do projektorów marki NEC oraz EPSON przy pomocy Arduino, modułu bluetooth, aplikacji na Androidzie.

Sterownik mój działa na podobnej zasadzie jak sterownik podlewania „Rain” z poprzednich publikacji więc jeżeli, ktoś będzie chciał zbudować sobie sterownik, to do Raina udostępniłem pełną dokumentację.

          Teoretycznie każdy z projektorów  posiada gniazdo RS232 . Komendy mogą się różnić w modelach danego producenta w zależności od osprzętu jaki posiada projektor, ale podstawowe funkcje włącz, wyłącz są zawsze takie same . Ze względu na to, że mam dostęp do projektorów EPSON i NEC przedstawię tu sposób na komunikację przy pomocy Arduino z nimi.

EPSON

Transmisja 9600 bps

Brak parzystości

Bity stopu : 1

Sterowanie przepływem: Brak

Komenda RS załączająca projektor:

PWR ON\r

Komenda wyłączająca:

PWR OFF\r

 

NEC

Jeżeli chodzi o komunikację RS, jest ona konfigurowalna z menu projektora ( ja zmieniłem aby było jak w Epsonie 9600bps) a domyślne jej parametry:

Transmisja 38400 bps

Brak parzystości

Bity stopu : 1

Sterowanie przepływem: Brak

Komenda RS załączająca projektor:

02 00 00 00 00 02

Komenda wyłączająca:

02 01 00 00 00 03

 

Wpadłem na pomysł aby zbudować sterownik na bazie arduino MEGA ze względu na większą (patrz 3 ) liczbę portów RS232 oraz ze względu na ilość pamięci Megi. Na nano też można zrobić i działać przy pomocy softwareseriall. Po zakupie Megi i kabelka RS232 damsko-męskiego przystąpiłem do napisania kodu uruchomieniowego dla projektora EPSON . Co najlepsze program zadziałał od startu poprzez wpisanie w linii Serial – komend na Serial2 dzięki poleceniu println(„komenda”); w postaci kodów ASCII.

Problem pojawił się z NEC-kiem, który w ogóle nie chciał podjąć współpracy. Nakombinowałem się z kodem aby uruchomić go, jednak bez sukcesu. Postanowiłem wziąć przejściówkę usb-rs232 i podpatrzyć transmisję z terminala. Moje zdziwienie było wielkie gdy okazało się, że wymiany danych brak. Pomyślałem o kablu tzw NullModem, na szczęście kolega miał taki więc podłączyłem go z przejściówką do PC i odpaliłem RealTerm. Sukces -> projektor bez problemu odpalił oraz zgasił się po wydaniu komend.

Teraz czas na Arduino, ale okazuje się, że kabelek nie pasuje z Arduino wychodzi żeński wtyk, kabelek jest żeńsko-żeński a do projektora męski „fuck” i tu chwila przerwy………………..

Załatwiłem przejściówkę męsko-męską DB9 myślałem, że to rozwiąże sprawę, ale jednak byłem w błędzie. Powiem lepiej g… a nie działa. Podszedłem do sprawy inaczej przejściówkę (patrz rs232-> usb ) podłączyłem do arduino i spiąłem na jednym kompie oba urządzenia ze sobą. Real terminal połączył się i wygląda na to że arduino wysyła i odbiera dane, a projektor nadal nie. Jedyna ciekawostka to taka, że przy połączonym konwerterze z projektorem podświetla się linia CTS – a do jasnej anieli miało nie być hardwareowej kontroli przepływu !!!! Patrzę na schemat NECA:

 no i ma narysowany kabel RX->TX, TX->RX, GND->GND CTS-RTS !! HA HA  a arduino nie ma sterowania przepływem, jedyny pomysł to zwarcie tych dwóch linii aby urządzenie (patrz-projektor „myślał”, że ma ) zobaczymy . 

Zlutowanie pinów 7-8 tez nie pomogło w pierwszej fazie, choć jest to jedno z najważniejszych rzeczy jakie trzeba zrobić. Chciałem się już poddać, ale kolega, który przyszedł mnie odwiedzić powiedział, abym jeszcze raz przedzwonił kable i okazało się, że dwa z trzech testowanych są krosowane a ten który działa z Epsonem jest na „wprost” i o dziwo ten też zadziałał z Neckiem.

Wniosek następujący :

– cierpliwość zostanie nagrodzona !

– nie ufać przejściówkom RS232C->USB bo mogą mieć odwrócone linie RX -> TX i wprowadzą cię w błąd .

– Należy zlutować linie CTS -> RTS – w przypadku arduino nie ma znaczenia czy zrobi się to na wtyczce z modułem max3232 – czy też we wtyczce przy projektorze, grunt aby zwora była bo inaczej NEC nie reaguje na komendy ! W przypadku Epsona nie ma różnicy czy ta zwora jest czy nie.

– No i podłączając Arduino z modułem RS3232 (jak RX łączysz z TX) to stosuj kabel na „wprost”, bo żyły masz już odwrócone.

Kolejna kwestia to linia komend. Przeprowadziłem wiele prób, więc wy już nie musicie, najlepszy sposób na obudzenie EPSONA:

Serial1.begin(9600);    // i najlepiej niech będzie przed każdą  komendą bo obudzi  Serial od zera.

Serial1.println(„\r\n”);

delay(10);

Serial1.println(„PWR ON\r\n”);

Usypiamy go w następujący sposób:

Serial1.begin(9600);

Serial1.println(“PWR OFF\r\n”);

 

Jeżeli chodzi o NECa to najlepszy kod uruchamiający:

Serial1.begin(9600);

Serial1.write(02);

Serial1.write(00);

Serial1.write(00);

Serial1.write(00);

Serial1.write(00);

Serial1.write(02);

Tak samo działa też :

Serial1.begin(9600);            

byte message[] = {0x02, 0x00, 0x00, 0x00, 0x00, 0x02};

Serial1.write(message, sizeof(message)); 

Wyłączanie:

Serial1.begin(9600);

Serial1.write(02);

Serial1.write(01);

Serial1.write(00);

Serial1.write(00);

Serial1.write(00);

Serial1.write(03);

To sprawdzone i działa, jeżeli chodzi o dodatkowe komendy to polecam lekturę producentów projektorów, w każdym bądź razie podsumowując:

– Serial.begin(9600); potrzebny przy każdej komendzie bo projektory usypiają port rs232 i wywołanie od nowa komunikacji pobudza je do działania ( bez tego raz działa raz nie).

– w przypadku Epsona „\r\n” czyści linię i stąd i gwarantuje poprawny odczyt danych.

– NEC jest mniej wybredny za wyjątkiem tego sygnału CTS->RTS, którego jeżeli fizycznie nie zapętlimy to nic nam nie pokarze.

          Można zadać pytanie a co z komunikatami jakimi odpowiadają projektory ? Odpowiem w następujący sposób, jak ktoś potrzebuje, to niech sobie czyta po Serialu i interpretuje to w kodzie, wg mnie ma to sens, gdy zależy nam na debugowaniu projektora a nie przy jego uruchomieniu czy zgaszeniu, bo widać to w rzeczywistości. W przypadku potrzeby odczytu stanów projektora należy zdefiniować jakiś „bufor” odczytu i zdecydować w jaki sposób będziemy to interpretować zdefiniować znaki końca linii itd.. bez sensu uważam, że w takim przypadku lepiej już zarządzać z menu  projektora, lub przy pomocy PC.

 

 

Ocena: 5/5 (głosów: 5)

Podobne posty

2 komentarzy do “Arduino – współpraca z projektorami NEC, EPSON

Odpowiedz

anuluj

Masz uwagi?