Набор "Малыш": описание возможных проблем и способы их решения.
В данной статье мы рассмотрим возможные сложности при работе с обучающим набором "Малыш".
Робот не едет по линии
Если Вы столкнулись с проблемой нежелания робота ездить по линии, то возможным решением может стать один из следующих пунктов:
- Попробуйте повторно откалибровать датчики и внести точные значения в скетч езды робота по линии;
- Попробуйте изменить расстояние между датчиками, для чего разместите их ближе друг к другу;
- Добавьте в скетч №12, используемый для калибровки датчиков, считывание значений по трём датчикам вместо двух и вычислите среднее арифметическое для нижнего значения (датчики вне чёрной полосы) и для верхнего значения (датчики над чёрной полосой). Для этого загрузите следующий скетч:
uint8_t pinSensorL = A3; // Вывод датчика, находящегося слева
uint8_t pinSensorC = A4; // Вывод датчика, находящегося по центру
uint8_t pinSensorR = A5; // Вывод датчика, находящегося по центру
void setup() { // Выводим показания датчиков линии
Serial.begin(9600);
pinMode(A3, INPUT);
pinMode(A4, INPUT);
pinMode(A5, INPUT);
}
void loop() {
Serial.print("Left = "); Serial.println(analogRead(pinSensorL)); // Значение левого датчика (valSensor0)
Serial.print("Center = "); Serial.println(analogRead(pinSensorC)); // Значение центрального датчика (valSensor1)
Serial.print("Right = "); Serial.println(analogRead(pinSensorR)); // Значение левого датчика (valSensor0)
Serial.println("====================="); // Значение левого датчика (valSensor0)
delay(1000); // Задержка 1сек
}
После этого, для расчёта среднего арифметического по трём датчикам, расположите сначала все три датчика на линии и запишите результат, затем расположите датчики вне линии и снова запишите результат.
После этого, загрузите следующий скетч, указав в нём полученные ранее значения для датчиков на линии (их надо добавить в переменные, содержащие в названии слово black) и для датчиков вне линии (их надо добавить в переменные, содержащие в названии слово white):
uint16_t whiteL = 35; // Значение левого датчика вне линии
uint16_t whiteC = 40; // Значение центрального датчика вне линии
uint16_t whiteR = 37; // Значение правого датчика вне линии
uint16_t blackL = 830; // Значение левого датчика на линии
uint16_t blackC = 700; // Значение центрального датчика на линии
uint16_t blackR = 905; // Значение правого датчика на линии
uint16_t whiteMiddle; // Среднее арифметическое для значений вне линии
uint16_t blackMiddle; // Среднее арифметическое для значений на линии
void setup() {
Serial.begin(9600); // Инициируем работу монитора последовательного порта на скорости 9600бод
whiteMiddle = ( whiteL + whiteC + whiteR ) / 3; // Вычисляем среднее арифметическое по трём значениям для датчиков вне линии
blackMiddle = ( blackL + blackC + blackR ) / 3; // Вычисляем среднее арифметическое по трём значениям для датчиков на линии
Serial.print("Srednee vne linii = "); Serial.println(whiteMiddle); // Выводи в монитор последовательного порта текст и значение среднего арифметического вне линии
Serial.print("Srednee na linii = "); Serial.println(blackMiddle); // Выводи в монитор последовательного порта текст и значение среднего арифметического на линии
}
void loop() {}
Полученные значения Вам необходимо будет указать в значении переменных valSensor1 (значение датчиков на линии )и valSensor0 (значение датчиков вне линии) в скетче №13/14
- Если все вышеуказанные способы не помогли, тогда сделайте следующее:
- Отключите датчики линии, которые установлены на колёсах, от MotorShield (выводы A0 и A1);
- Отключите датчики линии, которые установлены на бампере, от MotorShield (выводы A3, A4, A5);
- Подключите датчики линии, которые установлены на бампере, в следующие выводы: левый датчик к выводу A0, центральный датчик к выводу A1, правый датчик к выводу A2. Измените значения выводов в скетче 13-14, перед запуском не забыв откалибровать датчики, установленные в новые выводы.

Машинка не реагирует на пульт
Может случиться так, что робот не будет реагировать на нажатие кнопок пульта. Для того, чтобы решить данную проблему, воспользуйтесь одним из следующих способов:
- Проверьте, что батарейка в пульте рабочая. при необходимости замените её новой;
- Обязательно перед тем, как Вы загрузите скетч №16, проверьте полученные коды всех кнопок с теми значениями, которые указаны в скетче. Для этого загрузите скетч № 15, откройте монитор порта и, нажимая на кнопки пульта, сравните полученные значения с теми, что указаны в книге и в скетче №16. Скетч №15:
#include <iarduino_IR_RX.h> // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(10); // Объявляем объект IR и указываем вывод, к которому подключён ИК-приёмник
void setup() {
Serial.begin(9600); // Инициируем передачу данных в монитор порта на скорости 9600 бит/сек
IR.begin(); // Инициируем работу с ИК-приёмником
}
void loop() {
// Если в буфере имеются данные, принятые с пульта (удерживается кнопка), то выводим код нажатой кнопки
if (IR.check(true)) Serial.println(IR.data, HEX);
}
- Если все вышеперечисленные способы не помогли, то Вам необходимо заменить пульт.