![Создание робота, подключенного к Интернету (примерно за 500 долларов) (с помощью Arduino и нетбука): 6 шагов (с изображениями) Создание робота, подключенного к Интернету (примерно за 500 долларов) (с помощью Arduino и нетбука): 6 шагов (с изображениями)](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10959399-make-a-web-connected-robot-for-about-500-using-an-arduino-and-netbook-6-steps-with-pictures-j.webp)
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
Это руководство покажет вам, как создать собственного робота, подключенного к сети (с помощью микроконтроллера Arduino и ПК Asus eee). Зачем вам нужен робот, подключенный к сети? Конечно, чтобы поиграть. Управляйте своим роботом из любой точки комнаты или страны, используя только Skype и веб-браузер (ничего не нужно устанавливать на управляющий компьютер). После этого? Погрузитесь в программное обеспечение и адаптируйте его, как вам нравится, добавьте GPS, чтобы вы могли смотреть, где вы едете, на карте, добавьте датчики температуры, чтобы отображать градиенты температуры в вашем доме, или датчики гидролокатора, чтобы добавить элементы управления на то, что вы в Интернете водители могут и не могут столкнуться. Функции:
- Недорого - (~ 500 долларов, если вы покупаете все детали новыми и значительно дешевле, если копаетесь в своем мусорном ведре с запчастями)
- После запуска для управления роботом требуется только веб-браузер (и Skype, если вы хотите видеть, куда вы едете).
- Открытый исходный код и легко адаптируемый - (использует микроконтроллер Arduino, обработка для веб-сервера и все программное обеспечение может быть запущено в Linux (весь код также сильно прокомментирован, чтобы упростить переход и изменение))
- Модульный дизайн (не полностью интегрированная система, не беспокойтесь, если вы хотите использовать другую службу видеоконференцсвязи, или если у вас есть штамп Basic, а не Arduino, просто небольшой фрагмент кода и вставьте его)
Вот короткое видео, на котором моего робота, подключенного к Интернету, выгнали из кухни.
Шаг 1. Детали и инструменты
Требуется всего несколько частей: Робот: серво-робот, управляемый Arduino - (SERB) (175 долларов на сайте oomlout.com) или (сделайте свой собственный)
Робот с открытым исходным кодом, который использует микроконтроллер Arduino в качестве своего мозга
(Можно использовать любую платформу с двумя сервоприводами и Arduino (вариант 1) (сообщите мне, если вы обнаружите другие варианты) Компьютер: Asus eee PC 4G (280 долларов США) (@ Лучшая покупка)
Небольшой недорогой ноутбук, идеально подходящий для этой цели
(можно использовать любой ноутбук (или настольный компьютер, если вы хотите работать с аккордом), способный запускать эскизы обработки) Стол для ноутбука: лазерная резка акрила (25 долларов США (@ oomlout)) или (создайте свой собственный шаг 3)
Несколько дополнительных акриловых деталей, которые крепятся к (SERB), чтобы дать ему стол для ноутбука
Nuts and Bols: (доступно в домашних условиях)
- Болт 3 мм x 10 мм (x4)
- Болт 3 мм x 15 мм (x4)
- Гайка 3 мм (8 шт.)
Шаг 2: вырезание деталей и сборка
Есть три варианта получения деталей для рабочего стола ноутбука. Вариант резки 1: (Покупка на сайте oomlout.com)
Детали стола, вырезанные лазером, и необходимое оборудование можно приобрести в oomlout за 25 долларов (здесь)
Вариант 2: (Резка на собственном лазерном резаке или на Ponoko.com)
- Загрузите файл ниже (03-WEBB-Acrylic Parts.cdr или 03-WEBB-Acrylic Parts (Ponoko P2).eps)
- Вырежьте их из акрила толщиной 3 мм (1/8 дюйма).
Вариант 3: (Пила для прокрутки)
- Загрузите образец спиральной пилы снизу (03-WEBB-ScrollSaw Pattern (A4).pdf (для бумаги формата A4) или 03-WEBB-ScrollSaw Pattern (letter).pdf (для бумаги размера Letter))
- Дважды проверьте, не масштабировался ли он при печати (измеряя напечатанные линейки)
- Приклейте к кусочку акрила толщиной 3 мм (1/8 дюйма) и вырежьте кусочки.
Сборка: загрузите руководство по сборке (04-WEBB-Assembly Guide.pdf) ниже и соберите стол ноутбука.
Шаг 3: Программное обеспечение - (Arduino)
Для тех, кто плохо знаком с Arduino, ознакомьтесь с отличным руководством по началу работы на Arduino.cc Прежде всего, ознакомьтесь с программным обеспечением, работающим на Arduino. Это очень простая программа, и все, что делает 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
/ * * Arduino Controlled Web Connected Robot (WEBB) - последовательный хост * Для получения дополнительной информации посетите: 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 - Стоп * Поддерживаемое время - 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, * СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ. * * / // --------------------------------------------- ---------------------------- // НАЧАЛО ПРЕАМБУЛЫ ПОСЛЕДОВАТЕЛЬНОГО СЕРВЕРА ARDUINO // Определение констант, соответствующих каждой команде (также номер кода ascii) #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 "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // ЗАПУСК СЕРВОРОБОТА, УПРАВЛЯЕМОГО ARDUINO (SERB) ПРЕАМБУЛА # include #define LEFTSERVOPIN 10 // Контакт, к которому подключен левый сервопривод #define RIGHTSERVOPIN 9 // Контакт правого сервопривода, подключен к Servo leftServo; Servo rightServo; int leftSpeed = 50; // удерживает скорость роботов leftServo // в процентах от 0 до 100int rightSpeed = 100; // удерживает скорость роботов rightServo // в процентах от 0 до 100 // КОНЕЦ СЕРВОРОБОТА, УПРАВЛЯЕМОГО ARDUINO (SERB) ПРЕАМБУЛА // ------------------- -------------------------------------------------- ----- // Все готово и работаетvoid setup () {Serial.begin (9600); // Запускаем последовательный порт serbSetup (); // устанавливает состояние всех необходимых // выводов и добавляет сервоприводы в ваш скетч} // Основная программа loopvoid loop () {serbPollSerialPort (); // постоянно смотрит на последовательный порт // если есть данные, которые он обрабатывает} // ------------------------------ ----------------------------------------- // НАЧАЛО РАБОТЫ ПОСЛЕДОВАТЕЛЬНОГО СЕРВЕРА ARDUINO / * * Обрабатывает команды, доставленные на последовательный порт arduino & aposs * / void serbPollSerialPort () {int dta; // переменная для хранения последовательного байта if (Serial.available ()> = 5) {// если в буфере 5 байтов (длина полного запроса) 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 интерпретацияCommand (command, param1); // отправляет ему проанализированный запрос & aposs handler}}}}} / * * Принимает команду и параметр и передает их роботу * / void convertCommand (int command, int param1) {if (command == FORWARD) {goForward (); задержка (param1 * 100); goStop ();} // если вперед else if (command == BACKWARD) {goBackward (); задержка (param1 * 100); goStop ();} // если назад else if (command == LEFT) {goLeft (); задержка (param1 * 100); goStop ();} // если осталось else if (command == RIGHT) {goRight (); задержка (param1 * 100); goStop ();} // если правильно else if (command == SETSPEED) {setSpeed (param1);} // если установка скорости else if (command == STOP) {goStop ();} // если остановка else if (command == SETSPEEDLEFT) {setSpeedLeft (param1);} // если устанавливается левая скорость else if (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // если устанавливается правая скорость else {// если нераспознанная команда делает небольшое шимми иди налево(); задержка (150); направо(); задержка (150); goStop (); }} // ---------------------------------------------- -------------------------- // НАЧАЛО ПРОЦЕССОВ УПРАВЛЯЕМЫМ ARDUINO SERVO ROBOT (SERB) / * * настраивает ваш arduino для обращения к вашему SERB, используя включенные процедуры * / void serbSetup () {setSpeed (leftSpeed); pinMode (ЛЕФТСЕРВОПИН, ВЫХОД); // устанавливает левый вывод сигнала серво // на вывод pinMode (RIGHTSERVOPIN, OUTPUT); // устанавливает правый вывод сигнала серво // на вывод leftServo.attach (LEFTSERVOPIN); // присоединяет левый сервопривод rightServo.attach (RIGHTSERVOPIN); // подключает правый сервопривод goStop ();} / * * устанавливает скорость робота между 0- (остановлен) и 100- (полная скорость) * ПРИМЕЧАНИЕ: скорость не изменит текущую скорость, вы должны изменить скорость * затем вызвать ее методов go до внесения изменений. * / void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // устанавливает левую скорость setSpeedRight (newSpeed); // устанавливает правую скорость} / * * Устанавливает скорость левого колеса * / void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // если скорость больше 100 // сделать это 100 if (newSpeed = 100) {newSpeed = 100;} // если скорость больше 100 // сделать 100 if (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 (SERB) // ---------------------------- -----------------------------------------------
Шаг 4. Программное обеспечение - ноутбук-робот (веб-сервер)
(Processing - это язык программирования с открытым исходным кодом и среда, с которой очень легко начать работу. Для получения более подробной информации посетите страницу Processing) Программное обеспечение, которое запускается на портативном роботе, также довольно простое. Это довольно примитивный веб-сервер (прослушивание запросов веб-страниц из веб-браузера), небольшой пользовательский интерфейс (для его настройки) и средства для передачи команд, полученных от веб-сервера, на 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 (надеюсь, появится веб-страница управления с кнопками на ней) -Подробнее о том, как использовать эту страницу на следующем шаге -
Что происходит:
- Веб-сервер прослушивает порт 12345 для HTTP-запросов (что отправляется, когда вы вводите адрес веб-страницы)
- Он отвечает на запросы двух типов.
1. Он прослушивает "ControlPage.html" и отправляет веб-страницу управления. 2. Он прослушивает запросы формы "/ request? Command = F & param1 = 100" (эти команды анализируются и отправляются в Arduino (в этом примере будет в роботе, идущем вперед на 10 секунд) Приложение: (Код для WebServer)
/ * * Arduino Controlled Web Connected Robot (WEBB) - веб-сервер * Для получения более подробной информации посетите: https://www.oomlout.com/serb * * Поведение: программа прослушивает запросы http (веб-страницы) в форме * "/ request ? command = F & param1 = 100 "и затем передает их * Arduino * Поддерживаемые команды - & aposF & apos - 70 - Вперед * & aposB & apos - 66 - Назад * & aposL & apos - 76 - Влево * & aposR & apos - 82 - Вправо * & 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. Щелкните порт связи, к которому подключен ваш Arduino * 2. Используйте кнопки тестирования, чтобы проверить, слушает ли ваш Arduino * (будет двигаться в направлении, указанном на полсекунды) * 3. Нажмите «Пуск», и ваш веб-сервер откроется. прислушиваться к запросам * * * Лицензия: эта работа находится под лицензией Creative Commons * Attribu tion-Share Alike 3.0 Непортированная лицензия. Чтобы * просмотреть копию этой лицензии, посетите * https://creativecommons.org/licenses/by-sa/3.0/ * или отправьте письмо в Creative Commons, 171 Second * Street, Suite 300, Сан-Франциско, Калифорния 94105, * СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ. * * / import processing.serial. *; // импортируем последовательную библиотеку для использования Serial (для разговора с Arduino) import processing.net. *; // импортируем сетевую библиотеку для использования сервера (для связи с Интернетом) / * переменные, связанные с последовательным портом * / int serialPortIndex = -1; // индекс последовательного порта, который мы используем в Serial.list () listString commOptions; // Переменная для хранения Serial.list (), поэтому нет необходимости // опрашивать последовательные порты каждый раз, когда мы хотим ссылаться на них (опрос вызывает // скачок в сервоприводах Arduino) Serial serialPort; // Делает последовательный порт адресуемым на протяжении всего этого скетча / * Переменные, связанные с графикой и рендерингом * / PFont font; // делает шрифт общедоступным, поэтому его нужно загружать только один раз (Arial-72) / * Сетевые переменные * / Server wServer; // Сервер, который обрабатывает веб-запросы int port = 12345; // Порт, который сервер слушает int cycleCount = 0; // Подсчитывает количество выполнений цикла отрисовки (используется для // анимации «бегущего» текста) / * служебные переменные * / PImage bg; // Текущее фоновое изображение / WEBB-background.png / * * Переменные, связанные с кнопкой * (кнопки реализованы очень грубо, ограничивающие рамки сохраняются, а графика и текст * рисуются на фоновом изображении) т.е. перемещение переменных кнопок не изменит внешний вид кнопок * / Button comm1; Кнопка comm2; Кнопка comm3; Кнопка comm4; // Кнопки для выбора правильного последовательного портаButton up; Кнопка правая; Кнопка левая; Button down; // Кнопки направления для проверки ответа робота Button webServer; // Кнопка для запуска веб-сервера / * * устанавливает все необходимое * / void setup () {frameRate (5); // Немного замедляет работу скетча, поэтому система не так утомительна bg = loadImage ("WEBB-background.png"); // Загружает фоновое изображение (хранящееся в папке скетча) size (700, 400); // Устанавливает размер окна скетча font = loadFont ("ArialMT-72.vlw"); // Загружает шрифт, который мы будем использовать в этом скетче commOptions = Serial.list (); // Опрашивает последовательные порты и получает список доступных портов // (выполнение этого только один раз не дает роботу дергаться каждый раз, когда он & aposs // опрашивает последовательный порт) defineButtons (); // Определяет ограничивающие рамки для каждого фона кнопки (bg); // Закрашивает фоновое изображение (на этом изображении изображена вся графика кнопок)} / * Основной цикл эскизов * / void draw () {if (cycleCount == 0) {// - вызов подпрограмм рисования drawCommBox (); // Рисует элементы в поле связи (поле 1) drawTestBox (); // Отрисовывает все элементы в Test Box (поле 2) drawWebServerBox (); // Рисует все элементы в WebServer Box (поле 3)} // - вызываем рабочие процедуры pollWebServer (); // Опрашивает веб-сервер, чтобы узнать, поступили ли какие-либо запросы через сеть} // ------------------------------ ----------------------------------------------//Начало процедуры рисования (разделены, чтобы код было удобнее читать) / * * Процедура обновления рисования (выполняется каждый цикл) для элементов в поле связи (поле 1) * / void drawCommBox () {fill (0, 0, 0); // Устанавливаем черную заливку textFont (font, 15); // Устанавливаем правильный размер шрифта для (int i = 0; i 0) {running = running + ".";} // количество точек основано на cycleCount if ((cycleCount / 1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} текст (выполняется, 520, 210); } cycleCount ++; // Каждый раз при прохождении цикла cycleCount увеличивается на единицу} // Конец процедуры отрисовки // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Запуск подпрограмм обслуживания / * * mousePressed вызывается каждый раз, когда нажимается мышь, это * проверяет, находится ли мышь внутри любого из ограничивающих прямоугольников кнопки * и вызывается ли соответствующая процедура * / void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Изменяет порт связи с индексом 0 в Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Изменяет порт связи с индексом 1 в Serial.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Изменяет порт связи по индексу 2 в Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Изменяет порт связи с индексом 3 в Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Отправляет команду на перемещение робота вперед на 0,5 секунды иначе if (left.pressed ()) {sendRobotCommand ("L", 5);} / / Отправляет команду на перемещение робота влево на 0,5 секунды else if (right.pressed ()) {sendRobotCommand ("R", 5);} // Отправляет команду на перемещение робота вправо на 0,5 секунды else if (down. Press ()) {sendRobotCommand ("B", 5);} // Отправляет команду для перемещения робота назад на 0,5 секунды else if (webServer.pressed ()) {startWebServer ();} // Запускает цикл webServerCount = 0; фон (bg); // Перерисовывает фоновое изображение (на этом изображении изображена вся графика кнопок) draw ();} / * * Вызывается после выполнения, он проверяет Сервер, чтобы увидеть, есть ли какие-либо ожидающие соединения * если есть ожидающее соединение, которое он вытаскивает выдает запрос и передает его подпрограмме parseRequest (String) * для удаления лишнего текста. Затем он отправляется подпрограмме интерпретатора (String), чтобы * вызвать соответствующую подпрограмму действия (т.е. отправить инструкции роботу).* * Запрос передается путем ввода адреса и порта компьютера в веб-браузер * Для локального компьютера "https://127.0.0.1:12345/request?command=F¶m1=100" * * Пример запроса: * GET / request? command = F & param1 = 100 HTTP / 1.1 * User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit / 525.19 (KHTML, как Gecko) * Accept: * // * * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Хост: 127.0.0.1:12345 * Соединение: Keep-Alive * * Пример ответа (для обработанного запроса) * HTTP / 1.1 200 OK * Connection: close * Content-Type: text / html * * command: F param1: 100 * / void pollWebServer () {if (wServer! = null) {// Если веб-сервер выполняется Клиентский запрос = wServer.available (); // Загружаем следующего Клиента в строке // сервера (null, если запросы не ждут) if (request! = Null) {// если есть процесс запроса it String fullRequest = request.readString (); // Сохраняем содержимое запроса в виде строки String ip = request.ip (); // Сохраняем IP-адрес клиентов в виде строки String requestString = parseRequest (fullRequest.toUpperCase ()); // Удаляем всю лишнюю // информацию, оставляя только строку запроса (текст после GET) // (переходит в верхний регистр, чтобы упростить проверку строки) if (requestString.indexOf ("REQUEST?")! = -1) { // Проверяет, есть ли в запросе "ЗАПРОС?" Строковый ответ = интерпретироватьRequest (requestString); // Отправляет запрос в интерпретатор запросов request.write ("HTTP / 1.1 200 OK / nConnection: close / nContent-Type: text / html / n / n" + reply); // Отправляет ответ 200, чтобы сообщить, что запрос был // обработан, и строку «reply» в качестве ответа wServer.disconnect (request); // Отключает клиента} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Если запрос относится к управляющей веб-странице String webPageArray = loadStrings ("WEBB-ControlPage.html"); // Загружает веб-страницу управления из / data / WEBB-ControlPage.html // (загружается как массив строк) String webPage = ""; // Чтобы упростить редактирование, на веб-странице остались // разрывы строк, поэтому цикл for удаляет эти строки for (int i = 0; i portIndex) {// если переданный portIndex является допустимым индексом в Serial.list () // (т.е. не третий вариант в списке из двух) serialPortIndex = portIndex; // устанавливаем для переменной serialPortIndex новый индекс последовательного порта // (это используется для отображения точки рядом с активным портом)} if (serialPortIndex! = -1) {// проверяем, был ли выбран порт когда-то ранее, если (serialPort! = null) {serialPort.stop ();} // если последовательный порт уже используется, остановите его перед загрузкой нового serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Создаем новый объект Serial для связи с Arduino 9600 Baud}} / * * Принимает строку запроса (например, «request? Command = F & param1 = 100»), удаляет команду * и param1 и передает ее в arduino (здесь можно было бы добавить дополнительные параметры или команды, отличные от arduino) * / String ИнтерпретацияRequest (String requestString) {String returnValue = "OK"; // Подготавливает переменную returnValue String command; // Следующие три строки извлекают значение после "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 =". length ());} else {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // Превращает строку param1 в целое число sendRobotCommand (команда, параметр1); // Отправляет команду в процедуру, которая отправляет ее в Arduino returnValue = "command:" + command + "param1:" + param1; // на данный момент только проанализированная команда, но отправка // как html, чтобы можно было включить форматирование return returnValue;} / * * Принимает команду (в настоящее время одна буква) и параметр (один байт 0-255) и отправляет их в arduino *, который прослушивает и повторно передает * поддерживаемые в настоящее время команды * F - * / void sendRobotCommand (String command, int param1) {println ("command:" + command + "time:" + param1); Строка checkString = "AAA"; если (serialPort! = null) {serialPort.write (checkString + команда); serialPort.write (байт (параметр1)); }} // Конец настройки / не очень часто называемые процедуры // ----------------------------------- -------------------------------------------------- // Пример кнопки и кода RectButton из примера processing.org с некоторыми изменениями // в основном для упрощения и удаления анимации наведения // https://processing.org/learning/topics/buttons.html (2008-09-23) class Button {int x, y; int ширина, высота; Кнопка (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; width = iwidth; height = iheight; } логическое нажатие () {если (overRect ()) {вернуть истину; } else {return false;}} логическое overRect () {if (mouseX> = x && mouseX = y && mouseY <= y + height) {return true; } else {вернуть ложь; }}}
Шаг 5: Программное обеспечение - (Веб-страница)
Что ж, мы почти закончили, все, что осталось, - это поговорить с вашим роботом. Чтобы поговорить: (по локальной сети-на Windows-)
- Узнайте локальный IP-адрес портативного компьютера. Для этого перейдите в «Пуск / Программы / Accesories / Командная строка» и, когда откроется окно терминала, введите «ipconfig». Запишите «IP-адрес» и перейдите к другому компьютеру в вашей локальной сети.
- Откройте веб-браузер и введите https:// (ip-адрес компьютера-робота): 12345 / ControlPage.html.
- Должна загрузиться управляющая веб-страница, в поле «IP-адрес» введите IP-адрес компьютера робота.
- Начни управлять своим роботом.
Чтобы начать разговор: (через Интернет) Теперь, когда он работает локально, он может говорить через Интернет всего в нескольких шагах от вас.
- (самый сложный шаг) Настройка переадресации портов - ваш компьютер должен прослушивать Интернет, а не только локальную сеть. Для этого вам нужно указать маршрутизатору, чтобы он передавал определенные запросы компьютеру, управляющему роботом. Это немного сложно и выходит далеко за рамки данного руководства. Однако, если вы посетите PortForward.com, они предоставят вам все, что вам нужно знать о настройке маршрутизатора (вам необходимо перенаправить порт 12345 на свой ноутбук-робот).
- Затем найдите свой IP-адрес в Интернете (посетите WhatIsMyIP.com)
- Наконец, запустите Skype, настройте видеозвонок и попросите всех, с кем вы разговариваете, посетить "https:// (IP-адрес в Интернете): 12345 / ControlPage.html"
- Введите IP-адрес в Интернете в поле «IP-адрес» на веб-странице управления, и ваш робот, подключенный к сети, будет управляться издалека.
Шаг 6: Готово
Ну вот и все. Надеюсь, вы весело проводите время, управляя своим роботом издалека. Если у вас есть какие-либо проблемы с программным или аппаратным обеспечением, не стесняйтесь оставлять комментарии, и я постараюсь вам помочь. Если вы хотите ознакомиться с другими интересными проектами, попробуйте посетить: oomlout.com
Рекомендуемые:
Создание стерео магазина, подключенного к Интернету: 6 шагов (с изображениями)
![Создание стерео магазина, подключенного к Интернету: 6 шагов (с изображениями) Создание стерео магазина, подключенного к Интернету: 6 шагов (с изображениями)](https://i.howwhatproduce.com/images/010/image-29853-j.webp)
Создание стерео магазина, подключенного к Интернету: когда я включаю радио во время вождения, я переключаюсь на местную радиостанцию колледжа 90.7 KALX. На протяжении многих лет и в разных местах, где я жил, я всегда слушал радиостанции колледжей. Благодаря мощи Интернета я теперь могу слушать
55-дюймовый дисплей с цифровой фоторамкой 4K примерно за 400 долларов: 7 шагов (с изображениями)
![55-дюймовый дисплей с цифровой фоторамкой 4K примерно за 400 долларов: 7 шагов (с изображениями) 55-дюймовый дисплей с цифровой фоторамкой 4K примерно за 400 долларов: 7 шагов (с изображениями)](https://i.howwhatproduce.com/images/001/image-1713-45-j.webp)
55 дюймов, дисплей с цифровой фоторамкой 4K примерно за 400 долларов: есть много руководств о том, как сделать потрясающую цифровую фоторамку с Raspberry Pi. к сожалению, rpi не поддерживает разрешение 4K. Odroid C2 может легко обрабатывать разрешение 4K, но ни одно из этих руководств по rpi не работает для устройства C2. это заняло
Сделайте свою собственную профессиональную машину для чистки пластинок менее чем за 80 долларов и сэкономьте до 3000 долларов и более .: 6 шагов (с изображениями)
![Сделайте свою собственную профессиональную машину для чистки пластинок менее чем за 80 долларов и сэкономьте до 3000 долларов и более .: 6 шагов (с изображениями) Сделайте свою собственную профессиональную машину для чистки пластинок менее чем за 80 долларов и сэкономьте до 3000 долларов и более .: 6 шагов (с изображениями)](https://i.howwhatproduce.com/images/005/image-12622-54-j.webp)
Сделайте свою собственную профессиональную машину для чистки пластинок менее чем за 80 долларов и сэкономьте до 3000 долларов и больше. Простите за мой английский. После того, как я вернулся к звуку старого доброго винила, у меня возникла проблема, с которой сталкивается каждый поклонник пластинок. Как правильно почистить записи!? В Интернете есть много способов. Более дешевые способы, такие как Knosti или Discofilm, но также
Сделайте свой собственный симпатичный фетровый чехол для EeePC / нетбука примерно за 8 долларов (и сэкономьте 91 доллар вместо покупки в Redmaloo): 5 шагов (с изображениями)
![Сделайте свой собственный симпатичный фетровый чехол для EeePC / нетбука примерно за 8 долларов (и сэкономьте 91 доллар вместо покупки в Redmaloo): 5 шагов (с изображениями) Сделайте свой собственный симпатичный фетровый чехол для EeePC / нетбука примерно за 8 долларов (и сэкономьте 91 доллар вместо покупки в Redmaloo): 5 шагов (с изображениями)](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10966851-make-your-own-nice-felt-eeepc-netbook-pouch-for-about-8-and-save-91-instead-of-buying-from-redmaloo-5-steps-with-pictures-j.webp)
Сделайте свой собственный красивый фетровый чехол для EeePC / нетбука примерно за 8 долларов (и сэкономьте 91 доллар вместо покупки в Redmaloo): это руководство покажет вам, как сделать свой собственный, очень красивый и хорошо выглядящий ноутбук или даже лучший чехол для нетбука. Он сохранит ваш нетбук, подарит вам коврик для мыши, ощущение использования чего-то уникального, красивого и сделанного вручную, а также приятное ощущение
Две светодиодные лампы-книжки AAA примерно за 10 долларов: 7 ступеней
![Две светодиодные лампы-книжки AAA примерно за 10 долларов: 7 ступеней Две светодиодные лампы-книжки AAA примерно за 10 долларов: 7 ступеней](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10968477-two-aaa-led-book-lights-for-around-10-7-steps-j.webp)
Две светодиодные книжные фонари AAA примерно за 10 долларов: Любите читать, но не хотите платить слишком много за светодиодные книжные фонари? Более дешевые батареи выглядят именно так и обычно работают с дорогими круглыми батареями. Здесь я покажу вам, как сделать два светодиодных книжных светильника AAA примерно за 10 долларов и примерно за полторы