Home > Technologie > Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Advertisement

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Dieses Instructable zeigt Ihnen, wie Sie Ihre eigenen Web Connected Robot (mit einem Arduino Mikrocontroller und Asus eee pc) zu bauen.

Warum möchten Sie einen Web Connected Robot? Mit natürlich zu spielen. Fahren Sie Ihren Roboter aus dem ganzen Raum oder über das Land, mit nichts mehr als Skype und einem Web-Browser (nichts auf dem Computer zu installieren). Danach? Graben Sie in die Software und passen Sie es wie Sie möchten, fügen Sie ein GPS, so können Sie sehen, wo Sie auf einer Karte fahren, fügen Temperatursensoren Karte Temperaturgradienten in Ihrem Haus oder Sonar-Sensoren hinzufügen, um Steuerelemente auf, was Sie sind Web Fahrer können und können nicht laufen.

Eigenschaften:

  • Preiswert - (~ $ 500, wenn Sie alle Teile neu kaufen und deutlich günstiger, wenn Sie graben in Ihrem Teile bin)
  • Einmal in Betrieb genommen und das Steuern des Roboters erfordert nur einen Webbrowser - (und Skype, wenn Sie sehen möchten, wohin Sie fahren)
  • Open Source und leicht anpassbar - (verwendet einen Arduino Mikrocontroller, Verarbeitung für den Webserver und alle Software kann auf Linux (alle der Code ausgeführt werden soll , auch zu machen Springen in und Dinge zu verändern , leicht) stark kommentiert)
  • Modulares Design (nicht ein komplett integriertes System, wenn Sie einen anderen Videokonferenzservice ohne Sorgen nutzen wollen oder wenn Sie einen Basic-Stempel anstatt ein Arduino genau ein kleines Stück Code und Slot in)

Hier ist ein kurzes Video von meinem Web Connected Robot aus der Küche vertrieben.

Schritt 1: Teile & Werkzeuge

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Es werden nur wenige Teile benötigt:

Roboter: Arduino Controlled Servo - Roboter - (SERB)
(175 $ @ oomlout.com ) oder (machen Sie Ihre eigenen)

  • Ein Open-Source-Roboter, der einen Arduino-Mikrocontroller wie sein Gehirn verwendet.

(Jede Dual-Servo-Roboter-Plattform mit einem Arduino kann verwendet werden (Option 1) (bitte melden Sie mir, wenn Sie weitere Optionen entdecken)

Computer: Asus EEE PC 4G
($ 280) (@Best Buy)

  • Ein kleiner preiswerter Laptop, der für diesen Zweck vollkommen ist.

(Jeder Laptop (oder Desktop, wenn Sie mit einem Akkord laufen) in der Lage zu laufen Verarbeitungs-Skizzen verwendet werden können)

Laptop - Schreibtisch: Laser - Cut Acryl
(25 $ (@ oomlout) ) oder (bauen Sie Ihre eigenen Schritt 3)

  • Ein paar zusätzliche Acryl-Stücke, die auf ein (SERB) schrauben, um ihm einen Schreibtisch für den Laptop zu sitzen.

Nüsse und Bols: (zu Hause Depot verfügbar)

  • 3mm x 10mm Schraube (x4)
  • 3mm x 15mm Schraube (x4)
  • 3mm Mutter (x8)

Schritt 2: Schneidteile & Montage

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Es gibt drei Optionen für immer Stück für Ihren Laptop-Schreibtisch.

Schneiden

Option 1: (Einkauf von oomlout.com)

  • Laser geschnitten Schreibtisch Stücke und die neccesary Hardware sind von oomlout für $ 25 erhältlich (hier)

Option 2: (Schneiden auf Ihrem eigenen Laser - Cutter oder Ponoko.com)

  • Laden Sie die folgende Datei herunter (03-WEBB-Acryl Parts.cdr oder 03-WEBB-Acryl-Teile (Ponoko P2) .eps)
  • Schneiden Sie sie von 3mm (1/8 ") Acryl

Option 3: (Scroll Saw)

  • Download der Scrollsäge von unten (03-WEBB-ScrollSaw Pattern (A4) .pdf (für A4-Papier) oder 03-WEBB-ScrollSaw Muster (Buchstabe) .pdf (für Briefformat)
  • Überprüfen Sie, ob es beim Drucken nicht skaliert wurde (durch Messen der gedruckten Lineale)
  • Kleben Sie auf ein Stück von 3mm (1/8 ") Acryl und schneiden Sie die Stücke aus.

Zusammenbau:

Laden Sie die Montageanleitung (04-WEBB-Montageanleitung.pdf) unten herunter und stellen Sie den Laptop-Schreibtisch zusammen.

Schritt 3: Software - (Arduino)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Für diejenigen , die Arduino überprüfen Sie die große Kurzanleitung bei heraus Arduino.cc

Zuerst die Software, die auf dem Arduino läuft. Es ist ein sehr einfaches Programm, was der Arduino seinen seriellen Port für Daten überwacht.

Was es sucht, ist ein Gespräch 5 Bytes lang.

  • Byte 1-3 (Prüfbytes "AAA")
  • Byte 4 - Befehl (Teilt dem Arduino , was zu tun) (Unterstützte Befehle 'F' - nach vorne, 'B' - rückwärts, 'L' - links, 'R' - Recht, 'S' - Geschwindigkeit, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Byte 5 Parameter - Für die Verschiebebefehle wird dies als Zeitintervall (Parameter * 100 ms) interpretiert, für die Drehzahlbefehle ein Prozentsatz von 0-100

Der Code ist kommentiert gründlich und angesichts dieses Framework Hinzufügen zusätzlicher Befehle sollte einfach sein.

Herunterladen:

  • Laden Sie die angehängte Zip-Datei herunter. (05-WEBB-Arduino Code.zip)
  • Entpacken Sie in Ihr Arduino Sketch-Verzeichnis. (Standard: Meine Dokumente \ Arduino \)
  • Öffnen Sie Ihre arduino Entwicklungsumgebung und laden Sie zu Ihrem Arduino.

Kopieren und Einfügen

  • Kopieren Sie den Code von unten.
  • Fügen Sie in die Arduino-Entwicklungsumgebung ein.
  • Laden Sie zu Ihrem Arduino.

Anhang: Das Arduino - Programm

  / * * Arduino Controlled Web Connected Robot (WEBB) - Serieller Host * Weitere Details finden Sie unter: http://www.oomlout.com/serb * * Verhalten: Der Arduino lauscht seinem seriellen Port für einen Befehl * im Format 254, 88, 88, (COMMAND), (TIME) * Unterstützte Befehle - 'F' - 70 - Vorwärts * 'B' - 66 - Rückwärts * 'L' - 76 - Links * 'R' - 82 - - 83 - Geschwindigkeit * 'X' - 88 - SetSpeedLeft * 'Y' - 89 - SetSpeedRight * 'C' - 67 - Stopp * Unterstützte Zeiten - 0 - 255 (0 bis 25,5 Sekunden) Wert * 100 Millisekunden * sp * Verkabelung: Rechte Servosignal - Pin 9 * Links Servosignal - Pin 10 * * Lizenz: Diese Arbeit unterliegt den Bestimmungen der Creative Commons Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Unported-Lizenz.  Um eine Kopie dieser Lizenz zu erhalten, besuchen Sie bitte http://creativecommons.org/licenses/by-sa/3.0/ * oder senden Sie einen Brief an Creative Commons, 171 Second * Street, Suite 300, San Francisco, Kalifornien 94105, * USA.  * * / // --------------------------------------------- ---------------------------- // START OF ARDUINO SERIAL SERVER PREAMBLE // Definieren von Konstanten, die jedem Befehl entsprechen (auch die ASCII-Codenummer ) #define FORWARD 70 // F # define BACKWARD 66 // B # definiere LEFT 76 // L # definiere RIGHT 82 // R # definiere SETSPEED 83 // S # definiere STOP 67 // C # definiere SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y / * Die drei Check-Bytes (verwendet, um den Roboter nicht auf zufällige serielle * Daten zu reagieren) zurzeit "AAA" * / # definieren checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // START VON ARDUINO STEUERTER SERVO ROBOTER (SERB) PREAMBLE # include <Servo.h> #define LEFTSERVOPIN 10 // Der Pin des linken Servos ist verbunden mit # define RIGHTSERVOPIN 9 // Der Pin des rechten Servos ist mitServo leftServo verbunden;  Servo rechtsServo;  Int leftSpeed ​​= 50;  // die Geschwindigkeit der Roboter leftServo // ein Prozentsatz zwischen 0 und 100int rightSpeed ​​= 100;  // die Geschwindigkeit der Roboter hält rightServo // ein Prozentsatz zwischen 0 und 100 // END OF ARDUINO CONTROLLED SERVO ROBOTER (SERB) PREAMBLE // ------------------- -------------------------------------------------- ----- // Ruft alles auf und runningvoid setup () {Serial.begin (9600);  // Startet den seriellen Port serbSetup ();  // setzt den Zustand aller neccesary // pins und fügt der Skizze Servos hinzu // Das Hauptprogramm loopvoid loop () {serbPollSerialPort ();  // schaut ständig auf den seriellen Port //, wenn es Daten gibt, die es verarbeitet} // ------------------------------ ----------------------------------------- // START VON ARDUINO SERIENSERVER ROUTINEN / * * Befehle, die an den seriellen Port des arduino ausgegeben werden * / void serbPollSerialPort () {int dta;  // Variable zum Halten des seriellen Bytes if (Serial.available ()> = 5) {// wenn sich 5 Byte im Puffer befinden (Länge pf eine vollständige Anforderung) dta = Serial.read ();  If (dta = checkByte1) {// Checks für das erste Check-Byte dta = Serial.read ();  If (dta = checkByte2) {// Checks für zweites Check-Byte dta = Serial.read ();  If (dta = checkByte3) {// Checks für das dritte Check-Byte int command = Serial.read ();  // Viertes Byte ist der Befehl int param1 = Serial.read ();  // Fünftes Byte ist param1 interpretCommand (Befehl, param1);  // sendet die geparste Anforderung an den Handler.}}}}} / * * Nimmt den Befehl und den Parameter an und übergibt sie an den Roboter * / void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward );  Verzögerung (param1 * 100);  GoStop ();} // if forward else if (Befehl == BACKWARD) {goBackward ();  Verzögerung (param1 * 100);  GoStop ();} // if rückwärts else if (command == LEFT) {goLeft ();  Verzögerung (param1 * 100);  GoStop ();} // if left else if (Befehl == RIGHT) {goRight ();  Verzögerung (param1 * 100);  GoStop ();} // if rechts else if (Befehl == SETSPEED) {setSpeed ​​(param1);} // wenn Einstellung Geschwindigkeit sonst if (Befehl == STOP) = // SETSPEEDLEFT) {setSpeedLeft (param1);} // bei Einstellung linke Geschwindigkeit sonst if (Befehl == SETSPEEDRIGHT) {setSpeedRight (param1);} // wenn setze rechtsdrehzahl sonst {// wenn nicht erkannter Befehl ein wenig shimmey tun geh nach links();  Verzögerung (150);  Geh rechts();  Verzögerung (150);  GoStop ();  }} // ---------------------------------------------- -------------------------- // START OF ARDUINO CONTROLLED SERVO ROBOTER (SERB) ROUTINES / * * richtet Ihr arduino ein, um Ihren SERB zu adressieren Die enthaltenen Routinen * / void serbSetup () {setSpeed ​​(leftSpeed);  PinMode (LEFTSERVOPIN, OUTPUT);  // setzt den linken Servosignalstift // auf den Ausgang pinMode (RIGHTSERVOPIN, OUTPUT);  // setzt den rechten Servosignalstift // zur Ausgabe leftServo.attach (LEFTSERVOPIN);  // bindet den linken Servo rechtsServo.attach (RIGHTSERVOPIN);  // fügt das rechte Servo ein goStop ();} / * * setzt die Geschwindigkeit des Roboters zwischen 0- (gestoppt) und 100- (volle Geschwindigkeit) * HINWEIS: Geschwindigkeit verändert nicht die aktuelle Geschwindigkeit, die Geschwindigkeit muss geändert werden Der go-Methoden, bevor Änderungen auftreten. * / Void setSpeed ​​(int newSpeed) {setSpeedLeft (newSpeed);  // setzt die linke Geschwindigkeit setSpeedRight (newSpeed);  // set right speed} / * * Setzt die Geschwindigkeit des linken Rads * / void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed ​​= 100;} // falls Geschwindigkeit größer als 100 // ist 100 if (newSpeed ​​<= 0) {newSpeed ​​= 0;} // wenn Geschwindigkeit kleiner als 0 ist // es 0 leftSpeed ​​= newSpeed ​​* 0.9;  // zwischen 0 und 90} / * * Setzt die Geschwindigkeit des rechten Rads * / void setSpeedRight (int newSpeed) {if (newSpeed> = 100) {newSpeed ​​= 100;} // wenn die Geschwindigkeit größer als 100 // ist (NewSpeed ​​<= 0) {newSpeed ​​= 0;} // wenn Geschwindigkeit kleiner als 0 ist // es 0 rightSpeed ​​= newSpeed ​​* 0.9;  // skaliert die Geschwindigkeit, um zu sein} / * * sendet den Roboter nach vorne * / void goForward () {leftServo.write (90 + leftSpeed);  RightServo.write (90 - rightSpeed);} / * * sendet den Roboter rückwärts * / void goBackward () {leftServo.write (90 - leftSpeed);  RightServo.write (90 + rightSpeed);} / * * sendet den Roboter rechts * / void goRight () {leftServo.write (90 + leftSpeed);  RightServo.write (90 + rightSpeed);} / * * sendet den Roboter links * / void goLeft () {leftServo.write (90 - leftSpeed);  RightServo.write (90 - rightSpeed);} / * * stoppt den Roboter * / void goStop () {leftServo.write (90);  END OF ARDUINO CONTROLLED SERVO ROBOTER (SERB) ROUTINEN // ------------------------- -----------------------------------------------

Schritt 4: Software - Roboter-Laptop (WebServer)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

(Processing ist eine Open - Source - Programmiersprache und Umgebung , die super einfach zu beginnen mit. Für weitere Informationen besuchen Verarbeitung )

Die Software, die auf dem Roboter-Laptop läuft ist auch ganz einfach. Es ist ein ziemlich rudimentärer Web-Server (der für Web-Seiten-Anfragen von einem Webbrowser abhört), eine kleine Benutzeroberfläche (um ihn einzurichten) und Einrichtungen zum Übergeben der Befehle, die vom Webserver an den Arduino empfangen werden.

So installieren Sie schnell: (Windows)

  • Laden Sie die ZIP-Datei unten (06-WEBB-Processing Webserver (Windows exe) .zip)
  • Entpacken Sie es und führen Sie die .exe-Datei (_WEBB_WebServer_RobotComputer.exe)

In Bearbeitung bearbeiten:

  • Laden Sie die ZIP-Datei herunter (06-WEBB-Processing Webserver (Quelldateien) .zip)
  • Entpacken Sie jede beliebige Stelle auf Ihrem Computer.
  • Öffnen Sie die Verarbeitungsumgebung und öffnen Sie (_WEBB_WebServer_RobotComputer.pde)

Zu testen:

  • Führen Sie das Programm aus.
  • In Kasten # 1 gibt es eine Liste der vorhandenen comm Häfen auf Ihrem Computer (klicken Sie an das, das Ihr Arduino angeschlossen wird, an (Ihr Roboter zuckt einige Male, während der Computer anschließt, und ein cyan-Punkt erscheint neben dem gewählt COM-Port)
  • In Box # 2 testen, um zu sehen, ob Ihr Arduino angeschlossen ist. Klicken Sie auf einen der Pfeile und hoffentlich bewegt sich Ihr Roboter in der geklickten Richtung für eine halbe Sekunde.
  • Klicken Sie im Feld # 3 auf die Schaltfläche "Start", um den Webserver zu starten.
  • Öffnen Sie einen Web - Browser (auf dem Roboter - Laptop) und besuchen http://127.0.0.1:12345/ControlPage.html (hoffentlich die Kontrolle Web - Seite mit den Tasten auf sie erscheint) -Details, wie diese Seite im nächsten Schritt zu verwenden , -

Was ist los:

  • Der Webserver hört Port 12345 für HTTP-Anfragen (was gesendet wird, wenn Sie eine Webseitenadresse eingeben)
  • Es gibt zwei Arten von Anforderungen, auf die es reagiert.

1. Es hört für "ControlPage.html" und wird die Steuer Webpage senden
2. Er wartet auf Anforderungen der Form "/ Nachfrage? Command = F & param1 = 100" (diese Befehle werden analysiert und mit dem Arduino ( in diesem Beispiel in dem Roboter 10 Sekunden lang geht nach vorn würde gesendet)

Anhang: (Der Code für den WebServer)

  / * * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Für weitere Details besuchen Sie: http://www.oomlout.com/serb * * Verhalten: Das Programm hört auf http (Webpage) Anfragen in der Form * "/ request F - 70 - Vorwärts * 'B' - 66 - Rückwärts * 'L' - 76 - Links * 'R' - 82 - Rechts * 'S' - 83 - Geschwindigkeit * 'X' - 88 - SetSpeedLeft * 'Y' - 89 - SetSpeedRight * 'C' - 67 - Stop * param1's - 0 - 255 (0 bis 25,5 Sekunden) Wert * 100 Millisekunden * Wenn Sie nach ControlPage.html fragen * * Operation: 1. Klicken Sie auf den Comm-Port, mit dem Ihr Arduino verbunden ist. * Verwenden Sie die Test-Schaltflächen, um zu sehen, ob Ihr Arduino hört * Richtung geklickt für eine halbe Sekunde) * 3. Klicken Sie auf Start und Ihr Webserver wird für Anfragen zu hören * * * Lizenz: Diese Arbeit unterliegt der Lizenz Creative Commons * Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported-Lizenz.  Um eine Kopie dieser Lizenz zu erhalten, besuchen Sie bitte http://creativecommons.org/licenses/by-sa/3.0/ * oder senden Sie einen Brief an Creative Commons, 171 Second * Street, Suite 300, San Francisco, Kalifornien 94105, * USA.  * * / Import processing.serial. *;  // importieren Sie die serielle Bibliothek zur Verwendung von Serial (für das Gespräch mit Arduino) import processing.net. *;  // Importieren der Netzwerkbibliothek für die Verwendung von Server (für das Gespräch mit dem Internet) / * Serielle Schnittstelle Verwandte Variablen * / int serialPortIndex = -1;  // den Index der seriellen Schnittstelle, die wir in der Serial.list () listString [] commOptions verwenden;  // Eine Variable, in der Serial.list () gespeichert wird, so dass es keine Notwendigkeit gibt, // die seriellen Ports abzufragen, jedes Mal wenn wir sie wiedergeben wollen (Polling verursacht einen // Sprung in den Arduino-Servos) Serial serialPort;  // Macht den seriellen Port adressierbar über diese Skizze / * Graphic und Rendering Related Variables * / PFont font;  // macht font public, so dass es nur einmal geladen werden muss (Arial-72) / * Netzwerkbezogene Variablen * / Server wServer;  // Der Server, der Webanforderungen behandelt port = 12345;  // Der Port, auf den der Server toint cycleCount = 0 anhört;  // Gibt an, wie oft die Draw-Schleife ausgeführt wird (wird verwendet, um // den "laufenden" Text zu animieren) / * Utility-Variablen * / PImage bg;  // Das Hintergrundbild aktuell \ WEBB-background.png / * * Schaltfläche Verwandte Variablen * (Schaltflächen sind sehr grob implementiert, Bounding Boxes werden gespeichert und Grafik und Text werden auf dem Hintergrundbild gezeichnet).  Verschieben der Schaltflächenvariablen wird die Darstellung der Schaltflächen nicht verschieben * / Schaltfläche comm1;  Schaltfläche comm2;  Schaltfläche comm3;  Schaltfläche comm4;  // Die Tasten zur Auswahl der richtigen seriellen PortButton auf;  Knopf rechts;  Knopf links;  Taste unten; // Die Richtungstasten, um zu prüfen, ob der Roboter reagiertButton webServer;  // Die Schaltfläche zum Starten des webServers / * * setzt evrything up * / void setup () {frameRate (5);  // Verlangsamt die Skizze ein wenig, so dass es nicht als Besteuerung des Systems bg = loadImage ( "WEBB-background.png") ist;  // Lädt das Hintergrundbild (gespeichert im Skizzenordner) Größe (700, 400);  // Setzt die Größe des Skizzefensters font = loadFont ( "ArialMT-72.vlw");  // Lädt die Schrift, die wir in dieser Skizze verwenden commOptions = Serial.list ();  // Polls die seriellen Ports und bekommt eine Liste der verfügbaren Ports // (dies nur einmal hält den Roboter von zucken, jedesmal wenn er // serielle Schnittstelle abgefragt wird) defineButtons ();  // Definiert die Bounding-Boxen für jeden Button-Hintergrund (bg);  // Zeichnet das Hintergrundbild (dieses Bild enthält alle Schaltflächengrafiken)} / * Die Skizzen main loop * / void draw () {if (cycleCount == 0) {// - call draw routines drawCommBox ();  // Zeichnet die Emelments in der Comm-Box (Feld 1) drawTestBox ();  // Zeichnet alle Elemente in der Testbox (box 2) drawWebServerBox ();  // Zeichnet alle Elemente in der WebServer-Box (Feld 3)} // - Aufruf der Arbeitsroutinen pollWebServer ();  // Überprüft den Webserver, ob irgendwelche Anfragen über das Netzwerk eingegangen sind. // // ------------------------------ ----------------------------------------------//Start von (Zeichenkette 1) * / void drawCommBox () {fill (0,0,0)) Zeichnen von Routinen (aufgeteilt nur um Code besser zu lesen) / * * Die Zeichnungsaktualisierungsroutine (wird in jedem Zyklus ausgeführt) ;  // Setzt die Füllung auf black textFont (font, 15);  // Setzt die Schrift auf die richtige Größe für (int i = 0; i <commOptions.length; i ++) {// Für jeden Komm-Optionstext (commOptions [i], 100, 102 + i * 70);  // Schreibe den Namen jeder Komm-Option neben // der entsprechenden Schaltfläche} / * Zeichne den Punkt neben dem aktuell aktiven Comm-Port * / if (serialPortIndex! = -1) {// prüft, ob ein Comm-Port ausgewählt wurde Füllen (0,147,221);  // Set füllen auf Cyan-Ellipse (180, 96 + 70 * serialPortIndex, 30, 30);  // Zeichnen eines Kreises neben dem aktuell aktiven Comm-Port}} / * Die Draw-Aktualisierungsroutine (wird in jedem Zyklus ausgeführt) für Elemente in der Testbox (Feld 2) * / void drawTestBox () {} / * Die Draw-Aktualisierungsroutine (ausgeführt Jeder Zyklus) für Elemente im Webserver-Feld (Feld 3) * / void drawWebServerBox () {fill (0,0,0);  // Setzt die Füllung auf black textFont (font, 30);  // Setzen Sie die Schrift auf die richtige Größe, wenn (wServer == null) {text ( "Start", 553, 210);  // Wenn der Webserver nicht gestartet hat, schreibt Start auf der Schaltfläche} else {String running = "Running.";  // Wenn der Webserver läuft schreibt läuft und // eine Progression der Punkte für die Bewegung if ((cycleCount / 1)> 0) {running = running + ".";} // die Anzahl der Punkte basiert auf cycleCount if ( (ZyklusZähler / 1)> 1) {running = running + ".";} If ((cycleCount / 1)> 2) = 0;} Text (ausgeführt, 520, 210);  } CycleCount ++;  // Jedes Mal, wenn cycleCount um eins erhöht wird // Ende der Zeichnungsroutinen // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Start von Dienstroutinen / * * mouse jedes Mal die Maus gedrückt wird dieses * prüft wird aufgerufen, wenn die Maus in eine der Schaltfläche Umgrenzungskästen ist *, und wenn es die entsprechende Routine aufgerufen * / void mouse () {if (comm1.pressed ()) { updateSerialPort (0);} // Änderungen des COM-Port bei Index 0 in Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Änderungen des COM-Port am Index 1 in Serien .list () else if (comm3.pressed ()) {updateSerialPort (2);} // Änderungen des COM-Port mit dem Index 2 in Serial.list () else if (comm4.pressed ()) {updateSerialPort (3) ;} // Änderungen an dem Comm-Port am Index 3 in Serial.list () else if (up.pressed ()) {sendRobotCommand ( "F", 5);} // Sendet einen Befehl, um den Roboter zu bewegen Sekunden else if (left.pressed ()) {sendRobotCommand ( "L", 5);} // einen Befehl sendet der Roboter 0,5 Sekunden else if (right.pressed ()) {sendRobotCommand ( "R" nach links zu bewegen, 5);} // Sendet einen Befehl, um den Roboter für 0,5 Sekunden weiter zu bewegen, wenn (down.pressed ()) {sendRobotCommand ( "B", 5);} // Sendet einen Befehl, um den Roboter rückwärts für 0,5 Sekunden zu bewegen Sonst if (webServer.pressed ()) {startWebServer ();} // Startet den webServer cycleCount = 0;  Hintergrund (bg);  // Wiederholt das Hintergrundbild (dieses Bild hat alle Schaltflächengrafiken auf ihm) draw ();} / * * Aufgerufen, sobald eine Ausführung es den Server überprüft, um zu sehen, ob es wartende Verbindungen * gibt, wenn es eine wartende Verbindung gibt, die es zieht Aus der Anforderung heraus und übergibt sie an die parseRequest (String) * - Routine, um zusätzlichen Text zu entfernen.  Diese wird dann an die interpretRequest (String) -Routine geschickt, um die entsprechende Aktionsroutine aufzurufen (dh an Roboter zu senden).  * GET / Anfrage: * * Eine Anforderung wird durch Eingabe der Computer-Adresse und Port in einen Webbrowser * Für die lokale Maschine "http://127.0.0.1:12345/request?command=F&param1=100" * * Beispiel Anfrage weitergeleitet? command = F & param1 = 100 HTTP / 1.1 * User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit / 525,19 (KHTML, wie Gecko) * Accept: * // * * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive-* * Beispiel Reply ( für verarbeitete Anfrage) * HTTP / 1.1 200 OK * Anschluss: schließen * Content-Type: text / html * * Befehl: F param1: 100 * / void pollWebServer () {if (wServer = null) {// wenn der WebServer Wird ausgeführt Client request = wServer.available ();  // Lädt den nächsten Client in der Zeile im // Server (null wenn keine Requests warten) if (request! = Null) {// wenn es einen Request-Prozess gibt es String fullRequest = request.readString ();  // Inhalt der Anfrage als Zeichenfolge speichern String ip = request.ip ();  // Speichern der Client-IP-Adresse als String string requestString = parseRequest (fullRequest.toUpperCase ());  // Strip weg alle zusätzlichen // Informationen, die nur den Anforderungsstring zurücklassen (Text nach GET) // (verschiebt in Großbuchstaben, um das String-Testen zu erleichtern) if (requestString.indexOf ( "REQUEST?")! = -1) { // Prüft, ob die Anfrage "REQUEST?"  String reply = interpretRequest (requestString);  // Sendet die Anfrage an den Request-Interpreter request.write ( "HTTP / 1.1 200 OK \ nConnection: close \ nContent-Type: text / html \ n \ n" + antworten);  // Sendet die Antwort a 200, um zu sagen, dass die Anfrage // behandelt wurde, und die Antwort "string" als Antwort wServer.disconnect (request);  // Trennt den Client} else if (requestString.indexOf ( "CONTROLPAGE")! = -1) {// Wenn die Anforderung für die Steuerung Webseite String ist [] webPageArray = loadStrings ( "WEBB-ControlPage.html");  // Lädt die Steuerelement-Web-Seite aus \ data \ WEBB-ControlPage.html // (als Linienzeile geladen) String webPage = "";  // Zur Bearbeitung einfacher, die Homepage zu machen hat mit // Zeile gelassen worden, bricht so dass diese für die Schleife striops für diese Zeilen aus (int i = 0; i <webPageArray.length; i ++) {webPage = webPage + webPageArray [i];  } Request.write ( "HTTP / 1.1 200 OK \ nConnection: schließen \ nContent-Typ: text / html \ n \ n" + webPage);  // sendet den Browser die Anweisungen, dass die Anfrage nicht verarbeitet wurde, und die Webseite als String wServer.disconnect (request);  // Trennt den Client} else if (requestString.indexOf ( "/ TEST /")! = -1) {// Zum Testen von Ausgaben die Anfrage als println println (fullRequest);  Println (ip);  Request.write ( "HTTP / 1.1 200 OK \ nConnection: schließen \ nContent-Type: text / html \ n \ n");  // sendet den Browser die Anweisungen, dass die Anfrage nicht verarbeitet wurde, und die Webseite als String wServer.disconnect (request);  // Verbindet den Client} else {request.write ( "HTTP / 1.1 404 FILE NOT FOUND \ nConnection: close \ n");  // sendet dem Browser die Anweisungen, dass die Anfrage // nicht verarbeitet wurde (in der Regel aufgrund eines Tippfehlers), dann sagt es an // die Verbindung zu schließen wServer.disconnect (request);  // Trennen der Verbindung zum Client}}}} // Ende der Dienstroutinen // --------------------------------- ------------------------ // --------------------- ----------------------------------------- // Beginn der Setup-Routinen (Routinen aufgerufen * / Void defineButtons () {comm1 = new Button (30, 65, 60, 60); // Definiert die Comm1-Schaltfläche comm2 = new (30, 205, 60, 60); // Definiert die Schaltfläche comm3 comm4 = neue Schaltfläche (30, 275, 60, 60) // Definiert die Taste comm1 oben = neue Schaltfläche (320, 110, 60, 60); // Definiert die Schaltfläche nach oben / vorne links = neue Schaltfläche (260, 170, 60, 60); = Neuer Knopf (380, 170, 60, 60); // Definiert den rechten Knopf nach unten = neuer Knopf (320, 230, 60, 60); // Definiert die Abwärts- / Rückwärtstaste webServer = new Button (493, 180, 60); // definiert die Webserver-Taste} / * * Wenn die Schaltfläche "Start" in der Web-Server-Box gedrückt wird startet der Server für eingehende Verbindungen auf Port-Anschluss * hören (12345) in der Präambel definiert * / void startWebServer ( )} {// wServer == null) {wServer = neuer Server (dieser Port);}} / * * Dies erfordert eine ausführliche http-Anforderung von einem Client und * liefert nur die Anforderungszeile (was kommt nach GET) * / String ParseRequest (String fullRequest) {fullRequest = fullRequest.substring (vollständigerRequest.indexOf ( "GET") + "GET" .length ());  // Schneidet alles in der Zeichenfolge vor GET aus fullRequest = fullRequest.substring (0, fullRequest.indexOf ( ""));  // Nimmt vom Beginn der neuen Zeichenkette bis zum ersten Platz return fullRequest;  // gibt die verkürzte Anforderung zurück} / * * aktualisiert den seriellen Port, der für die Kommunikation mit dem arduino verwendet wird * portIndex ist der Index des Ports, den wir in Serial.list () verwenden möchten;  unexcpected Betrieb * / void updateSerialPort (int Portindex) verursachen könnte beim Start in den Speicher Hinzufügen von seriellen Ports * nach dem Start * als Serial.list () geladen wird {if (commOptions.length> Portindex) {// wenn der übergebene Portindex eine gültige Index in Serial.list () // (dh keine Option drei in einer Liste von zwei) serialPortIndex = portIndex;  // setze die serialPortIndex-Variable auf den neuen serialport index // (dies wird verwendet, um den dot neben dem aktiven Port anzuzeigen)} if (serialPortIndex! = -1) {// prüfe, ob ein Port vorher gewählt wurde (! Serieller_Anschluss = null) {serialPort.stop ();} // wenn eine serielle Schnittstelle bereits wird Anschlag verwendet werden, bevor eine neue Serieller_Anschluss = new Serien (this, Serial.list () [serialPortIndex], 9600) laden;  // Erstellen Sie eine neue Serien Objekt mit dem Arduino 9600 Baud comunicate}} / * * Nimmt eine Anfrage-String (ex: "Request-Befehl = F & param1 = 100") und den Befehl * und param1 Streifen aus und gibt sie an die Arduino (das Hinzufügen zusätzlicher Parameter oder non-arduino-Befehle würde hier vorgenommen werden) * / String interpretRequest (String requestString) {String returnValue = "OK";  // Vorbereiten einer returnValue-Variable String-Befehl;  // Die folgenden drei Zeilen extrahieren den Wert nach "command =" // (die zusätzliche Zeile ist im Fall, dass der Befehlsparameter am // Ende der Anforderung steht und nicht von einem & if (requestString.indexOf ( "COMMAND =") )}} {Befehl = requestString.substring (requestString.indexOf ( "COMMAND =") + "COMMAND =" Länge ());} else {Befehl = "Z";} if (command.indexOf ( " & ")! = -1) {command = command.substring (0, command.indexOf (" & "));} else {Befehl = Befehl;} String param1String; // Die drei folgenden Zeilen extrahieren den Wert nach" param1 = "// (die Zusatzzeile ist für den Fall, dass der Befehlsparameter am Ende der Anforderung steht und nicht von einem & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ( "PARAM1 =") + "PARAM1 =" length ().);} else {param1String = "0";} if (! param1String.indexOf ( "&") = -1) {param1String = param1String .substring (0, param1String.indexOf ( "&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // Schaltet die param1 String in einen Integer sendRobotCommand (Befehl, param1);  // Sendet den Befehl an die Routine, die ihn an den Arduino sendet returnValue = "command:" + command + "param1:" + param1;  // im Moment nur der geparste Befehl, aber das Senden von // als html so formatiert werden kann return returnValue;} / * * Nimmt einen Befehl (derzeit einen Buchstaben) und einen Parameter (ein Byte 0-255) und sendet ihn an die Arduino * was hört und reast * Currrently Unterstützte Befehle * F - * / void sendRobotCommand (Stringbefehl, int param1) {println ( "Befehl:" + Befehl + "Zeit:" + param1);  String checkString = "AAA";  If (serialPort! = Null) {serialPort.write (checkString + Befehl);  SerialPort.write (Byte (param1));  }} // Ende der Einrichtung / nicht sehr häufig aufgerufenen Routinen // ----------------------------------- -------------------------------------------------- // Beispiel-Schaltfläche und RectButton-Code aus processing.org Beispiel mit einigen Änderungen //, die meistens zu vereinfachen und zu entfernen rollen über Animation // http: //processing.org/learning/topics/buttons.html (2008-09-23) Klasse Schaltfläche {int x, y;  Int Breite, Höhe;  Schaltfläche (int ix, int iy, int iwidth, int iheight) {x = ix;  Y = iy;  Width = iwidth;  Höhe = Höhe;  } Boolean gedrückt () {if (overRect ()) {return true;  } Else {return false;}} boolean overRect () {if (mouseX> = x && mouseX <= x + Breite && mouseY> = y && mouseY <= y + Höhe) {return true;  } Else {return false;  Aufrechtzuerhalten.

Schritt 5: Software - (Webseite)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Nun sind wir fast fertig ist alles, was übrig ist, spricht mit Ihrem Roboter.

Get Reden: (über ein lokales Netzwerk -on windows-)

  • Entdecken Sie die lokale IP-Adresse des Laptops. Dazu gehen Sie auf "Start \ Programme \ Accesories \ Command Prompt" und wenn das Terminal-Fenster öffnet sich der Typ "ipconfig". Notieren Sie "IP-Adresse" und gehen Sie zu einem anderen Computer in Ihrem lokalen Netzwerk.
  • Öffnen Sie einen Webbrowser, geben Sie "http: // (Roboter Computer ip): 12345 / ControlPage.html
  • Die Steuerung Web-Seite sollte laden, in der "IP-Adresse" Feld die Roboter-Computer ip.
  • Beginnen Sie mit der Steuerung Ihres Roboters.

Get Reden: (über das Internet)
Nun, da Sie es funktionieren vor Ort immer es reden über das Internet ist nur ein paar Schritte entfernt.

  • (Schwierigste Schritt) Portweiterleitung einrichten - Ihr Computer muss das Internet hören und nicht nur das lokale Netzwerk. Um dies zu tun, müssen Sie Ihrem Router mitteilen, dass er bestimmte Anfragen an den Computer weiterleitet, der den Roboter steuert. Dies ist ein bisschen komplex und geht weit über den Rahmen dieses Instructable. Wenn Sie jedoch besuchen PortForward.com werden sie Ihnen alles , was Sie geben müssen über die Konfiguration des Routers zu wissen (Sie müssen Port 12345 auf Ihren Roboter Laptop zu übermitteln)
  • Weiter entdecken Sie Ihre Internet - IP (besuchen WhatIsMyIP.com )
  • Finally schließlich Skype-Setup ein Videoanruf und erhalten, wem Sie sprechen, um zu besuchen "http: // (Internet-IP): 12345 / ControlPage.html"
  • Geben Sie die Internet-IP in das Feld "IP-Adresse" auf der Steuerungsseite ein und Ihr Web Connected Robot wird aus der Ferne vertrieben.

Schritt 6: Fertig

Machen Sie einen Web Connected Robot (für ca. $ 500) (mit einem Arduino und Netbook)

Nun, das ist es. Ich hoffe, dass Sie eine lustige Zeit haben, Ihren Roboter von einem weit zu fahren. Wenn Sie irgendwelche Probleme mit der Software oder Hardware haben, zögern Sie nicht, einen Kommentar zu hinterlassen, und ich werde versuchen, Ihnen zu helfen.

Wenn Sie möchten mehr ordentlich Projekte zu überprüfen , versuchen Besuch: oomlout.com

Related Reading