Sadržaj:

Napravite robota povezanog na web (za oko 500 USD) (pomoću Arduina i Netbooka): 6 koraka (sa slikama)
Napravite robota povezanog na web (za oko 500 USD) (pomoću Arduina i Netbooka): 6 koraka (sa slikama)

Video: Napravite robota povezanog na web (za oko 500 USD) (pomoću Arduina i Netbooka): 6 koraka (sa slikama)

Video: Napravite robota povezanog na web (za oko 500 USD) (pomoću Arduina i Netbooka): 6 koraka (sa slikama)
Video: CS50 2015 - Week 8, continued 2024, Studeni
Anonim
Napravite robota povezanog s internetom (za oko 500 USD) (pomoću Arduina i Netbooka)
Napravite robota povezanog s internetom (za oko 500 USD) (pomoću Arduina i Netbooka)
Napravite robota povezanog s internetom (za oko 500 USD) (pomoću Arduina i Netbooka)
Napravite robota povezanog s internetom (za oko 500 USD) (pomoću Arduina i Netbooka)
Napravite robota povezanog s internetom (za oko 500 USD) (pomoću Arduina i Netbooka)
Napravite robota povezanog s internetom (za oko 500 USD) (pomoću Arduina i Netbooka)

Ovaj Instructable pokazat će vam kako izgraditi vlastiti Web Connected Robot (pomoću Arduino mikrokontrolera i Asus eee računala). Zašto biste htjeli Web Connected Robot? Naravno da se igrate. Vozite svog robota iz cijele prostorije ili diljem zemlje, ne koristeći ništa više od Skypea i web preglednika (ništa za instaliranje na upravljačko računalo). Nakon toga? Ukopajte se u softver i prilagodite ga kako želite, dodajte GPS kako biste mogli gledati gdje se vozite na karti, dodajte temperaturne senzore za mapiranje temperaturnih gradijenata u vašoj kući ili senzore sonara za dodavanje kontrola na ono što ste na webu vozači mogu i ne mogu naletjeti. Značajke:

  • Povoljno - (~ 500 USD ako sve dijelove kupite nove i znatno jeftinije ako kopate po kanti za dijelove)
  • Za pokretanje i upravljanje robotom potreban je samo web preglednik - (i Skype ako želite vidjeti gdje vozite)
  • Otvoreni izvorni i lako prilagodljivi - (koristi Arduino mikrokontroler, Obrada za web poslužitelj i sav softver može se izvoditi na Linuxu (sav se kod također jako komentira kako bi se olakšalo uskakanje i mijenjanje stvari))
  • Modularni dizajn (nije potpuno integriran sustav, ako želite koristiti drugu uslugu video konferencija bez brige, ili ako imate pečat Basic umjesto Arduina, samo mali dio koda i umetnite ga)

Evo kratkog videa moga robota povezanog s internetom koji je istjeran iz kuhinje.

Korak 1: Dijelovi i alati

Dijelovi i alati
Dijelovi i alati

Potrebno je samo nekoliko dijelova: Robot: Arduino upravljani servo robot - (SRB) (175 USD na oomlout.com) ili (napravite sami)

Robot otvorenog koda koji koristi Arduino mikrokontroler kao svoj mozak

(može se koristiti bilo koja platforma s dva servo robota s arduinom (opcija 1) (pošaljite mi poruku ako otkrijete neke druge mogućnosti) Računalo: Asus eee PC 4G (280 USD) (@Best Buy)

Mali jeftin laptop koji je savršen za tu svrhu

(bilo koje prijenosno računalo (ili stolno računalo ako želite raditi s akordom) koje se može pokrenuti Može se koristiti obrada skica) Laptop stol: Lasersko izrezani akril (25 USD (@ oomlout)) ili (izradite vlastiti korak 3)

Nekoliko dodatnih akrilnih komada koji se pričvršćuju na (SERB) kako bi dobili stol za prijenosno računalo

Matice i orasi: (dostupno u kućnom skladištu)

  • Vijak 3 mm x 10 mm (x4)
  • Vijak 3 mm x 15 mm (x4)
  • Matica 3 mm (x8)

Korak 2: Rezanje komada i montaža

Rezanje i montaža
Rezanje i montaža
Rezanje i montaža
Rezanje i montaža
Rezanje i montaža
Rezanje i montaža
Rezanje i montaža
Rezanje i montaža

Postoje tri mogućnosti za nabavku komada za stol za prijenosno računalo. Opcija rezanja 1: (Kupnja na web lokaciji oomlout.com)

laserski izrezani dijelovi stola i potrebni hardver dostupni su od oomlouta za 25 USD (ovdje)

Opcija 2: (Rezanje vlastitim laserskim rezačem ili Ponoko.com)

  • Preuzmite datoteku ispod (03-WEBB-akrilni dijelovi.cdr ili 03-WEBB-akrilni dijelovi (Ponoko P2).eps)
  • Izrežite ih od akrila od 3 mm (1/8 ")

Opcija 3: (Pila za pomicanje)

  • Preuzmite uzorak klizne pile odozdo (03-WEBB-ScrollSaw Pattern (A4).pdf (za papir veličine A4) ili 03-WEBB-ScrollSaw Pattern (letter).pdf (za papir veličine slova))
  • Dvaput provjerite nije li se povećalo tijekom ispisa (mjerenjem ispisanih ravnala)
  • Zalijepite na komad akrila od 3 mm (1/8 ") i izrežite komade.

Sklapanje: Preuzmite dolje vodič za montažu (04-WEBB-Vodič za montažu.pdf) i sastavite stol za prijenosno računalo.

Korak 3: Softver - (Arduino)

Softver - (Arduino)
Softver - (Arduino)

Za one koji su tek počeli koristiti Arduino, pogledajte sjajan vodič za početak rada na Arduino.cc Prije svega softver koji radi na Arduinu. To je vrlo jednostavan program, ono što Arduino radi je nadziranje podataka na serijskom portu. Ono što traži je razgovor dug 5 bajtova.

  • Bajt 1-3 (Provjerite bajtove "AAA")
  • Naredba Byte 4 (Kaže arduinu što učiniti) (Podržane naredbe 'F' - Naprijed, 'B' - Nazad, 'L' - Lijevo, 'R' - Desno, 'S' - Brzina, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Parametar bajta 5 - Za naredbe pomaka to se tumači kao vremenski interval (parametar * 100 ms), a za naredbe brzine postotak od 0-100

Kôd se temeljito komentira i s obzirom na ovaj okvir dodavanje dodatnih naredbi trebalo bi biti jednostavno. Za preuzimanje:

  • Preuzmite priloženu zip datoteku. (05-WEBB-Arduino Code.zip)
  • Raspakirajte u svoj Arduino Sketch direktorij. (zadano: Moji dokumenti / Arduino)
  • Otvorite svoje arduino razvojno okruženje i prenesite ga na svoj Arduino.

Za kopiranje i lijepljenje

  • Kopirajte kôd odozdo.
  • Zalijepite u razvojno okruženje Arduino.
  • Prenesite na svoj Arduino.

Dodatak: Arduino program

/ * * Arduino kontrolirani web spojeni robot (WEBB) - serijski domaćin * Za više detalja posjetite: https://www.oomlout.com/serb * * Ponašanje: Arduino sluša naredbu * u formatu 254, sluša svoj serijski port 88, 88, (COMMAND), (TIME) * Podržane naredbe - & aposF & apos - 70 - Naprijed * & aposB & apos - 66 - Nazad * & aposL & apos - 76 - Lijevo * & aposR & apos - 82 - Desno * & aposS & apos - 83 - Brzina * & aposX & aposL - 88 - Set * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Podržana vremena - 0 - 255 (0 do 25,5 sekundi) vrijednost * 100 milisekundi * sp * Ožičenje: desni servo signal - pin 9 * Lijevi servo signal - pin 10 * * Licenca: Ovo djelo je licencirano pod licencom Creative Commons * Attribution-Share Alike 3.0 Unported. Da biste * vidjeli kopiju ove licence, posjetite * https://creativecommons.org/licenses/by-sa/3.0/ * ili pošaljite pismo na Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * SAD. * */// --------------------------------------------- ---------------------------- // PREAMBULA POČETKA ARDUINO SERIJSKOG SERVERA // Definiranje konstanti koje odgovaraju svakoj naredbi (također i ascii kodni broj) #define FORWARD 70 // F#definiraj NAZAD 66 // B#definiraj LIJEVO 76 // L#definiraj DESNO 82 // R#definiraj SETSPEED 83 // S#definiraj STOP 67 // C#definiraj SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *Tri kontrolna bajta (koji se koriste da spriječe robota da odgovori na slučajne serijske *podatke) trenutno su "AAA" */#definiraju checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // POČETAK ARDUINO SERVO ROBOTA (SRPSKI) PREAMBULA#uključuje #define LEFTSERVOPIN 10 // Pin lijevog serva je spojen na#define RIGHTSERVOPIN 9 // Pin desnog servoa spojen je naServo leftServo; Servo desnoServo; int leftSpeed = 50; // zadržava brzinu robota leftServo // postotak između 0 i 100int rightSpeed = 100; // zadržava brzinu robota rightServo // postotak između 0 i 100 // KRAJ ARDUINO KONTROLIRANOG SERVO ROBOTA (SRPSKI) PREAMBULA // ------------------- -------------------------------------------------- ----- // Dobija sve i pokrećevoid setup () {Serial.begin (9600); // Pokreće serijski port serbSetup (); // postavlja stanje svih potrebnih // pinova i dodaje servo na vašu skicu} // Glavni program loopvoid loop () {serbPollSerialPort (); // kontinuirano gleda serijski port // ako postoje podaci koje obrađuje} // ------------------------------ ----------------------------------------- // POČETAK RUDINA SERVERA SERVERA ARDUINO/ * * Obrađuje naredbe isporučene na arduino & aposs serijski port */void serbPollSerialPort () {int dta; // varijabla za držanje serijskog bajta if (Serial.available ()> = 5) {// ako je 5 bajtova u međuspremniku (duljina pf punog zahtjeva) dta = Serial.read (); if (dta = checkByte1) {// Provjerava prvi bajt provjere dta = Serial.read (); if (dta = checkByte2) {// Provjerava drugi bajt provjere dta = Serial.read (); if (dta = checkByte3) {// Provjera trećeg bajta provjere int naredba = Serial.read (); // Četvrti bajt je naredba int param1 = Serial.read (); // Peti bajt je param1 interpretCommand (naredba, param1); // šalje mu raščlanjeni zahtjev & aposs handler}}}}}/ * * Uzima naredbu i parametar i prosljeđuje ih robotu */void interpretCommand (int naredba, int param1) {if (naredba == NAPRIJED) {goForward (); kašnjenje (param1 * 100); goStop ();} // ako naprijed else if (naredba == BACKWARD) {goBackward (); kašnjenje (param1 * 100); goStop ();} // ako unatrag else if (naredba == LIJEVO) {goLeft (); kašnjenje (param1 * 100); goStop ();} // ako je ostalo else if (naredba == RIGHT) {goRight (); kašnjenje (param1 * 100); goStop ();} // ako je pravo else if (naredba == SETSPEED) {setSpeed (param1);} // ako se podešava brzina else if (naredba == STOP) {goStop ();} // ako se zaustavi else if (naredba == SETSPEED) naredba == SETSPEEDLEFT) {setSpeedLeft (param1);} // ako postavite lijevu brzinu else if (naredba == SETSPEEDRIGHT) {setSpeedRight (param1);} // ako postavite drugu brzinu else {// ako neprepoznata naredba učinite malo shimmey ici lijevo(); kašnjenje (150); Idi desno(); kašnjenje (150); goStop (); }} // ---------------------------------------------- -------------------------- // POČETAK ARDUINO SERVO ROBOTA (SERB) KONTROLIRANIM ARDUINOM/ * * postavlja vaš arduino za obraćanje vašem SERB-u pomoću uključene rutine*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // postavlja lijevi pin servo signala // na izlazni pinMode (RIGHTSERVOPIN, OUTPUT); // postavlja desni pin servo signala // na izlaz leftServo.attach (LEFTSERVOPIN); // priključuje lijevi servo rightServo.attach (RIGHTSERVOPIN); // priključuje desni servo goStop ();}/ * * postavlja brzinu robota između 0- (zaustavljeno) i 100- (puna brzina) * NAPOMENA: brzina neće promijeniti trenutnu brzinu koju morate promijeniti brzinu * zatim nazovite jednu go metoda prije nego što dođe do promjena.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // postavlja lijevu brzinu setSpeedRight (newSpeed); // postavlja desnu brzinu}/ * * Postavlja brzinu lijevog kotača */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // ako je brzina veća od 100 // neka bude 100 if (newSpeed = 100) {newSpeed = 100;} // ako je brzina veća od 100 // neka bude 100 if (newSpeed <= 0) {newSpeed = 0;} // ako je brzina manja od 0 make // it 0 rightSpeed = newSpeed * 0,9; // povećava brzinu}/ * * šalje robota naprijed */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * šalje robota unatrag * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * šalje robota desno * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * šalje robota lijevo */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * zaustavlja robota */void goStop () {leftServo.write (90); rightServo.write (90);} // KRAJ ARDUINO UPRAVLJANIH SERVO ROBOTA (SRPSKIH) RUTINA // ---------------------------- -----------------------------------------------

Korak 4: Softver - robotsko prijenosno računalo (WebServer)

Softver - robotsko prijenosno računalo (WebServer)
Softver - robotsko prijenosno računalo (WebServer)

(Obrada je programski jezik i okruženje otvorenog koda s kojim je vrlo jednostavno započeti. Za više detalja posjetite Obrada) Softver koji radi na prijenosnom računalu robota također je vrlo jednostavan. To je prilično rudimentaran web-poslužitelj (osluškivanje zahtjeva web stranica s web preglednika), malo korisničko sučelje (za njegovo postavljanje) i mogućnosti za prosljeđivanje naredbi primljenih s web poslužitelja na Arduino. Za brzu instalaciju: (na prozorima)

  • U nastavku preuzmite zip datoteku (06-WEBB-Processing Webserver (windows exe).zip)
  • Raspakirajte ga i pokrenite.exe datoteku (_WEBB_WebServer_RobotComputer.exe)

Za uređivanje u obradi:

  • U nastavku preuzmite zip datoteku (06-WEBB-Processing Webserver (izvorne datoteke).zip)
  • Raspakirajte bilo gdje na računalu.
  • Otvorite okruženje za obradu i otvorite (_WEBB_WebServer_RobotComputer.pde)

Testirati:

  • Pokrenite program.
  • U okviru #1 bit će popis dostupnih komunikacijskih portova na vašem računalu (kliknite na onaj na koji je povezan vaš Arduino. (Vaš će se robot trznuti nekoliko puta dok se računalo poveže, a pored odabrane će se pojaviti cijan točka comm port)
  • U okviru #2 provjerite je li vaš Arduino spojen. Pritisnite jednu od strelica i nadamo se da će se vaš robot pola sekunde kretati u klikanom smjeru.
  • U okviru #3 kliknite gumb "Start" za pokretanje web poslužitelja.
  • Otvorite web preglednik (na prijenosnom računaru Robot) i posjetite https://127.0.0.1:12345/ControlPage.html (nadamo se da će se pojaviti kontrolna web stranica s gumbima na njoj) -Pojedinosti o tome kako koristiti ovu stranicu u sljedećem koraku -

Što se događa:

  • Web poslužitelj sluša port 12345 radi http zahtjeva (ono što se šalje kada upišete adresu web stranice)
  • Postoje dvije vrste zahtjeva na koje odgovara.

1. Sluša "ControlPage.html" i šalje kontrolnu web stranicu 2. Sluša zahtjeve oblika "/request? Command = F & param1 = 100" (ove naredbe se raščlanjuju i šalju na Arduino (ovaj primjer bi rezultirao u robotu ide naprijed 10 sekundi) Dodatak: (Kod za WebServer)

/ * * Arduino kontrolirani web spojeni robot (WEBB) - web poslužitelj * Za više detalja posjetite: https://www.oomlout.com/serb * * Ponašanje: Program osluškuje zahtjeve http (web stranice) u obliku * "/zahtjev ? command = F & param1 = 100 ", a zatim ih prosljeđuje * Arduino * podržanim naredbama - & aposF & apos - 70 - naprijed * & aposB & apos - 66 - unatrag * & aposL & apos - 76 - lijevo * & aposR & apos - 82 - desno * & aposS & apos - 83 - Brzina * & aposX & - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - Vrijednost 0 - 255 (0 do 25,5 sekundi) * 100 milisekundi * * također poslužuje kontrolnu web stranicu pregledniku ako traži ControlPage.html * * Rad: 1. Kliknite na Comm port na koji je povezan vaš Arduino * 2. Pomoću testnih gumba provjerite sluša li vaš arduino * (pomaknut će se u smjeru na koji će se kliknuti pola sekunde) * 3. Pritisnite Start i vaš web poslužitelj će slušajte zahtjeve * * * Licenca: Ovo djelo je licencirano pod Creative Commons * Atributi tion-Share Alike 3.0 Neprijavljena licenca. Da biste * vidjeli kopiju ove licence, posjetite * https://creativecommons.org/licenses/by-sa/3.0/ * ili pošaljite pismo na Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * SAD. * */uvoz obrada.serial. *; // uvozimo serijsku biblioteku za upotrebu serijskog (za razgovor s Arduinom) uvoz obrade.net.*; // uvozimo knjižnicu net za korištenje poslužitelja (za razgovor s internetom)/ * Varijable povezane sa serijskim portom */int serialPortIndex = -1; // indeks serijskog porta koji koristimo u Serial.list () listString commOptions; // Varijabla za spremanje Serial.list () tako da nema potrebe // anketirati serijske portove svaki put kad je želimo refrencirati (prozivanje uzrokuje // skok u arduino servosisteme) Serial serialPort; // Omogućuje da se serijski port može adresirati na ovoj skici/ * Grafičke i renderiranje povezane varijable */PFont font; // font čini javnim pa ga je potrebno učitati samo jednom (Arial-72)/ * Mrežne varijable */Server wServer; // Poslužitelj koji rukuje web requestint portom = 12345; // Port koji poslužitelj slušainticleCount = 0; // Broji koliko se puta izvodi petlja crtanja (koristi se za // animiranje "tekućeg" teksta)/ * Varijable uslužnih programa */PImage bg; // Pozadinska slika trenutno / WEBB-background.png/ * * Varijable povezane s gumbom * (gumbi su implementirani vrlo grubo, granični okviri se pohranjuju, a grafički i tekstualni tekst * iscrtavaju na pozadinskoj slici) tj. pomicanje varijabli gumba neće pomaknuti izgled gumba */gumb comm1; Gumb comm2; Gumb comm3; Gumb comm4; // Gumbi za odabir ispravnog serijskog portaButton up; Gumb desno; Tipka lijevo; Button down; // Gumbi za smjer za testiranje reagira li robotButton webServer; // Gumb za pokretanje webServera/ * * postavlja sve */void setup () {frameRate (5); // Malo usporava skicu tako da ne opterećuje sustav bg = loadImage ("WEBB-background.png"); // Učitava pozadinsku sliku (pohranjenu u mapi skica) veličine (700, 400); // Postavlja veličinu fonta za skicu font = loadFont ("ArialMT-72.vlw"); // Učitava font koji ćemo koristiti kroz ovu skicu commOptions = Serial.list (); // Anketira serijske portove i dobiva popis dostupnih portova // (to čini samo jednom spriječavajući robota da se trgne svaki put kada se & aposs // anketira serijski port) defineButtons (); // Definira granične okvire za svaku pozadinu gumba (bg); // Boji pozadinsku sliku (ova slika ima sve grafike gumba na sebi)}/ * Skicira glavnu petlju */void draw () {if (cycleCount == 0) {//- pozivanje rutina za crtanje drawCommBox (); // Crta memelments u Comm Box (okvir 1) drawTestBox (); // Crta sve elemente u testnom okviru (okvir 2) drawWebServerBox (); // Crta sve elemente u okviru WebServera (okvir 3)} //- poziva radne rutine pollWebServer (); // Anketira web poslužitelj da vidi jesu li stigli neki zahtjevi putem mreže} // ------------------------------ ---------------------------------------------- // Početak rutine crtanja (podijelite se samo radi boljeg čitanja koda)/ * * Rutina ažuriranja crtanja (izvodi se svaki ciklus) za stavke u okviru za komunikaciju (okvir 1) */void drawCommBox () {fill (0, 0, 0); // Postavljanje ispune na crni textFont (font, 15); // Postavite font na odgovarajuću veličinu za (int i = 0; i 0) {running = running + ".";} // broj točaka temelji se na cycCount if ((cycleCount /1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} tekst (trčanje, 520, 210); } cycleCount ++; // Svaki put kroz cycleCount se povećava za jedan} // Kraj rutinskih rutina // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Start of Service rutine/ * * mousePressed se poziva svaki put kada se pritisne miš. ovo * provjerava je li miš unutar bilo kojeg okvira za ograničavanje gumba * i je li to odgovarajuća rutina koja se naziva */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Promjene na portu za komunikaciju s indeksom 0 u Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Promjene na portu za komunikaciju na indeksu 1 u Serial.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Promjene porta za komunikaciju na indeksu 2 u Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Promjene porta za komunikaciju na indeksu 3 u Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Šalje naredbu za pomicanje robota naprijed za 0,5 sekunde else if (left.pressed ()) {sendRobotCommand ("L", 5);} / /Šalje naredbu za pomicanje robota ulijevo na 0,5 sekundi, osim ako (right.pressed ()) {sendRobotCommand ("R", 5);} // Šalje naredbu za pomicanje robota udesno na 0,5 sekunde, ako (dolje). pritisnuto ()) {sendRobotCommand ("B", 5);} // Šalje naredbu za pomicanje robota unatrag na 0,5 sekundi. 0; pozadina (bg); // Ponovno slika pozadinsku sliku (ova slika ima sve grafike gumba) draw ();}/ * * Pozvano nakon izvršenja, provjerava poslužitelj ima li veza na čekanju * ako postoji veza na čekanju koju povlači iz zahtjeva i prosljeđuje ga rutini parseRequest (String) * kako bi se uklonio dodatni tekst. To se zatim šalje rutini interpretRequest (String) za * pozivanje odgovarajuće rutine radnji (tj. Slanje uputa robotu).* * Zahtjev se prosljeđuje unosom adrese i porta računala u web preglednik * Za lokalni stroj "https://127.0.0.1:12345/request?command=F&param1=100" * * Primjer zahtjeva: * GET/request? naredba = F & param1 = 100 HTTP/1.1 * Korisnički agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-SAD) AppleWebKit/525.19 (KHTML, poput Gecko) * Prihvati: * // * * Prihvati-jezik: en-US, hr * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Domaćin: 127.0.0.1:12345 * Veza: Keep-Alive * * Primjer odgovora (za obrađeni zahtjev) * HTTP/1.1 200 OK * Veza: zatvori * Content-Type: text/html * * naredba: F param1: 100 */void pollWebServer () {if (wServer! = null) {// Ako je webServer je pokrenut Client request = wServer.available (); // Učitavanje sljedećeg klijenta u // red na poslužitelju (null ako nema čekanja) if (request! = Null) {// ako postoji zahtjev za obradu zahtjeva String fullRequest = request.readString (); // Pohraniti sadržaj zahtjeva kao niz String ip = request.ip (); // Spremi ip adresu klijenata kao niz String requestString = parseRequest (fullRequest.toUpperCase ()); // Skidamo sve dodatne // informacije ostavljajući samo niz zahtjeva (tekst nakon GET -a) // (prelazi na velika slova radi lakšeg testiranja niza) if (requestString.indexOf ("REQUEST?")! = -1) { // Provjerava ima li zahtjev "REQUEST?" String reply = interpretRequest (requestString); // Šalje zahtjev tumaču zahtjeva request.write ("HTTP/1.1 200 OK / nVeza: zatvori / nContent-Type: text/html / n / n" + odgovor); // Šalje odgovor 200 kako bi rekao da je zahtjev // obrađen i niz "odgovor" kao odgovor wServer.disconnect (zahtjev); // Prekida vezu s klijentom} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Ako je zahtjev za kontrolnu web stranicu String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Učitava kontrolnu web-stranicu iz / data / WEBB-ControlPage.html // (učitava se kao niz redaka) String webPage = ""; // Radi lakšeg uređivanja web stranici je ostavljeno // prijelomi retka pa ovo za petlje prekida ove retke za (int i = 0; i portIndex) {// ako je proslijeđeni portIndex važeći indeks u Serial.list () // (tj. nije opcija tri na popisu od dva) serialPortIndex = portIndex; // postavi varijablu serialPortIndex na novi indeks serijskog porta // (ovo se koristi za prikaz točke pokraj aktivnog porta)} if (serialPortIndex! = -1) {// provjerite je li port odabran nekad ranije ako (serialPort! = null) {serialPort.stop ();} // ako se serijski port već koristi, zaustavite ga prije učitavanja novog serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Stvaranje novog serijskog objekta za komunikaciju s Arduinom 9600 Baud}}/ * * Uzima niz zahtjeva (npr.: "request? Command = F & param1 = 100") te će ukloniti naredbe * i param1 i proslijediti ih u arduino (ovdje bi se izvršilo dodavanje dodatnih parametara ili naredbi koje nisu arduino) */String interpretRequest (String requestString) {String returnValue = "OK"; // Priprema varijablu returnValue String; // Sljedeća tri retka izvlače vrijednost nakon "command =" // (dodatni redak je u slučaju da je parametar naredbe na // kraju zahtjeva i ne slijedi & 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; // Sljedeća tri retka izdvajaju vrijednost nakon" param1 = "// (dodatni redak je u slučaju da je parametar naredbe na // kraju zahtjeva i ne slijedi & 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); // Pretvara niz param1 u cijeli broj sendRobotCommand (naredba, param1); // Šalje naredbu rutini koja je šalje Arduinu returnValue = "naredba:" + naredba + "param1:" + param1; // trenutno samo raščlanjena naredba, ali šalje // kao html pa se može uključiti oblikovanje return returnValue;}/ * * Uzima naredbu (trenutno jedno slovo) i parametar (jedan bajt 0-255) i šalje ih u arduino * koji sluša i reastira * Trenutačno podržane naredbe * F - */void sendRobotCommand (Naredba niza, int param1) {println ("naredba:" + naredba + "vrijeme:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + naredba); serialPort.write (bajt (param1)); }} // Kraj postavljanja/rutine koje se ne nazivaju često // ----------------------------------- -------------------------------------------------- // Primjer gumba i koda RectButton iz primjera processing.org s nekim promjenama // napravljene uglavnom radi pojednostavljenja i uklanjanja animacije pri prevrtanju // https://processing.org/learning/topics/buttons.html (2008-09-23) tipka Button {int x, y; int širina, visina; Gumb (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; širina = širina; visina = iheight; } boolean press () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+visina) {return true; } else {return false; }}}

5. korak: Softver - (web stranica)

Softver - (web stranica)
Softver - (web stranica)
Softver - (web stranica)
Softver - (web stranica)
Softver - (web stranica)
Softver - (web stranica)

Skoro smo završili. Ostaje samo razgovarati s vašim robotom. Za razgovor: (preko lokalne mreže -na prozorima-)

  • Otkrijte lokalnu IP adresu prijenosnog računala. Da biste to učinili, idite na "Start / Programs / Accesories / Command Prompt" i kada se otvori prozor terminala upišite "ipconfig". Zapišite "IP adresu" i krenite na drugo računalo u lokalnoj mreži.
  • Otvorite web preglednik, upišite "https:// (ip robotsko računalo): 12345/ControlPage.html
  • Kontrolna web stranica bi se trebala učitati, u okvir "IP adresa" upišite robotska računala ip.
  • Počnite kontrolirati svog robota.

Za razgovor: (preko interneta) Sada kada ga radite lokalno, razgovor je dostupan samo nekoliko kratkih koraka.

  • (najteži korak) Postavljanje prosljeđivanja priključaka - vaše računalo mora slušati internet, a ne samo lokalnu mrežu. Da biste to učinili, morate reći usmjerivaču da prenese određene zahtjeve računalu koje kontrolira robota. Ovo je pomalo složeno i nadilazi opseg ovog uputstva. Međutim, ako posjetite PortForward.com, oni će vam dati sve što trebate znati o konfiguriranju usmjerivača (morate proslijediti port 12345 na svoje robotsko prijenosno računalo)
  • Zatim otkrijte svoju internetsku IP adresu (posjetite WhatIsMyIP.com)
  • Na kraju pokrenite skype, postavite video poziv i posjetite bilo koga s kim razgovarate "https:// (internetski IP): 12345/ControlPage.html"
  • Upišite internetski IP u okvir "IP adresa" na kontrolnoj web stranici i vaš će se Web Connected Robot upravljati izdaleka.

Korak 6: Završeno

Završeno
Završeno

Pa to je to. Nadam se da se zabavljate vozeći svog robota iz daleka. Ako imate bilo kakvih problema sa softverom ili hardverom, slobodno ostavite komentar, a ja ću vam pokušati pomoći. Ako želite provjeriti još urednih projekata, pokušajte posjetiti: oomlout.com

Preporučeni: