Что-то пошло не так с набором «Смарт Робо»
Возможные неисправности при работе с контроллерами
Собранный робот не двигается после загрузки скетча и включении питания на Power Module
- Проверьте, заряжен ли Power Module (светодиод «LOW» не должен гореть), при необходимости зарядите его.
- Убедитесь, что Power Module подключен к Motor Shield верно и соблюдена полярность.
- Проверьте правильность и полярность подключения моторов.
- Возможно, превышен максимальный потребляемый ток всеми устройствами. Контроллер и Power Module рассчитаны на работу с током до 900 мА. При превышении этого порога может срабатывать защита контроллера и Power Module.
В процессе работы робота контроллер постоянно перезапускается
- Происходит кратковременная перегрузка по максимальному току (900 мА), вызывающая срабатывание защиты. Такая проблема проявляется, например в ситуациях, когда происходит резкая смена направления движения робота, когда все колеса сначала двигались вперед, а потом резко назад. В этом случае, в момент изменения направления вращения колес потребляемый ток возрастает в десятки раз по сравнению с обычным режимом работы. Рекомендуем в подобных ситуациях программно устанавливать небольшую задержку при смене направления вращения моторов.
Робот едет не в ту сторону или крутится на месте
- Неверно подключены моторы к Motor Shield. Проверьте правильность подключения моторов к Motor Shield в соответствии со схемой в руководстве пользователя.
- При подключении моторов к Motor Shield перепутана полярность. Соединяйте «+» и «-» моторов строго с «+» и «-» на Motor Shield (обратите внимание на цвета проводов при подключении, сравните их со схемой в руководстве пользователя)
- Убедитесь, что датчики линии подключены к верным разъемам на Motor Shield.
- Выполните настройку чувствительности датчиков линии. С помощью отвертки медленно вращайте потенциометр на плате. Процесс срабатывания датчика будет сопровождаться включением светодиода на нем.
- Линия напечатана на бумаге на струйном принтере. Из-за особенностей чернил струйных принтеров, датчики некорректно воспринимают их черный цвет. Для изготовления линии для движения робота используйте печать на бумаге на лазерном принтере или краски гуашь.
В поворотах робот постоянно вылетает с траектории движения
- Установлена очень большая скорость движения робота.
- Радиус кривой очень маленький. Попробуйте увеличить радиус кривой или уменьшить скорость движения робота.
Робот не видит препятствия или некорректно объезжает их
- Убедитесь, что датчики препятствий подключены к верным разъемам на Motor Shield.
- Выполните настройку чувствительности датчиков препятствий. С помощью отвертки медленно вращайте потенциометр на плате до получения необходимого диапазона срабатывания датчика.
- Высота препятствий слишком мала. Для четкой работы робота высота препятствий должна быть не менее 10 см (на уровне датчиков препятствия).
Робот не слушается команд с пульта дистанционного управления
- Убедитесь, что инфракрасный приемник подключен к верному разъему на 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(); //двигаться в соответствии с тем, какая кнопка нажата.
}