Автономная "смарт" машина на Arduino
Основная идея проекта - создать недорогую автономную четырехколесную подвижную платформу.
В проекте используется логика на базе Arduino, недорогая радиоуправляемая машина, источник питания 9 вольт. В качестве датчиков обратной связи используется инфракрасный передатчик.
Так как оборудование недорогое, можно расценивать эту статью исключительно как общую инструкцию и первый шаг для дальнейших модификаций вашей автономной четырехколесной платформы.
Необходимое оборудование и материалы
- Arduino
- Arduino Мотор шилд
- Радиоуправляемая машина
- Паяльник
- Припой
- Инфракрасный передатчик
- Инфракрасный приемник
- Батарейка 9 В с коннекторами
- Переключатель


*Обратите внимание: если в вашей машине установлена большая плата контроллера, то это, скорее всего, чип TX2 или RX2. Если это так, то вы можете сэкономить немного денег и использовать для двигателей встроенные контроллеры. Хороший пример (на английском языке!) есть здесь.
Разбираем машинку
Ваш первый шаг - разобрать машинку. Снимите корпус и извлеките все платы из машинки. Моторы не трогаем. В проекте нам понадобятся родные шасси, колеса и моторы.

Подготавливаем сенсоры
Подготавливаем электронику. Для начала припаяйте резистор на 100 Ом к одному из контактов на вашем ИК передатчике. Припаиваем провода к другой ноге резистора и ноге датчика. После этого припаиваем два провода к ногам вашего ИК приемника.

Устанавливаем Arduino и датчик
В корпусной части машинки надо сделать отверстия под крепеж вашего контроллера Arduino. Отверстия под крепеж зависят от габаритов подвижной платформы машинки. В данном конкретном случае плата была расположена "перпендикулярно" несущей системе. Подобное расположение удобно еще и тем, что расстояния от двигателей передней и задней подвески до пинов платы примерно одинаковое.
Над передней подвеской устанавливаем наши эмиттер и детектор. Их желательно установить повыше относительно земли. В дальнейшем можно предусмотреть сзади светодиоды, которые будут включаться во время заднего хода машинки.


Переходим к следующему шагу.
Питание
В проекте используется одна батарейка на 9 В (крона). В данном случае ее получилось установить под несущей системой платформы на колесах. Крепим пластиковыми стяжками. В принципе, для увеличения времени автономной работы нашего автомобиля, можно установить две кроны параллельно.


Подключение к Arduino
С подключением можно разобраться и на основании фото. Но на всякий случай, ниже приведена схема подключения в текстовой форме.
Не забывайте, что позитивная нога светодиода - более длинная. Если вы все равно не уверены, можете посмотреть эту инструкцию по подключению светодиодов к Arduino.


ИК светодиод
Позитивный контакт - 5v
Отрицательный контакт - Ground
Сенсор
Позитивный контакт - Analog pin 5
Негативный контакт - Ground
Двигатель
Позитивный контакт - Мотор шилд Channel A +
Негативный контакт - Мотор шилд Channel A -
Двигатель для поворота
Позитивный контакт - Мотор шилд Channel B +
Негативный контакт - Мотор шилд Channel B -
9v
Позитивный контакт - Мотор шилд Vin
Негативный контакт - Мотор шилд Gnd
Программа Arduino
Учитывая специфику проекта, вам надо внести в приведенный ниже базовый скетч достаточно много изменений, которые зависят от размера машинки и колес, скорости вращения колес, веса авто, освещения окружающей среды.
int irsensor = A5;
int motorspeed;
int run = 0;
int measure = 1;
int ambientir = 0;
int distance;
void setup() {
//настройка канала A (Channel A)
pinMode(12, OUTPUT); //инициализация контакта Motor Channel A
pinMode(9, OUTPUT); //Инициализация контакта тормоза - Brake Channel A
pinMode(irsensor, INPUT);
digitalWrite(irsensor, HIGH);
Serial.begin(9600);
}
void loop(){
if(run == 0)
{
delay(1000);
do{
ambientir = ambientir + analogRead(irsensor);
delay(1000);
measure = measure + 1;
}
while(measure < 10);
ambientir = ambientir / 10;
run = run +1;
}
distance = analogRead(irsensor);
if(distance < ambientir - 50){
digitalWrite(12, HIGH); //Обечпечиваем обратное направление вращения ротора на Channel A
digitalWrite(9, LOW); //Отключаем тормоз на Channel A
analogWrite(3, 100); //Вращаем ротор мотора на Channel A на половине максимальных оборотов
}
if(distance > ambientir - 50){
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, 100);
}
Serial.println(distance);
}
Приведенный выше костяк программы для Arduino можно (и даже нужно!) дорабатывать под вашу конкретную конструкцию, но общий концепт вы должны были уловить.
Результат, тестирование и дальнейшие варианты модификаций
Как видите на фото, оригинальный корпус машинки был окрашен в бежевый цвет и установлен на стойках на подвижную четырехколесную платформу.


После тестирования разработанной конструкции можно выделить следующие проблемы:
- Ограниченный диапазон чувствительности сенсора;
- Проблемы, связанные со скоростью машины, а именно - невозможность быстрой остановки;
- Необходимость подстраивать датчик под разные условия освещения;
- Ну и конечно же, дешевый китайский пластик никоим образом не придает автономной машинке на Arduino хорошей жесткости и надежности конструкции.
В принципе, внести компенсацию в зависимости от уровня освещения можно, но это отдельная история и модификация, которые не входили в задачи базового проекта.
Машинка не врезается в стены, но с 90% вероятностью соберет бампером все ножки стульев и столов в комнате. То есть, с обнаружением более мелких препятствий есть явные проблемы. Соответственно, надо либо увеличивать количество эмиттеров, либо использовать более дорогостоящие модели с большей чувствительностью.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!