Podstawą do stworzenia prezentowanego projektu był "inteligentny królik" Nabaztag z roku 2005. Został on zupełnie przebudowany, aby być kompatybilnym z dzisiejszym światem Internetu Rzeczy (IoT). W przebudowie wykorzystani komputer jednopłytkowy Raspberry Pi 3, moduł Adafruit Motor HAT, mikrofon, kamerę oraz głośnik Philips Soundshooter. Wszystko to umieszczono w oryginalnej obudowie króliczka, zachowując mobilność jego uszu.
Układ odpowiada na komendy podawane głosowo, po naciśnięciu przycisku na czubku królika. Łączy się on z usługą Alexa od Amazonu i odczytuje komunikaty zwrotne poprzez zintegrowany głośnik. Komendy głosowe wykorzystano także do wyzwalania zdarzeń zaprogramowanych w systemie IFTTT (If This Then That - ang. Jeśli to to tamto), dzięki czemu król ma możliwość interakcji z telefonami komórkowymi i innymi urządzeniami w sieci. Mało? działanie królika wyzwalane może być poprzez system IFTTT także z wykorzystaniem np. Gmaila, a królik odczytuje wiadomości e-mail i SMSy z wykorzystaniem syntezatora głosu Ivona. Dodatkowo, ten sam syntezator może posłużyć do odczytywania komunikatów o innych zdarzeniach, na przykład powiadomieniach od kamer bezpieczeństwa.
Oprócz sprzężenia dźwiękowego królik wyposażony jest także w powiadomienia wizualne w postaci kolorowej diody LED oraz zmotoryzowanych uszu. Dodatkowo, wbudowana kamera, pozwala na robienie zdjęć i np. ładowanie ich na Twittera. A wszystko to w słodkiej obudowie niewielkiego króliczka, aby to docenić najlepiej obejrzeć go w akcji:
1. Krótka historia inteligentnych króliczków
Oryginalne króliki Nabaztag wprowadzono na rynek ponad 10 lat temu. Producent reklamował je jako pierwsze inteligentne króliki na świecie, które pełnić rolę miały domowych, cyfrowych asystentów - na wiele lat przed powstaniem takich urządzeń firm Amazon czy Google; jako jedne z pierwszych urządzeń IoT zawitały do wielu domów zwiastując nową erę. Autor nabył takiego króliczka i przez jakiś czas go używał, ale jego możliwości były dosyć ograniczone - prezentował prognozy pogody i podstawowe powiadomienia, jednakże z uwagi na połączenie po sieci Wi-Fi WEP, dedykowane i niezbyt elastyczne oprogramowanie czy własny moduł syntezy głosu nie był on zbyt użyteczny. Szczególnie, że w tamtych czasach też nie było zbyt wielu rzeczy, do których można by go wykorzystać - portale społecznościowe dopiero raczkowały, Nokia rządziła rynkiem telefonicznym a żarówki LEDowe były ciekawą nowinką.
Kolejne wersje króliczków: Nabaztag:Tag oraz Karotz nie zdobyły zbyt wielkiego zainteresowania rynku, głównie z uwagi na ograniczenia sprzętowe i programowe. Dodatkowo, gdy producent przestał wspiera króliczki swoimi serwerami to przestały one być w jakikolwiek sposób użyteczne, gdyż mocno opierały się one na dostarczanych w ten sposób usługach. Na rynku pojawiały się otwarte rozwiązania, mające zastąpić usługi producenta, takie jak OpenKarotz, jaki wykorzystywany był przez pewien czas autora, jednakże około 2 lat temu i te serwisy zostały zamknięte i królik zamarł... na zawsze?
Tyle historii, przejdźmy teraz do współczesności. Autor dobrze wspominając interakcje z króliczkiem zechciał wprowadzić go w erę IoT i zintegrować z siecią. Jak mu to wyszło?
2. Nabaztag 2.0
Impulsem do rozpoczęcia prac nad RabbitPi było uruchomienie dostępu do usług głosowych Amazon Alexa dla Raspberry Pi. Do korzystania z tej usługi wystarczyło podłączyć pojedynczy przycisk do 'Maliny', co nie było problemem gdyż Nabaztag posiada zintegrowany na czubku głowy przycisk. Autor szybko uruchomił na Raspberry Pi 3 skrypt AlexaPi opracowany przez Sama Machina, który aktywowany był poprzez naciśnięcie królika. Po zakończeniu innych projektów (m.in. AlexaPhone) rozpoczął on prace nad nowym inteligentnym królikiem.
Autor zaplanował szereg usprawnień w porównaniu do klasycznego Nabaztaga i założył, że królik będzie posiadał szereg funkcji:
* Wyszukiwanie głosowe i odczyt wyników wyszukiwania.
* Odczytywanie powiadomień głosem.
* Poruszanie uszkami i zapalanie diod LED.
* Robienie zdjęć i umożliwienie zdalnego monitorowania.
* Interakcje z tzw. smart socketami, wykorzystywanymi do sterowania urządzeniami np. żarówkami.
3. Królik rozmontowany
Pierwszym etapem projektu było rozmontowanie oryginalnej konstrukcji królika i sprawdzenie które z części można powtórnie wykorzystać. Pierwszą z nich były uszy, które przymocowane są na magnesach, więc łatwo je było odczepić. Obudowa królika zamocowana była dwoma śrubami, a w środku odnaleźć można było całą elektronikę, LEDy i sterowniki silników, kręcących uszami.
Autor zamierzał zachować silniki, więc odciął tylko kable, łączące je z elektroniką i zabrał się za jej wymontowanie. Ciekawym znaleziskiem w środku była pełnowymiarowa karta Wi-Fi PCMCIA. Tak 10 lat temu łączyło się urządzenia embedded z siecią bezprzewodową. Wszystkie elementy udało się bezproblemowo wymontować, a w środku został tylko plastikowy element wspierający silniki i przycisk, co dało sporo miejsca na zamontowanie nowych układów.
4. Mówić i słuchać
Nie można mieć sterowanego głosem gadającego królika bez dwóch elementów: głośnika i mikrofonu. Dlatego też elementy te znalazły się na liście rzeczy do zamontowania w środku. Dopasowanie odpowiednich elementów nie było trudne, gdyż Raspberry Pi nie jest zbyt kapryśne, jeśli chodzi o mikrofony na USB, dlatego bez problemu udało się wykorzystać jako wejście audio MSI StarCam - webcam z zintegrowanym mikrofonem. W systemie RPi wystarczyło ustawić poziom głośności na maksimum i ten mikrofon dawał bardzo dobre rezultaty. Aby oszczędzić na miejscu zajmowanym wewnątrz obudowy webcam został rozmontowany - autor pozbył się obiektywu kamery oraz obudowy webcamu. W obudowie królika wywiercona został niewielki otwór, a sam mikrofon podłączony do jednego z gniazd USB Raspberry Pi.
W innym swoim projekcie - AlexaPhone - autor wykorzystał głośnik KitSound MiniBuddy. Okazał się on być bardzo dobry w tego rodzaju urządzeniach, ale niestety okazało się teraz, że w ich projekcie nastąpiła zmiana i nie da się ich już ładować poprzez złącze microUSB. Z uwagi na to autor poszukał innych głośników i jego uwaga padła na Philips SoundShooter. Niestety nie udało się zmieścić głośnika wraz z obudową wewnątrz króliczka, więc konieczne okazało się zdjęcie obudowy z głośnika i zamontowanie go w ten sposób wewnątrz obudowy (z pomocą kleju) w miejscu w którym znajdował się oryginalny głośnik Nabaztaga. Bateria i wzmacniacz także znalazły swoje miejsce wewnątrz obudowy. Z uwagi na zasilanie bateryjne tego wzmacniacza co jakiś czas trzeba naładować baterie - nie jest to wielce problematyczne, więc autor przystał na takie rozwiązanie, aby już dalej nie musieć kombinować z nagłośnieniem słów królika.
5. Czytać jak królik
Po rozwiązaniu wszystkich kwestii związanych z obsługą usług Alexa autor przystąpił do realizacji kolejnego zadania - jak zmusić królika do odczytywania powiadomień? W oryginalnym Nabaztagu syntezator mowy był całkiem niezły. Do tego stopnia, że skróty takie jak mm i cm odczytywał odpowiednio jako milimetry i centymetry. Autor chciał użyć w swojej konstrukcji równie dobrego systemu, pozwalającego na naturalnie brzmiące odczytywanie krótkich komunikatów, rozumienie znaków takich jak & czy odpowiednie interpertowanie emotikon.
Jak ze wszystkim, tak i z tym na Raspberry Pi jest mnóstwo dróg, jakimi można pójść, aby rozwiązać problem. Autor zapoznał się z kilkoma syntezatorami głosu i zdecydował się wybrać syntezator Ivona, z uwagi na to, że silnik tego syntezatora to zasadniczo ten sam silnik z jakiego korzysta Alexa. Jak zauważa autor jest to jedno z najlepszych rozwiązań tego typu, a dodatkowo, dzięki Zacharemu Bearsowi dostępny jest wygodny wrapper do tego systemu dla języka Python - Pyvona.
Aby rozpocząć korzystanie z systemu najpierw trzeba założyć developerskie konto na platformie webowej - zupełnie tak jak jest w przypadku Alexa. Konto generuje wszystkie potrzebne do uruchomienia programu informacje, jakie wpisujemy w naszej aplikacji, w tym przypadku prostego programu do odczytywania powiadomień na głos. Darmowe konto zezwala na odczytanie do 50 tysięcy wiadomości, co jest w zupełności wystarczające jak na zwykłe, domowe potrzeby.
Instalacja i konfiguracja Pyvony jest bardzo prosta. Autorowi zajęło zaledwie kilka minut przejście przez wszystkie kroki i uruchomienie prostego skryptu, który odczytywałby komunikaty, jakie mu się wpisze. Oczywiście w docelowej aplikacji system nie ma odczytywać gotowych komunikatów - ma odczytywać dynamicznie generowane wiadomości z powiadomień.
6. Że co?
Królik częściowo już jest gotowy (chociaż leży w kawałkach na biurku): umie słuchać, umie mówić, ale potrzebny jest jeszcze jakiś mechanizm do odbierania różnego rodzaju powiadomień, które odczytywać miałaby Ivona. Autor zapoznał się z szeregiem rozwiązań: usługami on-line, adapterami kard SIM czy też mechanizmami z Twittera i Dropboxa. Finalnie zdecydował się na wykorzystanie biblioteki imaplib do Pythona. Umożliwia ona połączenie się z kontami e-mail poprzez IMAP i bardzo dobrze integruje się z usługami IFTTT. Powiadomienia wysyłane są na RabbitPi w postaci e-maili, które to są odczytywany.
Po zapoznaniu się z dokumentacją imaplib oraz przykładami, jakie znaleźć można w Internecie autor skonstruował prosty skrypt, który sprawdza konto pocztowe na Gmail w regularnych interwałach czasowych i wypisuje na ekranie tekst przesłany mejlem na konto. Teraz wystarczyło tylko dodać jednego IFa w kodzie, aby skrypt reagował na wiadomości wysłane od samego siebie oraz zmienić wyświetlanie wiadomości na ekranie na przesyłanie jej do systemu Ivona, który pozwala na odczyt tekstu.
Jako że okazało się, że odczytywanie mejli nie jest wcale takie proste, głównie z uwagi na skomplikowany sposób w jakich główny tekst wiadomości może być zapisywany, autor zdecydował się podejść do sprawy inaczej i jako nośnik wiadomości wykorzystał nie treść e-maila a jego tytuł. W ten sposób stworzył skrypt, który sprawdza konto pocztowe i odczytuje na głos tematy e-maili wysłanych na nie przez samego siebie. Wystarczyło zapętlić teraz skrypt, tak żeby cały czas sprawdzał konto - kilka razy na minutę i odczytywał najnowsze wiadomości w zasadzie w czasie rzeczywistym. Jedyne na co trzeba uważać to to, że hasło do konta przechowywane jest w kodzie skryptu jako zwykły tekst, co oznacza, że na pewnym etapie projektu dobrze jest całość zaszyfrować, aby uniemożliwić podglądnięcie hasła niepowołanym osobom.
Oczywiście autor jest świadomy, że taki system da się skonstruować lepiej, wydajniej i bardziej elegancko wykorzystując Pythona, ale zastosowany przez niego sposób działa i jest dostatecznie dobry, dla opisywanego systemu.
Na koniec do programu dodano jeszcze interfejs uszu i diody LED, co powoduje, że podczas odczytywania powiadomień uszy królika się poruszają, a dioda LED podświetla obudowę.
7. Królik w kapeluszu
Jedną z najbardziej charakterystycznych funkcji Nabaztaga było poruszanie uszkami przy powiadomieniach. Możma było skonfigurować je do np. ustawiania się w konkretnej pozycji manualnie je pozycjonując, bądź konfigurując to z poziomu oprogramowania. Autor za cel przyjął, aby w ogóle wprowadzić je w ruch. Jednakże aby to zrobić, najpierw musiał się nauczyć jak w ogóle obsługiwać silniki z poziomu Raspberry Pi, jako że nie miał z tym do czynienia.
Po pierwsze trzeba było ustalić jaki rodzaj silników, znajduje się w Króliczku. Z uwagi na to, że z każdego silnika wychodzą jedynie dwa przewody wynikało, że są to zwykłe silniki DC. Domysł ten potwierdził fantastyczny poradnik "Hack the Nabaztag" opracowany przez użytkownika Liana_B. Z uwagi na elastyczność Raspberry Pi istnieje szeroka gama kontrolerów, jakie wykorzystać było można do kontroli tego rodzaju silników. Wybór padł na prosty kontroler silników krokowych i DC od Adafruit w postaci modułu HAT (ang. kapelusz). Wybór ten podyktowany był dobrym opisem modułów, jakie udostępnia Adafruit. Dodatkowo, moduły HAT są bardzo kompaktowe i łatwo podłączają się do Raspberry Pi, co ułatwia montaż. Fakt, że korzystają jedynie z interfejsu I²C dodatkowo ułatwił sprawę, gdyż nie zabierał pinów GPIO, potrzebnych do sterowania diodami LED i kontroli przycisku, wykorzystywanego przez system Alexa.
Polutowanie modułu HAT było bardzo proste i już po chwili udało się go zamontować i odpalić wraz z RPi, tak aby kontrolować poruszanie silników uszków królika. Autor początkowo planował zasilać silniki z powerbanku USB, ale okazało się, że daje on za mało prądu, dlatego też zasilanie modułu HAT zostało podłączone pod gniazdko zasilania Nabaztaga, tak, że udało się wykorzystać stary zasilacz do systemu, jako że dostarczał on odpowiednią moc.
Gdy wszystko było już połączone, autor uruchomił przykładowy skrypt do sterowania silników DC, jaki załączony jest do modułu HAT. Wszystko działało doskonale, jednakże dało się słyszeć wysoki pisk ze strony silników, jakby ktoś przejeżdżał mokrym palcem po krawędzi kieliszka. Jako że układ miał działać w domu, a uszy miały ruszać się podczas odczytywania komunikatów, coś trzeba było z tym zrobić. W pierwszej kolejności autor sprawdził działanie systemu przy różnych napięciach zasilających - nie miało to wpływu. Następnie, z uwagi na fakt, że silnik sterowany jest PWM, który może generować takie dźwięki, autor chciał dolutować kondensator równolegle z silnikiem (jakkolwiek okazało się, że już taki element się tam znajduje). Finalnie, po analizie kodu, okazało sie, że dźwięk ten wydobywa się z układu podczas zmiany prędkości poruszania się uszu - wystarczyło ustawić prędkość obrotu silnika na stałą wartość i problem ustąpił.
Po stworzeniu kilku testowych skryptów autor stworzył dwa tryby ruchu - jeden obrót, który wykorzystał jako informację o załączeniu się systemu oraz tryb ciągłego poruszania się, jaki zaimplementowany został podczas odczytywania powiadomień z Gmaila poprzez Ivonę czy podczas kontaktów z systemem Alexa.
8. Kamera i inne dodatki
Przed rozpoczęciem montażu, autor przetestował wszystkie elementy. Wszędzie gdzie to możliwe, elementy zostały połączone kabelkami - jak uczy doświadczenie, każdy układ będzie się chciało kiedyś rozebrać np. w celu modyfikacji. Dodatkowo autor sporządził prosty schemat połączeń, aby uprościć przyszłe modyfikacje, szczególnie że docelowo cały układ zamknięty będzie w ciasnej obudowie.
Autor zdecydował się jeszcze na dodanie do układu kamery - wybrał tutaj PiCamera w wersji drugiej, wyposażonej w matrycę 8 MP. Jedna z wersji Nabaztaga - Karotz - wyposażona była w kamerkę umieszczoną w brzuchu, jednakże wtedy nie działało to zbyt dobrze. Fajnie by było, aby kamera w tej wersji była bardziej użyteczna, np. aktywowana głosowo, do robienia selfie lub zdalnego monitoringu. Zwłaszcza ta druga funkcja wymaga jednak, aby system odpowiedzialny za obsługę kamery pracował równolegle i niezależnie z innymi systemami Króliczka.
Kamera została zamocowana w obudowie na metalowym kątowniku, a następnie po dokładnym zmierzeniu w obudowie wywiercono otwór dla obiektywu kamery. Otwór udało się spozycjonować niemalże idealnie - na tyle dobrze, że wystarczyło dodanie kilku podkładek pod kątownik, aby kamera mogła przez dziurkę patrzeć na świat.
9. Co tam masz doktorku? Recepty IFTTT
Fenomenalną kwestią podczas budowy dowolnego systemu Internetu Rzeczy jest ilość usług webowych, jakie dostępne są dookoła. A system IFTTT pozwala na powiązanie ze sobą wszystkich tych usług w bardzo prosty i funkcjonalny sposób. Jest to serwis on-line, który po zalogowaniu pozwala na integrację wielu usług w sieci - Gmail, Facebook, Twitter i Amazon Alexa - wszystkie tam są, oczywiście dostępne są też inne usługi, takie jak systemy kontroli inteligentnych żarówek, termostatów i gniazdek.
IFTTT konfiguruje się zapisując mu tzw. 'recepty', będące prostymi komendami IF ... THEN, jak zasady w Outlook lub funkcja IF w SQL czy różnych językach programowania. Dzięki temu skonstruować można prosto recepty, mówiące np. "JEŻELI ktoś otagował mnie na zdjęciu na Facebooku TO wyślij do mnie e-mail z tytułem >>O kurcze, [imię i nazwisko osoby] otagowała Cię na zdjęciu na Facebooku<<" - tak wysłany e-mail zostanie odczytany przez systemy RabbitPi jako powiadomienie. IFTTT powiązać można też z usługami Alexa, przywiązując konkretne słowa do czynności, np. gdy powiem "Włącz laser" to Alexa przekaże informacje do IFTTT, które uruchomi laser dyskotekowy, podpięty do sieci.
Idąc dalej - IFTTT zainstalować można też na telefonie. Działa to w obie strony. Można z poziomu inteligentnej Rzeczy obsługiwać telefon, np. zapisać w IFTTT receptę, która pozwoli poprzez komunikat głosowy uruchomić odtwarzanie muzyki na telefonie, ale także dodać w smartfonie np. przycisk, który umożliwi zrobienie selfie przez RabbitPi i załadowanie go od razu na Twittera. Ta funkcja umożliwia też odczytywanie wiadomości SMS - programujemy receptę IFTTT, która po otrzymaniu SMSa wyśle do nas e-mail z treścią i autorem SMSa w tytule.
Wykorzystanie IFTTT jest bardzo proste, dzięki temu zaprogramowanie wszystkich funkcji RabbitPio było bardzo proste i łatwe.
10. Montaż i testy
Montaż wszystkich elementów nie był zbyt prosty, bo trzeba było zmieścić wszystkie elementy w ciasnej obudowie. Jakkolwiek autor nie byłby pewien, że się zmieszczą, to jednak ich 'wepchnięcie' do obudowy w odpowiedni sposób, wraz z kablami, było zadaniem wymagającym chirurgicznej precyzji.
Po zmontowaniu wszystkiego kable zostały spięte spinkami, dzięki czemu autor miał pewność, że zamykając obudowę nie odłączy się przypadkowo żaden z kabelków łączących elementy wewnątrz królika.
11. Gotowy króliczku?[/b
]
Gdy wszystko zostało zmontowane przyszedł czas na odcięcie pępowiny - odpięcie RabbitPi od kabla ethernet i przeniesienie się do mieszkania, gdzie Wi-Fi ma dobry zasięg a pisać program można bez problemu poprzez SSH. Pierwsze uruchomienie nie było zbyt fortunne - Królik nie widział sygnału Wi-Fi. Rozwiązanie tej kwestii okazało się bardzo proste - okazuje się, że Pi 3 widzi tylko sygnały sieci bezprzewodowej na kanałach od 1 do 11, a Wi-Fi w domu autora działało na kanale 13. Kilka zmian w konfiguracji routera później wszystko działało już jak należy.
Dalej przyszła kolej na integrację rozmaitych skryptów. Pierwszym był plik main.py AlexaPi - autor dodał do niego linijki odpowiedzialne za mruganie LEDami i poruszanie uszkami królika. Dodatkowo zmodyfikowany został standardowy komunikat "Hello" witający użytkownika i zastąpiony kreskówkowym dźwiękiem.
Drugi skrypt - rabbit.py - zwiera w sobie funkcje odbierania wiadomości z Gmaila i odczytywanie ich poprzez Pyvona. Dodatkowo w tym skrypcie zapisano robienie zdjęć i dodawanie ich na Twittera (konto @NabazPi) poprzez Twythona. Polecenie wykonania zdjęcia wysyłane jest do RabbitPi poprzez e-mail z "selfie" w tytule.
[b]12. Nabaztag powrócił!
Królik jest gotowy do akcji. Jak działa sprawdzić można na zaprezentowanym na górze filmiku. Jednakże autor już planuje pewne zmiany w jego kontrukcji:
Testowany było wywoływanie Alexa poprzez klaśnięcie, jednakże okazało się, że ta funkcja nie sprawuje się zbyt dobra, z uwagi na tło, jakie także wychwytuje mikrofon. Istnieją jednakże inne metody aktywacji Alexa - pilotami na podczerwień, kontrolerami do gier czy nawet funkcja aktywnego słuchania - AlexaPi cały czas nasłuchuje i aktywowana jest słowem kluczowym.
Dioda LED świecąca na brzuszku królika zamieniona ma zostać na wyświetlacz Adafruit Neopixel, który pozwoli na lepsze obrazowanie powiadomień. Dodatkowo w kodzie autor planuje wyciszyć powiadomienia w nocy, a także poszerzyć ich funkcjonalność, na przykład dodać różne losowe teksty na potwierdzenie wykonania zdjęcia. Planowane jest także nauczenie królika tańczyć Macarenę uszami.
Autor posiada w domu jeszcze jednego Nabaztaga oraz Karotz, więc planowane są dalsze kontrukcje. Króliki te mają idealne wymiary do montażu Raspberry Pi wewnątrz. A może producent tych królików trzyma gdzieś zapas niesprzedanych egzemplarzy? z pewnością przy wykorzystaniu drukarki 3D i dedykowanych modułów HAT udałoby się je ożywić i podłączyć do internetu rzeczy poprzez popularną 'Malinę'.
Źródło: http://www.instructables.com/id/RabbitPi-the-Alexa-Enabled-IFTTT-Connected-Ear-Wig/?ALLSTEPS
Układ odpowiada na komendy podawane głosowo, po naciśnięciu przycisku na czubku królika. Łączy się on z usługą Alexa od Amazonu i odczytuje komunikaty zwrotne poprzez zintegrowany głośnik. Komendy głosowe wykorzystano także do wyzwalania zdarzeń zaprogramowanych w systemie IFTTT (If This Then That - ang. Jeśli to to tamto), dzięki czemu król ma możliwość interakcji z telefonami komórkowymi i innymi urządzeniami w sieci. Mało? działanie królika wyzwalane może być poprzez system IFTTT także z wykorzystaniem np. Gmaila, a królik odczytuje wiadomości e-mail i SMSy z wykorzystaniem syntezatora głosu Ivona. Dodatkowo, ten sam syntezator może posłużyć do odczytywania komunikatów o innych zdarzeniach, na przykład powiadomieniach od kamer bezpieczeństwa.
Oprócz sprzężenia dźwiękowego królik wyposażony jest także w powiadomienia wizualne w postaci kolorowej diody LED oraz zmotoryzowanych uszu. Dodatkowo, wbudowana kamera, pozwala na robienie zdjęć i np. ładowanie ich na Twittera. A wszystko to w słodkiej obudowie niewielkiego króliczka, aby to docenić najlepiej obejrzeć go w akcji:
1. Krótka historia inteligentnych króliczków
Oryginalne króliki Nabaztag wprowadzono na rynek ponad 10 lat temu. Producent reklamował je jako pierwsze inteligentne króliki na świecie, które pełnić rolę miały domowych, cyfrowych asystentów - na wiele lat przed powstaniem takich urządzeń firm Amazon czy Google; jako jedne z pierwszych urządzeń IoT zawitały do wielu domów zwiastując nową erę. Autor nabył takiego króliczka i przez jakiś czas go używał, ale jego możliwości były dosyć ograniczone - prezentował prognozy pogody i podstawowe powiadomienia, jednakże z uwagi na połączenie po sieci Wi-Fi WEP, dedykowane i niezbyt elastyczne oprogramowanie czy własny moduł syntezy głosu nie był on zbyt użyteczny. Szczególnie, że w tamtych czasach też nie było zbyt wielu rzeczy, do których można by go wykorzystać - portale społecznościowe dopiero raczkowały, Nokia rządziła rynkiem telefonicznym a żarówki LEDowe były ciekawą nowinką.
Kolejne wersje króliczków: Nabaztag:Tag oraz Karotz nie zdobyły zbyt wielkiego zainteresowania rynku, głównie z uwagi na ograniczenia sprzętowe i programowe. Dodatkowo, gdy producent przestał wspiera króliczki swoimi serwerami to przestały one być w jakikolwiek sposób użyteczne, gdyż mocno opierały się one na dostarczanych w ten sposób usługach. Na rynku pojawiały się otwarte rozwiązania, mające zastąpić usługi producenta, takie jak OpenKarotz, jaki wykorzystywany był przez pewien czas autora, jednakże około 2 lat temu i te serwisy zostały zamknięte i królik zamarł... na zawsze?
Tyle historii, przejdźmy teraz do współczesności. Autor dobrze wspominając interakcje z króliczkiem zechciał wprowadzić go w erę IoT i zintegrować z siecią. Jak mu to wyszło?
2. Nabaztag 2.0
Impulsem do rozpoczęcia prac nad RabbitPi było uruchomienie dostępu do usług głosowych Amazon Alexa dla Raspberry Pi. Do korzystania z tej usługi wystarczyło podłączyć pojedynczy przycisk do 'Maliny', co nie było problemem gdyż Nabaztag posiada zintegrowany na czubku głowy przycisk. Autor szybko uruchomił na Raspberry Pi 3 skrypt AlexaPi opracowany przez Sama Machina, który aktywowany był poprzez naciśnięcie królika. Po zakończeniu innych projektów (m.in. AlexaPhone) rozpoczął on prace nad nowym inteligentnym królikiem.
Autor zaplanował szereg usprawnień w porównaniu do klasycznego Nabaztaga i założył, że królik będzie posiadał szereg funkcji:
* Wyszukiwanie głosowe i odczyt wyników wyszukiwania.
* Odczytywanie powiadomień głosem.
* Poruszanie uszkami i zapalanie diod LED.
* Robienie zdjęć i umożliwienie zdalnego monitorowania.
* Interakcje z tzw. smart socketami, wykorzystywanymi do sterowania urządzeniami np. żarówkami.
3. Królik rozmontowany
Pierwszym etapem projektu było rozmontowanie oryginalnej konstrukcji królika i sprawdzenie które z części można powtórnie wykorzystać. Pierwszą z nich były uszy, które przymocowane są na magnesach, więc łatwo je było odczepić. Obudowa królika zamocowana była dwoma śrubami, a w środku odnaleźć można było całą elektronikę, LEDy i sterowniki silników, kręcących uszami.
Autor zamierzał zachować silniki, więc odciął tylko kable, łączące je z elektroniką i zabrał się za jej wymontowanie. Ciekawym znaleziskiem w środku była pełnowymiarowa karta Wi-Fi PCMCIA. Tak 10 lat temu łączyło się urządzenia embedded z siecią bezprzewodową. Wszystkie elementy udało się bezproblemowo wymontować, a w środku został tylko plastikowy element wspierający silniki i przycisk, co dało sporo miejsca na zamontowanie nowych układów.
4. Mówić i słuchać
Nie można mieć sterowanego głosem gadającego królika bez dwóch elementów: głośnika i mikrofonu. Dlatego też elementy te znalazły się na liście rzeczy do zamontowania w środku. Dopasowanie odpowiednich elementów nie było trudne, gdyż Raspberry Pi nie jest zbyt kapryśne, jeśli chodzi o mikrofony na USB, dlatego bez problemu udało się wykorzystać jako wejście audio MSI StarCam - webcam z zintegrowanym mikrofonem. W systemie RPi wystarczyło ustawić poziom głośności na maksimum i ten mikrofon dawał bardzo dobre rezultaty. Aby oszczędzić na miejscu zajmowanym wewnątrz obudowy webcam został rozmontowany - autor pozbył się obiektywu kamery oraz obudowy webcamu. W obudowie królika wywiercona został niewielki otwór, a sam mikrofon podłączony do jednego z gniazd USB Raspberry Pi.
W innym swoim projekcie - AlexaPhone - autor wykorzystał głośnik KitSound MiniBuddy. Okazał się on być bardzo dobry w tego rodzaju urządzeniach, ale niestety okazało się teraz, że w ich projekcie nastąpiła zmiana i nie da się ich już ładować poprzez złącze microUSB. Z uwagi na to autor poszukał innych głośników i jego uwaga padła na Philips SoundShooter. Niestety nie udało się zmieścić głośnika wraz z obudową wewnątrz króliczka, więc konieczne okazało się zdjęcie obudowy z głośnika i zamontowanie go w ten sposób wewnątrz obudowy (z pomocą kleju) w miejscu w którym znajdował się oryginalny głośnik Nabaztaga. Bateria i wzmacniacz także znalazły swoje miejsce wewnątrz obudowy. Z uwagi na zasilanie bateryjne tego wzmacniacza co jakiś czas trzeba naładować baterie - nie jest to wielce problematyczne, więc autor przystał na takie rozwiązanie, aby już dalej nie musieć kombinować z nagłośnieniem słów królika.
5. Czytać jak królik
Po rozwiązaniu wszystkich kwestii związanych z obsługą usług Alexa autor przystąpił do realizacji kolejnego zadania - jak zmusić królika do odczytywania powiadomień? W oryginalnym Nabaztagu syntezator mowy był całkiem niezły. Do tego stopnia, że skróty takie jak mm i cm odczytywał odpowiednio jako milimetry i centymetry. Autor chciał użyć w swojej konstrukcji równie dobrego systemu, pozwalającego na naturalnie brzmiące odczytywanie krótkich komunikatów, rozumienie znaków takich jak & czy odpowiednie interpertowanie emotikon.
Jak ze wszystkim, tak i z tym na Raspberry Pi jest mnóstwo dróg, jakimi można pójść, aby rozwiązać problem. Autor zapoznał się z kilkoma syntezatorami głosu i zdecydował się wybrać syntezator Ivona, z uwagi na to, że silnik tego syntezatora to zasadniczo ten sam silnik z jakiego korzysta Alexa. Jak zauważa autor jest to jedno z najlepszych rozwiązań tego typu, a dodatkowo, dzięki Zacharemu Bearsowi dostępny jest wygodny wrapper do tego systemu dla języka Python - Pyvona.
Aby rozpocząć korzystanie z systemu najpierw trzeba założyć developerskie konto na platformie webowej - zupełnie tak jak jest w przypadku Alexa. Konto generuje wszystkie potrzebne do uruchomienia programu informacje, jakie wpisujemy w naszej aplikacji, w tym przypadku prostego programu do odczytywania powiadomień na głos. Darmowe konto zezwala na odczytanie do 50 tysięcy wiadomości, co jest w zupełności wystarczające jak na zwykłe, domowe potrzeby.
Instalacja i konfiguracja Pyvony jest bardzo prosta. Autorowi zajęło zaledwie kilka minut przejście przez wszystkie kroki i uruchomienie prostego skryptu, który odczytywałby komunikaty, jakie mu się wpisze. Oczywiście w docelowej aplikacji system nie ma odczytywać gotowych komunikatów - ma odczytywać dynamicznie generowane wiadomości z powiadomień.
6. Że co?
Królik częściowo już jest gotowy (chociaż leży w kawałkach na biurku): umie słuchać, umie mówić, ale potrzebny jest jeszcze jakiś mechanizm do odbierania różnego rodzaju powiadomień, które odczytywać miałaby Ivona. Autor zapoznał się z szeregiem rozwiązań: usługami on-line, adapterami kard SIM czy też mechanizmami z Twittera i Dropboxa. Finalnie zdecydował się na wykorzystanie biblioteki imaplib do Pythona. Umożliwia ona połączenie się z kontami e-mail poprzez IMAP i bardzo dobrze integruje się z usługami IFTTT. Powiadomienia wysyłane są na RabbitPi w postaci e-maili, które to są odczytywany.
Po zapoznaniu się z dokumentacją imaplib oraz przykładami, jakie znaleźć można w Internecie autor skonstruował prosty skrypt, który sprawdza konto pocztowe na Gmail w regularnych interwałach czasowych i wypisuje na ekranie tekst przesłany mejlem na konto. Teraz wystarczyło tylko dodać jednego IFa w kodzie, aby skrypt reagował na wiadomości wysłane od samego siebie oraz zmienić wyświetlanie wiadomości na ekranie na przesyłanie jej do systemu Ivona, który pozwala na odczyt tekstu.
Jako że okazało się, że odczytywanie mejli nie jest wcale takie proste, głównie z uwagi na skomplikowany sposób w jakich główny tekst wiadomości może być zapisywany, autor zdecydował się podejść do sprawy inaczej i jako nośnik wiadomości wykorzystał nie treść e-maila a jego tytuł. W ten sposób stworzył skrypt, który sprawdza konto pocztowe i odczytuje na głos tematy e-maili wysłanych na nie przez samego siebie. Wystarczyło zapętlić teraz skrypt, tak żeby cały czas sprawdzał konto - kilka razy na minutę i odczytywał najnowsze wiadomości w zasadzie w czasie rzeczywistym. Jedyne na co trzeba uważać to to, że hasło do konta przechowywane jest w kodzie skryptu jako zwykły tekst, co oznacza, że na pewnym etapie projektu dobrze jest całość zaszyfrować, aby uniemożliwić podglądnięcie hasła niepowołanym osobom.
Oczywiście autor jest świadomy, że taki system da się skonstruować lepiej, wydajniej i bardziej elegancko wykorzystując Pythona, ale zastosowany przez niego sposób działa i jest dostatecznie dobry, dla opisywanego systemu.
Na koniec do programu dodano jeszcze interfejs uszu i diody LED, co powoduje, że podczas odczytywania powiadomień uszy królika się poruszają, a dioda LED podświetla obudowę.
7. Królik w kapeluszu
Jedną z najbardziej charakterystycznych funkcji Nabaztaga było poruszanie uszkami przy powiadomieniach. Możma było skonfigurować je do np. ustawiania się w konkretnej pozycji manualnie je pozycjonując, bądź konfigurując to z poziomu oprogramowania. Autor za cel przyjął, aby w ogóle wprowadzić je w ruch. Jednakże aby to zrobić, najpierw musiał się nauczyć jak w ogóle obsługiwać silniki z poziomu Raspberry Pi, jako że nie miał z tym do czynienia.
Po pierwsze trzeba było ustalić jaki rodzaj silników, znajduje się w Króliczku. Z uwagi na to, że z każdego silnika wychodzą jedynie dwa przewody wynikało, że są to zwykłe silniki DC. Domysł ten potwierdził fantastyczny poradnik "Hack the Nabaztag" opracowany przez użytkownika Liana_B. Z uwagi na elastyczność Raspberry Pi istnieje szeroka gama kontrolerów, jakie wykorzystać było można do kontroli tego rodzaju silników. Wybór padł na prosty kontroler silników krokowych i DC od Adafruit w postaci modułu HAT (ang. kapelusz). Wybór ten podyktowany był dobrym opisem modułów, jakie udostępnia Adafruit. Dodatkowo, moduły HAT są bardzo kompaktowe i łatwo podłączają się do Raspberry Pi, co ułatwia montaż. Fakt, że korzystają jedynie z interfejsu I²C dodatkowo ułatwił sprawę, gdyż nie zabierał pinów GPIO, potrzebnych do sterowania diodami LED i kontroli przycisku, wykorzystywanego przez system Alexa.
Polutowanie modułu HAT było bardzo proste i już po chwili udało się go zamontować i odpalić wraz z RPi, tak aby kontrolować poruszanie silników uszków królika. Autor początkowo planował zasilać silniki z powerbanku USB, ale okazało się, że daje on za mało prądu, dlatego też zasilanie modułu HAT zostało podłączone pod gniazdko zasilania Nabaztaga, tak, że udało się wykorzystać stary zasilacz do systemu, jako że dostarczał on odpowiednią moc.
Gdy wszystko było już połączone, autor uruchomił przykładowy skrypt do sterowania silników DC, jaki załączony jest do modułu HAT. Wszystko działało doskonale, jednakże dało się słyszeć wysoki pisk ze strony silników, jakby ktoś przejeżdżał mokrym palcem po krawędzi kieliszka. Jako że układ miał działać w domu, a uszy miały ruszać się podczas odczytywania komunikatów, coś trzeba było z tym zrobić. W pierwszej kolejności autor sprawdził działanie systemu przy różnych napięciach zasilających - nie miało to wpływu. Następnie, z uwagi na fakt, że silnik sterowany jest PWM, który może generować takie dźwięki, autor chciał dolutować kondensator równolegle z silnikiem (jakkolwiek okazało się, że już taki element się tam znajduje). Finalnie, po analizie kodu, okazało sie, że dźwięk ten wydobywa się z układu podczas zmiany prędkości poruszania się uszu - wystarczyło ustawić prędkość obrotu silnika na stałą wartość i problem ustąpił.
Po stworzeniu kilku testowych skryptów autor stworzył dwa tryby ruchu - jeden obrót, który wykorzystał jako informację o załączeniu się systemu oraz tryb ciągłego poruszania się, jaki zaimplementowany został podczas odczytywania powiadomień z Gmaila poprzez Ivonę czy podczas kontaktów z systemem Alexa.
8. Kamera i inne dodatki
Przed rozpoczęciem montażu, autor przetestował wszystkie elementy. Wszędzie gdzie to możliwe, elementy zostały połączone kabelkami - jak uczy doświadczenie, każdy układ będzie się chciało kiedyś rozebrać np. w celu modyfikacji. Dodatkowo autor sporządził prosty schemat połączeń, aby uprościć przyszłe modyfikacje, szczególnie że docelowo cały układ zamknięty będzie w ciasnej obudowie.
Autor zdecydował się jeszcze na dodanie do układu kamery - wybrał tutaj PiCamera w wersji drugiej, wyposażonej w matrycę 8 MP. Jedna z wersji Nabaztaga - Karotz - wyposażona była w kamerkę umieszczoną w brzuchu, jednakże wtedy nie działało to zbyt dobrze. Fajnie by było, aby kamera w tej wersji była bardziej użyteczna, np. aktywowana głosowo, do robienia selfie lub zdalnego monitoringu. Zwłaszcza ta druga funkcja wymaga jednak, aby system odpowiedzialny za obsługę kamery pracował równolegle i niezależnie z innymi systemami Króliczka.
Kamera została zamocowana w obudowie na metalowym kątowniku, a następnie po dokładnym zmierzeniu w obudowie wywiercono otwór dla obiektywu kamery. Otwór udało się spozycjonować niemalże idealnie - na tyle dobrze, że wystarczyło dodanie kilku podkładek pod kątownik, aby kamera mogła przez dziurkę patrzeć na świat.
9. Co tam masz doktorku? Recepty IFTTT
Fenomenalną kwestią podczas budowy dowolnego systemu Internetu Rzeczy jest ilość usług webowych, jakie dostępne są dookoła. A system IFTTT pozwala na powiązanie ze sobą wszystkich tych usług w bardzo prosty i funkcjonalny sposób. Jest to serwis on-line, który po zalogowaniu pozwala na integrację wielu usług w sieci - Gmail, Facebook, Twitter i Amazon Alexa - wszystkie tam są, oczywiście dostępne są też inne usługi, takie jak systemy kontroli inteligentnych żarówek, termostatów i gniazdek.
IFTTT konfiguruje się zapisując mu tzw. 'recepty', będące prostymi komendami IF ... THEN, jak zasady w Outlook lub funkcja IF w SQL czy różnych językach programowania. Dzięki temu skonstruować można prosto recepty, mówiące np. "JEŻELI ktoś otagował mnie na zdjęciu na Facebooku TO wyślij do mnie e-mail z tytułem >>O kurcze, [imię i nazwisko osoby] otagowała Cię na zdjęciu na Facebooku<<" - tak wysłany e-mail zostanie odczytany przez systemy RabbitPi jako powiadomienie. IFTTT powiązać można też z usługami Alexa, przywiązując konkretne słowa do czynności, np. gdy powiem "Włącz laser" to Alexa przekaże informacje do IFTTT, które uruchomi laser dyskotekowy, podpięty do sieci.
Idąc dalej - IFTTT zainstalować można też na telefonie. Działa to w obie strony. Można z poziomu inteligentnej Rzeczy obsługiwać telefon, np. zapisać w IFTTT receptę, która pozwoli poprzez komunikat głosowy uruchomić odtwarzanie muzyki na telefonie, ale także dodać w smartfonie np. przycisk, który umożliwi zrobienie selfie przez RabbitPi i załadowanie go od razu na Twittera. Ta funkcja umożliwia też odczytywanie wiadomości SMS - programujemy receptę IFTTT, która po otrzymaniu SMSa wyśle do nas e-mail z treścią i autorem SMSa w tytule.
Wykorzystanie IFTTT jest bardzo proste, dzięki temu zaprogramowanie wszystkich funkcji RabbitPio było bardzo proste i łatwe.
10. Montaż i testy
Montaż wszystkich elementów nie był zbyt prosty, bo trzeba było zmieścić wszystkie elementy w ciasnej obudowie. Jakkolwiek autor nie byłby pewien, że się zmieszczą, to jednak ich 'wepchnięcie' do obudowy w odpowiedni sposób, wraz z kablami, było zadaniem wymagającym chirurgicznej precyzji.
Po zmontowaniu wszystkiego kable zostały spięte spinkami, dzięki czemu autor miał pewność, że zamykając obudowę nie odłączy się przypadkowo żaden z kabelków łączących elementy wewnątrz królika.
11. Gotowy króliczku?[/b
]
Gdy wszystko zostało zmontowane przyszedł czas na odcięcie pępowiny - odpięcie RabbitPi od kabla ethernet i przeniesienie się do mieszkania, gdzie Wi-Fi ma dobry zasięg a pisać program można bez problemu poprzez SSH. Pierwsze uruchomienie nie było zbyt fortunne - Królik nie widział sygnału Wi-Fi. Rozwiązanie tej kwestii okazało się bardzo proste - okazuje się, że Pi 3 widzi tylko sygnały sieci bezprzewodowej na kanałach od 1 do 11, a Wi-Fi w domu autora działało na kanale 13. Kilka zmian w konfiguracji routera później wszystko działało już jak należy.
Dalej przyszła kolej na integrację rozmaitych skryptów. Pierwszym był plik main.py AlexaPi - autor dodał do niego linijki odpowiedzialne za mruganie LEDami i poruszanie uszkami królika. Dodatkowo zmodyfikowany został standardowy komunikat "Hello" witający użytkownika i zastąpiony kreskówkowym dźwiękiem.
Drugi skrypt - rabbit.py - zwiera w sobie funkcje odbierania wiadomości z Gmaila i odczytywanie ich poprzez Pyvona. Dodatkowo w tym skrypcie zapisano robienie zdjęć i dodawanie ich na Twittera (konto @NabazPi) poprzez Twythona. Polecenie wykonania zdjęcia wysyłane jest do RabbitPi poprzez e-mail z "selfie" w tytule.
[b]12. Nabaztag powrócił!
Królik jest gotowy do akcji. Jak działa sprawdzić można na zaprezentowanym na górze filmiku. Jednakże autor już planuje pewne zmiany w jego kontrukcji:
Testowany było wywoływanie Alexa poprzez klaśnięcie, jednakże okazało się, że ta funkcja nie sprawuje się zbyt dobra, z uwagi na tło, jakie także wychwytuje mikrofon. Istnieją jednakże inne metody aktywacji Alexa - pilotami na podczerwień, kontrolerami do gier czy nawet funkcja aktywnego słuchania - AlexaPi cały czas nasłuchuje i aktywowana jest słowem kluczowym.
Dioda LED świecąca na brzuszku królika zamieniona ma zostać na wyświetlacz Adafruit Neopixel, który pozwoli na lepsze obrazowanie powiadomień. Dodatkowo w kodzie autor planuje wyciszyć powiadomienia w nocy, a także poszerzyć ich funkcjonalność, na przykład dodać różne losowe teksty na potwierdzenie wykonania zdjęcia. Planowane jest także nauczenie królika tańczyć Macarenę uszami.
Autor posiada w domu jeszcze jednego Nabaztaga oraz Karotz, więc planowane są dalsze kontrukcje. Króliki te mają idealne wymiary do montażu Raspberry Pi wewnątrz. A może producent tych królików trzyma gdzieś zapas niesprzedanych egzemplarzy? z pewnością przy wykorzystaniu drukarki 3D i dedykowanych modułów HAT udałoby się je ożywić i podłączyć do internetu rzeczy poprzez popularną 'Malinę'.
Źródło: http://www.instructables.com/id/RabbitPi-the-Alexa-Enabled-IFTTT-Connected-Ear-Wig/?ALLSTEPS
Cool? Ranking DIY