- Raspberry Pi Zero 2W,
- zawiera sterownik serwomechanizmów, czujnik temperatury oraz elementy odpowiedzialne za odtwarzanie dźwięku i rozpoznawanie mowy,
- kluczowe elementy konstrukcji można wydrukować na drukarce 3D.
Budowę urządzenia można podzielić na dwie części. Pierwsza część to głowa robota InMoov zbudowana według opisu umieszczonego na stronie https://www.inmoov.fr. Druga część dotyczy elementów dodanych do pierwotnego projektu. Są to elementy montażowe i podzespoły elektroniczne oraz dodatkowo wydrukowane części pokazane na fotografiach 1…3. Aby zmieścić komputer Raspberry Pi oraz sterownik serwomechanizmów w głowie robota, konieczna była zmiana serwomechanizmu HS 805BB typu gigant na serwomechanizm Feetech FI7635M typu standard. Żeby to zrobić, zaprojektowano specjalny adapter zaprezentowany na fotografii 4. Projekty wszystkich dodatkowo zaprojektowanych części można pobrać na stronie https://github.com/ZW-Robotics/Glowa_robota_InMoov_STL. Z kolei uchwyt do przymocowania kamery dla komputera Raspberry Pi jest dostępny na stronie https://www.thingiverse.com/thing:2197719/files.
Budowa i działanie
Schemat ideowy układu elektronicznego znajduje się na rysunku 1. Do zasilania zastosowano dwa zasilacze. Pierwszy, podłączony do złącza ZAS1, zasila serwomechanizmy, drugi, podłączony do złącza ZAS2, zasila pozostałe podzespoły elektroniczne. Wyeliminowano w ten sposób zakłócenia pochodzące od serwomechanizmów, które mogłyby zaburzyć pracę komputera Raspberry Pi. Element WŁ1 to główny włącznik zasilania.
Do komputera Raspberry Pi opisanego jako MOD1, poprzez port microUSB, podłączona jest karta dźwiękowa. Do karty dźwiękowej za pośrednictwem kabli zakończonych wtykami jack 3,5 mm dołączono mikrofon M1 oraz wzmacniacz audio MOD2, z którego wzmocniony sygnał trafia do głośnika G1. Moduł MOD3 jest odpowiedzialny za sterowanie serwomechanizmami SERWO1...5, które poruszają ruchomymi częściami głowy. Układ scalony U1 to czujnik temperatury, który do poprawnej pracy potrzebuje rezystora R11.
Wygląd stojaka uatrakcyjniono, umieszczając w jego przedniej części napis InMoov, który po włączeniu napięcia zasilania jest automatycznie podświetlany przez diody LED1...10. Rezystory R1...10 ograniczają płynący przez nie prąd.
Montaż i uruchomienie
Po pobraniu plików STL ze strony https://www.inmoov.fr można zacząć drukowanie części. Do tego celu zastosowano drukarkę Creality Ender 5 oraz filament PLA. Mając wydrukowane części, niezbędne elementy montażowe oraz podzespoły elektroniczne, możliwy jest wstępny montaż głowy, co zostało pokazane na fotografii 5.
Kolejnym krokiem jest wydrukowanie części dodanych do pierwotnego projektu, dostępnych na stronie https://github.com/ZW-Robotics/Glowa_robota_InMoov_STL. Do przykręcenia wszystkich dodatkowych uchwytów oraz złożenia stojaka potrzebne są różnego rodzaju śruby M3 oraz wkręty do tworzywa.
Przed wkręceniem śrub M3 konieczne jest nagwintowanie otworów. Po przymocowaniu wszystkich elementów elektronicznych można wykonać pomiędzy nimi połączenia. Większość połączeń jest wykonanych za pomocą gniazd i wtyków BLS oraz JST-SM. Jest też kilka połączeń lutowanych oraz przykręcanych.
Wszystkie szczegóły zostały uchwycone na fotografiach 6…10. Obwód zasilający sterownik serwomechanizmów wykonano przewodami o przekroju 0,75 mm², pozostałe przewody mają przekrój 0,35 mm². Rezystory ograniczające prąd płynący przez diody LED1…10 zostały przylutowane bezpośrednio do ich dodatnich wyprowadzeń, następnie całość zaizolowano osłoną termokurczliwą. Aby łatwiej było zorganizować przewody, zostały one ze sobą skręcone i spięte opaskami kablowymi.
Oprogramowanie
Przed rozpoczęciem pisania programu sterującego konieczne jest zainstalowanie systemu operacyjnego dla komputera Raspberry Pi Zero. Zadanie to ułatwia program Raspberry Pi Imager, który pobrano ze strony https://tiny.pl/c725f. Jest dostępnych wiele wersji systemu operacyjnego, co pokazuje rysunek 2, jednak najbardziej odpowiednia okazała się wersja Raspberry Pi OS (Legancy).
Po zakończeniu instalacji systemu operacyjnego w oknie konfiguracyjnym widocznym na rysunku 3 trzeba włączyć niezbędne interfejsy. Na rysunku 4 zaprezentowano niezwykle przydatne narzędzie, jest to program VNC Viewer, dzięki któremu jest możliwe zdalne połączenie z komputerem Raspberry Pi.
Wystarczy wpisać adres IP komputera Raspberry Pi, który możemy uzyskać, wpisując w terminalu polecenie
oraz hasło dostępu ustalone w trakcie instalacji systemu. Za pomocą terminala należy także zainstalować potrzebne biblioteki języka Python – listę poleceń pokazano na listingu 1.
pi@raspberrypi:~ $ sudo pip3 install adafruit-circuitpython-servokit
pi@raspberrypi:~ $ pip3 install w1thermsensor
pi@raspberrypi:~ $ sudo pip3 install SpeechRecognition
pi@raspberrypi:~ $ sudo pip3 install PyAudio
pi@raspberrypi:~ $ sudo apt-get install flac
pi@raspberrypi:~ $ sudo apt-get install espeak
Aby syntezator mowy prawidłowo wymawiał polskie litery, konieczne jest otwarcie pliku, w którym zapisane są odpowiednie ustawienia, za pomocą polecenia:
/usr/lib/arm-linux-gnueabihf/espeak-data/voices/default
Następnie trzeba wstawić w jego treści następujące linie:
language pl
gender male
intonation 2
Żeby nie uszkodzić ruchomych części robota, został napisany specjalny program, dzięki któremu określa się maksymalne dopuszczalne pozycje serwomechanizmów. Okno programu zostało pokazane na rysunku 5. Otrzymane dane należy następnie zastosować w trakcie pisania programu sterującego.
Gotowy program sterujący można pobrać za pomocą terminala, wpisując polecenie:
Aby program działał poprawnie, komputer Raspberry Pi musi mieć aktywne połączenie z internetem. W powłoce języka Python można obserwować, w jaki sposób program interpretuje wypowiedziane przez użytkownika słowa. Więcej informacji na temat opisanego projektu oraz film prezentujący działanie zaprogramowanej głowy robota InMoov znajduje się na stronie internetowej www.zw-robotics.pl.
Zygmunt Wypich
zygmunt.wypich@zw-robotics.pl
- 100 Ω 10 szt.
- 4,7 kΩ
- dioda LED 5 mm biała matowa 10 szt.
- czujnik temperatury DS18B20
- Raspberry Pi Zero 2W
- karta pamięci microSD o pojemności 16 GB
- oryginalna kamera dla Raspberry Pi 8 Mpx
- adapter do kamery dla Raspberry Pi Zero o długości 150 mm
- przewód OTG microUSB – USB o długości 140 mm
- karta dźwiękowa USB
- wzmacniacz audio PAM8403
- głośnik o mocy 1 W i rezystancji 8 Ω oraz średnicy 50 mm
- mikrofon pojemnościowy o średnicy 6 mm
- sterownik serwomechanizmów Adafruit PCA9685
- serwomechanizm TowerPro SG92R 2 szt.
- serwomechanizm PowerHD 1201MG 3 szt.
- serwomechanizm Feetech FI7635M
- zasilacz z wtykiem DC 5,5×2,5 mm o napięciu wyjściowym 5 V i wydajności prądowej 4 A
- zasilacz z wtykiem DC 5,5×2,1 mm o napięciu wyjściowym 5 V i wydajności prądowej 2 A
- wtyk jack 3,5 mm z przewodem o długości 200 mm
- wtyk microUSB z przewodem o długości 100 mm
- wtyk jack 3,5 mm z przewodem o długości 70 mm
- gniazdo DC 5,5×2,5 mm
- gniazdo DC 5,5×2,1 mm
- gniazdo BLS 1 pin 2 szt.
- gniazdo BLS 2 piny 3 szt.
- gniazdo BLS 3 piny 3 szt.
- gniazdo BLS 5 pin 2 szt.
- pin żeński BLS 27 szt.
- gniazdo JST-SM 3 piny 5 szt.
- pin żeński JST-SM 15 szt.
- wtyk JST-SM 3 pin 5 szt.
- pin męski JST-SM 15 szt.
- przełącznik dwupozycyjny podwójny o wymiarach 24×21 mm
- przewody 0,34 mm² biały, czarny, czerwony
- przewody 0,75 mm² czarny, czerwony
- listwa zaciskowa 2 piny
- tulejka na przewód o przekroju 0,34 mm² i długości 8 mm 4 szt.
- tulejka na przewód o przekroju 0,75 mm² i długości 6 mm 2 szt.
- tulejka na przewód o przekroju 2,5 mm² i długości 8 mm 4 szt.
- wkręt do tworzywa z łbem stożkowym 2×6 mm 4 szt.
- wkręt do tworzywa z łbem walcowym 2,2×6 mm 40 szt.
- wkręt do tworzywa z łbem walcowym 3×12 mm 15 szt.
- śruba z łbem stożkowym M3×8 mm 6 szt.
- śruba z łbem walcowym M3×5 mm 4 szt.
- śruba z łbem walcowym M3×12 mm 7 szt.
- nakrętka M3 7 szt.