Turinys:
- 1 žingsnis: dalys ir įrankiai
- 2 žingsnis: gabalų pjaustymas ir surinkimas
- 3 žingsnis: programinė įranga - („Arduino“)
- 4 veiksmas: programinė įranga - nešiojamasis robotas („WebServer“)
- 5 veiksmas: programinė įranga - (tinklalapis)
- 6 žingsnis: Baigta
Video: Sukurkite žiniatinklio prijungtą robotą (už maždaug 500 USD) (naudodami „Arduino“ir „Netbook“): 6 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:50
Ši instrukcija parodys, kaip sukurti savo žiniatinklio prijungtą robotą (naudojant „Arduino“mikrovaldiklį ir „Asus eee PC“). Kodėl norėtumėte prisijungti prie interneto? Žinoma, žaisti. Vairuokite robotą iš viso kambario ar šalies, naudodami tik „Skype“ir žiniatinklio naršyklę (nieko nereikia įdiegti valdančiame kompiuteryje). Po to? Pasinerkite į programinę įrangą ir pritaikykite ją, kaip jums patinka, pridėkite GPS, kad galėtumėte žiūrėti, kur važiuojate, žemėlapyje, pridėkite temperatūros jutiklius, kad suplanuotumėte savo namų temperatūros gradientus, arba sonaro jutiklius, kad pridėtumėte žiniatinklio valdiklius vairuotojai gali ir negali susidurti. Funkcijos:
- Nebrangu - (~ 500 USD, jei perkate visas dalis naujas ir žymiai pigiau, jei kasatės savo dalių dėžėje)
- Pradėjus veikti robotui valdyti reikia tik žiniatinklio naršyklės - (ir „Skype“, jei norite pamatyti, kur važiuojate)
- Atviro kodo ir lengvai pritaikomas - (naudoja „Arduino“mikrovaldiklį, apdorojimą žiniatinklio serveriui ir visą programinę įrangą galima paleisti „Linux“(visas kodas taip pat labai komentuojamas, kad būtų lengviau pereiti ir keisti dalykus))
- Modulinis dizainas (nėra visiškai integruota sistema, jei norite nerimauti, jei norite naudoti kitą vaizdo konferencijų paslaugą, arba jei turite paprastą antspaudą, o ne „Arduino“, tik nedidelį kodo gabalėlį ir įdėkite jį)
Štai trumpas vaizdo įrašas, kaip mano „Web Connected Robot“išvaromas iš virtuvės.
1 žingsnis: dalys ir įrankiai
Reikia tik kelių dalių: Robotas: „Arduino“valdomas servo robotas - (SERB) (175 USD @ oomlout.com) arba (pasidaryk pats)
Atviro kodo robotas, kurio smegenys naudoja „Arduino“mikrovaldiklį
(galima naudoti bet kokią dvigubą servo robotų platformą su arduino (1 parinktis) (praneškite man, jei atrasite kitų variantų) Kompiuteris: „Asus eee PC 4G“(280 USD) (@Best Buy)
Mažas nebrangus nešiojamas kompiuteris, kuris puikiai tinka šiam tikslui
(galima naudoti bet kurį nešiojamąjį kompiuterį (arba stalinį kompiuterį, jei norite paleisti akordą), galintį paleisti apdorojimo eskizus) Nešiojamojo kompiuterio stalas: lazeriu supjaustytas akrilas (25 USD (@ oomlout)) arba (sukurkite savo 3 veiksmą)
Keletas papildomų akrilo detalių, kurios prisukamos prie (SERB), kad būtų stalas nešiojamam kompiuteriui
Riešutai ir riešutai: (galima įsigyti namų sandėlyje)
- 3 mm x 10 mm varžtas (x4)
- 3 mm x 15 mm varžtas (x4)
- 3 mm veržlė (x8)
2 žingsnis: gabalų pjaustymas ir surinkimas
Yra trys galimybės gauti nešiojamojo kompiuterio stalo dalių. 1 pjovimo variantas: (perkant iš oomlout.com)
lazeriu supjaustytas stalo detales ir reikalingą aparatūrą galima įsigyti iš „oomlout“už 25 USD (čia)
2 variantas: (pjaustymas savo lazeriniu pjaustytuvu arba „Ponoko.com“)
- Atsisiųskite žemiau esantį failą (03-WEBB-akrilo dalys. Cdr arba 03-WEBB-akrilo dalys („Ponoko P2“. Eps)
- Iškirpkite juos iš 3 mm (1/8 colio) akrilo
3 variantas: (slinkties pjūklas)
- Atsisiųskite ritininio pjūklo modelį iš apačios (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 formato popieriui) arba 03-WEBB-ScrollSaw Pattern (raidė).pdf (Letter dydžio popieriui))
- Dar kartą patikrinkite, ar spausdinant nebuvo padidintas mastelis (matuojant atspausdintas liniuotes)
- Klijuokite prie 3 mm (1/8 colio) akrilo gabalo ir išpjaukite gabalus.
Surinkimas: atsisiųskite surinkimo vadovą (04-WEBB-Assembly Guide.pdf) ir sudėkite nešiojamojo kompiuterio stalą.
3 žingsnis: programinė įranga - („Arduino“)
Naujiems „Arduino“naudotojams patikrinkite puikų darbo pradžios vadovą „Arduino.cc“. Pirmiausia išleiskite „Arduino“veikiančią programinę įrangą. Tai labai paprasta programa, kurią „Arduino“stebi duomenų serijiniam prievadui. Tai, ko jis ieško, yra 5 baitų ilgio pokalbis.
- 1–3 baitai (patikrinkite baitus „AAA“)
- 4 baitų komanda (nurodo arduino, ką daryti) (Palaikomos komandos „F“- pirmyn, „B“- atgal, „L“- kairė, „R“- dešinė, „S“- greitis, „X“- „SetSpeedLeft“, „Y“- „SetSpeedRight“, „C“- „Stop“)
- 5 baitų parametras - perkėlimo komandoms tai interpretuojama kaip laiko intervalas (parametras * 100 ms), o greičio komandoms - procentas nuo 0 iki 100
Kodas yra kruopščiai komentuojamas ir atsižvelgiant į šią sistemą, papildomų komandų pridėjimas turėtų būti lengvas. Norėdami atsisiųsti:
- Atsisiųskite pridėtą ZIP failą. (05-WEBB-„Arduino Code.zip“)
- Išpakuokite savo „Arduino Sketch“katalogą. (numatytasis: Mano dokumentai / Arduino)
- Atidarykite savo arduino kūrimo aplinką ir įkelkite į „Arduino“.
Norėdami nukopijuoti ir įklijuoti
- Nukopijuokite kodą iš apačios.
- Įklijuokite į „Arduino“kūrimo aplinką.
- Įkelkite į „Arduino“.
Priedas: „Arduino“programa
/ * * „Arduino“valdomas žiniatinklio prijungtas robotas (WEBB) - nuoseklusis priegloba * Norėdami gauti daugiau informacijos, apsilankykite: https://www.oomlout.com/serb * * Elgsena: „Arduino“klauso savo nuoseklaus prievado, kad gautų komandą * formatu 254, 88, 88, (COMMAND), (TIME) * Palaikomos komandos - & aposF & apos - 70 - Pirmyn * ir ap B & apos - 66 - Atgal * ir aposL & apos - 76 - Kairė * ir apR * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Palaikomas laikas - 0 - 255 (nuo 0 iki 25,5 sekundžių) vertė * 100 milisekundžių * sp * Laidai: dešinysis servo signalas - kaištis 9 * kairysis servo signalas - 10 kaištis * * Licencija: Šis darbas yra licencijuotas pagal „Creative Commons * Attribution-Share Alike 3.0 Unported License“. Norėdami * peržiūrėti šios licencijos kopiją, apsilankykite * https://creativecommons.org/licenses/by-sa/3.0/ * arba atsiųskite laišką „Creative Commons“, 171 Second * Street, Suite 300, San Francisco, California 94105, * JAV. * */// --------------------------------------------- ---------------------------- // ARDUINO SERIAL SERVER PREAMBLE START // Nustatant kiekvieną komandą atitinkančias konstantas (taip pat ascii kodo numerį) #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/ *Trys patikrinimo baitai (naudojami, kad robotas neatsakytų į atsitiktinius serijinius *duomenis) šiuo metu yra „AAA“*/#define checkByte1 65 // „A“#define checkByte2 65 // "A "#define checkByte3 65 // //" A "// -------------------------------------- ------------------------------------ // ARDUINO KONTROLIUOJAMO SERVO ROBOTO (SERBO) PRADA# #define LEFTSERVOPIN 10 // Kairysis servo kaištis prijungtas prie#define RIGHTSERVOPIN 9 // Dešiniojo servo kaištis prijungtas prieServo leftServo; Servo dešinėServo; int leftSpeed = 50; // laiko robotų greitį leftServo // procentas tarp 0 ir 100int rightSpeed = 100; // laiko robotų greitį teisingai -------------------------------------------------- ----- // Viską paleidžia ir pradeda vykdyti // Paleidžia serijinį prievadą serbSetup (); // nustato visų būtinų // kaiščių būseną ir prideda servo eskizui} // Pagrindinė programa loopvoid loop () {serbPollSerialPort (); // nuolat žiūri į nuoseklųjį prievadą // jei yra duomenų, jis juos apdoroja} // ------------------------------ ---------------------------------------- // ARDUINO SERIALINIO TARNYBO ĮVADŲ PRADŽIA/ * * Apdoroja komandas, pateiktas į arduino & aposs nuoseklųjį prievadą */void serbPollSerialPort () {int dta; // kintamasis laikyti serijos baitą, jei (Serial.available ()> = 5) {// jei buferyje yra 5 baitai (ilgis pf visos užklausos) dta = Serial.read (); if (dta = checkByte1) {// Pirmojo patikrinimo baito patikrinimai dta = Serial.read (); if (dta = checkByte2) {// Antro patikrinimo baito patikrinimai dta = Serial.read (); if (dta = checkByte3) {// Tikrina trečią patikrinimo baitą int komanda = Serial.read (); // Ketvirtas baitas yra komanda int param1 = Serial.read (); // Penktasis baitas yra param1 interpretCommand (komanda, param1); // siunčia jai išanalizuotą užklausą & aposs handler}}}}}/ * * Paima komandą ir parametrą ir perduoda robotui */void interpretCommand (int komanda, int param1) {if (command == FORWARD) {goForward (); uždelsimas (param1 * 100); goStop ();} // jei pirmyn kitaip if (komanda == ATGAL) {goBackward (); uždelsimas (param1 * 100); goStop ();} // jei atgal atgal, jei (komanda == LEFT) {goLeft (); uždelsimas (param1 * 100); goStop ();} // jei liko kitaip if (komanda == TEISINGA) {goRight (); uždelsimas (param1 * 100); goStop ();} // jei teisus kitaip, jei (komanda == SETSPEED) {setSpeed (param1);} // jei nustatote greitį kitaip, jei (komanda == STOP) {goStop ();} // jei sustabdysite kitaip, jei (komanda == SETSPEEDLEFT) {setSpeedLeft (param1);} // jei nustatote kairįjį greitį kitaip, jei (komanda == SETSPEEDRIGHT) {setSpeedRight (param1);} // jei nustatote teisingą greitį kitaip {// jei neatpažinta komanda, atlikite šiek tiek klaidos eik į kairę(); vėlavimas (150); eik į dešinę(); vėlavimas (150); goStop (); }} // ---------------------------------------------- -------------------------- // ARDUINO KONTROLIUOJAMO SERVO ROBOTO (SERBO) ROUTINES PRADŽIA/ * * nustato jūsų arduino, kad adresuotų jūsų serbą naudojant įtrauktos rutinos*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // nustato kairįjį servo signalo kaištį // į išvesties pinMode (RIGHTSERVOPIN, OUTPUT); // nustato dešinį servo signalo kaištį // išvesti leftServo.attach (LEFTSERVOPIN); // prideda kairįjį servo dešinįjįServo.attach (RIGHTSERVOPIN); // pridedamas dešinysis servo goStop ();}/ * * nustato roboto greitį nuo 0- (sustabdytas) iki 100- (visu greičiu) * PASTABA: greitis nepakeis dabartinio greičio, turite pakeisti greitį *, tada paskambinkite iš eigos metodų prieš įvykstant pakeitimams.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // nustato kairįjį greitį setSpeedRight (newSpeed); // nustato teisingą greitį}/ * * Nustato kairiojo rato greitį */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // jei greitis didesnis nei 100 // padarykite 100 if (newSpeed = 100) {newSpeed = 100;} // jei greitis didesnis nei 100 // padarykite jį 100, jei (newSpeed <= 0) {newSpeed = 0;} // jei greitis mažesnis nei 0 make // it 0 rightSpeed = newSpeed * 0,9; // padidina greitį}/ * * siunčia robotą į priekį */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * siunčia robotą atgal * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * siunčia robotui į dešinę * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * siunčia robotą į kairę */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * sustabdo robotą */void goStop () {leftServo.write (90); rightServo.write (90);} // ARDUINO VALDOMO SERVO ROBOTO (SERBO) PASKIRTIES PABAIGA // ---------------------------- -----------------------------------------------
4 veiksmas: programinė įranga - nešiojamasis robotas („WebServer“)
(Apdorojimas yra atviro kodo programavimo kalba ir aplinka, su kuria labai paprasta pradėti. Daugiau informacijos rasite Apdorojimas) Programinė įranga, kuri veikia nešiojamajame robote, taip pat yra gana paprasta. Tai gana elementarus žiniatinklio serveris (tinklalapio užklausų klausymasis iš žiniatinklio naršyklės), nedidelė vartotojo sąsaja (norint ją nustatyti) ir įrenginiai, skirti komandoms, gautoms iš žiniatinklio serverio, perduoti „Arduino“. Norėdami greitai įdiegti: (ant langų)
- Atsisiųskite žemiau esantį ZIP failą (06-WEBB apdorojančio tinklalapio serveris („Windows exe“).zip)
- Išpakuokite jį ir paleiskite.exe failą (_WEBB_WebServer_RobotComputer.exe)
Redaguoti apdorojant:
- Atsisiųskite žemiau esantį ZIP failą (06-WEBB apdorojantis tinklalapis (šaltinio failai).zip)
- Išpakuokite bet kurią kompiuterio vietą.
- Atidarykite apdorojimo aplinką ir atidarykite (_WEBB_WebServer_RobotComputer.pde)
Tikrinti:
- Paleiskite programą.
- 1 langelyje bus jūsų kompiuteryje esančių bendrųjų prievadų sąrašas (spustelėkite tą, prie kurio prijungtas „Arduino“. (Kai kompiuteris prisijungs, jūsų robotas keletą kartų trūkčioja, o šalia pasirinkto bus rodomas žalsvai mėlynas taškas) kom uostas)
- 2 langelyje patikrinkite, ar jūsų „Arduino“yra prijungtas. Spustelėkite vieną iš rodyklių ir tikimės, kad jūsų robotas pusę sekundės judės spustelėta kryptimi.
- 3 langelyje spustelėkite mygtuką „Pradėti“, kad paleistumėte žiniatinklio serverį.
- Atidarykite žiniatinklio naršyklę (nešiojamame robotų kompiuteryje) ir apsilankykite https://127.0.0.1:12345/ControlPage.html (tikiuosi, kad atsiras valdymo tinklalapis su mygtukais) -Išsami informacija, kaip naudoti šį puslapį kitame veiksme -
Kas vyksta:
- Žiniatinklio serveris klauso 12345 prievado, skirto http užklausoms (kas siunčiama įvedus tinklalapio adresą)
- Yra du prašymų tipai, į kuriuos ji reaguoja.
1. Jis klausosi „ControlPage.html“ir atsiųs kontrolinį tinklalapį. 2. Klauso formos „/request? Command = F & param1 = 100“formos užklausų (šios komandos yra išanalizuotos ir siunčiamos į „Arduino“(šis pavyzdys robotas eina pirmyn 10 sekundžių) Priedas: („WebServer“kodas)
/ * * „Arduino“valdomas žiniatinklio prijungtas robotas (WEBB) - tinklalapio serveris * Norėdami gauti daugiau informacijos, apsilankykite: https://www.oomlout.com/serb * * Elgsena: Programa klauso http (tinklalapio) užklausų formos * "/užklausa ? command = F & param1 = 100 "ir perduoda juos * Arduino * palaikomoms komandoms - & aposF & apos - 70 - Persiųsti * & aposB & apos - 66 - atgal * ir apLL & apos - 76 - kairėn * & aposR & apos - 82 - dešinėn - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (nuo 0 iki 25,5 sekundžių) reikšmė * 100 milisekundžių * * taip pat aptarnauja valdymo tinklalapį naršyklei, jei prašoma ControlPage.html * * Veikimas: 1. Spustelėkite „Comm“prievadą, prie kurio „Arduino“yra prijungtas * 2. Naudokite testavimo mygtukus, kad pamatytumėte, ar jūsų arduino klauso * (judės spustelėta kryptimi pusę sekundės) * 3. Spustelėkite Pradėti ir jūsų žiniatinklio serveris klausykitės užklausų * * * Licencija: Šis darbas yra licencijuotas pagal „Creative Commons“* atributą Cion-Share Alike 3.0 Neportuota licencija. Norėdami * peržiūrėti šios licencijos kopiją, apsilankykite * https://creativecommons.org/licenses/by-sa/3.0/ * arba atsiųskite laišką „Creative Commons“, 171 Second * Street, Suite 300, San Francisco, California 94105, * JAV. * */importuoti apdorojimą. serija. *; // importuokite serijinę biblioteką, kad galėtumėte naudoti „Serial“(kalbėtis su „Arduino“) import processing.net.*; // importuokite tinklo biblioteką, kad galėtumėte naudoti serverį (kalbėdami su internetu)/ * Su serijos prievadu susiję kintamieji */int serialPortIndex = -1; // serijinio prievado indeksas, kurį naudojame serial.list () listString commOptions; // Kintamasis saugoti Serial.list (), kad nereikėtų apklausti // nuosekliųjų prievadų kiekvieną kartą, kai norime jį atnaujinti (apklausa sukelia // šuolį į arduino servos) Serial serialPort; // Padaro nuoseklųjį prievadą adresuotiną visame eskize/ * Grafiniai ir atvaizdavimo kintamieji */PFont šriftas; // paverčia šriftą viešu, todėl jį reikia įkelti tik vieną kartą (Arial-72)/ * Su tinklu susiję kintamieji */Serveris wServer; // Serveris, kuris tvarko žiniatinklio užklausasint port = 12345; // Prievadas, kurio klausosi serveris, ciklo skaičius = 0; // Skaičiuoja, kiek kartų vykdoma piešimo kilpa (naudojama „paleisti“veikiančiam tekstui)/ * Naudingųjų kintamųjų */PImage bg; // Fono paveikslėlis šiuo metu / WEBB-background.png/ * * Su mygtukais susiję kintamieji * (mygtukai įgyvendinami labai apytiksliai, apribojimo langeliai saugomi, o grafinis ir tekstas * nubrėžti ant fono paveikslėlio), t. judantys mygtukų kintamieji nejudins mygtukų išvaizdos */Button comm1; Mygtukas comm2; Mygtukas comm3; Mygtukas comm4; // Mygtukai tinkamam nuosekliajam prievadui pasirinktiButton up; Mygtukas dešinėje; Mygtukas kairėje; Mygtukas žemyn; // Krypties mygtukai, skirti patikrinti, ar robotas reaguojaButton webServer; // Mygtukas paleisti webServer/ * * nustato viską */void setup () {frameRate (5); // Šiek tiek sulėtina eskizą, todėl tai nėra toks apmokestinimas sistemai bg = loadImage ("WEBB-background.png"); // Įkeliamas fono paveikslėlis (saugomas eskizų aplanke) dydis (700, 400); // Nustato eskizo lango dydį font = loadFont ("ArialMT-72.vlw"); // Įkelia šriftą, kurį naudosime per šį eskizą commOptions = Serial.list (); // Apklausia serijinius prievadus ir gauna galimų prievadų sąrašą // (tai daroma tik vieną kartą, kad robotas netrukdytų kiekvieną kartą, kai & aposs // serijinis prievadas yra apklaustas) defineButtons (); // Apibrėžia kiekvieno mygtuko fono ribojimo langelius (bg); // Nudažo fono paveikslėlį (šiame paveikslėlyje yra visa mygtukų grafika)}/ * Eskizai pagrindinė kilpa */void draw () {if (cycleCount == 0) {//- call draw rutinos drawCommBox (); // Piešia pakėlimus į Comm langelį (1 langelis) drawTestBox (); // Nubrėžia visus bandymų langelio elementus (2 langelis) drawWebServerBox (); // Piešia visus elementus „WebServer Box“(3 langelis)} //- iškviesti darbo tvarką pollWebServer (); // Apklausia žiniatinklio serverį, norėdami sužinoti, ar per tinklą buvo gauta užklausų} // ------------------------------ ---------------------------------------------- // Pradžia braižymo rutinos (padalijamos tik tam, kad būtų patogiau skaityti kodą)/ * * Piešimo atnaujinimo tvarka (vykdoma kiekvieną ciklą) elementams, esantiems komunikacijos laukelyje (1 langelis) */void drawCommBox () {fill (0, 0, 0); // Nustatykite užpildymą į juodą tekstąFont (šriftas, 15); // Nustatykite tinkamą šriftą (int i = 0; i 0) {running = running + ".";} // taškų skaičius pagrįstas cikluCount if ((cycleCount /1)> 1) { run = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} tekstas (veikia, 520, 210); } cycleCount ++; // Kiekvieną kartą ciklo metu skaičius padidinamas vienu} // Lygiosios rutinos pabaiga // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- Paslaugų tvarkos pradžia/ * * mousePressed vadinamas kiekvieną kartą paspaudus pelę, taip * patikrinama, ar pelė yra bet kuriame mygtuko ribojimo laukelyje * ir ar tai yra tinkama tvarka, vadinama */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // „Comm“prievado pakeitimai Serial.list () indekse 0, jei yra (comm2.pressed ()) {updateSerialPort (1);} // „Comm“prievado pakeitimai serijos 1 indekse.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Komandos prievado pakeitimai Serial.list () indekso 2 indekse if if (comm4.pressed ()) {updateSerialPort (3);} // „Serial.list“() indekso 3 indekso komunikacijos prievado pakeitimai else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Siunčia komandą perkelti robotą į priekį 0,5 sekundžių, jei (kairėje.paspaustas ()) {sendRobotCommand ("L", 5);} / /Siunčia komandą perkelti robotą į kairę 0,5 sekundės, jei (dešinė.paspaustas ()) {sendRobotCommand ("R", 5);} // Siunčia komandą perkelti robotą į dešinę 0,5 sekundės, jei (žemyn). paspaustas ()) {sendRobotCommand ("B", 5);} // Siunčia komandą perkelti robotą atgal 0,5 sekundės, jei (webServer.pressed ()) {startWebServer ();} // Paleidžia „webServer cycleCount =“0; fonas (bg); // Perdažo fono paveikslėlį (šiame paveikslėlyje yra visa mygtukų grafika) draw ();}/ * * Paskambinus vieną kartą, jis patikrina serverį, ar nėra laukiančių ryšių * ar yra laukiamas ryšys, kurį jis traukia išsiųs užklausą ir perduos ją „parseRequest (String) *“procedūrai, kad pašalintų papildomą tekstą. Tada ji siunčiama į interpretRequest (String) rutiną, kad * iškviestų atitinkamą veiksmų rutiną (ty nusiųstų instrukcijas robotui).* * Užklausa perduodama įvedus kompiuterio adresą ir prievadą į žiniatinklio naršyklę command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 („Windows“; U; „Windows NT 5.1“; en-US) „AppleWebKit“/525.19 (KHTML, pvz., „Gecko“) * Priimti: * // * * Accept-Language: lt-US, lt * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Ryšys: „Keep-Alive“* Atsakymo pavyzdys (* HTTP/1.1 200 Gerai * Ryšys: uždaryti * Turinio tipas: text/html * * komanda: F param1: 100 */void pollWebServer () {if (wServer! = null) {// Jei žiniatinklio serveris veikia kliento užklausa = wServer.available (); // Įkelti kitą klientą eilutėje į // serverį (null, jei nelaukiama užklausų) if (request! = Null) {// jei yra užklausos procesas, tai String fullRequest = request.readString (); // Užklausos turinį išsaugoti kaip eilutę Styga ip = request.ip (); // Išsaugokite klientų IP adresą kaip eilutę String requestString = parseRequest (fullRequest.toUpperCase ()); // Pašalinkite visą papildomą // informaciją, palikdami tik užklausos eilutę (tekstas po GET) // (perkeliama į didžiąsias raides, kad būtų lengviau išbandyti eilutes), jei (requestString.indexOf ("REQUEST?")! = -1) { // Tikrina, ar užklausoje yra "REQUEST?" Stygos atsakymas = interpretRequest (requestString); // Siunčia užklausą užklausos vertėjui request.write ("HTTP/1.1 200 OK / nJungtis: uždaryti / nContent-Type: text/html / n / n" + atsakymas); // siunčia atsakymą 200, kad pasakytų, kad užklausa buvo apdorota, o „atsakymo“eilutę kaip atsakymą wServer.disconnect (užklausa); // Atjungia Klientą} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Jei užklausa skirta valdymo tinklalapiui String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Įkelia valdymo tinklalapį iš / data / WEBB-ControlPage.html // (įkeliamas kaip eilučių masyvas) Styga webPage = ""; // Kad būtų lengviau redaguoti tinklalapį, buvo paliktos // eilučių pertraukos, todėl ciklas nutraukia šias eilutes (int i = 0; i portIndex) {// jei perduotas portIndex yra tinkamas Serial.list () // (ty ne trečias variantas dviejų sąraše) serialPortIndex = portIndex; // nustatykite kintamąjį serialPortIndex į naują serialport indeksą // (jis naudojamas norint parodyti tašką šalia aktyvaus prievado)} if (serialPortIndex! = -1) {// patikrinkite, ar anksčiau pasirinktas prievadas, jei (serialPort! = null) {serialPort.stop ();} // jei serijinis prievadas jau naudojamas, sustabdykite jį prieš įkeldami naują serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Sukurkite naują serijinį objektą, kad galėtumėte bendrauti su „Arduino 9600 Baud“}}/ * * Paima užklausos eilutę (pvz., „Request? Command = F & param1 = 100“) ir pašalins komandą * ir param1 ir perduos ją arduino (čia būtų daromi papildomi parametrai arba ne arduino komandos) */String interpretRequest (String requestString) {String returnValue = "OK"; // Paruošia kintamąjį returnValue String komanda; // Kitos trys eilutės išgauna reikšmę po "command =" // (papildoma eilutė yra tuo atveju, jei komandos parametras yra užklausos // pabaigoje, o ne po to & (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 (" & "));}} {command = command;} String param1String; // Kitos trys eilutės išskiria reikšmę po" 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); // paverčia param1 eilutę į sveikasis skaičius sendRobotCommand (komanda, param1); // Siunčia komandą į įprastą programą, kuri siunčia ją į „Arduino“returnValue = "komandą:" + komanda + "param1:" + param1; // šiuo metu tik analizuojama komanda, bet siunčiama // kaip html, kad būtų galima įtraukti formatą return returnValue;}/ * * Paima komandą (šiuo metu viena raidė) ir parametrą (vienas baitas 0-255) ir siunčia arduino * kuris klausosi ir reasts * Šiuo metu palaikomos komandos * F - */void sendRobotCommand (String komanda, int param1) {println ("command:" + command + "time:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + komanda); serialPort.write (baitas (param1)); }} // Sąrankos pabaiga/nelabai dažnai vadinama rutina // ----------------------------------- -------------------------------------------------- // Pavyzdinis mygtukas ir „RectButton“kodas iš apdorojimo.org pavyzdys su tam tikrais pakeitimais // daugiausia atliekamas supaprastinant ir pašalinant apvirtimo animaciją // https://processing.org/learning/topics/buttons.html (2008-09-23) klasės mygtukas {int x, y; int plotis, aukštis; Mygtukas (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; plotis = iwidth; aukštis = aukštis; } loginis paspaudimas () {if (overRect ()) {return true; } else {return false;}} loginis overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } else {return false; }}}
5 veiksmas: programinė įranga - (tinklalapis)
Na, mes beveik baigėme, belieka tik kalbėtis su jūsų robotu. Norėdami pradėti kalbėti: (per vietinį tinklą -„Windows“)
- Atraskite nešiojamojo kompiuterio vietinį IP adresą. Norėdami tai padaryti, eikite į „Start / Programs / Accesories / Command Prompt“ir atsidarę terminalo lange įveskite „ipconfig“. Užsirašykite „IP adresą“ir eikite į kitą vietinio tinklo kompiuterį.
- Atidarykite žiniatinklio naršyklę, įveskite „https:// (roboto kompiuterio ip): 12345/ControlPage.html
- Valdymo tinklalapis turėtų būti įkeltas, laukelyje „IP adresas“įveskite robotų kompiuterius ip.
- Pradėkite valdyti savo robotą.
Norėdami pradėti kalbėti: (internetu) Dabar, kai jis veikia vietoje, kalbėjimas internetu yra vos už kelių žingsnių.
- (sunkiausias žingsnis) Nustatykite prievado peradresavimą - jūsų kompiuteris turi klausytis interneto, o ne tik vietinio tinklo. Norėdami tai padaryti, turite nurodyti savo maršrutizatoriui perduoti tam tikras užklausas kompiuteriui, valdančiam robotą. Tai yra šiek tiek sudėtinga ir gerokai viršija šios instrukcijos taikymo sritį. Tačiau jei apsilankysite „PortForward.com“, jie suteiks jums viską, ką reikia žinoti apie maršrutizatoriaus konfigūravimą (turite persiųsti 12345 prievadą į savo nešiojamąjį kompiuterį)
- Tada atraskite savo interneto IP (apsilankykite WhatIsMyIP.com)
- Galiausiai įjunkite „Skype“sąranką ir paskambinkite, su kuo kalbate, apsilankykite „https:// (interneto IP): 12345/ControlPage.html“
- Valdymo tinklalapio laukelyje „IP adresas“įveskite interneto IP adresą ir jūsų „Web Connected Robot“važiuoja iš tolo.
6 žingsnis: Baigta
Na tiek to. Tikiuosi, kad jums smagu vairuoti robotą iš toli. Jei turite kokių nors problemų dėl programinės ar aparatinės įrangos, nedvejodami palikite komentarą ir aš pabandysiu jums padėti. Jei norite patikrinti daugiau tvarkingų projektų, apsilankykite: oomlout.com
Rekomenduojamas:
Sukurkite žiniatinklio radiją už mažiau nei 15 USD: 4 žingsniai (su nuotraukomis)
Sukurkite žiniatinklio radiją už mažiau nei 15 USD: Taigi, aš nusprendžiau atlikti projektą, kurį kurį laiką atidėjau: naminis, visiškai funkcionalus interneto radijas su stiprintuvu ir garsiakalbiu už mažiau nei 15 €!. Galite pakeisti tarp iš anksto nustatytų transliacijos radijo stočių paspaudus mygtuką ir
Sukurkite rezervuaro tūrio skaitytuvą mažiau nei 30 USD naudodami ESP32: 5 žingsniai (su paveikslėliais)
Sukurkite cisternos tūrio skaitytuvą iki 30 USD naudodami ESP32: daiktų internetas į daugelio amatų alaus daryklų ir vyno gamintojų namus atnešė daug anksčiau sudėtingų įrenginių programų. Programos su lygio jutikliais dešimtmečius buvo naudojamos didelėse naftos perdirbimo gamyklose, vandens valymo įrenginiuose ir chemijos
55 colių, 4K skaitmeninio nuotraukų rėmelio ekranas už maždaug 400 USD: 7 žingsniai (su nuotraukomis)
55 colių, 4K skaitmeninio nuotraukų rėmelio ekranas už maždaug 400 USD: yra daug pamokų, kaip padaryti nuostabų skaitmeninį nuotraukų rėmelį su aviečių pi. Deja, rpi nepalaiko 4K raiškos. „Odroid C2“gali lengvai valdyti 4K skiriamąją gebą, tačiau nė viena iš šių RPI pamokų neveikia C2 įrenginyje. tai užtruko
Sukurkite žiniatinklio naršyklę naudodami „Visual Basic“: 12 žingsnių
Sukurkite žiniatinklio naršyklę „Visual Basic“: ketinu išmokyti jus sukurti žiniatinklio naršyklę „Visual Basic 2005“
Sukurkite savo „Nice Felt EeePC“/ „Netbook“maišelį už maždaug 8 USD (ir sutaupykite 91 USD, užuot pirkę iš „Redmaloo“): 5 žingsniai (su nuotraukomis)
Pasidaryk savo „Nice Felt EeePC“/ „Netbook“maišelį už maždaug 8 USD (ir sutaupyk 91 USD, užuot pirkęs iš „Redmaloo“): Ši pamoka parodys, kaip pasigaminti savo labai gražų ir gerai atrodantį nešiojamąjį kompiuterį ar dar geresnį nešiojamojo kompiuterio maišelį. Jame bus saugomas jūsų nešiojamasis kompiuteris, suteiksite pelės kilimėlį, jausmas, kai naudosite kažką unikalaus, gražaus ir rankų darbo, ir jausmingas jausmas