Mundarija:

Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida): 6 qadam (rasmlar bilan)
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida): 6 qadam (rasmlar bilan)

Video: Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida): 6 qadam (rasmlar bilan)

Video: Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida): 6 qadam (rasmlar bilan)
Video: Международный аэропорт Ханэда всегда будет в курсе потребностей наших клиентов. 🇷🇺 2024, Iyul
Anonim
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida)
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida)
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida)
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida)
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida)
Internetga ulangan robot yarating (taxminan 500 dollarga) (Arduino va netbuk yordamida)

Bu ko'rsatma sizga o'zingizning Internetga ulangan robotingizni (Arduino mikro-kontroller va Asus eee kompyuteri yordamida) qanday qurishni ko'rsatib beradi. Nima uchun siz Internetga ulangan robotni xohlaysiz? Albatta o'ynash. Robotingizni xona bo'ylab yoki butun mamlakat bo'ylab haydang, Skype va veb -brauzerdan boshqa hech narsa ishlatmang (boshqaruv kompyuteriga o'rnatadigan hech narsa yo'q). Undan keyin? Dasturiy ta'minotni o'rganing va uni xohlaganingizcha moslashtiring, GPS -ni qo'shing, shunda xaritada qayerda ketayotganingizni kuzatib borishingiz mumkin, uyingizdagi harorat gradientlarini xaritaga harorat sensori qo'shishingiz yoki Internet tarmog'ini boshqarish uchun sonar sensorlar qo'shishingiz mumkin. haydovchilar duch kelishi mumkin va mumkin emas. Xususiyatlari:

  • Arzon - (agar siz barcha qismlarni yangi sotib olsangiz ~ 500 dollar va agar siz axlat qutisiga kirsangiz ancha arzon)
  • Robotni ishga tushirgandan so'ng, faqat veb -brauzer kerak bo'ladi (va agar siz qayerda ketayotganingizni ko'rishni istasangiz, Skype)
  • Ochiq manba va oson moslashuvchan - (Arduino mikro -boshqaruvchisidan foydalaniladi, veb -server uchun ishlov berish va barcha dasturiy ta'minot Linuxda ishlashi mumkin (barcha kodlar, shuningdek, o'tish va o'zgartirishlarni osonlashtirish uchun ham izohlangan))
  • Modulli dizayn (umuman integratsiyalashgan tizim emas, agar siz boshqa videokonferensaloqa xizmatidan foydalanmoqchi bo'lsangiz, xavotirlanmang yoki agar sizda Arduino emas, balki asosiy shtamp bo'lsa, kodning kichik qismini to'g'ri joylashtiring)

Mana, Internetga ulangan robotimni oshxonadan haydab chiqarish haqidagi tezkor video.

1 -qadam: ehtiyot qismlar va asboblar

Qismlar va asboblar
Qismlar va asboblar

Faqat bir nechta qismlar talab qilinadi: Robot: Arduino boshqariladigan servo robot - (SERB) ($ 175 @ oomlout.com) yoki (o'zingiz tayyorlang)

Arduino mikro-nazoratchisini miyasi sifatida ishlatadigan ochiq manbali robot

(Arduino bilan har qanday ikkita servo robotli platformadan foydalanish mumkin (1 -variant) (agar boshqa variantlarni topsangiz, menga xabar bering) Kompyuter: Asus eee PC 4G (280 dollar) (@Best Buy)

Kichkina arzon noutbuk, bu maqsad uchun juda mos keladi

(Har qanday noutbuk (yoki agar siz akkord bilan ishlashni xohlasangiz) ishlashga qodir bo'lgan eskizlarni ishlatishingiz mumkin) Laptop stol: Akrilni lazer bilan kesish (25 dollar (@ oomlout)) yoki (o'z 3 -qadamingizni yaratish)

Laptopga o'tirish uchun stol berish uchun (SERB) mahkamlanadigan bir nechta qo'shimcha akril buyumlar

Yong'oqlar va boltlar: (uy omborida mavjud)

  • 3 mm x 10 mm murvat (x4)
  • 3 mm x 15 mm murvat (x4)
  • 3 mm yong'oq (x8)

2 -qadam: bo'laklarni kesish va yig'ish

Kesish qismlari va yig'ish
Kesish qismlari va yig'ish
Kesish qismlari va yig'ish
Kesish qismlari va yig'ish
Kesish qismlari va montaj
Kesish qismlari va montaj
Kesish qismlari va montaj
Kesish qismlari va montaj

Sizning noutbuk stolingiz uchun bo'laklarni olishning uchta varianti mavjud. 1 -variant: (oomlout.com dan xarid qilish)

lazerli kesilgan stol qismlari va zarur jihozlarni oomlout -dan 25 dollarga sotib olish mumkin (bu erda)

2 -variant: (O'zingizning lazer kesgichingiz yoki Ponoko.com orqali kesish)

  • Quyidagi faylni yuklab oling (03-WEBB-akril qismlari.cdr yoki 03-WEBB-akril qismlari (Ponoko P2).eps)
  • Ularni 3 mm (1/8 ") akrildan kesib oling

3 -variant: (aylantiring)

  • Pastdan aylantiruvchi arra naqshini yuklab oling (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 o'lchamli qog'oz uchun) yoki 03-WEBB-ScrollSaw Pattern (harf).pdf (harf o'lchamli qog'oz uchun))
  • Bosib chiqarishda uning o'lchami yo'qligini ikki marta tekshiring (bosilgan o'lchagichlarni o'lchash orqali)
  • 3 mm (1/8 ") akril bo'lagiga yopishtiring va bo'laklarni kesib oling.

O'rnatish: Quyida montaj qo'llanmasini (04-WEBB-montaj bo'yicha qo'llanma.pdf) yuklab oling va noutbuk stolini bir joyga qo'ying.

3 -qadam: dasturiy ta'minot - (Arduino)

Dasturiy ta'minot - (Arduino)
Dasturiy ta'minot - (Arduino)

Arduino -ga yangi kelganlar uchun Arduino.cc saytida ishga tushirish bo'yicha ajoyib qo'llanmani ko'rib chiqing. Bu juda oddiy dastur, Arduino 5 seriyali suhbatni qidirish uchun ketma -ket portni kuzatadi.

  • Bayt 1-3 ("AAA" baytlarini tekshiring)
  • Bayt 4 buyrug'i (arduinoga nima qilish kerakligini aytadi) (Qo'llab -quvvatlanadigan buyruqlar 'F' - Oldinga, 'B' - Orqaga, 'L' - Chap, 'R' - O'ng, 'S' - Tezlik, 'X' - SetSpeedLeft, "Y" - SetSpeedRight, "C" - To'xtatish)
  • 5 -bayt parametr - ko'chirish buyruqlari uchun bu vaqt oralig'i (Parametr * 100 ms), tezlik uchun esa 0-100 gacha bo'lgan foiz sifatida talqin qilinadi.

Kod yaxshilab izohlangan va unga qo'shimcha buyruqlar qo'shish osonroq bo'lishi kerak.

  • Qo'shilgan zip faylini yuklab oling. (05-WEBB-Arduino Code.zip)
  • Arduino Sketch katalogini oching. (standart: Mening hujjatlarim / Arduino )
  • Arduino ishlab chiqish muhitini oching va Arduino -ga yuklang.

Nusxalash va joylashtirish uchun

  • Kodni pastdan nusxa ko'chiring.
  • Arduino rivojlanish muhitiga joylashtiring.
  • Arduino -ga yuklash.

Qo'shimcha: Arduino dasturi

/ * * Arduino boshqariladigan Internetga ulangan robot (WEBB) - ketma -ket xost * Qo'shimcha ma'lumot olish uchun tashrif buyuring: https://www.oomlout.com/serb * * Xulq -atvor: Arduino o'z seriyali portini 254 formatda * tinglaydi. 88, 88, (Buyruq), (TIME) * Qo'llab -quvvatlanadigan buyruqlar - & aposF & apos - 70 - Oldinga * & aposB & apos - 66 - Orqaga * & aposL & apos - 76 - Chap * & aposR & apos - 82 - O'ng * & aposS & apos - 83 - Tezlik & aposX & apos - 88 - SetSpeed * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - To'xtatish * Qo'llab -quvvatlanadigan vaqtlar - 0 - 255 (0 dan 25,5 sekundgacha) qiymati * 100 millisekund * sp * simlar: O'ng Servo Signali - pin 9 * Chap Servo Signali - pin 10 * * Litsenziya: Bu ish Creative Commons * Attribution-Share Alike 3.0 Unported litsenziyasi ostida litsenziyalangan. * Ushbu litsenziya nusxasini ko'rish uchun * https://creativecommons.org/licenses/by-sa/3.0/ * ga tashrif buyuring yoki Creative Commons, 171 Second * Street, Suite 300, San-Frantsisko, Kaliforniya 94105, * AQSH. * */// --------------------------------------------- ---------------------------- // ARDUINO SERIAL SERVER PREAMBLESINI BOSHLASH // Har bir buyruqqa mos keladigan konstantalarni aniqlash (shuningdek, ascii kod raqami))#FORWARD 70 // F#BACKWARD 66 ni belgilang // B#SOL 76 ni aniqlang // L#O'ng 82 ni belgilang // R#SETSPEED 83 ni aniqlang // S#STOP 67 ni belgilang // C#SETSPEEDLEFT 88 ni belgilang // X #define SETSPEEDRIGHT 89 // Y/ *Uchta bayt (robotni tasodifiy ketma -ket *ma'lumotlarga javob bermasligi uchun ishlatiladi) hozirda "AAA" */#define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ARDUINO nazorati ostida xizmat ko'rsatuvchi robotning boshlanishi (serb) PREAMBLE#o'z ichiga oladi #define LEFTSERVOPIN 10 // Chapdagi servo ulangan pin#RIGHTSERVOPIN 9 ni belgilang // O'ng servo pinniServo chapServoga ulangan pin; Servo o'ng Servo; int leftSpeed = 50; // leftServo robotlarining tezligini ushlab turadi // 0 dan 100intgacha bo'lgan foiz rightSpeed = 100; // robotlar tezligini to'g'ri ushlab turadiServo // 0 dan 100 gacha foiz // ARDUINO nazorati ostida xizmat ko'rsatuvchi robot (SERB) PREAMBLE // ------------------- -------------------------------------------------- ----- // Hammasini ishga tushiradi void setup () {Serial.begin (9600); // serbSetup () ketma -ket portini ishga tushiradi; // barcha kerakli // pinlar holatini o'rnatadi va eskizga servo qo'shadi} // Asosiy dastur loopvoid loop () {serbPollSerialPort (); // doimiy ravishda ketma-ket portga qaraydi // agar ma'lumotlar bo'lsa, uni qayta ishlaydi} // ------------------------------ ----------------------------------------- // ARDUINO SERIAL SERVER RUTINLARINI BOSHLASH/ * * Arduino va boshqa ketma -ket portga etkazilgan buyruqlarni qayta ishlaydi */void serbPollSerialPort () {int dta; // ketma -ket baytni ushlab turish uchun o'zgaruvchi if (Serial.available ()> = 5) {// agar 5 bayt buferda bo'lsa (uzunligi to'liq so'rov) dta = Serial.read (); if (dta = checkByte1) {// Birinchi tekshirilgan baytni tekshiradi dta = Serial.read (); if (dta = checkByte2) {// Ikkinchi tekshirish baytini tekshiradi dta = Serial.read (); if (dta = checkByte3) {// Uchinchi tekshirish bayt int buyrug'i tekshiriladi = Serial.read (); // To'rtinchi bayt - buyrug'i int param1 = Serial.read (); // Beshinchi bayt - param1 interpretCommand (buyruq, param1); // tahlil qilingan so'rovni unga yuboradi & aposs handler}}}}}/ * * Buyruq va parametrni oladi va robotga uzatadi */void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); kechikish (param1 * 100); goStop ();} // agar boshqa bo'lsa oldinga (buyruq == BACKWARD) {goBackward (); kechikish (param1 * 100); goStop ();} // if backward if else if (command == LEFT) {goLeft (); kechikish (param1 * 100); goStop ();} // agar qolgan bo'lsa if (buyruq == O'ngga) {goRight (); kechikish (param1 * 100); goStop ();} // agar to'g'ri bo'lsa, agar (buyruq == SETSPEED) {setSpeed (param1);} // agar boshqa tezlikni belgilasa, agar (buyruq == STOP) {goStop ();} // agar to'xtasa, agar (buyruq == SETSPEEDLEFT) {setSpeedLeft (param1);} // agar chap tezlikni boshqacha qilib qo'yadigan bo'lsak (buyruq == SETSPEEDRIGHT) {setSpeedRight (param1);} // agar boshqa to'g'ri tezlikni sozlasa {// agar tan olinmagan buyruq bir oz shimmey qilsa) goLeft (); kechikish (150); goRight (); kechikish (150); goStop (); }} // ---------------------------------------------- -------------------------- // ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES START/ * * yordamida SERB-ga murojaat qilish uchun arduino o'rnatiladi. kiritilgan tartiblar*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // chap servo signal pinini o'rnatadi // chiqish pinMode (RIGHTSERVOPIN, OUTPUT); // o'ng servo signal pinini o'rnatadi // leftServo.attach (LEFTSERVOPIN) chiqish uchun; // chap servo o'ngga qo'shiladiServo.attach (RIGHTSERVOPIN); // to'g'ri servo goStop ();}/ * * robotning tezligini 0- (to'xtatilgan) va 100- (to'liq tezlik) oralig'ida o'rnatadi * QAYD: tezlik hozirgi tezlikni o'zgartirmaydi, siz tezlikni o'zgartirishingiz kerak * keyin bittasini chaqiring O'zgarishlar sodir bo'lishidan oldin o'tish usullarining.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // chap tezlikni o'rnatadi setSpeedRight (newSpeed); // o'ng tezlikni o'rnatadi}/ * * Chap g'ildirakning tezligini belgilaydi */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // agar tezlik 100 dan katta bo'lsa // 100 if (newSpeed = 100) {newSpeed = 100;} // agar tezlik 100 dan katta bo'lsa // uni 100 bo'lsa (newSpeed <= 0) {newSpeed = 0;} // agar tezlik 0dan kam bo'lsa // u 0 o'ng Tezlik = yangi Tezlik * 0,9; // tezlikni o'lchaydi}/ * * robotni oldinga yo'naltiradi */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * robotni orqaga qaytaradi * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * robotni o'ngga yuboradi * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * robotni chapga yuboradi */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * robotni to'xtatadi */void goStop () {leftServo.write (90); rightServo.write (90);} // ARDUINO nazorati ostida SERVO ROBOT (SERB) ROUTINESINING oxiri // ---------------------------- -----------------------------------------------

4 -qadam: Dasturiy ta'minot - robotli noutbuk (WebServer)

Dasturiy ta'minot - Robot noutbuk (WebServer)
Dasturiy ta'minot - Robot noutbuk (WebServer)

(Qayta ishlash - bu ochiq manbali dasturlash tili va uni boshlash uchun qulay muhit. Qo'shimcha ma'lumot olish uchun Processing -ga tashrif buyuring) Robot noutbukida ishlaydigan dasturiy ta'minot ham juda oddiy. Bu juda oddiy veb-server (veb-brauzerdan veb-sahifa so'rovlarini tinglash), kichik foydalanuvchi interfeysi (sozlash uchun) va veb-serverdan olingan buyruqlarni Arduino-ga uzatish imkoniyatlari. Tez o'rnatish uchun: (derazalarda)

  • Quyidagi zip faylini yuklab oling (06-WEBB-ishlov berish veb-serveri (windows exe).zip)
  • Uni oching va.exe faylini ishga tushiring (_WEBB_WebServer_RobotComputer.exe)

Qayta ishlash jarayonida:

  • Quyidagi zip faylini yuklab oling (06-WEBB-ishlov beradigan veb-server (manba fayllari).zip)
  • Kompyuteringizning istalgan joyini oching.
  • Qayta ishlash muhitini oching va oching (_WEBB_WebServer_RobotComputer.pde)

Sinov uchun:

  • Dasturni ishga tushiring.
  • 1 -qutida sizning kompyuteringizdagi mavjud portlarning ro'yxati bo'ladi (Arduino ulanganini bosing.), Kompyuter ulanganda robotingiz bir necha marta qimirlaydi va tanlangan yonida ko'k nuqta paydo bo'ladi. aloqa porti)
  • 2 -qutiga Arduino ulanganligini tekshiring. O'qlardan birini bosing va umid qilamanki, sizning robotingiz bosilgan yo'nalishda yarim soniya harakat qiladi.
  • 3 -qatorda veb -serverni ishga tushirish uchun "Ishga tushirish" tugmasini bosing.
  • Veb -brauzerni oching (noutbukda) va https://127.0.0.1:12345/ControlPage.html saytiga tashrif buyuring (umid qilamanki, tugmachalari bo'lgan boshqaruv veb -sahifasi paydo bo'ladi) -Keyingi bosqichda ushbu sahifadan qanday foydalanish haqida batafsil ma'lumot. -

Nimalar bo'lyapti:

  • Veb -server http so'rovlari uchun 12345 portini tinglaydi (veb -sahifa manzilini yozganda nima yuboriladi)
  • U javob beradigan so'rovlarning ikki turi mavjud.

1. "ControlPage.html" ni tinglaydi va Web -sahifani boshqaradi. 2. "/request? Command = F & param1 = 100" shakli so'rovlarini tinglaydi (bu buyruqlar tahlil qilinadi va Arduino -ga yuboriladi (bu misol natijaga olib keladi) robotda 10 soniya oldinga siljiydi) Qo'shimcha: (WebServer kodi)

/ * * Arduino tomonidan boshqariladigan Internetga ulangan robot (WEBB) - veb -server * Qo'shimcha ma'lumot olish uchun tashrif buyuring: https://www.oomlout.com/serb * * Xulq -atvor: Dastur http (veb -sahifa) so'rovlarini * "/so'rov shaklida tinglaydi. ? command = F & param1 = 100 "va keyin ularni * Arduino * Qo'llab -quvvatlanadigan buyruqlariga o'tkazadi - & aposF & apos - 70 - Oldinga * & aposB & apos - 66 - Orqaga * & aposL & apos - 76 - Chap * & aposR & apos - 82 - O'ng * & aposS & apos - 83 - Tezlik & aposX va aposX - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 dan 25,5 sekundgacha) qiymati * 100 millisekund * *, shuningdek ControlPage.html * * so'ralsa, brauzerda boshqaruv veb -sahifasiga xizmat qiladi. Amaliyot: 1. Arduino ulangan * aloqa portini bosing. 2. Arduino tinglayotganini tekshirish uchun test tugmalaridan foydalaning * (yarim soniya bosilgan yo'nalishda harakatlanadi) * 3. Ishga tushirish -ni bosing va veb -serveringiz so'rovlarni tinglang * * * Litsenziya: Bu ish Creative Commons * Attribu ostida litsenziyalangan Tion-Share Alike 3.0 Unported litsenziyasi. * Ushbu litsenziya nusxasini ko'rish uchun * https://creativecommons.org/licenses/by-sa/3.0/ * ga tashrif buyuring yoki Creative Commons, 171 Second * Street, Suite 300, San-Frantsisko, Kaliforniya 94105, * AQSH. * */importni qayta ishlash.serial. *; // ketma -ket foydalanish uchun ketma -ket kutubxonani import qiling (Arduino bilan gaplashish uchun) import processing.net.*; // serverdan foydalanish uchun aniq kutubxonani import qilish (Internet bilan gaplashish uchun)/ * Seriya portiga tegishli o'zgaruvchilar */int serialPortIndex = -1; // biz foydalanadigan ketma -ket port indeksi Serial.list () listString commOptions; // Serial.list () ni saqlash uchun o'zgarmaydigan, shuning uchun so'rov o'tkazishga hojat yo'q // har safar biz uni qaytarishni xohlaganimizda ketma -ket portlar (so'rov arduino servosida // sakrashga olib keladi) Serial serialPort; // ketma -ket portni ushbu eskiz davomida manzilga aylantiradi/ * Grafik va render bilan bog'liq o'zgaruvchilar */PFont shrift; // shriftni ochiq qiladi, shuning uchun uni faqat bir marta yuklash kerak (Arial-72)/ * Tarmoq bilan bog'liq o'zgaruvchilar */Server wServer; // Port -12345 veb -so'rovlarini bajaradigan server; // Server toint cycleCount = 0 ni tinglaydigan port; // Chiziq chizig'i necha marta bajarilishini hisoblaydi ("ishlaydigan" matnni // jonlantirish uchun ishlatiladi)/ * Utility Variables */PImage bg; // Hozirgi vaqtda fon rasmi / WEBB-background.png/ * * Tugma bilan bog'liq o'zgaruvchilar * (tugmalar juda qo'pol ravishda bajariladi, chegaralangan qutilar saqlanadi va fon tasvirida grafik va matn * chiziladi) ya'ni. harakatlanuvchi tugma o'zgaruvchilari tugmalar ko'rinishini o'zgartirmaydi */Button comm1; Comm2 tugmasi; Comm3 tugmasi; Comm4 tugmasi; // To'g'ri ketma -ket portni tanlash tugmalariButton up; O'ng tugma; Chap tugma; Tugma; // robotning javob berishini tekshirish uchun yo'naltirish tugmalari; WebServer tugmasi; // WebServerni ishga tushirish tugmasi/ * * hamma narsani o'rnatadi */void setup () {frameRate (5); // Eskizni biroz sekinlashtiradi, bg = loadImage ("WEBB-background.png") tizimiga soliq solmaydi. // Fon tasvirini yuklaydi (eskiz papkasida saqlanadi) hajmi (700, 400); // eskiz oynasining hajmini belgilaydi shrift = loadFont ("ArialMT-72.vlw"); // Biz foydalanadigan shriftni shu eskiz orqali yuklaydi commOptions = Serial.list (); // Seriyali portlarni so'roq qiladi va mavjud portlar ro'yxatini oladi // (bu faqat robotni har safar chayqalishdan saqlaydi & ketma -ket // ketma -ket port) defineButtons (); // Har bir tugma fon uchun chegara maydonlarini belgilaydi (bg); // Fon tasvirini bo'yaydi (bu rasmda tugmachali barcha grafikalar bor)}/ * Asosiy eskizlar */void draw () {if (cycleCount == 0) {//- qo'ng'iroq chizish tartiblari drawCommBox (); // Xushbichimlarni qutiga chizadi (1 -quti) drawTestBox (); // Test qutisidagi barcha elementlarni chizadi (2 -quti) drawWebServerBox (); // WebServer qutisidagi barcha elementlarni chizadi (3-quti)} //- qo'ng'iroq qilish ish tartibi pollWebServer (); // Tarmoq orqali so'rovlar kelgan-kirmaganligini bilish uchun veb-serverni so'roq qiladi} // ------------------------------ ---------------------------------------------- // Boshlanishi tartiblarni chizish (kodni o'qishni yanada qulayroq qilish uchun bo'linish)/ * * Kommutatsiya qutisidagi elementlar uchun o'yinni yangilash tartibi (har bir tsiklda bajariladi) */void drawCommBox () {to'ldirish (0, 0, 0); // To'ldirishni qora textFont -ga o'rnating (shrift, 15); // Shriftni (int i = 0; i 0) {yugurish = yugurish + ".";} Uchun kerakli o'lchamga sozlang // nuqta soni CycleCount ga asoslangan, agar ((cycleCount /1)> 1) { yugurish = yugurish + ".";} if ((cycleCount / 1)> 2) {yugurish = yugurish + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} matn (ishlayotgan, 520), 210); } cycleCount ++; // Har safar CycleCount orqali bittaga ko'payadi} // O'yinni tugatish tartibi // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Xizmat ko'rsatishning boshlanishi/ * * mousePressed har safar sichqoncha bosilganda chaqiriladi, bu * sichqoncha tugma bilan chegaralangan qutilarning birortasida joylashganligini tekshiradi * va agar u tegishli tartib bo'lsa */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Serial.list () indeksidagi 0 indeksidagi aloqa portidagi o'zgarishlar, agar (comm2.pressed ()) {updateSerialPort (1);} // Serialdagi 1 -indeksdagi aloqa portidagi o'zgarishlar..list () else if (comm3.pressed ()) {updateSerialPort (2);} // Serial.list () indeksining 2 indeksidagi aloqa portidagi o'zgarishlar, agar (comm4.pressed ()) {updateSerialPort (3);} // Serial.list () dagi 3 -indeksdagi aloqa portidagi o'zgarishlar, agar (up.pressed ()) {sendRobotCommand ("F", 5);} // Robotni 0,5 ga oldinga siljitish buyrug'ini yuboradi. boshqa soniya, agar (left.pressed ()) {sendRobotCommand ("L", 5);} / /Robotni chapga siljitish buyrug'ini 0,5 soniya boshqasiga yuboradi, agar (right.pressed ()) {sendRobotCommand ("R", 5);} // Robotni O'ngga 0,5 soniya boshqa tomonga siljitish buyrug'ini yuboradi, agar (pastga). pressed ()) {sendRobotCommand ("B", 5);} // Robotni 0,5 soniya orqaga surish buyrug'ini yuboradi, aks holda (webServer.pressed ()) {startWebServer ();} // WebServer cycleCount = boshlanadi 0; fon (bg); // Fon tasvirini qayta bo'yaydi (bu rasmda tugmachaning barcha grafiklari bor) draw ();}/ * * Bir marta chaqirilganda, serverni kutish aloqasi bor yoki yo'qligini tekshiradi * agar kutish aloqasi bo'lsa so'rovni o'chirib tashlab, qo'shimcha matnni olib tashlash uchun parseRequest (String) * tartibiga o'tkazadi. Bu keyin interpretRequest (String) tartibiga * tegishli harakatlar tartibini chaqirish uchun yuboriladi (ya'ni robotga ko'rsatma yuborish).* * Kompyuter manzili va portini veb -brauzerga kiritish orqali so'rov yuboriladi. * "Http://127.0.0.1:12345/request?command=F&param1=100" mashinasi uchun * * Misol so'rovi: * GET/so'rov? buyruq = F & param1 = 100 HTTP/1.1 * Foydalanuvchi-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, Gecko kabi) * Qabul qilish: * // * * Qabul qilish tili: en-US, en * Qabul qilish-Charset: ISO-8859-1, *, utf-8 * Qabul qilish-kodlash: gzip, deflate, bzip2 * Xost: 127.0.0.1:12345 * Ulanish: Tirik tutish * * Misol javobi (ishlov berilgan so'rov uchun) * HTTP/1.1 200 OK * Aloqa: yopish * Kontent turi: matn/html * * buyrug'i: F param1: 100 */void pollWebServer () {if (wServer! = null) {// Agar veb-server bo'lsa mijoz so'rovi ishlayapti = wServer.available (); // Keyingi Mijozni // serveriga yuklang (agar so'rovlar kutilmasa null) if (request! = Null) {// agar so'rov jarayoni bo'lsa String fullRequest = request.readString (); // So'rov tarkibini mag'lubiyat sifatida saqlang String ip = request.ip (); // Mijozlarning IP -manzillarini string sifatida saqlang String requestString = parseRequest (fullRequest.toUpperCase ()); // Barcha qo'shimcha // ma'lumotlarni olib tashlang, faqat so'rovlar qatorini qoldiring (GETdan keyin matn) // (mag'lubiyatni tekshirishni osonlashtirish uchun katta harfga o'tadi) if (requestString.indexOf ("REQUEST?")! = -1) { // So'rovda "REQUEST?" Borligini tekshiradi. String javob = interpretRequest (requestString); // so'rovni so'rov tarjimoniga yuboradi request.write ("HTTP/1.1 200 OK / nUlanish: yopish / nMazmun turi: matn/html / n / n" + javob); // so'rov bajarilganligini aytish uchun 200 ga javob yuboriladi // wServer.disconnect (so'rov) sifatida "javob" qatori; // Mijozni ajratadi} else if if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Agar so'rov String webPageArray = loadStrings ("WEBB -ControlPage.html") veb -sahifasini boshqarish uchun bo'lsa; // Boshqaruv veb-sahifasini / data / WEBB-ControlPage.html dan yuklaydi // (qatorlar qatori sifatida yuklangan) String webPage = ""; // Tartibni osonlashtirish uchun veb -sahifa // satr tanaffuslari bilan qoldirilgan, shuning uchun bu chiziqlar uchun chiziqlar ajratiladi (int i = 0; i portIndex) {// agar o'tgan portIndex Serial.listda to'g'ri indeks bo'lsa () // (ya'ni, ikkita ro'yxatdagi uchinchi variant emas) serialPortIndex = portIndex; // serialPortIndex o'zgaruvchisini yangi ketma -ket port indeksiga o'rnating // (bu faol port yonidagi nuqtani ko'rsatish uchun ishlatiladi)} if (serialPortIndex! = -1) {// port oldindan tanlanganligini tekshiring. (serialPort! = null) {serialPort.stop ();} // agar ketma -ket port ishlatilsa, yangisini yuklashdan oldin uni to'xtating serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Arduino 9600 Baud bilan bog'lanish uchun yangi Serial ob'ektini yarating}}/ * * So'rovlar qatorini oladi (masalan: "request? Command = F & param1 = 100") va * va param1 buyrug'ini olib tashlaydi va uni arduino (bu erda qo'shimcha parametrlar yoki arduino bo'lmagan buyruqlar qo'shiladi) */String interpretRequest (String requestString) {String returnValue = "OK"; // returnValue o'zgarmaydigan String buyrug'ini tayyorlaydi; // Keyingi uchta satr "buyruq =" dan keyin qiymatni chiqaradi //)! = -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; // Keyingi uchta qator" param1 = "dan keyin qiymatni chiqaradi // (requestString.indexOf ("PARAM1 =") + "PARAM1 =". uzunlik ());} boshqa {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // Param1 Stringni butun son sendRobotCommand (buyruq, param1); // Buyruqni Arduino returnValue = "command:" + command + "param1:" + param1; // hozirda faqat tahlil qilingan buyruq, lekin // html sifatida yuborish, shuning uchun formatlashni qaytarish returnValue;}/ * * Buyruqni (hozirda bitta harf) va parametrni (bir bayt 0-255) oladi va uni tinglayotgan va qayta o'qigan arduino * * Hozirgi vaqtda qo'llab -quvvatlanadigan buyruqlar * F - */void sendRobotCommand (String buyrug'i, int param1) {println ("buyruq:" + buyruq + "vaqti:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + buyrug'i); serialPort.write (bayt (param1)); }} // O'rnatishning oxiri/odatiy deb nomlanmaydi // ----------------------------------- -------------------------------------------------- // Misol tugmasi va RectButton kodi, ishlov berish.org misolidan ba'zi o'zgartirishlar bilan // asosan animatsiyani siljitishni soddalashtirish va olib tashlash uchun qilingan // https://processing.org/learning/topics/buttons.html (2008-09-23) sinf tugmasi {int x, y; int kengligi, balandligi; Tugma (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; kenglik = kenglik; balandlik = balandlik; } boolean bosildi () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } else {return false; }}}

5 -qadam: dasturiy ta'minot - (veb -sahifa)

Dasturiy ta'minot - (veb -sahifa)
Dasturiy ta'minot - (veb -sahifa)
Dasturiy ta'minot - (veb -sahifa)
Dasturiy ta'minot - (veb -sahifa)
Dasturiy ta'minot - (veb -sahifa)
Dasturiy ta'minot - (veb -sahifa)

Biz robot bilan gaplashish qoldi, xolos. Gaplashish uchun: (mahalliy tarmoq orqali -derazalarda)

  • Laptop kompyuterining mahalliy IP -manzilini bilib oling. Buning uchun "Ishga tushirish / Dasturlar / Aksessuarlar / Buyruq satri" ga o'ting va terminal oynasi ochilganda "ipconfig" yozing. "IP -manzil" ni yozing va mahalliy tarmoqdagi boshqa kompyuterga o'ting.
  • Veb -brauzerni oching, "https:// (robot kompyuter ip): 12345/ControlPage.html kiriting
  • Boshqaruv veb -sahifasi yuklanishi kerak, "IP manzili" maydoniga robot kompyuterlar ipini kiriting.
  • Robotingizni boshqarishni boshlang.

Gaplashish uchun: (Internet orqali) Endi siz mahalliy darajada ishlayotgan bo'lsangiz, Internet orqali gaplashishingizga bir necha qadam qoldi.

  • (eng qiyin qadam) Portni uzatishni sozlash - Sizning kompyuteringiz mahalliy tarmoqni emas, balki Internetni tinglashi kerak. Buni amalga oshirish uchun siz yo'riqchingizga robotni boshqaradigan kompyuterga ma'lum so'rovlarni yuborishini aytishingiz kerak. Bu biroz murakkab va bu ko'rsatma doirasidan ancha tashqariga chiqadi. Ammo, agar siz PortForward.com saytiga kirsangiz, ular sizga yo'riqnoma konfiguratsiyasi haqida bilishingiz kerak bo'lgan hamma narsani beradi (siz 12345 portini noutbukga yo'naltirishingiz kerak).
  • Keyin Internet -IP -ni toping (WhatIsMyIP.com saytiga tashrif buyuring)
  • Oxir -oqibat, skype -da video qo'ng'iroqni o'rnating va kim bilan gaplashayotgan bo'lsangiz, "https:// (Internet IP): 12345/ControlPage.html" ga tashrif buyuring.
  • Tekshirish veb -sahifasidagi "IP -manzil" maydoniga Internet IP -ni kiriting va sizning Internetga ulangan robotingiz uzoqdan boshqariladi.

6 -qadam: tugadi

Bajarildi
Bajarildi

Xo'sh, hammasi shu. Umid qilamanki, siz robotni uzoqdan haydash bilan vaqtingizni qiziqarli o'tkazyapsiz. Agar sizda dasturiy ta'minot yoki apparat bilan bog'liq muammolar bo'lsa, sharh qoldiring va men sizga yordam beraman. Agar siz yanada aniq loyihalarni ko'rib chiqmoqchi bo'lsangiz, tashrif buyuring: oomlout.com

Tavsiya: