Что-то пошло не так с набором «МиниБот»
Возможные неисправности при работе с контроллерами
Собранный робот не двигается после загрузки скетча и включении питания на Power Module
- Проверьте, заряжен ли Power Module (светодиод «LOW» не должен гореть), при необходимости зарядите его.
- Убедитесь, что Power Module подключен к Motor Shield верно и соблюдена полярность.
- Проверьте правильность и полярность подключения моторов.
- Возможно, превышен максимальный потребляемый ток всеми устройствами. Контроллер и Power Module рассчитаны на работу с током до 900 мА. При превышении этого порога может срабатывать защита контроллера и Power Module.
Робот едет не в ту сторону или крутится на месте
- Неверно подключены моторы к Motor Shield. Проверьте правильность подключения моторов к Motor Shield в соответствии со схемой в руководстве пользователя.
- При подключении моторов к Motor Shield перепутана полярность. Соединяйте «+» и «-» моторов строго с «+» и «-» на Motor Shield. Обратите внимание на цвета проводов мотора и соответствие их подключению на схеме в руководстве.
- Убедитесь, что датчики линии подключены к верным выводам на Motor Shield.
- Линия напечатана на бумаге на струйном принтере. Из-за особенностей чернил струйных принтеров, датчики некорректно воспринимают их черный цвет. Для изготовления линии для движения робота используйте печать на бумаге на лазерном принтере или краски гуашь.
В поворотах робот постоянно вылетает с траектории движения
- Установлена очень большая скорость движения робота.
- Радиус кривой очень маленький. Попробуйте увеличить радиус кривой или уменьшить скорость движения робота.
Робот не видит препятствия или некорректно объезжает их
- Убедитесь, что ультразвуковой дальномер подключен к верному разъему на Motor Shield.
Робот не слушается команд с пульта дистанционного управления
- Убедитесь, что инфракрасный приемник подключен к верному разъему на Motor Shield.
- Убедитесь, что робот принимает команды с пульта: при нажатии на кнопки пульта, происходит мигание светодиода на модуле ИК-приёмника
- При низком уровне заряда батарейки пульта могут передаваться некорректные коды. Замените батарейку в пульте (CR2025).
Робот не двигается в какую-то из сторон
- Неверно подключены моторы к Motor Shield. Проверьте правильность подключения моторов к Motor Shield в соответствии со схемой в руководстве пользователя.
- При подключении моторов к Motor Shield перепутана полярность. Соединяйте «+» и «-» моторов строго с «+» и «-» на Motor Shield. Обратите внимание на цвета проводов мотора и соответствие их подключению на схеме в руководстве.
- Для теста движения во все стороны поочередно используйте следуйте скетч:
#define E1 6 //Вывод платы расширения Motor Shield, используемый для контроля скорости мотора А.
#define E2 5 //Вывод платы расширения Motor Shield, используемый для контроля скорости мотора В.
#define M1 7 //Вывод платы расширения Motor Shield, используемый для контроля направления вращения мотора А.
#define M2 4 //Вывод платы расширения Motor Shield, используемый для контроля направления вращения мотора В.
int motorSpeed = 255;    //Переменная для хранения скорости вращения моторов.
void motor_drive_config()       //Инициализация платы расширения Motor Shield.
{
  pinMode(M1, OUTPUT);          //Назначение вывода M1 выходом.
  pinMode(M2, OUTPUT);          //Назначение вывода M2 выходом.
  pinMode(E1, OUTPUT);          //Назначение вывода E1 выходом.
  pinMode(E2, OUTPUT);          //Назначение вывода E2 выходом.
}
void move_forward()             //Движение робота вперед.
{
  digitalWrite(M1, HIGH);           //Правое колесо вращается вперед.
  digitalWrite(M2, HIGH);           //Левое колесо вращается вперед.
  analogWrite(E1, motorSpeed);  //Скорость вращения правого колеса.
  analogWrite(E2, motorSpeed);  //Скорость вращения левого колеса.
}
void move_right()               //Движение робота вправо.
{
  digitalWrite(M1, LOW);             //Правое колесо вращается назад.
  digitalWrite(M2, HIGH);            //Левое колесо вращается вперед.
  analogWrite(E1, motorSpeed);  //Скорость вращения правого колеса.
  analogWrite(E2, motorSpeed);  //Скорость вращения левого колеса.
}
void move_left()                //Движение робота влево.
{
  digitalWrite(M1, HIGH);             //Правое колесо вращается вперед.
  digitalWrite(M2, LOW);             //Левое колесо вращается назад.
  analogWrite(E1, motorSpeed);  //Скорость вращения правого колеса.
  analogWrite(E2, motorSpeed);  //Скорость вращения левого колеса.
}
void move_stop()                //Остановка робота.
{
  digitalWrite(M1, LOW);        //Правое колесо вращается назад.
  digitalWrite(M2, LOW);        //Левое колесо вращается назад.
  analogWrite(E1, 0);            //Снизить скорость вращения колеса до 0.
  analogWrite(E2, 0);            //Снизить скорость вращения колеса до 0.
}
void move_back()                //Движение робота назад.
{
  digitalWrite(M1, LOW);             //Правое колесо вращается назад.
  digitalWrite(M2, LOW);             //Левое колесо вращается назад.
  analogWrite(E1, motorSpeed);  //Скорость вращения правого колеса.
  analogWrite(E2, motorSpeed);  //Скорость вращения левого колеса.
}
/* Функция, которая приводит робот в движение в зависимости от того, какой сигнал получен с ИК-приемника. Данные о направлении движения выводятся на дисплей.
*/
void move_sequentially()
{
  move_forward();           //Двигаться вперед.
  delay(1000);              //Задержка величиной 1 с.
  move_stop();             //Остановиться.
  delay(500);              //Задержка величиной 0,5 с.
  move_back();             //Двигаться назад.
  delay(1000);             //Задержка величиной 1 с.
  move_stop();             //Остановиться.
  delay(500);              //Задержка величиной 0,5 с.
  move_right();            //Двигаться вправо.
  delay(1000);             //Задержка величиной 1 с.
  move_stop();             //Остановиться.
  delay(500);              //Задержка величиной 0,5 с.
  move_left();             //Двигаться влево.
  delay(1000);             //Задержка величиной 1 с.
  move_stop();             //Остановиться.
  delay(500);              //Задержка величиной 0,5 с.
}
void setup()                        //Задание начальных параметров системы.
{
  motor_drive_config();         //Инициализация платы расширения Motor Shield.
  move_stop();                   //Начальная позиция робота — робот не движется.
  delay(1000);                 //Задержка величиной 1 с.
}
void loop()  //Основной цикл
{
  move_sequentially();     //двигаться в соответствии с тем, какая кнопка нажата.
}