Sommario:

Crea un robot connesso al Web (per circa $ 500) (usando un Arduino e un netbook): 6 passaggi (con immagini)
Crea un robot connesso al Web (per circa $ 500) (usando un Arduino e un netbook): 6 passaggi (con immagini)

Video: Crea un robot connesso al Web (per circa $ 500) (usando un Arduino e un netbook): 6 passaggi (con immagini)

Video: Crea un robot connesso al Web (per circa $ 500) (usando un Arduino e un netbook): 6 passaggi (con immagini)
Video: Ingoiare il latte del trallalero fa bene? #shorts 2024, Dicembre
Anonim
Crea un robot connesso al web (per circa $ 500) (usando un Arduino e un netbook)
Crea un robot connesso al web (per circa $ 500) (usando un Arduino e un netbook)
Crea un robot connesso al web (per circa $ 500) (usando un Arduino e un netbook)
Crea un robot connesso al web (per circa $ 500) (usando un Arduino e un netbook)
Crea un robot connesso al web (per circa $ 500) (usando un Arduino e un netbook)
Crea un robot connesso al web (per circa $ 500) (usando un Arduino e un netbook)

Questo Instructable ti mostrerà come costruire il tuo robot connesso al web (usando un microcontrollore Arduino e un pc Asus eee). Perché vorresti un robot connesso al web? Con cui giocare ovviamente. Guida il tuo robot dall'altra parte della stanza o dall'altra parte del paese, utilizzando nient'altro che Skype e un browser web (niente da installare sul computer di controllo). Dopo di che? Scava nel software e adattalo come preferisci, aggiungi un GPS in modo da poter vedere dove stai guidando su una mappa, aggiungi sensori di temperatura per mappare i gradienti di temperatura nella tua casa o sensori sonar per aggiungere controlli su ciò che stai web i conducenti possono e non possono imbattersi in. Caratteristiche:

  • Economico - (~ $ 500 se acquisti tutte le parti nuove e notevolmente più economiche se scavi nel cestino delle parti)
  • Una volta installato e funzionante, il controllo del robot richiede solo un browser web (e Skype se vuoi vedere dove stai guidando)
  • Open Source e facilmente adattabile - (utilizza un microcontrollore Arduino, elaborazione per il server Web e tutto il software può essere eseguito su Linux (tutto il codice è anche pesantemente commentato per facilitare l'inserimento e la modifica delle cose))
  • Design modulare (non un sistema completamente integrato, se si desidera utilizzare un servizio di videoconferenza diverso non preoccuparsi, o se si dispone di un timbro Basic anziché di un Arduino, basta inserire un piccolo pezzo di codice e inserirlo)

Ecco un breve video del mio robot connesso al Web che viene portato fuori dalla cucina.

Passaggio 1: parti e strumenti

Parti e strumenti
Parti e strumenti

Sono necessarie solo alcune parti: Robot: servo robot controllato da Arduino - (SERB) ($ 175 @ oomlout.com) o (crea il tuo)

Un robot open source che utilizza un microcontrollore Arduino come cervello

(è possibile utilizzare qualsiasi piattaforma di robot a doppio servo con un arduino (opzione 1) (per favore inviami un messaggio se scopri altre opzioni) Computer: Asus eee PC 4G ($ 280) (@Best Buy)

Un piccolo laptop economico che è perfetto per questo scopo

(è possibile utilizzare qualsiasi laptop (o desktop se si desidera eseguire con un accordo) in grado di eseguire schizzi di elaborazione) Scrivania per laptop: acrilico tagliato al laser ($ 25 (@ oomlout)) o (costruisci il tuo passaggio 3)

Alcuni pezzi acrilici aggiuntivi che si avvitano su un (SERB) per dargli una scrivania su cui sedersi il laptop

Nuts and Bols: (disponibile presso il deposito di casa)

  • Bullone da 3 mm x 10 mm (x4)
  • Bullone da 3 mm x 15 mm (x4)
  • Dado 3mm (x8)

Passaggio 2: taglio di pezzi e assemblaggio

Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio
Pezzi di taglio e assemblaggio

Ci sono tre opzioni per ottenere pezzi per la scrivania del tuo laptop. Opzione di taglio 1: (acquistando da oomlout.com)

pezzi da scrivania tagliati al laser e l'hardware necessario sono disponibili da oomlout per $ 25 (qui)

Opzione 2: (taglio con il proprio laser cutter o Ponoko.com)

  • Scarica il file qui sotto (03-WEBB-Acrylic Parts.cdr o 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • Tagliali da acrilico da 3 mm (1/8")

Opzione 3: (sega a scorrimento)

  • Scarica lo schema della sega a scorrimento dal basso (03-WEBB-ScrollSaw Pattern (A4).pdf (per carta formato A4) o 03-WEBB-ScrollSaw Pattern (lettera).pdf (per carta formato lettera))
  • Ricontrolla che non sia stato ridimensionato durante la stampa (misurando i righelli stampati)
  • Incolla su un pezzo di acrilico da 3 mm (1/8") e ritaglia i pezzi.

Assemblaggio: scarica la guida all'assemblaggio (04-WEBB-Assembly Guide.pdf) di seguito e assembla la scrivania del laptop.

Passaggio 3: software - (Arduino)

Software - (Arduino)
Software - (Arduino)

Per chi non conosce Arduino, dai un'occhiata alla fantastica guida introduttiva su Arduino.cc Prima di tutto il software in esecuzione su Arduino. È un programma molto semplice, quello che fa Arduino è monitorare la sua porta seriale per i dati. Quello che sta cercando è una conversazione lunga 5 byte.

  • Byte 1-3 (verifica byte "AAA")
  • Byte 4 Command (dice all'arduino cosa fare) (comandi supportati "F" - Avanti, "B" - Indietro, "L" - Sinistra, "R" - Destra, "S" - Velocità, "X" - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Byte 5 Parametro - Per i comandi di spostamento viene interpretato come un intervallo di tempo (Parametro * 100 ms), e per i comandi di velocità una percentuale da 0-100

Il codice è commentato in modo approfondito e dato questo framework l'aggiunta di comandi aggiuntivi dovrebbe essere facile. Per scaricare:

  • Scarica il file zip allegato. (05-WEBB-Codice Arduino.zip)
  • Decomprimi nella directory di Arduino Sketch. (predefinito: I miei documenti\Arduino)
  • Apri il tuo ambiente di sviluppo arduino e carica sul tuo Arduino.

Per copiare e incollare

  • Copia il codice dal basso.
  • Incolla nell'ambiente di sviluppo Arduino.
  • Carica sul tuo Arduino.

Appendice: il programma Arduino

/* * Robot connesso al Web controllato da Arduino (WEBB) - Host seriale * Per maggiori dettagli visita: https://www.oomlout.com/serb * * Comportamento: Arduino ascolta un comando dalla sua porta seriale * nel formato 254, 88, 88, (COMANDO), (TEMPO) * Comandi supportati - &aposF&apos - 70 - Avanti * &aposB&apos - 66 - Indietro * &aposL&apos - 76 - Sinistra * &aposR&apos - 82 - Destra * &aposS&apos - 83 - Velocità * &aposX&apos - 88 - SetSpeedLeft * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * Supported Times - Valore 0 - 255 (da 0 a 25,5 secondi) * 100 millisecondi *sp * Cablaggio: segnale servo destro - pin 9 * Segnale servo sinistro - pin 10 * * Licenza: Quest'opera è distribuita con licenza Creative Commons * Attribuzione-Condividi allo stesso modo 3.0 Unported. Per * visualizzare una copia di questa licenza, visitare * https://creativecommons.org/licenses/by-sa/3.0/ * o inviare una lettera a Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * STATI UNITI D'AMERICA. * */ //----------------- --------------//AVVIO DEL PREAMBOLO DEL SERIAL SERVER ARDUINO//Definizione delle costanti corrispondenti a ciascun comando (anche il numero di codice ascii) #define FORWARD 70 //F#definire BACKWARD 66 //B#definire LEFT 76 //L#definire RIGHT 82 //R#definire SETSPEED 83 //S#definire STOP 67 //C#definire SETSPEEDLEFT 88 //X #define SETSPEEDRIGHT 89 //Y/*I tre byte di controllo (usati per impedire al robot di rispondere a dati seriali casuali) attualmente "AAA" */#define checkByte1 65 // "A"#define checkByte2 65 // "A "#define checkByte3 65 // "A" //-------------------------------------- ----------------------// AVVIO DEL SERVO ROBOT CONTROLLATO DA ARDUINO (SERBO) PREAMBOLO#include #define LEFTSERVOPIN 10 //Il pin a cui è connesso il servo sinistro#define RIGHTSERVOPIN 9 //Il pin a cui è connesso il servo di destraServo leftServo; Servo destroServo; int leftSpeed = 50; //mantiene la velocità dei robot leftServo //una percentuale compresa tra 0 e 100int rightSpeed = 100; //mantiene la velocità dei robot rightServo //una percentuale tra 0 e 100// FINE DEL SERVO ROBOT CONTROLLATO ARDUINO (SERB) PREAMBOLO//---- --------------------------------------------------- -----//Fa funzionare tuttovoid setup() { Serial.begin(9600); //Avvia la porta seriale serbSetup(); //imposta lo stato di tutti i //pin necessari e aggiunge i servi al tuo sketch}//Il programma principale loopvoid loop() { serbPollSerialPort(); //guarda continuamente alla porta seriale //se ci sono dati li elabora}//--------------- ---------------------------//AVVIO DELLE ROUTINE DEL SERVER SERIALE ARDUINO/ * * Elabora i comandi consegnati alla porta seriale di arduino&aposs */void serbPollSerialPort(){ int dta; //variabile per contenere il byte seriale if (Serial.available() >= 5) { //se 5 byte sono nel buffer (lunghezza pf una richiesta completa) dta = Serial.read(); if (dta = checkByte1){ //Controlla il primo byte di controllo dta = Serial.read(); if (dta = checkByte2){ //Controlla il secondo byte di controllo dta = Serial.read(); if (dta = checkByte3){ //Controlla il terzo byte di controllo int command = Serial.read(); //Il quarto byte è il comando int param1 = Serial.read(); // Il quinto byte è param1 interpretCommand(command, param1); //invia la richiesta analizzata al gestore&aposs } } } }}/* * Prende il comando e il parametro e lo passa al robot */void interpretCommand(int command, int param1){if (command == FORWARD){goForward(); ritardo (parametro1 * 100); goStop();} //if avanti altrimenti if(comando == INDIETRO){goBackward(); ritardo (parametro1 * 100); goStop();} //if all'indietro else if(comando == LEFT){goLeft(); ritardo (parametro1 * 100); goStop();} //se lasciato altrimenti if(comando == DESTRA){goRight(); ritardo (parametro1 * 100); goStop();} //if right else if(comando == SETSPEED){setSpeed(param1);} //if impostazione della velocità else if(comando == STOP){goStop();} //if stop else if(command == SETSPEEDLEFT){setSpeedLeft(param1);} //se si imposta la velocità a sinistra else if(command == SETSPEEDRIGHT){setSpeedRight(param1);} //se si imposta la velocità a destra else{ //se il comando non è riconosciuto fai un piccolo shimmey andate a sinistra(); ritardo(150); vai a destra(); ritardo(150); goStop(); }}//------------------ ------------//AVVIO DI ROUTINE SERVO ROBOT (SERB) CONTROLLATO DA ARDUINO/* * imposta il tuo arduino per indirizzare il tuo SERB usando le routine incluse*/void serbSetup(){ setSpeed(leftSpeed); pinMode(LEFTSERVOPIN, OUTPUT); //imposta il pin del segnale del servo sinistro //in output pinMode(RIGHTSERVOPIN, OUTPUT); //imposta il pin del segnale del servo destro //in uscita leftServo.attach(LEFTSERVOPIN); //attacca il servo sinistro rightServo.attach(RIGHTSERVOPIN); //attacca il servo destro goStop();}/* * imposta la velocità del robot tra 0-(fermato) e 100-(piena velocità) * NOTA: la velocità non cambierà la velocità attuale devi cambiare la velocità * quindi chiamane una dei metodi go prima che avvengano le modifiche.*/ void setSpeed(int newSpeed){ setSpeedLeft(newSpeed); //imposta la velocità sinistra setSpeedRight(newSpeed); //imposta la velocità corretta}/* * Imposta la velocità della ruota sinistra */void setSpeedLeft(int newSpeed){ if(newSpeed >= 100) {newSpeed = 100;} //se la velocità è maggiore di 100 //rendela 100 if(newSpeed = 100) {newSpeed = 100;} //se la velocità è maggiore di 100 //crea 100 if(newSpeed <= 0) {newSpeed = 0;} //se la velocità è minore di 0 make // it 0 rightSpeed = newSpeed * 0.9; //ridimensiona la velocità in modo che sia }/* * invia il robot in avanti */void goForward(){ leftServo.write(90 + leftSpeed); rightServo.write(90 - rightSpeed);} /* * manda il robot indietro */void goBackward(){ leftServo.write(90 - leftSpeed); rightServo.write(90 + rightSpeed);} /* * invia il robot a destra */void goRight(){ leftServo.write(90 + leftSpeed); rightServo.write(90 + rightSpeed);}/* * invia il robot a sinistra */void goLeft(){ leftServo.write(90 - leftSpeed); rightServo.write(90 - rightSpeed);}/* * ferma il robot */void goStop(){ leftServo.write(90); rightServo.write(90);}//FINE DELLE ROUTINE SERVO-ROBOT CONTROLLATE DA ARDUINO (SERB)//------------- -------------------

Fase 4: Software - Robot portatile (WebServer)

Software - Robot portatile (WebServer)
Software - Robot portatile (WebServer)

(L'elaborazione è un linguaggio e un ambiente di programmazione open source con cui è semplicissimo iniziare. Per maggiori dettagli, visita Elaborazione) Anche il software che viene eseguito sul laptop del robot è abbastanza semplice. È un server Web piuttosto rudimentale (in ascolto delle richieste di pagine Web da un browser Web), una piccola interfaccia utente (per configurarlo) e strutture per passare i comandi ricevuti dal server Web all'Arduino. Per installare rapidamente: (Su Windows)

  • Scarica il file zip qui sotto (06-WEBB-Processing Webserver (windows exe).zip)
  • Decomprimilo ed esegui il file.exe (_WEBB_WebServer_RobotComputer.exe)

Per modificare in Elaborazione:

  • Scarica il file zip qui sotto (06-WEBB-Processing Webserver (file sorgente).zip)
  • Decomprimi ovunque sul tuo computer.
  • Apri l'ambiente di elaborazione e apri (_WEBB_WebServer_RobotComputer.pde)

Testare:

  • Esegui il programma.
  • Nella casella n. 1 ci sarà un elenco delle porte di comunicazione disponibili sul tuo computer (fai clic su quella a cui è collegato il tuo Arduino. (il tuo robot si contrarrà un paio di volte mentre il computer si connette e un punto ciano apparirà accanto alla scelta porta di comunicazione)
  • Nella casella n. 2 prova per vedere se il tuo Arduino è connesso. Fai clic su una delle frecce e, si spera, il tuo robot si sposterà nella direzione selezionata per mezzo secondo.
  • Nella casella n. 3 fare clic sul pulsante "Avvia" per avviare il server web.
  • Aprire un browser Web (sul Robot Laptop) e visitare https://127.0.0.1:12345/ControlPage.html (si spera che appaia la pagina Web di controllo con i pulsanti) -Dettagli su come utilizzare questa pagina nel passaggio successivo -

Che cosa sta succedendo:

  • Il Web Server ascolta sulla porta 12345 le richieste http (cosa viene inviato quando si digita l'indirizzo di una pagina Web)
  • Ci sono due tipi di richieste a cui risponde.

1. Ascolta "ControlPage.html" e invierà la pagina Web di controllo 2. Ascolta le richieste della forma "/request?command=F&param1=100" (questi comandi vengono analizzati e inviati ad Arduino (questo esempio risulterebbe nel robot andando avanti per 10 secondi)Appendice: (Il codice per il WebServer)

/* * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Per maggiori dettagli visita: https://www.oomlout.com/serb * * Comportamento: Il programma ascolta le richieste http (pagina web) nella forma * "/request ?command=F&param1=100" e poi li passa a * Arduino * Comandi supportati - &aposF&apos - 70 - Avanti * &aposB&apos - 66 - Indietro * &aposL&apos - 76 - Sinistra * &aposR&apos - 82 - Destra * &aposS&apos - 83 - Velocità * &aposX&apos - 88 - SetSpeedLeft * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * param1&aposs - 0 - 255 (da 0 a 25,5 secondi) valore * 100 millisecondi * * serve anche la pagina web di controllo al browser se si richiede ControlPage.html * * Operazione: 1. Clicca sulla porta Comm a cui il tuo Arduino è connesso * 2. Usa i pulsanti di test per vedere se il tuo arduino è in ascolto * (si sposterà nella direzione cliccata per mezzo secondo) * 3. Clicca su Start e il tuo server web ascolta le richieste * * * Licenza: Quest'opera è sotto licenza Creative Commons * Attribu tion-Share Alike 3.0 Licenza Unported. Per * visualizzare una copia di questa licenza, visitare * https://creativecommons.org/licenses/by-sa/3.0/ * o inviare una lettera a Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * STATI UNITI D'AMERICA. * */import processing.serial.*; //importa la libreria seriale per usare Serial (per parlare con Arduino)import processing.net.*; //importa la libreria di rete per usare Server (per parlare con Internet)/* Variabili relative alla porta seriale */int serialPortIndex = -1; //l'indice della porta seriale che stiamo utilizzando in Serial.list() listString commOptions; //Una variabile in cui memorizzare Serial.list() in modo che non sia necessario interrogare //le porte seriali ogni volta che si desidera fare un refrequence (il polling provoca un //salto nei servi arduino)Serial serialPort; //Rende la porta seriale indirizzabile in tutto questo sketch/* Variabili relative alla grafica e al rendering */Font font; //rende il carattere pubblico in modo che debba essere caricato solo una volta (Arial-72)/* Variabili relative alla rete */Server wServer; //Il server che gestisce le richieste webint port = 12345; //La porta su cui il server ascolta toint cycleCount = 0; //Conta il numero di volte in cui viene eseguito il ciclo di disegno (usato per //animare il testo "in esecuzione") /* Variabili di utilità */ PImage bg; //L'immagine di sfondo attualmente \WEBB-background.png/* * Variabili relative ai pulsanti * (i pulsanti sono implementati in modo molto approssimativo, i riquadri di delimitazione sono memorizzati e la grafica e il testo sono * disegnati sull'immagine di sfondo) es. lo spostamento delle variabili dei pulsanti non sposterà l'aspetto dei pulsanti */Button comm1; Pulsante com2; Pulsante comm3; Pulsante com4; //I pulsanti per scegliere la porta seriale correttaButton up; Pulsante a destra; Pulsante sinistro; Pulsante giù;//I pulsanti di direzione per verificare se il robot sta rispondendo Pulsante webServer; //Il pulsante per avviare il webServer/* * imposta tutto */void setup() { frameRate(5); //Rallenta un po' lo sketch in modo che non sia così pesante per il sistema bg = loadImage("WEBB-background.png"); //Carica l'immagine di sfondo (memorizzata nella cartella degli sketch) size(700, 400); //Imposta la dimensione della finestra dello schizzo font = loadFont("ArialMT-72.vlw"); //Carica il font che useremo in questo sketch commOptions = Serial.list(); // esegue il polling delle porte seriali e ottiene un elenco di porte disponibili // (farlo solo una volta impedisce al robot di contrarsi ogni volta che //viene interrogato la porta seriale) defineButtons(); //Definisce i riquadri di delimitazione per ogni pulsante background(bg); //Dipinge l'immagine di sfondo (questa immagine ha tutta la grafica dei pulsanti su di essa)}/* Il ciclo principale degli sketch */void draw() { if(cycleCount==0){ //-- chiama le routine di disegno drawCommBox(); //Disegna gli emelments nella Comm Box (box 1) drawTestBox(); //Disegna tutti gli elementi nel Test Box (box 2) drawWebServerBox(); //Disegna tutti gli elementi nel WebServer Box (box 3) } //-- chiama le routine di lavoro pollWebServer(); //Sonda il server web per vedere se sono arrivate richieste tramite la rete}//---------------- ------------------//Inizio di routine di disegno (divise solo per rendere il codice più piacevole da leggere)/* * La routine di aggiornamento del disegno (eseguita ad ogni ciclo) per gli elementi nella casella di comunicazione (casella 1) */void drawCommBox(){ fill(0, 0, 0); //Imposta il riempimento su nero textFont(font, 15); //Imposta il carattere alla giusta dimensione for(int i = 0; i 0){running = running + ".";} //il numero di punti è basato su CycleCount if((cycleCount / 1) > 1){ running = running + ".";} if((cycleCount / 1) > 2){running = running + ".";} if((cycleCount / 1) > 3){cycleCount=0;} text(running, 520, 210); } conteggiociclo++; //Ogni volta che passa CycleCount viene incrementato di uno} // Routine di fine disegno//---------------- ----------------//---- -----------------------------//Avvio routine di servizio/ * * mousePressed viene chiamato ogni volta che si preme il mouse questo * controlla se il mouse si trova all'interno di uno dei riquadri di delimitazione dei pulsanti * e se è la routine appropriata viene chiamata*/void mousePressed(){ if(comm1.pressed()) { updateSerialPort(0);} //Cambia alla porta di comunicazione all'indice 0 in Serial.list() else if(comm2.pressed()) {updateSerialPort(1);} //Cambia alla porta di comunicazione all'indice 1 in Serial.list() else if(comm3.pressed()) {updateSerialPort(2);} //Modifica la porta di comunicazione all'indice 2 in Serial.list() else if(comm4.pressed()) {updateSerialPort(3);} //Modifica la porta di comunicazione all'indice 3 in Serial.list() else if(up.pressed()) {sendRobotCommand("F", 5);} //Invia un comando per spostare il robot in avanti per 0,5 secondi else if(left.pressed()) {sendRobotCommand("L", 5);} / /Invia un comando per spostare il robot a sinistra per 0,5 secondi else if(right.pressed()) {sendRobotCommand("R", 5);} //Invia un comando per spostare il robot a destra per 0,5 secondi else if(down. press()) {sendRobotCommand("B", 5);} //Invia un comando per spostare il robot indietro per 0,5 secondi altrimenti if(webServer.pressed()) {startWebServer();} //Avvia il webServer cycleCount = 0; sfondo(bg); //Ridisegna l'immagine di sfondo (questa immagine ha tutta la grafica dei pulsanti su di essa) draw();}/* * Chiamato una volta che un'esecuzione controlla il Server per vedere se ci sono connessioni in attesa * se c'è una connessione in attesa esegue il pull la richiesta e la passa alla routine parseRequest(String) * per eliminare il testo extra. Questo viene quindi inviato alla routine interpretRequest(String) per * chiamare la routine di azione appropriata (cioè inviare istruzioni al robot).* * Viene inoltrata una richiesta immettendo l'indirizzo e la porta del computer in un browser Web * Per la macchina locale "https://127.0.0.1:12345/request?command=F&param1=100" * * Esempio di richiesta: * 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, come Gecko) * Accept: *//* * Accept-Language: en-US, en * Accetta-Charset: ISO-8859-1, *, utf-8 * Accetta-Codifica: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connessione: Keep-Alive * * Esempio di risposta (per richiesta elaborata) * HTTP/1.1 200 OK * Connection: close * Content-Type: text/html * * command: F param1: 100 */void pollWebServer(){ if(wServer != null){ //If the webServer sta eseguendo Richiesta client = wServer.available(); //Carica il prossimo Client in linea nel //server (null se non ci sono richieste in attesa) if(request != null){ //se c'è una richiesta processala String fullRequest = request.readString(); //Salva il contenuto della richiesta come stringa String ip = request.ip(); //Salva l'indirizzo IP del client come una stringa String requestString = parseRequest(fullRequest.toUpperCase()); //Toglie via tutte le //informazioni extra lasciando solo la stringa di richiesta (testo dopo GET) //(passa in maiuscolo per rendere più semplice il test delle stringhe) if(requestString.indexOf("REQUEST?") != -1){ //Controlla se la richiesta ha "REQUEST?" String risposta = interpretRequest(requestString); //Invia la richiesta all'interprete request.write("HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/html\n\n" + reply); //Invia la risposta a 200 per dire che la richiesta è stata //gestita e la stringa "reply" come risposta wServer.disconnect(request); //Disconnette il Client }else if(requestString.indexOf("CONTROLPAGE") != -1){ //Se la richiesta è per la pagina web di controllo String webPageArray = loadStrings("WEBB-ControlPage.html"); //Carica la pagina web di controllo da \data\WEBB-ControlPage.html //(caricata come un array di righe) String webPage =""; //Per rendere più semplice la modifica, la pagina Web è stata lasciata con //interruzioni di riga, quindi questo ciclo for elimina quelle righe for(int i = 0; i portIndex){ //se il portIndex passato è un indice valido in Serial.list() //(cioè non l'opzione tre in un elenco di due) serialPortIndex = portIndex; //imposta la variabile serialPortIndex sul nuovo indice della porta seriale //(questo viene utilizzato per visualizzare il punto accanto alla porta attiva) } if(serialPortIndex != -1){ //verifica che sia stata scelta una porta in precedenza if (serialPort != null){serialPort.stop();} //se una porta seriale è già in uso interromperla prima di caricarne una nuova serialPort = new Serial(this, Serial.list()[serialPortIndex], 9600); //Crea un nuovo oggetto Serial per comunicare con Arduino 9600 Baud }}/* * Prende una stringa di richiesta (es: "request?command=F&param1=100") e rimuoverà il comando * e param1 e lo passerà al arduino (l'aggiunta di parametri extra o comandi non arduino dovrebbe essere eseguita qui) */String interpretRequest(String requestString){ String returnValue = "OK"; //Prepara un comando String variabile returnValue; //Le tre righe successive estraggono il valore dopo "comando=" //(la riga in più è nel caso in cui il parametro del comando sia //alla fine della richiesta e non seguito da un & if(requestString.indexOf("COMANDO=") != -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; //Le tre righe successive estraggono il valore dopo "param1= " //(la riga aggiuntiva è nel caso in cui il parametro del comando sia //alla fine della richiesta e non seguito da 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); //Trasforma la stringa param1 in un intero sendRobotCommand(command, param1); //Invia il comando alla routine che lo invia all'Arduino returnValue = "command: " + command + " param1: " + param1; //al momento solo il comando parsed ma inviando //come html in modo che la formattazione possa essere inclusa return returnValue;}/* * Prende un comando (attualmente una lettera) e un parametro (un byte 0-255) e lo invia al arduino * che sta ascoltando e resta * Comandi attualmente supportati * F -*/void sendRobotCommand(String command, int param1){ println("command: " + command + " time: " + param1); String checkString = "AAA"; if(serialPort != null){ serialPort.write(checkString + comando); serialPort.write(byte(param1)); }}//Fine dell'installazione/routine non molto comunemente chiamate//--------------------- --------------------------------------------------- // Pulsante di esempio e codice RectButton dall'esempio di processing.org con alcune modifiche // fatte principalmente per semplificare e rimuovere l'animazione di rollover//https://processing.org/learning/topics/buttons.html (2008-09-23) class Button{ int x, y; int larghezza, altezza; Button(int ix, int iy, int iwidth, int iheight) { x = ix; y = iy; larghezza = ilarghezza; altezza = ialtezza; } booleano premuto() { if(overRect()) { return true; } else { return false;} } boolean overRect() { if (mouseX >= x && mouseX = y && mouseY <= y+height) { return true; } else { return false; } }}

Passaggio 5: Software - (Pagina Web)

Software - (Pagina Web)
Software - (Pagina Web)
Software - (Pagina Web)
Software - (Pagina Web)
Software - (Pagina Web)
Software - (Pagina Web)

Bene, abbiamo quasi finito, non resta che parlare con il tuo robot. Per parlare: (su una rete locale -su Windows-)

  • Scopri l'indirizzo IP locale del computer portatile. Per farlo vai su "Start\Programmi\Accessori\Prompt dei comandi" e quando si apre la finestra del terminale digita "ipconfig". Annota "Indirizzo IP" e vai a un altro computer sulla tua rete locale.
  • Aprire un browser Web, digitare "https:// (ip computer robot):12345/ControlPage.html
  • La pagina web di controllo dovrebbe essere caricata, nella casella "Indirizzo IP" digitare l'ip del computer robot.
  • Inizia a controllare il tuo robot.

Per iniziare a parlare: (su Internet) Ora che funziona localmente, farlo parlare su Internet è a pochi passi di distanza.

  • (passaggio più difficile) Configurare il port forwarding - Il tuo computer deve essere in ascolto su Internet piuttosto che solo sulla rete locale. Per fare ciò devi dire al tuo router di passare determinate richieste al computer che controlla il robot. Questo è un po' complesso e va ben oltre lo scopo di questo Instructable. Tuttavia, se visiti PortForward.com, ti daranno tutto ciò che devi sapere sulla configurazione del router (devi inoltrare la porta 12345 al tuo laptop robot)
  • Quindi scopri il tuo IP Internet (visita WhatIsMyIP.com)
  • Infine avvia skype, configura una videochiamata e chiedi a chiunque stai parlando di visitare "https://(internet IP):12345/ControlPage.html"
  • Digita l'IP Internet nella casella "Indirizzo IP" nella pagina Web di controllo e il tuo robot connesso al Web viene guidato da lontano.

Passaggio 6: finito

Finito
Finito

Bene, questo è tutto. Spero che ti stia divertendo a guidare il tuo robot da lontano. Se hai problemi con il software o l'hardware, sentiti libero di lasciare un commento e cercherò di aiutarti. Se desideri dare un'occhiata a progetti più interessanti, prova a visitare: oomlout.com

Consigliato: