niedziela, 15 grudnia 2013

 

Archiwum: Robot Lego + Raspberry Pi

Wstęp


Moje dziecko właśnie dorosło do klocków Lego (wiek 4+). Ciocia kupiła pierwszy zestaw klocków i tak się zaczęło. Budowanie domków ale też samochodów, robotów. Oczywiście z przyjemnością dałem się wciągnąć do zabawy. Aż się prosi by konstrukcje zaczęły się ruszać. Jednak elementy ożywiające Lego dostępne na rynku, mają dość małe możliwości w stosunku do ceny. A może chciało mi się po prostu pobawić w zrobienie czegoś z niczego. W każdym razie tak narodził się pomysł zbudowania własnego zbioru elementów, pozwalających ożywić zabawki Lego. Nie jestem elektronikiem, a wszystko co opisałem poniżej traktuję jako zabawę. Może jednak komuś przydadzą się moje doświadczenia, dlatego postanowiłem je opisać. Jeśli masz pomysł jak to zrobić lepiej, daj znać.
Wspomnę jeszcze o inspiracjach. najpierw trafiłem na youtube na filmiki J. Mantzel. Pokazał jak prawie z niczego zbudować ruszające się Lego.Gdy sam zbudowałem podobne, stwierdziłem jednak że klej będzie lepszy niż gumki recepturki i oczywiście dodałem Raspberry Pi, bo już się nim wcześniej trochę bawiłem. Wiele rozwiązań z RPi jest opisanych na learn.adafruit.com. Ciekawy projekt jest na picoboard.pl o nazwie SPiBot.  
Mój projekt jest oczywiście w fazie koncepcyjnej i tylko część rzeczy jest już wykonanych. Opis będzie się rozwijał w miarę postępu prac. 

Założenia:

 

  1. stworzone elementy mają być modułowe i pozwalać łatwo tworzyć nowe konstrukcje z klocków
  2. sercem na początek będzie Raspberry Pi, choć zastanawiam się też nad Beaglebone Black ze względu na ilość wyprowadzeń GPIO
  3. główne elementy/moduły:
    • jednostka centralna Raspberry Pi,
    • zasilanie 6xAA lub PowerBank,
    • wyświetlacz LCD na interfejsie SPI (1.8" 160×96 pixeli)
    • silnik servo,
    • silniki dc,
    • kamera,
    • głośniczek,
    • czujniki i2c (accelerometr, kompas, barometr itd.),
    • czujniki 1Wire (termometr, IR resiver),
    • inne: czujnik zbliżeniowy, czujnik ruchu itd.
    • sterowanie: aplikacja na smartfon napisana w MIT App Inventor 2 (BT lub WiFi)
    • sterowanie: klawiatura radiowa 

 

Implementacja

 

Jednostka centralna Raspberry Pi


Mózgiem będzie oczywiście Rasberry Pi w obudowie z klocków. Trochę ma mało wyjść GPIO, ale chwilowo udało mi się rozplanować podłączenia i wystarczyło dla modułów, które chcę podłączyć. Gdy zabraknie portów zostanie podłączenie expandera GPIO - np. MCP23017-E/SP lub przejście na BeagleBone Black.




Jeszcze robię schemat podłączeń. Poniżej aktualna wersja. Jeszcze nie testowana. Sprawdzałem każdy z modułów oddzielnie ale nie jako całość. Powtarzam, NIE TESTOWANA, może zawierać błąd, jeśli nie umiesz sam ocenić poczekaj na moje testy.




Na początku połączę to przez tymczasowy "multikabel" ;) czyli pęk kabelków zakończonych goldpinowymi wtykami, który łączy testowane przeze mnie elementy.

Docelowo zrobię płytkę rozszerzeń w oparciu o RPi Proto Board lub rozbuduję płytkę, którą zrobiłem wcześniej do sensorów I2C.




Zasilanie

 

Posiadam PowerBank 10A z wyjściami USB 2A i 1A. Pozwala on całkiem długo pracować, ale jest stosunkowo ciężki.

Docelowo przygotowuję drugie zasilanie na sześć baterii AA ze stabilizatorem napięcia. Posiadam moduł zasilania AMS1117-5V, kupiony kiedyś na Allegro, który zamienia 6-12V na 5V, ale nie wiem czy da wystarczające natężenie (zdaje się, że obcina do 800mA). Będę eksperymentować.



Wyświetlacz LCD

 

Posiadam wyświetlacz LCD pracujący z RPi przez SPI. Na rynku są dostępne różne, ale jeden jest do kupienia na allegro i jest stosunkowo tani. Znajdziecie go wpisując " ST7735" z właczonym wyszukiwaniem w treści ogłoszeń. Jego cena to około 30-35pln i jego sercem jest kontroler ST7735. Rozdzielczość 160x128 wystarczy by wyświetlić konsolę i zrobić proste czynność  (np. wyświetlenie IP) lub wyświetlać graficzne informacje potrzebne do interaktywnych zabaw. Instrukcja dodania obsługi ST7735 do Raspbiana jest tutaj. Do programowania interfejsu graficznego użyłem PyGames.
  



 

Silniki dc, servo

 

Najważniejsze by wał silniczka był zakończony ośką lego oraz by łatwo go było przymocować do innych klocków. Pierwsze osiągnąłem przyklejając klejem z cyanopanem nawiercony i lekko przycięty "Axle Pin Tan (nr 3749)" lub bezpośrednio najmniejszą zębatkę (nr 3647)

Drugie zadanie osiągnąłem przyklejając od spodu jakiś płaski klocek Lego.
Chwilowo eksperymentuję i jeszcze nie wybrałem które silniczki będą najlepsze i które sposoby mocowania. Poniżej aktualne próby:



    

Testuję:
Mini silnik mt64 (Botland)
Silnik dc katowy z przekładnią 1:120 (Botland)
Przekladnia Tamiya (Botland)
Servo Redox s90 (Botland)
Małe silniczki wymontowane z zepsutych zabawek (najczęściej wiatraczków z cukierkami)


Oczywiście każdy rodzaj silniczka musi być odpowiednio podpięty do RPi i często zabezpieczony. Sposoby podpięcia są dobrze opisane na Adafruit. Tu podaję linki: servo i silnik DC. Z krokowego chwilowo zrezygnowałem bo potrzebuje zbyt wielu pinów GPIO. Posiadam L293D. Pozwala obsłużyć 2 silniczki DC. Silniczek servo nie potrzebuje zabezpieczenia.

Zostaje kabelek. Nie wybrałem jeszcze jakie będzie złącze. Może po prostu goldpin?

Kamera


W przygotowaniu - jeszcze nie kupiłem :(
Standardowa kamera do Raspberry Pi w obudowie z klocków Lego. Może od razu z mocownikiem do silniczka servo.

Głośniczek


W przygotowaniu - jeszcze nie kupiłem :(
Szukam czegoś bardzo małego. Mniej ważna będzie jakość dźwięku niż wielkość. Wyobrażam sobie, że tak będę przekazywać dziecku polecenia do wykonania na smartfonie i informować o postępach w zabawie.

Czujniki i2c 1wire i inne


Ponieważ już je mam, to aż się prosi by móc je do czegoś wykorzystać, ale jeszcze nie wymyśliłem do czego.
Kompas HMC5883L
czujnik ciśnienia atmosferycznego BMP085
Accelerometr MPU-6050
Termometr DS1820
Czujka ruchu PIR HC-SR501
Ultradźwiękowy czujnik odległości HC-SR04

Sterowanie 


Odkryłem właśnie system MIT App Inventor 2. Po zainstalowaniu na androidzie aplikacji z  PlayStore o nazwie "MIT AI2 Companion" i wejściu na stronę projektu można myszką zaprogramować proste aplikacje. Łączność z Raspberry Pi może być przez wspólny AP WiFi (przez odwołania do http) lub przez Bluetoot (są moduły server/client).Aplikacji dopiero zacząłem pisać (a może klikać :). Poniżej aktualny stan. Znalazłem ciekawy opis po polsku na forbot.pl, ale jeszcze nie przeczytałem.





Do czasu ukończenia aplikacji, używam sterowania przez klawiaturę radiową.

Zastanawiałem się jeszcze nad sterowaniem na podczerwień. Dowolny pilot i czujka TSOP4838, ale to daje dużo mniejsze możliwości niż android.

Zastosowania

 

  1. Prosty robot na kółkach sterowany z androida.
  2. Robot do nauki liczb lub liter. Robot głosowo prosi o wciśnięcie na ekranie smartfona wskazanej liczby lub litery i odpowiednio reaguje głosem i ruchem na sukces i porażkę. Dodatkowo na LCD pokazuje się uśmiechnięta lub zmartwiona twarz.
  3. Robot goniący lub uciekający. Zastosowanie czujki odległości i ruchu.
  4. Nowe pomysły w trakcie wymyślania...