Cuprins:

Realizați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook): 6 pași (cu imagini)
Realizați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook): 6 pași (cu imagini)

Video: Realizați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook): 6 pași (cu imagini)

Video: Realizați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook): 6 pași (cu imagini)
Video: High Density 2022 2024, Noiembrie
Anonim
Creați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook)
Creați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook)
Creați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook)
Creați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook)
Creați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook)
Creați un robot conectat la web (pentru aproximativ 500 USD) (folosind un Arduino și Netbook)

Acest instructable vă va arăta cum să vă construiți propriul robot conectat la web (folosind un microcontroler Arduino și Asus eee pc). De ce ați dori un robot conectat la web? Pentru a juca, desigur. Conduceți robotul din întreaga cameră sau din toată țara, folosind nimic mai mult decât Skype și un browser web (nimic de instalat pe computerul care controlează). După care? Căutați în software și adaptați-l după cum doriți, adăugați un GPS pentru a putea urmări unde conduceți pe o hartă, adăugați senzori de temperatură pentru a mapa gradienții de temperatură din casa dvs. sau senzori sonari pentru a adăuga controale pe ceea ce sunteți pe web șoferii pot și nu pot întâlni. Caracteristici:

  • Ieftin - (~ 500 USD dacă achiziționați toate piesele noi și considerabil mai ieftin dacă săpați în coșul de piese)
  • Odată pus în funcțiune, controlul robotului necesită doar un browser web - (și Skype dacă doriți să vedeți unde conduceți)
  • Open Source și ușor de adaptat - (folosește un microcontroler Arduino, Procesarea pentru serverul web și toate software-urile pot fi rulate pe Linux (tot codul este, de asemenea, foarte comentat pentru a facilita introducerea și schimbarea lucrurilor))
  • Design modular (nu este un sistem complet integrat, dacă nu doriți să utilizați un serviciu de conferință video diferit, sau dacă aveți o ștampilă de bază, mai degrabă decât un Arduino, corectați o mică bucată de cod și introduceți-o)

Iată un videoclip rapid cu robotul meu conectat pe Web care a fost alungat din bucătărie.

Pasul 1: Piese și instrumente

Piese și instrumente
Piese și instrumente

Sunt necesare doar câteva piese: Robot: Arduino Controlled Servo Robot - (SERB) (175 $ @ oomlout.com) sau (faceți-vă propriul)

Un robot open source care folosește un microcontroler Arduino ca creier

(poate fi utilizată orice platformă de servo-robot dual cu un arduino (opțiunea 1) (vă rog să-mi trimiteți un mesaj dacă descoperiți alte opțiuni) Computer: Asus eee PC 4G (280 USD) (@Best Buy)

Un mic laptop ieftin, care este perfect în acest scop

(orice laptop (sau desktop dacă doriți să rulați cu o coardă) capabil să ruleze Schițe de procesare poate fi utilizat) Birou pentru laptop: Laser Cut Acrylic (25 USD (@ oomlout)) sau (construiți-vă propriul pas 3)

Câteva piese acrilice suplimentare care se înșurubează pe un (SERB) pentru a-i oferi un birou pentru laptop

Nuts and Bols: (disponibil la depozitul de acasă)

  • Șurub de 3 mm x 10 mm (x4)
  • Șurub de 3 mm x 15 mm (x4)
  • Piuliță de 3 mm (x8)

Pasul 2: Tăierea pieselor și asamblarea

Piese de tăiere și asamblare
Piese de tăiere și asamblare
Piese de tăiere și asamblare
Piese de tăiere și asamblare
Piese de tăiere și asamblare
Piese de tăiere și asamblare
Piese de tăiere și asamblare
Piese de tăiere și asamblare

Există trei opțiuni pentru a obține piese pentru biroul laptopului dvs. Opțiunea de tăiere 1: (Achiziționarea de pe oomlout.com)

piesele de birou tăiate cu laser și hardware-ul necesar sunt disponibile de la oomlout pentru 25 USD (aici)

Opțiunea 2: (tăierea cu propriul tăietor laser sau Ponoko.com)

  • Descărcați fișierul de mai jos (03-WEBB-Acrylic Parts.cdr sau 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • Tăiați-le din acrilic de 3 mm (1/8 ")

Opțiunea 3: (ferăstrău cu defilare)

  • Descărcați modelul ferăstrăului de derulare de mai jos (03-WEBB-ScrollSaw Pattern (A4).pdf (pentru hârtie de dimensiune A4) sau 03-WEBB-ScrollSaw Pattern (scrisoare).pdf (pentru hârtie de dimensiune scrisă))
  • Verificați de două ori dacă nu a fost redimensionată la imprimare (prin măsurarea riglelor tipărite)
  • Lipiți o bucată de acril de 3 mm (1/8 ") și tăiați bucățile.

Asamblare: Descărcați mai jos ghidul de asamblare (04-WEBB-Assembly Guide.pdf) și puneți biroul laptopului împreună.

Pasul 3: Software - (Arduino)

Software - (Arduino)
Software - (Arduino)

Pentru cei noi la Arduino, consultați ghidul de începere excelent de la Arduino.cc Mai întâi de pe software-ul care rulează pe Arduino. Este un program foarte simplu, ceea ce face Arduino este să monitorizeze portul său serial pentru date. Ceea ce caută este o conversație de 5 octeți.

  • Octet 1-3 (Verificați octeții „AAA”)
  • Comandă octet 4 (Îi spune arduino ce trebuie să facă) (Comenzi acceptate „F” - înainte, „B” - înapoi, „L” - stânga, „R” - dreapta, „S” - viteză, „X” - SetSpeedLeft, „Y” - SetSpeedRight, „C” - Stop)
  • Byte 5 Parameter - Pentru comenzile de mutare, acesta este interpretat ca un interval de timp (Parametru * 100 ms), iar pentru comenzile de viteză un procent de la 0 la 100

Codul este comentat cu atenție și având în vedere acest cadru, ar trebui să fie ușor să adăugați comenzi suplimentare.

  • Descărcați fișierul zip atașat. (05-WEBB-Arduino Code.zip)
  • Dezarhivați directorul Arduino Sketch. (implicit: Documentele mele / Arduino)
  • Deschideți-vă mediul de dezvoltare arduino și încărcați-l pe Arduino.

Pentru a copia și lipi

  • Copiați codul de mai jos.
  • Lipiți în mediul de dezvoltare Arduino.
  • Încărcați pe Arduino.

Anexă: Programul Arduino

/ * * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * Pentru mai multe detalii vizitați: https://www.oomlout.com/serb * * Comportament: Arduino ascultă portul său serial pentru o comandă * în format 254, 88, 88; * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Timpuri acceptate - 0 - 255 (0 - 25,5 secunde) valoare * 100 milisecunde * sp * Cablare: semnal servo dreapta - pin 9 * Semnal servo stânga - pin 10 * * Licență: Această lucrare este licențiată sub licența Creative Commons * Recunoaștere-Distribuire în condiții identice 3.0 Unported. Pentru a * vizualiza o copie a acestei licențe, vizitați * https://creativecommons.org/licenses/by-sa/3.0/ * sau trimiteți o scrisoare la Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * STATELE UNITE ALE AMERICII. * * / // --------------------------------------------- ---------------------------- // ÎNCEPUTUL PREAMBULUI SERIALULUI ARDUINO // Definirea constantelor corespunzătoare fiecărei comenzi (de asemenea, numărul de cod ascii) #define FORWARD 70 // F # define BACKWARD 66 // B # define LEFT 76 // L # define DREAPTA 82 // R # define SETSPEED 83 // S # define STOP 67 // C # define SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y / * Cele trei octeți de verificare (utilizate pentru a împiedica robotul să răspundă la datele seriale aleatorii *) în prezent "AAA" * / # define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ÎNCEPUTUL ROBOTULUI SERVO CONTROLAT ARDUINO (SERB) PREAMBUL # include #define LEFTSERVOPIN 10 // Pinul servo stânga este conectat la # define RIGHTSERVOPIN 9 // Pinul servo dreapta este conectat laServo leftServo; Servo dreapta Servo; int leftSpeed = 50; // menține viteza roboților leftServo // un procent între 0 și 100int rightSpeed = 100; // menține viteza roboților la dreapta Servo // un procent între 0 și 100 // FINALUL ARDUINO CONTROLAT SERVO ROBOT (SERB) PREAMBUL // ------------------- -------------------------------------------------- ----- // Pune totul în funcțiune și executăvoid setup () {Serial.begin (9600); // Pornește portul serial serbSetup (); // setează starea tuturor necesară // pinii și adaugă servos la schița ta} // Programul principal loopvoid loop () {serbPollSerialPort (); // se uită continuu la portul serial // dacă există date pe care le prelucrează} // ------------------------------ ----------------------------------------- // ÎNCEPUTUL RUTINELOR SERIALULUI ARDUINO / * * Procesează comenzile livrate la portul serial arduino & aposs * / void serbPollSerialPort () {int dta; // variabilă pentru a păstra octetul serial dacă (Serial.available ()> = 5) {// dacă 5 octeți sunt în buffer (lungimea pf o cerere completă) dta = Serial.read (); if (dta = checkByte1) {// Verifică primul octet de verificare dta = Serial.read (); if (dta = checkByte2) {// Verifică al doilea octet de verificare dta = Serial.read (); if (dta = checkByte3) {// Verifică a treia comandă de octet de verificare int = Serial.read (); // Al patrulea octet este comanda int param1 = Serial.read (); // Al cincilea octet este param1 interpretCommand (comandă, param1); // îi trimite cererea analizată & handler aposs}}}}} / * * Prinde comanda și parametrul și le transmite robotului * / void interpretCommand (comanda int, int param1) {if (comanda == FORWARD) {goForward (); întârziere (param1 * 100); goStop ();} // if forward else if (comanda == BACKWARD) {goBackward (); întârziere (param1 * 100); goStop ();} // dacă înapoi else if (comanda == STÂNGA) {goLeft (); întârziere (param1 * 100); goStop ();} // if left left if (comanda == RIGHT) {goRight (); întârziere (param1 * 100); goStop ();} // if right else if (comanda == SETSPEED) {setSpeed (param1);} // if setare viteza else if (comanda == STOP) {goStop ();} // if stop else if (comanda == SETSPEEDLEFT) {setSpeedLeft (param1);} // if seting speed left else if (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // if setting right speed else {// if unrecognized command do a little shimmey ia-o la stanga(); întârziere (150); faceți dreapta(); întârziere (150); goStop (); }} // ---------------------------------------------- -------------------------- // ÎNCEPUTUL RUTINELOR SERVO ROBOT (SERB) CONTROLATE ARDUINO / * * configurează arduino pentru a se adresa SERB-ului dvs. utilizând rutinele incluse * / void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // setează pinul de semnal servo stâng // la pinMode de ieșire (RIGHTSERVOPIN, OUTPUT); // setează pinul de semnal servo drept // la ieșirea leftServo.attach (LEFTSERVOPIN); // atașează servo stânga rightServo.attach (RIGHTSERVOPIN); // atașează servo dreapta goStop ();} / * * setează viteza robotului între 0- (oprit) și 100- (viteză maximă) * NOTĂ: viteza nu va schimba viteza curentă trebuie să schimbați viteza * apoi sunați una a metodelor go înainte ca modificările să apară. * / void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // setează viteza stângă setSpeedRight (newSpeed); // setează viteza dreaptă} / * * Setează viteza roții stângi * / void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // dacă viteza este mai mare de 100 // faceți-o 100 if (newSpeed = 100) {newSpeed = 100;} // dacă viteza este mai mare de 100 // faceți-o 100 if (newSpeed <= 0) {newSpeed = 0;} // dacă viteza este mai mică de 0 face // it 0 rightSpeed = newSpeed * 0.9; // scalează viteza de a fi} / * * trimite robotul înainte * / void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * trimite robotul înapoi * / void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * trimite robotul dreapta * / void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);} / * * trimite robotul la stânga * / void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);} / * * oprește robotul * / void goStop () {leftServo.write (90); rightServo.write (90);} // SFÂRȘITUL RUTINELOR SERVO CONTROLATE ARDUINO (SERB) // ---------------------------- -----------------------------------------------

Pasul 4: Software - Laptop robot (WebServer)

Software - Laptop robot (WebServer)
Software - Laptop robot (WebServer)

(Procesarea este un limbaj și un mediu de programare open source, care este foarte ușor de început. Pentru mai multe detalii vizitați Procesare) Software-ul care rulează pe laptopul robot este, de asemenea, destul de simplu. Este un server web destul de rudimentar (ascultând cererile de pagini web de la un browser web), o interfață de utilizator mică (pentru a o configura) și facilități pentru trecerea comenzilor primite de la serverul web către Arduino. Pentru a instala rapid: (pe ferestre)

  • Descărcați fișierul zip de mai jos (06-WEBB-Processing Webserver (windows exe).zip)
  • Dezarhivați-l și rulați fișierul.exe (_WEBB_WebServer_RobotComputer.exe)

Pentru a edita în procesare:

  • Descărcați fișierul zip de mai jos (06-WEBB-Processing Webserver (fișiere sursă).zip)
  • Dezarhivați oriunde pe computer.
  • Deschideți mediul de procesare și deschideți (_WEBB_WebServer_RobotComputer.pde)

A testa:

  • Rulați programul.
  • În caseta # 1 va exista o listă a porturilor de comunicare disponibile de pe computerul dvs. (faceți clic pe cel la care este conectat Arduino. (Robotul dvs. se va zvâcni de câteva ori pe măsură ce computerul se conectează și un punct cyan va apărea lângă cel ales port de comunicare)
  • În caseta # 2 testați pentru a vedea dacă Arduino este conectat. Faceți clic pe una dintre săgeți și, sperăm, robotul dvs. se va deplasa în direcția clicată timp de o jumătate de secundă.
  • În caseta nr. 3, faceți clic pe butonul „Start” pentru a porni serverul web.
  • Deschideți un browser web (pe laptopul Robot) și accesați https://127.0.0.1:12345/ControlPage.html (sperăm că va apărea pagina web de control cu butoane pe ea) -Detalii despre modul de utilizare a acestei pagini în pasul următor -

Ce se întâmplă:

  • Serverul Web ascultă portul 12345 pentru solicitări http (ce este trimis când introduceți adresa unei pagini web)
  • Există două tipuri de solicitări la care răspunde.

1. Ascultă „ControlPage.html” și va trimite pagina Web de control 2. Ascultă cererile din formularul „/ request? Command = F & param1 = 100” (aceste comenzi sunt analizate și trimise către Arduino (acest exemplu ar rezulta robotul merge înainte 10 secunde) Anexă: (Codul pentru WebServer)

/ * * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Pentru mai multe detalii vizitați: https://www.oomlout.com/serb * * Comportament: Programul ascultă cererile http (pagină web) în formularul * "/ request ? command = F & param1 = 100 "și apoi le trece la * Arduino * Comenzi acceptate - & aposF & apos - 70 - Înainte * & aposB & apos - 66 - Înapoi * & aposL & apos - 76 - Stânga * & aposR & apos - 82 - Dreapta * & aposS & apos - 83 - Viteză * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0-25,5 secunde) valoare * 100 milisecunde * * servește, de asemenea, pagina web de control către browser dacă cere ControlPage.html * * Operațiune: 1. Faceți clic pe portul de comunicare la care este conectat Arduino * * Utilizați butoanele de testare pentru a vedea dacă arduino ascultă * (se va deplasa în direcția în care ați dat clic timp de o jumătate de secundă) * 3. Faceți clic pe Start și serverul dvs. web va ascultați cereri * * * Licență: Această lucrare este licențiată sub Creative Commons * Attribu License-Share Alike 3.0 Unported License. Pentru a * vizualiza o copie a acestei licențe, vizitați * https://creativecommons.org/licenses/by-sa/3.0/ * sau trimiteți o scrisoare la Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * STATELE UNITE ALE AMERICII. * * / import processing.serial. *; // importați biblioteca serial pentru a utiliza Serial (pentru a vorbi cu Arduino) import processing.net. *; // importați biblioteca de net pentru a utiliza serverul (pentru a vorbi cu internetul) / * Variabile legate de port serial * / int serialPortIndex = -1; // indexul portului serial pe care îl folosim în Serial.list () listString opțiuni; // O variabilă pentru a stoca Serial.list () în așa că nu este nevoie să interogăm // porturile seriale de fiecare dată când dorim să o refrenăm (interogarea provoacă un // salt în servodupele arduino) Serial serialPort; // Face ca portul serial să fie adresabil pe toată această schiță / * Grafic și Variabile corelate cu redarea * / Font PFont; // face ca fontul să fie public astfel încât trebuie încărcat doar o singură dată (Arial-72) / * Variabile legate de rețea * / Server wServer; // Serverul care gestionează cererile web portul = 12345; // Portul pe care îl ascultă serverul pentru a include cycleCount = 0; // Numără de câte ori se execută bucla de desen (utilizată pentru // animarea textului „care rulează”) / * Variabile de utilitate * / PImage bg; // Imaginea de fundal în prezent / WEBB-background.png / * * Variabile legate de buton * (butoanele sunt implementate foarte aproximativ, casetele de delimitare sunt stocate și grafica și textul sunt * desenate pe imaginea de fundal), adică. mutarea variabilelor butonului nu va muta aspectul butoanelor * / Butonul comm1; Buton comm2; Buton comm3; Buton comm4; // Butoanele pentru a alege portul serial corect Buton sus; Buton dreapta; Buton stânga; Buton în jos; // Butoanele de direcție pentru a testa dacă robotul răspunde Buton webServer; // Butonul pentru a porni webServer / * * setează totul * / void setup () {frameRate (5); // Încetinește puțin schița, deci nu este la fel de impozitată pe sistem bg = loadImage ("WEBB-background.png"); // Încarcă dimensiunea imaginii de fundal (stocată în dosarul schiței) (700, 400); // Setează dimensiunea ferestrei de schiță font = loadFont ("ArialMT-72.vlw"); // Încarcă fontul pe care îl vom folosi prin această schiță commOptions = Serial.list (); // Interogă porturile seriale și primește o listă a porturilor disponibile // (acest lucru o singură dată împiedică robotul să se zvârcolească de fiecare dată când este apus // portul serial este interogat) defineButtons (); // Definește casetele de delimitare pentru fiecare fundal al butonului (bg); // Pictează imaginea de fundal (această imagine are toate elementele grafice ale butonului)} / * Bucla principală a schițelor * / void draw () {if (cycleCount == 0) {// - rutine de tragere a apelurilor drawCommBox (); // Desenează emelmentele în caseta de comunicare (caseta 1) drawTestBox (); // Desenează toate elementele din Test Box (caseta 2) drawWebServerBox (); // Desenează toate elementele din caseta WebServer (caseta 3)} // - apelează rutine de lucru pollWebServer (); // Interogă serverul web pentru a vedea dacă au venit cereri prin rețea} // ------------------------------ ----------------------------------------------//Începutul a rutine de desen (împărțit doar pentru a face codul mai frumos de citit) / * * Rutina de actualizare a desenului (executată la fiecare ciclu) pentru elementele din caseta de comunicare (caseta 1) * / void drawCommBox () {fill (0, 0, 0); // Setați umplerea la textFont negru (font, 15); // Setați fontul la dimensiunea potrivită pentru (int i = 0; i 0) {running = running + ".";} // numărul de puncte se bazează pe cycleCount dacă ((cycleCount / 1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} text (rulează, 520, 210); } cycleCount ++; // De fiecare dată prin cycleCount este crescut cu unul} // Rutine de sfârșit de desen // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Începerea rutinelor de service / * * mousePressed este apelat de fiecare dată când mouse-ul este apăsat acest * verifică dacă mouse-ul se află în oricare dintre casetele de limitare a butonului * și dacă este rutina adecvată se numește * / void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Modificări la portul de comunicare la indexul 0 din Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Modificări la portul de comunicare la indexul 1 din Serial.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Modificări la portul de comunicare la indexul 2 din Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Modificări la portul de comunicare la indexul 3 din Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Trimite o comandă pentru a muta robotul înainte pentru 0,5 alte secunde if (left.pressed ()) {sendRobotCommand ("L", 5);} / / Trimite o comandă pentru mutarea robotului la stânga 0,5 secunde altceva if (right.pressed ()) {sendRobotCommand ("R", 5);} // Trimite o comandă pentru mutarea robotului la dreapta timp de 0,5 secunde altceva dacă (jos. apăsat ()) {sendRobotCommand ("B", 5);} // Trimite o comandă pentru a muta robotul înapoi timp de 0,5 secunde altceva dacă (webServer.pressed ()) {startWebServer ();} // Pornește ciclul webServer cycleCount = 0; fundal (bg); // Repictează imaginea de fundal (această imagine are toate elementele grafice ale butonului) draw ();} / * * Apelat odată ce o execuție verifică Serverul pentru a vedea dacă există conexiuni de așteptare * dacă există o conexiune de așteptare pe care o trage solicitați și o treceți la rutina parseRequest (String) * pentru a elimina textul suplimentar. Acesta este apoi trimis rutinei interpretRequest (String) pentru a * apela rutina de acțiune adecvată (adică trimite instrucțiuni robotului).* * O cerere este transmisă introducând adresa și portul computerelor într-un browser web * Pentru mașina locală "https://127.0.0.1:12345/request?command=F&param1=100" * * Exemplu de cerere: * 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, ca Gecko) * Accept: * // * * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Gazdă: 127.0.0.1:12345 * Conexiune: Keep-Alive * * Exemplu de răspuns (pentru cerere procesată) * HTTP / 1.1 200 OK * Conexiune: închidere * Tip conținut: text / html * * comandă: F param1: 100 * / void pollWebServer () {if (wServer! = null) {// If the webServer rulează Client request = wServer.available (); // Încărcați următorul Client în linie în // server (nul dacă nu există așteptări) dacă (request! = Null) {// dacă există un proces de solicitare it String fullRequest = request.readString (); // Stocați conținutul cererii ca un șir Șir ip = request.ip (); // Stocați adresa IP a clienților ca un șir String requestString = parseRequest (fullRequest.toUpperCase ()); // Îndepărtați toate // informațiile suplimentare lăsând doar șirul de cerere (text după GET) // (trece la majuscule pentru a face testarea șirului mai ușoară) dacă (requestString.indexOf ("CERERE?")! = -1) { // Verifică dacă cererea are „CERERE?” String reply = interpretRequest (requestString); // Trimite cererea către interpretul de solicitare request.write ("HTTP / 1.1 200 OK / nConexiune: închidere / nContent-Type: text / html / n / n" + răspuns); // Trimite răspunsul un 200 pentru a spune că cererea a fost // tratată și șirul „răspuns” ca răspuns wServer.disconnect (request); // Deconectează clientul} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Dacă cererea este pentru pagina web de control String webPageArray = loadStrings ("WEBB-ControlPage.html"); // Încarcă controlul WebPage din / data / WEBB-ControlPage.html // (încărcat ca o matrice de linii) String webPage = ""; // Pentru a face editarea mai ușoară, pagina web a fost lăsată cu // întreruperi de linie, astfel încât bucla elimină acele linii pentru (int i = 0; i portIndex) {// dacă portIndexul trecut este un index valid în Serial.list () // (adică nu opțiunea trei dintr-o listă de două) serialPortIndex = portIndex; // setați variabila serialPortIndex la noul index al portului serial // (aceasta este utilizată pentru a afișa punctul de lângă portul activ)} if (serialPortIndex! = -1) {// verificați dacă un port a fost ales cândva anterior dacă (serialPort! = null) {serialPort.stop ();} // dacă un port serial este deja utilizat opriți-l înainte de a încărca unul nou serialPort = Serial nou (acesta, Serial.list () [serialPortIndex], 9600); // Creați un nou obiect Serial pentru a comunica cu Arduino 9600 Baud}} / * * Ia un șir de cerere (ex: "request? Command = F & param1 = 100") și va elimina comanda * și param1 și o va transmite către arduino (adăugarea de parametri suplimentari sau comenzi non-arduino s-ar face aici) * / String interpretRequest (String requestString) {String returnValue = "OK"; // Pregătește o comandă șir variabila returnValue; // Următoarele trei linii extrag valoarea după „command =” // (linia suplimentară este în cazul în care parametrul de comandă este la // sfârșitul cererii și nu este urmat de 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; // Următoarele trei linii extrag valoarea după" param1 = "// (linia suplimentară este în cazul în care parametrul de comandă este la // la sfârșitul cererii și nu este urmat de 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); // Transformă șirul param1 într-un număr întreg sendRobotCommand (comandă, param1); // Trimite comanda la rutina care o trimite la Arduino returnValue = "comanda:" + comanda + "param1:" + param1; // momentan doar comanda analizată, dar trimiterea // ca html, astfel încât formatarea să poată fi inclusă returnValue;} / * * Ia o comandă (în prezent o literă) și un parametru (un octet 0-255) și o trimite către arduino * care ascultă și reînnoiește * Comenzile acceptate în prezent * F - * / void sendRobotCommand (Comanda șir, int param1) {println ("comandă:" + comandă + "timp:" + param1); String checkString = "AAA"; if (serialPort! = nul) {serialPort.write (checkString + comanda); serialPort.write (octet (param1)); }} // Sfârșitul configurării / nu se numește foarte frecvent rutine // ----------------------------------- -------------------------------------------------- // Exemplu de buton și cod RectButton din exemplu de procesare.org cu unele modificări // făcute în principal pentru simplificarea și eliminarea animației de trecere // https://processing.org/learning/topics/buttons.html (2008-09-23) clasă Buton {int x, y; lățime int, înălțime; Buton (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; width = iwidth; înălțime = iheight; } boolean apăsat () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y + înălțime) {return true; } else {return false; }}}

Pasul 5: Software - (pagină web)

Software - (pagină web)
Software - (pagină web)
Software - (pagină web)
Software - (pagină web)
Software - (pagină web)
Software - (pagină web)

Ei bine, aproape că am terminat, nu mai rămâne decât să vorbim cu robotul tău. Pentru a vorbi: (printr-o rețea locală - pe Windows-)

  • Descoperiți adresa IP locală a computerului laptop. Pentru aceasta, accesați „Start / Programs / Accesories / Command Prompt” și când se deschide fereastra terminalului, tastați „ipconfig”. Notați „Adresă IP” și mergeți la un alt computer din rețeaua dvs. locală.
  • Deschideți un browser web, tastați „https:// (IP computer computer): 12345 / ControlPage.html
  • Pagina web de control ar trebui să se încarce, în caseta „Adresă IP” tastați ip-ul computerelor robot.
  • Începeți să vă controlați robotul.

Pentru a vorbi: (pe internet) Acum, că îl funcționezi local, obținându-l vorbind pe internet este la doar câțiva pași distanță.

  • (cel mai dificil pas) Configurați redirecționarea portului - computerul dvs. trebuie să asculte internetul, nu doar rețeaua locală. Pentru a face acest lucru, trebuie să îi spuneți routerului să transmită anumite cereri computerului care controlează robotul. Acesta este un pic complex și depășește cu mult domeniul de aplicare al acestui instructabil. Cu toate acestea, dacă vizitați PortForward.com, acestea vă vor oferi tot ce trebuie să știți despre configurarea routerului (trebuie să redirecționați portul 12345 către laptopul robot)
  • Descoperiți apoi IP-ul dvs. de internet (vizitați WhatIsMyIP.com)
  • În cele din urmă, declanșați un apel video Skype și obțineți cu cine vorbiți pentru a vizita „https:// (internet IP): 12345 / ControlPage.html”
  • Introduceți IP-ul internetului în caseta „Adresă IP” din pagina web de control, iar robotul dvs. conectat la web este condus de departe.

Pasul 6: Finalizat

Terminat
Terminat

Ei bine, asta e. Sper că te distrezi conducând robotul de departe. Dacă aveți probleme cu software-ul sau hardware-ul, nu ezitați să lăsați un comentariu și voi încerca să vă ajut.

Recomandat: