Jak mogę zintegrować inteligentny telefon z moim projektem robotyki? [Zamknięte]

24

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.

Robz
źródło
Aby dodać opcję iOS, zobacz SESO iPhone jako kontroler robota
Greenonline

Odpowiedzi:

19

Android Accessory Development Kit (ADK) należy zrobić wszystko, czego potrzeba.

ADK

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 :

Zestaw Android Open Accessory Development Kit (ADK) zapewnia implementację akcesorium USB dla systemu Android opartego na platformie prototypowania elektroniki open source Arduino, plikach projektowych akcesoriów, kodzie implementującym oprogramowanie układowe akcesorium oraz aplikacji na Androida, która współdziała z akcesorium. Pliki i kod projektu sprzętu znajdują się w pliku do pobrania pakietu ADK.

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:

Szybko śledź rozwój sprzętu na telefonie z Androidem lub po prostu projektuj roboty do telefonów komórkowych za pomocą Arduino ADK! Arduino ADK to płytka mikrokontrolera oparta na potężnym ATmega2560 (karta katalogowa). Posiada interfejs hosta USB do połączenia z telefonami z systemem Android oraz konwerter zwiększający zasilanie, aby naładować telefon z prądu stałego, gdy jest podłączony do ADK

(moje podkreślenie)

embedded.kyle
źródło
11

Inną opcją jest płyta IOIO-OTG :

Płyta IOIO-OTG

Opis produktu SparkFun opisuje jego funkcjonalność:

Posiada mikrokontroler PIC, który działa jak most łączący aplikację na komputerze PC lub urządzeniu z Androidem z niskopoziomowymi urządzeniami peryferyjnymi, takimi jak GPIO, PWM, ADC, I2C, SPI i UART. Biblioteka na poziomie aplikacji pomaga pisać kod sterujący dla tych urządzeń peryferyjnych niskiego poziomu w taki sam sposób, jak w przypadku innych aplikacji Java!

Ta tablica powinna robić wszystko, co chcesz, a nawet ma fajny samouczek, który pomoże Ci zacząć.

brnd4n
źródło
6

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.

Manishearth
źródło
5

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.

Nis
źródło
4

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.

Jay Beavers
źródło