Përmbajtje:

Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook): 6 hapa (me fotografi)
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook): 6 hapa (me fotografi)

Video: Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook): 6 hapa (me fotografi)

Video: Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook): 6 hapa (me fotografi)
Video: Проверка и калибровка измерителя постоянного тока YB5145B 10A 2024, Korrik
Anonim
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook)
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook)
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook)
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook)
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook)
Bëni një robot të lidhur me uebin (për rreth 500 dollarë) (duke përdorur një Arduino dhe Netbook)

Ky Instructable do t'ju tregojë se si të krijoni Robotin tuaj të Lidhur me Uebin (duke përdorur një mikro-kontrollues Arduino dhe Asus eee pc). Pse dëshironi të keni një Robot të Lidhur me Uebin? Për të luajtur me natyrisht. Drejtojeni robotin tuaj nga e gjithë dhoma ose nga i gjithë vendi, duke mos përdorur asgjë më shumë se Skype dhe një shfletues uebi (asgjë për të instaluar në kompjuterin kontrollues). Pas kesaj? Gërmoni në softuer dhe përshtateni atë sipas dëshirës tuaj, shtoni një GPS në mënyrë që të shikoni se ku po vozisni në një hartë, shtoni sensorë të temperaturës për të hartuar gradientet e temperaturës në shtëpinë tuaj, ose sensorë sonar për të shtuar kontrolle në atë që jeni në internet drejtuesit mund dhe nuk mund të hasin. Karakteristikat:

  • I lirë - (500 dollarë nëse blini të gjitha pjesët e reja dhe dukshëm më të lira nëse gërmoni në koshin tuaj të pjesëve)
  • Sapo të funksionojë kontrolli i robotit kërkon vetëm një shfletues uebi - (dhe Skype nëse doni të shihni se ku po vozisni)
  • Burim i Hapur dhe lehtësisht i Përshtatshëm - (përdor një mikrokontrollues Arduino, Përpunimi për serverin në internet dhe i gjithë softueri mund të ekzekutohet në Linux (i gjithë kodi gjithashtu komentohet shumë për të bërë të lehtë hyrjen dhe ndryshimin e gjërave))
  • Dizajni modular (jo një sistem plotësisht i integruar, nëse doni të përdorni një shërbim të ndryshëm video konferencash pa u shqetësuar, ose nëse keni një vulë bazë dhe jo një Arduino thjesht drejtoni një pjesë të vogël të kodit dhe futeni në të)

Këtu keni një video të shpejtë të Robotit tim të Lidhur me Uebin që po dëbohet nga kuzhina.

Hapi 1: Pjesët dhe mjetet

Pjesë & Mjete
Pjesë & Mjete

Kërkohen vetëm disa pjesë: Roboti: Servo Robot i kontrolluar nga Arduino - (SERB) ($ 175 @ oomlout.com) ose (bëni vetë)

Një robot me burim të hapur i cili përdor një mikrokontrollues Arduino si tru

(mund të përdoret çdo platformë robot servo e dyfishtë me një arduino (opsioni 1) (ju lutem më dërgoni mesazh nëse gjeni ndonjë opsion tjetër) Kompjuter: Asus eee PC 4G (280 dollarë) (@Best Buy)

Një laptop i vogël i lirë që është i përsosur për këtë qëllim

(mund të përdoret çdo laptop (ose desktop nëse doni të vraponi me një akord) i aftë të ekzekutojë skica të përpunimit) Tavolinë laptopi: Akrilik me prerje me lazer (25 dollarë (@ oomlout)) ose (ndërtoni hapin tuaj 3)

Disa copa akrilike shtesë të cilat ngjiten në një (SERB) për t'i dhënë një tavolinë që laptopi të ulet

Arra dhe qepalla: (e disponueshme në depon e shtëpisë)

  • Rrufe në qiell 3mm x 10mm (x4)
  • 3mm x 15mm rrufe në qiell (x4)
  • Arrë 3 mm (x8)

Hapi 2: Prerja e pjesëve dhe montimi

Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi
Prerja e pjesëve dhe montimi

Ekzistojnë tre mundësi për marrjen e pjesëve për tavolinën e laptopit tuaj. Prerja e opsionit 1: (Blerja nga oomlout.com)

Pjesët e tavolinës së prerë me lazer dhe pajisjet e nevojshme janë në dispozicion nga oomlout për 25 dollarë (këtu)

Opsioni 2: (Prerja në prerësin tuaj lazer ose Ponoko.com)

  • Shkarkoni skedarin më poshtë (03-WEBB-Pjesë akrilike. Cdr ose 03-WEBB-Pjesë akrilike (Ponoko P2).eps)
  • Pritini ato nga akriliku 3 mm (1/8 ")

Opsioni 3: (Scroll Saw)

  • Shkarkoni modelin e sharrës së rrotullimit nga poshtë (modeli 03-WEBB-ScrollSaw (A4).pdf (për letër me madhësi A4) ose modeli 03-WEBB-ScrollSaw (letër).pdf (për letër me madhësi shkronje))
  • Kontrolloni dy herë që nuk është shkallëzuar kur printoni (duke matur vizoret e shtypura)
  • Ngjiteni në një copë akrilike 3 mm (1/8 ") dhe prerë copat.

Montimi: Shkarkoni udhëzuesin e montimit (04-WEBB-Assembly Guide.pdf) më poshtë dhe vendosni tavolinën e laptopit së bashku.

Hapi 3: Softuer - (Arduino)

Softuer - (Arduino)
Softuer - (Arduino)

Për ata që janë të rinj në Arduino, shikoni udhëzuesin e shkëlqyeshëm të fillimit në Arduino.cc Së pari, filloni programin që funksionon në Arduino. Shtë një program shumë i thjeshtë, ajo që bën Arduino është të monitorojë portën e tij serike për të dhëna. Ajo që kërkon është një bisedë 5 bajt e gjatë.

  • Bajt 1-3 (Kontrolloni bajtët "AAA")
  • Komanda Byte 4 (Tregon arduino se çfarë të bëjë) (Komandat e mbështetura 'F' - Përpara, 'B' - prapa, 'L' - majtas, 'R' - djathtas, 'S' - Shpejtësia, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Parametri Byte 5 - Për komandat e lëvizjes kjo interpretohet si një interval kohor (Parametri * 100 ms), dhe për komandat e shpejtësisë një përqindje nga 0-100

Kodi komentohet tërësisht dhe duke pasur parasysh këtë kuadër shtimi i komandave shtesë duhet të jetë i lehtë. Për ta shkarkuar:

  • Shkarkoni skedarin zip të bashkangjitur. (05-WEBB-Arduino Code.zip)
  • Zhbllokoni dosjen tuaj Arduino Sketch. (parazgjedhje: Dokumentet e mia / Arduino )
  • Hapni mjedisin tuaj të zhvillimit arduino dhe ngarkoni në Arduino tuaj.

Për të kopjuar dhe ngjitur

  • Kopjoni kodin nga poshtë.
  • Ngjiteni në mjedisin e zhvillimit Arduino.
  • Ngarko në Arduino tuaj.

Shtojca: Programi Arduino

/ * * Roboti i kontrolluar nga Arduino i lidhur me uebin (WEBB) - Seriali Host * Për më shumë detaje vizitoni: https://www.oomlout.com/serb * * Sjellja: Arduino dëgjon portën e tij Seriale për një komandë * në formatin 254, 88, 88, (KOMANDIM), (KOHA) * Komandat e Mbështetura - & aposF & apos - 70 - Përpara * & aposB & apos - 66 - Backward * & aposL & apos - 76 - Left * & aposR & apos - 82 - Right * & aposS & apos - 83 - Speed * & aposX & aposL - 88 - SetSpe * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Kohët e Mbështetura - 0 - 255 (0 në 25.5 Sekonda) vlera * 100 milisekonda * sp * Instalime: Sinjali Servo i Djathtë - pin 9 * Sinjali Servo i Majtë - pin 10 * * Licencë: Kjo punë është e licencuar sipas Creative Commons * Attribution-Share Alike 3.0 Licencë e paportuar. Për të * parë një kopje të kësaj licence, vizitoni * https://creativecommons.org/licenses/by-sa/3.0/ * ose dërgoni një letër Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * SHBA. * */// ------------------------------------------------- --------------------) #define FORWARD 70 // F#define BACKWARD 66 // B#përcakto LEFT 76 // L#përcakto të DREJTA 82 // R#përcakto SETSPEED 83 // S#përcakto STOP 67 // C#përcakto SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *Tre bajtët e kontrollit (të përdorura për të mos lejuar që roboti të përgjigjet në të dhëna serike *të rastësishme) aktualisht "AAA" */#define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ---------------------------- #define LEFTSERVOPIN 10 // Kunja servo e majtë është e lidhur me#define RIGHTSERVOPIN 9 // Kunja servo e djathtë është e lidhur meServo leftServo; Servo rightServo; int leftSpeed = 50; // mban shpejtësinë e robotëve leftServo // një përqindje midis 0 dhe 100int rightSpeed = 100; // mban shpejtësinë e robotëve djathtasServo // një përqindje midis 0 dhe 100 // FUNDI I ARDUINO PREAMBLE SERVO ROBOT (SERB) // ------------------- ------------------------------------------------------ ----- // Përfundon gjithçka dhe funksiononvoid setup () {Serial.begin (9600); // Nis portën serike serbSetup (); // vendos gjendjen e të gjitha kunjave të nevojshëm // dhe shton servos në skicën tuaj} // Programi kryesor loopvoid loop () {serbPollSerialPort (); // shikon vazhdimisht portin serik // nëse ka të dhëna i përpunon ato} // ------------------------------ ------------------------------------ * * Përpunon komandat e dërguara në portën seriale arduino & aposs */void serbPollSerialPort () {int dta; // ndryshore për të mbajtur bajtin serik nëse (Serial.disponueshëm ()> = 5) {// nëse 5 byte janë në tampon (gjatësia pf një kërkesë e plotë) dta = Serial.read (); if (dta = checkByte1) {// Kontrollon bajtin e kontrollit të parë dta = Serial.read (); if (dta = checkByte2) {// Kontrollet për bajtin e kontrollit të dytë dta = Serial.read (); if (dta = checkByte3) {// Kontrollon kontrollin e tretë të byte int komandës = Serial.read (); // Bajti i katërt është komanda int param1 = Serial.read (); // Bajti i pestë është param1 interpretCommand (komanda, param1); // dërgon kërkesën e analizuar tek ajo & aposs handler}}}}}/ * * Merr komandën dhe parametrin dhe ia kalon robotit */void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); vonesë (param1 * 100); goStop ();} // nëse përpara tjetër if (komanda == BACKWARD) {goBackward (); vonesë (param1 * 100); goStop ();} // nëse kthehet tjetër nëse (komanda == LEFT) {goLeft (); vonesë (param1 * 100); goStop ();} // nëse lihet tjetër nëse (komanda == Djathtas) {goRight (); vonesë (param1 * 100); goStop ();} // nëse e drejtë tjetër nëse (komanda == SETSPEED) {setSpeed (param1);} // nëse vendosni shpejtësinë tjetër nëse (komanda == STOP) {goStop ();} // nëse ndaleni ndryshe nëse (komanda == SETSPEEDLEFT) {setSpeedLeft (param1);} // nëse vendosni shpejtësinë e majtë tjetër nëse (komanda == SETSPEEDRIGHT) {setSpeedRight (param1);} // nëse vendosni shpejtësinë e duhur tjetër {// nëse komanda e panjohur bëni një shimmey të vogël Shko Majtas(); vonesa (150); goRight (); vonesa (150); goStop (); }} // -------------------------------------------------- -------------------- rutinat e përfshira*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // vendos pinin e sinjalit servo të majtë // në daljen pinMode (RIGHTSERVOPIN, OUTPUT); // vendos pinin e sinjalit të servo të djathtë // për të dalë leftServo.attach (LEFTSERVOPIN); // bashkon servo majtas rightServo.attach (RIGHTSERVOPIN); // bashkon servo goStop ();}/ * * vendos shpejtësinë e robotit midis 0- (ndaluar) dhe 100- (shpejtësia e plotë) * SHENIM: shpejtësia nuk do të ndryshojë shpejtësinë aktuale ju duhet të ndryshoni shpejtësinë * pastaj telefononi një të metodave të lëvizjes para se të ndodhin ndryshimet.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // vendos shpejtësinë e majtë setSpeedRight (newSpeed); // vendos shpejtësinë e duhur}/ * * Vendos shpejtësinë e rrotës së majtë */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // nëse shpejtësia është më e madhe se 100 // bëjeni 100 nëse (newSpeed = 100) {newSpeed = 100;} // nëse shpejtësia është më e madhe se 100 // bëjeni 100 nëse (newSpeed <= 0) {newSpeed = 0;} // nëse shpejtësia është më pak se 0 bëni // ajo 0 rightSpeed = newSpeed * 0.9; // shkallëzon shpejtësinë të jetë}/ * * dërgon robotin përpara */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * dërgon robotin prapa * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * dërgon robotin djathtas * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * dërgon robotin majtas */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * ndal robotin */void goStop () {leftServo.write (90); rightServo.write (90);} // FUNDI I RUTINAVE SERVO ROBOT (SERB) TT KONTROLLUARA ARDUINO // ---------------------------- --------------------------------------------------

Hapi 4: Softuer - Laptop Robot (WebServer)

Softuer - Laptop Robot (WebServer)
Softuer - Laptop Robot (WebServer)

(Përpunimi është një gjuhë programimi dhe mjedis me burim të hapur, me të cilin është shumë e lehtë të fillosh. Për më shumë detaje vizitoni Përpunimin) Softueri që funksionon në laptopin robot është gjithashtu mjaft i thjeshtë. Shtë një web-server mjaft rudimentar (dëgjimi i kërkesave të faqeve në internet nga një shfletues uebi), një ndërfaqe e vogël e përdoruesit (për ta konfiguruar atë), dhe lehtësira për kalimin e komandave të marra nga Web Server në Arduino. Për të instaluar shpejt: (në dritare)

  • Shkarkoni skedarin zip më poshtë (06-WEBB-Serveri i përpunimit të uebit (Windows exe). Zip)
  • Zbërtheni atë dhe ekzekutoni skedarin.exe (_WEBB_WebServer_RobotComputer.exe)

Për tu redaktuar në përpunim:

  • Shkarkoni skedarin zip më poshtë (06-WEBB-Serveri i përpunimit të uebit (skedarët burim). Zip)
  • Zbërtheni kudo në kompjuterin tuaj.
  • Hapni mjedisin e përpunimit dhe hapeni (_WEBB_WebServer_RobotComputer.pde)

Për të testuar:

  • Drejtoni programin.
  • Në kutinë #1 do të ketë një listë të porteve të komunikimit të disponueshëm në kompjuterin tuaj (klikoni në atë me të cilin është lidhur Arduino juaj. (Roboti juaj do të dridhet disa herë ndërsa kompjuteri lidhet dhe një pikë cianike do të shfaqet pranë të zgjedhurit) porti kom)
  • Në kutinë #2 provoni për të parë nëse Arduino juaj është i lidhur. Klikoni një nga shigjetat dhe shpresojmë që roboti juaj të lëvizë në drejtimin e klikuar për gjysmë sekonde.
  • Në kutinë #3 klikoni butonin "Start" për të filluar serverin në internet.
  • Hapni një shfletues uebi (në Laptopin Robot) dhe vizitoni https://127.0.0.1:12345/ControlPage.html (me shpresë se do të shfaqet uebfaqja e kontrollit me butona mbi të) -Detaje sesi të përdorni këtë faqe në hapin tjetër -

Çfarë po ndodh:

  • Serveri i uebit dëgjon portën 12345 për kërkesat http (çfarë dërgohet kur shkruani një adresë të faqes në internet)
  • Ekzistojnë dy lloje të kërkesave të cilave u përgjigjet.

1. Dëgjon për "ControlPage.html" dhe do të dërgojë uebfaqen e kontrollit 2. Dëgjon kërkesat e formularit "/request? Command = F & param1 = 100" (këto komanda analizohen dhe dërgohen në Arduino (ky shembull do të rezultonte në robotin Përpara për 10 sekonda) Shtojca: (Kodi për WebServer)

/ * * Robot i kontrolluar nga Arduino i lidhur me uebin (WEBB) - Serveri i faqes në internet * Për më shumë detaje vizitoni: https://www.oomlout.com/serb * * Sjellja: Programi dëgjon kërkesat http (faqe në internet) në formën * "/kërkesë ? command = F & param1 = 100 "dhe pastaj i kalon ato në * Arduino * Komandat e Mbështetura - & aposF & apos - 70 - Forward * & aposB & apos - 66 - Backward * & aposL & apos - 76 - Left * & aposR & apos - 82 - Right * & aposS & apos - 83 - Speed * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 deri në 25.5 sekonda) vlera * 100 milisekonda * * gjithashtu i shërben faqes së internetit të kontrollit në shfletuesin nëse kërkon ControlPage.html * * Operacioni: 1. Klikoni në portën Comm me të cilën është lidhur Arduino * 2. Përdorni butonat e provës për të parë nëse arduino juaj po dëgjon * (do të lëvizë në drejtimin e klikuar për gjysmë sekonde) * 3. Klikoni Start dhe serveri juaj i uebit do të dëgjoni kërkesat * * * Licenca: Kjo punë është e licencuar sipas Creative Commons * Attribu tion-Share Alike 3.0 Licencë e paportuar. Për të * parë një kopje të kësaj licence, vizitoni * https://creativecommons.org/licenses/by-sa/3.0/ * ose dërgoni një letër Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * SHBA. * */importimi i përpunimit. serial. *; // importoni bibliotekën serike për të përdorur Serial (për të folur me Arduino) importimin e përpunimit.net.*; // importoni bibliotekën neto për të përdorur Serverin (për të folur në internet)/ * Variablat e lidhura me Portin Serial */int serialPortIndex = -1; // indeksi i portit serik që po përdorim në Serial.list () listString commOptions; // Një variabël për të ruajtur Serial.list () në mënyrë që të mos ketë nevojë të anketoni // portet serike sa herë që dëshirojmë ta rifreskojmë atë (sondazhi shkakton një // kërcim në servos arduino) SerialPort serial; // E bën portën serike të adresueshme në të gjithë këtë skicë/ * Variablat Grafike dhe Renderuese */font PFont; // e bën fontin publik kështu që duhet vetëm të ngarkohet një herë (Arial-72)/ * Variablat që lidhen me rrjetin */Server wServer; // Serveri që trajton kërkesat e uebit për portin = 12345; // Porta që Serveri dëgjon në ciklinCount = 0; // Numëron numrin e ekzekutimeve të lakut të tërheqjes (të përdorura për të // animuar tekstin "në punë") * * Variablat e shërbimeve */PImage bg; // Imazhi i sfondit aktualisht / WEBB-background.png/ * * Ndryshoret e lidhura me butonin * (butonat zbatohen shumë përafërsisht, kutitë kufizuese ruhen dhe grafiku dhe teksti * vizatohen në imazhin e sfondit) dmth. lëvizja e ndryshoreve të butonave nuk do të lëvizë pamjen e butonave */Button comm1; Butoni comm2; Butoni comm3; Butoni comm4; // Butonat për të zgjedhur portën serike të saktëButton lart; Butoni djathtas; Butoni majtas; Butoni poshtë; // Butonat e drejtimit për të provuar nëse roboti po përgjigjetButton webServer; // Butoni për të filluar webServer/ * * vendos çdo gjë */void setup () {frameRate (5); // Ngadalëson skicën pak kështu që të mos jetë aq e ngarkuar me sistemin bg = loadImage ("WEBB-background.png"); // Ngarkon imazhin e sfondit (të ruajtur në dosjen e skicës) madhësia (700, 400); // Vendos madhësinë e skicës së dritares font = loadFont ("ArialMT-72.vlw"); // Ngarkon fontin që do të përdorim përmes këtij skicë commOptions = Serial.list (); // Sondazon portet serike dhe merr një listë të porteve të disponueshme // (duke e bërë këtë vetëm një herë nuk e pengon robotin të dridhet sa herë që porti serial të apelohet // apsollohet) defineButtons (); // Përcakton kutitë kufizuese për secilën sfond të butonit (bg); // Pikturon imazhin e sfondit (kjo imazh ka të gjitha grafikat e butonave)}/ * Skicon lakun kryesor */void draw () {if (cycleCount == 0) {//- rutinat e tërheqjes së thirrjeve drawCommBox (); // Vizaton emelmentet në Comm Box (kutia 1) drawTestBox (); // Vizaton të gjithë elementët në Test Box (kutia 2) drawWebServerBox (); // Vizaton të gjithë elementët në WebServer Box (kutia 3)} //- thirrni rutinat e punës pollWebServer (); // Anketon serverin e uebit për të parë nëse ndonjë kërkesë ka ardhur përmes rrjetit} // ------------------------------ ---------------------------------------------- // Fillimi i vizatoni rutinat (ndaheni vetëm për ta bërë kodin më të këndshëm për t'u lexuar)/ * * Rutina e përditësimit të tërheqjes (ekzekutohet çdo cikël) për artikujt në kutinë e komunikimit (kutia 1) */void drawCommBox () {mbush (0, 0, 0); // Vendosni mbushjen në textFont të zezë (font, 15); // Vendosni fontin në madhësinë e duhur për (int i = 0; i 0) {running = running + ".";} // numri i pikave bazohet në cycleCount if ((cycleCount /1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";}} nëse ((cycleCount / 1)> 3) {cycleCount = 0;} tekst (në punë, 520, 210); } cycleCount ++; // Çdo herë gjatë ciklitCount rritet me një} // Fundi i rutinave të Vizatimit // ------------------------------- ------------------------------ // ------------------ ---------------------------------------------- // Fillimi i rutinave të Shërbimit/ * * mousePressed quhet sa herë që miu shtypet kjo * kontrollon nëse miu është brenda ndonjë prej kutive të kufizimit të butonave * dhe nëse është rutina e duhur quhet */void mousePressed () {nëse (comm1.pressed ()) { updateSerialPort (0);} // Ndryshimet në portën e komunikimit në indeksin 0 në Serial.list () përndryshe nëse (comm2.pressed ()) {updateSerialPort (1);} // Ndryshimet në portën e komunikimit në indeksin 1 në Serial.list () tjetër nëse (comm3.pressed ()) {updateSerialPort (2);} // Ndryshimet në portin e komunikimit në indeksin 2 në Serial.list () tjetër nëse (comm4.pressed ()) {updateSerialPort (3);} // Ndryshimet në portën e komunikimit në indeksin 3 në Serial.list () përndryshe nëse (up.pressed ()) {sendRobotCommand ("F", 5);} // Dërgon një komandë për të lëvizur robotin Përpara për 0.5 sekonda tjetër nëse (majtas shtypur ()) {sendRobotCommand ("L", 5);} / /Dërgon një komandë për të lëvizur robotin Majtas për 0,5 sekonda tjetër nëse (right.pressed ()) {sendRobotCommand ("R", 5);} // Dërgon një komandë për të lëvizur robotin Djathtas për 0,5 sekonda tjetër nëse (poshtë) shtypur ()) {sendRobotCommand ("B", 5);} // Dërgon një komandë për të lëvizur robotin prapa për 0,5 sekonda tjetër nëse (webServer.pressed ()) {startWebServer ();} // Fillon ciklin e webServerCount = 0; sfond (bg); // Ripikturon imazhin e sfondit (kjo imazh ka të gjitha grafikat e butonave në të) vizatoni ();}/ * * I thirrur një herë në ekzekutim kontrollon Serverin për të parë nëse ka ndonjë lidhje pritjeje * nëse ka një lidhje pritjeje që tërheq nxjerr kërkesën dhe e kalon atë në rutinën parseRequest (String) * për të hequr tekstin shtesë. Kjo pastaj i dërgohet rutinës interpretRequest (String) për të * thirrur rutinën e duhur të veprimit (dmth dërgoni udhëzime robotit).* * Një kërkesë kalohet duke futur adresën dhe portën e kompjuterëve në një shfletues uebi * Për makinën lokale "https://127.0.0.1:12345/request?command=F&param1=100" * * Shembull Kërkesë: * GET/kërkesë? komanda = F & param1 = 100 HTTP/1.1 * Agjenti i përdoruesit: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, si Gecko) * Prano: * // * * Prano-Gjuha: en-US, sq * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Lidhja: Keep-Alive * * Shembull Përgjigje (për kërkesën e përpunuar) * HTTP/1.1 200 OK * Lidhja: mbyll * Lloji i përmbajtjes: tekst/html * * komanda: F param1: 100 */void pollWebServer () {if (wServer! = null) {// Nëse webServer po kandidon Kërkesa e klientit = wServer.available (); // Ngarkoni Klientin tjetër në linjë në serverin // (null nëse nuk ka kërkesa në pritje) nëse (kërkesë! = Null) {// nëse ka një proces kërkese ajo String fullRequest = request.readString (); // Ruani përmbajtjen e kërkesës si një varg String ip = request.ip (); // Ruani adresën IP të klientëve si një varg String requestString = parseRequest (fullRequest.toUpperCase ()); // Largo të gjithë informacionin shtesë // duke lënë vetëm vargun e kërkesës (teksti pas GET) // (kalon në shkronjën e madhe për ta bërë më të lehtë testimin e vargut) nëse (requestString.indexOf ("REQUEST?")! = -1) { // Kontrollon nëse kërkesa ka "REQUEST?" Përgjigje me varg = interpretRequest (requestString); // Dërgon kërkesën tek kërkuesi interpretues request.write ("HTTP/1.1 200 OK / nLidhja: mbyll / nLloji i përmbajtjes: teksti/html / n / n" + përgjigje); // I dërgon përgjigjes një 200 për të thënë se kërkesa është // trajtuar dhe vargu "përgjigje" si përgjigje wServer.diskonto (kërkesë); // Shkëput Klientin} tjetër nëse (requestString.indexOf ("CONTROLPAGE")! = -1) {// Nëse kërkesa është për faqen e kontrollit String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Ngarkon faqen e kontrollit nga / data / WEBB-ControlPage.html // (ngarkuar si një grup rreshtash) Faqja e internetit e vargut = ""; // Për ta bërë më të lehtë redaktimin, faqja e internetit është lënë me // ndërprerje të linjave, kështu që kjo për ciklin i heq ato rreshta për (int i = 0; i portIndex) {// nëse portIndex i kaluar është një indeks i vlefshëm në Serial.list () // (dmth. jo opsioni tre në një listë prej dy) serialPortIndex = portIndex; // vendosni ndryshoren serialPortIndex në indeksin e ri serialport // (kjo përdoret për të shfaqur pikën pranë portës aktive)} if (serialPortIndex! = -1) {// kontrolloni për të siguruar që një port është zgjedhur diku më parë nëse (serialPort! = null) {serialPort.stop ();} // nëse një port Serial tashmë është duke u përdorur ndalojeni atë para se të ngarkoni një të ri serialPort = Serial i ri (kjo, Serial.list () [serialPortIndex], 9600); // Krijoni një objekt të ri Serial për të komunikuar me Arduino 9600 Baud}}/ * * Merr një varg kërkese (p.sh.: "request? Command = F & param1 = 100") dhe do të heq komandën * dhe param1 dhe do t'ia kalojë arduino (shtimi i parametrave shtesë ose komandave jo arduino do të bëheshin këtu) */String interpretRequest (String requestString) {String returnValue = "OK"; // Përgatit një komandë variabël returnValue String; // Tre rreshtat e ardhshëm nxjerrin vlerën pas "command =" // (rreshti shtesë është në rast se parametri i komandës është në // fundin e kërkesës dhe nuk ndiqet nga një & if (requestString.indexOf ("COMMAND =")! = -1) {command = requestString.substring (requestString.indexOf ("COMMAND =") + "COMMAND =". Length ());} else {command = "Z";} if (command.indexOf (" & ")! = -1) {command = command.substring (0, command.indexOf (" & "));} else {command = command;} String param1String; // Tre rreshtat e ardhshëm nxjerrin vlerën pas" param1 = "// (linja shtesë është në rast se parametri i komandës është në // fundin e kërkesës dhe nuk ndiqet nga një & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ("PARAM1 =") + "PARAM1 =". gjatësia ());} tjetër {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} tjetër {param1String = param1String;} int param1 = Integer.parseInt (param1String); // Kthen vargun param1 në një numër i plotë sendRobotCommand (komanda, param1); // Dërgon komandën në rutinën që e dërgon në Arduino returnValue = "command:" + command + "param1:" + param1; // për momentin vetëm komanda e analizuar por dërgimi // si html kështu që formatimi mund të përfshihet return returnValue;}/ * * Merr një komandë (aktualisht një shkronjë) dhe një parametër (një bajt 0-255) dhe e dërgon atë te arduino * e cila po dëgjon dhe rimish * Komandat e Mbështetura Aktualisht * F - */void sendRobotCommand (Komanda String, int param1) {println ("command:" + command + "time:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (komanda checkString +); serialPort.write (bajt (param1)); }} // Fundi i konfigurimit/nuk quhen rutina shumë të zakonshme // -------------------------------------- ------------------------------------------------------ // Butoni shembull dhe kodi RectButton nga përpunimi.org shembull me disa ndryshime // të bëra kryesisht për të thjeshtuar dhe hequr rrotullimin e animacionit // https://processing.org/learning/topics/buttons.html (2008-09-23) butoni i klasës {int x, y; int gjerësia, lartësia; Butoni (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; gjerësia = gjerësia; lartësia = lartësia; } boolean pressed () {if (overRect ()) {return true; } else {return false;}} overLect boolean () {if (mouseX> = x && mouseX = y && mouseY <= y+lartësia) {return true; } else {return false; }}}

Hapi 5: Softuer - (Uebfaqe)

Softuer - (faqe në internet)
Softuer - (faqe në internet)
Softuer - (faqe në internet)
Softuer - (faqe në internet)
Softuer - (faqe në internet)
Softuer - (faqe në internet)

Epo ne kemi përfunduar pothuajse gjithçka që ka mbetur është të flasim me robotin tuaj. Për të folur: (përmes një rrjeti lokal -në dritare-)

  • Zbuloni adresën IP lokale të kompjuterit laptop. Për ta bërë këtë, shkoni te "Start / Programs / Accesories / Command Prompt" dhe kur hapet dritarja e terminalit, shkruani "ipconfig". Shkruani "Adresa IP" dhe drejtohuni te një kompjuter tjetër në rrjetin tuaj lokal.
  • Hapni një shfletues uebi, shkruani "https:// (robot kompjuteri ip): 12345/ControlPage.html
  • Faqja e internetit e kontrollit duhet të ngarkohet, në kutinë "Adresa IP" shkruani robotët ip.
  • Filloni të kontrolloni robotin tuaj.

Për të folur: (përmes internetit) Tani që e keni duke punuar në nivel lokal, të folurit përmes internetit është vetëm disa hapa të shkurtër larg.

  • (hapi më i vështirë) Konfiguroni Port Forwarding - Kompjuteri juaj duhet të dëgjojë internetin dhe jo vetëm rrjetin lokal. Për ta bërë këtë, duhet t'i tregoni ruterit tuaj që të kalojë kërkesa të caktuara në kompjuterin që kontrollon robotin. Kjo është pak komplekse dhe shkon përtej fushëveprimit të këtij Udhëzuesi. Sidoqoftë, nëse vizitoni PortForward.com ata do t'ju japin gjithçka që duhet të dini për konfigurimin e ruterit tuaj (ju duhet të përcillni portën 12345 në laptopin tuaj robot)
  • Tjetra zbuloni IP -në tuaj të internetit (vizitoni WhatIsMyIP.com)
  • Më në fund ndizni skype një video thirrje dhe merrni atë me të cilin po flisni për të vizituar "https:// (IP e internetit): 12345/ControlPage.html"
  • Shkruani IP -në e internetit në kutinë "Adresa IP" në faqen e kontrollit dhe Roboti juaj i lidhur me uebin po largohet nga larg.

Hapi 6: Përfundoi

E perfunduar
E perfunduar

Epo kjo është ajo. Shpresoj se po kaloni një kohë argëtuese duke drejtuar robotin tuaj nga larg. Nëse keni ndonjë problem me softuerin ose harduerin mos ngurroni të lini një koment dhe unë do të përpiqem t'ju ndihmoj. Nëse dëshironi të shikoni më shumë projekte të zoti provoni të vizitoni: oomlout.com

Recommended: