Мазмуну:

Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуп): 6 кадам (Сүрөттөр менен)
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуп): 6 кадам (Сүрөттөр менен)

Video: Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуп): 6 кадам (Сүрөттөр менен)

Video: Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуп): 6 кадам (Сүрөттөр менен)
Video: Международный аэропорт Ханэда всегда будет в курсе потребностей наших клиентов. 🇷🇺 2024, Июль
Anonim
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуу менен)
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуу менен)
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуу менен)
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуу менен)
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуу менен)
Интернетке туташкан робот жасаңыз (болжол менен 500 долларга) (Arduino жана Netbookту колдонуу менен)

Бул Instructable сизге кантип вебке туташкан роботту (Arduino микроконтроллерин жана Asus eee PC колдонуп) курууну көрсөтөт. Албетте ойнош үчүн. Роботуңузду бөлмөдө же бүткүл өлкө боюнча айдап келиңиз, Skype жана веб -браузерден башка эч нерсе колдонбостон (көзөмөлдөөчү компьютерге орнотууга эч нерсе жок). Андан кийин? Программаны казып алыңыз жана каалаганыңызга ылайыкташтырыңыз, GPS кошуңуз, ошондо картада кайда бара жатканыңызды көрө аласыз, үйүңүздөгү температура градиенттерин картага температура сенсорлорун кошуңуз, же вебдеги нерселериңизди көзөмөлдөө үчүн сонардык сенсорлорду кошуңуз. айдоочулар жолугушу мүмкүн жана мүмкүн эмес. Өзгөчөлүктөрү:

  • Арзан
  • Роботту башкара баштаганда гана веб -браузер талап кылынат - (жана сиз кайда баратканыңызды билгиңиз келсе, Skype)
  • Ачык булак жана оңой ыңгайлаштыруу - (Arduino микро контроллерин колдонот, веб -сервер үчүн иштетүү жана бардык программалык камсыздоону Linuxта иштетсе болот (бардык коддор секирүү жана нерселерди оңой өзгөртүү үчүн комментарийленген))
  • Модулдук Дизайн (толугу менен интеграцияланган система эмес, эгер сиз башка видеоконференция кызматын колдонгуңуз келсе, тынчсызданбаңыз, же сизде Arduino эмес, Негизги штамп болсо, анда кичинекей коддун бир бөлүгү жана аны оюңузга салыңыз)

Бул жерде менин вебке туташкан роботумдун ашканадан кууп чыккан видеосу.

1 -кадам: Бөлүктөр жана шаймандар

Бөлүктөр жана куралдар
Бөлүктөр жана куралдар

Бир нече бөлүктөр гана талап кылынат: Робот: Arduino Controlled Servo Robot - (SERB) ($ 175 @ oomlout.com) же (өзүңүздүкүн жасаңыз)

Arduino микро контроллерин мээ катары колдонгон ачык булак робот

(ардуино менен кош серво робот платформасын колдонсо болот (1 -вариант) (эгер сиз башка варианттарды тапсаңыз мага кабарлап коюңуз) Компьютер: Asus eee PC 4G ($ 280) (@Best Buy)

Кичинекей арзан ноутбук бул үчүн идеалдуу

(иштөө жөндөмүнө ээ болгон каалаган ноутбук (же аккорд менен иштөөнү кааласаңыз) Эскиздерди иштетүүгө болот) Laptop Desk: Laser Cut Acrylic ($ 25 (@ oomlout))) же (өз кадамыңызды 3)

Ноутбуктун үстөлүнө стол берүү үчүн (SERB) бекитилген бир нече кошумча акрил бөлүктөрү

Гайкалар жана болттар: (үй кампасында бар)

  • 3мм х 10мм болт (x4)
  • 3мм х 15мм болт (x4)
  • 3мм гайка (x8)

2 -кадам: кесимдерди жана ассамблеяны кесүү

Кесимдер жана монтаж
Кесимдер жана монтаж
Кесимдер жана монтаж
Кесимдер жана монтаж
Кесимдер жана монтаж
Кесимдер жана монтаж
Кесимдер жана монтаж
Кесимдер жана монтаж

Ноутбук үстөлүңүзгө даана алуу үчүн үч вариант бар. Кесүү Option 1: (oomlout.com сайтынан сатып алуу)

лазердик кесилген столдор жана керектүү жабдыктар oomloutтан 25 долларга жеткиликтүү (бул жерде)

2 -вариант: (Өз лазер кескич же Ponoko.com боюнча кесүү)

  • Төмөндөгү файлды жүктөп алыңыз (03-WEBB-Acrylic Parts.cdr же 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • Аларды 3мм (1/8 ") акрилден кесип алыңыз

3 -вариант: (Scroll Saw)

  • Ылдый түшүрүү үлгүсүн төмөндөн түшүрүү (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 өлчөмүндөгү кагаз үчүн) же 03-WEBB-ScrollSaw Pattern (тамга).pdf (тамга өлчөмүндөгү кагаз үчүн))
  • Басып чыгарууда масштабдалбаганын эки жолу текшериңиз (басылган сызгычтарды өлчөө менен)
  • 3мм (1/8 ") акрил кесимине жабыштырып, бөлүктөрүн кесип алыңыз.

Кураштыруу: Төмөндө монтаждоочу колдонмону (04-WEBB-Монтаждоо Колдонмосу.pdf) жүктөп алып, ноутбук столун чогуу коюңуз.

3 -кадам: Программалык камсыздоо - (Arduino)

Программалык камсыздоо - (Arduino)
Программалык камсыздоо - (Arduino)

Arduinoго жаңы келгендер үчүн Arduino.ccтан баштоо боюнча эң сонун көрсөтмөнү карап көрүңүз. Бул абдан жөнөкөй программа, Arduino 5 сериялуу маекти издөө үчүн анын сериялык портун көзөмөлдөйт.

  • Байт 1-3 ("AAA" байттарын текшерүү)
  • Байт 4 буйругу (arduinoго эмне кылуу керектигин айтат) (Колдоого алынган буйруктар 'F' - Алга, 'B' - Артка, 'L' - Сол, 'R' - Оң, 'S' - Ылдамдык, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Токтоо)
  • Байт 5 Параметри - Көчүрүү буйруктары үчүн бул убакыт аралыгы (Параметр * 100 мс), ал эми ылдамдык үчүн 0-100гө чейин пайыздык буйруктар катары чечмеленет

Код кылдат комментарийленген жана бул буйрукка кошумча буйруктарды кошуу оңой болушу керек.

  • Тиркелген zip файлын жүктөп алыңыз. (05-WEBB-Arduino Code.zip)
  • Arduino Sketch каталогуна ачыңыз. (демейки: Менин документтерим / Arduino)
  • Arduino өнүктүрүү чөйрөсүн ачыңыз жана Arduinoго жүктөңүз.

Көчүрүү жана чаптоо үчүн

  • Кодду астынан көчүрүү.
  • Arduino өнүктүрүү чөйрөсүнө чаптаңыз.
  • Ардуиного жүктөө.

Тиркеме: Arduino программасы

/ * * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * Көбүрөөк маалымат алуу үчүн: https://www.oomlout.com/serb * * Жүрүм -туруму: Arduino 254 форматындагы буйрук * үчүн Сериялык портун угат, 88, 88, (БУЙРУК), (Убакыт) * Колдоого алынган буйруктар - & aposF & apos - 70 - Алга * & aposB & apos - 66 - Артка * & aposL & apos - 76 - Солго * & aposR & apos - 82 - Оңго * & aposS & apos - 83 - Ылдамдык * & aposX & aposL - 88 - SetSpeed * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Колдоого алынган убакыт - 0 - 255 (0дон 25.5 секундага чейин) балл * 100 миллисекунд * сп * Зым: Оңго Servo Сигнал - пин 9 * Сол Серво Сигнал - пин 10 * * Лицензия: Бул чыгарма Creative Commons * Attribution-Share Alike 3.0 Unported лицензиясына ылайык лицензияланган. Бул лицензиянын көчүрмөсүн көрүү үчүн * https://creativecommons.org/licenses/by-sa/3.0/ * дарегине баш багыңыз же Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * АКШ. * */// --------------------------------------------- ---------------------------- // ARDUINO SERIAL SERVER PREAMBLE СТАРТЫ // Ар бир буйрукка туура келген константаларды аныктоо (ошондой эле ascii кодунун номери))#аныктоо FORWARD 70 // F#артка 66 аныктоо // B#аныктоо LEFT 76 // L#аныктоо УКУК 82 // R#аныктоо SETSPEED 83 // S#аныктоо STOP 67 // C#аныктоо SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *Уч текшерүү байты (робот кокус сериялык *маалыматтарга жооп бербөө үчүн колдонулат) учурда "AAA" */#define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ARDUINO БАШКАРЫЛГАН СЕРВО РОБОТУНУН СТАРТЫ (СЕРБ) ПРЕМБЛ#камтыйт #define LEFTSERVOPIN 10 // Сол сервого туташкан пин#RIGHTSERVOPIN 9ну аныктоо // Оң жактагы servoServo leftServo менен туташкан пин; Servo rightServo; int leftSpeed = 50; // leftServo роботторунун ылдамдыгын кармайт // 0 менен 100инттин ортосундагы пайыздык оңSpeed = 100; // rightServo роботторунун ылдамдыгын кармайт // 0 менен 100дүн ортосундагы пайыз // ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE // ------------------- -------------------------------------------------- ----- // Баарын ишке киргизет жана runvoid setup () {Serial.begin (9600); // serbSetup () сериялык портун баштайт; // бардык керектүү // казыктардын абалын белгилейт жана эскизге серволорду кошот} // Негизги программа loopvoid loop () {serbPollSerialPort (); // үзгүлтүксүз сериялык портко карайт // эгерде маалымат бар болсо, аны иштетет} // ------------------------------ ----------------------------------------- // ARDUINO SERIAL SERVER ROUTINES БАШТАЛЫШЫ/ * * Ардуино жана апосалдык сериялык портко жеткирилген буйруктарды иштетет */void serbPollSerialPort () {int dta; // сериялык байтты кармоо үчүн өзгөрмө, эгерде (Serial.available ()> = 5) {// эгерде 5 байт буферде болсо (узундугу толук суроо -талап) 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); // анализделген сурамды ага & апосс иштетүүчүгө жөнөтөт}}}}}/ * * Буйрукту жана параметрди алат жана роботко берет */void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); кечигүү (param1 * 100); goStop ();} // if else if if (command == BACKWARD) {goBackward (); кечигүү (param1 * 100); goStop ();} // if backwards else if (command == LEFT) {goLeft (); кечигүү (param1 * 100); goStop ();} // if if else if if (command == RIGHT) {goRight (); кечигүү (param1 * 100); goStop ();} // эгер туура болсо, анда (command == SETSPEED) {setSpeed (param1);} // if if else speed if if (command == STOP) {goStop ();} // if else else if (command == SETSPEEDLEFT) {setSpeedLeft (param1);} // эгерде башка ылдамдыкты жөнгө салса (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // эгерде туура ылдамдыкты башкага орнотсоңуз {// эгер таанылбаган команда бир аз шимай жасаса солго баруу(); кечиктирүү (150); goRight (); кечиктирүү (150); goStop (); }} // ---------------------------------------------- -------------------------- // ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES START/ * * аркылуу SERBге кайрылуу үчүн arduino орнотулат. киргизилген процедуралар*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // сол серво сигнал пинин коет // pinMode чыгаруу үчүн (RIGHTSERVOPIN, OUTPUT); // туура servo сигнал пин орнотот // leftServo.attach чыгаруу үчүн (LEFTSERVOPIN); // солго servo оңго кошотServo.attach (RIGHTSERVOPIN); // туура servo тиркемелерди тиркейт goStop ();}/ * * роботтун ылдамдыгын 0- (токтотулган) менен 100- (толук ылдамдык) ортосунда орнотот * ЭСКЕРТҮҮ: ылдамдык учурдагы ылдамдыкты өзгөртпөйт, сиз ылдамдыкты өзгөртүшүңүз керек * анан бирөөнү чакырыңыз өзгөрүүлөр боло электе go методдорунун.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // сол ылдамдыкты коет setSpeedRight (newSpeed); // туура ылдамдыкты коет}/ * * Сол дөңгөлөктүн ылдамдыгын коет */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // if speed 100дөн жогору болсо // жасаңыз 100 эгерде (newSpeed = 100) {newSpeed = 100;} // эгер ылдамдык 100дөн жогору болсо // аны 100 кылыңыз (newSpeed <= 0) {newSpeed = 0;} // эгер ылдамдык 0дон аз болсо // it 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 БАШКАРЫЛГАН СЕРВО РОБОТУНУН (СЕРБ) РОТИНДЕРИНИН АЯГЫ // ---------------------------- -----------------------------------------------

4 -кадам: Программалык камсыздоо - Робот ноутбук (WebServer)

Программалык камсыздоо - Робот ноутбук (WebServer)
Программалык камсыздоо - Робот ноутбук (WebServer)

(Кайра иштетүү - бул ачык булак программалоо тили жана аны баштоо өтө оңой чөйрө. Көбүрөөк маалымат алуу үчүн Processingге баш багыңыз) Робот ноутбугунда иштеген программа дагы абдан жөнөкөй. Бул абдан жөнөкөй веб-сервер (веб-браузерден веб-баракча суроо-талаптарын угуу), кичинекей колдонуучу интерфейси (аны орнотуу үчүн) жана Web Serverден алынган буйруктарды Arduinoго өткөрүү мүмкүнчүлүктөрү. Тез орнотуу үчүн: (терезелерде)

  • Төмөндөгү zip файлын жүктөп алыңыз (06-WEBB-Processing Webserver (windows exe).zip)
  • Аны ачып,.exe файлын иштетиңиз (_WEBB_WebServer_RobotComputer.exe)

Иштетүүдө түзөтүү үчүн:

  • Төмөндөгү zip файлын жүктөп алыңыз (06-WEBB-Processing Webserver (баштапкы файлдар).zip)
  • Компьютериңиздин каалаган жерин ачыңыз.
  • Иштетүү чөйрөсүн ачыңыз жана ачыңыз (_WEBB_WebServer_RobotComputer.pde)

Сыноо үчүн:

  • Программаны иштетүү.
  • №1 кутучада сиздин компьютериңиздеги жеткиликтүү коммерциялык порттордун тизмеси болот (Arduino туташкан бирөөнү чыкылдатыңыз. (Компьютериңиз туташып жатканда роботуңуз бир нече жолу чайпалат жана тандалган нерсенин жанында көк чекит пайда болот) комм порт)
  • #2 кутусунда Arduino туташып турганын текшериңиз. Жебелердин бирин чыкылдатыңыз жана роботуңуз басылган багытта жарым секундага жылат деп үмүттөнөбүз.
  • #3 кутучасында веб -серверди иштетүү үчүн "Старт" баскычын басыңыз.
  • Веб -браузерди ачыңыз (робот ноутбукта) жана https://127.0.0.1:12345/ControlPage.html дарегине кириңиз (үмүт кылам, баскычтары бар көзөмөлдөөчү веб -баракча пайда болот) -Бул баракты кийинки баскычта кантип колдонуу керектиги жөнүндө маалымат. -

Эмне болуп жатат:

  • Веб -сервер http сурамдары үчүн 12345 портун угат (веб баракчанын дарегин тергениңизде эмне жөнөтүлөт)
  • Ал жооп берген сурамдардын эки түрү бар.

1. Бул "ControlPage.html" угат жана Webpage көзөмөлүн жөнөтөт 2. "/request? Command = F & param1 = 100" түрүндөгү сурамдарды угат (бул буйруктар талданат жана Arduinoго жөнөтүлөт (бул мисал роботто 10 секунда алдыга жылат) Тиркеме: (WebServerдин коду)

/ * * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Көбүрөөк маалымат алуу үчүн: https://www.oomlout.com/serb * * Жүрүм -турум: Программа http (веб -баракча) суроо -талаптарын * "/суроо түрүндө угат ? command = F & param1 = 100 ", анан аларды * Arduino * Колдоого алынган Командаларга - & aposF & apos - 70 - Алга * & aposB & apos - 66 - Артка * & aposL & apos - 76 - Солго * & aposR & apos - 82 - Оңго * & aposS & apos - 83 - Апп * жана aposX - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0ден 25.5 секундга чейин) мааниси * 100 миллисекунд * * ControlPage.html * * сураса браузерге көзөмөл веб -баракчасын тейлейт. Иштетүү: 1. Сиздин Arduino туташкан Комм портун чыкылдатыңыз * 2. Сиздин тестуңуздун баскычтарын колдонуп, сиздин arduino угуп жаткандыгын билиңиз * (жарым секундага басылган багытта жылат) * 3. Старт басыңыз жана веб -сервериңиз суроо -талаптарды угуу * * * Лицензия: Бул чыгарма 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, * АКШ. * */импортту иштетүү.сериал. *; // сериялык колдонуу үчүн сериялык китепкананы импорттоо (Arduino менен сүйлөшүү үчүн) import processing.net.*; // Serverди колдонуу үчүн таза китепкананы импорттоо (интернет менен сүйлөшүү үчүн)/ * Сериялык портко байланыштуу өзгөрмөлөр */int serialPortIndex = -1; // биз Serial.list () listString commOptions колдонуп жаткан сериялык порттун индекси; // Serial.list () сакталуучу өзгөрмө, андыктан сурамжылоонун кажети жок // сериялык порттор биз аны ар бир жолу кыскарткысы келгенибизде (сурамжылоо arduino сервосунда // секирүүнү пайда кылат) Serial serialPort; // Сериялык портту ушул эскиз боюнча даректүү кылат/ * Графикалык жана рендерлүү байланышкан өзгөрмөлөр */PFont шрифти; // шрифтти жалпыга ачык кылат, ошондуктан аны бир гана жолу жүктөө керек (Arial-72)/ * Тармакка байланыштуу өзгөрмөлөр */Server wServer; // Веб -сурамдарды иштетүүчү сервер = 12345; // Сервер угуп жаткан порт CycleCount = 0; // Чийүү циклинин канча жолу аткарылганын эсептейт ("иштеп жаткан" текстти жандандыруу үчүн колдонулат)/ * Utility Variables */PImage bg; // Фондук сүрөт азыркы учурда / WEBB-background.png/ * * Түймө менен байланышкан өзгөрмөлөр * (баскычтар өтө орой ишке ашырылат, чектөө кутучалары сакталат жана фондук сүрөттө графикалык жана текст * тартылган) б.а. жылуучу баскычтын өзгөрмөлөрү баскычтардын көрүнүшүн жылдырбайт */Button comm1; Button comm2; Button comm3; Button comm4; // Туура сериялык портту тандоо баскычтарыButton up; Туура баскыч; Баскыч солго; Төмөнкү баскыч; // Роботтун жооп берерин текшерүү үчүн багыттоочу баскычтарButton webServer; // WebServer/ * * баштоо баскычы бардыгын жөндөйт */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 (); // Комм кутусуна эмеленттерди тартат (1 -куту) drawTestBox (); // Тест кутусундагы бардык элементтерди тартат (2 -куту) drawWebServerBox (); // WebServer кутусундагы бардык элементтерди тартат (кутуча 3)} //- чалуу жумушчу тартиптери pollWebServer (); // Веб-серверди сурамжылоо, тармак аркылуу кандайдыр бир сурамдар келген-келбегенин билүү үчүн} // ------------------------------ ----------------------------------------------//Баштоо күн тартибин тартуу (кодду окуу үчүн жагымдуу кылуу үчүн бөлүңүз)/ * * Коммут кутучасындагы нерселер үчүн чийүүнү жаңыртуу тартиби (ар бир циклде аткарылат) */void drawCommBox () {fill (0, 0, 0); // Кара текстке толтурууну коюңуз TextFont (шрифт, 15); // Шрифтти туура өлчөмгө коюңуз (int i = 0; i 0) {running = running + ".";} // чекиттердин саны cycleCountко негизделет, эгерде ((cycleCount /1)> 1) { чуркоо = чуркоо + ".";} if ((cycleCount / 1)> 2) {жүгүрүү = чуркоо + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} текст (иштеп жаткан, 520), 210); } cycleCount ++; // CycleCount аркылуу ар бир жолу бирден көбөйтүлөт} // Чийүү тартибинин аягы // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Кызмат көрсөтүүлөрдүн башталышы/ * * mousePressed чычкан басылган сайын чакырылат, бул * чычкан баскычтын чектөөчү кутучалардын биринин ичинде экендигин текшерет * жана эгерде ал тиешелүү тартип болсо, */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Serial.list () ичинде 0 индекси боюнча коммутатор портуна өзгөртүүлөр киргизилет, эгерде (comm2.pressed ()) {updateSerialPort (1);} // Сериалдагы индекстин 1деги портко өзгөрүүлөр.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Serial.list (2) индексиндеги 2 байланыш портуна өзгөртүүлөр киргизилет if if (comm4.pressed ()) {updateSerialPort (3);} // Serial.list () индекси 3төгү коммут портуна өзгөртүүлөр киргизилет, эгерде (up.pressed ()) {sendRobotCommand ("F", 5);} // роботту Алга 0,5ке жылдыруу үчүн буйрук жөнөтөт башка секундалар болсо (left.pressed ()) {sendRobotCommand ("L", 5);} / /Роботту солго жылдыруу үчүн буйрукту 0,5 секундга башкага жөнөтөт, эгерде (right.pressed ()) {sendRobotCommand ("R", 5);} // Роботту Оңго 0,5 секундага жылдыруу үчүн буйрук жөнөтөт, эгерде (ылдый. pressed ()) {sendRobotCommand ("B", 5);} // Роботту 0,5 секундга Артка жылдыруу үчүн башка команда жөнөтөт, эгерде (webServer.pressed ()) {startWebServer ();} // WebServer cycleCount = башталат 0; фон (bg); // Фондогу сүрөттү кайра боёйт (бул сүрөттө бардык баскычтардын графикасы бар) draw ();}/ * * Аткаруу жолу чакырылганда, серверди күтүп турган байланыштар бар -жогун текшерет * эгерде күтүү байланышы бар болсо кошумча текстти алып салуу үчүн өтүнүчтү чыгарып, parseRequest (String) * тартибине өткөрөт. Бул андан кийин interpretRequest (String) тартибине * тиешелүү иш тартибин чакыруу үчүн жөнөтүлөт (б.а. роботко көрсөтмөлөрдү жөнөтүү).* * Суроо компьютердин дарегин жана портун веб -браузерге киргизүү аркылуу кабыл алынат * Жергиликтүү машина үчүн "https://127.0.0.1:12345/request?command=F&param1=100" * * Мисал Сурам: * GET/суроо? command = F & param1 = 100 HTTP/1.1 * Колдонуучу-Агент: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, Gecko сыяктуу) * Кабыл алуу: * // * * Кабыл алуу-Тил: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive * * Example Reply (иштетилген суроо үчүн) * HTTP/1.1 200 OK * Байланыш: жабуу * Мазмун түрү: текст/html * * буйругу: F param1: 100 */void pollWebServer () {if (wServer! = null) {// If the webServer Клиенттин өтүнүчү иштеп жатат = wServer.available (); // Кийинки Кардарды // серверине жүктөңүз (эгерде эч кандай суроо күтүлбөсө null) if (request! = Null) {// эгерде суроо процесси бар болсо String fullRequest = request.readString (); // Сурамдын мазмунун сап катары сактоо String ip = request.ip (); // Кардарлардын ip дарегин сап катары сактоо String requestString = parseRequest (fullRequest.toUpperCase ()); // Бардык кошумча маалыматты алып салыңыз // суроо тилкесин гана калтырыңыз (GETтен кийинки текст) // (сап текшерүүнү жеңилдетүү үчүн чоң тамгага жылат) if (requestString.indexOf ("REQUEST?")! = -1) { // Сурамдын "REQUEST?" Бар же жок экенин текшерет. String reply = interpretRequest (requestString); // Сурам котормочуга суроо-талап жөнөтөт request.write ("HTTP/1.1 200 OK / nБайланыш: жабуу / nМазмун түрү: текст/html / n / n" + жооп); // 200 сурамдын аткарылгандыгын айтуу үчүн 200гө жооп жөнөтөт жана "жооп" сабы wServer.disconnect (суроо) катары; // Кардарды ажыратат} else if if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Эгерде суроо String webPageArray = loadStrings ("WEBB -ControlPage.html") көзөмөлдөөчү веб -баракчасы үчүн болсо; // Web data баракчасын / data / WEBB-ControlPage.html // жүктөйт (саптардын массиви катары жүктөлөт) String webPage = ""; // Түзөтүүнү жеңилдетүү үчүн веб -баракча // линия үзүлүштөрү менен калтырылган, андыктан бул линияларды стриоп кылат (int i = 0; i portIndex) {// эгер өткөн portIndex Serial.listтеги жарактуу индекс болсо () // (б.а. экөөнүн тизмесинде үчүнчү вариант эмес) serialPortIndex = portIndex; // serialPortIndex өзгөрмөсүн жаңы serialport индексине коюңуз // (бул активдүү порттун жанындагы чекитти көрсөтүү үчүн колдонулат)} if (serialPortIndex! = -1) {// мурунтан эле порт тандалганын текшериңиз (serialPort! = null) {serialPort.stop ();} // эгерде Сериялык порт колдонулуп жаткан болсо, аны жаңысын жүктөөдөн мурун токтотуңуз serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Arduino 9600 Baud менен байланышуу үчүн жаңы сериялык объектти түзүңүз}}/ * * Сурамдын сабын алат (мис: "request? Command = F & param1 = 100") жана * жана param1 буйругун алып салып, аны arduino (кошумча параметрлерди же arduino эмес командаларды кошуу бул жерде жасалат) */String interpretRequest (String requestString) {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 = "кийин маанини чыгарат // (requestString.indexOf ("PARAM1 =") + "PARAM1 =". length ());} else {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // param1 String'ни айландырат бүтүн сан sendRobotCommand (буйрук, param1); // Буйрукту Arduino returnValue = "command:" + command + "param1:" + param1; // учурда жөн гана талданган буйрук, бирок html катары // жөнөтүү, ошондуктан форматтоону камтышы мүмкүн 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 + command); serialPort.write (байт (param1)); }} // Орнотуунун аягы/көбүнчө тартип деп аталбайт // ----------------------------------- -------------------------------------------------- // Мисал баскычы жана RectButton коду кайра иштетүү.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; туурасы = iwidth; бийиктик = бийиктик; } логикалык басылган () {if (overRect ()) {return true; } else {return false;}} логикалык overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } else {return false; }}}

5 -кадам: Программалык камсыздоо - (Webpage)

Программалык камсыздоо - (Webpage)
Программалык камсыздоо - (Webpage)
Программалык камсыздоо - (Webpage)
Программалык камсыздоо - (Webpage)
Программалык камсыздоо - (Webpage)
Программалык камсыздоо - (Webpage)

Эми робот менен сүйлөшүү гана калды. Сүйлөшүү үчүн: (жергиликтүү тармак аркылуу -терезелерде)

  • Ноутбуктун жергиликтүү IP дарегин табыңыз. Бул үчүн "Start / Programs / Accesories / Command Prompt" бөлүмүнө өтүңүз жана терминал терезеси ачылганда "ipconfig" териңиз. "IP дарегин" жазып, жергиликтүү тармактагы башка компьютерге өтүңүз.
  • Веб -браузерди ачыңыз, "https:// (робот компьютеринин ip): 12345/ControlPage.html териңиз
  • Башкаруу веб -баракчасы жүктөлүшү керек, "IP дареги" кутучасына робот компьютерлерин ip деп териңиз.
  • Роботту башкара баштаңыз.

Сүйлөшүү үчүн: (Интернетте) Эми сизде жергиликтүү иштөө бар, аны интернет аркылуу сүйлөшүү бир нече кыска аралыкта.

  • (эң татаал кадам) Портту багыттоону орнотуу - Сиздин компьютер жергиликтүү тармакты эмес, интернеттин үнүн угушу керек. Бул үчүн роутериңизге роботту башкаруучу компьютерге белгилүү бир сурамдарды жөнөтүүсүн айтышыңыз керек. Бул бир аз татаал жана бул Нускаманын алкагынан алда канча ашып кетет. Бирок, эгер сиз PortForward.com сайтына кирсеңиз, алар роутериңизди конфигурациялоо боюнча сизге керектүү нерселердин бардыгын беришет (12345 портун робот ноутбугуңузга жөнөтүшүңүз керек).
  • Кийинки Интернет IPиңизди табыңыз (WhatIsMyIP.com сайтына баш багыңыз)
  • Акыры скайпты орнотуп, видео чалуу жасаңыз жана ким менен сүйлөшүп жатканыңызды билип алыңыз "https:// (интернет IP): 12345/ControlPage.html"
  • Интернеттин IP дарегин контролдоо баракчасындагы "IP дареги" кутусуна териңиз жана сиздин Интернетке туташкан роботуңуз алыстан айдалып жатат.

6 -кадам: Бүттү

Бүттү
Бүттү

Мынакей болду. Сиз роботту алыстан айдап көңүл ачып жатасыз деп үмүттөнөм. Эгерде сизде программалык камсыздоо же жабдыктар боюнча кандайдыр бир көйгөйлөр болсо, комментарий калтыруудан тартынбаңыз, мен сизге жардам берем. Эгерде сиз дагы тыкан долбоорлорду текшергиңиз келсе, барыңыз: oomlout.com

Сунушталууда: