Inhaltsverzeichnis:

Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi - Gunook
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi - Gunook

Video: Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi - Gunook

Video: Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi - Gunook
Video: Roboter 1: Aufbau und erste Experimente 2024, November
Anonim
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi
Erstellen Sie Ihren internetgesteuerten Video-Streaming-Roboter mit Arduino und Raspberry Pi

Ich bin @RedPhantom (alias LiquidCrystalDisplay / Itay), ein 14-jähriger Schüler aus Israel, der an der Max Shein Junior High School für fortgeschrittene Naturwissenschaften und Mathematik lernt. Ich mache dieses Projekt für alle zum Lernen und Teilen!

Sie haben sich vielleicht gedacht: hmm… ich bin ein Geek… Und meine Kinder wollen, dass ich ein Projekt mit ihnen mache… Er wollte einen Roboter bauen. Sie wollte es wie ein kleines Hündchen verkleiden. Es ist ein gutes Wochenendprojekt!

Der Raspberry Pi ist perfekt für jeden Einsatz: Heute werden wir die Fähigkeiten dieses Mikrocomputers erläutern, um einen Roboter zu bauen. Dieser Roboter kann:

  • Fahren Sie herum und lassen Sie sich über LAN (WiFi) mit jedem Computer steuern, der mit demselben WLAN-Netzwerk wie Raspberry Pi verbunden ist.
  • Streamen Sie Videos live mit dem Raspberry Pi-Kameramodul
  • Sensordaten mit Arduino senden

Um zu sehen, was Sie für dieses schöne Lichtprojekt benötigen, lesen Sie einfach den nächsten Schritt (Warnungen) und danach den Schritt Gesucht: Komponenten.

Hier ist das GitHub-Repository: GITHUB REPO BY ME

Hier ist die Projektseite: PROJEKTSITE VON MIR

Schritt 1: Warnung: Seien Sie vorsichtig, wenn Sie dies zu Hause versuchen

VORSICHT:

DER AUTOR DIESES TUTORIALS geht davon aus, dass Sie über ausreichende Kenntnisse über Elektrizität und die grundlegende Funktionsweise von elektrischen Geräten verfügen. WENN SIE NICHT VORSICHTIG SIND UND DIE ANWEISUNGEN IN DIESEM TUTORIAL NICHT BEFOLGEN, KÖNNEN SIE: ELEKTRONISCHE GERÄTE BESCHÄDIGEN, SICH VERBRENNEN ODER EINEN FEUER VERURSACHEN. Bitte seien Sie vorsichtig und verwenden Sie Ihren gesunden Menschenverstand. Wenn Sie nicht über die erforderlichen Kenntnisse für dieses Tutorial (Löten, Grundlagen der Elektronik) verfügen, führen Sie dies bitte mit einer Person durch, die dies tut. Dankeschön.

DER AUTOR DIESER ANLEITUNG ÜBERNIMMT JEGLICHE VERANTWORTUNG VON SICH FÜR SCHÄDEN, DIE VERURSACHT ODER VERLORENE EIGENTUM ODER PHYSIKALISCHE SCHÄDEN. BENUTZEN SIE DEN GESUNDEN MENSCHENVERSTAND

Schritt 2: Komponenten

Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse

Bevor wir den Lötkolben aufheizen, müssen wir durchgehen, was womit verbunden werden soll. Ich habe dieses einfache Diagramm erstellt (MS Paint lässt mich nie im Stich), das beschreibt, wo sich bestimmte Teile im Roboter befinden.

Das Bild ist so aufgebaut, dass Sie hineinzoomen und in voller Auflösung sehen und den Text lesen können.

Schritt 6: Adresse für den Pi

Der Arduino spricht nach Plan mit dem Pi. Und der Pi spricht mit dem Computer, also wie funktioniert das alles?

Schauen wir uns unsere Verbindungsinitiierungssequenz an:

  1. Raspberry Pi startet
  2. Arduino-Starts
  3. Raspberry Pi startet den TCP-Client. Es schießt seine IP-Adresse über eine LED heraus.
  4. Raspberry Pi startet den seriellen Kommunikationsdienst und verbindet sich mit Arduino

