Naredite spletnega robota (za približno 500 USD) (z uporabo Arduina in Netbooka): 6 korakov (s slikami)
Naredite spletnega robota (za približno 500 USD) (z uporabo Arduina in Netbooka): 6 korakov (s slikami)
Anonim

Ta Instructable vam bo pokazal, kako sestaviti svojega lastnega spletnega robota (z uporabo mikrokrmilnika Arduino in računalnika Asus eee). Zakaj bi želeli spletnega robota? Seveda se igrati. Vozite svojega robota po vsej sobi ali po vsej državi in ne uporabljajte nič drugega kot Skype in spletni brskalnik (ničesar za namestitev na nadzorni računalnik). Potem? Poglobite se v programsko opremo in jo prilagodite, kakor želite, dodajte GPS, da boste lahko opazovali, kje se vozite na zemljevidu, dodajte temperaturne senzorje za preslikavo temperaturnih gradientov v vaši hiši ali senzorje sonarjev, da dodate kontrole nad tem, kar ste na spletu vozniki lahko naletijo in ne morejo. Lastnosti:

  • Poceni - (~ 500 USD, če kupite vse dele nove in bistveno cenejše, če kopate po košu za dele)
  • Ko je robot zagnan, je potreben le spletni brskalnik - (in Skype, če želite videti, kam vozite)
  • Odprtokoden in enostavno prilagodljiv - (uporablja mikrokrmilnik Arduino, obdelavo za spletni strežnik in vso programsko opremo je mogoče zagnati v Linuxu (vsa koda je prav tako močno komentirana, da olajša vstavljanje in spreminjanje stvari))
  • Modularno oblikovanje (ni popolnoma integriran sistem, če želite uporabljati drugo storitev videokonferenc brez skrbi, ali če imate žig Basic namesto Arduina, ravno prav majhen kos kode in ga vstavite)

Tukaj je kratek videoposnetek mojega spletnega robota, ki ga vozijo iz kuhinje.

Korak: Deli in orodja

Potrebujete le nekaj delov: Robot: Arduino krmiljeni servo robot - (SERB) (175 USD @ oomlout.com) ali (naredite svojega)

Odprtokodni robot, ki za svoje možgane uporablja mikrokrmilnik Arduino

(Uporabite lahko katero koli dvojno servo robotsko platformo z arduinom (možnost 1) (prosim, pišite mi, če odkrijete kakšne druge možnosti) Računalnik: Asus eee PC 4G (280 USD) (@Best Buy)

Majhen poceni prenosnik, ki je kot nalašč za ta namen

(kateri koli prenosni računalnik (ali namizni računalnik, če želite teči s akordom), ki se lahko izvaja. Uporabite lahko obdelavo skic) Namizni računalnik: Lasersko izrezan akril (25 USD (@ oomlout)) ali (sestavite svoj korak 3)

Nekaj dodatnih akrilnih kosov, ki se pritrdijo na (SERB) in tako dobijo mizo za prenosni računalnik

Orehi in palice: (na voljo na domu)

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

2. korak: Rezanje kosov in montaža

Obstajajo tri možnosti za pridobivanje kosov za mizo za prenosni računalnik. 1. možnost rezanja: (nakup pri oomlout.com)

lasersko izrezani kosi mize in potrebna strojna oprema so na voljo pri oomloutu za 25 USD (tukaj)

Možnost 2: (Rezanje z lastnim laserskim rezalnikom ali Ponoko.com)

  • Prenesite spodnjo datoteko (03-WEBB-Akrilni deli.cdr ali 03-WEBB-Akrilni deli (Ponoko P2).eps)
  • Izrežite jih iz 3 mm (1/8 ") akrila

3. možnost: (žaga za pomikanje)

  • Prenesite vzorec drsne žage od spodaj (03-WEBB-ScrollSaw Pattern (A4).pdf (za papir velikosti A4) ali 03-WEBB-ScrollSaw Pattern (letter).pdf (za papir velikosti Letter))
  • Dvakrat preverite, ali se pri tiskanju ni povečalo (z merjenjem natisnjenih ravnil)
  • Lepite na kos 3 mm (1/8 ") akrila in izrežite kose.

Sestavljanje: Spodaj prenesite priročnik za sestavljanje (04-WEBB-Priročnik za montažo.pdf) in sestavite mizo prenosnika.

3. korak: Programska oprema - (Arduino)

Za nove v Arduinu si oglejte odličen vodnik za začetek na Arduino.cc Najprej zaženite programsko opremo, ki se izvaja na Arduinu. To je zelo preprost program. Arduino spremlja serijska vrata za podatke. Kar išče, je pogovor dolg 5 bajtov.

  • Bajt 1-3 (Preverite bajte "AAA")
  • Ukaz Byte 4 (Pove arduinu, kaj naj naredi) (Podprti ukazi 'F' - naprej, 'B' - nazaj, 'L' - levo, 'R' - desno, 'S' - hitrost, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Parameter bajta 5 - Za ukaze za premik se to razlaga kot časovni interval (parameter * 100 ms), za ukaze za hitrost pa odstotek od 0-100

Koda je temeljito komentirana in glede na ta okvir bi moralo biti enostavno dodajanje dodatnih ukazov.

  • Prenesite priloženo datoteko zip. (05-WEBB-Arduino Code.zip)
  • Razpakirajte v imenik Arduino Sketch. (privzeto: Moji dokumenti / Arduino )
  • Odprite svoje razvojno okolje arduino in ga naložite v svoj arduino.

Za kopiranje in lepljenje

  • Kopirajte kodo od spodaj.
  • Prilepite v razvojno okolje Arduino.
  • Naložite v svoj Arduino.

Dodatek: Program Arduino

/ * * Arduino krmiljeni spletni robot (WEBB) - serijski gostitelj * Za več podrobnosti obiščite: https://www.oomlout.com/serb * * Vedenje: Arduino posluša svoja serijska vrata za ukaz * v formatu 254, 88, 88, (COMMAND), (TIME) * Podprti ukazi - & aposF & apos - 70 - Naprej * & aposB & apos - 66 - Nazaj * & aposL & apos - 76 - Levo * & aposR & apos - 82 - Desno * & aposS & apos - 83 - Hitrost * & aposX & aposL - 88 - Set * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Podprti časi - 0 - 255 (0 do 25,5 sekund) vrednost * 100 milisekund * sp * Ožičenje: desni servo signal - pin 9 * Levi servo signal - pin 10 * * Licenca: To delo je licencirano pod licenco Creative Commons * Attribution-Share Alike 3.0 Unported License. Za * ogled kopije te licence obiščite * https://creativecommons.org/licenses/by-sa/3.0/ * ali pošljite pismo na Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * ZDA. * */// --------------------------------------------- ---------------------------- // PREAMBUL ZAČETKA SERVERSKEGA SERVERJA ARDUINO // Določanje konstant, ki ustrezajo vsakemu ukazu (tudi kodna številka ascii) #define FORWARD 70 // F#definiraj BACKWARD 66 // B#definiraj LEFT 76 // L#definiraj DESNO 82 // R#definiraj SETSPEED 83 // S#definiraj STOP 67 // C#določi SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *Trije kontrolni bajti (ki se uporabljajo za preprečevanje odziva robota na naključne serijske *podatke) trenutno "AAA" */#definiraj checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ZAČETAK ARDUINSKEGA SERVO ROBOTA (SERB) PREAMBULA#vključuje #define LEFTSERVOPIN 10 // Pin levega servomotorja je priključen na#define RIGHTSERVOPIN 9 // Pin desnega servo je priključen naServo leftServo; Servo desnoServo; int leftSpeed = 50; // drži hitrost robotov leftServo // odstotek med 0 in 100int rightSpeed = 100; // drži hitrost robotov desnoServo // odstotek med 0 in 100 // KONEC ARDUINO KONTROLIRANEGA SERVO ROBOTA (SERB) PREAMBULA // ------------------- -------------------------------------------------- ----- // Vse zažene in zaženevoid setup () {Serial.begin (9600); // Zažene serijska vrata serbSetup (); // določa stanje vseh potrebnih // nožic in na vašo skico doda servomotorje} // glavna zanka loopvoid programa () {serbPollSerialPort (); // nenehno gleda v serijska vrata // če obstajajo podatki, ki jih obdeluje} // ------------------------------ ----------------------------------------- // ZAČETAK PROGRAMOV SERIJSKEGA SERVERJA ARDUINO/ * * Obdeluje ukaze, dostavljene na serijska vrata arduino & aposs */void serbPollSerialPort () {int dta; // spremenljivka za shranjevanje serijskega bajta, če (Serial.available ()> = 5) {// če je 5 bajtov v vmesnem pomnilniku (dolžina pf celotne zahteve) dta = Serial.read (); if (dta = checkByte1) {// Preveri prvi bajt za preverjanje dta = Serial.read (); if (dta = checkByte2) {// Preveri drugi preveritveni bajt dta = Serial.read (); if (dta = checkByte3) {// Preveri tretji kontrolni bajt int ukaz = Serial.read (); // Četrti bajt je ukaz int param1 = Serial.read (); // Peti bajt je param1 interpretCommand (ukaz, param1); // pošlje razčlenjeno zahtevo njemu & aposs handler}}}}}/ * * Vzame ukaz in parameter ter jih posreduje robotu */void interpretCommand (ukaz int, int param1) {if (ukaz == FORWARD) {goForward (); zamuda (param1 * 100); goStop ();} // če naprej drugače if (ukaz == BACKWARD) {goBackward (); zamuda (param1 * 100); goStop ();} // če nazaj, če if (ukaz == LEFT) {goLeft (); zamuda (param1 * 100); goStop ();} // če ostane drugače if (ukaz == RIGHT) {goRight (); zamuda (param1 * 100); goStop ();} // če je prav, sicer if (ukaz == SETSPEED) {setSpeed (param1);} // če nastavim hitrost else if (ukaz == STOP) {goStop ();} // če se ustavim, če (command == SETSPEEDLEFT) {setSpeedLeft (param1);} // če nastavimo levo hitrost else if (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // če nastavimo pravo hitrost else {// če neprepoznani ukaz naredimo malo shimmey Pojdi levo(); zamuda (150); Pojdi desno(); zamuda (150); goStop (); }} // ---------------------------------------------- -------------------------- // ZAČETAK ARDUINSKIH SERVO ROBOTSKIH (SERBSKIH) PROGRAMOV/ * * nastavi vaš arduino za naslov vašega SERB-a z uporabo vključene rutine*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // nastavi levi servo signalni pin // na izhodni pinMode (RIGHTSERVOPIN, OUTPUT); // nastavi desni pin servo signala // na izhod leftServo.attach (LEFTSERVOPIN); // pritrdi levi servo desniServo.attach (RIGHTSERVOPIN); // pritrdi desni servo goStop ();}/ * * nastavi hitrost robota med 0- (ustavljeno) in 100- (polna hitrost) * OPOMBA: hitrost ne bo spremenila trenutne hitrosti, morate spremeniti hitrost *, nato pokličite enega metod go, preden pride do sprememb.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // nastavi levo hitrost setSpeedRight (newSpeed); // nastavi desno hitrost}/ * * Nastavi hitrost levega kolesa */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // če je hitrost večja od 100 // naj bo 100 if (newSpeed = 100) {newSpeed = 100;} // če je hitrost večja od 100 // naj bo 100 if (newSpeed <= 0) {newSpeed = 0;} // če je hitrost manjša od 0 make // it 0 rightSpeed = newSpeed * 0,9; // poveča hitrost}/ * * pošlje robota naprej */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * pošlje robota nazaj * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * pošlje robota desno * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * pošlje robota levo */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * ustavi robota */void goStop () {leftServo.write (90); rightServo.write (90);} // KONEC ARDUINO KONTROLIRANIH SERVO ROBOTSKIH (SRBSKIH) RUTIN // ---------------------------- -----------------------------------------------

4. korak: Programska oprema - prenosni računalnik (WebServer)

(Obdelava je odprtokodni programski jezik in okolje, s katerim je zelo enostavno začeti. Za več podrobnosti obiščite Processing) Programska oprema, ki deluje na prenosnem računalniku, je prav tako preprosta. To je precej preprost spletni strežnik (poslušanje zahtev spletnih strani iz spletnega brskalnika), majhen uporabniški vmesnik (za nastavitev) in zmogljivosti za posredovanje ukazov, prejetih s spletnega strežnika, na Arduino. (na oknih)

  • Spodaj prenesite datoteko zip (06-WEBB-Processing Webserver (windows exe).zip)
  • Razpakirajte ga in zaženite datoteko.exe (_WEBB_WebServer_RobotComputer.exe)

Urejanje v obdelavi:

  • Spodaj prenesite datoteko zip (06-WEBB-Processing Webserver (izvorne datoteke).zip)
  • Odpakirajte kjer koli v računalniku.
  • Odprite okolje za obdelavo in odprite (_WEBB_WebServer_RobotComputer.pde)

Testirati:

  • Zaženite program.
  • V polju #1 bo seznam razpoložljivih komunikacijskih vrat v vašem računalniku (kliknite na tisto, s katerim je povezan vaš Arduino. (Vaš robot se bo med povezovanjem računalnika nekajkrat trznil, poleg izbranega pa se bo pojavila modra pika comm port)
  • V polju #2 preverite, ali je vaš Arduino povezan. Kliknite eno od puščic in upajmo, da se bo vaš robot za pol sekunde premaknil v kliknjeni smeri.
  • V polju #3 kliknite gumb "Start", da zaženete spletni strežnik.
  • Odprite spletni brskalnik (na prenosnem računalniku Robot) in obiščite https://127.0.0.1:12345/ControlPage.html (upajmo, da se bo prikazala nadzorna spletna stran z gumbi na njej) -Podrobnosti o uporabi te strani v naslednjem koraku -

Kaj se dogaja:

  • Spletni strežnik posluša vrata 12345 za zahteve http (kaj se pošlje, ko vnesete naslov spletne strani)
  • Obstajata dve vrsti zahtev, na katere se odziva.

1. Posluša "ControlPage.html" in pošlje nadzorno spletno stran 2. Posluša zahteve v obliki "/request? Command = F & param1 = 100" (ti ukazi se razčlenijo in pošljejo v Arduino (ta primer bi bil rezultat v robotu gre za 10 sekund naprej) Dodatek: (Koda za spletni strežnik)

/ * * Arduino krmiljeni spletni povezani robot (WEBB) - spletni strežnik * Za več podrobnosti obiščite: https://www.oomlout.com/serb * * Vedenje: Program posluša zahteve http (spletne strani) v obliki * "/request ?! - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - Vrednost 0 - 255 (0 do 25,5 sekund) * 100 milisekund * * služi tudi brskalniku za nadzorno spletno stran, če zahteva ControlPage.html * * Delovanje: 1. Kliknite na vrata Comm, na katera je priključen vaš Arduino * 2. S testnimi gumbi preverite, ali vaš arduino posluša * (se bo pomaknil v smeri, ki jo kliknete za pol sekunde) * 3. Kliknite Start in vaš spletni strežnik bo poslušajte zahteve * * * Licenca: To delo je licencirano pod atributom Creative Commons * tion-Share Alike 3.0 Neprijavljena licenca. Za * ogled kopije te licence obiščite * https://creativecommons.org/licenses/by-sa/3.0/ * ali pošljite pismo na Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * ZDA. * */uvoz processing.serial. *; // uvozimo serijsko knjižnico za uporabo Serial (za pogovor z Arduinom) import processing.net.*; // uvozimo knjižnico net za uporabo strežnika (za pogovor z internetom)/ * spremenljivke, povezane s serijskimi vrati */int serialPortIndex = -1; // indeks serijskih vrat, ki jih uporabljamo v Serial.list () listString commOptions; // Spremenljivka za shranjevanje Serial.list (), tako da ni potrebe po // poizvedovanju o serijskih vratih vsakič, ko jo želimo znova pregledati (anketa povzroči // skok v arduino servomotorje) Serial serialPort; // Uredi serijska vrata, ki jih je mogoče nasloviti v tej skici/ * Grafične in upodabljajoče se spremenljivke */PFont; // objavi pisavo, zato jo je treba naložiti le enkrat (Arial-72)/ * omrežne spremenljivke */strežnik wServer; // Strežnik, ki obravnava pristanišča za spletne zahteve = 12345; // Vrata, ki jih posluša strežnikintcycleCount = 0; // Šteje, kolikokrat se izvede zanka za risanje (uporablja se za // animacijo "tekočega" besedila)/ * spremenljivke pripomočkov */PImage bg; // Slika ozadja trenutno / WEBB-background.png/ * * Spremenljivke, povezane z gumbi * (gumbi so izvedeni zelo grobo, omejevalna polja so shranjena, na sliki v ozadju pa narisano grafiko in besedilo), tj. premikanje spremenljivk gumbov ne bo premaknilo videza gumbov */gumb comm1; Gumb comm2; Gumb comm3; Gumb comm4; // Gumbi za izbiro pravilnih serijskih vratButton up; Gumb desno; Gumb levo; Gumb navzdol; // Gumbi za smer, da preverijo, ali se robot odzivaButton webServer; // Gumb za zagon spletnega strežnika/ * * nastavi vse */void setup () {frameRate (5); // Nekoliko upočasni skico, da ne bo tako obdavčljiva za sistem bg = loadImage ("WEBB-background.png"); // naloži sliko ozadja (shranjeno v mapi s skicami) velikosti (700, 400); // Nastavi velikost pisave okna skice = loadFont ("ArialMT-72.vlw"); // Naloži pisavo, ki jo bomo uporabili v tej skici commOptions = Serial.list (); // Anketira serijska vrata in dobi seznam razpoložljivih vrat // (to naredi samo enkrat in tako prepreči trzanje robota vsakič, ko se & aposs // serijska vrata opravijo) defineButtons (); // Določa omejevalna polja za vsako ozadje gumbov (bg); // Pobarva sliko ozadja (na tej sliki so vse grafike gumbov)}/ * Skicira glavno zanko */void draw () {if (cycleCount == 0) {//- rutine za risanje klicev drawCommBox (); // Nariše keramike v polje Comm (polje 1) drawTestBox (); // Nariše vse elemente v testnem polju (polje 2) drawWebServerBox (); // Nariše vse elemente v polju WebServer (polje 3)} //- kliče delovne rutine pollWebServer (); // Anketira spletni strežnik, da preveri, ali so po omrežju prišle kakšne zahteve} // ------------------------------ ---------------------------------------------- // Začetek rutine risanja (razdelite samo zato, da je koda prijetnejša za branje)/ * * Rutina posodabljanja posodobitev (izvede se vsak cikel) za elemente v polju za komunikacijo (polje 1) */void drawCommBox () {fill (0, 0, 0); // Polnilo nastavimo na črno textFont (pisava, 15); // Pisavo nastavimo na pravo velikost za (int i = 0; i 0) {running = running + ".";} // število pik temelji na cikluCount if ((cycleCount /1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycCount = 0;} besedilo (teče, 520, 210); } cikelCount ++; // Vsakič, ko se cikelCountCount poveča za eno} // Konec risanja rutin // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Začetek servisne rutine/ * * mousePressed se pokliče vsakič, ko pritisnete miško, to * preveri, ali je miška v katerem koli polju za omejevanje gumbov * in ali je ustrezna rutina imenovana */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Spremeni vrata za komunikacijo pri indeksu 0 v Serial.list () Sicer, če (comm2.pressed ()) {updateSerialPort (1);} // Spremeni vrata za komunikacijo pri indeksu 1 v Serial.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Spremeni vrata comm na indeksu 2 v Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Spremeni vrata za komunikacijo pri indeksu 3 v Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Pošlje ukaz za premik robota naprej za 0,5 sekunde, če ((left.pressed ()) {sendRobotCommand ("L", 5);} / /Pošlje ukaz za premik robota v levo za 0,5 sekunde, če pa (right.pressed ()) {sendRobotCommand ("R", 5);} // Pošlje ukaz za premik robota v desno za 0,5 sekunde, če pa (dol). pritisnjeno ()) {sendRobotCommand ("B", 5);} // Pošlje ukaz za premik robota za 0,5 sekunde nazaj, če (webServer.pressed ()) {startWebServer ();} // Zažene cikel spletnega strežnikaCount = 0; ozadje (bg); // Ponovno pobarva sliko ozadja (ta slika vsebuje vse grafike gumbov) zahtevo in jo posreduje rutini parseRequest (String) *, da odstrani dodatno besedilo. Ta se nato pošlje v rutino interpretRequest (String), da * pokliče ustrezno rutino dejanj (tj. Pošlje navodila robotu).* * Zahteva se posreduje z vnosom naslova in vrat računalnikov v spletni brskalnik * Za lokalni stroj "https://127.0.0.1:12345/request?command=F&param1=100" * * Primer zahteve: * GET/request? ukaz = F & param1 = 100 HTTP/1.1 * Uporabniški agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-ZDA) AppleWebKit/525.19 (KHTML, kot Gecko) * Sprejmi: * // * * Sprejmi-Jezik: en-US, sl * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Gostitelj: 127.0.0.1:12345 * Povezava: Keep-Alive * * Primer odgovora (za obdelano zahtevo) * HTTP/1.1 200 OK * Povezava: zaprta * Content-Type: text/html * * ukaz: F param1: 100 */void pollWebServer () {if (wServer! = null) {// Če je spletni strežnik izvaja zahtevo odjemalca = wServer.available (); // Naložimo naslednjega odjemalca v vrstici // strežnika (ničelno, če ni čakalnih zahtev) if (request! = Null) {// če obstaja zahtevek, ga obdelamo String fullRequest = request.readString (); // Shranimo vsebino zahteve kot niz String ip = request.ip (); // Shranimo naslov IP odjemalcev kot niz String requestString = parseRequest (fullRequest.toUpperCase ()); // Odstranimo vse dodatne // informacije, ki puščajo samo niz zahteve (besedilo po GET) // (preklopi na velika črka, da olajša testiranje niza) if (requestString.indexOf ("REQUEST?")! = -1) { // Preveri, ali ima zahteva "REQUEST?" Niz odgovor = interpretRequest (requestString); // Pošlje zahtevo tolmaču zahtev request.write ("HTTP/1.1 200 OK / nConnection: close / nContent-Type: text/html / n / n" + odgovor); // Pošlje odgovor 200, da pove, da je bila zahteva // obdelana, in niz "odgovor" kot odgovor wServer.disconnect (zahteva); // Odklopi odjemalca} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Če je zahteva za nadzorno spletno stran String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Naloži kontrolno spletno stran iz / data / WEBB-ControlPage.html // (naložen kot niz vrstic) Niz webPage = ""; // Za lažje urejanje je na spletni strani ostalo // prelomi vrstic, zato to za zanke prereže te vrstice (int i = 0; i portIndex) {// če je posredovani portIndex veljaven indeks v Serial.list () // (tj. ni možnosti tri na seznamu dveh) serialPortIndex = portIndex; // nastavimo spremenljivko serialPortIndex na nov indeks serialport // (to se uporablja za prikaz pike poleg aktivnih vrat)} if (serialPortIndex! = -1) {// preverite, ali so vrata izbrana že prej, če (serialPort! = null) {serialPort.stop ();} // če se serijska vrata že uporabljajo, jih ustavite, preden naložite novega serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Ustvarjanje novega serijskega predmeta za komunikacijo z Arduino 9600 Baud}}/ * * Vzame niz zahteve (npr.: "request? Command = F & param1 = 100") in odstrani ukaz * in param1 ter ga posreduje v arduino (tukaj bi bilo treba dodati dodatne parametre ali ukaze, ki niso arduino) */String interpretRequest (String requestString) {String returnValue = "OK"; // Pripravi spremenljivko returnValue String; // Naslednje tri vrstice izvlečejo vrednost po "command =" // (dodatna vrstica je v primeru, da je ukazni parameter na // koncu zahteve in mu ne sledi & 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;} Niz param1String; // Naslednje tri vrstice izvlečejo vrednost za" param1 = "// (dodatna vrstica je v primeru, če je ukazni parameter // na koncu zahteve in mu ne sledi & 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); // Pretvori niz param1 v celo število sendRobotCommand (ukaz, param1); // Pošlje ukaz rutini, ki ga pošlje v Arduino returnValue = "ukaz:" + ukaz + "param1:" + param1; // trenutno samo razčlenjeni ukaz, vendar pošiljanje // kot html, tako da je mogoče vključiti oblikovanje return returnValue;}/ * * Sprejme ukaz (trenutno eno črko) in parameter (en bajt 0-255) in ga pošlje v arduino *, ki posluša in se znova prilagodi * Trenutno podprti ukazi * F - */void sendRobotCommand (ukaz String, int param1) {println ("ukaz:" + ukaz + "čas:" + param1); Niz checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + ukaz); serialPort.write (bajt (param1)); }} // Konec nastavitve/ne tako pogosto imenovane rutine // ----------------------------------- -------------------------------------------------- // Primer gumba in koda RectButton iz primera processing.org z nekaterimi spremembami // večinoma za poenostavitev in odstranitev animacije pri prevračanju // https://processing.org/learning/topics/buttons.html (2008-09-23) gumb Button {int x, y; int širina, višina; Gumb (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; širina = širina; višina = višina; } logični pritisk () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+višina) {return true; } else {return false; }}}

5. korak: Programska oprema - (spletna stran)

Skoraj smo končali, preostane samo še pogovor z vašim robotom. Za pogovor: (prek lokalnega omrežja -v oknih -)

  • Odkrijte lokalni IP naslov prenosnega računalnika. Če želite to narediti, pojdite na "Start / Programs / Accesories / Command Prompt" in ko se odpre terminalsko okno, vnesite "ipconfig". Zapišite "naslov IP" in pojdite v drug računalnik v svojem lokalnem omrežju.
  • Odprite spletni brskalnik, vnesite "https:// (ip robotskega računalnika): 12345/ControlPage.html
  • Kontrolna spletna stran bi se morala naložiti, v polje "Naslov IP" vnesite robotske računalnike ip.
  • Začnite nadzorovati svojega robota.

Za začetek pogovora: (prek interneta) Zdaj, ko deluje lokalno, je do pogovora po internetu le nekaj kratkih korakov.

  • (najtežji korak) Nastavitev posredovanja vrat - vaš računalnik mora poslušati internet in ne le lokalnega omrežja. Če želite to narediti, morate usmerjevalniku povedati, naj določene zahteve posreduje računalniku, ki nadzoruje robota. To je nekoliko zapleteno in daleč presega področje uporabe tega navodila. Če pa obiščete PortForward.com, vam bodo povedali vse, kar morate vedeti o konfiguraciji usmerjevalnika (vrata 12345 morate posredovati v prenosni računalnik)
  • Nato odkrijte svoj internetni IP (obiščite WhatIsMyIP.com)
  • Končno zaženite skype, nastavite videoklic in kdor koli govorite, obiščite "https:// (internetni IP): 12345/ControlPage.html"
  • Vnesite internetni IP v polje »Naslov IP« na nadzorni spletni strani in vaš Web Connected Robot se poganja od daleč.

Korak 6: Končano

No to je to. Upam, da se zabavate z vožnjo svojega robota od daleč. Če imate kakršne koli težave s programsko ali strojno opremo, pustite komentar in poskusil vam bom pomagati. Če bi radi preverili še čednejše projekte, obiščite: oomlout.com