Radiowa transmisja danych, czyli robot zdalnie sterowany (Wstęp) Artykuł ten powstanie w kilku częściach, prawdopodobnie czterech, ale nigdy nic nie wiadomo. W kolejnych częściach planuję opisać różne możliwości bezprzewodowej transmisji danych między urządzeniami (np. robotami). Od razu uprzedzam, nie będę się zajmował ani Wi-Fi, ani Bluetooth. Jeśli kogoś stać na drogie moduły, ma możliwość używania TCP/IP, ten artykuł może przeczytać tylko po to, aby zobaczyć jak wiele problemów go ominęło. Moim celem jest znalezienie taniego modułu, za pomocą którego możliwe będzie przesyłanie informacji między układami. Jako przykład zastosowania niech posłuży robot. Pewnie każdy wymyśli wiele ciekawszych zastosowań komunikacji radiowej. Moje pomysły to: zdalne sterowanie robotem (proszę się nie śmiać, na początek zawsze coś) zdalne debugowanie pracy robota – czasem się przydaje zbieranie informacji, np. o otoczeniu robota wymiana informacji między robotami Wracając jednak na ziemię, wypada najpierw sprawdzić, co można kupić za rozsądną cenę. Postanowiłem zastosować gotowe moduły RF, ich wybór podyktowany był ceną oraz dostępnością: HM-R868S / 868D Pierwsza para modułów zapewnia tylko jednokierunkową komunikację (simpleks). Moduł HM-T868S jest nadajnikiem, HM-R868S to odbiornik. Nie ma możliwości przesyłania danych w przeciwnym kierunku. Jednak cena modułów sprawia, że rozwiązanie jest warte przemyślenia. Ceny z TME ( HM-T868S – 12,13zł HM-R868S – 16,96zł Dodatkowym atutem jest bardzo prosty interfejs sterowania modułami, ale o tym dalej. Kolejnym kandydatem na idealny moduł jest RFM12B/868D. Jego cena (również TME) wynosi: 22,94 zł. Nieco więcej niż poprzednio, ale ten moduł może pracować zarówno jako nadajnik jak lub odbiornik. Trzecim i ostatnim opisywanym modułem jest CC1000PP-433. Dostępny jest na stronie a jego cena wynosi 46,36zł. Platforma testowa Aby przetestować moduły niezbędne nam będą co najmniej dwa urządzenia, które będą się ze sobą komunikować. Do testów wykorzystałem dwie identyczne płytki (zaprojektowane pod moduł CC1000PP-433, ale pozostałe powinno być łatwiej podłączyć). Płytki testowe wyposażone są w procesor Atmega8L – wynika to z konieczności zasilania modułów napięciem (szczegóły w dalszej części). Każda z płytek posiada 3 switch-e oraz 3 diody. Najprostsza wersja sterowania to zapalanie diody po naciśnięciu przycisku (na przeciwnym układzie oczywiście). Dodatkowo układy mają wyprowadzone piny od UART-a, więc istnieje możliwość podłączenia płytek do portu szeregowego komputera przez układ typu max232. Stosuję takie rozwiązanie, aby nieco zaoszczędzić, układ max232 mam na oddzielnej płytce, a testową traktuję jako jednorazową. Radiowa transmisja danych, czyli robot zdalnie sterowany (moduły HM-T868S i HM-R868S) Testowany zestaw składa się z modułu nadajnika HM-T868S oraz odbiornika HM-R868S. Pierwszym zaskoczeniem jest wielkość modułów, są bardzo małe. W komplecie dostajemy do nich odpowiednio przycięte przewody, służące jako anteny. Kolejne zaskoczenie do liczba wyprowadzeń - nadajnik ma tylko 3 piny, odbiornik 4. Piny są rozmieszczone standardowo, co 2,54mm, więc bez problemu można moduły wpiąć do płytki testowej. Więcej informacji o modułach jest na stronie producenta: Piny nadajnika to: GND, DATA, VCC. Odbiornika: GND, DATA, VCC, ENABLE. Rozszyfrowanie oznaczeń nie sprawia problemów, jednak lepiej zapoznać się z krótkim datasheetem ze strony producenta. Moduły powinny być zasilane napięciem 3V, jednak mogą pracować do 5,4V, więc podłączenie do AVR-a nie sprawi problemu. Pin ENABLE odbiornika pozwala na wyłączenie modułu, gdy nie jest używany. Podanie na nim napięcia VCC uruchamia odbiornik. Nadajnik sam wykrywa brak danych i przechodzi w tryb uśpienia. Okazuje się, że moduł jest maksymalnie prosty w obsłudze. Nie zapewnia żadnego protokołu komunikacji, to co podamy na pin DATA nadajnika zostanie wysłane i pojawi się na pinie DATA odbiornika. Prosty test polegający na podłączeniu generatora do nadajnika i oscyloskopu do odbiornika potwierdza taki właśnie sposób działania modułów. Prędkość transmisji zalecana przez producenta to 4800bps, maksimum 9600, co w dzisiejszych czasach nie oszałamia. Przy częstotliwości w okolicach 10kHz widoczne jest zniekształcenie sygnału, więc lepiej nie liczyć na maksymalną prędkość transmisji. Prostota obsługi modułów ma swoje wady. Trzeba samemu obsłużyć protokół transmisji. Ja postanowiłem wykorzystać sprzętowy UART procesoraś. Nadajnik połączyłem więc do pinu TXD w płytce nadajnika, odbiornik do pinu RXD płytki odbiornika. Pozostało dodać podciąg pinu ENABLE w odbiorniku (niech pracuje cały czas, nie oszczędzam prądu podczas testów) i podłączyć zasilanie. W datasheecie producent sugeruje, aby pin ENABLE był nieaktywny podczas podłączania zasilania i aktywowany później. Okazało się to o tyle istotne, że inaczej odbiornik nie zawsze „wstaje”. Problem nie był duży – wystarczy podłączyć ENABLE do pinu procesora i programowo wystawiać 1 chwilę po uruchomieniu układu. W poprzedniej części opisałem z czego składają się moje płytki testowe, teraz zamieszczam więcej informacji o nich. Na schemacie jest procesor Atmega8, jednak użyłem Atmega8L – ze względu na zasilanie z 3V (będzie niezbędne dla modułu CC1000, o tym później). Gniazdo RS232 to wyprowadzenia UART-a wraz z zasilaniem, P1 i P2 to gniazdo do podłączenia CC1000. Poza tym jest oczywiście gniazdo programatora, 3 diody i 3 switche do sterowania układem oraz stabilizator Do obecnych testów można użyć uproszczonej wersji układu, przede wszystkim można użyć Attiny, ale miałem akurat atmege8, więc wykorzystałem co było pod ręką. Obecne testy przeprowadzałem na 5V (stabilizatory zalutuję później), więc zasilanie też można uprościć. Jedno o czym warto pamiętać to dodanie rezonatora. Ja używam rezonatorów 4MHz. Próbowałem najpierw działać bez nich, niestety układy nie mogły się komunikować poprawnie. Wystarczył upalny dzień i generator RC jednego z układów przestawił się na tyle, że dane po RS232 nie były poprawne. Rezonator zapewnia dużo większą dokładność zegarów. Program testowy Pierwszą czynnością jest konfiguracja modułu UART do pracy. Ustawiłem prędkość na 2400bps. Piny od przełączników ustawiane są jako wejścia, piny od diód jako wyjścia. Pętla główna odczytuje stan przełączników, jeśli któryś zostanie przyciśnięty, wysyła kod przycisku. Kodowanie jest bardzo proste i bazuje na znakach: 'A' – wciśnięty przycisk 1, 'B' – przycisk 2, 'C' – przycisk 3 Moduł odbiornika działa na przerwaniu i po odebraniu bajtu steruje diodami. 'A' – zapala diodę 1, 'B' – 2, 'C' -3 Są też kody gaszenia diód: 'a' – gasi diodę 1, 'b' – 2, 'c' – 3 Zarówno płytka nadajnika jak i odbiornika pracują na tym samym programie. Do testów wystarczy założyć zworkę na piny RXD i TXD – wtedy moduł komunikuje się sam ze sobą, naciskanie przycisków zapala odpowiednie diody. Moduły podłączyłem następująco: Nadajnik GND – do pinu 1 (GND) gniazda JP4 (RS232) DATA – do pinu 2 (TXD) gniazda JP4 (RS232) VCC – do pinu 4 (VDD) gniazda JP4 (RS232) Odbiornik GND – do pinu 1 (GND) gniazda JP4 (RS232) DATA – do pinu 3 (RXD) gniazda JP4 (RS232) VCC – do pinu 4 (VDD) gniazda JP4 (RS232) ENABLE – podciąg rezystorem do pinu VCC Po sprawdzeniu połączeń i podłączeniu zasilania spotkało mnie pierwsze rozczarowanie. Odbiornik odbiera straszne ilości „śmieci”. Natomiast dane z nadajnika lubią się „gubić”. Aby poprawić działanie układu zmieniłem program: 1)po naciśnięciu przycisku program cyklicznie wysyła kod zapalania diody 2)gdy przyciski są zwolnione ciągle wysyła kody gaszenia diód Takie zmiany pomogły – program działa bardzo ładnie. Niestety śmieci, nadal pojawiają się na odbiorniku. Należałoby dodać filtrowanie danych w odbiorniku, jednak na potrzeby sterowania diodami program działa bardzo ładnie. Testy pozwalają na podsumowanie, jakie są plusy i minusy układu: Zalety: 1)Niska cena 2)Prostota działania (nawet procesor nie jest niezbędny, można zrobić radiowy włącznik, czy czujnik bez procesora) 3)Łatwe podłączenie 4)Możliwa praca z 5V Wady: 1)Brak jakiegokolwiek protokołu transmisji 2)Zaśmiecony sygnał na odbiorniku 3)Konieczność wielokrotnego wysłania danych Podsumowując układ dobrze nadaje się dla początkujących elektroników, którzy nie chcą zajmować się programowaniem obsługi skomplikowanego układu. Za jego pomocą można łatwo wykonać układ zdalnego sterowania np. robota. Można też odczytywać stan czujników lub urządzeń, np. mierzyć temperaturę w innym pokoju.
0Veq.