Inhaltsverzeichnis:

Einfache Arduino Robotik-Plattform! - Gunook
Einfache Arduino Robotik-Plattform! - Gunook

Video: Einfache Arduino Robotik-Plattform! - Gunook

Video: Einfache Arduino Robotik-Plattform! - Gunook
Video: Amazing arduino project 2024, Juli
Anonim
Einfache Arduino Robotik-Plattform!
Einfache Arduino Robotik-Plattform!
Einfache Arduino Robotik-Plattform!
Einfache Arduino Robotik-Plattform!

Ich habe gerade einen Arduino bekommen, nachdem ich während Robotics-Teammeetings mit einigen AVR-Mikrocontrollern herumgespielt habe. Ich mochte die Idee eines wirklich billigen programmierbaren Chips, der von einer einfachen Computerschnittstelle aus so ziemlich alles laufen kann, also habe ich einen Arduino gekauft, weil er bereits ein schönes Board und eine USB-Schnittstelle hat. Für mein erstes Arduino-Projekt habe ich ein Vex Robotics-Kit ausgegraben, das ich von einigen Wettbewerben, die ich in der High School gemacht habe, herumgelegt hatte. Ich wollte schon immer eine computergesteuerte Roboterplattform entwickeln, aber der Vex-Mikrocontroller erfordert ein Programmierkabel, das ich nicht hatte. Ich beschloss, mein neues Arduino (und vielleicht später einen nackten AVR-Chip, wenn ich es zum Laufen bekomme) zu verwenden, um die Plattform zu fahren. Irgendwann möchte ich mir ein Netbook zulegen und dann kann ich den Roboter über WLAN fahren und seine Webcam aus der Ferne betrachten.

Ich habe es geschafft, ein anständiges serielles Protokoll und ein einfaches Beispiel zu erhalten, das den Roboter mit einem Xbox 360-Controller antreibt, der an einen Linux-PC angeschlossen ist.

Schritt 1: Was es tun kann…

Was es tun kann…
Was es tun kann…
Was es tun kann…
Was es tun kann…

Der Arduino ist eine sehr vielseitige Plattform. Mein grundlegendes Ziel war es nur, den Arduino dazu zu bringen, zwei Vex-Motoren mit dem PC zu verbinden, aber ich hatte viele übrig gebliebene Eingangs- / Ausgangspins und beschloss, einige zusätzliche Dinge hinzuzufügen. Im Moment habe ich eine RGB-LED für den Status der seriellen Schnittstelle (grün, wenn Pakete gut sind, rot, wenn sie schlecht sind) und einen PC-Lüfter, der von einem Transistor angetrieben wird. Ich kann auch Schalter und Sensoren hinzufügen, aber ich habe noch keine davon angebracht. Das Beste daran ist, dass Sie einem Arduino-Roboter alles hinzufügen können, was Sie möchten. Es braucht nur ein wenig Schnittstellencode, um zusätzliche Dinge zu steuern und Eingaben an den Computer zu erhalten.

Schritt 2: Teile

Teile
Teile
Teile
Teile
Teile
Teile

Für meinen Roboter habe ich ein paar verschiedene Teile verwendet. Die meisten Teile waren aus alten Sachen, die ich in meinem Keller herumgelegt hatte. 1) Arduino Duemilanove mit ATMega328Dies ist das neueste Arduino, und da ich es erst vor ein paar Tagen bekommen habe, habe ich das neueste. Der Code ist jedoch klein genug, um problemlos auf jeden Arduino zu passen. Es könnte wahrscheinlich sogar auf einen ATTiny passen (wenn ich neben dem Arduino eine Robotersteuerung baue, sieht der ATTiny 2313 wie eine gute Wahl aus, er ist kleiner und billiger, hat aber immer noch viele Ausgänge und eine serielle UART-Schnittstelle)2) Vex Robotics PlatformI bekam vor ein paar Jahren einen Vex-Bausatz, um einen funkgesteuerten Roboter zu bauen, der Sachen für einen High-School-Wettbewerb aufsammelt. Ich konstruierte die grundlegende "quadratische Bot" -Basis, die 4 Räder hat, die von zwei Motoren angetrieben werden. Sie können andere Roboterbasen ersetzen, wenn Sie eine andere Plattform haben, die Sie fahren möchten. Es ist wichtig zu beachten, dass Vex-Motoren im Wesentlichen kontinuierliche Rotationsservos sind. Sie verwenden Pulsweitenmodulation, um zu signalisieren, wie schnell und in welche Richtung sie sich drehen sollen. Die Vex-Motoren sind schön, weil sie einen hohen Betriebsspannungsbereich haben, der zwischen 5 und 15 Volt liegt. Ich verwende 12V, weil ich eine 12V-Batterie hatte. Für die meisten Standard-Hobby-Servos benötigen Sie eine niedrigere Spannung (oft 6 Volt).3) BatterieEin Roboter ist ohne Stromversorgung nutzlos. Zum Testen verwende ich einen handelsüblichen 9V-Wandadapter von RadioShack, aber für den kabellosen Betrieb habe ich in einem alten Laptop einen 12V NiMH-Akku gefunden. Obwohl es nicht genug Ladung hält, um den Laptop zu betreiben, fährt es meinen Vex-Roboter gut. Es kann den Arduino auch über den Vin-Eingangspin am Stromanschluss mit Strom versorgen, der Arduino regelt die 12 V auf 5 herunter und gibt ihn sogar über den 5 V-Ausgangspin am Stromanschluss aus alles verkabeln. Irgendwann werde ich ein schöneres Prototyping-Board bekommen und einige dauerhaftere Verbindungen löten, aber im Moment macht es das Steckbrett einfach, Dinge zu ändern. Mein Steckbrett ist das "Basis-Steckbrett" von SparkFun, nur ein Steckbrett auf einer Metallplatte mit 3 Anschlüssen.5) MAX232-basierter RS232-TTL-Konverter Wenn Sie Ihren Roboter über eine serielle RS-232-Portverbindung fahren möchten (im Gegensatz zu den von Arduino gebauten) in USB) können Sie einen RS232-TTL-Konverter verwenden. Ich verwende einen MAX232, weil ich ein paar davon herumliegen hatte und ich ihn auf ein kleines Stück Prototyping-Platine mit den erforderlichen Kondensatoren gelötet habe. Ich benötige RS-232, weil mein alter Laptop nur einen USB-Anschluss hat und ich diesen für einen Gamecontroller verwende, um den Roboter anzusteuern.6) Zusätzliche Teile nach Wunsch Zum einfachen Debuggen des seriellen Protokolls habe ich eine RGB-LED darauf gesetzt (habe einen mit meiner Arduino-Bestellung bekommen, weil sie cool klangen). Das Licht blinkt nacheinander rot, grün, blau, wenn der Arduino hochfährt, um anzuzeigen, dass der Roboter neu gestartet wurde, und leuchtet dann grün, wenn ein Motorpaket empfangen wurde, blau, wenn ein Lüfterpaket empfangen wurde, und rot, wenn ein schlechtes oder unbekanntes Paket empfangen wurde Paket empfangen wurde. Um den Lüfter anzutreiben, benutzte ich einen Standard-NPN-Transistor (die gleichen, die ich in meinem letzten Instructable demonstriert habe) und einen Widerstand zwischen dem Transistor und dem Arduino (der Transistor zog zu viel Strom und heizte den Arduino auf, also habe ich eine Begrenzung gesetzt) Widerstand ein, um es zu stoppen).

Schritt 3: Arduino- und PC-Programmierung

Arduino- und PC-Programmierung
Arduino- und PC-Programmierung

Um den Arduino zu programmieren, benötigen Sie natürlich die Arduino-Software und ein USB-Kabel. Sie können den Arduino auch mit einer seriellen Schnittstelle und einem TTL-Pegelkonverter programmieren, wenn Ihr PC über eine serielle Schnittstelle verfügt. Beachten Sie, dass die serielle USB-Schnittstelle nicht mit dem ATMega-Prozessor des Arduino kommuniziert, wenn ein Pegelwandler an die seriellen Pins des Arduino (Pins 0 und 1) angeschlossen ist. Trennen Sie ihn also, bevor Sie USB verwenden. Auf dem Arduino benötigen wir eine serielle Schnittstelle, die dies ermöglicht PC zur Steuerung der Motoren. Wir benötigen auch ein PWM-Servoantriebssystem, um die richtigen Signale an die Vex-Motoren zu senden und sicherzustellen, dass sie bei den richtigen Werten in die richtigen Richtungen gehen. Ich habe auch ein einfaches LED-Blinken hinzugefügt, hauptsächlich zur Statusanzeige, aber auch, weil es cool aussieht. Auf dem PC müssen wir den seriellen Port öffnen und Datenrahmen senden, die das Arduino-Programm versteht. Der PC muss sich auch Motorwerte ausdenken. Eine einfache Möglichkeit, dies zu tun, besteht darin, ein USB-Gamepad oder einen Joystick zu verwenden, ich verwende einen Xbox 360-Controller. Eine andere Möglichkeit besteht darin, einen vernetzten Computer (entweder ein Netbook oder ein kleines Mini-ITX-Board) auf dem Roboter selbst zu verwenden, um drahtlos zu fahren. Bei einem Netbook können Sie sogar die Onboard-Webcam verwenden, um einen Video-Feed zu streamen und Ihren Roboter aus der Ferne zu steuern. Ich habe das Linux-Socket-System verwendet, um die Netzwerkprogrammierung für mein Setup durchzuführen. Ein Programm (der "Joystick-Server") wird auf einem separaten PC ausgeführt, an den ein Controller angeschlossen ist, und ein anderes Programm (der "Client") wird auf dem mit dem Arduino verbundenen Netbook ausgeführt. Dies verbindet die beiden Computer und sendet Joystick-Informationen an das Netbook, das dann serielle Pakete an das Arduino sendet, das den Roboter antreibt Baudrate und senden Sie dann die Werte mit einem Protokoll, das Sie auch für den Arduino-Code verwendet haben. Mein serielles Format ist einfach und effektiv. Ich verwende 4 Bytes pro "Frame", um die beiden Motorgeschwindigkeiten zu senden (jedes ist ein einzelnes Byte). Das erste und letzte Byte sind hartcodierte Werte, die verwendet werden, um zu verhindern, dass das Arduino das falsche Byte an den PWM-Code sendet und die Motoren verrückt macht. Dies ist der Hauptzweck der RGB-LED, sie blinkt rot, wenn der serielle Rahmen unvollständig war. Die 4 Bytes sind wie folgt:255 (hartcodiertes "Start"-Byte),,, 200 (hartcodiertes "Ende"-Byte)Um einen zuverlässigen Empfang der Daten zu gewährleisten, stellen Sie sicher, dass Sie zwischen den Programmschleifen genügend Verzögerung einplanen. Wenn Sie Ihren PC-Code zu schnell ausführen, wird der Port überflutet und das Arduino kann anfangen, Bytes zu verlieren oder sogar falsch zu lesen. Auch wenn es keine Informationen verliert, kann es auch den seriellen Port-Puffer des Arduino überlaufen. Für die Vex-Motoren habe ich die Arduino Servo-Bibliothek verwendet. Da Vex-Motoren nur Motoren mit kontinuierlicher Rotation sind, verwenden sie genau die gleichen Signale wie Servos. Anstatt jedoch 90 Grad der Mittelpunkt zu sein, ist dies der Stopppunkt, an dem sich der Motor nicht dreht. Das Senken des "Winkels" bewirkt, dass sich der Motor in eine Richtung dreht, während das Erhöhen des Winkels ihn in die andere Richtung dreht. Je weiter Sie vom Mittelpunkt entfernt sind, desto schneller dreht sich der Motor. Es wird zwar nichts kaputt machen, wenn Sie Werte von mehr als 180 Grad an die Motoren senden, aber ich würde empfehlen, die Werte von 0 bis 180 Grad zu begrenzen (in diesem Fall Geschwindigkeitsinkremente). Da ich mehr Kontrolle und weniger außer Kontrolle geratenes Roboterfahren wollte, habe ich meinem Programm ein Software-"Geschwindigkeitslimit" hinzugefügt, das es nicht zulässt, dass die Geschwindigkeit in beide Richtungen über 30 "Grad" ansteigt (Bereich beträgt 90 +/- 30).. Ich plane, einen seriellen Port-Befehl hinzuzufügen, der das Geschwindigkeitslimit ändert, damit der Computer das Limit im Handumdrehen aufheben kann, wenn Sie schnell gehen möchten (ich habe in kleinen Räumen getestet, damit ich nicht möchte, dass es schneller wird und in die Wand stürzen, insbesondere mit einem Netbook darauf). Für weitere Informationen laden Sie den beigefügten Code am Ende dieses Instructable herunter.

Schritt 4: Fügen Sie ein Netbook hinzu, um unbekannte Welten aus der Ferne zu erkunden

Fügen Sie ein Netbook hinzu, um unbekannte Welten aus der Ferne zu erkunden
Fügen Sie ein Netbook hinzu, um unbekannte Welten aus der Ferne zu erkunden
Fügen Sie ein Netbook hinzu, um unbekannte Welten aus der Ferne zu erkunden
Fügen Sie ein Netbook hinzu, um unbekannte Welten aus der Ferne zu erkunden

Mit einem vollwertigen PC an Bord Ihres Arduino-Roboters können Sie Ihren Roboter so weit fahren, wie Ihr WLAN ohne Kabel reicht, um den Roboter auf einen Bereich zu beschränken. Ein guter Kandidat für diesen Job ist ein Netbook, denn Netbooks sind winzig, leicht, haben einen eingebauten Akku, haben WiFi und die meisten haben sogar eingebaute Webcams, die verwendet werden können, um die Sicht des Roboters zurück an einen sicheren Ort zu streamen kann es kontrollieren. Auch wenn Ihr Netbook mit mobilem Breitbanddienst ausgestattet ist, ist Ihre Reichweite praktisch unbegrenzt. Mit genügend Batterien könnten Sie Ihren Roboter zur örtlichen Pizzeria fahren und eine Bestellung über die Webcam aufgeben (nicht empfohlen, Roboter sind normalerweise nicht in Pizzerien erlaubt, auch wenn es sich um Leute handelt, die wahrscheinlich versuchen werden, den Roboter zu stehlen und vielleicht sogar die Pizza). Es kann auch eine gute Möglichkeit sein, die dunklen Tiefen Ihres Kellers bequem von Ihrem Bürostuhl aus zu erkunden, obwohl das Hinzufügen einiger Scheinwerfer in diesem Fall sehr hilfreich sein kann.

Es gibt viele Möglichkeiten, dies zum Laufen zu bringen, viele sind wahrscheinlich viel einfacher als meine, obwohl ich mit Processing oder skriptbasierten Sprachen nicht vertraut bin, also habe ich mich für Linux und C++ entschieden, um eine drahtlose Steuerverbindung zwischen meiner Basisstation (auch bekannt als altes ThinkPad) und mein neues Lenovo IdeaPad Netbook, das mit der Arduino-Laufwerksbasis verbunden ist. Auf beiden PCs läuft Ubuntu. Mein ThinkPad ist mit dem LAN meiner Schule verbunden und mein IdeaPad ist mit meinem WLAN-Zugangspunkt verbunden, der auch mit dem LAN der Schule verbunden ist (ich konnte keinen zuverlässigen Videostream vom WLAN der Schule erhalten, da alle anderen es verwenden, also habe ich eingestellt meinen eigenen Router hochfahren, um eine gute Verbindung herzustellen). Eine gute Verbindung ist in meinem Fall besonders wichtig, da ich keine Fehlerprüfung oder Zeitüberschreitung implementiert habe. Wenn die Netzwerkverbindung plötzlich abbricht, fährt der Roboter weiter, bis er mit etwas zusammenstößt oder ich renne und stoppe ihn. Dies ist der Hauptgrund für meine Entscheidung, den Antriebsstrang sowohl durch Untersetzung der Motoren als auch durch die Implementierung einer Software-Geschwindigkeitsbegrenzung zu verlangsamen.

Schritt 5: Holen Sie sich einen Video-Feed

Nachdem Ihr Roboter-Explorer drahtlos fahren kann, möchten Sie wahrscheinlich einen Video-Feed vom Netbook haben, damit Sie feststellen können, wo sich Ihr Roboter befindet. Wenn Sie Ubuntu verwenden (oder auch nicht!), empfehle ich die Verwendung des VLC Media Player zum Streamen. Wenn Sie es nicht installiert haben, verpassen Sie wirklich etwas, also installieren Sie es mit dem Befehl "sudo apt-get install vlc", suchen Sie im Ubuntu Software Center (nur 9.10) nach VLC oder laden Sie das Installationsprogramm von videolan herunter. org, wenn Sie unter Windows arbeiten. Sie müssen VLC auf beiden PCs ausführen. VLC kann sowohl Streams als auch Streams in einem Netzwerk abspielen. Stellen Sie auf dem Netbook (Roboter-PC) zunächst sicher, dass Ihre Webcam (entweder integriert oder über USB angeschlossen) funktioniert, indem Sie auf Aufnahmegerät öffnen klicken und Video für Linux 2 ausprobieren (einige ältere Geräte benötigen möglicherweise eher Video für Linux als die neue Version 2). Sie sollten die Kameraansicht auf dem Netbook-Bildschirm sehen. Um es zu streamen, wählen Sie Streaming aus dem Menü Datei und wählen Sie dann die Registerkarte Aufnahmegerät oben im angezeigten Fenster. Denken Sie daran, dass Sie mit Ubuntu (und vielen anderen Linux-Distributionen) die Alt-Taste gedrückt halten können, um Fenster zu klicken und zu ziehen, die für Ihren Bildschirm zu groß sind (besonders nützlich bei älteren Netbooks, obwohl sogar mein IdeaPad ohne ersichtlichen Grund eine seltsame Auflösung von 1024 x 576 hat). Um die Verzögerung zu reduzieren, klicken Sie auf "Mehr Optionen anzeigen" und verringern Sie den Caching-Wert. Der Betrag, um den Sie es senken können, hängt manchmal vom Gerät ab, es wird instabil, wenn Sie es zu stark absenken. Bei 300 ms kann es zu einer leichten Verzögerung kommen, aber das ist nicht so schlimm.

Klicken Sie als Nächstes auf Stream, um zum nächsten Menü zu gelangen. Klicken Sie auf Weiter, wählen Sie dann HTTP aus und fügen Sie es als neues Ziel hinzu. Richten Sie nun Transcoding ein, um den Stream zu verkleinern. Ich habe ein benutzerdefiniertes Profil erstellt, das M-JPEG mit 60 kb/s und 8 fps verwendet. Dies liegt daran, dass die Verwendung eines fortschrittlichen Codecs wie MPEG oder Theora enorme CPU-Zeit auf dem Atom-Prozessor eines Netbooks verbraucht und dies dazu führen kann, dass Ihr Video-Feed ohne ersichtlichen Grund stoppt. MJPEG ist ein einfacher Codec, der bei niedrigen Bitraten einfach zu verwenden ist. Nachdem Sie Ihren Stream gestartet haben, öffnen Sie VLC auf Ihrem anderen PC, öffnen Sie einen Netzwerkstream, wählen Sie HTTP und geben Sie dann die IP-Adresse Ihres Netbooks (entweder lokal oder Internet, je nachdem, wie Sie eine Verbindung herstellen) gefolgt von ":8080" ein. Sie müssen den Port aus irgendeinem Grund angeben, sonst erhalten Sie Fehler. Wenn Sie eine anständige Verbindung haben, sollten Sie den Feed Ihrer Webcam auf Ihrem anderen PC sehen, aber es wird eine leichte (etwa eine Sekunde) Verzögerung geben. Ich weiß nicht genau, warum diese Verzögerung auftritt, aber ich kann nicht herausfinden, wie ich sie loswerden kann. Öffnen Sie nun die Steuerungs-App und fahren Sie Ihren Netbook-Roboter. Verschaffen Sie sich ein Gefühl dafür, wie die Verzögerung beim Fahren funktioniert, damit Sie mit nichts zusammenstoßen. Wenn es funktioniert, ist Ihr Netbook-Roboter fertig.

Empfohlen: