Автономная "смарт" машина на Arduino

Основная идея проекта - создать недорогую автономную четырехколесную подвижную платформу.

В проекте используется логика на базе Arduino, недорогая радиоуправляемая машина, источник питания 9 вольт. В качестве датчиков обратной связи используется инфракрасный передатчик.

Так как оборудование недорогое, можно расценивать эту статью исключительно как общую инструкцию и первый шаг для дальнейших модификаций вашей автономной четырехколесной платформы.

Необходимое оборудование и материалы

  • Arduino
  • Arduino Мотор шилд
  • Радиоуправляемая машина
  • Паяльник
  • Припой
  • Инфракрасный передатчик
  • Инфракрасный приемник
  • Батарейка 9 В с коннекторами
  • Переключатель
Компоненты для модификации радиоуправляемой машинки Радиоуправляемая машинка

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

Разбираем машинку

Ваш первый шаг - разобрать машинку. Снимите корпус и извлеките все платы из машинки. Моторы не трогаем. В проекте нам понадобятся родные шасси, колеса и моторы.

Разобранная машинка

Подготавливаем сенсоры

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

ИК-передатчик

Устанавливаем Arduino и датчик

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

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

Разобранная четырехколесная платформа Машинка с Arduino

Переходим к следующему шагу.

Питание

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

Крона для питания машинки Установка батарейки на машинку

Подключение к Arduino

С подключением можно разобраться и на основании фото. Но на всякий случай, ниже приведена схема подключения в текстовой форме.

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

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% вероятностью соберет бампером все ножки стульев и столов в комнате. То есть, с обнаружением более мелких препятствий есть явные проблемы. Соответственно, надо либо увеличивать количество эмиттеров, либо использовать более дорогостоящие модели с большей чувствительностью.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!