Բովանդակություն:
- Քայլ 1: Մասեր և գործիքներ
- Քայլ 2: Կտրում կտորներ և հավաքում
- Քայլ 3. Softwareրագրակազմ - (Arduino)
- Քայլ 4: Softwareրագրակազմ - Robot Laptop (WebServer)
- Քայլ 5: Softwareրագրակազմ - (կայք)
- Քայլ 6: Ավարտված
Video: Ստեղծեք վեբ միացված ռոբոտ (մոտ 500 դոլարով) (օգտագործելով Arduino և Netbook). 6 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:52
Այս Instructable- ը ցույց կտա ձեզ, թե ինչպես կառուցել ձեր սեփական Վեբ միացված ռոբոտը (օգտագործելով Arduino միկրոհսկիչ և Asus eee համակարգիչ): Ինչու՞ կցանկանայիք վեբ միացված ռոբոտ: Իհարկե խաղալու համար: Քշեք ձեր ռոբոտին սենյակից կամ ամբողջ երկրից ՝ օգտագործելով ոչ այլ ինչ, քան Skype- ը և վեբ դիտարկիչը (վերահսկիչ համակարգչում տեղադրելու ոչինչ): Դրանից հետո? Մտեք ծրագրակազմի մեջ և հարմարեցրեք այն, ինչպես ցանկանում եք, ավելացրեք GPS, որպեսզի կարողանաք դիտել, թե որտեղ եք քշում քարտեզի վրա, ավելացնել ջերմաստիճանի տվիչներ ՝ ձեր տան ջերմաստիճանի գրադիենտները քարտեզագրելու համար, կամ սոնարային տվիչներ ՝ ձեր վեբ կայքի վերահսկողություն ավելացնելու համար: վարորդները կարող են և չեն կարող հանդիպել: Հատկություններ:
- Էժան - (500 դոլար if, եթե բոլոր մասերը ձեռք բերեք նոր և զգալիորեն ավելի էժան, եթե փորեք ձեր մասերի աղբարկղում)
- Ռոբոտին կառավարելու համար անհրաժեշտ է միայն վեբ դիտարկիչ (և Skype, եթե ցանկանում եք տեսնել, թե որտեղ եք քշում)
- Բաց կոդով և հեշտությամբ հարմարվողական - (օգտագործում է Arduino միկրոհսկիչ, վեբ սերվերի համար մշակումը և ամբողջ ծրագրակազմը կարող են գործարկվել Linux- ի վրա (ամբողջ ծածկագիրը նույնպես խիստ մեկնաբանված է ՝ իրերը ցատկելու և փոխելու համար))
- Մոդուլային դիզայն (ոչ ամբողջովին ինտեգրված համակարգ, եթե ցանկանում եք օգտագործել այլ տեսակոնֆերանսների ծառայություն, անհանգստացեք, կամ եթե ունեք Հիմնական կնիք, այլ ոչ թե Arduino, պարզապես ուղղեք մի փոքր կոդի կտոր և տեղադրեք այն)
Ահա մի կարճ տեսանյութ, որտեղ պատկերված է, թե ինչպես է իմ վեբ միացված ռոբոտը դուրս մղվում խոհանոցից:
Քայլ 1: Մասեր և գործիքներ
Պահանջվում է ընդամենը մի քանի մաս. Robot: Arduino Controlled Servo Robot - (SERB) ($ 175 @ oomlout.com) կամ (ինքներդ պատրաստեք)
Բաց կոդով ռոբոտ, որն օգտագործում է Arduino միկրոկառավարիչ, որպես ուղեղ:
(կարող է օգտագործվել arduino- ով ցանկացած երկու servo ռոբոտային հարթակ (տարբերակ 1) (խնդրում եմ ինձ հաղորդագրություն ուղարկեք, եթե որևէ այլ տարբերակ հայտնաբերեք) Համակարգիչ. Asus eee PC 4G ($ 280) (@Best Buy)
Մի փոքր էժան նոութբուք, որը կատարյալ է այս նպատակի համար:
(ցանկացած նոթբուք (կամ աշխատասեղան, եթե ցանկանում եք վազել ակորդով))
Մի քանի լրացուցիչ ակրիլային կտորներ, որոնք պտուտակվում են (SERB) - ի վրա ՝ այն դյուրակիր համակարգիչ տալով նոութբուքի վրա:
Ընկույզ և պտուտակներ. (Առկա է տան պահեստում)
- 3 մմ x 10 մմ պտուտակ (x4)
- 3 մմ x 15 մմ պտուտակ (x4)
- 3 մմ ընկույզ (x8)
Քայլ 2: Կտրում կտորներ և հավաքում
Ձեր նոթբուքի սեղանի համար կտորներ ստանալու երեք տարբերակ կա: Կտրման տարբերակ 1. (Գնումներ oomlout.com- ից)
Լազերային սեղանի կտորները և անհրաժեշտ սարքավորումները մատչելի են oomlout- ից 25 դոլարով (այստեղ)
Տարբերակ 2. (Կտրում ձեր սեփական լազերային դանակի կամ Ponoko.com- ի վրա)
- Ներբեռնեք ստորև բերված ֆայլը (03-WEBB- Ակրիլային մասեր. Cdr կամ 03-WEBB- Ակրիլային մասեր (Ponoko P2). Ներ)
- Կտրեք դրանք 3 մմ (1/8 ") ակրիլից
Տարբերակ 3: (Ոլորեք սղոց)
- Ներբեռնեք ոլորման սղոցի օրինակը ներքևից (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 չափսի թղթի համար) կամ 03-WEBB-ScrollSaw նախշը (նամակ). Pdf (տառի չափի թղթի համար))
- Կրկնակի ստուգեք, որ այն տպագրված չէ
- Կպչեք 3 մմ (1/8 ") ակրիլ կտորի վրա և կտրեք կտորները:
Հավաքում. Ներբեռնեք հավաքման ուղեցույցը (04-WEBB-Assembly Guide.pdf) ստորև և միացրեք նոութբուքի սեղանը միասին:
Քայլ 3. Softwareրագրակազմ - (Arduino)
Arduino- ում նորեկների համար տեսեք Arduino.cc- ում սկսելու հիանալի ուղեցույցը: Նախ Arduino- ի վրա աշխատող ծրագրակազմը: Դա շատ պարզ ծրագիր է: Arduino- ն անում է տվյալների սերիական պորտը վերահսկելը: Այն, ինչ փնտրում է, 5 բայթ երկարությամբ խոսակցություն է:
- Բայթ 1-3 (Ստուգեք բայթերը "AAA")
- Byte 4 հրամանատարություն (arduino- ին ասում է, թե ինչ անել) (Աջակցվող հրամաններ 'F' - Forward, 'B' - Backward, 'L' - Left, 'R' - Right, 'S' - Speed, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
- Բայտ 5 պարամետր - Տեղափոխման հրամանների համար սա մեկնաբանվում է որպես ժամանակային ընդմիջում (պարամետր * 100 ms), իսկ արագության համար ՝ 0-100 տոկոս:
Կոդը մանրակրկիտ մեկնաբանվում է, և այս շրջանակի շնորհիվ լրացուցիչ հրամաններ ավելացնելը պետք է լինի հեշտ: Ներբեռնելու համար.
- Ներբեռնեք կցված zip ֆայլը: (05-WEBB-Arduino Code.zip)
- Անջատեք ձեր Arduino Sketch գրացուցակը: (կանխադրված ՝ Իմ փաստաթղթերը / Arduino)
- Բացեք ձեր arduino- ի զարգացման միջավայրը և վերբեռնեք ձեր Arduino- ում:
Պատճենել և տեղադրել
- Պատճենեք ծածկագիրը ներքևից:
- Տեղադրեք Arduino- ի զարգացման միջավայրը:
- Վերբեռնեք ձեր Arduino- ում:
Հավելված. Arduino ծրագիրը
/ * * Arduino վերահսկվող վեբ միացված ռոբոտ (WEBB) - սերիական հաղորդավար * Մանրամասների համար այցելեք ՝ https://www.oomlout.com/serb * * Վարք. Arduino- ն իր սերիական պորտին լսում է * 254 ձևաչափի հրամանի համար, 88, 88, (ՀՐԱՄԱՆ), (IMEԱՄԱՆԱԿ) * Աջակցվող հրամաններ - & aposF & apos - 70 - Forward * & 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 * Աջակցվող ժամանակներ - 0 - 255 (0 -ից 25.5 վայրկյան) արժեք * 100 միլիվայրկյան * sp * Հաղորդալարեր.: Այս աշխատանքը լիցենզավորված է Creative Commons * Attribution-Share Alike 3.0 Unported License- ով: Այս արտոնագրի պատճենը * դիտելու համար այցելեք * https://creativecommons.org/licenses/by-sa/3.0/ * կամ նամակ ուղարկեք Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * ԱՄՆ. * */// ------------------------------------------------- --------------------) #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/ *Երեք ստուգիչ բայթ (օգտագործվում է ռոբոտին պատահական սերիական *տվյալներին չարձագանքելու համար) ներկայումս «AAA» */#define checkByte1 65 // "A"#սահմանել ստուգումԲայթ 2 65 // "A "#սահմանել checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE#ներառում #սահմանեք LEFTSERVOPIN 10 // ձախ սերվոյի կապիչը միացված է#define RIGHTSERVOPIN 9 // Աջ սերվոյի կապը միացված է Servo leftServo; Servo rightServo; int leftSpeed = 50; // պահում է leftServo ռոբոտների արագությունը // տոկոս 0 -ից 100int աջ right արագություն = 100; // ճիշտ է պահում ռոբոտների արագությունըServo // տոկոս 0-ից 100-ի սահմաններում // ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE // ------------------- ------------------------------------------------------ ----- // Ստանում է ամեն ինչ և աշխատում վավեր setup () {Serial.begin (9600); // Սկսում է սերիալային պորտը serbSetup (); // սահմանում է բոլոր անհրաժեշտ // կապերի վիճակը և ավելացնում սերվոներ ձեր ուրվագծին} // Հիմնական ծրագրի loopvoid loop () {serbPollSerialPort (); // անընդհատ նայում է սերիական նավահանգստին // եթե տվյալներ կան, այն մշակում է} // ------------------------------ ----------------------------------------- // ARDUINO SERIAL SERVER ROUTINES/ * * Մշակում է arduino & aposs սերիական պորտին հանձնված հրամանները */void serbPollSerialPort () {int dta; // փոփոխական ՝ սերիական բայթը պահելու համար, եթե (Serial.available ()> = 5) {// եթե բայթում կա 5 բայթ (երկարությունը pf ամբողջական խնդրանքով) dta = Serial.read (); if (dta = checkByte1) {// Ստուգում է առաջին ստուգման բայթ dta = Serial.read (); if (dta = checkByte2) {// Երկրորդ ստուգման բայթերի ստուգում dta = Serial.read (); if (dta = checkByte3) {// Ստուգում է երրորդ ստուգման բայթ int հրամանը = Serial.read (); // Չորրորդ բայթ հրամանն է int param1 = Serial.read (); // Հինգերորդ բայթ է param1 interpretCommand (հրաման, param1); // ուղարկում է վերլուծված հարցումը դրան և aposs handler}}}}}/ * * Վերցնում է հրամանը և պարամետրը և փոխանցում այն ռոբոտին */void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); ուշացում (param1 * 100); goStop ();} // if forward else if (command == BACKWARD) {goBackward (); ուշացում (param1 * 100); goStop ();} // եթե հետընթաց այլ կերպ, եթե (հրաման == LEFT) {goLeft (); ուշացում (param1 * 100); goStop ();} // եթե այլ բան է մնացել if (command == RIGHT) {goRight (); ուշացում (param1 * 100); goStop ();} // եթե աջ այլ դեպքում (հրաման == SETSPEED) {setSpeed (param1);} // եթե այլ արագություն սահմանելու դեպքում, եթե (հրաման == STOP) {goStop ();} // եթե այլ կերպ կանգ առնել, եթե (հրաման == SETSPEEDLEFT) {setSpeedLeft (param1);} // եթե ձախ արագության այլ պարամետր է, եթե (հրաման == SETSPEEDRIGHT) {setSpeedRight (param1);} // եթե ճիշտ այլ արագություն սահմանելը {// եթե չճանաչված հրամանը մի փոքր շողալ գնա ձախ(); ուշացում (150); goRight (); ուշացում (150); goStop (); }} // ---------------------------------------------- -------------------------- // ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES/ * * կարգավորում է ձեր arduino- ն ՝ ձեր SERB- ի միջոցով ներառված ռեժիմները*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // ձախ սերվո ազդանշանի քորոցը // դնում է ելքային pinMode (RIGHTSERVOPIN, OUTPUT); // դնում է աջ սերվո ազդանշանի քորոցը // թողնել leftServo.attach (LEFTSERVOPIN); // կցում է ձախ servo rightServo.attach (RIGHTSERVOPIN); // կցում է աջ servo goStop ();}/ * * սահմանում է ռոբոտի արագությունը 0- (կանգառ) և 100- (լրիվ արագություն) միջև * ՆՇՈՄ. արագությունը չի փոխի ընթացիկ արագությունը, դուք պետք է փոխեք արագությունը * ապա զանգահարեք մեկին go to մեթոդներ ՝ նախքան փոփոխություններ կատարելը:*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // սահմանում է ձախ արագություն setSpeedRight (newSpeed); // սահմանում է ճիշտ արագություն}/ * * Սահմանում է ձախ անիվի արագությունը */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // եթե արագությունը 100 -ից մեծ է // դարձնել այն 100 եթե (newSpeed = 100) {newSpeed = 100;} // եթե արագությունը 100 -ից մեծ է // դարձնել 100 եթե (newSpeed <= 0) {newSpeed = 0;} // եթե արագությունը 0 -ից փոքր է // դա 0 rightSpeed = newSpeed * 0.9; // չափում է արագությունը}/ * * ռոբոտին ուղարկում է առաջ */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * ռոբոտին հետ է ուղարկում * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * ռոբոտին ուղարկում է աջ * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * ռոբոտին ուղարկում է ձախ */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * կանգնեցնում է ռոբոտին */void goStop () {leftServo.write (90); rightServo.write (90);} // ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES // ----------------------------- ---------------------------------------------------
Քայլ 4: Softwareրագրակազմ - Robot Laptop (WebServer)
(Մշակումը բաց կոդով ծրագրավորման լեզու է և միջավայր, որից սկսելը չափազանց հեշտ է: Մանրամասների համար այցելեք Processing) Ռոբոտ -նոթբուքի վրա աշխատող ծրագրակազմը նույնպես բավականին պարզ է: Դա բավականին տարրական վեբ-սերվեր է (վեբ դիտարկիչից վեբ էջի հարցումները լսելը), փոքր ինտերֆեյս (այն տեղադրելու համար) և վեբ սերվերից ստացված հրամանները Arduino- ին փոխանցելու հարմարություններ: Արագ տեղադրելու համար. (պատուհանների վրա)
- Ներբեռնեք ստորև բերված zip ֆայլը (06-WEBB-Processing Webserver (windows exe). Zip)
- Անջատեք այն և գործարկեք.exe ֆայլը (_WEBB_WebServer_RobotComputer.exe)
Մշակման մեջ խմբագրելու համար.
- Ներբեռնեք ներքևում տեղադրված zip ֆայլը (06-WEBB-Processing Webserver (աղբյուրի ֆայլեր). Zip)
- Տեղահանեք ձեր համակարգչի ցանկացած վայրում:
- Բացեք Processing միջավայրը և բացեք (_WEBB_WebServer_RobotComputer.pde)
Փորձել:
- Գործարկեք ծրագիրը:
- #1 վանդակում կլինի ձեր համակարգչում առկա կոմունալ նավահանգիստների ցանկը (կտտացրեք այն, որին միացված է ձեր Arduino- ն: (ձեր ռոբոտը մի քանի անգամ կշրջվի, քանի որ համակարգիչը միանում է, և ընտրվածի կողքին կհայտնվի մուգ գույնի կետ): կոմպորտ)
- Թիվ 2 վանդակում ստուգեք ՝ արդյոք ձեր Arduino- ն միացված է: Կտտացրեք սլաքներից մեկին և հուսով ենք, որ ձեր ռոբոտը կես վայրկյան կշարժվի սեղմված ուղղությամբ:
- Թիվ 3 վանդակում կտտացրեք «Սկսել» կոճակին ՝ վեբ սերվերը գործարկելու համար:
- Բացեք վեբ դիտարկիչ (Robot Laptop- ում) և այցելեք https://127.0.0.1:12345/ControlPage.html (հուսով եմ, որ կհայտնվի կառավարման վեբ էջը ՝ դրա կոճակներով) -Մանրամասներ, թե ինչպես օգտագործել այս էջը հաջորդ քայլին -
Ինչ է կատարվում.
- Վեբ սերվերը լսում է 12345 նավահանգստը http հարցումների համար (այն, ինչ ուղարկվում է, երբ մուտքագրում եք վեբ էջի հասցե)
- Գոյություն ունի երկու տեսակի խնդրանք, որին նա պատասխանում է:
1. Այն լսում է «ControlPage.html» - ը և կուղարկի վերահսկիչ վեբ էջ: 2. Լսում է «/request? Command = F & param1 = 100» ձևի (այս հրամանները վերլուծված են և ուղարկվում են Arduino- ին) ձևի խնդրանքներին: ռոբոտում, որը 10 վայրկյան առաջ է գնում) Հավելված. (Վեբ սերվերի ծածկագիրը)
/ * * Arduino վերահսկվող վեբ միացված ռոբոտ (WEBB) - վեբ սերվեր * Լրացուցիչ մանրամասների համար այցելեք ՝ https://www.oomlout.com/serb * * Վարք. Programրագիրը լսում է http (վեբ էջ) հարցումները * * ձևով ? command = F & param1 = 100 "և այնուհետև դրանք փոխանցում է * Arduino * Աջակցվող հրամաններ - & 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 -ից 25.5 վայրկյան) արժեքը * 100 միլիվայրկյան * * նաև ծառայում է վերահսկիչ վեբ էջին դիտարկիչին, եթե ControlPage.html եք խնդրում: html * * Գործողություն. 1. Կտտացրեք Comm նավահանգստին, որին միացված է ձեր Arduino- ն * 2. Օգտագործեք թեստի կոճակները ՝ տեսնելու, թե արդյոք ձեր arduino- ն լսում է * (կշարժվի կես վայրկյան սեղմված ուղղությամբ) * 3. Սեղմեք Start և ձեր վեբ սերվերը լսեք խնդրանքները * * * Լիցենզիա. Այս աշխատանքը լիցենզավորված է Creative Commons * Attribu- ի ներքո tion-Share Alike 3.0 Unported License: Այս արտոնագրի պատճենը * դիտելու համար այցելեք * https://creativecommons.org/licenses/by-sa/3.0/ * կամ նամակ ուղարկեք Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * ԱՄՆ. * */ներմուծման մշակում. սերիալ: *; // ներմուծել սերիական գրադարանը `օգտագործելու Serial (Arduino- ի հետ խոսելու համար) ներմուծման processing.net:*; // ներմուծել զուտ գրադարանը ՝ սերվերից օգտվելու համար (ինտերնետի հետ խոսելու համար)/ * Serial Port Related Variables */int serialPortIndex = -1; // սերիական պորտի ինդեքսը, որը մենք օգտագործում ենք Serial.list () listString commOptions; // Փոփոխական ՝ Serial.list () - ը պահելու համար, այնպես որ կարիք չկա հարցումներ կատարել // սերիական նավահանգիստները ամեն անգամ, երբ մենք ցանկանում ենք անդրադառնալ դրան (հարցումը առաջացնում է // թռիչք arduino servos- ում) Serial serialPort; // Սերիական պորտը հասցեական է դարձնում այս ուրվագծի ընթացքում/ * Գրաֆիկական և մատուցվող հարակից փոփոխականներ */PFont տառատեսակ; // հրապարակում է տառատեսակը, որպեսզի այն միայն մեկ անգամ բեռնվի (Arial-72)/ * Reանցին առնչվող փոփոխականներ */Server wServer; // Սերվերը, որը վարում է վեբ պահանջների մուտքի պորտ = 12345; // Պորտը, որը սերվերը լսում է ցիկլը հաշվել = 0; // Հաշվում է, թե քանի անգամ է կատարում loop loop- ը (օգտագործվում է // «վազող» տեքստը կենդանացնելու համար)/ * Utility Variables */PImage bg; // Ֆոնային պատկերը ներկայումս / WEBB-background.png/ * * Կոճակի հետ կապված փոփոխականներ * (կոճակները գործարկվում են շատ կոպիտ կերպով, սահմանափակող տուփերը պահվում են, իսկ գրաֆիկականը և տեքստը * գծված են ֆոնային պատկերի վրա), այսինքն. կոճակի փոփոխականները չեն տեղափոխի կոճակների տեսքը */Button comm1; Կոճակ comm2; Կոճակ comm3; Կոճակ comm4; // serիշտ սերիական պորտ ընտրելու կոճակները Կոճակ վեր; Կոճակ աջ; Կոճակը ձախ; Կոճակ ներքև; // Ուղղության կոճակներ ՝ ստուգելու, թե արդյոք ռոբոտը արձագանքում է Կոճակ վեբ սերվեր; // Վեբ սերվերը գործարկելու կոճակը/ * * կարգավորում է ամեն ինչ */void setup () {frameRate (5); // Էսքիզը մի փոքր դանդաղեցնում է, որպեսզի այն համակարգից չբավարարի bg = loadImage ("WEBB-background.png"); // Բեռնում է հետին պլանի պատկերը (պահվում է էսքիզների թղթապանակում) չափը (700, 400); // Սահմանում է ուրվագծի պատուհանի տառաչափը = loadFont ("ArialMT-72.vlw"); // Բեռնում է այն տառատեսակը, որը մենք կօգտագործենք այս ուրվագծի միջոցով commOptions = Serial.list (); // Հարցում է սերիական նավահանգիստները և ստանում հասանելի նավահանգիստների ցանկը // (դա անելով միայն մեկ անգամ թույլ չի տալիս, որ ռոբոտը ցնցվի ամեն անգամ & aposs // սերիայի նավահանգիստը հարցում արվի) defineButtons (); // Սահմանում է յուրաքանչյուր կոճակի ֆոնի սահմանափակման տուփերը (bg); // Ներկում է հետին պլանի պատկերը (այս պատկերի վրա առկա են կոճակի բոլոր գրաֆիկները)}/ * Էսքիզներ հիմնական հանգույցը */void draw () {if (cycleCount == 0) {//- call draw routines drawCommBox (); // Նկարում է էմելենտները Comm Box- ում (տուփ 1) drawTestBox (); // Գծում է Test Box- ի բոլոր տարրերը (տուփ 2) drawWebServerBox (); // Գծում է WebServer Box- ի բոլոր տարրերը (տուփ 3)} //- զանգահարել աշխատանքային ռեժիմին pollWebServer (); // Հարցում է վեբ սերվերը `տեսնելու, թե արդյոք ցանցի միջոցով որևէ հարցում է մուտքագրվել} // ------------------------------ ---------------------------------------------- // Սկիզբը գծել ռեժիմներ (պառակտվել պարզապես կոդը ավելի ընթերցելու համար)/ * * Ոչ ոքի թարմացման ռեժիմը (կատարվում է յուրաքանչյուր ցիկլով) կոմունալ տուփի տարրերի համար (տուփ 1) */void drawCommBox () {լրացնել (0, 0, 0); // Լրացրեք լրացրեք սև textFont (տառատեսակ, 15); // Տառատեսակը ճիշտ չափի համար դարձրեք (int i = 0; i 0) {վազում = վազում + ".";} // կետերի քանակը հիմնված է cycleCount if ((cycleCount /1)> 1) { - ի վրա: վազում = վազում + ".";} if ((cycleCount / 1)> 2) {running = running + ".";}} եթե ((cycleCount / 1)> 3) {cycleCount = 0;} տեքստ (վազում, 520, 210); } cycleCount ++; // Ամեն անգամ ցիկլի միջոցով Հաշիվը ավելանում է մեկով} // Ոչ ոքի ռեժիմների ավարտ // ----------------------------------- ---------------------------------------------------------- ---------------------------------------------- // routառայության ռեժիմների մեկնարկը/ * * mousePressed կոչվում է ամեն անգամ, երբ մկնիկը սեղմվում է, սա * ստուգում է, արդյոք մկնիկը գտնվում է կոճակը սահմանափակող արկղերից որևէ մեկի մեջ *, և արդյոք դա համապատասխան ռեժիմ է կոչվում */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Փոփոխություններ comm պորտին 0 ինդեքսում Serial.list- ում () այլապես, եթե (comm2.pressed ()) {updateSerialPort (1);} // Սերիայի ինդեքս 1 -ում փոփոխություններ կատարվող նավահանգստում.list () else if (comm3.pressed ()) {updateSerialPort (2);} // commits port- ում փոփոխություններ են կատարվում Serial.list () ցուցակում 2, այլապես եթե (comm4.pressed ()) {updateSerialPort (3);} // Փոփոխություններ comm պորտին ինդեքս 3 -ում Serial.list () այլ դեպքում, եթե (up.pressed ()) {sendRobotCommand ("F", 5);} // ուղարկում է ռոբոտին 0.5 -ով առաջ տեղափոխելու հրաման վայրկյան այլ դեպքում, եթե (left.pressed ()) {sendRobotCommand ("L", 5);} / /Ուղարկում է ռոբոտին 0.5 վայրկյան ձախ տեղափոխելու հրաման, եթե (right.pressed ()) {sendRobotCommand ("R", 5);} // ուղարկում է ռոբոտին աջ տեղափոխելու հրաման 0.5 վայրկյան այլ դեպքում, եթե (ներքև): սեղմված ()) {sendRobotCommand («B», 5);} // Ուղարկում է հրաման ՝ ռոբոտին հետ մղելու 0.5 վայրկյան այլ դեպքում, եթե (webServer.pressed ()) {startWebServer ();} // Գործարկում է վեբ սերվերի ցիկլըՀաշիվ = 0; ֆոն (bg); // Վերաներկում է հետին պլանի պատկերը (այս պատկերի վրա պատկերված են կոճակի բոլոր գրաֆիկները) նկարել ();}/ * * Կատարումից մեկ անգամ այն ստուգում է Սերվերին `տեսնելու, թե սպասող կապեր կա՞ն, եթե կա սպասման միացում, որը ձգում է: դուրս բերեք խնդրանքը և փոխանցեք այն parseRequest (String) * ռեժիմին ՝ լրացուցիչ տեքստը հեռացնելու համար: Այնուհետև այն ուղարկվում է interpretRequest (String) առօրյային ՝ * համապատասխան գործողությունների ռեժիմ կանչելու համար (այսինքն ՝ հրահանգներ ուղարկեք ռոբոտին):* * Հայտը փոխանցվում է ՝ մուտքագրելով համակարգիչների հասցեն և նավահանգիստը վեբ դիտարկիչում * Տեղական մեքենայի համար "https://127.0.0.1:12345/request?command=F¶m1=100" * * Օրինակ խնդրանք. * GET/հարցում? հրաման = F & param1 = 100 HTTP/1.1 * Օգտվող-գործակալ ՝ Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, ինչպես Gecko) * Ընդունել ՝ * // * * Ընդունել-լեզու. hy-en, en * Ընդունել-Charset: ISO-8859-1, *, utf-8 * Ընդունել-կոդավորումը ՝ gzip, deflate, bzip2 * Հաղորդավար ՝ 127.0.0.1:12345 * Միացում. Պահպանեք կենդանի * * Օրինակ պատասխան մշակված հարցման համար) * HTTP/1.1 200 OK * Միացում ՝ փակ * Բովանդակություն-տեսակ ՝ տեքստ/html * * հրաման ՝ F param1: 100 */void pollWebServer () {if (wServer! = null) {// Եթե վեբ սերվեր աշխատում է Client request = wServer.available (); // Տեղադրեք հաջորդ Հաճախորդին // սերվերի տողում (null եթե հարցումներ չեն սպասվում) եթե (request! = Null) {// եթե կա հարցման գործընթաց այն String fullRequest = request.readString (); // Պահել հարցման բովանդակությունը որպես տող String ip = request.ip (); // Պահել հաճախորդների IP հասցեն որպես տող String requestString = parseRequest (fullRequest.toUpperCase ()); // Հեռացրեք բոլոր լրացուցիչ // տեղեկությունները ՝ թողնելով միայն հարցման տողը (տեքստը GET- ից հետո) // (անցնում է մեծատառ ՝ տողերի փորձարկումն ավելի դյուրին դարձնելու համար), եթե (requestString.indexOf ("ՊԱՀԱՆ??")! = -1) { // Ստուգում է, արդյոք հարցման մեջ կա «ՊԱՀԱՆՈ "Մ»: Լարային պատասխան = interpretRequest (requestString); // Հարցումն ուղարկում է հարցման թարգմանիչ request.write ("HTTP/1.1 200 OK / n Կապ. Փակ. / N Բովանդակություն-տեսակ. Տեքստ/html / n / n" + պատասխան); // Պատասխանն ուղարկում է 200 ՝ ասելու համար, որ հարցումը // վարվել է, և «պատասխան» տողը ՝ որպես պատասխան wServer.disconnect (հարցում); // Անջատում է Հաճախորդը} այլ դեպքում, եթե (requestString.indexOf ("CONTROLPAGE")! = -1) {// Եթե խնդրանքը վերահսկիչ վեբ էջի համար է String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Բեռնում է հսկիչ վեբ էջը / data / WEBB-ControlPage.html // (բեռնված է որպես տողերի զանգված) Լարային վեբ էջ = ""; // Խմբագրումն ավելի դյուրին դարձնելու համար վեբ էջին մնացել է // տողի ընդմիջումներ, այնպես որ սա հանգույցի համար այդ տողերը դուրս է հանում (int i = 0; i portIndex) {// եթե անցած portIndex- ը վավեր ինդեքս է Serial.list- ում () // (այսինքն. երկուսի ցանկում երեք տարբերակ չէ) serialPortIndex = portIndex; // սահմանել serialPortIndex փոփոխականը նոր սերիական պորտալի ինդեքսի վրա ((սա օգտագործվում է ակտիվ նավահանգստին կից կետը ցուցադրելու համար)} if (serialPortIndex! = -1) {// ստուգել ՝ համոզվելու համար, որ նավահանգիստը որոշ ժամանակ առաջ ընտրված էր, եթե (serialPort! = null) {serialPort.stop ();} // եթե սերիական նավահանգիստն արդեն օգտագործվում է, դադարեցրեք այն նախքան նորը բեռնելը serialPort = new Serial (սա, Serial.list () [serialPortIndex], 9600); // Ստեղծեք նոր Սերիական օբյեկտ ՝ Arduino 9600 Baud- ի հետ հաղորդակցվելու համար}}/ * * Վերցնում է հարցման տողը (օրինակ ՝ «request? Command = F & param1 = 100») և կհեռացնի * և param1 հրամանը և կփոխանցի այն arduino (այստեղ լրացուցիչ պարամետրեր կամ ոչ arduino հրամաններ ավելացնելը) */String interpretRequest (String requestString) {String returnValue = "OK"; // Պատրաստում է returnValue փոփոխական String հրաման; // Հաջորդ երեք տողերը դուրս են բերում արժեքը «հրաման =» // -ից հետո (լրացուցիչ տողը այն դեպքում, երբ հրամանի պարամետրը գտնվում է հարցման // վերջում և չի հետևում & 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; // Հաջորդ երեք տողերը արժեք են հանում" param1 = "// (լրացուցիչ տողը այն դեպքում, երբ հրամանի պարամետրը գտնվում է // հարցման վերջում և չի հետևում & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ("PARAM1 =") + "PARAM1 =". երկարություն ());} else {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // Պարամ 1 String- ը վերածում է ամբողջ թիվը sendRobotCommand (հրաման, param1); // Հրամանը ուղարկում է ռեժիմին, որն այն ուղարկում է Arduino returnValue = "հրաման." + Հրաման + "param1:" + param1; // այս պահին պարզապես վերլուծված հրամանն է, բայց ուղարկվում է // որպես html, որպեսզի ձևաչափումը ներառվի return returnValue;}/ * * Վերցնում է հրաման (ներկայումս մեկ տառ) և պարամետր (մեկ բայթ 0-255) և ուղարկում այն arduino * որը լսում է և համբուրում * Առայժմ աջակցվող հրամաններ * F - */void sendRobotCommand (String command, int param1) {println ("command:" + command + "time:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + հրաման); serialPort.write (բայթ (param1)); }} // Կարգավորման ավարտը/ոչ այնքան սովորական ռեժիմներ // -------------------------------------- ------------------------------------------------------ // Օրինակ կոճակը և RectButton ծածկագիրը processing.org- ի օրինակից ՝ որոշ փոփոխություններով // հիմնականում արված են շարժական շարժումը պարզեցնելու և հեռացնելու համար // https://processing.org/learning/topics/buttons.html (2008-09-23) դասի կոճակ {int x, y; int լայնություն, բարձրություն; Կոճակ (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; լայնություն = լայնություն; բարձրություն = բարձրություն; } boolean pressed () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+բարձրություն) {return true; } else {return false; }}}
Քայլ 5: Softwareրագրակազմ - (կայք)
Դե, մենք գրեթե ավարտեցինք այն ամենը, ինչ մնում է ՝ խոսել ձեր ռոբոտի հետ: Խոսելու համար. (Տեղական ցանցի միջոցով `պատուհանների վրա)
- Բացահայտեք նոութբուքի համակարգչի տեղական IP հասցեն: Դա անելու համար գնացեք «Սկսել / ramsրագրեր / Աքսեսուարներ / Հրամանի հուշում» և երբ տերմինալի պատուհանը բացվի մուտքագրեք «ipconfig»: Գրեք «IP հասցե» և գնացեք ձեր տեղական ցանցի մեկ այլ համակարգիչ:
- Բացեք վեբ դիտարկիչ, մուտքագրեք «https:// (robot computer ip): 12345/ControlPage.html
- Կառավարման վեբ էջը պետք է բեռնվի, «IP հասցե» վանդակում մուտքագրեք ռոբոտային համակարգիչների ip:
- Սկսեք վերահսկել ձեր ռոբոտը:
Խոսելու համար. (Ինտերնետի միջոցով) Այժմ, երբ այն աշխատում եք տեղում, ինտերնետով խոսելը ընդամենը մի քանի քայլ հեռավորության վրա է:
- (ամենադժվար քայլը) Ստեղծեք նավահանգստի փոխանցում. ձեր համակարգիչը պետք է լսի ինտերնետին, այլ ոչ թե միայն տեղական ցանցին: Դա անելու համար դուք պետք է ձեր երթուղիչին ասեք, որ որոշ խնդրանքներ փոխանցի ռոբոտը կառավարող համակարգչին: Սա մի փոքր բարդ է և շատ հեռու է այս Հրահանգի շրջանակներից: Այնուամենայնիվ, եթե այցելեք PortForward.com, նրանք ձեզ կտրամադրեն այն ամենը, ինչ դուք պետք է իմանաք ձեր երթուղիչը կազմաձևելու մասին (դուք պետք է 12345 նավահանգիստը փոխանցեք ձեր ռոբոտ -նոթբուքին)
- Հաջորդը բացահայտեք ձեր ինտերնետային IP- ն (այցելեք WhatIsMyIP.com)
- Վերջապես միացրու skype- ով տեսազանգ և ստացիր ում հետ զրուցում ես այցելելու «https:// (ինտերնետային IP): 12345/ControlPage.html"
- Կառավարման վեբ էջի «IP հասցե» վանդակում մուտքագրեք ինտերնետի IP հասցեն, և ձեր վեբ միացված ռոբոտը հեռվից է քշվում:
Քայլ 6: Ավարտված
Դե վերջ Հուսով եմ, որ դուք հաճելի ժամանակ կանցկացնեք ձեր ռոբոտին հեռվից քշելով: Եթե ծրագրային ապահովման կամ սարքավորման հետ կապված որևէ խնդիր ունեք, ազատորեն թողեք մեկնաբանություն, և ես կփորձեմ օգնել ձեզ: Եթե ցանկանում եք ավելի կոկիկ նախագծեր տեսնել, փորձեք այցելել ՝ oomlout.com
Խորհուրդ ենք տալիս:
Վեբ-միացված SMART LED անիմացիոն ժամացույց ՝ վեբ վրա հիմնված կառավարման վահանակով, Serverամային սերվերի համաժամացում ՝ 11 քայլ (նկարներով)
Վեբ-միացված SMART LED անիմացիոն ժամացույց ՝ վեբ վրա հիմնված կառավարման վահանակով, Time Server Synchronized: Այս ժամացույցի պատմությունը հեռու է գնում ՝ ավելի քան 30 տարի: Հայրս այս գաղափարի առաջատարն էր, երբ ես ընդամենը 10 տարեկան էի, LED- ի հեղափոխությունից շատ առաջ: Իսկական
Վեբ վարորդի IO ձեռնարկը `օգտագործելով կենդանի վեբ կայք և աշխատանքային օրինակներ. 8 քայլ
Վեբ վարորդի IO ձեռնարկը ՝ օգտագործելով կենդանի վեբ կայք և աշխատանքային օրինակներ. հետաքրքիր մարտահրավեր ներկայացվեց ինձ: Ինձ պետք էր
Ինչպես կատարել ինքնավար բասկետբոլ խաղացող ռոբոտ ՝ օգտագործելով IRobot- ը: Ստեղծեք հիմք. 7 քայլ (նկարներով)
Ինչպես դարձնել ինքնավար բասկետբոլ խաղացող ռոբոտ ՝ օգտագործելով IRobot- ը Ստեղծել որպես հիմք. Սա իմ մուտքն է iRobot Create մարտահրավերի: Ինձ համար այս ամբողջ գործընթացի ամենադժվարը որոշումն էր, թե ինչ է անելու ռոբոտը: Ես ուզում էի ցուցադրել Ստեղծման հիանալի հատկությունները ՝ միաժամանակ ավելացնելով ինչ -որ ռոբոյի տաղանդ: Իմ բոլոր
Ստեղծեք 500 մետրանոց ռադիոյի տվյալների հղում մինչև 40 դոլարով. 7 քայլ
Կառուցեք 500 մետրանոց ռադիոյի տվյալների հղում մինչև 40 դոլարով. Ունե՞ք ջրի բաք, որը ցանկանում եք չափել, կամ պատնեշ կամ դարպաս: Wantանկանու՞մ եք հայտնաբերել մեքենայից, որն իջնում է ընթացքի մեջ, բայց չե՞ք ցանկանում լարերը լարել այգու միջով: Այս հրահանգը ցույց է տալիս, թե ինչպես կարելի է 500 մետր տվյալներ ուղարկել 100% հուսալիությամբ ՝ օգտագործելով picaxe microcontr
Պատրաստեք ձեր սեփական գեղեցիկ զգեստի EeePC / Netbook քսակը մոտ 8 դոլարով (և խնայեք 91 դոլար Redmaloo- ից գնելու փոխարեն). 5 քայլ (նկարներով)
Պատրաստեք ձեր սեփական գեղեցիկ զգեստը EeePC / Netbook- ի համար ՝ մոտ 8 դոլարով (և խնայեք 91 դոլար Redmaloo- ից գնելու փոխարեն). Այն կպահի ձեր նեթբուքը, ձեզ կտա մկնիկի պահոց, ինչ -որ յուրահատուկ, գեղեցիկ և ձեռքով ինչ -որ բան օգտագործելու զգացում և շռայլության զգացում