wtorek, 23 marca 2021

PIRek - czyli jak samemu zrobić elektroniczną nianię - #tataprogramuje


Ostatnio sporo się zadziało :)
Narodziny dziecka obfitują w różnego rodzaju motywacje do tworzenia najróżniejszych pomocy, stąd może dzięki temu trochę więcej pojawi się na tym blogu. Powiedzmy, że rozpoczynam cykl #tataprogramuje ;)
Do tego jakiś czas temu wyposażyłem się w Snapmakera 2 - urządzenie 3 in 1, w tym drukarkę 3d - więc wyobraźnia szaleje.
Pierwszym opisanym projektem będzie stworzenie elektronicznej niani, której komponenty po okresie użyteczności przy dziecku, będzie można wykorzystać do czegokolwiek innego.
Na początek stworzymy elektroniczną nianię bez dźwięku (choć i mikrofon można do tej wersji projektu dodać - może potem). Potrzebne będą nam przede wszystkim: 

  • Raspberry PI Zero W - jest to minikomputer mieszczący się na kilkucentymetrowej płytce, który można zasilać ze zwyczajnej ładowarki USB. Posiada różne peryferia na pokładzie, jak Wi-Fi, szereg portów gpio oraz dedykowane łącze kamery, które dziś wykorzystamy. 
  • Kamera IR - do tego projektu kupiłem jedną z dedykowanych kamer do "malin" - kamerę ze zmienną ogniskową, z matrycą 5 Mpx i dwoma dodatkowymi oświetlaczami power led na 850nm. Nie jest to jednak konieczne, by poprzestać na tej kamerce. O tym później.
  • Karta micro SSD - każda od 4Gb wzwyż się nada. Może być bardziej pojemna, ale tu nie ma takiej potrzeby. Lepsze przydadzą się do innych rzeczy.
  • długi kabel micro-USB i zasilacz/ładowarka. 
  • Jakikolwiek smartfon/komputer - do wyświetlania strumienia video :) 

Jak wspominałem - mam też drukarkę 3d, więc wykorzystam ją do nadania kamerce wyrazu poprzez stworzenie obudowy. Nie jest to konieczne, ale na pewno przydatne.
Przydać się może też jakakolwiek klejarka do klejenia na gorąco.

Słów kilka o kamerze IR

Tak naprawdę można wykorzystać jakąkolwiek kamerę internetową, jednak w tym przypadku nie obejdzie się bez modyfikacji. Każda kamerka z matrycą CCD jest czuła na podczerwień. Ponieważ na co dzień nie chcemy by aparaty i kamery pokazywały nam więcej niż sami widzimy - instaluje się w nich filtry podczerwieni. Wystarczy taki filtr usunąć, dodać źródło światła podczerwonego - i mamy kamerę widzącą w ciemności. W przyszłym poście opiszę projekt z taką zmodyfikowaną kamerką internetową.

Przygotowanie "Maliny"

 Na naszej karcie SSD instalujemy Raspbiana. Jest to dystrybucja linuxa zmodyfikowana specjalnie z myślą o mikrokomputerach Raspberry PI.  Do instalacji tego systemu najlepiej użyć programu Raspberry Pi Imager. Dostępny jest na tej stronie. Użytkownicy linuxa mają oczywiście prościej:
sudo apt install rpi-imager
Po zainstalowaniu tego programu wybieramy system operacyjny dla naszej Maliny. Najlepiej niech będzie to wersja z desktopem. 2.8 GB się zmieści i nie będzie również problemu z późniejszym odpaleniem vlc.

Dalej wybieramy nasz nośnik i...większość dzieje się już samo. System wgrany, ale trzeba jeszcze kilka rzeczy ustawić.

Sieć - ustawienie bezpośrednio na karcie SSD

Aby móc dostać się do naszego Raspberry Pi bez podłączania monitora i klawiatury przez przejściówki, musimy wykonać kilka czynności jeszcze przed włożeniem karty pamięci do Maliny.
Po pierwsze - w sekcji boot tworzymy plik wpa_supplicant.conf, a w nim umieszczamy nazwę naszej sieci i hasło, np.:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=PL

network={
        ssid="NazwaNaszejSieci"
        psk="SuperHasło"
        key_mgmt=WPA-PSK
}

Po uruchomieniu plik ten powinien znaleźć się w katalogu /etc/wpa_supplicant.
Pozostaje nam jeszcze pozwolić na logowanie po ssh. Aby to wykonać należy po prostu stworzyć pusty plik o nazwie "ssh" w tej samej co poprzednio sekcji boot karty ssd.

Teraz w końcu możemy włożyć kartę do czytnika na Malinie i podłączyć urządzenie do prądu.
Możemy też już podłączyć naszą kamerkę, choć do skorzystania z niej jeszcze chwila.

Pozostałe ustawienia

Po włączeniu Raspberry Pi czekamy chwilę aż się uruchomi i połączy z naszą siecią. Możemy następnie spróbować się połączyć po ssh. Najprościej sprawdzić adres ip za pomocą interfejsu routera.
Urzytkownicy linuxa mogą spróbować też komendy:

arp -a

lub po zainstalowaniu nmap:

nmap -sP 192.168.1.0/24

Znając ip naszej Maliny możemy wydać komendę:

ssh pi@192.168.xx.xx

gdzie po "@" mamy adres ip Raspberry. Domyślne hasło to "raspberry", należy je szybko zmienić.

Po dostaniu się na urządzonko odpalamy konfigurację:

sudo raspi-config

Otworzy się nam menu konfiguracji Maliny:

Jeśli wejdziemy w 1. System options, możemy zmienić hasło i nadać nazwę naszej Malinie - zrób to, ułatwi to nam dalsze logowanie, bo nie będzie trzeba szukać ip - ja nazwałem swoje urządzenie pirek :). Należy jeszcze wejść w 3. Interface options i umożliwić działanie kamery. Po wszystkim przechodzimy do Finish i jeśli trzeba - restartujemy Raspberry. 

Uruchamiamy strumień video

Strumień video możemy uruchomić jedną, choć dość skomplikowaną komendą:

raspivid -o - -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264

Oczywiście nie wyczerpuje ona możliwości zastosowanej kamery, jednak na tę chwilę wystarczy do osiągnięcia w miarę stabilnego strumienia.
8160 to port na który wysyłamy strumień (może być inny, jeśli jest taka potrzeba).

Jeśli z jakiegoś powodu nie mamy na raspbery cvlc, instalujemy pakiet vlc:

sudo apt-get install vlc

Następnie możemy już spróbować zobaczyć co nam pokazuje kamerka. Możemy do tego użyć różnych programów. Ja - niezależnie czy na komputerze, czy androidzie - używam również vlc, bo jest bardzo wygodny.

VlC na komputerze

Zakładam, że masz/potrafisz zainstalować sobie program vlc na własnym komputerze, niezależnie od systemu który używasz. 

Po uruchomieniu programu klikamy Plik->Otwórz strumień sieci

http://192.168.xx.xx:8160

gdzie 192.168.xx.xx to adres ip naszego raspberry. Jeśli jednak nadaliśmy naszej Malinie nazwę, możemy spróbować dostać się do strumienia po niej. W moim przypadku:

http://pirek.local:8160

VLC na androidzie

Nie ma to jak móc podglądać strumień video z różnych urządzeń. Możemy to zrobić bezproblemowo. Instalujemy VLC na naszej komórce/tablecie, po czym w programie klikamy "dodaj strumień" i wpisujemy ten sam adres co wyżej. Po chwili mamy obraz z kamery na na naszym telefonie.  Dodatkowo, jeśli wejdziemy w Ustawienia->Działanie po przełączeniu aplikacji i zaznaczymy "Odtwarzaj widea w trybie obraz w obrazie", to możemy mieć zminimalizowany podgląd wideo podczas używania telefonu/tabletu do innych celów. 

