Taula de continguts:

Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook): 6 passos (amb imatges)
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook): 6 passos (amb imatges)

Vídeo: Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook): 6 passos (amb imatges)

Vídeo: Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook): 6 passos (amb imatges)
Vídeo: 10 лучших маркетинговых инструментов AI (сравнение инструментов AI — ChatGPT, Jasper AI и еще 8!) 2024, Desembre
Anonim
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook)
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook)
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook)
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook)
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook)
Feu un robot connectat al web (per uns 500 dòlars) (amb Arduino i Netbook)

Aquest manual d’instruccions us mostrarà com construir el vostre propi robot connectat al web (mitjançant un microcontrolador Arduino i Asus eee pc). Per què voleu un robot connectat al web? Per jugar, és clar. Conduïu el robot des de tota la sala o arreu del país, sense fer servir més que Skype i un navegador web (res a instal·lar a l’ordinador de control). Després d'això? Aprofiteu el programari i adapteu-lo com vulgueu, afegiu un GPS per veure on conduïu en un mapa, afegiu sensors de temperatura per mapar els gradients de temperatura de casa o sensors de sonar per afegir controls sobre el que sou web els conductors poden i no poden topar-se. Característiques:

  • Barat: (~ 500 dòlars si compreu totes les peces noves i considerablement més barates si caveu al contenidor de peces)
  • Un cop posat en marxa, el control del robot només requereix un navegador web (i Skype si voleu veure on conduïu)
  • Codi obert i fàcilment adaptable ((utilitza un microcontrolador Arduino, es pot processar el servidor web i es pot executar tot el programari a Linux)
  • Disseny modular (no és un sistema completament integrat, si no voleu fer servir un servei de videoconferència diferent, o si teniu un segell bàsic en lloc d’un Arduino, només heu d’adaptar un petit tros de codi i inserir-lo)

Aquí teniu un vídeo ràpid del meu robot connectat a la web que va ser expulsat de la cuina.

Pas 1: peces i eines

Peces i eines
Peces i eines

Només es requereixen unes poques parts: Robot: Servo Robot Arduino Controlled - (SERB) ($ 175 @ oomlout.com) o (fes el teu propi)

Un robot de codi obert que utilitza un microcontrolador Arduino com a cervell

(es pot utilitzar qualsevol plataforma de robot servo doble amb un arduino (opció 1) (envieu-me un missatge si descobreix alguna altra opció) Ordinador: Asus eee PC 4G (280 dòlars) (@Best Buy)

Un petit portàtil econòmic i perfecte per a aquest propòsit

(es pot utilitzar qualsevol ordinador portàtil (o escriptori si voleu executar amb un acord) capaç d'executar esbossos de processament) Taulell d'ordinador portàtil: Acrílic tallat per làser ($ 25 (@ oomlout)) o (creeu el vostre propi pas 3)

Algunes peces acríliques addicionals que es fixen en un (SERB) per donar-li un escriptori perquè el portàtil hi pugui asseure's

Nuts and Bols: (disponible a la botiga de casa)

  • Pern de 3 mm x 10 mm (x4)
  • Pern de 3 mm x 15 mm (x4)
  • Femella de 3 mm (x8)

Pas 2: tall de peces i muntatge

Peces de tall i muntatge
Peces de tall i muntatge
Peces de tall i muntatge
Peces de tall i muntatge
Peces de tall i muntatge
Peces de tall i muntatge
Peces de tall i muntatge
Peces de tall i muntatge

Hi ha tres opcions per aconseguir peces per al vostre ordinador portàtil. Opció de tall 1: (Compres a oomlout.com)

les peces d'escriptori tallades amb làser i el maquinari necessari estan disponibles a Oomlout per 25 dòlars (aquí)

Opció 2: (Tallar amb el vostre propi tallador làser o Ponoko.com)

  • Descarregueu el fitxer següent (03-WEBB-Acrylic Parts.cdr o 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • Talleu-los a partir de 3 mm (1/8 ") d'acrílic

Opció 3: (Scroll Saw)

  • Descarregueu el patró de la serra de desplaçament des de baix (03-WEBB-ScrollSaw Pattern (A4).pdf (per a paper de mida A4) o 03-WEBB-ScrollSaw Pattern (de carta).pdf (per a paper de mida de carta))
  • Comproveu que no s’hagi reduït l’escala en imprimir (mesurant les regles impreses)
  • Enganxeu un tros d’acrílic de 3 mm (1/8 ") i talleu-ne les peces.

Muntatge: descarregueu la guia de muntatge (04-WEBB-Assembly Guide.pdf) a continuació i poseu l'escriptori del portàtil junts.

Pas 3: Programari - (Arduino)

Programari - (Arduino)
Programari - (Arduino)

Per a aquells que són nous a Arduino, consulteu la fantàstica guia d'inici a Arduino.cc. Primer, primer, el programari que s'executa a l'Arduino. És un programa molt senzill, el que fa l’Arduino és controlar el seu port sèrie de dades. El que busca és una conversa de 5 bytes de durada.

  • Byte 1-3 (Comprovar bytes "AAA")
  • Ordre de Byte 4 (Indica a l'arduino què fer) (Ordres compatibles 'F' - Endavant, 'B' - Endarrere, 'L' - Esquerra, 'R' - Dreta, 'S' - Velocitat, 'X' - SetSpeedLeft, "Y" - SetSpeedRight, "C" - Stop)
  • Byte 5 Paràmetre: per a les ordres de moviment, s’interpreta com un interval de temps (paràmetre * 100 ms) i per a les ordres de velocitat un percentatge de 0 a 100

El codi es comenta a fons i, donat aquest marc, ha de ser fàcil afegir comandes addicionals.

  • Baixeu-vos el fitxer zip adjunt. (05-WEBB-Arduino Code.zip)
  • Descomprimiu-lo al directori Arduino Sketch. (per defecte: Els meus documents / Arduino)
  • Obriu el vostre entorn de desenvolupament arduino i pengeu-lo al vostre Arduino.

Per copiar i enganxar

  • Copieu el codi des de sota.
  • Enganxeu-lo a l'entorn de desenvolupament d'Arduino.
  • Pengeu al vostre Arduino.

Apèndix: el programa Arduino

/ * * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * Per obtenir més informació, visiteu: https://www.oomlout.com/serb * * Comportament: Arduino escolta el seu port sèrie per obtenir una ordre * en format 254, 88, 88, (COMMAND), (TIME) * Ordres compatibles - & aposF & apos - 70 - Endavant * & aposB & apos - 66 - Endarrere * & aposL & apos - 76 - Esquerra * & aposR & apos - 82 - Dreta * & aposS & apos - 83 - Velocitat * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Temps admesos - Valor de 0 - 255 (0 a 25,5 segons) * 100 mil·lisegons * sp * Cablatge: senyal servo dret - pin 9 * Senyal servo esquerre - pin 10 * * Llicència: Aquesta obra està llicenciada sota la llicència Reconeixement-Compartir igual 3.0 Unported de Creative Commons. Per * visualitzar una còpia d'aquesta llicència, visiteu * https://creativecommons.org/licenses/by-sa/3.0/ * o envieu una carta a Creative Commons, 171 Second * Street, Suite 300, San Francisco, Califòrnia 94105, * EUA. * * / // -------------------------------------------- ---------------------------- // INICI DEL PREÀMBUL DEL SERIAL SERIAL ARDUINO // Definició de constants corresponents a cada ordre (també el número de codi ascii) #define FORWARD 70 // F # define BACKWARD 66 // B # define LEFT 76 // L # define DRET 82 // R # define SETSPEED 83 // S # define STOP 67 // C # define SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y / * Els tres bytes de verificació (que s'utilitzen per evitar que el robot respongui a dades aleatòries * de sèrie) actualment "AAA" * / # define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // INICI DEL PREÀMBUL SERVO ROBOT (SERB) CONTROLAT ARDUINO # inclou #define LEFTSERVOPIN 10 // El pin del servo esquerre està connectat a # define RIGHTSERVOPIN 9 // El pin del servo dret està connectat aServo leftServo; Servo rightServo; int leftSpeed = 50; // manté la velocitat dels robots leftServo // un percentatge entre 0 i 100int rightSpeed = 100; // manté la velocitat dels robots correcta Servi // un percentatge entre 0 i 100 // PREÀMBUL FINAL DEL SERVO ROBOT (SERB) CONTROLAT ARDUINO // ------------------- -------------------------------------------------- ----- // Ho posa tot en marxa i executavoid setup () {Serial.begin (9600); // Inicia el port sèrie serbSetup (); // estableix l'estat de tots els necessaris // pins i afegeix servos al vostre esbós} // El programa principal loopvoid loop () {serbPollSerialPort (); // mira contínuament al port sèrie // si hi ha dades les processa} // ------------------------------ ----------------------------------------- // INICI DE LES RUTINES DEL SERVEI DE SERIES ARDUINO / * * Processa les ordres lliurades al port sèrie arduino & aposs * / void serbPollSerialPort () {int dta; // variable per contenir el byte sèrie si (Serial.available ()> = 5) {// si hi ha 5 bytes al buffer (longitud pf una sol·licitud completa) dta = Serial.read (); if (dta = checkByte1) {// Comprova el primer byte de verificació dta = Serial.read (); if (dta = checkByte2) {// Comprova el segon byte de verificació dta = Serial.read (); if (dta = checkByte3) {// Comprova la tercera comanda int byte de comprovació = Serial.read (); // El quart byte és l'ordre int param1 = Serial.read (); // El cinquè byte és param1 interpretCommand (ordre, param1); // li envia la sol·licitud analitzada & aposs handler}}}}} / * * Pren l'ordre i el paràmetre i el passa al robot * / void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); retard (param1 * 100); goStop ();} // if forward else if (command == BACKWARD) {goBackward (); retard (param1 * 100); goStop ();} // si cap enrere else if (ordre == ESQUERRA) {goLeft (); retard (param1 * 100); goStop ();} // if left else if (command == RIGHT) {goRight (); retard (param1 * 100); goStop ();} // if right else if (command == SETSPEED) {setSpeed (param1);} // if setting speed else if (command == STOP) {goStop ();} // if stop else if (ordre == SETSPEEDLEFT) {setSpeedLeft (param1);} // si s'estableix la velocitat esquerra else if (ordre == SETSPEEDRIGHT) {setSpeedRight (param1);} // si s'estableix la velocitat correcta else {// si l'ordre no es reconeix fer una mica de shimmey ves a l'esquerra(); retard (150); ves a la dreta(); retard (150); goStop (); }} // ---------------------------------------------- -------------------------- // INICI DE LES RUTINES DE SERVO ROBOT (SERB) CONTROLADES PER ARDUINO / * * configura el vostre arduino per adreçar-vos al SERB mitjançant les rutines incloses * / void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // estableix el pin de senyal de servo esquerre // a pinMode de sortida (RIGHTSERVOPIN, OUTPUT); // estableix el pin de senyal de servo dret // a la sortida leftServo.attach (LEFTSERVOPIN); // adjunta servo esquerra rightServo.attach (RIGHTSERVOPIN); // adjunta el servo dret goStop ();} / * * estableix la velocitat del robot entre 0- (aturat) i 100- (velocitat màxima) * NOTA: la velocitat no canviarà la velocitat actual, heu de canviar la velocitat * i després truqueu-ne un dels mètodes go abans que es produeixin els canvis. * / void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // estableix la velocitat esquerra setSpeedRight (newSpeed); // estableix la velocitat correcta} / * * Estableix la velocitat de la roda esquerra * / void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // si la velocitat és superior a 100 // fes-la 100 if (newSpeed = 100) {newSpeed = 100;} // si la velocitat és superior a 100 // converteix-la en 100 if (newSpeed <= 0) {newSpeed = 0;} // si la velocitat és inferior a 0 make // it 0 rightSpeed = newSpeed * 0.9; // escala la velocitat a ser} / * * envia el robot cap endavant * / void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * envia el robot cap enrere * / void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * envia el robot right * / void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);} / * * envia el robot a l'esquerra * / void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);} / * * atura el robot * / void goStop () {leftServo.write (90); rightServo.write (90);} // FINAL DE LES RUTINES DE SERVO ROBOT (SERB) CONTROLADES PER ARDUINO // ---------------------------- -----------------------------------------------

Pas 4: Programari: ordinador portàtil robot (servidor web)

Programari: ordinador portàtil robot (servidor web)
Programari: ordinador portàtil robot (servidor web)

(El processament és un entorn i llenguatge de programació de codi obert que és molt fàcil de començar. Per obtenir més informació, visiteu Processament) El programari que s'executa al portàtil del robot també és bastant senzill. És un servidor web bastant rudimentari (escolta les sol·licituds de pàgines web des d’un navegador web), una petita interfície d’usuari (per configurar-la) i facilitats per passar les ordres rebudes del servidor web a l’Arduino. (a les finestres)

  • Baixeu-vos el fitxer zip a continuació (06-WEBB-Processing Webserver (windows exe).zip)
  • Descomprimiu-lo i executeu el fitxer.exe (_WEBB_WebServer_RobotComputer.exe)

Per editar en procés:

  • Baixeu-vos el fitxer zip a continuació (06-WEBB-Processing Webserver (fitxers font).zip)
  • Descomprimeix qualsevol lloc de l'ordinador.
  • Obriu l’entorn de processament i obriu (_WEBB_WebServer_RobotComputer.pde)

Per provar:

  • Executeu el programa.
  • A la casella núm. 1 hi haurà una llista dels ports de comunicacions disponibles al vostre ordinador (feu clic a aquell al qual està connectat el vostre Arduino. (El vostre robot es torçarà unes quantes vegades a mesura que es connecti l’ordinador i apareixerà un punt cian al costat de l’escollit port de comunicacions)
  • Al quadre núm. 2 prova per veure si el teu Arduino està connectat. Feu clic a una de les fletxes i esperem que el vostre robot es mogui en la direcció clicada durant mig segon.
  • Al quadre núm. 3, feu clic al botó "Inici" per iniciar el servidor web.
  • Obriu un navegador web (a l’ordinador portàtil del robot) i visiteu https://127.0.0.1:12345/ControlPage.html (espero que aparegui la pàgina web de control amb botons) -Detalls sobre com utilitzar aquesta pàgina al següent pas -

Que està passant:

  • El servidor web escolta el port 12345 per a les sol·licituds http (què s'envia quan escriviu una adreça de pàgina web)
  • Hi ha dos tipus de sol·licituds a les quals respon.

1. Escolta "ControlPage.html" i enviarà la pàgina web de control 2. Escolta les sol·licituds del formulari "/ request? Command = F & param1 = 100" (aquestes ordres s'analitzen i s'envien a l'Arduino (aquest exemple resultaria en el robot avançant durant 10 segons) Apèndix: (El codi per al servidor web)

/ * * Arduino Controlled Web Connected Robot (WEBB) - Servidor web * Per obtenir més informació, visiteu: https://www.oomlout.com/serb * * Comportament: el programa escolta les sol·licituds http (pàgina web) al formulari * "/ request ? command = F & param1 = 100 "i després els passa als comandaments compatibles amb * Arduino * - & aposF & apos - 70 - Endavant * & aposB & apos - 66 - Endarrere * & aposL & apos - 76 - Esquerra * & aposR & apos - 82 - Dreta * & aposS & apos - 83 - Velocitat * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - Valor de 0 - 255 (0 a 25,5 segons) * 100 mil·lisegons * * també serveix la pàgina web de control al navegador si es demana ControlPage.html * * Funcionament: 1. Feu clic al port de comunicació al qual està connectat el vostre Arduino * 2. Utilitzeu els botons de prova per veure si el vostre arduino està escoltant * (es mourà en la direcció que es faci clic durant mig segon) * 3. Feu clic a Inicia i el servidor web escolteu les sol·licituds * * * Llicència: Aquesta obra està llicenciada sota l'atribut Creative Commons * Llicència no compatible amb ció-Compartir igual 3.0. Per * visualitzar una còpia d'aquesta llicència, visiteu * https://creativecommons.org/licenses/by-sa/3.0/ * o envieu una carta a Creative Commons, 171 Second * Street, Suite 300, San Francisco, Califòrnia 94105, * EUA. * * / import processing.serial. *; // importeu la biblioteca de sèrie per utilitzar Serial (per parlar amb Arduino) import processing.net. *; // importeu la biblioteca de xarxa per utilitzar el servidor (per parlar a Internet) / * Variables relacionades amb el port sèrie * / int serialPortIndex = -1; // l’índex del port sèrie que estem utilitzant a les opcions Serial.list () listString ; // Una variable per emmagatzemar Serial.list (), de manera que no cal examinar // els ports sèrie cada vegada que volem referenciar-lo (el sondeig provoca un // salt als servos arduino) Serial serialPort; // Fa que el port sèrie sigui adreçable a tot aquest esbós / * Variables relacionades gràfiques i de representació * / Tipus de lletra PFont; // fa pública la font, de manera que només cal carregar-la una vegada (Arial-72) / * Variables relacionades amb la xarxa * / Servidor wServer; // El servidor que gestiona les sol·licituds web port = 12345; // El port que escolta el servidor toint cycleCount = 0; // Compta el nombre de vegades que s'executa el bucle de dibuix (utilitzat per // animar el text "en execució") / * Variables d'utilitat * / PImatge bg; // La imatge de fons actualment / WEBB-background.png / * * Variables relacionades amb els botons * (els botons s'implementen de manera aproximada, s'emmagatzemen caixes de delimitació i es dibuixen * gràfics i text a la imatge de fons), és a dir. moure variables de botó no mourà l'aparença dels botons * / Button comm1; Botó comm2; Botó comm3; Botó comm4; // Els botons per triar el port sèrie correcte Botó amunt; Botó dret; Botó esquerre; Botó cap avall; // Els botons de direcció per provar si el robot està responentButton webServer; // El botó per iniciar el servidor web / * * estableix tot * / void setup () {frameRate (5); // Alenteix una mica l'esbós, de manera que no és tan gravador al sistema bg = loadImage ("WEBB-background.png"); // Carrega la mida de la imatge de fons (emmagatzemada a la carpeta d'esbossos) (700, 400); // Estableix la mida de la finestra d'esbós font = loadFont ("ArialMT-72.vlw"); // Carrega el tipus de lletra que utilitzarem a través d’aquest sketch commOptions = Serial.list (); // Enquesta els ports de sèrie i obté una llista de ports disponibles // (fer-ho només una vegada que el robot no es pugui cridar cada vegada que aparegui // el port de sèrie és interrogat) defineButtons (); // Defineix els quadres de delimitació de cada fons de botó (bg); // Pinta la imatge de fons (aquesta imatge conté tots els gràfics de botó)} / * El croquis principal d'esbossos * / void draw () {if (cycleCount == 0) {// - rutines de dibuix de trucades drawCommBox (); // Dibuixa els esmenaments al quadre de comunicacions (quadre 1) drawTestBox (); // Dibuixa tots els elements del quadre de prova (quadre 2) drawWebServerBox (); // Dibuixa tots els elements del quadre WebServer (quadre 3)} // - trucar a les rutines de treball pollWebServer (); // Enquesta al servidor web per veure si ha arribat alguna sol·licitud a través de la xarxa} // ------------------------------ ---------------------------------------------- // Inici de rutines de dibuix (dividiu només per fer que el codi sigui més agradable de llegir) / * * La rutina d'actualització de dibuix (executada cada cicle) per als elements del quadre de comunicacions (quadre 1) * / void drawCommBox () {fill (0, 0, 0); // Estableix el farcit en negre textFont (tipus de lletra, 15); // Estableix el tipus de lletra a la mida adequada per a (int i = 0; i 0) {running = running + ".";} // el nombre de punts es basa en cycleCount si ((cycleCount / 1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} text (en execució, 520, 210); } cycleCount ++; // Cada vegada que cycleCount s’incrementa en una} // Rutines de finalització del dibuix // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Inici de les rutines del servei / * * El mousePressed es diu cada vegada que es prem el ratolí * comprova si el ratolí es troba dins d'alguns dels quadres de límit de botons * i si es tracta de la rutina adequada es diu * / void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Canvis al port de comunicacions a l’índex 0 a Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Canvis al port de comunicacions a l’índex 1 de Serial.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Canvia al port de comunicacions a l’índex 2 de Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Canvis al port de comunicació a l'índex 3 de Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Envia una ordre per moure el robot cap endavant durant 0,5 segons més if (left.pressed ()) {sendRobotCommand ("L", 5);} / / Envia una ordre per moure el robot cap a l'esquerra durant 0,5 segons més if (right.pressed ()) {sendRobotCommand ("R", 5);} // Envia una ordre per moure el robot cap a la dreta durant 0,5 segons més si (avall. pressed ()) {sendRobotCommand ("B", 5);} // Envia una ordre per moure el robot cap enrere durant 0,5 segons més si (webServer.pressed ()) {startWebServer ();} // Inicia el servidor web cycleCount = 0; fons (bg); // Torna a pintar la imatge de fons (aquesta imatge té tots els gràfics de botó) draw ();} / * * Cridat un cop executada, comprova el servidor per veure si hi ha connexions en espera * si hi ha una connexió en espera envia la sol·licitud i la passa a la rutina parseRequest (String) * per eliminar text addicional. Tot seguit, s'envia a la rutina interpretRequest (String) per * trucar a la rutina d'acció adequada (és a dir, enviar instruccions al robot).* * Es passa una sol·licitud introduint l'adreça i el port dels ordinadors en un navegador web * Per a la màquina local "https://127.0.0.1:12345/request?command=F&param1=100" * * Sol·licitud d'exemple: * GET / request? command = F & param1 = 100 HTTP / 1.1 * Agent d'usuari: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit / 525.19 (KHTML, com Gecko) * Accept: * // * * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Coding: gzip, deflate, bzip2 * Amfitrió: 127.0.0.1:12345 * Connexió: Keep-Alive * * Exemple de resposta (per a sol·licitud processada) * HTTP / 1.1 200 OK * Connexió: tancar * Tipus de contingut: text / html * * ordre: F param1: 100 * / void pollWebServer () {if (wServer! = null) {// If the webServer executa la sol·licitud del client = wServer.available (); // Carregueu el client següent a la línia al servidor // (nul si no hi ha sol·licituds en espera) si (sol·licitud! = Nul) {// si hi ha un procés de sol·licitud it String fullRequest = request.readString (); // Emmagatzema el contingut de la sol·licitud com una cadena Cadena ip = request.ip (); // Emmagatzema l'adreça IP dels clients com una cadena String requestString = parseRequest (fullRequest.toUpperCase ()); // Eliminar tota la // informació addicional deixant només la cadena de sol·licitud (text després de GET) // (passa a majúscules per facilitar la prova de cadenes) si (requestString.indexOf ("REQUEST?")! = -1) { // Comprova si la sol·licitud té "SOL·LICITUD?" Resposta de cadena = interpretRequest (requestString); // Envia la sol·licitud a l'intèrpret de sol·licituds request.write ("HTTP / 1.1 200 D'acord / nConnexió: tancar / nTipus de contingut: text / html / n / n" + resposta); // Envia la resposta un 200 per dir que la sol·licitud ha estat // gestionada i la cadena "resposta" com a resposta wServer.disconnect (request); // Desconnecta el client} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Si la sol·licitud és per a la pàgina web de control String webPageArray = loadStrings ("WEBB-ControlPage.html"); // Carrega la pàgina web de control des de / data / WEBB-ControlPage.html // (carregada com una matriu de línies) Cadena webPage = ""; // Per facilitar l'edició, la pàgina web s'ha quedat amb // salts de línia, de manera que això per al bucle elimina aquestes línies per a (int i = 0; i portIndex) {// si el portIndex passat és un índex vàlid a Serial.list () // (és a dir, no l'opció tres d'una llista de dos) serialPortIndex = portIndex; // configureu la variable serialPortIndex al nou índex del port serial // (s'utilitza per mostrar el punt al costat del port actiu)} if (serialPortIndex! = -1) {// comproveu que s'hagi escollit un port alguna vegada anterior si (serialPort! = null) {serialPort.stop ();} // si ja s’utilitza un port serial, atureu-lo abans de carregar-ne un de nou serialPort = serial nou (això, Serial.list () [serialPortIndex], 9600); // Creeu un nou objecte sèrie per comunicar-vos amb l'Arduino 9600 Baud}} / * * Pren una cadena de sol·licitud (per exemple: "request? Command = F & param1 = 100") i eliminarà l'ordre * i param1 i el passarà al arduino (aquí s'afegiran paràmetres addicionals o ordres que no siguin arduino) * / String interpretRequest (String requestString) {String returnValue = "OK"; // Prepara una ordre de cadena de variable returnValue; // Les tres línies següents extreuen el valor després de "command =" // (la línia addicional és en cas que el paràmetre de l'ordre es trobi al // final de la sol·licitud i no seguit d'un & 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; // Les tres línies següents extreuen el valor després de" param1 = "// (la línia addicional és per si el paràmetre de l'ordre es troba al // final de la sol·licitud i no va seguit d'un & 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); // Converteix la cadena param1 en una enter sendRobotCommand (ordre, param1); // Envia l'ordre a la rutina que l'envia a l'Arduino returnValue = "command:" + command + "param1:" + param1; // de moment només l'ordre analitzada, però enviant // com a html perquè es pugui incloure el format return returnValue;} / * * Pren una ordre (actualment una lletra) i un paràmetre (un byte 0-255) i l'envia al arduino * que està escoltant i recupera * Comandaments actualment compatibles * F - * / void sendRobotCommand (ordre de cadena, int param1) {println ("ordre:" + ordre + "temps:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + command); serialPort.write (byte (param1)); }} // Fi de la configuració / no se sol anomenar rutines // ----------------------------------- -------------------------------------------------- // Exemple de botó i codi RectButton de processament.org amb alguns canvis // realitzats principalment per simplificar i eliminar l'animació de desplaçament // https://processing.org/learning/topics/buttons.html (23-09-2008) botó de classe {int x, y; int ample, alçada; Botó (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; ample = ample; altura = altura; } booleà pressionat () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y + altura) {return true; } else {return false; }}}

Pas 5: programari - (pàgina web)

Programari - (pàgina web)
Programari - (pàgina web)
Programari - (pàgina web)
Programari - (pàgina web)
Programari - (pàgina web)
Programari - (pàgina web)

Doncs gairebé hem acabat, només queda parlar amb el vostre robot. Per parlar: (a través d'una xarxa local -a Windows-)

  • Descobriu l'adreça IP local de l'ordinador portàtil. Per fer-ho, aneu a "Inici / Programes / Accessoris / Símbol del sistema" i quan s'obri la finestra del terminal, escriviu "ipconfig". Escriviu "Adreça IP" i aneu a un altre equip de la vostra xarxa local.
  • Obriu un navegador web, escriviu "https:// (ip de l'ordinador robot): 12345 / ControlPage.html
  • La pàgina web de control s'ha de carregar, al quadre "Adreça IP", escriviu la IP dels equips robot.
  • Comenceu a controlar el robot.

Per començar a parlar: (a través d'Internet) Ara que ja ho teniu treballant localment, es troba a pocs passos.

  • (pas més difícil) Configuració del reenviament de ports: l'ordinador ha d'estar escoltant Internet en lloc de només la xarxa local. Per fer-ho, heu d’indicar al vostre encaminador que transmeti determinades sol·licituds a l’ordinador que controla el robot. Això és una mica complex i va molt més enllà de l’abast d’aquest instructiu. Tanmateix, si visiteu PortForward.com, us proporcionaran tot el que necessiteu saber sobre la configuració del vostre encaminador (heu de reenviar el port 12345 al vostre portàtil robot)
  • A continuació, descobriu la vostra IP d’Internet (visiteu WhatIsMyIP.com)
  • Finalment, engegueu Skype per configurar una videotrucada i consulteu amb qui parleu per visitar "https:// (IP d'Internet): 12345 / ControlPage.html"
  • Escriviu la IP d’Internet al quadre “Adreça IP” de la pàgina web de control i el vostre robot connectat al web s’està conduint des de lluny.

Pas 6: finalitzat

Acabat
Acabat

Doncs això és tot. Espero que us ho passeu divertit conduint el robot des de molt lluny. Si teniu algun problema amb el programari o el maquinari, no dubteu a deixar un comentari i provaré d’ajudar-vos. Si voleu veure més projectes, visiteu: oomlout.com

Recomanat: