Мое первое знакомство с Arduino.

Цена: $10.99

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

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



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

Отчетливо понимая, что мир микроконтроллеров не начинается с Arduino и то, что данная платформа скроет от меня многие премудрости работы с ними (равно как и уберет многие грабли для начинающего) я запасаюсь терпением и желанием открыть для себя что-то, что окружает ежедневно, но спрятано за стеной непонимания, а скорее просто не заметно глазу.

Первым шагом стала покупка Arduino Duemilanove. Почему именно эта модель? Абсолютно спонтанное решение — просто подвернулась в списке новинок магазина.

Лицевая сторона

Тыльная сторона



Техническая информация
Микроконтроллер: ATmega168
Рабочее напряжение 5 В
Входное напряжение (рекомендуемое) 7-12 В
Входное напряжение (предельное) 6-20 В
Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)
Аналоговые входы 6
Постоянный ток через вход/выход 40 мА
Постоянный ток для вывода 3.3 В 50 мА
Флеш-память 16 Кб (ATmega168) или 32 Кб (ATmega328) при этом 2 Кб используются для загрузчика
ОЗУ 1 Кб (ATmega168) или 2 Кб (ATmega328)
EEPROM 512 байт (ATmega168) или 1 Кб (ATmega328)
Тактовая частота 16 МГц


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

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



Кстати, забегая вперед скажу, что под Ubuntu среда разработки видеть плату без бубна не захотела — пункт последовательный порт не был активен в меню «Сервис». Решение подсказал гугл.

Следующим шагом стала покупка платформы с четырьмя моторами, и motor driver shield.

Дополнительная информация о шасси


Количество моторов: 4
Количество колес: 4
Цвет: черный или прозрачный
Крепления: платформа содержит множество отверстий, предназначенных для крепления датчиков, кроме того возле каждого колеса есть посадочное место под датчик прерывания (для получения обратной связи по скорости вращения колеса)


Дополнительная информация о LM293D


Motor Shield – силовой модуль управления двигателями для микроконтроллеров серии Freeduino/Arduino. Модуль предназначен для упрощения разработки моторизированных и робототехнических устройств.

Технические возможности позволяют реализовать разнообразные проекты, связанные с подключением и управлением слаботочными двигателями следующих типов:
* четырёх двигателей постоянного тока (DC motors);
* двух шаговых двигателей униполярных или биполярных с одинарной или * двойной обмоткой (stepper motors);
* двух 5В сервоприводов.

Технические характеристики
напряжение питания: +7...+ 24 В;
количество силовых каналов: 4;
максимально-продолжительный ток каждого канала: 0,6 А;
напряжение питания сервоприводов: 5 В;
возможность реверса каждого двигателя;
возможность независимого управления каждым каналом;


Отверстия на платформе оказались не приспособленными для крепления Arduino-подобных, но это не смутило. Вооружившись стяжками удалось закрепить на ней Duemilanove, поверх которого тут же был водружен motor shield:



Еще одним неприятным моментом стало отсутствие припаянных проводов к моторам. Пришлось потратить какое-то время на лужение и припаивание проводов из тех что были в наличии.







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


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

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

Моторы:


И пары проводов:




Кроме того, чтобы не путать полярность при отключении проводов от моторов, плюсовые провода и зажимные контакты шилда были также помечены красным маркером:



Конечно, если вы будете использовать провода разных цветов, помечать провода не имеет смысла. Мне же было удобно, так как все использованные мною провода были черного цвета.


Чтобы закончить с материальной составляющей, осталось лишь обеспечить питание для моторов. Источником, по-началу, была выбрана сборка из четырех элементов AAA:



Но такого запаса хватало не на долго и немного позже была добавлена сборка из 6 AA элементов, которая в отличии от первой не имела кнопки включения/выключения, поэтому в разрез плюсового проводника был вставлен переключатель:



Обе батареи решил оставить для чистоты эксперимента — разделить по питанию Ардуино и мотор шилд и оценить разницу.

Справка
Для написания кода (т.н. скетчей) используется одноименная среда разработки "Arduino IDE".


Осталось вдохнуть в ардуино немного жизни — написать скетч, управляющий моторами. Для старта была выбрана библиотека AFMotor и пример работы с моторами.

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

Код скетча

#include <AFMotor.h> 

#define MAX_SPEED    255       // Maximum motor speed
#define LEFT         33
#define RIGHT        44

#define TURN_TIME    660

//Создаем объекты для двигателей 
AF_DCMotor frontLeftMotor(1);  //канал М1 - передний левый 
AF_DCMotor frontRightMotor(2); //канал М2 - передний правый 
AF_DCMotor rearLeftMotor(3);   //канал М3 - задний левый 
AF_DCMotor rearRightMotor(4);  //канал М4 - задний правый 

void setup() {}

void setSpeed(int newSpeed) {
  frontLeftMotor.setSpeed(newSpeed); 
  rearLeftMotor.setSpeed(newSpeed); 
  frontRightMotor.setSpeed(newSpeed); 
  rearRightMotor.setSpeed(newSpeed);
}

void turn(int dir) {
  switch(dir) {
    case LEFT:
      frontLeftMotor.run(BACKWARD);  
      rearLeftMotor.run(BACKWARD); 
      frontRightMotor.run(FORWARD);
      rearRightMotor.run(FORWARD);
      break;
    case RIGHT:
      frontLeftMotor.run(FORWARD); 
      rearLeftMotor.run(FORWARD); 
      frontRightMotor.run(BACKWARD); 
      rearRightMotor.run(BACKWARD);
      break;
    default:
      break;
  }
  
  delay(TURN_TIME);
}

void move(int dir) {
  switch (dir) {
    case FORWARD: 
      frontLeftMotor.run(FORWARD);  
      rearLeftMotor.run(FORWARD); 
      frontRightMotor.run(FORWARD);
      rearRightMotor.run(FORWARD);
      break;
    case BACKWARD:
      frontLeftMotor.run(BACKWARD); 
      rearLeftMotor.run(BACKWARD); 
      frontRightMotor.run(BACKWARD); 
      rearRightMotor.run(BACKWARD);
      break;
    default:
      frontLeftMotor.run(RELEASE); 
      rearLeftMotor.run(RELEASE); 
      frontRightMotor.run(RELEASE); 
      rearRightMotor.run(RELEASE);
  }
  delay(500);
}

void loop() {
  setSpeed(MAX_SPEED);
  
  move(FORWARD);
  
  turn(RIGHT);
  move(FORWARD);
  
  move(BACKWARD);
  delay(500);
  
  turn(RIGHT);
  move(FORWARD);
  
  turn(LEFT);
  move(FORWARD);
  delay(80);
  
  turn(LEFT);
  move(RELEASE);
  
  delay(9500);
}



После компиляции и заливки в Ардуино машинка прошла боевое крещение:


И даже вызвала интерес у домашнего любимца:


И напоследок несколько фото агрегата.







Эпилог
К моменту написания статьи на импорте отметилась посылка с рядом датчиков, среди которых: ультразвуковые дальномеры, ИК дальномеры, датчики обхода препятствий и sensor shield для удобного подключения всего вышеперечисленного. Кроме этого были заказаны 2 радио модуля для беспроводного управления платформой. Так что веселое времяпрепровождение мне обеспечено еще на долго.

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

Плюсы:
Огромное комьюнити, тонны видео и статей
Открытая архитектура
Легкое макетирование

Минусы:
Цена некоторых шилдов кусается.

0 комментариев

Оставить комментарий