Inhoudsopgave:

Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook): 6 stappen (met afbeeldingen)
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook): 6 stappen (met afbeeldingen)

Video: Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook): 6 stappen (met afbeeldingen)

Video: Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook): 6 stappen (met afbeeldingen)
Video: H5 | Hoofdpunt A - (a)biotische factoren | Ecologie + Mens & Milieu 2024, November
Anonim
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook)
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook)
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook)
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook)
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook)
Maak een webverbonden robot (voor ongeveer $ 500) (met behulp van een Arduino en netbook)

Deze Instructable laat je zien hoe je je eigen Web Connected Robot kunt bouwen (met behulp van een Arduino microcontroller en Asus eee pc). Waarom zou je een Web Connected Robot willen? Om mee te spelen natuurlijk. Bestuur je robot van de andere kant van de kamer of door het hele land, met niets meer dan Skype en een webbrowser (niets te installeren op de besturende computer). Daarna? Duik in de software en pas deze aan zoals u wilt, voeg een GPS toe zodat u op een kaart kunt zien waar u rijdt, voeg temperatuursensoren toe om temperatuurgradiënten in uw huis in kaart te brengen, of sonarsensoren om controles toe te voegen op wat u op internet bent bestuurders kunnen wel en niet tegenaan lopen. Functies:

  • Goedkoop - (~ $ 500 als u alle onderdelen nieuw koopt en aanzienlijk goedkoper als u in uw onderdelenbak graaft)
  • Als je de robot eenmaal aan de gang hebt, heb je alleen een webbrowser nodig - (en Skype als je wilt zien waar je rijdt)
  • Open source en gemakkelijk aanpasbaar - (gebruikt een Arduino-microcontroller, verwerking voor de webserver en alle software kan op Linux worden uitgevoerd (alle code is ook zwaar becommentarieerd om het inspringen en het veranderen van dingen gemakkelijk te maken))
  • Modulair ontwerp (geen volledig geïntegreerd systeem, als je een andere videoconferentieservice wilt gebruiken, geen zorgen, of als je een basisstempel hebt in plaats van een Arduino, gewoon een klein stukje code en steek het in)

Hier is een korte video van mijn Web Connected Robot die uit de keuken wordt gereden.

Stap 1: Onderdelen & Gereedschap

Onderdelen & Gereedschap
Onderdelen & Gereedschap

Er zijn slechts een paar onderdelen nodig: Robot: Arduino Controlled Servo Robot - (SERB) ($ 175 @ oomlout.com) of (maak je eigen)

Een open source-robot die een Arduino-microcontroller als brein gebruikt

(elk dual servo-robotplatform met een arduino kan worden gebruikt (optie 1) (stuur me een bericht als je andere opties ontdekt) Computer: Asus eee PC 4G ($ 280) (@Best Buy)

Een kleine goedkope laptop die hier perfect voor is

(elke laptop (of desktop als je met een akkoord wilt rennen) die in staat is om Processing-schetsen uit te voeren, kan worden gebruikt) Laptopbureau: Laser Cut Acrylic ($ 25 (@ oomlout)) of (bouw je eigen stap 3)

Een paar extra acrylstukken die op een (SERB) worden geschroefd om het een bureau te geven waar de laptop op kan zitten

Nuts and Bols: (verkrijgbaar bij home depot)

  • 3 mm x 10 mm bout (x4)
  • 3 mm x 15 mm bout (x4)
  • 3 mm moer (x8)

Stap 2: Snijstukken en montage

Snijstukken en montage
Snijstukken en montage
Snijstukken en montage
Snijstukken en montage
Snijstukken en montage
Snijstukken en montage
Snijstukken en montage
Snijstukken en montage

Er zijn drie opties om stukken voor uw laptopbureau te krijgen. Snijoptie 1: (kopen bij oomlout.com)

lasergesneden bureaustukken en de benodigde hardware zijn verkrijgbaar bij oomlout voor $ 25 (hier)

Optie 2: (Snijden op je eigen lasercutter of Ponoko.com)

  • Download het onderstaande bestand (03-WEBB-Acrylic Parts.cdr of 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • Snijd ze van 3 mm (1/8") acryl

Optie 3: (rolzaag)

  • Download het figuurzaagpatroon van hieronder (03-WEBB-ScrollSaw Pattern (A4).pdf (voor papier van A4-formaat) of 03-WEBB-ScrollSaw Pattern (letter).pdf (voor papier van letter-formaat))
  • Controleer nogmaals of het niet is geschaald tijdens het afdrukken (door de afgedrukte linialen te meten)
  • Lijm op een stuk acryl van 3 mm (1/8") en knip de stukken uit.

Montage: Download hieronder de montagehandleiding (04-WEBB-Assembly Guide.pdf) en zet het laptopbureau in elkaar.

Stap 3: Software - (Arduino)

Software - (Arduino)
Software - (Arduino)

Voor degenen die nieuw zijn bij Arduino, bekijk de geweldige handleiding om aan de slag te gaan op Arduino.cc Allereerst de software die op de Arduino draait. Het is een heel eenvoudig programma, wat de Arduino doet is de seriële poort controleren op gegevens. Waar het naar op zoek is, is een gesprek van 5 bytes lang.

  • Byte 1-3 (Controleer bytes "AAA")
  • Byte 4-opdracht (vertelt de Arduino wat hij moet doen) (Ondersteunde opdrachten 'F' - Vooruit, 'B' - Achteruit, 'L' - Links, 'R' - Rechts, 'S' - Snelheid, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Byte 5 Parameter - Voor de bewegingscommando's wordt dit geïnterpreteerd als een tijdsinterval (Parameter * 100 ms), en voor de snelheidscommando's een percentage van 0-100

De code is grondig becommentarieerd en gezien dit raamwerk zou het toevoegen van extra opdrachten eenvoudig moeten zijn. Downloaden:

  • Download het bijgevoegde zip-bestand. (05-WEBB-Arduino Code.zip)
  • Pak uit naar uw Arduino Sketch-map. (standaard: Mijn documenten\Arduino)
  • Open uw Arduino-ontwikkelingsomgeving en upload naar uw Arduino.

Kopiëren en plakken

  • Kopieer de code van hieronder.
  • Plak in de Arduino-ontwikkelomgeving.
  • Upload naar uw Arduino.

Bijlage: Het Arduino-programma

/* * Arduino Controlled Web Connected Robot (WEBB) - seriële host * Ga voor meer informatie naar: https://www.oomlout.com/serb * * Gedrag: de Arduino luistert naar zijn seriële poort voor een opdracht * in formaat 254, 88, 88, (COMMANDO), (TIJD) * Ondersteunde opdrachten - &aposF&apos - 70 - Vooruit * &aposB&apos - 66 - Achteruit * &aposL&apos - 76 - Links * &aposR&apos - 82 - Rechts * &aposS&apos - 83 - Snelheid * &aposX&aposLeft - 88 - Set * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * Ondersteunde tijden - 0 - 255 (0 tot 25,5 seconden) waarde * 100 milliseconden *sp * Bedrading: Rechter servosignaal - pin 9 * Linker servosignaal - pin 10 * * Licentie: Dit werk is gelicentieerd onder de Creative Commons * Naamsvermelding-GelijkDelen 3.0 Unported-licentie. Om * een kopie van deze licentie te bekijken, gaat u naar * https://creativecommons.org/licenses/by-sa/3.0/ * of stuurt u een brief naar Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * VS. * */ //--------------------------------------------- ----------------------------//START OF ARDUINO SERIAL SERVER PREAMBLE//Constanten definiëren die overeenkomen met elke opdracht (ook het ascii-codenummer) #define FORWARD 70 //F#define BACKWARD 66 //B#define LEFT 76 //L#define RECHTS 82 //R#define SETSPEED 83 //S#define STOP 67 //C#define SETSPEEDLEFT 88 //X #define SETSPEEDRIGHT 89 //Y/*De drie check bytes (gebruikt om te voorkomen dat de robot reageert op willekeurige seriële *data) momenteel "AAA" */#define checkByte1 65 // "A"#define checkByte2 65 // "A "#define checkByte3 65 // "A" //-------------------------------------- ------------------------------------// START VAN ARDUINO GECONTROLEERDE SERVO ROBOT (SERB) INLEIDING#include #define LEFTSERVOPIN 10 // De pin waarop de linker servo is aangesloten #define RIGHTSERVOPIN 9 // De pin waarop de rechter servo is aangesloten Servo leftServo; Servo rechtsServo; int links Snelheid = 50; // houdt de snelheid van de robots leftServo vast // een percentage tussen 0 en 100int rightSpeed = 100; //houdt de snelheid van de robots rightServo //een percentage tussen 0 en 100// EINDE VAN ARDUINO GESTUURDE SERVO ROBOT (SERB) INLEIDING//------------------- -------------------------------------------------- -----//Haal alles up and runningvoid setup() { Serial.begin(9600); // Start de seriële poort serbSetup(); // stelt de status van alle benodigde // pinnen in en voegt servo's toe aan je schets}//Het hoofdprogramma loopvoid loop () { serbPollSerialPort (); // kijkt voortdurend naar de seriële poort // als er gegevens zijn, wordt deze verwerkt}//------------------------------ -----------------------------------------//BEGIN VAN ARDUINO SERILE SERVER ROUTINES/ * * Verwerkt commando's geleverd aan de arduino's seriële poort */void serbPollSerialPort(){ int dta; //variabele om de seriële byte vast te houden if (Serial.available()>= 5) { //if 5 bytes in de buffer (lengte pf een volledig verzoek) dta = Serial.read(); if (dta = checkByte1) {//Controleert op eerste checkbyte dta = Serial.read(); if (dta = checkByte2) { // Controleert op tweede checkbyte dta = Serial.read (); if (dta = checkByte3) { // Controleert op derde checkbyte int-opdracht = Serial.read (); //Vierde byte is het commando int param1 = Serial.read(); // Vijfde byte is param1 interpretCommand (opdracht, param1); // stuurt het geparseerde verzoek naar de handler } } } }}/* * Neemt het commando en de parameter en geeft het door aan de robot */void interpretCommand(int command, int param1){if (command == FORWARD){goForward(); vertraging (param1 * 100); goStop();} //if forward else if(command == BACKWARD){goBackward(); vertraging (param1 * 100); goStop();} //if achteruit else if(command == LEFT){goLeft(); vertraging (param1 * 100); goStop();} //if left else if(command == RIGHT){goRight(); vertraging (param1 * 100); goStop();} //if rechts else if(command == SETSPEED){setSpeed(param1);} //if setting speed else if(command == STOP){goStop();} //if stop else if(commando == SETSPEEDLEFT){setSpeedLeft(param1);} //als de linkersnelheid wordt ingesteld else if(commando == SETSPEEDRIGHT){setSpeedRight(param1);} //als de rechtersnelheid wordt ingesteld else{ //als een niet-herkend commando een kleine shimmy geeft ga links(); vertraging (150); ga rechts(); vertraging (150); ga stoppen(); }}//---------------------------------------------- --------------------------//START OF ARDUINO GECONTROLEERDE SERVO ROBOT (SERB) ROUTINES/* * stelt je Arduino in om je SERB aan te spreken met de meegeleverde routines*/void serbSetup(){ setSpeed(leftSpeed); pinMode (LINKERSERVOPIN, UITGANG); // stelt de linker servosignaalpin in // om pinMode uit te voeren (RIGHTSERVOPIN, OUTPUT); // stelt de rechter servosignaalpin in // om leftServo.attach uit te voeren (LEFTSERVOPIN); //bevestigt linker servo rightServo.attach (RIGHTSERVOPIN); //bevestigt rechter servo goStop();}/* * stelt de snelheid van de robot in tussen 0- (gestopt) en 100- (volledige snelheid) * OPMERKING: snelheid zal de huidige snelheid niet veranderen, u moet de snelheid veranderen * bel dan een van de go-methoden voordat er wijzigingen optreden.*/ void setSpeed(int newSpeed){ setSpeedLeft(newSpeed); //sets linker snelheid setSpeedRight (newSpeed); //sets juiste snelheid}/* * Stelt de snelheid van het linker wiel in */void setSpeedLeft(int newSpeed){ if(newSpeed >= 100) {newSpeed = 100;} //if speed is groter dan 100 //make it 100 if(newSpeed = 100) {newSpeed = 100;} //if speed is groter dan 100 //make it 100 if(newSpeed <= 0) {newSpeed = 0;} //if speed is kleiner dan 0 make // het 0 rechts Snelheid = nieuwe Snelheid * 0,9; //schaalt de snelheid naar }/* * stuurt de robot naar voren */void goForward(){ leftServo.write(90 + leftSpeed); rightServo.write(90 - rightSpeed);} /* * stuurt de robot achteruit */void goBackward(){ leftServo.write(90 - leftSpeed); rightServo.write(90 + rightSpeed);} /* * stuurt de robot naar rechts */void goRight(){ leftServo.write(90 + leftSpeed); rightServo.write(90 + rightSpeed);}/* * stuurt de robot naar links */void goLeft(){ leftServo.write(90 - leftSpeed); rightServo.write(90 - rightSpeed);}/* * stopt de robot */void goStop(){ leftServo.write(90); rightServo.write(90);}//EINDE VAN ARDUINO GESTUURDE SERVO ROBOT (SERB) ROUTINES//---------------------------- -----------------------------------------------

Stap 4: Software - Robotlaptop (webserver)

Software - Robotlaptop (webserver)
Software - Robotlaptop (webserver)

(Processing is een open source programmeertaal en omgeving waar je super makkelijk mee aan de slag kunt. Ga voor meer informatie naar Processing) De software die op de robotlaptop draait is ook vrij eenvoudig. Het is een nogal rudimentaire webserver (luisteren naar webpaginaverzoeken van een webbrowser), een kleine gebruikersinterface (om het in te stellen) en faciliteiten voor het doorgeven van de commando's die van de webserver naar de Arduino worden ontvangen. Snel installeren: (op ramen)

  • Download onderstaand zip-bestand (06-WEBB-Processing Webserver (windows exe).zip)
  • Pak het uit en voer het.exe-bestand uit (_WEBB_WebServer_RobotComputer.exe)

Bewerken in verwerking:

  • Download onderstaand zip-bestand (06-WEBB-Processing Webserver (bronbestanden).zip)
  • Unzip overal op uw computer.
  • Open de verwerkingsomgeving en open (_WEBB_WebServer_RobotComputer.pde)

Testen:

  • Voer het programma uit.
  • In vak #1 zal er een lijst zijn van de beschikbare communicatiepoorten op uw computer (klik op degene waarmee uw Arduino is verbonden. (uw robot zal een paar keer trillen terwijl de computer verbinding maakt en er verschijnt een cyaan stip naast de gekozen communicatiepoort)
  • Test in vak #2 of je Arduino is aangesloten. Klik op een van de pijlen en hopelijk beweegt je robot een halve seconde in de aangeklikte richting.
  • Klik in vak #3 op de knop "Start" om de webserver te starten.
  • Open een webbrowser (op de robotlaptop) en bezoek https://127.0.0.1:12345/ControlPage.html (hopelijk verschijnt de bedieningswebpagina met knoppen erop) - Details over het gebruik van deze pagina in de volgende stap -

Wat gebeurt er:

  • De webserver luistert naar poort 12345 voor http-verzoeken (wat wordt verzonden wanneer u een webpagina-adres typt)
  • Er zijn twee soorten verzoeken waarop wordt gereageerd.

1. Het luistert naar "ControlPage.html" en verzendt de controle-webpagina 2. Het luistert naar verzoeken van het formulier "/request?command=F&param1=100" (deze commando's worden ontleed en naar de Arduino gestuurd (dit voorbeeld zou resulteren in in de robot die 10 seconden vooruit gaat)Bijlage: (De code voor de webserver)

/* * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Ga voor meer informatie naar: https://www.oomlout.com/serb * * Gedrag: het programma luistert naar http (webpagina)-verzoeken in de vorm * "/request ?command=F&param1=100" en geeft ze vervolgens door aan de * Arduino * Ondersteunde commando's - &aposF&apos - 70 - Forward * &aposB&apos - 66 - Backward * &aposL&apos - 76 - Left * &aposR&apos - 82 - Right * &aposS&apos - 83 - Speed * &aposX&apos - 88 - SetSpeedLeft * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * param1&aposs - 0 - 255 (0 tot 25,5 seconden) waarde * 100 milliseconden * * stuurt ook de besturingswebpagina naar de browser als er om ControlPage.html wordt gevraagd * * Bediening: 1. Klik op de Comm-poort waarop uw Arduino is aangesloten * 2. Gebruik de testknoppen om te zien of uw arduino luistert * (beweegt een halve seconde in de aangeklikte richting) * 3. Klik op Start en uw webserver zal luister naar verzoeken * * * Licentie: Dit werk is gelicentieerd onder de Creative Commons * Attribu tion-Share Alike 3.0 Unported-licentie. Om * een kopie van deze licentie te bekijken, gaat u naar * https://creativecommons.org/licenses/by-sa/3.0/ * of stuurt u een brief naar Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * VS. * */import processing.serial.*; // importeer de seriële bibliotheek om Serial te gebruiken (om met Arduino te praten) import processing.net.*; //importeer de net-bibliotheek om Server te gebruiken (om met internet te praten)/* Seriële poortgerelateerde variabelen */int serialPortIndex = -1; //de index van de seriële poort die we gebruiken in de Serial.list() listString commOptions; // Een variabele om Serial.list () in op te slaan, zodat het niet nodig is om // de seriële poorten te pollen elke keer dat we deze willen verwijzen (polling veroorzaakt een // sprong in de Arduino-servo's) Seriële seriële poort; //Maakt de seriële poort adresseerbaar in deze schets/* Grafische en rendering gerelateerde variabelen */PFont font; //maakt het lettertype openbaar zodat het maar één keer hoeft te worden geladen (Arial-72)/* Netwerkgerelateerde variabelen */Server wServer; //De server die webverzoeken afhandeltint port = 12345; //De poort waar de server naar luistert cycleCount = 0; // Telt het aantal keren dat de tekenlus wordt uitgevoerd (gebruikt om // de "lopende" tekst te animeren) /* Utility-variabelen */ PImage bg; //De achtergrondafbeelding momenteel \WEBB-background.png/* * Knopgerelateerde variabelen * (knoppen zijn zeer ruw geïmplementeerd, begrenzingsvakken worden opgeslagen en grafische afbeeldingen en tekst worden * op de achtergrondafbeelding getekend) dwz. het verplaatsen van knopvariabelen zal het uiterlijk van de knoppen niet verplaatsen */Button comm1; Knop comm2; Knop comm3; Knop comm4; // De knoppen om de juiste seriële poort te kiezenKnop omhoog; Knop rechts; Knop links; Knop omlaag;// De richtingsknoppen om te testen of de robot reageert Knop webServer; //De knop om de webServer te starten/* * stelt alles in */void setup() { frameRate(5); //Vertraagt de schets een beetje zodat het niet zo belastend is voor het systeem bg = loadImage("WEBB-background.png"); // Laadt de achtergrondafbeelding (opgeslagen in de schetsmap) size (700, 400); // Stelt de grootte van het lettertype van het schetsvenster in = loadFont ("ArialMT-72.vlw"); // Laadt het lettertype dat we in deze schets zullen gebruiken commOptions = Serial.list(); // Bevraagt de seriële poorten en krijgt een lijst met beschikbare poorten // (door dit slechts één keer te doen, voorkomt u dat de robot elke keer dat de // seriële poort wordt opgevraagd trilt) defineButtons(); // Definieert de begrenzingsvakken voor elke knopachtergrond (bg); // Schildert de achtergrondafbeelding (op deze afbeelding staan alle knopafbeeldingen)}/* De hoofdlus van de schetsen */void draw() {if(cycleCount==0){ //-- call draw-routines drawCommBox(); // Tekent de emelments in de Comm Box (box 1) drawTestBox(); // Tekent alle elementen in de Test Box (box 2) drawWebServerBox(); // Tekent alle elementen in de WebServer Box (box 3) } //-- call werkroutines pollWebServer(); //Bevraagt de webserver om te zien of er verzoeken zijn binnengekomen via het netwerk}//------------------------------ ----------------------------------------------//Begin van tekenroutines (opgesplitst om de code leesbaarder te maken)/* * De tekenupdate-routine (elke cyclus uitgevoerd) voor items in de comm box (box 1) */void drawCommBox(){ fill(0, 0, 0); //Stel de vulling in op zwarte tekstFont (lettertype, 15); //Stel het lettertype in op de juiste grootte voor (int i = 0; i 0) {running = running + ".";} // het aantal punten is gebaseerd op cycleCount if ((cycleCount / 1) > 1){ running = running + ".";} if((cycleCount / 1) > 2){running = running + ".";} if((cycleCount / 1) > 3){cycleCount=0;} text(running, 520, 210); } cycleCount++; //Elke keer door cycleCount wordt verhoogd met één} // End of Draw-routines//------------------------------- ------------------------------//------------------ -------------------------------------------//Begin van onderhoudsroutines/ * * mousePressed wordt elke keer dat de muis wordt ingedrukt aangeroepen * controleert of de muis zich binnen een van de knopkaders bevindt * en of het de juiste routine is, wordt aangeroepen */void mousePressed(){ if(comm1.pressed()) { updateSerialPort(0);} //Wijzigt in de comm-poort op index 0 in Serial.list() else if(comm2.pressed()) {updateSerialPort(1);} //Wijzigt in de comm-poort op index 1 in Serial.list() else if(comm3.pressed()) {updateSerialPort(2);} // Wijzigt in de comm-poort op index 2 in Serial.list() else if(comm4.pressed()) {updateSerialPort(3);} //Wijzigt in de comm-poort op index 3 in Serial.list() else if(up.pressed()) {sendRobotCommand("F", 5);} //Stuurt een commando om de robot 0,5 vooruit te bewegen seconden else if(left.pressed()) {sendRobotCommand("L", 5);} / /Stuurt een commando om de robot 0,5 seconden naar links te bewegen else if(right.pressed()) {sendRobotCommand("R", 5);} //Stuurt een commando om de robot 0,5 seconden naar rechts te bewegen anders if(down. ingedrukt()) {sendRobotCommand("B", 5);} //Stuurt een commando om de robot 0,5 seconden achteruit te bewegen anders if(webServer.pressed()) {startWebServer();} //Start de webServer cycleCount = 0; achtergrond (bg); //Herschildert de achtergrondafbeelding (op deze afbeelding staan alle knopafbeeldingen) draw();}/* * Zodra een uitvoering wordt aangeroepen, controleert deze de server om te zien of er wachtende verbindingen zijn * als er een wachtende verbinding is, wordt deze opgehaald het verzoek uit en geeft het door aan de parseRequest(String) * routine om extra tekst weg te halen. Dit wordt vervolgens naar de interpretRequest(String)-routine gestuurd om * de juiste actieroutine aan te roepen (dwz instructies naar de robot sturen).* * Een verzoek wordt doorgegeven door het computeradres en de poort in een webbrowser in te voeren * Voor lokale machine "https://127.0.0.1:12345/request?command=F&param1=100" * * Voorbeeldverzoek: * GET /request? command=F&param1=100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, zoals Gecko) * Accepteren: *//* * Accept-Taal: nl-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Verbinding: Keep-Alive * * Voorbeeld van antwoord (voor verwerkt verzoek) * HTTP/1.1 200 OK * Verbinding: sluiten * Inhoudstype: tekst/html * * opdracht: F param1: 100 */void pollWebServer(){ if(wServer != null){ //Als de webServer draait Client request = wServer.available(); // Laad de volgende client in de rij in de // server (null als er geen verzoeken wachten) if (request! = null) { // als er een aanvraagproces is, is het String fullRequest = request.readString (); // Bewaar verzoekinhoud als een string String ip = request.ip (); // Bewaar het ip-adres van de klant als een string String requestString = parseRequest(fullRequest.toUpperCase()); // Verwijder alle extra // informatie en laat alleen de verzoekreeks achter (tekst na GET) // (verschuift naar hoofdletters om het testen van strings gemakkelijker te maken) if(requestString.indexOf("REQUEST?") != -1){ //Controleert of het verzoek "VERZOEK?" String antwoord = interpretRequest(requestString); //Stuurt het verzoek naar de request interpreter request.write("HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/html\n\n" + reply); //Stuurt het antwoord een 200 om te zeggen dat het verzoek //behandeld is en de "reply" string als het antwoord wServer.disconnect(request); //Verbreekt de verbinding met de Client }else if(requestString.indexOf("CONTROLPAGE") != -1){ //Als het verzoek is voor de controle webpagina String webPageArray = loadStrings("WEBB-ControlPage.html"); // Laadt de controle-webpagina van \data\WEBB-ControlPage.html //(geladen als een reeks regels) String webPage =""; // Om het bewerken gemakkelijker te maken, heeft de webpagina // regeleinden, zodat deze voor lus die regels eruit haalt (int i = 0; i portIndex) { // als de doorgegeven portIndex een geldige index is in Serial.list () //(dwz niet optie drie in een lijst van twee) serialPortIndex = portIndex; // stel de serialPortIndex-variabele in op de nieuwe serialport-index // (dit wordt gebruikt om de punt naast de actieve poort weer te geven) } if (serialPortIndex! = -1) { // controleer of er ergens eerder een poort is gekozen if (serialPort != null){serialPort.stop();} //als er al een seriële poort wordt gebruikt, stop deze dan voordat u een nieuwe laadt. serialPort = new Serial(this, Serial.list()[serialPortIndex], 9600); //Maak een nieuw serieel object om te communiceren met de Arduino 9600 Baud }}/* * Neemt een verzoekstring (bijvoorbeeld: "request?command=F&param1=100") en verwijdert de opdracht * en param1 en geeft deze door aan de arduino (het toevoegen van extra parameters of niet-arduino-opdrachten zou hier worden gedaan) */String interpretRequest (String requestString){ String returnValue = "OK"; // Bereidt een returnValue-variabele String-opdracht voor; //De volgende drie regels extraheren de waarde na "command=" //(de extra regel is voor het geval de opdrachtparameter aan het //einde van het verzoek staat en niet gevolgd wordt door een & if(requestString.indexOf("COMMAND=") != -1){ command = requestString.substring(requestString.indexOf("COMMAND=") + "COMMAND=".length());} else{command = "Z";} if(command.indexOf(" &") != -1){ command = command.substring(0, command.indexOf("&"));}else{command = command;} String param1String; //Volgende drie regels extraheren de waarde na "param1= " //(de extra regel is voor het geval de opdrachtparameter aan //het einde van het verzoek staat en niet wordt gevolgd door een & 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); // Verandert de param1 String in een geheel getal sendRobotCommand (opdracht, param1); // Stuurt het commando naar de routine die het naar de Arduino stuurt returnValue = "command: " + command + " param1: " + param1; //op dit moment alleen de geparseerde opdracht maar //als html verzenden zodat opmaak kan worden opgenomen return returnValue;}/* * Neemt een opdracht (momenteel één letter) en een parameter (één byte 0-255) en stuurt deze naar de arduino * die luistert en reast * Momenteel ondersteunde commando's * F -*/void sendRobotCommand(String command, int param1){ println("command: " + command +" time: " + param1); String checkString = "AAA"; if(serialPort!= null){ serialPort.write(checkString + commando); serialPort.write(byte(param1)); }}//Einde van de installatie/niet erg gebruikelijke routines//----------------------------------- -------------------------------------------------- //Example-knop en RectButton-code van processing.org-voorbeeld met enkele wijzigingen // meestal gemaakt om roll-over-animatie te vereenvoudigen en te verwijderen//https://processing.org/learning/topics/buttons.html (2008-09-23) klasse Knop{ int x, y; int breedte, hoogte; Knop (int ix, int iy, int iwidth, int iheight) { x = ix; y = iy; breedte = ibreedte; hoogte = ihoogte; } boolean ingedrukt() { if(overRect()) { return true; } else { return false;} } boolean overRect() { if (mouseX >= x && mouseX = y && mouseY <= y+height) { return true; } else { return false; } }}

Stap 5: Software - (Webpagina)

Software - (Webpagina)
Software - (Webpagina)
Software - (Webpagina)
Software - (Webpagina)
Software - (Webpagina)
Software - (Webpagina)

Nou, we zijn bijna klaar, het enige dat overblijft is praten met je robot. Om te praten: (via een lokaal netwerk -op windows-)

  • Ontdek het lokale ip-adres van de laptopcomputer. Ga hiervoor naar "Start\Programma's\Accessoires\Opdrachtprompt" en typ "ipconfig" wanneer het terminalvenster wordt geopend. Noteer "IP-adres" en ga naar een andere computer op uw lokale netwerk.
  • Open een webbrowser, typ "https:// (robot computer ip):12345/ControlPage.html
  • De besturingswebpagina moet worden geladen, typ in het vak "IP-adres" de robotcomputers ip.
  • Begin met het besturen van je robot.

Om te praten: (via internet) Nu je het lokaal hebt laten werken, is het slechts een paar stappen verwijderd om het via internet te laten praten.

  • (moeilijkste stap) Port Forwarding instellen - Uw computer moet naar internet luisteren in plaats van alleen naar het lokale netwerk. Om dit te doen, moet je je router vertellen om bepaalde verzoeken door te geven aan de computer die de robot bestuurt. Dit is een beetje ingewikkeld en gaat veel verder dan het bestek van deze Instructable. Als u echter PortForward.com bezoekt, geven ze u alles wat u moet weten over het configureren van uw router (u moet poort 12345 doorsturen naar uw robotlaptop)
  • Ontdek vervolgens uw internet-IP (bezoek WhatIsMyIP.com)
  • Start ten slotte skype, stel een videogesprek in en laat degene met wie u praat, naar "https://(internet-IP):12345/ControlPage.html" gaan
  • Typ het internet-IP in het vak "IP-adres" op de besturingswebpagina en uw Web Connected Robot wordt van ver bestuurd.

Stap 6: Klaar

Afgewerkt
Afgewerkt

Nou, dat is het dan. Ik hoop dat je veel plezier hebt met het besturen van je robot van een afstand. Als je problemen hebt met de software of hardware, laat dan gerust een reactie achter en ik zal proberen je te helpen. Als je meer leuke projecten wilt bekijken, ga dan naar: oomlout.com

Aanbevolen: