Простейший полноприводной бот, контролируемый с инфракрасного пульта дистанционного управления. Мы собрали двух роботов — на базе ARduino Uno и Iskra JS — и устроили гонку.
Генерировать управляющие серводвигателями импульсы можно самостоятельно, но это настолько распространённая задача, что для её решения предусмотрена библиотека Servo
. Она входит в установочный пакет Arduino IDE и доступна из Espruino Web IDE.
// библиотека для ИК приёмника #include <IRremote.h> // подключаем библиотеку для работы с сервоприводами #include <Servo.h> // создаём объект для управления сервоприводом 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); }
// подключаем модуль ИК-приёмника 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); }
Научиться создавать сложных роботов поможет электронный конструктор «Робоняша».
Если вы прошли «Йодо» и хотите использовать его детали для сборки Робоняши, не обязательно покупать весь набор — мы подготовили подборку компонентов, необходимых для апгрейда первого эпизода до мобильного робота.