Spisu treści:

Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi: 15 kroków (ze zdjęciami)
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi: 15 kroków (ze zdjęciami)

Wideo: Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi: 15 kroków (ze zdjęciami)

Wideo: Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi: 15 kroków (ze zdjęciami)
Wideo: [A&RPi Day 2020 prelekcje] Raspberry Pi – zastosowanie w komercyjnym projekcie. 2024, Listopad
Anonim
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi

Jestem @RedPhantom (aka LiquidCrystalDisplay / Itay), 14-letni uczeń z Izraela uczący się w gimnazjum im. Maxa Sheina dla zaawansowanych nauk ścisłych i matematyki. Tworzę ten projekt, aby wszyscy mogli się od niego uczyć i dzielić!

Być może pomyślałeś sobie: hmm… Jestem maniakiem… A moje dzieci chcą, żebym zrobił z nimi projekt… Chciał zbudować robota. Chciała go ubrać jak małego szczeniaka. To dobry projekt weekendowy!

Raspberry Pi jest idealne do każdego zastosowania: dzisiaj przedstawimy możliwości tego mikrokomputera do stworzenia robota. Ten robot może:

  • Jedź i bądź kontrolowany przez LAN (WiFi) za pomocą dowolnego komputera podłączonego do tej samej sieci Wi-Fi, co Raspberry Pi.
  • Przesyłaj strumieniowo wideo na żywo za pomocą modułu kamery Raspberry Pi
  • Wysyłaj dane z czujnika za pomocą Arduino

Aby zobaczyć, czego potrzebujesz do tego ładnego projektu świetlnego, po prostu przeczytaj następny krok (ostrzeżenia), a następnie krok Wanted: Components.

Oto repozytorium GitHub: GITHUB REPO BY ME

Oto strona projektu: WITRYNA PROJEKTU PRZEZ MNIE

Krok 1: Ostrzeżenie: Uważaj, próbując tego w domu

OSTROŻNOŚĆ:

AUTOR TEGO PORADNIKA ZAKŁADA, ŻE MASZ WYSTARCZAJĄCĄ WIEDZĘ NA TEMAT ENERGII ELEKTRYCZNEJ I PODSTAWOWEJ OBSŁUGI SPRZĘTU ELEKTRYCZNEGO. JEŚLI NIE ZACHOWASZ OSTROŻNOŚCI I NIE PRZESTRZEGASZ INSTRUKCJI ZAWARTYCH W TYM SAMOUCZEKU, MOŻESZ: USZKODZIĆ SPRZĘT ELEKTRONICZNY, POPARZYĆ SIĘ LUB SPOWODOWAĆ POŻAR. Proszę zachować ostrożność i kierować się zdrowym rozsądkiem. Jeśli nie posiadasz wiedzy wymaganej do tego samouczka (lutowanie, podstawy elektroniki), skontaktuj się z osobą, która to posiada. Dziękuję Ci.

AUTOR NINIEJSZEJ INSTRUKCJI ZDERZEKA SIĘ OD WSZELKIEJ ODPOWIEDZIALNOŚCI ZA SZKODY SPOWODOWANE LUB UTRATĘ MIENIA LUB SZKODY FIZYCZNE. UŻYJ ROZUMU

Krok 2: Komponenty

Znajomości
Znajomości
Znajomości
Znajomości
Znajomości
Znajomości
Znajomości
Znajomości

Zanim rozgrzejemy lutownicę, musimy przejść przez to, co do czego ma być podłączone. Zrobiłem ten prosty wykres (MS Paint nigdy mnie nie zawodzi), który opisuje, gdzie w robocie znajduje się określona część.

Obraz jest tak zbudowany, że można go powiększyć i zobaczyć w pełnej rozdzielczości oraz przeczytać tekst.

Krok 6: Adres dla Pi

Arduino rozmawia z Pi zgodnie z planem. A Pi rozmawia z komputerem, więc jak to wszystko działa?

Spójrzmy na naszą sekwencję inicjowania połączenia:

  1. Uruchomienie Raspberry Pi
  2. Uruchomienie Arduino
  3. Raspberry Pi uruchamia klienta TCP. Wystrzeliwuje swój adres IP za pomocą diody LED.
  4. Raspberry Pi uruchamia usługę komunikacji szeregowej i łączy się z Arduino

Dlatego nawiązaliśmy pewien rodzaj komunikacji:

Komputer Raspberry Pi Arduino

Użyłem Visual Basic. NET (Microsoft Visual Studio 2013 Community) do napisania programu, który komunikuje się z Raspberry Pi i Pythona do napisania protokołu Arduino/Raspberry Pi.

Wszystko, co musisz zrobić, aby poznać swój adres IP Pi, to podłączyć go do ekranu HDMI, zalogować się do powłoki i wpisać polecenie:

nazwa hosta -I

Krok 7: Plan

Teraz, gdy mamy adres IP Pi, wykonamy do niego SSH (SSH to Secure Shell - łączymy się zdalnie z powłoką Linuksa) i zapiszemy plik, który wyświetla adres IP serwera. Pi, podczas uruchamiania, również to zrobi i zapisze port, którego nasłuchuje. Tutaj podam tylko kilka przykładów z kodu, ale jest on dostępny do pobrania z tego kroku oraz z utworzonej przeze mnie gałęzi GitHub. Szczegóły później.

Działa to tak:

  1. RPi uruchamia się.
  2. RPi uruchamia program Tcp na swoim lokalnym adresie IP i wyznaczonym porcie.
  3. RPI zaczyna przesyłać strumieniowo wideo
  4. RPI wyłącza się.

Krok 8: Przechodzenie do fizyczności

Teraz jesteśmy gotowi do rozpoczęcia fizycznej budowy całości. Jeśli nie przeczytałeś kroku 1 (tekst ostrzeżenia i licencja), zrób to przed kontynuowaniem. Nie odpowiadam za powstałe szkody. A w razie wątpliwości tego robota nie wolno używać do celów wojskowych, chyba że jest to apokalipsa zombie. I nawet wtedy kieruj się zdrowym rozsądkiem.

Sugeruje się, abyś przeczytał instrukcje słuchania na Liście Do przeczytania.

Pobierz schemat połączenia z kroku „Połączenia”.

MOTORYZACJA

Silniki, które kupiłeś, prawdopodobnie wyglądają tak i jest OK, jeśli nie: jeśli mają tylko dwa przewody (w większości przypadków czarny i czerwony) powinny działać. Sprawdź ich arkusz danych online, aby zobaczyć ich napięcie robocze i prąd. Zapraszam do zadawania pytań w sekcji komentarzy. Zawsze je czytam.

MOST H

Nigdy wcześniej nie pracowałem z mostkiem H. Poszukałem trochę w Google i znalazłem dobry instruktaż wyjaśniający zasady HB. Możesz tam też zajrzeć (patrz krok Lista do przeczytania) i podpiąć swoją. Nie będę dużo wyjaśniał. Możesz tam przeczytać i wiedzieć wszystko, co powinieneś o tym obwodzie.

PROWADZONY

Ta mała żarówka może działać z napięciem logicznym tylko dlatego, że prawie nie wymaga prądu, a napięcie 3V-5V 4mA-18mA. Opcjonalny.

ARDUINO

Arduino otrzyma sygnały i polecenia za pośrednictwem połączenia szeregowego z Raspberry Pi. Używamy Arduino do sterowania naszymi silnikami, ponieważ Raspberry Pi nie może wyprowadzać wartości analogowych przez GPIO.

Krok 9: Automatyczne uruchamianie Raspberry Pi

Za każdym razem, gdy włączysz Raspberry Pi, będziesz musiał wpisać nazwę użytkownika i hasło. Nie chcemy tego robić, ponieważ czasami po prostu nie możemy podłączyć klawiatury do Pi, więc wykonamy te kroki z tego samouczka, aby automatycznie uruchomić program, który przygotowuje Pi. Jeśli wpadnie w pętlę, zawsze możemy go przerwać za pomocą Ctrl+C.

  • sudo crontab -e
  • A następnie wprowadzimy polecenie, które dodaje ten plik do automatycznego uruchamiania w menedżerze crona.

Wywołamy plik pibot.sh, który wyda polecenia uruchomienia wszelkiego rodzaju skryptów Pythona do obsługi robota. Przejdźmy przez to: (Sudo z programami kurtynowymi w Pythonie, aby umożliwić programowi dostęp do GPIO)

raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv strumień:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264

Kod, który wykonuje całą pracę po stronie pi, zostanie wywołany on_startup.sh.

Jest to prosty skrypt powłoki, który uruchamia wszystko.

Krok 10: Houeston, mieliśmy problem… Silniki prądu stałego to nie ten sam model

Przetestowałem już mostek H i działa dobrze, ale kiedy podłączam silniki, które otrzymałem z platformy robota, którą zamówiłem online, te dwa silniki obracają się z różnymi prędkościami i wydają różne dźwięki. Zmieniłem przepustnicę na 100% na silnikach. Obaj nie mogli biegać na pełnych obrotach.

Wygląda na to, że są to dwa różne silniki. Jeden ma większy moment obrotowy, który jest świetny dla tego rodzaju robota, ale drugi po prostu nie poruszałby robotem. Więc kręci się w kółko.

W tym momencie mam to, że program szeregowy na Arduino działa całkiem dobrze, ale serwer Tcp na PC i klient Tcp na Pi nie są jeszcze zakodowane. Na muszę uzupełnić ten wpis do konkursu. Co ja robię?

  1. Najpierw potroiłem napięcie silników. W arkuszu danych było napisane, że 3 V, 6 V nie przeniosło ich. Wtedy jest 9V. Podłączyłem teo baterie równolegle, aby podwoić prąd i napięcie pozostaje takie samo.
  2. Czy mam inne silniki pasujące do uchwytu na platformie? Może zobaczę, czy są to podobne modele.
  3. Mogę wymienić na Servos, jeśli czekolada naprawdę trafi w wentylator.

Szkoła się rozpoczęła. Muszę zobaczyć, co robić.

Uwaga: Dlaczego, u licha, piszę tutaj problemy, które napotykam? Więc jeśli jesteś mniej doświadczony i masz te same problemy, będziesz wiedział, co robić.

Rozwiązanie:

Więc zrobiłem kolejny test. Zaadaptowałem różnicę prędkości w kodzie Arduino.

UWAGA: silniki mogą obracać się z różnymi prędkościami! Zmień wartości w szkicu Arduino.

Krok 11: [TCP]: Dlaczego Tcp i Not Secure Shell? Co to jest TCP?

Mam dwa wyjaśnienia, dlaczego używam Tcp, a nie SSH na PC. - Komunikacja Pi.

  1. Po pierwsze, SSH (Secure Shell, patrz Wyjaśnienia) służy do uruchamiania poleceń ze zdalnego komputera. Sprawienie, by Pi odpowiadało informacjami, których potrzebujemy, jest trudniejsze, ponieważ naszą jedyną opcją analizy danych jest trudne i żmudne przetwarzanie ciągów.
  2. Po drugie, wiemy już, jak korzystać z SSH i chcemy dowiedzieć się więcej sposobów komunikacji między urządzeniami w tym samouczku.

TCP lub Transmission Control Protocol to podstawowy protokół pakietu protokołów internetowych. Powstał w początkowej implementacji sieciowej, w której uzupełniał protokół internetowy (IP). Dlatego cały pakiet jest powszechnie określany jako TCP/IP. TCP zapewnia niezawodne, uporządkowane i sprawdzone pod kątem błędów dostarczanie strumienia oktetów między aplikacjami uruchomionymi na hostach komunikujących się przez sieć IP.

(Z Wikipedii)

Tak więc zalety TCP to:

  • Bezpieczne
  • Szybko
  • Działa w dowolnym miejscu w sieci
  • Udostępnia metody sprawdzania poprawności transmisji danych
  • Kontrola przepływu: ma ochronę na wypadek, gdyby nadawca danych wysłał dane zbyt szybko, aby klient mógł je zarejestrować i przetworzyć.

A wady to:

  • W TCP nie można rozgłaszać (Wysyłaj dane do wszystkich urządzeń w sieci) i multicast (to samo, ale trochę inaczej - daje możliwość nadawania każdemu urządzeniu jak serwer).
  • Błędy w twoim programie i bibliotekach systemu operacyjnego (które same zarządzają komunikacją TCP, twój router nie robi prawie nic poza połączeniem dwóch [lub więcej] urządzeń)

Dlaczego nie korzystać z UDP, możesz zapytać? Cóż, w przeciwieństwie do TCP, UDP nie gwarantuje, że klient otrzyma dane przed wysłaniem ich. Na przykład wysyłanie e-maila bez wiedzy, czy klient go otrzyma. Poza tym UDP jest mniej bezpieczny. Aby uzyskać więcej informacji, przeczytaj ten post od Super User Stack Exchange

Ten artykuł jest dobry i polecany.

Krok 12: [TCP]: Stwórzmy klienta

Klient (w naszym przypadku Raspberry Pi), który odbiera dane z serwera (w naszym przypadku nasz komputer), otrzyma dane do wysłania do Pi (polecenia szeregowe, które zostaną wykonane na Arduino) i odbierze dane z powrotem (odczyty z czujnika i informacje zwrotne bezpośrednio z Arduino. Załączony schemat pokazuje relacje między trzema.

Artykuł Pythonowej Wiki TcpCommunication pokazuje, że taka komunikacja jest tak prosta, że wystarczy kilka linijek kodu za pomocą wbudowanego modułu gniazda. Będziemy mieli program na PC i inny program na Pi.

Będziemy pracować z przerwaniami. Dowiedz się więcej na ich temat w kroku Wyjaśnienia. Przeczytaj też o buforach. Teraz możemy odczytać dane, które mamy, używając data=s.recv(BUFFER_SIZE), ale będzie to ile znaków zdefiniowaliśmy z pustymi bitami. Czy możemy używać przerwań? Kolejne pytanie: czy bufor będzie pusty, czy będzie czekał, aż serwer wyśle więcej danych, w którym to przypadku serwer/klient zgłosi wyjątek limitu czasu?

Zajmijmy się tym pojedynczo. Zanim to zrobimy, przejrzałem ten artykuł w Wikipedii, który zawiera listę używanych portów TCP i UDP. Po szybkim spojrzeniu zdecydowałem, że ten projekt będzie się komunikował na porcie 12298, ponieważ nie jest on używany przez system operacyjny i usługi lokalne.

Krok 13: Wypróbuj nasz komunikator Tcp

Aby sprawdzić, czy możemy użyć przerwań, stwórzmy prostego klienta i serwer za pomocą wiersza poleceń Pythona. Zrobię to w następujących krokach:

  1. Uruchom program, który wysyła tekst przez Tcp w pętli przez port kurtyny
  2. Uruchom inny program (równolegle), który odczytuje cały tekst w pętli i wyświetla go na ekranie.

Zostaną pokazane tylko segmenty programu. Wszystkie programy działają w Pythonie 3. Wszystko, co robią te programy, to wysyłanie polecenia szeregowego z klawiatury użytkownika komputera PC do Arduino za pośrednictwem Pi.

  • SBcontrolPC.py - Do uruchomienia na komputerze PC. Rozpoczyna połączenie TCP na lokalnym adresie i na określonym porcie (używam portu 12298, zobacz poprzedni krok dlaczego)
  • SBcontrolPi.py - do uruchomienia na Pi. Czyta swój bufor co pół sekundy (0,5 sekundy). Uruchamia skrypt powłoki, który zarządza takimi rzeczami, jak przesyłanie strumieniowe wideo itp.

Zalecana: