Სარჩევი:
- ნაბიჯი 1: ნაწილები და ინსტრუმენტები
- ნაბიჯი 2: ცალი და შეკრება
- ნაბიჯი 3: პროგრამული უზრუნველყოფა - (Arduino)
- ნაბიჯი 4: პროგრამული უზრუნველყოფა - რობოტი ლეპტოპი (ვებ სერვერი)
- ნაბიჯი 5: პროგრამული უზრუნველყოფა - (ვებ გვერდი)
- ნაბიჯი 6: დასრულდა
ვიდეო: შექმენით ვებთან დაკავშირებული რობოტი (დაახლოებით 500 დოლარად) (არდუინოს და ნეტბუქის გამოყენებით): 6 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:21
ეს ინსტრუქცია გაჩვენებთ თუ როგორ უნდა ავაშენოთ თქვენი საკუთარი ვებ დაკავშირებული Robot (Arduino მიკრო კონტროლერის და Asus eee კომპიუტერის გამოყენებით). რატომ გსურთ ვებთან დაკავშირებული რობოტი? რა თქმა უნდა, თამაში. გაუშვით თქვენი რობოტი ოთახისა თუ ქვეყნის მასშტაბით, არაფერს იყენებთ სკაიპისა და ვებ ბრაუზერის გარდა (არაფერია საკონტროლო კომპიუტერზე დასაყენებლად). Ამის შემდეგ? ჩაერთეთ პროგრამულ უზრუნველყოფაში და შეცვალეთ ის, როგორც მოგწონთ, დაამატეთ GPS, რომ ნახოთ თუ სად მართავთ რუკაზე, დაამატეთ ტემპერატურის სენსორები თქვენს სახლში ტემპერატურის გრადიენტების დასადგენად, ან სონარის სენსორები, რათა დაამატოთ კონტროლი თქვენს ვებ – გვერდზე მძღოლები შეიძლება და ვერ შეხვდებიან. Მახასიათებლები:
- იაფი - (500 აშშ დოლარი, თუ თქვენ ყიდულობთ ყველა ნაწილს ახალს და მნიშვნელოვნად უფრო იაფად, თუკი თქვენ იჭრებით თქვენი ნაწილების ყუთში)
- რობოტის გაკონტროლებისთვის საჭიროა მხოლოდ ვებ ბრაუზერი - (და სკაიპი თუ გსურთ ნახოთ სად მართავთ)
- ღია წყარო და ადვილად ადაპტირებადი - (იყენებს Arduino მიკროკონტროლერს, ვებ სერვერის დამუშავება და ყველა პროგრამული უზრუნველყოფა შეიძლება გაშვებული იყოს Linux– ზე (ყველა კოდი ასევე მკაცრად არის კომენტარი, რომ ხტომა და რამის შეცვლა ადვილი იყოს))
- მოდულური დიზაინი (არა მთლიანად ინტეგრირებული სისტემა, თუ გინდათ რომ გამოიყენოთ სხვა სახის ვიდეო კონფერენციის სერვისი, არ ინერვიულოთ, ან თუ თქვენ გაქვთ საბეჭდი ბეჭედი და არა Arduino უბრალოდ მონიშნეთ კოდის მცირე ნაწილი და ჩასვით იგი)
აქ არის სწრაფი ვიდეო, თუ როგორ გამოიდევნება ჩემი ვებ - რობოტი სამზარეულოდან.
ნაბიჯი 1: ნაწილები და ინსტრუმენტები
საჭიროა მხოლოდ რამდენიმე ნაწილი: რობოტი: Arduino კონტროლირებადი სერვო რობოტი - (SERB) ($ 175 @ oomlout.com) ან (გააკეთე შენი საკუთარი)
ღია კოდის რობოტი, რომელიც იყენებს Arduino მიკროკონტროლს, როგორც თავის ტვინს
(ნებისმიერი ორმაგი servo robot პლატფორმა arduino– ით შეიძლება გამოყენებულ იქნას (ვარიანტი 1) (გთხოვთ მომწეროთ სხვა ვარიანტების აღმოჩენის შემთხვევაში) კომპიუტერი: Asus eee PC 4G ($ 280) (@Best Buy)
პატარა იაფი ლეპტოპი, რომელიც იდეალურია ამ მიზნით
(ნებისმიერი ლეპტოპი (ან დესკტოპი თუ გსურთ აკორდით გაშვება) შეიძლება გამოყენებულ იქნას დამუშავების ესკიზები შეიძლება გამოყენებულ იქნას) ლეპტოპის მაგიდა: აკრილის ლაზერული მოჭრა ($ 25 (@ oomlout)) ან (ააშენეთ საკუთარი ნაბიჯი 3)
რამდენიმე დამატებითი აკრილის ნაჭერი, რომლებიც იჭრება (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).eps)
- გაჭერით ისინი 3 მმ (1/8 ") აკრილისგან
ვარიანტი 3: (გადაახვიეთ ხერხი)
- ჩამოტვირთეთ გადახვევის ხერხი ქვემოთ (03-WEBB-ScrollSaw Pattern (A4). Pdf (A4 ზომის ქაღალდისთვის) ან 03-WEBB-ScrollSaw ნიმუში (წერილი). Pdf (ასო ზომის ქაღალდისთვის))
- ორმაგად შეამოწმეთ, რომ დაბეჭდვისას ის არ გაფართოვდა (დაბეჭდილი მმართველების გაზომვით)
- წებოვანა 3 მმ (1/8 ") აკრილის ნაჭერზე და გაჭერით ნაჭრები.
შეკრება: ჩამოტვირთეთ ასამბლეის სახელმძღვანელო (04-WEBB-ასამბლეის გზამკვლევი. Pdf) ქვემოთ და ლეპტოპის მაგიდა ერთად დააწყვეთ.
ნაბიჯი 3: პროგრამული უზრუნველყოფა - (Arduino)
მათთვის, ვინც ახალია Arduino– ში, შეამოწმეთ დაწყების შესანიშნავი სახელმძღვანელო Arduino.cc– ზე, პირველ რიგში, Arduino– ზე გაშვებული პროგრამული უზრუნველყოფიდან. ეს არის ძალიან მარტივი პროგრამა, რასაც Arduino აკეთებს მონაცემთა სერიული პორტის მონიტორინგი. ის რასაც ეძებს არის საუბარი 5 ბაიტი.
- ბაიტი 1-3 (შეამოწმეთ ბაიტები "AAA")
- ბაიტი 4 ბრძანება (ეუბნება არდუინოს რა უნდა გააკეთოს) (მხარდაჭერილი ბრძანებები 'F' - წინ, 'B' - უკან, 'L' - მარცხნივ, 'R' - მარჯვნივ, 'S' - სიჩქარე, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
- ბაიტი 5 პარამეტრი - გადაადგილების ბრძანებებისათვის ეს ინტერპრეტირებულია როგორც დროის ინტერვალი (პარამეტრი * 100 ms), ხოლო სიჩქარისთვის პროცენტული 0-100
კოდი დეტალურად არის განმარტებული და ამ ჩარჩოს გათვალისწინებით დამატებითი ბრძანებების დამატება ადვილი უნდა იყოს. გადმოსატვირთად:
- ჩამოტვირთეთ თანდართული zip ფაილი. (05-WEBB-Arduino Code.zip)
- გახსენით თქვენი Arduino Sketch დირექტორია. (ნაგულისხმევი: ჩემი დოკუმენტები / Arduino)
- გახსენით თქვენი არდუინოს განვითარების გარემო და ატვირთეთ თქვენს არდუინოში.
დააკოპირეთ და ჩასვით
- დააკოპირეთ კოდი ქვემოდან.
- ჩასვით არდუინოს განვითარების გარემოში.
- ატვირთეთ თქვენს არდუინოში.
დანართი: არდუინოს პროგრამა
/ * * Arduino კონტროლირებადი ვებ დაკავშირებული რობოტი (WEBB) - სერიული მასპინძელი * დამატებითი ინფორმაციისთვის ეწვიეთ: https://www.oomlout.com/serb * * ქცევა: Arduino უსმენს მის სერიულ პორტს ბრძანებისათვის * 254 ფორმატში, 88, 88, (COMMAND), (TIME) * მხარდაჭერილი ბრძანებები - & aposF & apos - 70 - Forward * & aposB & apos - 66 - Backward * & aposL & apos - 76 - Left * & aposR & apos - 82 - Right * & aposS & apos - 83 - Speed * & aposX & aposL - 88 - SetS * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - გაჩერება * მხარდაჭერილი დროები - 0 - 255 (0 -დან 25.5 წამამდე) ღირებულება * 100 მილიწამი * sp * გაყვანილობა: მარჯვენა სერვო სიგნალი - პინი 9 * მარცხენა სერვის სიგნალი - პინი 10 * * ლიცენზია: ეს ნამუშევარი ლიცენზირებულია Creative Commons * Attribution-Share Alike 3.0 Unported License. ამ ლიცენზიის ასლის სანახავად ეწვიეთ * https://creativecommons.org/licenses/by-sa/3.0/ * ან გაგზავნეთ წერილი Creative Commons– ში, 171 Second * Street, Suite 300, სან ფრანცისკო, კალიფორნია 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" #define checkByte2 65 // "A "#განსაზღვრეთ checkByte3 65 //" A "// ------------------------------------------ -------------------------------------- // ARDUINO CONTROLLED SERVO Robot (SERB) პრეამბულა#მოიცავს #განსაზღვრეთ LEFTSERVOPIN 10 // პინი მარცხენა სერვო უკავშირდება#განსაზღვრეთ RIGHTSERVOPIN 9 // მარჯვენა მარჯვენა სერვერი უკავშირდებაServo leftServo; Servo rightServo; int leftSpeed = 50; // ინარჩუნებს რობოტების სიჩქარეს leftServo // პროცენტი 0 -დან 100int შორის rightSpeed = 100; // ინახავს რობოტების სიჩქარეს მარჯვნივServo // პროცენტი 0-დან 100-მდე // ARDUINO CONTROLLED SERVO Robot (SERB) პრეამბულა // ------------------- ------------------------------------------------------ ----- // იღებს ყველაფერს და მუშაობს void setup () {Serial.begin (9600); // იწყებს სერიულ პორტს serbSetup (); // ადგენს ყველა საჭირო // ქინძისთავის მდგომარეობას და ამატებს servos თქვენს ესკიზს} // მთავარი პროგრამის loopvoid loop () {serbPollSerialPort (); // განუწყვეტლივ უყურებს სერიულ პორტს // თუ არსებობს მონაცემები ის ამუშავებს} // ------------------------------ ------------------------------------------ // ARDUINO სერიული სერვერის რუტინების დაწყება/ * * ამუშავებს ბრძანებებს arduino & aposs სერიულ პორტში */void serbPollSerialPort () {int dta; // ცვლადი, რომ შეინარჩუნოს სერიული ბაიტი if (Serial.available ()> = 5) {// თუ 5 ბაიტი არის ბუფერში (სიგრძე pf სრული მოთხოვნა) dta = Serial.read (); if (dta = checkByte1) {// ამოწმებს პირველი შემოწმების ბაიტს dta = Serial.read (); if (dta = checkByte2) {// ამოწმებს მეორე შემოწმების ბაიტს dta = Serial.read (); if (dta = checkByte3) {// ამოწმებს მესამე შემოწმების ბაიტს int command = 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 (ბრძანება == BACKWARD) {goBackward (); შეფერხება (param1 * 100); goStop ();} // თუ სხვაგან უკან (if command == LEFT) {goLeft (); შეფერხება (param1 * 100); goStop ();} // თუ სხვაგან დარჩა, თუ (ბრძანება == RIGHT) {goRight (); შეფერხება (param1 * 100); goStop ();} // თუ სხვაგან სწორია (ბრძანება == SETSPEED) {setSpeed (param1);} // თუ სიჩქარე სხვაგვარად არის თუ (ბრძანება == STOP) {goStop ();} // თუ სხვაგან გაჩერდება ბრძანება == SETSPEEDLEFT) {setSpeedLeft (param1);} // თუ მარცხენა სიჩქარე დაყენებულია სხვა შემთხვევაში (ბრძანება == SETSPEEDRIGHT) {setSpeedRight (param1);} // თუ სწორი სიჩქარე სხვაგვარად არის მითითებული {// თუ არაღიარებული ბრძანება გააკეთეთ ცოტათი წადი მარცხნივ(); დაგვიანება (150); წადი მარჯვნივ(); დაგვიანება (150); goStop (); }} // -------------------------------------------------- -------------------- ჩართული რუტინები*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // აყენებს მარცხენა servo სიგნალის პინს // გამომავალი pinMode (RIGHTSERVOPIN, OUTPUT); // აყენებს მარჯვენა სერვო სიგნალის პინს // leftServo.attach (LEFTSERVOPIN) გამოსაყვანად; // ანიჭებს მარცხენა სერვისს rightServo.attach (RIGHTSERVOPIN); // ანიჭებს მარჯვენა servo goStop ();}/ * * ადგენს რობოტის სიჩქარეს 0- (გაჩერებული) და 100- (სრული სიჩქარე) * შენიშვნა: სიჩქარე არ შეცვლის მიმდინარე სიჩქარეს თქვენ უნდა შეცვალოთ სიჩქარე * შემდეგ დარეკეთ ერთზე ცვლილებების განხორციელებამდე.*/ 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) რუტინების დასრულება // ---------------------------- --------------------------------------------------
ნაბიჯი 4: პროგრამული უზრუნველყოფა - რობოტი ლეპტოპი (ვებ სერვერი)
(დამუშავება არის ღია კოდის პროგრამირების ენა და გარემო, რომლის დაწყებაც ძალიან ადვილია. დამატებითი ინფორმაციისათვის ეწვიეთ დამუშავებას) პროგრამული უზრუნველყოფა, რომელიც მუშაობს რობოტ ლეპტოპზე ასევე საკმაოდ მარტივია. ეს არის საკმაოდ დამწყები ვებ სერვერი (ვებ გვერდის მოთხოვნების მოსმენა ვებ ბრაუზერიდან), მცირე მომხმარებლის ინტერფეისი (მისი დაყენება) და ვებ სერვერიდან Arduino– ზე მიღებული ბრძანებების გადაცემის საშუალებები. სწრაფად ინსტალაცია: (ფანჯრებზე)
- ჩამოტვირთეთ zip ფაილი ქვემოთ (06-WEBB- დამუშავების ვებ სერვერი (Windows exe). Zip)
- გახსენით იგი და გაუშვით.exe ფაილი (_WEBB_WebServer_RobotComputer.exe)
დამუშავების პროცესში შესწორება:
- ჩამოტვირთეთ zip ფაილი ქვემოთ (06-WEBB- დამუშავების ვებ სერვერი (წყაროს ფაილები). Zip)
- გახსენით სადმე თქვენს კომპიუტერში.
- გახსენით დამუშავების გარემო და გახსენით (_WEBB_WebServer_RobotComputer.pde)
შესამოწმებლად:
- გაუშვით პროგრამა.
- ყუთში #1 განთავსდება თქვენს კომპიუტერში არსებული კომუნალური პორტების სია (დააწკაპუნეთ ერთზე, რომელთანაც დაკავშირებულია თქვენი Arduino. (თქვენი რობოტი რამდენჯერმე დაიძაბება კომპიუტერის შეერთებისას და არჩეული გვერდით გამოჩნდება ცისფერი წერტილი) კომ პორტი)
- ყუთში #2 შეამოწმეთ არის თუ არა თქვენი Arduino დაკავშირებული. დააწკაპუნეთ ერთ ისარზე და ვიმედოვნებთ, რომ თქვენი რობოტი დაწკაპუნებული მიმართულებით გადავა ნახევარი წამის განმავლობაში.
- ყუთში #3 დააჭირეთ ღილაკს "დაწყება" ვებ სერვერის დასაწყებად.
- გახსენით ბრაუზერი (რობოტის ლეპტოპზე) და ეწვიეთ 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 * * ქცევა: პროგრამა უსმენს 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 - სიჩქარე * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 -დან 25.5 წამამდე) მნიშვნელობა * 100 მილიწამი * * ასევე ემსახურება ბრაუზერის საკონტროლო ვებ გვერდს, თუ ითხოვთ ControlPage.html * * ოპერაცია: 1. დააწკაპუნეთ Comm პორტზე, რომელთანაც დაკავშირებულია თქვენი Arduino * 2. გამოიყენეთ სატესტო ღილაკები, რომ ნახოთ თქვენი arduino უსმენს * (წავა ნახევარი წამის განმავლობაში დაწკაპუნებული მიმართულებით) * 3. დააწკაპუნეთ დაწყება და თქვენი ვებ სერვერი მოუსმინეთ მოთხოვნებს * * * ლიცენზია: ეს ნამუშევარი ლიცენზირებულია Creative Commons * Attribu– ს ქვეშ tion-Share Alike 3.0 Unported ლიცენზია. ამ ლიცენზიის ასლის სანახავად ეწვიეთ * https://creativecommons.org/licenses/by-sa/3.0/ * ან გაგზავნეთ წერილი Creative Commons– ში, 171 Second * Street, Suite 300, სან ფრანცისკო, კალიფორნია 94105, * ᲐᲨᲨ. * */იმპორტის დამუშავება. სერიალი. *; // სერიული ბიბლიოთეკის იმპორტი სერიული გამოსაყენებლად (არდუინოსთან საუბრისათვის) იმპორტი დამუშავების. net.*; // ქსელის ბიბლიოთეკის იმპორტი სერვერის გამოსაყენებლად (ინტერნეტთან საუბრისთვის)/ * სერიული პორტი დაკავშირებული ცვლადები */int serialPortIndex = -1; // სერიული პორტის ინდექსი, რომელსაც ჩვენ ვიყენებთ Serial.list () listString commOptions; // ცვლადი, რომ შეინახოთ Serial.list () ისე, რომ არ იყოს საჭირო გამოკითხვა // სერიული პორტები ყოველ ჯერზე, როდესაც ჩვენ გვსურს მისი მოხსნა (გამოკითხვა იწვევს // გადასვლას arduino servos- ში) სერიული serialPort; // ხდის სერიულ პორტს მისამართს ამ ესკიზის განმავლობაში/ * გრაფიკული და რენდერენალური დაკავშირებული ცვლადები */PFont შრიფტი; // აქვეყნებს შრიფტს, ასე რომ საჭიროა მხოლოდ ერთხელ ჩატვირთვა (Arial-72)/ * ქსელთან დაკავშირებული ცვლადები */სერვერი wServer; // სერვერი, რომელიც ამუშავებს ვებ მოთხოვნის პორტს = 12345; // პორტი, რომელსაც სერვერი უსმენს ციკლს = 0; // ითვლის ხატვის მარყუჟის რამდენჯერ შესრულებას (გამოიყენება // "გაშვებული" ტექსტის გასანახლებლად)/ * სასარგებლო ცვლადები */PImage bg; // ფონის სურათი ამჟამად / WEBB-background.png/ * * ღილაკთან დაკავშირებული ცვლადი * (ღილაკები ძალიან უხეშად არის შესრულებული, შემოსაზღვრული ყუთები ინახება და გრაფიკული და ტექსტი * დახატულია ფონის სურათზე) ე.ი. ღილაკის ცვლადების გადატანა არ შეცვლის ღილაკების გარეგნობას */ღილაკი comm1; ღილაკი comm2; ღილაკი comm3; ღილაკი comm4; // ღილაკები სწორი სერიული პორტის შესარჩევად ღილაკი მარჯვნივ; ღილაკი დარჩა; ღილაკი ქვემოთ; // მიმართულების ღილაკები, რომ შეამოწმოთ რობოტი პასუხობს ღილაკს ვებ სერვერი; // ვებ სერვერის დაწყების ღილაკი/ * * ადგენს ყველაფერს */void setup () {frameRate (5); // ოდნავ ანელებს ესკიზს ისე, რომ არ იყოს ისეთი სისტემა, როგორიც არის გადასახადი bg = loadImage ("WEBB-background.png"); // იტვირთება ფონის სურათი (ინახება ესკიზის საქაღალდეში) ზომა (700, 400); // ადგენს ესკიზის ფანჯრის ზომას font = loadFont ("ArialMT-72.vlw"); // იტვირთება შრიფტი, რომელსაც ჩვენ გამოვიყენებთ ამ ესკიზის საშუალებით commOptions = Serial.list (); // გამოკითხვა სერიულ პორტებზე და იღებს ხელმისაწვდომი პორტების ჩამონათვალს // (ამის გაკეთება მხოლოდ ერთხელ იკავებს რობოტს, რომ არ იძაბოს ყოველ ჯერზე, როდესაც სერიული პორტი გამოკითხვაშია) defineButtons (); // განსაზღვრავს შემოსაზღვრულ ყუთებს თითოეული ღილაკის ფონისთვის (bg); // ხატავს ფონის სურათს (ამ სურათს აქვს ღილაკის ყველა გრაფიკა)}/ * ესკიზებს მთავარ მარყუჟს */void draw () {if (cycleCount == 0) {//- ზარის დახაზვის რუტინები drawCommBox (); // ხატავს ემულეტებს Comm ყუთში (ყუთი 1) drawTestBox (); // ხატავს ყველა ელემენტს საცდელ ყუთში (ყუთი 2) drawWebServerBox (); // ხატავს WebServer Box- ის ყველა ელემენტს (ყუთი 3)} //- სამუშაო რუტინების გამოძახება pollWebServer (); // გამოკითხვა ვებ სერვერზე იმის დასადგენად, არის თუ არა მოთხოვნა შემოსული ქსელის მეშვეობით} // ------------------------------ ---------------------------------------------- // დასაწყისი მიაპყროს რუტინები (დაიყოს მხოლოდ კოდის წასაკითხად)/ * * გათამაშების განახლების რუტინა (შესრულებულია ყოველ ციკლში) კომუნიკაციის ყუთში (ყუთი 1) */void drawCommBox () {შევსება (0, 0, 0); // შეავსეთ შევსება შავი textFont (შრიფტი, 15); // დააყენეთ შრიფტი მარჯვენა ზომისთვის (int i = 0; i 0) {გაშვებული = გაშვებული + ".";} // წერტილების რაოდენობა ემყარება cycleCount if ((cycleCount /1)> 1) { გაშვებული = გაშვებული + ".";} თუ ((cycleCount / 1)> 2) {გაშვებული = გაშვებული + ".";} თუ ((cycleCount / 1)> 3) {cycleCount = 0;} ტექსტი (გაშვებული, 520, 210); } cycleCount ++; // ყოველ ჯერზე ციკლის მეშვეობით რიცხვი იზრდება ერთი} // რიტუალების დახაზვის დასასრული // ---------------------------------- ------------------------------ // ------------------ ---------------------------------------------- // სამსახურის რიტუალების დაწყება/ * * mousePressed იძახება ყოველ ჯერზე თაგვის დაჭერისას * ეს ამოწმებს არის თუ არა თაგვი ღილაკზე შემოსაზღვრულ ყუთში * და არის თუ არა შესაბამისი რუტინა */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // ცვლილებები საკომუნიკაციო პორტში 0 ინდექსში Serial.list () სხვა შემთხვევაში, თუ (comm2.pressed ()) {updateSerialPort (1);} // ცვლილებები საკომუნიკაციო პორტში ინდექსში 1 სერიალში.list () else if (comm3.pressed ()) {updateSerialPort (2);} // ცვლილებები საკომუნიკაციო პორტში ინდექსში 2 Serial.list () სხვა შემთხვევაში თუ (comm4.pressed ()) {updateSerialPort (3);} // ცვლილებები საკომუნიკაციო პორტში ინდექსში 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 ();} // იწყებს ვებ სერვერის ციკლსCount = 0; ფონი (bg); // ხელახლა ხატავს ფონის სურათს (ამ სურათს აქვს ღილაკის ყველა გრაფიკა) დახაზეთ ();}/ * * შესრულების შემდეგ დარეკვისას ის ამოწმებს სერვერს, არის თუ არა რაიმე ელოდება კავშირს * თუ არის ლოდინის კავშირი, რომელიც იზიდავს გამოაქვთ მოთხოვნა და გადასცემს მას parseRequest (სიმებიანი) * რუტინას ზედმეტი ტექსტის მოსაშორებლად. ეს შემდეგ იგზავნება interpretRequest (სიმებიანი) რუტინაში * შესაბამისი მოქმედების რუტინის გამოძახების მიზნით (ანუ ინსტრუქციის გაგზავნა რობოტზე).* * მოთხოვნა მიიღება კომპიუტერის მისამართისა და პორტის ვებ ბრაუზერში შეყვანის გზით * ადგილობრივი აპარატისთვის "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, გეკოს მსგავსად) * მიღება: * // * * მიღება-ენა: jw.org ka-Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * მასპინძელი: 127.0.0.1:12345 * კავშირი: Keep-Alive * * მაგალითი პასუხი (დამუშავებული მოთხოვნისათვის) * HTTP/1.1 200 OK * კავშირი: დახურვა * შინაარსი-ტიპი: ტექსტი/html * * ბრძანება: F param1: 100 */void pollWebServer () {if (wServer! = null) {// თუ ვებ სერვერი მუშაობს კლიენტის მოთხოვნა = wServer.available (); // ჩატვირთეთ მომდევნო კლიენტი ხაზში // სერვერში (null თუ მოთხოვნა არ ელოდება) if (request! = Null) {// თუ არსებობს მოთხოვნის პროცესი ის String fullRequest = request.readString (); // შეინახეთ მოთხოვნის შინაარსი სტრიქონის სახით სიმებიანი ip = request.ip (); // შეინახეთ კლიენტების ip მისამართი, როგორც სიმებიანი String requestString = parseRequest (fullRequest.toUpperCase ()); // ამოიღეთ ყველა დამატებითი // ინფორმაცია, რომელიც ტოვებს მხოლოდ მოთხოვნის სტრიქონს (ტექსტი GET- ის შემდეგ) // (გადადის ზედა ასოზე, რათა გაამარტივოს სიმებიანი ტესტირება) if (requestString.indexOf ("REQUEST?")! = -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 = ახალი სერიალის ჩატვირთვამდე (ეს, Serial.list () [serialPortIndex], 9600); // შექმენით ახალი სერიული ობიექტი Arduino 9600 Baud– თან დასაკავშირებლად}} * * * იღებს მოთხოვნის სტრიქონს (მაგ.: "request? Command = F & param1 = 100") და გამოაშკარავებს ბრძანებას * და param1 და გადასცემს მას arduino (დამატებითი პარამეტრების დამატება ან არა arduino ბრძანებების გაკეთება აქ) */String interpretRequest (სიმებიანი მოთხოვნა სიმებიანი) {String returnValue = "OK"; // ამზადებს returnValue ცვლადი String ბრძანებას; // შემდეგი სამი ხაზი ამოიღებს მნიშვნელობას "command =" // (დამატებითი ხაზი არის იმ შემთხვევაში, თუ ბრძანების პარამეტრი არის მოთხოვნის // ბოლოს და არ მოჰყვება & 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 =". სიგრძე ());} სხვა {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // აქცევს param1 სტრიქონს მთელი რიცხვი sendRobotCommand (ბრძანება, param1); // აგზავნის ბრძანებას რუტინაში, რომელიც აგზავნის მას Arduino returnValue = "command:" + command + "param1:" + param1; // ამ დროისთვის მხოლოდ გაანალიზებული ბრძანება, მაგრამ გაგზავნა // როგორც html, ასე რომ ფორმატირება შეიძლება შეიტანოს return returnValue;}/ * * იღებს ბრძანებას (ამჟამად ერთი ასო) და პარამეტრს (ერთი ბაიტი 0-255) და აგზავნის მას arduino * რომელიც უსმენს და ახსენებს * Currrently მხარდაჭერილი ბრძანებები * F - */void sendRobotCommand (სიმებიანი ბრძანება, int param1) {println ("command:" + command + "time:" + param1); სიმებიანი 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+სიმაღლე) {დაბრუნება true; } else {დაბრუნება false; }}}
ნაბიჯი 5: პროგრამული უზრუნველყოფა - (ვებ გვერდი)
ჩვენ თითქმის დავასრულეთ ყველაფერი რაც დარჩა არის საუბარი თქვენს რობოტთან. სასაუბროდ: (ადგილობრივ ქსელში -ფანჯრებზე)
- აღმოაჩინეთ ლეპტოპის კომპიუტერის ადგილობრივი IP მისამართი. ამისათვის გადადით "Start / Programs / Accesories / Command Prompt" და როდესაც ტერმინალის ფანჯარა გაიხსნება ჩაწერეთ "ipconfig". ჩაწერეთ "IP მისამართი" და გადადით სხვა კომპიუტერზე თქვენს ადგილობრივ ქსელში.
- გახსენით ბრაუზერი, ჩაწერეთ "https:// (robot computer ip): 12345/ControlPage.html
- საკონტროლო ვებ გვერდი უნდა ჩატვირთოს, "IP მისამართის" ყუთში ჩაწერეთ რობოტი კომპიუტერი ip.
- დაიწყეთ თქვენი რობოტის კონტროლი.
სასაუბროდ: (ინტერნეტით) ახლა, როდესაც ის მუშაობს ადგილობრივად, მისი საუბარი ინტერნეტით სულ რამდენიმე ნაბიჯია.
- (ყველაზე რთული ნაბიჯი) შექმენით პორტის გადაგზავნა - თქვენს კომპიუტერს უნდა უსმინოს ინტერნეტს და არა მხოლოდ ადგილობრივ ქსელს. ამისათვის თქვენ უნდა უთხრათ თქვენს როუტერს, რომ გადასცეს გარკვეული მოთხოვნები რობოტის მაკონტროლებელ კომპიუტერს. ეს არის ცოტა რთული და სცილდება ამ ინსტრუქციის ფარგლებს. თუმცა, თუ თქვენ ეწვევით PortForward.com– ს, ისინი მოგცემთ ყველაფერს რაც თქვენ უნდა იცოდეთ თქვენი როუტერის კონფიგურაციის შესახებ (თქვენ უნდა გადააგზავნოთ პორტი 12345 თქვენს რობოტ ლეპტოპზე)
- შემდეგ აღმოაჩინეთ თქვენი ინტერნეტ IP (ეწვიეთ WhatIsMyIP.com)
- საბოლოოდ გაუშვით სკაიპის ვიდეო ზარი და მიიღეთ ვისთანაც ესაუბრებით ეწვიეთ "https:// (ინტერნეტ IP): 12345/ControlPage.html"
- ჩაწერეთ ინტერნეტის IP "IP მისამართი" ყუთში საკონტროლო ვებგვერდზე და თქვენი ვებ დაკავშირებული რობოტი შორსაა განდევნილი.
ნაბიჯი 6: დასრულდა
ისე ეს არის. ვიმედოვნებ, რომ გაერთობით და გაერთობით თქვენი რობოტის შორიდან მართვით. თუ რაიმე პრობლემა გაქვთ პროგრამულ უზრუნველყოფასთან ან აპარატურასთან, მოგერიდებათ დატოვეთ კომენტარი და მე შევეცდები დაგეხმაროთ. თუ გსურთ უფრო დახვეწილი პროექტების შემოწმება სცადეთ ეწვიოთ: oomlout.com
გირჩევთ:
ვებთან დაკავშირებული ციფრული საათი: 7 ნაბიჯი
ვებთან დაკავშირებული ციფრული საათი: იპოვა $ 10 ციფრული საათი ამაზონში. ახლა დააკონფიგურირეთ, რომ მიიღოთ დრო ინტერნეტიდან
ვებთან დაკავშირებული SMART LED ანიმაციური საათი ვებ დაფუძნებული მართვის პანელით, დროის სერვერის სინქრონიზებული: 11 ნაბიჯი (სურათებით)
ვებ – გვერდზე ჩართული SMART LED ანიმაციური საათი ვებ – დაფუძნებული მართვის პანელით, დროის სერვერის სინქრონიზებული: ამ საათის ისტორია შორსაა-30 წელზე მეტი ხნის წინ. მამაჩემი იყო ამ იდეის პიონერი, როდესაც მე ვიყავი მხოლოდ 10 წლის, დიდი ხნით ადრე LED რევოლუციამდე - უკან, როდესაც LED იყო 1/1000 სიკაშკაშე მათი ამჟამინდელი ბრმა ბრწყინვალებისა. ჭეშმარიტი
[არდუინოს რობოტი] როგორ გავაკეთოთ მოძრავი გადაღების რობოტი - ცერა თითის რობოტი - სერვო ძრავა - წყაროს კოდი: 26 ნაბიჯი (სურათებით)
[არდუინოს რობოტი] როგორ გავაკეთოთ მოძრავი გადაღების რობოტი | ცერა თითის რობოტი | სერვო მოტორი | წყაროს კოდი: Thumbs Robot. გამოყენებული იქნა MG90S სერვო ძრავის პოტენომეტრი. ეს არის ძალიან სახალისო და მარტივი! კოდი ძალიან მარტივია. ეს მხოლოდ 30 სტრიქონია. როგორც ჩანს მოძრაობის გადაღება. გთხოვთ დატოვოთ ნებისმიერი შეკითხვა ან გამოხმაურება! [ინსტრუქცია] წყაროს კოდი https: //github.c
გააკეთეთ საკუთარი სასიამოვნო თექის EeePC / Netbook ჩანთა დაახლოებით 8 დოლარად (და დაზოგეთ 91 აშშ დოლარი Redmaloo– დან ყიდვის ნაცვლად): 5 ნაბიჯი (სურათებით)
შექმენით თქვენი საკუთარი ლამაზი თექის EeePC / Netbook ჩანთა დაახლოებით 8 დოლარად (და დაზოგეთ 91 აშშ დოლარი Redmaloo– დან ყიდვის ნაცვლად): ეს ინსტრუქცია გაჩვენებთ, როგორ გააკეთოთ საკუთარი, ძალიან ლამაზი და კარგი გარეგნობის ლეპტოპი ან კიდევ უკეთესი ნეტბუქის ჩანთა. ის შეინახავს თქვენს ნეტბუქს, მოგცემთ მაუსის ბალიშს, რაღაც უნიკალური, სასიამოვნო და ხელნაკეთი გამოყენების შეგრძნებას და გუდის გრძნობას
შექმენით ძალიან პატარა რობოტი: შექმენით მსოფლიოში ყველაზე პატარა ბორბლიანი რობოტი გრიპით .: 9 ნაბიჯი (სურათებით)
ააშენეთ ძალიან პატარა რობოტი: შექმენით მსოფლიოში ყველაზე პატარა ბორბლიანი რობოტი გრიპით .: შექმენით 1/20 კუბური დიუმიანი რობოტი გრიპით, რომელსაც შეუძლია პატარა საგნების აყვანა და გადატანა. მას აკონტროლებს Picaxe მიკროკონტროლერი. დროის ამ მომენტში, მე მჯერა, რომ ეს შეიძლება იყოს მსოფლიოში ყველაზე პატარა ბორბლიანი რობოტი გრიპით. ეს უეჭველად იქნება