====== Простой ИК-бот на 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 |для апгрейда первого эпизода]] до мобильного робота.