Deshalb haben wir eine Art Kommunikation aufgebaut:

Computer Raspberry Pi Arduino

Ich habe Visual Basic. NET (Microsoft Visual Studio 2013 Community) verwendet, um das Programm zu schreiben, das mit dem Raspberry Pi und Python kommuniziert, um das Arduino/Raspberry Pi-Protokoll zu schreiben.

Alles, was Sie tun müssen, um Ihre Pi-IP-Adresse zu kennen, ist, sie mit einem HDMI-Bildschirm zu verbinden, sich bei der Shell anzumelden und den Befehl einzugeben:

Hostname -I

Schritt 7: Der Plan

Jetzt, da wir die IP-Adresse von Pi haben, werden wir per SSH hineingehen (SSH ist Secure Shell - wir verbinden uns remote mit der Linux-Shell) und schreiben eine Datei, die die IP-Adresse des Servers anzeigt. Der Pi wird dies beim Start auch tun und den Port schreiben, auf den er lauscht. Hier werde ich nur einige Beispiele aus dem Code geben, aber er kann in diesem Schritt und im von mir erstellten GitHub-Zweig heruntergeladen werden. Details dazu später.

Es funktioniert so:

  1. RPi startet.
  2. RPi startet das TCP-Programm auf seiner lokalen IP und einem designierten Port.
  3. RPI beginnt mit dem Videostreaming
  4. RPI wird heruntergefahren.

Schritt 8: Physisch gehen

Jetzt sind wir bereit, das Ganze physisch aufzubauen. Wenn Sie Schritt 1 (Warntext und Lizenzierung) nicht gelesen haben, tun Sie dies bitte, bevor Sie fortfahren. Ich übernehme keine Verantwortung für verursachte Schäden. Und im Zweifelsfall darf dieser Roboter nicht für militärische Zwecke eingesetzt werden, es sei denn, es handelt sich um eine Zombie-Apokalypse. Und selbst dann den gesunden Menschenverstand verwenden.

Es wird empfohlen, dass Sie die instructables in der Leseliste lesen.

Laden Sie das Verbindungsschema aus dem Schritt "Verbindungen" herunter.

MOTOREN

Die Motoren, die Sie gekauft haben, sehen wahrscheinlich so aus, und es ist in Ordnung, wenn sie es nicht tun: Wenn sie nur zwei Drähte haben (in den meisten Fällen schwarz und rot), sollte es funktionieren. Schlagen Sie im Datenblatt online nach, um die Betriebsspannung und den Strom zu sehen. Stellen Sie gerne Fragen im Kommentarbereich. Ich lese sie immer.

H-BRÜCKE

Ich habe noch nie mit einer H-Brücke gearbeitet. Ich googelte ein bisschen und fand eine gute Anleitung, die die Prinzipien eines HB erklärt. Sie können auch dort nachsehen (siehe Schritt Leseliste) und auch Ihren Haken anhängen. Ich werde nicht viel erklären. Sie können dort lesen und wissen alles, was Sie über diese Schaltung wissen sollten.

LED

Diese kleine Glühbirne kann mit logischer Spannung betrieben werden, nur weil sie fast keinen Strom benötigt, und eine Spannung von 3V-5V 4mA-18mA. Optional.

ARDUINO

Arduino erhält Signale und Befehle über eine serielle Verbindung vom Raspberry Pi. Wir verwenden Arduino zur Steuerung unserer Motoren, da der Raspberry Pi keine Analogwerte über den GPIO ausgeben kann.

Schritt 9: Raspberry Pi automatisch starten

Jedes Mal, wenn Sie Raspberry Pi einschalten, müssen Sie den Benutzernamen und das Passwort eingeben. Wir möchten das nicht tun, weil wir manchmal einfach keine Tastatur an den Pi anschließen können. Daher werden wir diese Schritte aus diesem Tutorial befolgen, um das Programm, das den Pi vorbereitet, automatisch zu starten. Wenn es in einer Schleife hängen bleibt, können wir es jederzeit mit Strg+C unterbrechen.

  • sudo crontab -e
  • Und dann geben wir den Befehl ein, der diese Datei zum Auto-Strartup im Cron-Manager hinzufügt.

Wir rufen die Datei pibot.sh auf, die Befehle zum Starten aller Arten von Python-Skripten zum Betrieb des Roboters enthält. Gehen wir es durch: (Wir sudo mit Vorhang-Python-Programmen, damit das Programm auf den GPIO zugreifen kann)

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

Der Code, der die gesamte Arbeit auf der Seite des pi erledigt, heißt upon_startup.sh.

Es ist ein einfaches Shell-Skript, das alles ausführt.

Schritt 10: Houeston, wir hatten ein Problem … Gleichstrommotoren sind nicht das gleiche Modell

Ich habe die H-Brücke bereits getestet und sie funktioniert gut, aber wenn ich die Motoren, die ich von der Roboterplattform bekommen habe, online bestellt habe, drehen sich diese beiden Motoren mit unterschiedlichen Geschwindigkeiten und machen unterschiedliche Geräusche. Ich habe den Gashebel an den Motoren auf 100% geändert. Beide konnten nicht mit ihrer maximalen Leistungsfähigkeit laufen.

Das sind anscheinend zwei verschiedene Motoren. Einer hat ein größeres Drehmoment, was für diese Art von Roboter großartig ist, aber der andere würde den Roboter einfach nicht bewegen. Es dreht sich also im Kreis.

An dieser Stelle habe ich, dass das serielle Programm auf dem Arduino einwandfrei funktioniert, aber der TCP-Server auf dem PC und der TCP-Client auf dem Pi sind noch nicht codiert. Am muss ich diesen Eintrag für den Wettbewerb vervollständigen. Was mache ich?

  1. Zuerst verdreifache ich die Spannung für die Motoren. Im Datenblatt stand, dass 3V, 6V sie nicht bewegten. Dann sind es 9V. Ich habe Teo-Batterien parallel geschaltet, um den Strom zu verdoppeln und die Spannung bleibt gleich.
  2. Habe ich andere Motoren, die zur Halterung auf der Plattform passen? Vielleicht kann ich sehen, ob es sich um ähnliche Modelle handelt.
  3. Ich kann zu Servos ersetzen, wenn die Schokolade wirklich den Fächer trifft.

Schule hat begonnen. Ich muss sehen, was zu tun ist.

Hinweis: Warum in aller Welt schreibe ich hier die Probleme, auf die ich stoße? Wenn Sie also weniger erfahren sind und die gleichen Probleme haben, wissen Sie, was zu tun ist.

Die Lösung:

Also habe ich einen weiteren Test gemacht. Ich habe den Geschwindigkeitsunterschied im Arduino-Code angepasst.

HINWEIS: Die Motoren können sich für Sie in unterschiedlichen Geschwindigkeiten drehen! Ändern Sie die Werte in der Arduino-Skizze.

Schritt 11: [TCP]: Warum TCP und nicht Secure Shell? Was ist TCP?

Ich habe zwei Erklärungen, warum Tcp und nicht SSH für den PC verwendet werden. - Pi-Kommunikation.

  1. Erstens soll SSH (Secure Shell, siehe Erläuterungen) Befehle von einem entfernten Computer aus starten. Es ist schwieriger, den Pi mit Informationen zu reagieren, die wir wollen, da unsere einzige Möglichkeit, die Daten zu analysieren, die harte und langwierige String-Verarbeitung ist.
  2. Zweitens wissen wir bereits, wie man SSH verwendet, und möchten in diesem Tutorial mehr Möglichkeiten zur Kommunikation zwischen Geräten kennenlernen.

TCP oder Transmission Control Protocol ist ein Kernprotokoll der Internet Protocol Suite. Es entstand in der anfänglichen Netzwerkimplementierung, in der es das Internet Protocol (IP) ergänzte. Daher wird die gesamte Suite allgemein als TCP/IP bezeichnet. TCP bietet eine zuverlässige, geordnete und fehlergeprüfte Übermittlung eines Oktettstroms zwischen Anwendungen, die auf Hosts ausgeführt werden, die über ein IP-Netzwerk kommunizieren.

(Aus Wikipedia)

TCP-Profis sind also:

  • Sicher
  • Schnell
  • Funktioniert überall in einem Netzwerk
  • Bietet Methoden zur Überprüfung der korrekten Datenübertragung
  • Flusskontrolle: bietet Schutz für den Fall, dass der Datensender Daten zu schnell sendet, damit der Client sich registrieren und verarbeiten kann.

Und die Nachteile sind:

  • In TCP können Sie nicht übertragen (Daten an alle Geräte in einem Netzwerk senden) und Multicast (gleich, aber wenig unterschiedlich - gibt jedem Gerät die Möglichkeit, wie ein Server zu senden).
  • Fehler in Ihren Programm- und Betriebssystembibliotheken (die die TCP-Kommunikation selbst verwalten, Ihr Router tut fast nichts, außer die zwei [oder mehr] Geräte zu verbinden)

Warum nicht UDP verwenden, fragen Sie sich vielleicht? Nun, im Gegensatz zu TCP stellt UDP nicht sicher, dass Ihr Client die Daten erhält, bevor weitere gesendet werden. Wie das Senden einer E-Mail und nicht wissen, ob der Kunde sie erhält. Außerdem ist UDP weniger sicher. Weitere Informationen finden Sie in diesem Beitrag von Stack Exchange Super User

Dieser Artikel ist gut und empfehlenswert.

Schritt 12: [TCP]: Lassen Sie uns einen Kunden erstellen

Der Client (Raspberry Pi in unserem Fall), der die Daten vom Server (unser PC in unserem Fall) empfängt, erhält Daten zum Senden an den Pi (serielle Befehle, die auf dem Arduino ausgeführt werden) und empfängt Daten zurück (Sensormesswerte). und Feedback direkt vom Arduino Das beigefügte Schema zeigt die Beziehung zwischen den dreien.

Der Python-Wiki-Artikel TcpCommunication zeigt, dass es so einfach ist, eine solche Kommunikation mit wenigen Codezeilen mithilfe des integrierten Socket-Moduls durchzuführen. Wir werden ein Programm auf dem PC und ein weiteres Programm auf dem Pi haben.

Wir werden mit Unterbrechungen arbeiten. Erfahren Sie mehr darüber im Schritt Erläuterungen. Lesen Sie dort auch über Puffer. Jetzt können wir die Daten, die wir haben, mit data=s.recv(BUFFER_SIZE) lesen, aber es wird sein, wie viele Zeichen wir mit leeren Bits definiert haben. Können wir Interrupts verwenden? Eine andere Frage: Wird der Puffer leer sein oder wird er warten, bis der Server mehr Daten sendet, in welchem Fall der Server/Client eine Timeout-Ausnahme auslöst?

Lassen Sie uns das nacheinander angehen. Bevor wir dies tun, habe ich diesen Wikipedia-Artikel nachgeschlagen, der verwendete TCP- und UDP-Ports auflistet. Nach einem kurzen Blick habe ich entschieden, dass dieses Projekt auf Port 12298 kommuniziert, da es nicht vom Betriebssystem und lokalen Diensten verwendet wird.

Schritt 13: Probieren Sie unsere TCP-Kommunikation aus

Um zu sehen, ob wir Interrupts verwenden können, erstellen wir einen einfachen Client und einen Server mit der Python-Befehlszeile. Ich werde dies in den folgenden Schritten tun:

  1. Starten Sie ein Programm, das einen Text per TCP in einer Schleife durch einen Curtain-Port sendet
  2. Starten Sie ein anderes Programm (parallel), das den gesamten Text in einer Schleife liest und auf dem Bildschirm ausgibt.

Es werden nur Segmente des Programms angezeigt. Alle Programme laufen mit Python 3. Alle diese Programme senden den seriellen Befehl von der Tastatur des PC-Benutzers über den Pi an den Arduino.

  • SBcontrolPC.py - Zur Ausführung auf dem PC. Startet eine TCP-Verbindung auf der lokalen Adresse und auf dem angegebenen Port (ich verwende Port 12298, siehe vorheriger Schritt warum)
  • SBcontrolPi.py - Wird auf dem Pi ausgeführt. Liest seinen Puffer jede halbe Sekunde (0,5 Sekunden). Startet ein Shell-Skript, das Dinge wie das Video-Streaming usw. verwaltet.

Empfohlen: