Sadržaj:

Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook): 6 koraka (sa slikama)
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook): 6 koraka (sa slikama)

Video: Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook): 6 koraka (sa slikama)

Video: Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook): 6 koraka (sa slikama)
Video: CS50 2013 - Week 9 2024, Novembar
Anonim
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook)
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook)
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook)
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook)
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook)
Napravite robota povezanog na web (za oko 500 USD) (koristeći Arduino i Netbook)

Ovaj Instructable će vam pokazati kako izgraditi svog vlastitog Web Connected Robot-a (koristeći Arduino mikrokontroler i Asus eee pc). Zašto biste htjeli Web Connected Robot? Naravno da se igrate. Vozite svog robota iz cijele sobe ili diljem zemlje, ne koristeći ništa više od Skypea i web preglednika (ništa za instaliranje na kontrolnom računaru). 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 u mapu 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 naići. Karakteristike:

  • Jeftino - (~ 500 USD ako sve dijelove kupujete 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 izvor i lako prilagodljiv - (koristi Arduino mikrokontroler, Obrada za web poslužitelj i sav softver može se izvoditi na Linuxu (sav kôd je također jako komentiran kako bi se olakšalo uskakanje i mijenjanje stvari))
  • Modularni dizajn (nije potpuno integriran sistem, ako želite koristiti drugu uslugu video konferencija bez brige, ili ako imate osnovni pečat umjesto Arduina, samo mali dio koda i umetnite ga)

Evo kratkog videa kako mog robota povezanog s Internetom tjeraju 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 sa dvostrukim servo robotom sa arduinom (opcija 1) (pošaljite mi poruku ako otkrijete neke druge opcije) Računar: Asus eee PC 4G (280 USD) (@Best Buy)

Mali jeftin laptop koji je savršen za ovu 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 za (SERB) i daju mu stol na koji laptop može sjediti

Matice i orasi: (dostupno kod kućnog skladišta)

  • 3 mm vijak 10 mm (x4)
  • 3 mm x 15 mm vijak (x4)
  • 3 mm matica (x8)

Korak 2: Rezanje komada i montaža

Komadi za rezanje i montaža
Komadi za rezanje i montaža
Rezanje i montaža
Rezanje i montaža
Komadi za rezanje i montaža
Komadi za rezanje i montaža
Komadi za rezanje i montaža
Komadi za rezanje i montaža

Postoje tri opcije za nabavku komada za vaš stol za prijenosno računalo. Opcija rezanja 1: (Kupujete na 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 da nije skalirano pri štampanju (mjerenjem ispisanih ravnala)
  • Zalijepite na komad akrila od 3 mm (1/8 ") i izrežite komade.

Sklapanje: Preuzmite vodič za montažu (04-WEBB-Smernica za montažu.pdf) ispod i sastavite sto za laptop.

Korak 3: Softver - (Arduino)

Softver - (Arduino)
Softver - (Arduino)

Za one koji su tek počeli koristiti Arduino, pogledajte sjajan vodič za početak na Arduino.cc Prvo pokrenite softver koji radi na Arduinu. To je vrlo jednostavan program, ono što Arduino radi je da nadzire podatke na svom serijskom portu. Ono što traži je razgovor dug 5 bajtova.

  • Bajt 1-3 (Provjerite bajtove "AAA")
  • Naredba Byte 4 (Kaže arduinu šta treba 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 detaljno 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.
  • Otpremite na svoj Arduino.

Dodatak: Arduino program

/ * * Arduino kontrolisani web robot (WEBB) - serijski domaćin * Za više detalja posetite: https://www.oomlout.com/serb * * Ponašanje: Arduino sluša svoj serijski port radi komande * u formatu 254, 88, 88, (COMMAND), (TIME) * Podržane komande - & 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 * Atribucija-Dijeli pod istim uslovima 3.0 Neprijavljeno. 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. * */// --------------------------------------------- ---------------------------- // POČETAK PREAMBULA ARDUINO SERIAL 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) PREAMBULJA#uključuje #define LEFTSERVOPIN 10 // Pin lijevog serva je povezan na#define RIGHTSERVOPIN 9 // Pin desni servo je povezan saServo leftServo; Servo desnoServo; int leftSpeed = 50; // zadržava brzinu robota leftServo // postotak između 0 i 100int rightSpeed = 100; // drži brzinu robota rightServo // postotak između 0 i 100 // KRAJ ARDUINO 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 ARDUINO SERVISA SERIJSKOG SERVERA/ * * 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 (dužina 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) {// Provjerava treći bajt 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 == FORWARD) {goForward (); kašnjenje (param1 * 100); goStop ();} // ako proslijedi else if (naredba == BACKWARD) {goBackward (); kašnjenje (param1 * 100); goStop ();} // ako unazad else if (naredba == LEFT) {goLeft (); kašnjenje (param1 * 100); goStop ();} // ako je ostalo else if (naredba == RIGHT) {goRight (); kašnjenje (param1 * 100); goStop ();} // if right else if (command == SETSPEED) {setSpeed (param1);} // ako se podešava brzina else if (command == STOP) {goStop ();} // ako se zaustavi else if (command naredba == SETSPEEDLEFT) {setSpeedLeft (param1);} // ako se postavi lijeva brzina else if (naredba == SETSPEEDRIGHT) {setSpeedRight (param1);} // ako se postavi prava brzina else {// ako neprepoznata naredba učini malo shimmey idi lijevo(); kašnjenje (150); idi desno(); kašnjenje (150); goStop (); }} // ---------------------------------------------- -------------------------- // POČETAK ARDUINO SERVO ROBOTA (SERB) KONTROLIRANIM ARDUINOM/ * * postavlja vaš arduino da se obraća vašem SRB-u pomoću uključene rutine*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // postavlja lijevu iglu servo signala // na izlaz 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, morate promijeniti brzinu * zatim pozovite 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 unazad * /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 SERVO ROBOTA (SRPSKIH) ROBOTA KOJE KONTROLIRA // ---------------------------- -----------------------------------------------

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

Softver - robotski laptop (WebServer)
Softver - robotski laptop (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 robotskom prijenosnom računaru također je prilično jednostavan. To je prilično rudimentaran web-poslužitelj (osluškivanje zahtjeva web stranica iz web preglednika), malo korisničko sučelje (za njegovo postavljanje) i mogućnosti za prosljeđivanje naredbi primljenih s web servera 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:

  • Preuzmite zip datoteku ispod (06-WEBB-obrada web servera (izvorne datoteke).zip)
  • Raspakujte bilo gdje na računaru.
  • Otvorite okruženje za obradu i otvorite (_WEBB_WebServer_RobotComputer.pde)

Za testiranje:

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

Šta se dešava:

  • Web server 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 http (web stranice) zahtjeve 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 & 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 služi web stranici za kontrolu pregledniku ako traži ControlPage.html * * Rad: 1. Kliknite na Comm port na koji je povezan vaš Arduino * 2. Pomoću ispitnih tipki provjerite sluša li vaš arduino * (kretat ć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 atributom Creative Commons * 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. * */import processing.serial. *; // uvozimo serijsku biblioteku da bismo koristili Serijski (za razgovor s Arduinom) import processing.net.*; // uvozimo biblioteku mreže 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 kada je želimo refrencirati (prozivanje uzrokuje // skok u arduino servosisteme) Serial serialPort; // Omogućuje da se serijski port može adresirati u cijeloj ovoj skici/ * Grafičke i renderiranje povezane varijable */PFont font; // čini font javnim pa ga je potrebno učitati samo jednom (Arial-72)/ * Mrežne varijable */Server wServer; // Poslužitelj koji obrađuje web requestsint port = 12345; // Port koji poslužitelj poslužujeintcycleCount = 0; // Broji koliko se puta petlja crtanja izvršava (koristi se za // animiranje "tekućeg" teksta)/ * Varijable uslužnih programa */PImage bg; // Slika pozadine trenutno / WEBB-background.png/ * * Varijable povezane s gumbom * (gumbi su implementirani vrlo grubo, granični okviri su pohranjeni, a grafički i tekst * nacrtani na pozadinskoj slici) tj. pomeranje promenljivih dugmadi neće pomeriti izgled dugmadi */dugme comm1; Taster comm2; Button comm3; Button comm4; // Dugmad za odabir ispravnog serijskog portaButton up; Button right; Button left; Button down; // Gumbi za smjer za testiranje reagira li robotButton webServer; // Dugme za pokretanje webServera/ * * postavlja sve */void setup () {frameRate (5); // Malo usporava skicu tako da ne opterećuje sistem bg = loadImage ("WEBB-background.png"); // Učitava pozadinsku sliku (pohranjenu u mapi skica) veličine (700, 400); // Postavlja veličinu prozora 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 sprječavajući robota da se trgne svaki put kada se & aposs // serijski port anketira) defineButtons (); // Definira granične okvire za svaku pozadinu gumba (bg); // Boji pozadinsku sliku (ova slika sadrži sve grafike dugmadi)}/ * Skicira glavnu petlju */void draw () {if (cycleCount == 0) {//- pozivanje rutina za crtanje drawCommBox (); // Crta memelments u Comm Box (polje 1) drawTestBox (); // Crta sve elemente u testnom okviru (okvir 2) drawWebServerBox (); // Crta sve elemente u WebServer Boxu (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 samo da bi kod bio ljepši za čitanje)/ * * Rutina ažuriranja crtanja (izvršava se svaki ciklus) za stavke u polju za komunikaciju (polje 1) */void drawCommBox () {fill (0, 0, 0); // Postavljanje ispune na crni textFont (font, 15); // Podesimo font na odgovarajuću veličinu za (int i = 0; i 0) {running = running + ".";} // broj tačaka se zasniva 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 sa indeksom 0 u Serial.list () inače if (comm2.pressed ()) {updateSerialPort (1);} // Promjene na portu za komunikaciju na indeksu 1 u Serial -u.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 sekundi, osim 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 dugmadi) draw ();}/ * * Pozvano jednom prilikom izvršenja, provjerava poslužitelj da li postoje veze na čekanju * ako postoji veza na čekanju koju povlači proslijedi zahtjev i proslijedi ga rutini parseRequest (String) * kako bi uklonio dodatni tekst. Ovo se zatim šalje rutini interpretRequest (String) da * pozove odgovarajuću rutinu akcije (tj. Pošalje instrukcije robotu).* * Zahtjev se prosljeđuje unosom adrese računara i porta u web preglednik * Za lokalnu mašinu "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, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 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 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 linija) String webPage = ""; // Radi lakšeg uređivanja web stranici je ostavljeno // prelomi redova, pa ovo za petlju prekida te redove za (int i = 0; i portIndex) {// ako je proslijeđeni portIndex važeći indeks u Serial.list () // (tj. nije opcija tri na spisku od dva) serialPortIndex = portIndex; // postavljamo varijablu serialPortIndex na novi indeks serijskog porta // (ovo se koristi za prikaz tačke pored 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); // Kreiramo novi serijski objekt za komunikaciju s Arduino 9600 Baud}}/ * * Uzima niz zahtjeva (npr.: "request? Command = F & param1 = 100") i uklonit će naredbe * i param1 i proslijediti ih arduino (dodavanje dodatnih parametara ili naredbi koje nisu arduino bi se izvršile ovdje) */String interpretRequest (String requestString) {String returnValue = "OK"; // Priprema varijablu returnValue String naredbu; // Sljedeća tri retka izvlače vrijednost nakon "command =" // (dodatni red 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 red 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 integer 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) class Button {int x, y; int širina, visina; Dugme (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; width = iwidth; height = iheight; } boolean press () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } else {return false; }}}

Korak 5: 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 da razgovaramo sa vašim robotom. Za razgovor: (preko lokalne mreže -na prozorima-)

  • Otkrijte lokalnu IP adresu prijenosnog računara. 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 idite na drugo računalo u lokalnoj mreži.
  • Otvorite web preglednik, upišite "https:// (ip računara robota): 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.

Da biste razgovarali: (preko interneta) Sada kada ga radite lokalno, razgovor s internetom je udaljen samo nekoliko kratkih koraka.

  • (najteži korak) Postavljanje prosljeđivanja portova - Vaš računar mora slušati internet, a ne samo lokalnu mrežu. Da biste to učinili, morate reći usmjerivaču da proslijedi određene zahtjeve računaru koji 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 svoj robotski laptop)
  • Zatim otkrijte svoju internetsku IP adresu (posjetite WhatIsMyIP.com)
  • Konačno, pokrenite skype, postavite video poziv i posjetite sa kim god razgovarate "https:// (internet IP): 12345/ControlPage.html"
  • Upišite internetsku IP adresu u okvir "IP adresa" na kontrolnoj web stranici i vaš robot povezan s internetom upravlja se izdaleka.

Korak 6: Završeno

Finished
Finished

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

Preporučuje se: