Izveidojiet tīmeklī savienotu robotu (par aptuveni 500 USD) (izmantojot Arduino un Netbook): 6 soļi (ar attēliem)
Izveidojiet tīmeklī savienotu robotu (par aptuveni 500 USD) (izmantojot Arduino un Netbook): 6 soļi (ar attēliem)
Anonim

Šī pamācība parādīs, kā izveidot savu tīmekļa savienoto robotu (izmantojot Arduino mikrokontrolleri un Asus eee datoru). Kāpēc jūs vēlaties Web savienotu robotu? Protams, lai spēlētu. Vadiet savu robotu no visas istabas vai visas valsts, izmantojot tikai Skype un tīmekļa pārlūkprogrammu (nekas nav jāinstalē kontrolējošajā datorā). Pēc tam? Iedziļinieties programmatūrā un pielāgojiet to, kā vēlaties, pievienojiet GPS, lai kartē varētu skatīties, kur braucat, pievienojiet temperatūras sensorus, lai kartētu savas mājas temperatūras gradientus, vai hidrolokatoru sensorus, lai pievienotu tīmekļa vietnes vadīklas autovadītāji var un nevar uzbraukt. Iespējas:

  • Lēti - (~ 500 USD, ja iegādājaties visas detaļas jaunas un ievērojami lētākas, ja rakties savā rezerves tvertnē)
  • Kad robota vadība ir sākta, ir nepieciešama tikai tīmekļa pārlūkprogramma - (un Skype, ja vēlaties redzēt, kur braucat)
  • Atvērts avots un viegli pielāgojams - (izmanto Arduino mikrokontrolleri, apstrādi tīmekļa serverim un visu programmatūru var palaist operētājsistēmā Linux (viss kods ir arī ļoti komentēts, lai atvieglotu ieslēgšanos un lietu maiņu))
  • Modulārais dizains (nav pilnībā integrēta sistēma, ja vēlaties izmantot citu videokonferenču pakalpojumu, neuztraucieties, vai ja jums ir pamata zīmogs, nevis Arduino, tikai neliels koda gabals un ievietojiet to)

Šeit ir ātrs video ar manu Web Connected Robot, kas tiek izdzīts no virtuves.

1. darbība: detaļas un rīki

Nepieciešamas tikai dažas detaļas: Robots: Arduino kontrolēts servo robots - (SERB) (175 USD @ oomlout.com) vai (izveidojiet pats)

Atvērtā koda robots, kas izmanto Arduino mikrokontrolleri kā smadzenes

(var izmantot jebkuru dubultā servo robotu platformu ar arduino (1. iespēja) (lūdzu, ziņojiet man, ja atklājat citas iespējas) Dators: Asus eee PC 4G (280 USD) (@Best Buy)

Neliels lēts klēpjdators, kas ir ideāli piemērots šim nolūkam

(var izmantot jebkuru klēpjdatoru (vai galddatoru, ja vēlaties darboties ar akordu), kas spēj palaist Apstrādes skices).

Daži papildu akrila gabali, kas pieskrūvējas (SERB), lai tas būtu galds klēpjdatoram

Rieksti un uzgaļi: (pieejams mājas depo)

  • 3 mm x 10 mm skrūve (x4)
  • 3 mm x 15 mm skrūve (x4)
  • 3 mm uzgrieznis (x8)

2. solis: gabalu griešana un montāža

Ir trīs iespējas, kā iegūt gabalus klēpjdatora galdam. 1. griešanas iespēja: (iegāde no oomlout.com)

lāzera griezuma galda detaļas un nepieciešamo aparatūru no oomlout var iegādāties par 25 USD (šeit)

2. iespēja: (griešana uz sava lāzera griezēja vai Ponoko.com)

  • Lejupielādējiet zemāk esošo failu (03-WEBB-akrila daļas. Cdr vai 03-WEBB-akrila daļas (Ponoko P2). Eps)
  • Izgrieziet tos no 3 mm (1/8 collu) akrila

3. iespēja: (ritināšanas zāģis)

  • Lejupielādējiet ritināšanas zāģa modeli no apakšas (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 formāta papīram) vai 03-WEBB-ScrollSaw Pattern (burts).pdf (burtu izmēra papīram))
  • Vēlreiz pārbaudiet, vai drukāšanas laikā tas nav palielināts (izmērot izdrukātos lineālus)
  • Līmējiet 3 mm (1/8 ") akrila gabalu un izgrieziet gabalus.

Salikšana: lejupielādējiet montāžas rokasgrāmatu (04-WEBB-Assembly Guide.pdf) zemāk un salieciet klēpjdatora galdu.

3. darbība: programmatūra - (Arduino)

Tiem, kas ir jauni Arduino, iepazīstieties ar lielisko darba sākšanas rokasgrāmatu vietnē Arduino.cc Pirmkārt, programmatūra, kas darbojas Arduino. Tā ir ļoti vienkārša programma, ko Arduino veic, lai uzraudzītu tā seriālo portu datiem. Tas, ko tā meklē, ir 5 baitu gara saruna.

  • 1-3 baiti (pārbaudiet baitus "AAA")
  • 4. baita komanda (norāda arduino, kas jādara) (Atbalstītās komandas “F” - uz priekšu, “B” - atpakaļ, “L” - pa kreisi, “R” - pa labi, “S” - ātrums, “X” - SetSpeedLeft, “Y” - SetSpeedRight, “C” - Stop)
  • 5. baita parametrs - pārvietošanas komandām tas tiek interpretēts kā laika intervāls (parametrs * 100 ms), bet ātruma komandām - procentos no 0 līdz 100

Kods tiek rūpīgi komentēts, un, ņemot vērā šo sistēmu, papildu komandu pievienošanai vajadzētu būt vienkāršai. Lai lejupielādētu:

  • Lejupielādējiet pievienoto zip failu. (05-WEBB-Arduino Code.zip)
  • Izsaiņojiet savā Arduino Sketch direktorijā. (noklusējums: Mani dokumenti / Arduino)
  • Atveriet savu arduino attīstības vidi un augšupielādējiet savā Arduino.

Lai kopētu un ielīmētu

  • Nokopējiet kodu no apakšas.
  • Ielīmējiet Arduino attīstības vidē.
  • Augšupielādējiet savā Arduino.

Pielikums: Arduino programma

/ * * Arduino kontrolēts tīmeklī savienots robots (WEBB) - seriālais saimnieks * Lai iegūtu sīkāku informāciju, apmeklējiet: https://www.oomlout.com/serb * * Uzvedība: Arduino klausās savu seriālo portu komandai * formātā 254, 88, 88, (COMMAND), (TIME) * Atbalstītās komandas - & aposF & apos - 70 - Uz priekšu * & aposB & apos - 66 - Atpakaļ * & aposL & apos - 76 - Kreisais * & aposR & apos - 82 - Pa labi * & aposS & apos - 83 - Ātrums * & aposX & aposL - 88 pēdu komplekts * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Atbalstītie laiki - 0 - 255 (no 0 līdz 25,5 sekundēm) vērtība * 100 milisekundes * sp * Elektroinstalācija: labais servo signāls - pin 9 * kreisais servo signāls - pin 10 * * Licence: Šis darbs ir licencēts saskaņā ar Creative Commons * Attribution-Share Alike 3.0 Unported License. Lai * apskatītu šīs licences kopiju, apmeklējiet vietni * https://creativecommons.org/licenses/by-sa/3.0/ * vai nosūtiet vēstuli uz Creative Commons, 171 Second * Street, Suite 300, Sanfrancisko, Kalifornija 94105, * ASV. * */// --------------------------------------------- ---------------------------- // ARDUINO SERIAL SERVER PREAMBLE START // Katrai komandai atbilstošo konstantu noteikšana (arī ascii koda numurs) #define FORWARD 70 // F#define BACKWARD 66 // B#define LEFT 76 // L#define RIGHT 82 // R#define SETSPEED 83 // S#define STOP 67 // C#define SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *Trīs pārbaudes baiti (tiek izmantoti, lai robots nereaģētu uz nejaušiem sērijveida *datiem) pašlaik ir "AAA" */#define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ARDUINO KONTROLĒTA SERVO ROBOTA (SERB) PREAMBULAS SĀKUMS#ietver #define LEFTSERVOPIN 10 // Piespraude, ar kuru kreisais servo ir savienots ar#define RIGHTSERVOPIN 9 // Piespraude, ar ko pieslēgts labais servoServo leftServo; Servo pa labiServo; int leftSpeed = 50; // tur robotu ātrumu pa kreisiServo // procents no 0 līdz 100int rightSpeed = 100; // tur robotu ātrumu pareizi Servo // procents no 0 līdz 100 // ARDUINO KONTROLĒTA SERVO ROBOTA (SERB) PREAMBULA BEIGAS // ------------------- -------------------------------------------------- ----- // Sagatavo visu un darbojasvoid setup () {Serial.begin (9600); // Sāk seriālo portu serbSetup (); // nosaka visu vajadzīgo // piespraužu stāvokli un pievieno jūsu skicei servus} // Galvenā programma loopvoid loop () {serbPollSerialPort (); // nepārtraukti meklē seriālo portu // ja ir dati, tas to apstrādā} // ------------------------------ ---------------------------------------- // ARDUINO SERIAL SERVER ROUTINES START/ * * Apstrādā komandas, kas piegādātas arduino & aposs seriālajam portam */void serbPollSerialPort () {int dta; // mainīgais, lai turētu sērijas baitu, ja (Serial.available ()> = 5) {// ja buferī ir 5 baiti (garums pf pēc pilna pieprasījuma) dta = Serial.read (); if (dta = checkByte1) {// Pārbauda pirmo pārbaudes baitu dta = Serial.read (); if (dta = checkByte2) {// Pārbauda otro pārbaudes baitu dta = Serial.read (); if (dta = checkByte3) {// Pārbauda trešo baitu int komanda = Serial.read (); // Ceturtais baits ir komanda int param1 = Serial.read (); // Piektais baits ir param1 interpretCommand (komanda, param1); // nosūta tam parsēto pieprasījumu & aposs handler}}}}}/ * * Paņem komandu un parametru un nodod to robotam */void interpretCommand (int komanda, int param1) {if (command == FORWARD) {goForward (); kavēšanās (param1 * 100); goStop ();} // ja uz priekšu vēl if (komanda == ATPAKAĻ) {goBackward (); kavēšanās (param1 * 100); goStop ();} // ja atpaliek, ja (komanda == LEFT) {goLeft (); kavēšanās (param1 * 100); goStop ();} // ja atstāts citādi, ja (komanda == PAREIZI) {goRight (); kavēšanās (param1 * 100); goStop ();} // ja ir tiesības citādi, ja (komanda == SETSPEED) {setSpeed (param1);} // ja iestatāt citu ātrumu, ja (komanda == STOP) {goStop ();} // ja apstājas citādi, ja (komanda == SETSPEEDLEFT) {setSpeedLeft (param1);} // ja kreisais ātrums tiek iestatīts citādi, ja (komanda == SETSPEEDRIGHT) {setSpeedRight (param1);} // ja iestatāt pareizo ātrumu citādi {// ja neatpazīta komanda, dariet nedaudz shimmey ej pa kreisi(); kavēšanās (150); dodies pa labi(); kavēšanās (150); goStop (); }} // ---------------------------------------------- -------------------------- // ARDUINO KONTROLĒTA SERVO ROBOT (SERB) ROUTINES START/ * * uzstāda jūsu arduino, lai adresētu jūsu SERB, izmantojot iekļautās rutīnas*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // iestata kreiso servo signāla tapu // uz izejas pinMode (RIGHTSERVOPIN, OUTPUT); // iestata labo servo signāla tapu // lai izvadītu leftServo.attach (LEFTSERVOPIN); // pievieno kreiso servo rightServo.attach (RIGHTSERVOPIN); // piestiprina labo servo goStop ();}/ * * iestata robota ātrumu starp 0- (apturēts) un 100- (pilns ātrums) * PIEZĪME: ātrums nemainīs pašreizējo ātrumu, jums jāmaina ātrums *, tad zvaniet vienam no go metodēm, pirms notiek izmaiņas.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // nosaka kreiso ātrumu setSpeedRight (newSpeed); // nosaka pareizo ātrumu}/ * * Iestata kreisā riteņa ātrumu */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // ja ātrums ir lielāks par 100 // padariet to 100 ja (newSpeed = 100) {newSpeed = 100;} // ja ātrums ir lielāks par 100 // padariet to par 100, ja (newSpeed <= 0) {newSpeed = 0;} // ja ātrums ir mazāks par 0 make // tas 0 rightSpeed = newSpeed * 0,9; // mēra ātrumu līdz}/ * * nosūta robotu uz priekšu */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * nosūta robotu atpakaļ * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * nosūta robotu pa labi * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * nosūta robotu pa kreisi */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * aptur robotu */void goStop () {leftServo.write (90); rightServo.write (90);} // ARDUINO KONTROLĒTO SERVO ROBOTU (SERBU) ROUTINES BEIGAS // ---------------------------- -----------------------------------------------

4. solis: programmatūra - klēpjdators robots (WebServer)

(Apstrāde ir atvērtā pirmkoda programmēšanas valoda un vide, ar kuru ir ļoti viegli sākt. Lai iegūtu sīkāku informāciju, apmeklējiet Apstrāde) Programmatūra, kas darbojas klēpjdatora robotā, ir arī pavisam vienkārša. Tas ir diezgan elementārs tīmekļa serveris (tīmekļa lapu pieprasījumu klausīšanās no tīmekļa pārlūkprogrammas), neliels lietotāja interfeiss (lai to iestatītu) un iespējas no tīmekļa servera saņemto komandu nodošanai Arduino. Lai ātri instalētu: (uz logiem)

  • Lejupielādējiet zemāk esošo zip failu (06-WEBB apstrādes tīmekļa serveris (Windows exe).zip)
  • Izsaiņojiet to un palaidiet.exe failu (_WEBB_WebServer_RobotComputer.exe)

Lai rediģētu apstrādes laikā:

  • Lejupielādējiet zemāk esošo zip failu (06-WEBB apstrādes tīmekļa serveris (avota faili).zip)
  • Izsaiņojiet datoru jebkurā vietā.
  • Atveriet apstrādes vidi un atveriet (_WEBB_WebServer_RobotComputer.pde)

Testēt:

  • Palaidiet programmu.
  • 1. lodziņā tiks parādīts jūsu datorā pieejamo kopu portu saraksts (noklikšķiniet uz tā, ar kuru ir pievienots Arduino. (Datoram pievienojoties, jūsu robots raustīsies dažas reizes, un blakus izvēlētajam parādīsies ciāna punkts) kom osta)
  • 2. lodziņā pārbaudiet, vai jūsu Arduino ir savienots. Noklikšķiniet uz vienas no bultiņām, un cerams, ka jūsu robots pus sekundi pārvietosies noklikšķinātā virzienā.
  • 3. lodziņā noklikšķiniet uz pogas "Sākt", lai palaistu tīmekļa serveri.
  • Atveriet tīmekļa pārlūkprogrammu (klēpjdatorā robots) un apmeklējiet vietni https://127.0.0.1:12345/ControlPage.html (cerams, ka parādīsies vadības tīmekļa lapa ar pogām) -Sīkāka informācija par šīs lapas izmantošanu nākamajā darbībā -

Kas notiek:

  • Tīmekļa serveris klausās portu 12345 http pieprasījumiem (kas tiek nosūtīts, ierakstot tīmekļa lapas adresi)
  • Ir divu veidu pieprasījumi, uz kuriem tā atbild.

1. Tā klausās "ControlPage.html" un nosūtīs kontroles tīmekļa vietni. 2. Tā klausās veidlapas "/request? Command = F & param1 = 100" pieprasījumus (šīs komandas tiek parsētas un nosūtītas uz Arduino (šis piemērs radītu robots iet uz priekšu uz 10 sekundēm) Pielikums: (WebServer kods)

/ * * Arduino kontrolēts tīmekļa savienots robots (WEBB) - tīmekļa serveris * Lai iegūtu sīkāku informāciju, apmeklējiet: https://www.oomlout.com/serb * * Uzvedība: programma uzklausa http (tīmekļa vietnes) pieprasījumus formā * "/request ? command = F & param1 = 100 "un pēc tam nodod tās * Arduino * atbalstītajām komandām - & aposF & apos - 70 - uz priekšu * & aposB & apos - 66 - atpakaļ * un aposL & apos - 76 - pa kreisi * & aposR & apos - 82 - pa labi * & aposS & apos - 83 - Speed * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (no 0 līdz 25,5 sekundēm) vērtība * 100 milisekundes * * arī apkalpo kontroles tīmekļa lapu pārlūkprogrammā, ja tiek prasīts ievadīt ControlPage.html * * Darbība: 1. Noklikšķiniet uz Comm port, ar kuru jūsu Arduino ir savienots *. klausieties pieprasījumus * * * Licence: Šis darbs ir licencēts saskaņā ar Creative Commons * atribūtu cija-Kopīgot līdzīgi 3.0 Neportēta licence. Lai * apskatītu šīs licences kopiju, apmeklējiet vietni * https://creativecommons.org/licenses/by-sa/3.0/ * vai nosūtiet vēstuli uz Creative Commons, 171 Second * Street, Suite 300, Sanfrancisko, Kalifornija 94105, * ASV. * */importa apstrāde.sērija. *; // importējiet sērijveida bibliotēku, lai izmantotu Serial (sarunai ar Arduino) import processing.net.*; // importējiet tīkla bibliotēku, lai izmantotu serveri (sarunai ar internetu)/ * Serial Port Related Variables */int serialPortIndex = -1; // tā seriālā porta indekss, kuru mēs izmantojam Serial.list () listString commOptions; // Mainīgais, lai saglabātu Serial.list (), lai nebūtu nepieciešams aptaujāt // sērijas portus katru reizi, kad mēs to vēlamies atkārtot (aptauja izraisa // lēcienu arduino servos) Serial serialPort; // Padara seriālo portu adresējamu visā šajā skicē/ * Grafiskie un renderēšanas saistītie mainīgie */PFont fonts; // padara fontu publisku, tāpēc tas jāielādē tikai vienreiz (Arial-72)/ * Ar tīklu saistītie mainīgie */Server wServer; // Serveris, kas apstrādā tīmekļa pieprasījumusint port = 12345; // Ports, ko serveris klausās, cikla skaitlis = 0; // Skaita, cik reizes izpilda zīmēšanas cilpa (izmanto, lai // animētu "tekošo" tekstu)/ * Lietderības mainīgie */PImage bg; // Fona attēls pašlaik / WEBB-background.png/ * * Ar pogām saistītie mainīgie * (pogas tiek ieviestas ļoti aptuveni, ierobežojošās kastes tiek saglabātas un uz fona attēla ir uzzīmēts * grafisks teksts), ti. pārvietojot pogu mainīgos, netiks pārvietots pogu izskats */Button comm1; Poga comm2; Poga comm3; Poga comm4; // Pogas pareizā seriālā porta izvēleiButton up; Poga pa labi; Poga pa kreisi; Poga uz leju; // Virziena pogas, lai pārbaudītu, vai robots reaģēButton webServer; // Poga, lai palaistu webServer/ * *, nosaka visu */void setup () {frameRate (5); // nedaudz palēnina skici, tāpēc tas nav tik apgrūtinošs sistēmai bg = loadImage ("WEBB-background.png"); // Ielādē fona attēlu (saglabāts skiču mapē) izmērs (700, 400); // Iestata skices loga lielumu font = loadFont ("ArialMT-72.vlw"); // ielādē fontu, kuru izmantosim, izmantojot šo skici. CommOptions = Serial.list (); // Aptauj seriālos portus un iegūst pieejamo portu sarakstu // (to darot tikai vienu reizi, neļauj robotam raustīties ikreiz, kad & aposs // sērijas ports tiek aptaujāts) defineButtons (); // Nosaka ierobežojošos lodziņus katram pogas fonam (bg); // Krāso fona attēlu (šim attēlam ir visa pogu grafika)}/ * Skices galvenā cilpa */void draw () {if (cycleCount == 0) {//- call draw rutines drawCommBox (); // Zīmē paaugstinājumus Comm lodziņā (1. aile) drawTestBox (); // Zīmē visus Test Box (2. lodziņš) elementus drawWebServerBox (); // Zīmē visus WebServer lodziņa elementus (3. lodziņš)} //- izsauc darba kārtību pollWebServer (); // Aptauj tīmekļa serveri, lai noskaidrotu, vai caur tīklu ir saņemti kādi pieprasījumi} // ------------------------------ ---------------------------------------------- // Sākums zīmēt rutīnas (sadalīt tikai tāpēc, lai kods būtu labāk lasāms)/ * * Zīmēšanas atjaunināšanas rutīna (tiek izpildīta katru ciklu) vienumiem, kas atrodas koplietošanas lodziņā (1. aile) */void drawCommBox () {fill (0, 0, 0); // Iestatiet aizpildījumu uz melnu tekstuFonts (fonts, 15); // Iestatiet fontu pareizajā izmērā (int i = 0; i 0) {running = running + ".";} // punktu skaits ir balstīts uz cycCount if ((cycleCount /1)> 1) { darbojas = darbojas + ".";} ja ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} teksts (darbojas, 520, 210); } cycleCount ++; // Katru reizi ciklāCount tiek palielināts par vienu} // Zīmēšanas beigu kārtība // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Pakalpojumu rutīnas sākums/ * * mousePressed tiek izsaukts ikreiz, kad tiek nospiesta pele, * tas pārbauda, vai pele atrodas kādā no pogu ierobežojošajiem lodziņiem * un vai tā ir atbilstošā rutīna, ko sauc par */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Izmaiņas Comm portā pie indeksa 0 Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Izmaiņas Comm portā 1. sērijas indeksā.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Izmaiņas Comm portā 2. indeksā Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Izmaiņas Comm portā 3. indeksā Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Nosūta komandu, lai pārvietotu robotu uz priekšu par 0,5 sekundes, ja (pa kreisi.piespiests ()) {sendRobotCommand ("L", 5);} / /Nosūta komandu, lai pārvietotu robotu pa kreisi uz 0,5 sekundēm, ja (pa labi.piespiests ()) {sendRobotCommand ("R", 5);} // Nosūta komandu, lai robotu pārvietotu pa labi uz 0,5 sekundēm, ja (uz leju). nospiests ()) {sendRobotCommand ("B", 5);} // Nosūta komandu, lai robotu pārvietotu atpakaļ 0,5 sekundes, ja (webServer.pressed ()) {startWebServer ();} // Sāk webServer cycleCount = 0; fons (bg); // Pārkrāso fona attēlu (šim attēlam ir visa pogu grafika) draw ();}/ * * Izsaukts pēc izpildes, tas pārbauda serveri, vai nav gaidīšanas savienojumu * vai ir gaidīšanas savienojums, ko tas izvelk pieprasījumu un nodod to parseRequest (String) * rutīnai, lai noņemtu papildu tekstu. Pēc tam tas tiek nosūtīts uz interpretRequest (String) rutīnu, lai * izsauktu atbilstošo darbības rutīnu (ti, nosūtītu instrukcijas robotam).* * Pieprasījums tiek nodots, tīmekļa pārlūkprogrammā ievadot datora adresi un portu. * Vietējai mašīnai "https://127.0.0.1:12345/request?command=F&param1=100" * * Pieprasījuma piemērs: * GET/request? command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; lv) AppleWebKit/525.19 (KHTML, piemēram, Gecko) * Pieņemt: * // * * Pieņemt-Valoda: lv-ASV, lv * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Savienojums: Keep-Alive * * Atbildes piemērs (* HTTP/1.1 200 OK * Savienojums: aizvērt * Content-Type: text/html * * komanda: F param1: 100 */void pollWebServer () {if (wServer! = null) {// Ja webServer darbojas klienta pieprasījums = wServer.available (); // ielādēt nākamo klientu rindā // serverī (null, ja neviens pieprasījums negaida) if (request! = Null) {// ja ir pieprasījuma process, tas String fullRequest = request.readString (); // Saglabāt pieprasījuma saturu kā virkni String ip = request.ip (); // Saglabājiet klientu IP adresi kā virkni String requestString = parseRequest (fullRequest.toUpperCase ()); // Noņemiet visu papildu // informāciju, atstājot tikai pieprasījuma virkni (teksts pēc GET) // (pāriet uz lielajiem burtiem, lai atvieglotu virkņu pārbaudi), ja (requestString.indexOf ("REQUEST?")! = -1) { // Pārbauda, vai pieprasījumā ir "REQUEST?" String atbilde = interpretRequest (requestString); // Nosūta pieprasījumu pieprasījuma tulkam request.write ("HTTP/1.1 200 OK / nSavienojums: aizvērt / nSaturs-tips: teksts/html / n / n" + atbilde); // nosūta atbildei 200, lai teiktu, ka pieprasījums ir apstrādāts, un "atbildes" virkni kā atbildi wServer.disconnect (pieprasījums); // Atvieno klientu} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Ja pieprasījums attiecas uz vadības tīmekļa lapu String webPageArray = loadStrings ("WEBB -ControlPage.html"); // ielādē vadības tīmekļa lapu no / data / WEBB-ControlPage.html // (ielādēts kā rindu masīvs) String webPage = ""; // Lai atvieglotu rediģēšanu, tīmekļa lapai ir atstāti // rindu pārtraukumi, tāpēc cilpai šīs rindas tiek pārtrauktas (int i = 0; i portIndex) {// ja nodotais portIndex ir derīgs indekss Serial.list () // (ti, nevis trešais variants divu sarakstā) serialPortIndex = portIndex; // iestatiet mainīgo serialPortIndex uz jauno serialport indeksu // (tas tiek izmantots, lai parādītu punktu blakus aktīvajam portam)} if (serialPortIndex! = -1) {// pārbaudiet, vai iepriekš ir izvēlēts ports, ja (serialPort! = null) {serialPort.stop ();} // ja seriālais ports jau tiek izmantots, pārtrauciet to, pirms ielādējat jaunu serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Izveidojiet jaunu sērijas objektu, lai sazinātos ar Arduino 9600 Baud}}/ * * Izņem pieprasījuma virkni (piemēram: "request? Command = F & param1 = 100") un noņems komandu * un param1 un nodos to arduino (šeit tiktu pievienoti papildu parametri vai ne arduino komandas) */String interpretRequest (String requestString) {String returnValue = "OK"; // Sagatavo returnValue mainīgo String komanda; // Nākamās trīs rindas iegūst vērtību pēc "command =" // (papildu rindiņa ir gadījumā, ja komandas parametrs atrodas pieprasījuma // beigās un tam neseko & 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 (" & "));}} cits {command = command;} String param1String; // Nākamās trīs rindas iegūst vērtību pēc" param1 = // (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); // Pārvērš param1 virkni par vesels skaitlis sendRobotCommand (komanda, param1); // Nosūta komandu rutīnai, kas to nosūta Arduino returnValue = "komandai:" + komanda + "param1:" + param1; // šobrīd tikai parsētā komanda, bet nosūtot // kā html, lai formatējumu varētu iekļaut, atgriežas returnValue;}/ * * Paņem komandu (pašlaik viens burts) un parametru (viens baits 0-255) un nosūta to arduino *, kas klausās un reasts * Pašlaik atbalstītās komandas * F - */void sendRobotCommand (String komanda, int param1) {println ("komanda:" + komanda + "laiks:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + komanda); serialPort.write (baits (param1)); }} // Iestatīšanas beigas/ne pārāk bieži sauktās rutīnas // ----------------------------------- -------------------------------------------------- // Pogas piemērs un RectButton kods no processing.org piemērs ar dažām izmaiņām // galvenokārt veikti, lai vienkāršotu un noņemtu apgāšanās animāciju // https://processing.org/learning/topics/buttons.html (2008-09-23) klase Poga {int x, y; int platums, augstums; Poga (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; platums = iwidth; augstums = augstums; } Būla vērtība nospiesta () {if (overRect ()) {return true; } else {return false;}} Būla overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+augstums) {return true; } else {return false; }}}

5. darbība: programmatūra - (tīmekļa vietne)

Mēs esam gandrīz pabeiguši visu, kas palicis, ir runāt ar jūsu robotu. Lai sāktu runāt: (vietējā tīklā -logos)

  • Atklājiet klēpjdatora vietējo IP adresi. Lai to izdarītu, dodieties uz "Start / Programs / Accesories / Command Prompt" un, kad atveras termināļa logs, ierakstiet "ipconfig". Pierakstiet “IP adrese” un dodieties uz citu vietējā tīkla datoru.
  • Atveriet tīmekļa pārlūkprogrammu, ierakstiet "https:// (robota datora ip): 12345/ControlPage.html
  • Vadības tīmekļa lapai vajadzētu ielādēt, lodziņā "IP adrese" ierakstiet robotu datorus ip.
  • Sāciet kontrolēt savu robotu.

Lai sāktu runāt: (internetā) Tagad, kad tas darbojas lokāli, tā runāšana internetā ir tikai dažu soļu attālumā.

  • (visgrūtākais solis) Iestatiet portu pāradresāciju - jūsu datoram ir jāklausās internetā, nevis tikai vietējā tīklā. Lai to izdarītu, jums jāpasaka maršrutētājam, lai tas nosūta noteiktus pieprasījumus datoram, kas kontrolē robotu. Tas ir nedaudz sarežģīti un tālu pārsniedz šīs pamācības darbības jomu. Tomēr, apmeklējot vietni PortForward.com, viņi jums sniegs visu, kas jums jāzina par maršrutētāja konfigurēšanu (jums ir jāpārsūta ports 12345 uz jūsu klēpjdatora robotu)
  • Pēc tam atklājiet savu interneta IP (apmeklējiet vietni WhatIsMyIP.com)
  • Visbeidzot, aktivizējiet skype videozvanu un saņemiet ikvienu, ar kuru runājat, lai apmeklētu vietni "https:// (interneta IP): 12345/ControlPage.html"
  • Vadības tīmekļa lapas lodziņā "IP adrese" ierakstiet interneta IP, un jūsu tīmekļa savienotais robots tiek vadīts no tālienes.

6. darbība: pabeigta

Nu tas tā. Es ceru, ka jums ir jautri vadīt savu robotu no tālienes. Ja jums ir kādas problēmas ar programmatūru vai aparatūru, nekautrējieties atstāt komentāru, un es centīšos jums palīdzēt. Ja vēlaties pārbaudīt vairāk veiklu projektu, mēģiniet apmeklēt: oomlout.com

Ieteicams: