Obsah:

Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku): 6 krokov (s obrázkami)
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku): 6 krokov (s obrázkami)

Video: Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku): 6 krokov (s obrázkami)

Video: Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku): 6 krokov (s obrázkami)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, November
Anonim
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku)
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku)
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku)
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku)
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku)
Vytvorte robota pripojeného k webu (za približne 500 dolárov) (pomocou Arduina a netbooku)

Tento návod vám ukáže, ako si vytvoriť vlastného robota pripojeného k webu (pomocou mikrokontroléra Arduino a počítača Asus eee). Prečo by ste chceli robota prepojeného s webom? Samozrejme hrať sa. Jazdite so svojim robotom z celej miestnosti alebo z celej krajiny iba pomocou programu Skype a webového prehliadača (na riadiaci počítač nie je potrebné nič inštalovať). Potom? Ponorte sa do softvéru a upravte ho, ako sa vám páči, pridajte GPS, aby ste na mape mohli sledovať, kde idete, pridajte teplotné senzory na mapovanie teplotných gradientov vo vašom dome alebo sonarové senzory a pridajte ovládacie prvky toho, čo ste na webe. vodiči môžu a nemôžu naraziť. Vlastnosti:

  • Lacné - (~ 500 dolárov, ak si kúpite všetky diely nové a výrazne lacnejšie, ak sa prehrabete v koši na diely)
  • Ovládanie robota po spustení vyžaduje iba webový prehliadač - (a Skype, ak chcete vidieť, kam idete)
  • Open Source a ľahko prispôsobiteľné - (používa mikrokontrolér Arduino, spracovanie pre webový server a všetok softvér je možné spustiť v systéme Linux (všetok kód je tiež silne komentovaný, aby bolo jednoduché skákať a meniť veci))
  • Modulárny dizajn (nie je to úplne integrovaný systém, ak chcete použiť inú službu videokonferencií bez obáv, alebo ak máte základnú pečiatku a nie Arduino, stačí vložiť malý kúsok kódu a vložiť ho)

Tu je stručné video, ako môjho robota pripojeného cez web vyhnali z kuchyne.

Krok 1: Diely a nástroje

Diely a nástroje
Diely a nástroje

Vyžaduje sa iba niekoľko častí: Robot: Servo robot riadený Arduino - (SERB) (175 dolárov @ oomlout.com) alebo (vytvorte si vlastný)

Robot s otvoreným zdrojovým kódom, ktorý používa ako mozog mikrokontrolér Arduino

(Je možné použiť akúkoľvek platformu s dvojitým servo robotom s arduinom (možnosť 1) (ak objavíte ďalšie možnosti, kontaktujte ma prosím správou) Počítač: Asus eee PC 4G (280 dolárov) (@Najlepší nákup)

Malý lacný prenosný počítač, ktorý je na tento účel ideálny

(Možno použiť ľubovoľný prenosný počítač (alebo stolný počítač, ak chcete spustiť s akordom), ktorý môže používať náčrty spracovania.) Notebook Desk: laserom rezaný akryl (25 dolárov (@ oomlout)) alebo (vytvorte si vlastný krok 3)

Niekoľko ďalších akrylových kúskov, ktoré sú priskrutkované k (SERB), aby mali stôl, na ktorom môže sedieť prenosný počítač

Orechy a bols: (k dispozícii v domácom depe)

  • Skrutka 3 mm x 10 mm (x4)
  • Skrutka 3 mm x 15 mm (x4)
  • Matica 3 mm (x 8)

Krok 2: Rezanie kusov a montáž

Rezanie kusov a montáž
Rezanie kusov a montáž
Rezanie kusov a montáž
Rezanie kusov a montáž
Rezanie kusov a montáž
Rezanie kusov a montáž
Rezanie kusov a montáž
Rezanie kusov a montáž

Existujú tri možnosti získania dielov na stôl pre prenosný počítač. Možnosť rezania 1: (nákup z oomlout.com)

laserom rezané diely stola a potrebný hardvér sú k dispozícii od oomlout za 25 dolárov (tu)

Možnosť 2: (Rezanie na vlastnej laserovej rezačke alebo na serveri Ponoko.com)

  • Stiahnite si súbor nižšie (03-WEBB-Akrylové diely. Cdr alebo 03-WEBB-Akrylové diely (Ponoko P2).eps)
  • Vystrihnite ich z 3 mm (1/8 ") akrylu

Možnosť 3: (Rolovacia píla)

  • Stiahnite si vzor špirálovej píly zdola (03-WEBB-ScrollSaw Pattern (A4).pdf (pre papier veľkosti A4) alebo 03-WEBB-ScrollSaw Pattern (letter).pdf (pre papier veľkosti Letter))
  • Pri tlači dvakrát skontrolujte, či nebol zmenšený (meraním vytlačených pravítok)
  • Prilepte na kúsok 3 mm (1/8 ") akrylu a vystrihnite kúsky.

Zostavenie: Stiahnite si nižšie uvedenú príručku montáže (04-WEBB-Assembly Guide.pdf) a sklopte stôl prenosného počítača.

Krok 3: Softvér - (Arduino)

Softvér - (Arduino)
Softvér - (Arduino)

Pre tých, ktorí sú v Arduine noví, pozrite sa na skvelého sprievodcu Začíname na Arduino.cc Najprv softvér spustený na Arduine. Je to veľmi jednoduchý program, Arduino monitoruje sériový port a hľadá údaje. To, čo hľadá, je konverzácia dlhá 5 bajtov.

  • Bajt 1-3 (Skontrolujte bajty „AAA“)
  • Príkaz Byte 4 (informuje arduina, čo má robiť) (podporované príkazy „F“- dopredu, „B“- dozadu, „L“- vľavo, „R“- vpravo, „S“- rýchlosť, „X“- SetSpeedLeft, „Y“- SetSpeedRight, „C“- zastavenie)
  • Parameter bajt 5 - pre príkazy na presun je to interpretované ako časový interval (parameter * 100 ms) a pre príkazy rýchlosti percento od 0 do 100

Kód je dôkladne okomentovaný a vzhľadom na tento rámec by pridanie ďalších príkazov malo byť jednoduché. Na stiahnutie:

  • Stiahnite si priložený súbor zip. (05-WEBB-Arduino Code.zip)
  • Rozbaľte do adresára Arduino Sketch. (predvolené: Moje dokumenty / Arduino )
  • Otvorte svoje vývojové prostredie arduino a nahrajte ho do svojho Arduina.

Skopírujte a prilepte

  • Skopírujte kód zospodu.
  • Prilepte do vývojového prostredia Arduino.
  • Nahrajte do svojho Arduina.

Príloha: Program Arduino

/ * * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * Bližšie informácie nájdete na: https://www.oomlout.com/serb * * Správanie: Arduino počúva svoj sériový port na príkaz * vo formáte 254, 88, 88, (PRÍKAZ), (ČAS) * Podporované príkazy - & aposF & apos - 70 - Vpred * & aposB & apos - 66 - Späť * & aposL & apos - 76 - Vľavo * & aposR & apos - 82 - Vpravo * & aposS & apos - 83 - Rýchlosť * & aposX & apos - 88 - SetSpeedLe * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Podporované časy - 0 - 255 (0 až 25,5 sekúnd) hodnota * 100 milisekúnd * sp * Zapojenie: pravý servo signál - pin 9 * ľavý servo signál - pin 10 * * licencia: Toto dielo je chránené licenciou Creative Commons * Attribution-Share Alike 3.0 Unported License. Ak si chcete * pozrieť kópiu tejto licencie, navštívte * https://creativecommons.org/licenses/by-sa/3.0/ * alebo pošlite list na adresu Creative Commons, 171 Second * Street, Suite 300, San Francisco, Kalifornia 94105, * USA. * */// --------------------------------------------- ---------------------------- // ZAČIATOK PREAMBULY SÉRIOVÉHO SERVERU ARDUINO // Definovanie konštánt zodpovedajúcich každému príkazu (tiež kódové číslo ascii) #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/ *Tri kontrolné bajty (slúžia na to, aby robot nereagoval na náhodné sériové *údaje) aktuálne „AAA“*/#define checkByte1 65 // „A“#define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ZAČIATOK ARDUINO RIADENÉHO SERVO ROBOTA (SERB) PREAMBLE#include #define LEFTSERVOPIN 10 // Kolík, na ktorý je pripojené ľavé servo,#definovať RIGHTSERVOPIN 9 // Kolík, na ktorý je pripojené pravé servo, Servo leftServo; Servo vpravoServo; int leftSpeed = 50; // drží rýchlosť robotov leftServo // percento medzi 0 a 100int rightSpeed = 100; // drží rýchlosť robotov vpravoServo // percento medzi 0 a 100 // KONIEC ARDUINO OVLÁDANÉHO SERVO ROBOTA (SERB) PREAMBULE // ------------------- ---------------------------------------------------------- ----- // Zistí všetko a beží, vyhnite sa setup () {Serial.begin (9600); // Spustí sériový port serbSetup (); // nastaví stav všetkých potrebných // pinov a pridá do vašej skice servá} // Hlavný program loopvoid loop () {serbPollSerialPort (); // nepretržite hľadá sériový port // ak existujú údaje, ktoré spracováva} // ------------------------------ ----------------------------------------- // ZAČIATOK RUČNÝCH SLUŽIEB ARDUINO/ * * Spracováva príkazy dodávané na sériový port arduino & aposs */void serbPollSerialPort () {int dta; // premenná na uchovanie sériového bajtu, ak (Serial.available ()> = 5) {// ak je vo vyrovnávacej pamäti 5 bajtov (dĺžka pf úplná požiadavka) dta = Serial.read (); if (dta = checkByte1) {// Skontroluje prvý kontrolný bajt dta = Serial.read (); if (dta = checkByte2) {// Skontroluje druhý kontrolný bajt dta = Serial.read (); if (dta = checkByte3) {// Skontroluje tretí kontrolný bajt int príkaz = Serial.read (); // Štvrtý bajt je príkaz int param1 = Serial.read (); // Piaty bajt je param1 interpretCommand (príkaz, param1); // pošle doňho analyzovanú požiadavku & aposs handler}}}}}/ * * Prevezme príkaz a parameter a pošle ich robotovi */void interpretCommand (int príkaz, int param1) {if (príkaz == Vpred) {goForward (); oneskorenie (param1 * 100); goStop ();} // if forward else if (command == BACKWARD) {goBackward (); oneskorenie (param1 * 100); goStop ();} // ak dozadu inak if (príkaz == VLEVO) {goLeft (); oneskorenie (param1 * 100); goStop ();} // ak zostane inak, ak (príkaz == VPRAVO) {goRight (); oneskorenie (param1 * 100); goStop ();} // if right else if (command == SETSPEED) {setSpeed (param1);} // // if setting speed else if (command == STOP) {goStop ();}}} // if if stop else if (príkaz == SETSPEEDLEFT) {setSpeedLeft (param1);} // ak nastavíte ľavú rýchlosť else if (príkaz == SETSPEEDRIGHT) {setSpeedRight (param1);} // // ak nastavíte správnu rýchlosť inak {// ak nerozpoznaný príkaz urobte trochu shimmey goLeft (); oneskorenie (150); Choď vpravo(); oneskorenie (150); goStop (); }} // ---------------------------------------------- -------------------------- // ZAČIATOK ARDUINO RIADENÝCH SERVO ROBOTOV (SERB) RUTINY/ * * nastaví vaše arduino tak, aby oslovilo vášho SERBA pomocou zahrnuté rutiny*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, VÝSTUP); // nastaví ľavý signál signálu servo // na výstupný pinMode (RIGHTSERVOPIN, OUTPUT); // nastaví pravý signálny pin servo // na výstup leftServo.attach (LEFTSERVOPIN); // pripája ľavé servo rightServo.attach (RIGHTSERVOPIN); // pripája pravé servo goStop ();}/ * * nastavuje rýchlosť robota medzi 0- (zastavené) a 100- (plná rýchlosť) * POZNÁMKA: rýchlosť nezmení aktuálnu rýchlosť, musíte zmeniť rýchlosť * potom zavolajte metód go, než nastanú zmeny.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // nastaví ľavú rýchlosť setSpeedRight (newSpeed); // nastavuje správnu rýchlosť}/ * * Nastavuje rýchlosť ľavého kolesa */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // if speed is greater than 100 // make it it 100 if (newSpeed = 100) {newSpeed = 100;} // if speed is greater than 100 // // make it 100 if (newSpeed <= 0) {newSpeed = 0;} // if speed is less than 0 make // it 0 rightSpeed = newSpeed * 0,9; // zmenší rýchlosť na}/ * * pošle robota dopredu */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * pošle robota dozadu * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * pošle robota doprava * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * pošle robota doľava */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * zastaví robota */void goStop () {leftServo.write (90); rightServo.write (90);} // KONEC ARDUINO RIADENÝCH SERVO ROBOTOV (SERBOVÝCH) CESTÁCH // ---------------------------- ------------------------------------------------

Krok 4: Softvér - Robot Laptop (WebServer)

Software - Robot Laptop (WebServer)
Software - Robot Laptop (WebServer)

(Processing je programovací jazyk a prostredie s otvoreným zdrojovým kódom, s ktorým je veľmi jednoduché začať. Bližšie informácie nájdete v časti Processing) Softvér, ktorý beží na prenosnom počítači robota, je tiež celkom jednoduchý. Jedná sa o pomerne základný webový server (počúvajúci žiadosti o webové stránky z webového prehliadača), malé používateľské rozhranie (na jeho nastavenie) a zariadenia na odosielanie príkazov prijatých z webového servera do Arduina. Rýchla inštalácia: (na oknách)

  • Stiahnite si súbor zip nižšie (06-WEBB-Processing Webserver (Windows exe).zip)
  • Rozbaľte ho a spustite súbor.exe (_WEBB_WebServer_RobotComputer.exe)

Úpravy v procese spracovania:

  • Stiahnite si súbor zip nižšie (06-WEBB-Processing Webserver (zdrojové súbory).zip)
  • Rozbaľte kdekoľvek na počítači.
  • Otvorte prostredie Processing a otvorte (_WEBB_WebServer_RobotComputer.pde)

Testovať:

  • Spustite program.
  • V rámčeku č. 1 bude zoznam dostupných komunikačných portov vo vašom počítači (kliknite na ten, ku ktorému je pripojené vaše Arduino. (Váš robot sa pri pripojení počítača niekoľkokrát šklbe a vedľa zvoleného sa zobrazí azúrová bodka) komunikačný port)
  • V poli č. 2 otestujte, či je vaše Arduino pripojené. Kliknite na jednu zo šípok a dúfajme, že sa váš robot bude pol sekundy pohybovať v smere kliknutia.
  • V poli č. 3 spustite webový server kliknutím na tlačidlo „Štart“.
  • Otvorte webový prehliadač (na prenosnom počítači Robot) a navštívte stránku https://127.0.0.1:12345/ControlPage.html (dúfajme, že sa zobrazí kontrolná webová stránka s tlačidlami) -Podrobnosti o tom, ako túto stránku použiť v nasledujúcom kroku -

Čo sa deje:

  • Webový server počúva port 12345 pre požiadavky http (čo sa odošle pri zadaní adresy webovej stránky)
  • Existujú dva typy žiadostí, na ktoré reaguje.

1. Počúva „ControlPage.html“a odošle riadiacu webovú stránku 2. Počúva požiadavky vo formáte „/request? Command = F & param1 = 100“(tieto príkazy sú analyzované a odoslané do Arduina (tento príklad by mal za následok v robote, ktorý ide dopredu 10 sekúnd) Príloha: (Kód pre webový server)

/ * * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Bližšie informácie nájdete na: https://www.oomlout.com/serb * * Správanie: Program počúva požiadavky http (webové stránky) vo forme * "/žiadosť ? command = F & param1 = 100 "a potom ich pošle do * Arduina * Podporované príkazy - & aposF & apos - 70 - Vpred * & aposB & apos - 66 - Späť * & aposL & apos - 76 - Vľavo * & aposR & apos - 82 - Vpravo * & aposS & apos - 83 - Rýchlosť * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Zastavenie * hodnota param1 & aposs - 0 - 255 (0 až 25,5 sekundy) * 100 milisekúnd * * slúži aj na ovládanie webovej stránky v prehliadači, ak požaduje ControlPage.html * * * Obsluha: 1. Kliknite na komunikačný port, ku ktorému je pripojené vaše Arduino * 2. Pomocou testovacích tlačidiel zistíte, či váš arduino počúva * (bude sa pohybovať v smere, na ktorý ste klikli pol sekundy) * 3. Kliknite na tlačidlo Štart a váš webový server sa počúvajte žiadosti * * * Licencia: Toto dielo je chránené licenciou Creative Commons * Attribu tion-Share Alike 3.0 Unported License. Ak si chcete * pozrieť kópiu tejto licencie, navštívte * https://creativecommons.org/licenses/by-sa/3.0/ * alebo pošlite list na adresu Creative Commons, 171 Second * Street, Suite 300, San Francisco, Kalifornia 94105, * USA. * */spracovanie importu.sériové. *; // importujte sériovú knižnicu, aby ste mohli použiť sériový (na rozhovor s Arduinom) import processing.net.*; // import knižnice siete na použitie so serverom (na rozhovor s internetom)/ * Premenné súvisiace so sériovým portom */int serialPortIndex = -1; // index sériového portu, ktorý používame v zozname Serial.list () listString commOptions; // Premenná na uloženie Serial.list (), takže nie je potrebné dotazovať // sériové porty zakaždým, keď ho chceme opakovať (polling spôsobí // skok v servo arduino) Serial serialPort; // Nastaví v tomto náčrte adresovateľnosť sériového portu/ * Premenné súvisiace s grafikou a vykresľovaním */Písmo PFont; // robí písmo verejným, takže sa musí načítať iba raz (Arial-72)/ * premenné súvisiace so sieťou */server wServer; // Server, ktorý spracováva webové požiadavkyintport = 12345; // Port, na ktorý server počúva, aby cycleCount = 0; // Spočítava, koľkokrát sa kresliaca slučka spustí (používa sa na // animáciu „bežiaceho“textu)/ * Pomôcky obslužného programu */PImage bg; // Aktuálny obrázok na pozadí / WEBB-background.png/ * * Premenné súvisiace s tlačidlami * (tlačidlá sú implementované veľmi zhruba, ohraničujúce polia sú uložené a grafika a text sú * nakreslené na obrázku na pozadí), tj. presúvaním premenných tlačidiel sa nepohybuje vzhľad tlačidiel */Button comm1; Tlačidlo comm2; Tlačidlo comm3; Tlačidlo comm4; // Tlačidlá na výber správneho sériového portu Tlačidlo hore; Tlačidlo vpravo; Tlačidlo vľavo; Tlačidlo nadol; // Smerové tlačidlá na otestovanie, či robot reagujeButton webServer; // Tlačidlo na spustenie webServeru/ * * nastaví všetko ostatné */void setup () {frameRate (5); // Trochu spomalí náčrt, aby nebol tak zaťažujúci systém bg = loadImage ("WEBB-background.png"); // Načíta obrázok na pozadí (uložený v priečinku skici) (700, 400); // Nastaví veľkosť okna náčrtu font = loadFont ("ArialMT-72.vlw"); // Načíta písmo, ktoré použijeme, prostredníctvom tohto náčrtu commOptions = Serial.list (); // Dotazovanie sériových portov a získanie zoznamu dostupných portov // (robí to iba raz, aby sa robot netrhal vždy, keď sa pýta na sériový port) defineButtons (); // Definuje ohraničujúce polia pre každé pozadie tlačidla (bg); // Maľuje obrázok na pozadí (tento obrázok má všetku tlačidlovú grafiku)}/ * Načrtáva hlavnú slučku */void draw () {if (cycleCount == 0) {//- rutiny vyvolávania drawCommBox (); // Nakreslí emelmenty do komunikačného poľa (rámček 1) drawTestBox (); // Nakreslí všetky prvky do testovacieho poľa (rámček 2) drawWebServerBox (); // Nakreslí všetky prvky v poli WebServer Box (rámček 3)} //- zavolajte pracovné rutiny pollWebServer (); // Anketa webového servera, aby sa zistilo, či prišli nejaké požiadavky prostredníctvom siete} // ------------------------------ ---------------------------------------------- // Začiatok rutiny kreslenia (rozdelené, aby bol kód lepšie čitateľný)/ * * rutina aktualizácie kreslenia (spustená v každom cykle) pre položky v komunikačnom poli (pole 1) */void drawCommBox () {fill (0, 0, 0); // Nastaviť výplň na čierny textFont (písmo, 15); // Nastavte písmo na správnu veľkosť (int i = 0; i 0) {running = running + ".";} // počet bodov je založený na cycleCount if ((cycleCount /1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} text (running, 520, 210); } cycleCount ++; // Zakaždým sa cycleCount zvýši o jednu} // Rutiny konca kreslenia // ------------------------------- ------------------------------ // ------------------ ------------------------------------------ // // Spustenie servisných rutín/ * * mousePressed sa volá pri každom stlačení myši * skontroluje, či sa myš nachádza v niektorom z ohraničujúcich políčok tlačidiel * a či je vhodná rutina, sa nazýva */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Zmeny komunikačného portu na indexe 0 v Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Zmeny komunikačného portu na indexe 1 v sériovom čísle.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Zmeny komunikačného portu na indexe 2 v Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Zmeny komunikačného portu v indexe 3 v Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Odošle príkaz na posunutie robota dopredu o 0,5 sekundy inak, ak (left.pressed ()) {sendRobotCommand ("L", 5);} / /Pošle príkaz na posunutie robota doľava na 0,5 sekundy inak, ak (right.pressed ()) {sendRobotCommand ("R", 5);} // Pošle príkaz na pohyb robota doprava na 0,5 sekundy, ak (dole. press ()) {sendRobotCommand ("B", 5);} // Odošle príkaz na posunutie robota o 0,5 sekundy dozadu, ak (webServer.pressed ()) {startWebServer ();} // Spustí cyklus webServer = 0; pozadie (bg); // Prekreslí obrázok na pozadí (tento obrázok obsahuje všetku tlačidlovú grafiku) draw ();}/ * * Volá sa po spustení a skontroluje server, aby zistil, či existujú čakajúce pripojenia * Ak existuje čakajúce pripojenie, natiahne ho. požiadavku odošle a odošle ju do rutiny parseRequest (String) * na odstránenie extra textu. Ten sa potom odošle do rutiny interpretRequest (String), aby * zavolala príslušnú akčnú rutinu (tj. Poslala pokyny robotovi).* * Požiadavka sa zadáva zadaním adresy a portu počítača do webového prehliadača * Pre lokálny počítač „https://127.0.0.1:12345/request?command=F&param1=100“* * Príklad žiadosti: * ZÍSKAŤ/požiadavka? command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) * Accept: * // * * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive * * Example Reply (pre spracovanú požiadavku) * HTTP/1,1 200 OK * Pripojenie: zavrieť * Typ obsahu: text/html * * príkaz: F param1: 100 */void pollWebServer () {if (wServer! = null) {// If the webServer je spustená požiadavka klienta = wServer.available (); // Načítanie ďalšieho klienta do radu na // server (null, ak nečakajú žiadne požiadavky) if (request! = Null) {// ak prebieha požiadavkový proces String fullRequest = request.readString (); // Uložiť obsah požiadavky ako reťazec Reťazec ip = request.ip (); // Uložte adresu IP klientov ako reťazec Reťazec requestString = parseRequest (fullRequest.toUpperCase ()); // Odstráňte všetky nadbytočné // informácie a ponechajte iba reťazec požiadavky (text po GET) // (posunie sa na veľké písmená, aby bolo testovanie reťazcov jednoduchšie) if (requestString.indexOf ("REQUEST?")! = -1) { // Skontroluje, či má žiadosť „REQUEST?“Odpoveď reťazca = interpretRequest (requestString); // Odošle požiadavku na prekladač požiadaviek request.write ("HTTP/1,1 200 OK / nPripojenie: zatvorenie / nContent-type: text/html / n / n" + odpoveď); // Pošle odpoveď 200, aby oznámil, že požiadavka bola // spracovaná a reťazec „odpoveď“ako odpoveď wServer.disconnect (požiadavka); // Odpojí klienta} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Ak je požiadavka na riadiacu webovú stránku String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Načíta riadiacu webovú stránku z / data / WEBB-ControlPage.html // (načítaná ako pole riadkov) String webPage = ""; // Aby bola úprava jednoduchšia, na webovej stránke boli ponechané // riadkové zlomy, takže pre slučky striopsujú tieto riadky (int i = 0; i portIndex) {// ak odovzdaný portIndex je platný index v Serial.list () // (tj. nie možnosť tri v zozname dvoch) serialPortIndex = portIndex; // nastavte premennú serialPortIndex na nový index serialport // (slúži na zobrazenie bodky vedľa aktívneho portu)} if (serialPortIndex! = -1) {// skontrolujte, či bol port vybratý niekedy predtým, ak (serialPort! = null) {serialPort.stop ();}} // ak sa už používa sériový port, zastavte ho pred načítaním nového serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Vytvorte nový sériový objekt na komunikáciu s Arduino 9600 Baud}}/ * * Zoberie reťazec požiadavky (napr.: „request? Command = F & param1 = 100“) a odstráni príkaz * a param1 a pošle ho arduino (tu by sa vykonalo pridanie ďalších parametrov alebo príkazov, ktoré nie sú arduino) */String interpretRequest (String requestString) {String returnValue = "OK"; // Príprava premennej returnValue Reťazec príkazu; // Nasledujúce tri riadky extrahujú hodnotu za "príkaz =" // (ďalší riadok je v prípade, ak je parameter príkazu na // konci požiadavky a za ním nie je znak & if (requestString.indexOf ("COMMAND ="))! = -1) {príkaz = requestString.substring (requestString.indexOf ("COMMAND =") + "COMMAND =". Length ());} else {command = "Z";} if (command.indexOf (" & ")! = -1) {príkaz = príkaz.substring (0, command.indexOf (" & "));} else {príkaz = príkaz;} Reťazec param1String; // Nasledujúce tri riadky extrahujú hodnotu za" param1 = "// (ďalší riadok je v prípade, ak je parameter príkazu na // konci požiadavky a za ním nie je & 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); // Premení reťazec param1 na integer sendRobotCommand (príkaz, param1); // Odošle príkaz do rutiny, ktorá ho odošle do Arduino returnValue = "príkaz:" + príkaz + "param1:" + param1; // v súčasnosti iba analyzovaný príkaz, ale odoslanie // ako html, takže je možné zahrnúť aj formátovanie return returnValue;}/ * * Prevezme príkaz (aktuálne jedno písmeno) a parameter (jeden bajt 0-255) a odošle ho do arduino *, ktoré počúva a číta * Aktuálne podporované príkazy * F - */void sendRobotCommand (príkaz String, int param1) {println ("príkaz:" + príkaz + "čas:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (príkaz checkString +); serialPort.write (byte (param1)); }} // Koniec nastavenia/nie veľmi bežne nazývané rutiny // ----------------------------------- ---------------------------------------------------------- // Tlačidlo príkladu a kód RectButton z príkladu processing.org s niektorými zmenami // vykonané väčšinou kvôli zjednodušeniu a odstráneniu animácie pri prevrátení // https://processing.org/learning/topics/buttons.html (2008-09-23) trieda Button {int x, y; vnútorná šírka, výška; Button (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; width = iwidth; výška = výška; } booleanPress () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+výška) {return true; } else {return false; }}}

Krok 5: Software - (webová stránka)

Softvér - (webová stránka)
Softvér - (webová stránka)
Softvér - (webová stránka)
Softvér - (webová stránka)
Softvér - (webová stránka)
Softvér - (webová stránka)

Sme takmer hotoví, všetko, čo zostáva, je hovoriť s vašim robotom. Ak chcete hovoriť: (cez miestnu sieť -na oknách -)

  • Zistite miestnu adresu IP prenosného počítača. Ak to chcete urobiť, prejdite na „Štart / Programy / Príslušenstvo / Príkazový riadok“a keď sa otvorí okno terminálu, zadajte „ipconfig“. Zapíšte si „IP adresu“a prejdite na iný počítač v miestnej sieti.
  • Otvorte webový prehliadač a zadajte „https:// (adresa IP robotického počítača): 12345/ControlPage.html
  • Mala by sa načítať kontrolná webová stránka, do poľa „IP adresa“zadajte IP adresu robotického počítača.
  • Začnite ovládať svojho robota.

Hovoriť: (cez internet) Teraz, keď to funguješ na miestnej úrovni, je už len pár krokov od vás, aby ste hovorili cez internet.

  • (najťažší krok) Nastavte presmerovanie portov - počítač musí počúvať internet, nie iba miestnu sieť. Aby ste to urobili, musíte svojmu smerovaču povedať, aby postúpil určité požiadavky počítaču riadiacemu robota. Toto je trochu zložité a ďaleko presahuje rámec tohto pokynu. Ak však navštívite PortForward.com, poskytnú vám všetko, čo potrebujete vedieť o konfigurácii smerovača (port 12345 musíte presmerovať na prenosný počítač s robotom)
  • Ďalej zistite svoju internetovú adresu IP (navštívte stránku WhatIsMyIP.com)
  • Nakoniec spustite videohovor cez skype a oslovte kohokoľvek, s kým hovoríte, „https:// (internetová adresa IP): 12345/ControlPage.html“
  • Zadajte internetovú IP do poľa „IP adresa“na riadiacej webovej stránke a váš robot s webovým pripojením bude jazdiť z diaľky.

Krok 6: Hotovo

Hotovo
Hotovo

Tak to je všetko. Dúfam, že sa zabavíte pri šoférovaní svojho robota zďaleka. Ak máte akékoľvek problémy so softvérom alebo hardvérom, neváhajte zanechať komentár a ja sa vám pokúsim pomôcť. Ak by ste sa chceli pozrieť na úhľadnejšie projekty, navštívte: oomlout.com

Odporúča: