====== Простой ИК-бот на Arduino Uno и Iskra JS====== * Платформы: Arduino, Iskra JS * Языки программирования: Arduino (C++), JavaScript * Тэги: робот, ИК-пульт, сервопривод, сервопривод постоянного вращения, серво 360 {{ :робототехника:ir-servo-robot:ir-servo-robot.jpg |}} ===== Что это ===== Простейший полноприводной бот, контролируемый с инфракрасного пульта дистанционного управления. Мы собрали двух роботов — на базе ARduino Uno и Iskra JS — и устроили гонку. ===== Что понадобится ===== - [[amp>product/iskra-js?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | Iskra JS]] или [[amp>product/arduino-uno?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | Arduino Uno]] - [[amp>product/arduino-power-shield-li-ion?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | Power Shield]] - [[amp>product/arduino-troyka-shield-lp?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | Troyka Shield LP]] - [[amp>product/servo-fs90r?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | Микросервопривод постоянного вращения FS90R]] 4 шт. - [[amp>product/troyka-ir-receiver?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | ИК-приёмник (Troyka-модуль)]] - [[amp>product//ir-remote-control?utm_source=man&utm_campaign=fs90r&utm_medium=wiki | Пульт дистанционного управления]] или любой пульт от бытовой техники. - Двусторонний скотч или клей ===== Видеообзор ===== {{youtube>A0WlQiCDlm4?large}} ===== Как собрать ===== - Возьмите Troyka Shield LP и установите сверху на управляющую плату — Arduino или Iskra JS. {{:робототехника:ir-servo-robot:ir-servo-robot-step1.jpg|}} - Закрепите на обратную сторону управляющей платы с помощью двустороннего скотча два сервопривода спереди — «передние колёса», и два сзади — «задние колёса». Закрепите круглые качельки на валах сервоприводов. {{:робототехника:ir-servo-robot:ir-servo-robot-step2.jpg|}} - Подключите передние колёса «ServoFordL» и «ServoFordR» через 3-проводные шлейфы к ''8'' и ''9'' пину Troyka Shield LP соответственно, а задние колёса «ServoBackL» и «ServoBackR» — к ''10'' и ''11'' пину Troyka Shield LP соответственно. {{:робототехника:ir-servo-robot:ir-servo-robot-step3.jpg|}} - Подключите ИК-приёмник к ''4'' пину Troyka Shield LP. В итоге должна получиться схема.{{ :робототехника:ir-servo-robot:ir-servo-robot_scheme.png|}} {{:робототехника:ir-servo-robot:ir-servo-robot-step4.jpg|}} - Установите Power Shield сверху на Troyka Shield LP. {{:робототехника:ir-servo-robot:ir-servo-robot-step5.jpg|}} ===== Исходный код ===== Генерировать управляющие серводвигателями импульсы можно самостоятельно, но это настолько распространённая задача, что для её решения предусмотрена библиотека ''Servo''. Она входит в установочный пакет Arduino IDE и доступна из Espruino Web IDE. * Библиотека [[https://www.arduino.cc/en/reference/servo |Servo для Arduino]] * Библиотека [[http://wiki.amperka.ru/js:servo |Servo для Iskra JS]] ===== Скетч для Arduino ===== // библиотека для ИК приёмника #include // подключаем библиотеку для работы с сервоприводами #include // создаём объект для управления сервоприводом Servo myservoFordL; Servo myservoFordR; Servo myservoBackL; Servo myservoBackR; // даем имя пину подключения ИК приёмника int RECV_PIN = 4; // указываем к какому пину подключен ИК приёмник IRrecv irrecv(RECV_PIN); decode_results results; void setup() { // запускаем работу ИК приемника irrecv.enableIRIn(); // подключаем сервоприводы myservoFordL.attach(8); myservoFordR.attach(9); myservoBackL.attach(10); myservoBackR.attach(11); } void loop() { // принимаем данные с ИК пульта // в зависимости от нажатой кнопки пульта // даём разные команды роботу if (irrecv.decode(&results)) { if (results.value == 0x1689609F) { ford(); } else if (results.value == 0x1689B847) { back(); } else if (results.value == 0x168910EF) { left(); } else if (results.value == 0x16899867) { right(); } else if (results.value == 0x168938C7) { stop(); } // ждем следующее значение irrecv.resume(); } //делаем задержку delay(100); } // функция движение вперёд void ford() { myservoFordL.write(0); myservoFordR.write(180); myservoBackL.write(0); myservoBackR.write(180); } // функция движение назад void back() { myservoFordL.write(180); myservoFordR.write(0); myservoBackL.write(180); myservoBackR.write(0); } // функция поворота налево void left() { myservoFordL.write(180); myservoFordR.write(180); myservoBackL.write(180); myservoBackR.write(180); } // функция поворота направо void right() { myservoFordL.write(0); myservoFordR.write(0); myservoBackL.write(0); myservoBackR.write(0); } // функция остановки void stop() { myservoFordL.write(90); myservoFordR.write(90); myservoBackL.write(90); myservoBackR.write(90); } ===== Скрипт для Iskra JS ===== // подключаем модуль ИК-приёмника var receiver = require('@amperka/ir-receiver').connect(P4); // подключаем модули сервоприводов var myServoFordL = require('@amperka/servo').connect(P8); var myServoFordR = require('@amperka/servo').connect(P9); var myServoBackL = require('@amperka/servo').connect(P10); var myServoBackR = require('@amperka/servo').connect(P11); // если пришёл сигнал с ИК-пульта receiver.on('receive', function(code) { // в зависимости от нажатой кнопки пульта // даём разные команды роботу if (code === 0x1689609F) { ford(); } else if (code === 0x1689B847){ back(); } else if (code === 0x168910EF) { left(); } else if (code === 0x16899867) { right(); } else if (code === 0x168938C7) { stop(); } }); // функция движение вперёд function ford() { myServoFordL.write(180); myServoFordR.write(0); myServoBackL.write(180); myServoBackR.write(0); } // функция движение назад function back() { myServoFordL.write(0); myServoFordR.write(180); myServoBackL.write(0); myServoBackR.write(180); } // функция поворота налево function left() { myServoFordL.write(0); myServoFordR.write(0); myServoBackL.write(0); myServoBackR.write(0); } // функция поворота направо function right() { myServoFordL.write(180); myServoFordR.write(180); myServoBackL.write(180); myServoBackR.write(180); } // функция остановки function stop() { myServoFordL.write(90); myServoFordR.write(90); myServoBackL.write(90); myServoBackR.write(90); } ===== Что дальше ===== Научиться создавать сложных роботов поможет электронный конструктор [[amp>product/robonyasha-iskra-js?utm_source=man&utm_campaign=fs90r&utm_medium=wiki |«Робоняша»]]. Если вы прошли [[amp>product/yodo?utm_source=man&utm_campaign=fs90r&utm_medium=wiki |«Йодо»]] и хотите использовать его детали для сборки Робоняши, не обязательно покупать весь набор — мы подготовили подборку компонентов, необходимых [[amp>product/yodo-to-robonjasha?utm_source=man&utm_campaign=fs90r&utm_medium=wiki |для апгрейда первого эпизода]] до мобильного робота.