Smartfony w dzisiejszych czasach zazwyczaj są wyposażone w żyroskop, akcelerometr, kompas, aparat i czujnik GPS. Zwykle mają też połączenie z Internetem za pomocą Wi-Fi i mobilnych sieci danych. Widziałem wiele przypadków używania telefonu jako pilota do robota, ale wydaje mi się, że sam telefon jest idealną lekką platformą obliczeniową i wykrywającą dla autonomicznego robota.
Główną przeszkodą, którą widzę, jest współpraca z siłownikami. Możliwość sterowania silnikami, aby sterować nawet robotem stołowym lub sterować na przykład serwami. Przeszkoda może również stanowić połączenie z mikrokontrolerem i komunikacja z nim.
Jako hobbysta robotów chciałbym wiedzieć, jak mogę pokonać te i inne przeszkody, aby móc wykorzystać moc mojego smartfona w swoich projektach robotyki.
Odpowiedzi:
Android Accessory Development Kit (ADK) należy zrobić wszystko, czego potrzeba.
To tablica Arduino zaprojektowana specjalnie do współpracy z systemem Android. Możesz połączyć oba przez Bluetooth lub USB (lub WiFi / Ethernet, jak sądzę).
Ponieważ cała architektura jest otwarta, możesz użyć każdej części do tego, co jest najlepsze. Piszesz kod Androida, aby uzyskać dane z wbudowanych czujników telefonu i sterować wyświetlaniem. I piszesz kod Arduino, aby kontrolować siłowniki, serwomechanizmy i inne czujniki, których nie ma w telefonie. Kod do komunikacji między nimi jest udostępniany za pośrednictwem Google jako oprogramowanie typu open source.
Z Arduino Blog :
Większość przykładów dotyczy korzystania z telefonu jako interfejsu graficznego dla pewnego rodzaju akcesoriów sprzętowych, takich jak zegar. Ale nie ma powodu, dla którego nie miałbyś dostępu do czujników telefonu i przesyłania danych tam iz powrotem.
Adafruit wspomina nawet o używaniu go do tworzenia robotów na stronie ich sklepu dla pakietu ADK:
(moje podkreślenie)
źródło
Inną opcją jest płyta IOIO-OTG :
Opis produktu SparkFun opisuje jego funkcjonalność:
Ta tablica powinna robić wszystko, co chcesz, a nawet ma fajny samouczek, który pomoże Ci zacząć.
źródło
Główny problem, jak widzę, nie jest tak naprawdę związany z siłownikami - jeśli masz dobry sposób na bezprzewodowe przesyłanie sygnałów cyfrowych (jeszcze lepiej byłoby to analogowe lub kanał wystarczająco dobry, aby wykonać PWM), możesz po prostu połączyć to z chip sterownika silnika (np. L293D) i bądź gotowy. W przypadku serwomechanizmów potrzebny jest dobry czas reakcji, aby można było obsługiwać impulsy. Jeśli masz kanał obsługujący PWM, nie powinno to być trudne, ponieważ kanał ma już wysoką prędkość transmisji. Jeśli masz wolny kanał, serwa mogą nie być możliwe, ponieważ potrzebujesz dokładnego pomiaru czasu impulsu.
Pierwszą opcją, jaką widzę (choć jest dość nieporęczna), jest wzięcie Raspberry Pi, połączenie go za pośrednictwem sieci Ethernet z routerem bezprzewodowym i połączenie telefonu z tym samym bezprzewodowo. Teraz po prostu napisz podstawową aplikację dla swojego telefonu, która wysyła żądania do Pi na podstawie danych wejściowych, i napisz inny serwer podobny do aplikacji dla Pi, która je obsługuje. Może być nieporęczny i nieco trudny, ale jest dość rozszerzalny, IMO. Można również umieścić offboard routera i trzymać to w Pi (lub użyć hotspot i wyeliminować całkowicie routera).
Inną opcją jest użycie kontrolera Bluetooth takiego jak ten pokazany tutaj . Nie korzystałem z tego wcześniej, ale wygląda na to, że nadal potrzebujesz mikrokontrolera, aby sobie z tym poradzić. Myślę, że możesz podłączyć jego piny RX / TX bezpośrednio do TX / RX na arduino, choć nie jestem tego zbyt pewien.
Jeśli korzystałeś wcześniej z XBee / ZigBee, możesz wypróbować pszczołę bluetooth .
Ostatnią opcją jest użycie portu USB telefonu z konwencjonalną konfiguracją sterowania bezprzewodowego (XBee / cokolwiek) - ale będzie to wymagało napisania sterowników i wszystkich innych.
źródło
Tak, brak pinów GPIO na smartfonach to wstyd. Jeśli masz już system ROS działający na robocie, możesz użyć tej aplikacji na telefonie z Androidem, aby uzyskać dostęp do zestawu czujników w telefonie.
źródło
Wiele najnowszych urządzeń z Androidem, takich jak Nexus 7, obsługuje USB On The Go (OTG), co jest wymyślnym sposobem powiedzenia, że „Tryb hosta USB” jest obsługiwany. W takich przypadkach, przy odpowiednim kablu, który można mieć za mniej niż 1 USD, można użyć dowolnego zgodnego urządzenia USB. Nie potrzebujesz specjalnej wersji Arduino, która ma sprzęt do trybu hosta USB.
Eksperymentowałem z tym wystarczająco, aby wiedzieć, że „normalne” Arduino, takie jak Leonardo lub Teensy 2, pojawia się na telefonie z Androidem jako urządzenie TTY (np. Port szeregowy) po podłączeniu za pomocą kabla OTG.
W tym artykule opisano szczegółowo, jak korzystać z interfejsu API Android Host USB do komunikacji z Arduino z aplikacji na Androida. Wymaga Androida 3.1+ i nie wymaga rootowania urządzenia.
źródło