VLC daje nam  również możliwość łatwego rozjaśnienia/przyciemnienia obrazu, o czym informuje nas po włączeniu odbioru strumienia.

Strumień video po starcie systemu

Chcemy zbudować e-nianię, więc nasze urządzenie powinno ustawiać strumień wideo przy każdym podłączeniu do prądu. Tworzymy więc plik zawierający naszą komendę, np o nazwie "stream", na raspberry. Może to być w katalogu domowym - raczej nic więcej nie będziemy tam robić.
Następnie edytujemy plik rc.local, np.:
vim /etc/rc.local
i przed linią exit 0 dodajemy:
su -l pi -c "/home/pi/stream" &
Tyle. Powinno zadziałać po każdym reboocie.

Obudowa

Mamy już gotowe oprogramowanie i elektronikę. Należałoby to więc teraz jakoś opakować. Ponieważ mam dostęp do drukarki 3d, swoją obudowę wydrukuję.
Tu użyję wzoru pobranego z Thingiversa "Raspberry Pi "Hank" the hidden Nightvision Camera".
Jest dość wygodny, bo mieści w sobie kamerę razem z naszą Maliną. Tłumaczy to w tym wypadku dlaczego warto było zastosować Raspberry PI Zero W, a nie coś większego.

Kamera z oświetleniem IR będzie tworzyć nam nos z oczkami. Przytwierdzam ją do twarzy za pomocą dostępnego w projekcie mocowania. Mocowanie przyklejam klejem na gorąco. W razie potrzeby nie będzie problemu z odklejeniem i przyklejeniem tego ponownie. 

Prócz tego przyklejam fragment kartki tworzący uśmiech. Ja uważam, że wnętrze buźki powinno być czerwone.


Tył główki ma mocowanie dla Raspberry PI. Do przymocowania do obudowy wystarczą 2 śrubki z odzysku.

Podłączamy i przekładamy kabel zasilający.
Jakość/długość kabla może wpłynąć na działanie układu. W pierwszym momencie użyłem kabla ok 1.5m i starszej ładowarki z wydajnością 0.7A i działało ok. Jednak gdy musiałem dołączyć przedłużacz USB, zastosowany zasilacz nie wystarczał - po połączeniu ze strumieniem urządzenie zawieszało się, bo nie dostawało odpowiedniej mocy. Gdy zastosowałem nowszą ładowarkę o wydajności 2A, wszystko wróciło do normy. 
 
 
Całość głowy składam razem z czapeczką i stojakiem. Dla bezpieczeństwa zabezpieczam lekko klejem na gorąco i wygląda to tak:

Do złożenia z elementami stojaka zastosowałem śruby M6. Na przyszłość warto wymienić zwykłe nakrętki na motylki - dla wygodniejszego ustawiania. 
 
Jak widać wydrukowałem obie końcówki stojaka i skręciłem je śrubami - dzięki temu mam szybkie mocowanie do ścianki dziecięcego łóżeczka. Jest to rozwiązanie chwilowe - później coś zaprojektuję i się podzielę, jednak na ten czas wystarczy, jeśli nie chcemy przymocowywać (wiercić otworu) na stałe w łóżeczku. 
Warto również zabezpieczyć kabel, np. kilkoma opaskami na rzepy, by niechcący nie ściągnąć kamerki butem.
Kamerkę montujemy w dogodnym miejscu i podłączamy do kontaktu. Dzięki statywowi możemy dostosować ustawienie kadru. Pamiętać trzeba też, by ręcznie ustawić ostrość obiektywu w tym modelu kamery. Po kilkunastu sekundach od włączenia mamy strumień w naszej sieci wewnętrznej i możemy np. pracując obok na laptopie, zerkać czemu nasze dziecko kwęknęło, zamiast 37 raz wstawać i patrzeć co się dzieje ;)

Brak komentarzy:

Prześlij komentarz