Vebə Bağlı Robot yaradın (təxminən 500 dollara) (Arduino və Netbook istifadə edərək): 6 addım (şəkillərlə)
Vebə Bağlı Robot yaradın (təxminən 500 dollara) (Arduino və Netbook istifadə edərək): 6 addım (şəkillərlə)
Anonim

Bu Təlimat sizə öz Web Bağlı Robotunuzu (Arduino mikro nəzarətçi və Asus eee pc istifadə edərək) necə quracağınızı göstərəcək. Niyə Veb Bağlı Robot istərdiniz? Əlbətdə oynamaq. Robotunuzu Skype və veb brauzerdən başqa heç bir şey istifadə etmədən otaqdan və ya ölkənin hər yerindən sürün (idarəetmə kompüterinə quraşdırılacaq heç nə yoxdur). Ondan sonra? Proqramı araşdırın və istədiyiniz kimi uyğunlaşdırın, GPS əlavə edin ki, harada sürdüyünüzü seyr edə biləsiniz, evinizdəki temperatur qradiyentlərini xəritəyə temperatur sensörləri və ya internetə nəzarət etmək üçün sonar sensorlar əlavə edin. Sürücülər qarşılaşa bilər və ola da bilməz. Xüsusiyyətləri:

  • Ucuz - (bütün hissələri yeni satın alsanız ~ 500 dollar və hissələrinizi çöp qutusunda qazarsanız xeyli ucuz olar)
  • Robotu idarə etməyə başladıqdan sonra yalnız bir veb brauzeri tələb olunur - (və harada sürdüyünüzü görmək istəyirsinizsə Skype)
  • Açıq Mənbə və Asanlıqla Uyğunlaşma - (Arduino mikro nəzarətçisindən istifadə edir, Veb server üçün işləmə və bütün proqramlar Linux -da işlədilə bilər (bütün kodlar daxil olmağı və işləri asanlaşdırmaq üçün çox şərh olunur))
  • Modul Dizayn (tamamilə fərqli bir sistem deyil, fərqli bir video konfrans xidmətindən istifadə etmək istəyirsinizsə, narahat olmayın və ya kiçik bir kod parçasına uyğun olaraq Arduino deyil, Əsas möhürünüz varsa)

Budur, İnternetə Bağlı Robotumun mətbəxdən qovulmasının sürətli bir videosu.

Addım 1: Parçalar və Alətlər

Yalnız bir neçə hissəyə ehtiyac var: Robot: Arduino Kontrollü Servo Robot - (SERB) (175 dollar @ oomlout.com) və ya (özünüz hazırlayın)

Arduino mikro nəzarət cihazını beyin olaraq istifadə edən açıq mənbə robotu

(arduino olan hər hansı bir ikili servo robot platforması istifadə edilə bilər (seçim 1) (başqa variantlar tapsanız mənə yazın) Kompüter: Asus eee PC 4G (280 dollar) (@Best Buy)

Kiçik bir noutbuk bu məqsəd üçün idealdır

(işləyə bilən hər hansı bir noutbuk (və ya bir akkordla çalışmaq istəsəniz) İşləmə eskizlərindən istifadə oluna bilər) Laptop Masası: Akrilik Lazer Kəsmə (25 dollar (@ oomlout)) və ya (3 -cü addımı özünüz qurun)

Dizüstü kompüterin oturması üçün bir masa vermək üçün (SERB) bağlanan bir neçə əlavə akril parça

Fındıq və Bols: (ev deposunda mövcuddur)

  • 3 mm x 10 mm bolt (x4)
  • 3 mm x 15 mm bolt (x4)
  • 3 mm qoz (x8)

Addım 2: Parçaların kəsilməsi və montaj

Laptop masanızın parçalarını almaq üçün üç seçim var. Seçim 1: (oomlout.com -dan satın alma)

lazerlə kəsilmiş masa parçaları və zəruri avadanlıqları oomlout -dan 25 dollara əldə edə bilərsiniz (burada)

Seçim 2: (Öz lazer kəsici və ya Ponoko.com üzərində kəsmə)

  • Aşağıdakı faylı yükləyin (03-WEBB-Akril Parçalar.cdr və ya 03-WEBB-Akril Parçalar (Ponoko P2).eps)
  • Onları 3 mm (1/8 ") akrilikdən kəsin

Seçim 3: (Kaydırma Testeresi)

  • Aşağıdan sürüşmə mişar nümunəsini yükləyin (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 ölçülü kağız üçün) və ya 03-WEBB-ScrollSaw Pattern (məktub).pdf (məktub ölçülü kağız üçün))
  • Çap edərkən ölçüsünün ölçülmədiyini iki dəfə yoxlayın (çap olunmuş hökmdarları ölçərək)
  • 3 mm (1/8 ") akrilik bir parça yapışdırın və parçaları kəsin.

Montaj: Aşağıdakı montaj təlimatını (04-WEBB-Montaj Kılavuzu.pdf) yükləyin və noutbuk masasını bir araya gətirin.

Addım 3: Proqram təminatı - (Arduino)

Arduino ilə yeni tanış olanlar üçün Arduino.cc -də böyük bir başlanğıc təlimatına baxın, əvvəlcə Arduino -da işləyən proqramlar. Bu çox sadə bir proqramdır, Arduino serial məlumatlarını izləmək üçündür. 5 bayt uzunluğunda bir söhbətdir.

  • Bayt 1-3 ("AAA" baytlarını yoxlayın)
  • Byte 4 Command (Arduinoya nə edəcəyini söyləyir) (Dəstəklənən əmrlər 'F' - İrəli, 'B' - Geri, 'L' - Sol, 'R' - Sağ, 'S' - Sürət, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Dur)
  • Bayt 5 Parametr - Hərəkət əmrləri üçün bu, bir zaman aralığı (Parametr * 100 ms), sürət üçün isə 0-100 arası bir faiz olaraq şərh olunur.

Kod hərtərəfli şərh olunur və bu çərçivədə əlavə əmrlərin əlavə edilməsi asan olmalıdır.

  • Əlavə edilmiş zip faylını yükləyin. (05-WEBB-Arduino Code.zip)
  • Arduino Sketch kataloqunuzu açın. (standart: Sənədlərim / Arduino)
  • Arduino inkişaf mühitinizi açın və Arduino -ya yükləyin.

Kopyalamaq və Yapışdırmaq üçün

  • Kodu aşağıdan kopyalayın.
  • Arduino inkişaf mühitinə yapışdırın.
  • Arduino -ya yükləyin.

Əlavə: Arduino Proqramı

/ * * Arduino Nəzarətli İnternetə Bağlı Robot (WEBB) - Serial Host * Ətraflı məlumat üçün bura daxil olun: https://www.oomlout.com/serb * * Davranış: Arduino 254 formatında bir əmr * üçün Serial portunu dinləyir, 88, 88, (KOMUT), (ZAMAN) * Dəstəklənən Komutlar - & aposF & apos - 70 - İrəli * & aposB & apos - 66 - Geri * & aposL & apos - 76 - Sol * & aposR & apos - 82 - Sağ * & aposS & apos - 83 - Sürət * & aposX & apos - 88 - SetSpeed * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Dəstəklənən Zamanlar - 0 - 255 (0 - 25.5 Saniyə) dəyəri * 100 millisaniyə * sp * Kablolama: Sağ Servo Sinyali - pin 9 * Sol Servo Sinyali - pin 10 * * Lisenziya: Bu iş Creative Commons * Attribution-Share Alike 3.0 Unported Lisenziyası altında lisenziyalaşdırılmışdır. * Bu lisenziyanın surətini görmək üçün * https://creativecommons.org/licenses/by-sa/3.0/ * ünvanına daxil olun və ya Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * ABŞ. * */// --------------------------------------------- ---------------------------- // ARDUINO SERIAL SERVER PREAMBLEİNİN BAŞLANMASI // Hər əmrə uyğun sabitlərin təyin edilməsi (həmçinin ascii kod nömrəsi))#İLƏ 70 müəyyən edin // F#GERİ GERİ 66 -nı təyin edin // B#SOL 76 -nı təyin edin // L#SAĞ 82 -ni təyin edin // R#SETSPEED 83 -ü təyin edin // S#STOP 67 -ni təyin edin // C#SETSPEEDLEFT 88 -i təyin edin // X #define SETSPEEDRIGHT 89 // Y/ *Üç yoxlama baytı (robotun təsadüfi serial məlumatlarına cavab verməməsi üçün istifadə olunur) hal -hazırda "AAA" */#define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ARDUINO KONTROLLÜ SERVO ROBOTUNUN BAŞLANMASI (SERB) PREAMBLE#include #define LEFTSERVOPIN 10 // Sol servonun bağlı olduğu pin#define RIGHTSERVOPIN 9 // Sağ servonun bağlı olduğu pinServo solServoya; Servo sağ Servo; int leftSpeed = 50; // robotlar leftServo sürətini saxlayır // 0 ilə 100int arasında bir faiz rightSpeed = 100; // robotların sürətini sağda saxlayırServo // 0 ilə 100 arasında bir faiz // ARDUINO NAZARATLI SERVO ROBOTUNUN SONU (SERB) PREAMBLE // ------------------- -------------------------------------------------- ----- // Hər şeyi işə salır void setup () {Serial.begin (9600); // serbSetup () seriyalı portunu işə salır; // bütün zəruri // sancaqların vəziyyətini təyin edir və eskizinizə servo əlavə edir} // Əsas proqram loopvoid loop () {serbPollSerialPort (); // ardıcıl olaraq porta baxır // məlumat varsa onu işlədir} // ------------------------------ ----------------------------------------- // ARDUINO SERIAL SERVER RUTİNLƏRİNİN BAŞLANMASI/ * * Arduino & aposs serial portuna çatdırılan əmrləri işlədir */void serbPollSerialPort () {int dta; // serial baytı tutmaq üçün dəyişən, əgər (Serial.available ()> = 5) {// 5 bayt buferdədirsə (uzunluq tam bir sorğu) dta = Serial.read (); if (dta = checkByte1) {// İlk yoxlama baytını yoxlayır dta = Serial.read (); if (dta = checkByte2) {// İkinci yoxlama baytını yoxlayır dta = Serial.read (); if (dta = checkByte3) {// Üçüncü yoxlama bayt int əmrini yoxlayır = Serial.read (); // Dördüncü bayt int param1 = Serial.read () əmridir; // Beşinci bayt param1 interpretCommand (əmr, param1); // ayrılmış sorğunu ona göndərir & aposs handler}}}}}/ * * Komanda və parametri götürüb robota ötürür */void interpretCommand (int command, int param1) {if (command == İLƏ) {goForward (); gecikmə (param1 * 100); goStop ();} // if else else if (command == BACKWARD) {goBackward (); gecikmə (param1 * 100); goStop ();} // if if else else if (command == LEFT) {goLeft (); gecikmə (param1 * 100); goStop ();} // başqa yerdə olarsa if (command == SAĞ) {goRight (); gecikmə (param1 * 100); goStop ();} // əgər doğru olarsa (əmr == SETSPEED) {setSpeed (param1);} // əgər başqa bir sürət təyin edərsənsə (command == STOP) {goStop ();} // if else stop if (command == SETSPEEDLEFT) {setSpeedLeft (param1);} // əgər sol sürətini başqa bir şəkildə təyin edərsənsə (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // sağ sürəti başqa bir şəkildə təyin edərsənsə {// tanınmazsa bir az parıltı et goLeft (); gecikmə (150); sağa get(); gecikmə (150); goStop (); }} // ---------------------------------------------- -------------------------- // ARDUINO KONTROLLÜ SERVO ROBOTUNUN BAŞLANMASI (SERB) ROUTINES/ * * istifadə edərək SERB-ə müraciət etmək üçün arduino qurur. daxil edilmiş rutinlər*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, ÇIXIŞ); // sol servo siqnal pinini təyin edir // çıxış pinMode (RIGHTSERVOPIN, ÇIXIŞ); // sağ servo siqnal pinini təyin edir // leftServo.attach (LEFTSERVOPIN) çıxışına; // sol servo sağa əlavə edirServo.attach (RIGHTSERVOPIN); // sağ servo qoşur goStop ();}/ * * robotun sürətini 0- (dayandı) ilə 100- (tam sürət) arasında təyin edir * QEYD: sürət cari sürəti dəyişməyəcək, sürəti dəyişməlisən * sonra birini çağır dəyişikliklər baş verməzdən əvvəl gediş üsulları.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // sol sürət setləri setSpeedRight (newSpeed); // sağ sürəti təyin edir}/ * * Sol təkərin sürətini təyin edir */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // sürət 100 -dən çox olarsa // olun 100 if (newSpeed = 100) {newSpeed = 100;} // sürət 100 -dən çox olarsa // olarsa 100 olsun (newSpeed <= 0) {newSpeed = 0;} // sürət 0 -dan az olarsa // 0 sağSürət = yeniSürət * 0.9; // sürəti ölçeklendirir}/ * * robotu irəli göndərir */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * robotu geriyə göndərir * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * robotu sağa göndərir * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * robotu sola göndərir */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * robotu dayandırır */void goStop () {leftServo.write (90); rightServo.write (90);} // ARDUINO KONTROLLÜ SERVO ROBOTU (SERB) RUTİNLƏRİNİN SONU // ---------------------------- -----------------------------------------------

Addım 4: Proqram təminatı - Robot Laptop (WebServer)

(İşləmə, açıq mənbə proqramlaşdırma dili və işə başlamaq çox asan bir mühitdir. Ətraflı məlumat üçün İşləmə səhifəsinə daxil olun) Robot noutbukda işləyən proqram təminatı da olduqca sadədir. Kifayət qədər sadə bir veb server (veb brauzerdən veb səhifəsi istəklərini dinləmək), kiçik bir istifadəçi interfeysi (qurmaq üçün) və Veb Serverdən alınan əmrləri Arduinoya ötürmək imkanlarıdır. (pəncərələrdə)

  • Aşağıdakı zip faylını yükləyin (06-WEBB-Processing Webserver (windows exe).zip)
  • Açın və.exe faylını işə salın (_WEBB_WebServer_RobotComputer.exe)

İşlənərkən redaktə etmək üçün:

  • Aşağıdakı zip faylını yükləyin (06-WEBB-İşləyən Web Server (mənbə faylları).zip)
  • Kompüterinizin hər hansı bir yerini açın.
  • İşləmə mühitini açın və açın (_WEBB_WebServer_RobotComputer.pde)

Sınamaq:

  • Proqramı işə salın.
  • 1 nömrəli qutuda kompüterinizdəki mövcud ticarət limanlarının siyahısı olacaq (Arduino ilə əlaqəli olanı vurun. (Kompüter bağlandıqda robotunuz bir neçə dəfə qıvrılacaq və seçilmişin yanında mavi bir nöqtə görünəcək) ticarət limanı)
  • 2 nömrəli qutuda Arduinonun bağlı olub olmadığını yoxlayın. Oklardan birini basın və inşallah robotunuz yarım saniyə ərzində tıklanan istiqamətdə hərəkət edəcək.
  • 3 saylı qutuda veb serveri işə salmaq üçün "Başlat" düyməsini basın.
  • Bir veb brauzer açın (Robot Laptopda) və https://127.0.0.1:12345/ControlPage.html səhifəsinə daxil olun (inşallah düymələri olan idarəetmə veb səhifəsi görünəcək) -

Nə baş verir:

  • Veb Server, http sorğuları üçün 12345 portunu dinləyir (veb səhifəsi ünvanını yazanda nə göndərilir)
  • Cavab verdiyi iki növ sorğu var.

1. "ControlPage.html" üçün qulaq asır və Web səhifəsinə nəzarət göndərir 2. "/request? Command = F & param1 = 100" (bu əmrlər təhlil edilir və Arduinoya göndərilir (bu nümunə nəticələnəcək) şəklində sorğuları dinləyir. 10 saniyə irəli gedən robotda) Əlavə: (WebServer kodu)

/ * * Arduino Nəzarətli İnternetə Bağlı Robot (WEBB) - Webserver * Ətraflı məlumat üçün bu ünvana daxil olun: https://www.oomlout.com/serb * * Davranış: Proqram http (veb səhifəsi) sorğularını * "/sorğu şəklində dinləyir ? command = F & param1 = 100 "və sonra onları * Arduino * Dəstəklənən Komutlara - & aposF & apos - 70 - İrəli * & aposB & apos - 66 - Geri * & aposL & apos - 76 - Sol * & aposR & apos - 82 - Sağ * & aposS & apos - 83 - Sürət & aposX - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 - 25.5 Saniyə) dəyəri * 100 millisaniyə * * də ControlPage.html * * istəsəniz brauzerə nəzarət veb səhifəsinə xidmət edir. Əməliyyat: 1. Arduino'nuzun bağlı olduğu Əlaqələndirmə portunu basın * 2. Arduino -nun dinlədiyini yoxlamaq üçün test düymələrindən istifadə edin * (yarım saniyə ərzində tıklanan istiqamətdə hərəkət edəcək) * 3. Başlat düyməsini basın və veb serveriniz istəkləri dinləmək * * * Lisenziya: Bu iş Creative Commons * Attribu altında lisenziyalaşdırılmışdır tion-Share Alike 3.0 Unported Lisenziyası. * Bu lisenziyanın surətini görmək üçün * https://creativecommons.org/licenses/by-sa/3.0/ * ünvanına daxil olun və ya Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * ABŞ. * */idxal emalı.serial. *; // Serialdan istifadə etmək üçün serial kitabxanasını idxal edin (Arduino ilə danışmaq üçün) import processing.net.*; // Serverdən istifadə etmək üçün xalis kitabxananı idxal edin (internetlə danışmaq üçün)/ * Serial Portla əlaqəli Dəyişənlər */int serialPortIndex = -1; // Serial.list () listString commOptions -da istifadə etdiyimiz serial portun indeksi; // Serial.list () faylını saxlamaq üçün bir dəyişən, buna görə sorğu keçirməyə ehtiyac yoxdur // hər dəfə onu yenidən düzəltmək istədikdə serial portlar (sorğu arduino servolarında // atlamaya səbəb olur) Serial serialPort; // Serial portu bu eskiz boyunca ünvanlı hala gətirir/ * Qrafik və Əlaqəli Dəyişənlərin göstərilməsi */PFont fontu; // yazı tipini açıq edir, buna görə yalnız bir dəfə yüklənməlidir (Arial-72)/ * Şəbəkə ilə əlaqəli Dəyişənlər */Server wServer; // Veb sorğularını idarə edən server = 12345; // Serverin dinlədiyi port CycleCount = 0; // Çəkmə döngəsinin neçə dəfə işlədiyini sayar ("işləyən" mətni // canlandırmaq üçün istifadə olunur)/ * Utility Variables */PImage bg; // Hazırda fon şəkli / WEBB-background.png/ * * Düymə ilə əlaqəli Dəyişənlər * (düymələr çox kobud şəkildə tətbiq olunur, məhdudlaşdırıcı qutular saxlanılır və qrafik və mətn * arxa planda çəkilir) yəni. hərəkət edən düymə dəyişənləri düymələrin görünüşünü dəyişməyəcək */Button comm1; Comm2 düyməsi; Comm3 düyməsi; Comm4 düyməsi; // Düzgün serial portunu seçmək üçün düymələrButton up; Sağ düymə; Sol düymə; Aşağı düymə; // Robotun cavab verdiyini yoxlamaq üçün istiqamət düymələriButton webServer; // WebServer/ * * başlatmaq üçün düymə hər şeyi qurur */void setup () {frameRate (5); // Eskizi bir qədər aşağı salır, belə ki sistemə vergi tətbiq edilmir bg = loadImage ("WEBB-background.png"); // Arxa plan şəklini (eskiz qovluğunda saxlanılır) ölçüsünü (700, 400) yükləyir; // Eskiz pəncərəsinin ölçüsünü təyin edir font = loadFont ("ArialMT-72.vlw"); // İstifadə edəcəyimiz şrift bu eskiz vasitəsilə yüklənir commOptions = Serial.list (); // Serial portlarını sorğu keçirir və mövcud portların siyahısını alır // (bunu etməklə robotun hər dəfə əyilməsini saxlayır və hər iki serial portu sorğu keçirildikdə) defineButtons (); // Hər bir düymə fonu üçün məhdudlaşdırıcı qutuları təyin edir (bg); // Arxa plan şəklini çəkir (bu şəklin üzərində bütün düymə qrafikləri var)}/ * Əsas eskizlər */void draw () {if (cycleCount == 0) {//- zəng çəkmə prosedurları drawCommBox (); // Zərərləri Komut Qutusuna çəkir (qutu 1) drawTestBox (); // Test Qutusundakı bütün elementləri çəkir (qutu 2) drawWebServerBox (); // WebServer Qutusundakı bütün elementləri çəkir (qutu 3)} //- pollWebServer () iş qaydalarına zəng edin; // Şəbəkə vasitəsi ilə hər hansı bir sorğunun daxil olub-olmadığını yoxlamaq üçün veb serveri sorğular} // ------------------------------ ---------------------------------------------- // Başlanğıc rutinləri çəkin (kodu oxumağı daha gözəl etmək üçün bölün)/ * * Ticarət qutusundakı əşyalar üçün çəkmə yeniləmə rutini (hər dövrdə icra olunur) */void drawCommBox () {fill (0, 0, 0); // Doldurmağı qara textFont (font, 15) olaraq təyin edin; // Yazı tipini (int i = 0; i 0) {çalışan = çalışan + ".";} // nöqtələrin sayı, ((cycleCount /1)> 1) {üçün döngə sayına əsaslanır. çalışan = çalışan + ".";} if ((cycleCount / 1)> 2) {çalışan = çalışan + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} mətn (qaçan, 520), 210); } cycleCount ++; // CycleCount vasitəsilə hər dəfə bir artırılır} // Püşkatma prosedurları // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Xidmət prosedurlarının başlanması/ * * mousePressed, siçan hər dəfə basıldıqda çağırılır * bu, siçanın düyməni məhdudlaşdıran qutulardan hər hansı birinin içərisində olub -olmadığını yoxlayır * və buna uyğun olub olmadığını */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Serial.list () -də 0 indeksində olan ticarət limanında dəyişikliklər, əks halda (comm2.pressed ()) {updateSerialPort (1);} // Serialda 1 -ci indeksdəki ticarət limanında dəyişikliklər.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Serial.list (2) indeksindəki 2 nömrəli ticarət limanında dəyişikliklər (əgər comm4.pressed ()) {updateSerialPort (3);} // Serial.list () indeksi 3 -də olan əlaqə limanında dəyişikliklər, əgər (up.pressed ()) {sendRobotCommand ("F", 5);} // Robotu 0,5 il irəli aparmaq üçün bir əmr göndərir saniyə başqa əgər (left.pressed ()) {sendRobotCommand ("L", 5);} / /Robotu 0,5 saniyə sola hərəkət etdirmək üçün başqa bir əmr göndərir, əgər (right.pressed ()) {sendRobotCommand ("R", 5);} // Robotu 0,5 saniyə başqa yerə (əgər aşağı) hərəkət etdirmək üçün əmr göndərir. basıldı ()) {sendRobotCommand ("B", 5);} // Robotu 0,5 saniyə geri çəkmək üçün başqa bir əmr göndərir (webServer.pressed ()) {startWebServer ();} // WebServer cycleCount = başlayır 0; fon (bg); // Arxa plan şəklini yenidən rəngləndirir (bu şəklin üzərində bütün düymə qrafikləri var) draw ();}/ * * İcra edildikdən sonra Serverə gözləmə əlaqələrinin olub olmadığını yoxlayır * gözləyən bir əlaqə varsa çəkir sorğunu yerinə yetirir və əlavə mətni silmək üçün parseRequest (String) * rejiminə keçir. Bu daha sonra interpretRequest (String) rutininə göndərilir * uyğun hərəkət rutinini çağırır (yəni robota təlimat göndərir).* * Kompüterlərin ünvanlarını və portlarını veb brauzerə daxil etməklə bir sorğu qəbul edilir * Yerli maşın üçün "https://127.0.0.1:12345/request?command=F&param1=100" * * Nümunə İstək: * Əldə/sorğu? command = F & param1 = 100 HTTP/1.1 * İstifadəçi Agenti: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, Gecko kimi) * Qəbul edin: * // * * Qəbul Dili: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive * * Nümunə Cavab (işlənmiş sorğu üçün) * HTTP/1.1 200 OK * Bağlantı: bağlan * məzmun növü: text/html * * əmr: F param1: 100 */void pollWebServer () {if (wServer! = null) {// webServer olarsa Müştəri istəyi işləyir = wServer.available (); // Növbəti Müştərini // serverinə yükləyin (heç bir istək yoxdursa null) if (request! = Null) {// bir sorğu prosesi varsa String fullRequest = request.readString (); // İstək məzmununu simli olaraq saxlayın String ip = request.ip (); // Müştərilərin ip ünvanını String requestString = parseRequest (fullRequest.toUpperCase ()) kimi saxlayın. // Bütün əlavə // məlumatları yalnız sorğu sətrini (GET -dən sonra mətn) tərk edərək çıxarın // (string testini asanlaşdırmaq üçün böyük hərflərə keçir) if (requestString.indexOf ("REQUEST?")! = -1) { // Sorğunun "İSTƏYƏCƏK?" Olub olmadığını yoxlayır. String cavabı = interpretRequest (requestString); // İstəyi sorğu tərcüməçisinə request.write göndərir ("HTTP/1.1 200 OK / nBağlantı: bağla / nMəzmun növü: mətn/html / n / n" + cavab); // sorğunun // işləndiyini və wServer.disconnect (istək) olaraq "cavab" sətrini bildirmək üçün 200 -ə cavab göndərir; // Müştərinin bağlantısını kəsər} else if if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Əgər sorğu String webPageArray = loadStrings ("WEBB -ControlPage.html") nəzarət web səhifəsi üçündürsə; // Nəzarət veb səhifəsini / data / WEBB-ControlPage.html // saytından yükləyir (bir sıra xətlər kimi yüklənir) String webPage = ""; // Redaktə etməyi asanlaşdırmaq üçün veb səhifəsi // sətir fasilələri ilə qalmışdır, buna görə də bu xətləri striptiz edir (int i = 0; i portIndex) {// keçilən portIndex Serial.list -də etibarlı bir indeksdirsə () // (yəni iki siyahıda üçüncü variant deyil) serialPortIndex = portIndex; // serialPortIndex dəyişənini yeni serialport indeksinə təyin edin // (bu, aktiv portun yanındakı nöqtəni göstərmək üçün istifadə olunur)} if (serialPortIndex! = -1) {// əvvəlcədən bir limanın seçildiyini yoxlayın. (serialPort! = null) {serialPort.stop ();} // əgər Serial portu artıq istifadə olunursa, yenisini yükləməzdən əvvəl onu dayandırın serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Arduino 9600 Baud ilə ünsiyyət qurmaq üçün yeni bir Serial obyekti yaradın}}/ * * Bir sorğu sətri alır (məsələn: "request? Command = F & param1 = 100") və * və param1 əmrini çıxaracaq və arduino (burada əlavə parametrlər və ya arduino olmayan əmrlər əlavə ediləcək) */String interpretRequest (String requestString) {String returnValue = "OK"; // returnValue dəyişən String əmrini hazırlayır; // Növbəti üç sətir "command =" // dan sonra dəyəri çıxarır (əlavə sətir, əmr parametrinin sorğunun // sonunda olması və sonra & 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; // Sonrakı üç sətirdən sonra dəyəri çıxarın" param1 = "// (əlavə sətir, əmr parametri // sorğunun sonundadır və sonra & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ("PARAM1 =") + "PARAM1 =". uzunluq ());} başqa {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} başqa {param1String = param1String;} int param1 = Integer.parseInt (param1String); // Param1 Stringini sendRobotCommand tamsayı (əmr, param1); // Komandanı Arduino returnValue = "command:" + command + "param1:" + param1; // hazırda yalnız təhlil edilmiş əmr, lakin // html olaraq göndərilməklə formatlaşdırma daxil ola bilər return returnValue;}/ * * Bir əmr (hazırda bir hərf) və bir parametr (bir bayt 0-255) alır və onu dinləyən və təkrar oxuyan arduino * Yenidən dəstəklənən əmrlər * F - */void sendRobotCommand (String əmri, int param1) {println ("command:" + command + "time:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + əmri); serialPort.write (bayt (param1)); }} // Quraşdırmanın sonu/çox adlanan rutinlər deyil // ----------------------------------- -------------------------------------------------- // Nümunə düyməsi və bəzi dəyişikliklərlə işlənmə.org nümunəsindən RectButton kodu // əsasən animasiyanın yayılmasını asanlaşdırmaq və silmək üçün hazırlanmışdır // https://processing.org/learning/topics/buttons.html (2008-09-23) sinif düyməsi {int x, y; int eni, hündürlüyü; Düymə (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; genişlik = genişlik; hündürlük = hündürlük; } boole basıldı () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } else {false false; }}}

Addım 5: Proqram təminatı - (Veb səhifə)

Demək olar ki, robotunuzla danışmaqdan başqa işimiz bitdi. Danışmaq üçün: (yerli şəbəkə üzərindən -pəncərələrdə)

  • Laptopun yerli IP ünvanını kəşf edin. Bunu etmək üçün "Başlat / Proqramlar / Aksesuarlar / Komut İstemi" nə gedin və terminal pəncərəsi açıldıqda "ipconfig" yazın. "IP ünvanı" yazın və yerli şəbəkənizdəki başqa bir kompüterə gedin.
  • Bir veb brauzeri açın, "https:// (robot kompüter ip): 12345/ControlPage.html yazın
  • Nəzarət veb səhifəsi yüklənməlidir, "IP ünvanı" qutusuna robot kompüterlərin ip yazın.
  • Robotunuzu idarə etməyə başlayın.

Danışmaq üçün: (İnternet üzərindən) Yerli olaraq işlədiyinizə görə, internet üzərindən danışmaq bir neçə addımlıq məsafədədir.

  • (ən çətin addım) Liman yönləndirməsini qurun - Kompüterinizin yalnız yerli şəbəkə deyil, internet dinləməsi lazımdır. Bunu etmək üçün marşrutlaşdırıcınıza müəyyən istəkləri robotu idarə edən kompüterə ötürməsini bildirməlisiniz. Bu bir az mürəkkəbdir və bu Təlimatın əhatəsindən çox kənara çıxır. Ancaq PortForward.com saytına daxil olsanız, marşrutlaşdırıcınızı konfiqurasiya etmək üçün lazım olan hər şeyi verəcəklər (12345 portunu robot dizüstü kompüterinizə yönləndirməlisiniz).
  • Sonra İnternet IP -ni kəşf edin (WhatIsMyIP.com saytına daxil olun)
  • Nəhayət bir video zəngini qurun və "https:// (internet IP): 12345/ControlPage.html" ziyarət etmək üçün kiminlə görüşdüyünüzə baxın.
  • Nəzarət veb səhifəsindəki "IP ünvanı" qutusuna İnternet IP yazın və İnternetə Bağlı Robotunuz uzaqdan idarə olunur.

Addım 6: Bitdi

Yaxşı, budur. Ümid edirəm robotunuzu uzaqdan idarə edərək əyləncəli vaxt keçirirsiniz. Proqram və ya hardware ilə bağlı hər hansı bir probleminiz varsa, şərh yazmaqdan çekinmeyin və mən sizə kömək etməyə çalışacağam. Daha səliqəli layihələrə baxmaq istəyirsinizsə, oomlout.com saytına daxil olun.