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


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

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



Вместо пролога
Тема использования Arduino глубоко раскрыта в статьях уважаемых участников форума Spc, Sanja и Bim_Sony. Данная статья не претендует на полноту описания, но показывает опыт человека, никоим образом ранее не сталкивавшегося ни с электроникой, ни с микро контролерами в частности.

Отчетливо понимая, что мир микроконтроллеров не начинается с 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 заслуживает внимания в качестве увлекательного хобби.

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

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

Upd: Магазин снизил цену с $13.49 до $10.99
Планирую купить +84 Добавить в избранное +103 +187
+
avatar
  • bg777
  • 28 августа 2013, 08:21
+1
Теперь можете крыску катать-))
+
avatar
  • total
  • 28 августа 2013, 08:32
+18
ардуину берут в трех случаях обычно — пожжужжать мотором, помигать диодом или построить «умный дом»
+
avatar
  • Shadow
  • 28 августа 2013, 08:46
0
чувствую себя такиииииим необычным (голосом Клайда из ЮП)
+
avatar
  • Maska6
  • 28 августа 2013, 10:05
+2
Если бы я мог построить такую же машинку, я был бы тааааааааааак счастлив (он же)
+
avatar
  • Yevhen
  • 28 августа 2013, 09:31
+8
Ардуину берут ещё в одном случае — для управления шаговиками 3D принтера (проект reprap). Также можно на его основе собрать небольшой чпу станочек
+
avatar
  • total
  • 28 августа 2013, 10:21
+2
а это разве не «пожужжаь мотором»?
+
avatar
  • fundorin
  • 28 августа 2013, 17:14
0
Я брал для сборки синтезатора и пульта для Photoshop'а (два разных устройства).
+
avatar
  • MrNash
  • 28 августа 2013, 10:27
+18
«темное пятно в понимании микроконтроллеров не дает мне жить спокойной размеренной жизнью» уже за это плюс поставил…
+
avatar
  • andklv
  • 28 августа 2013, 21:18
+1
я тоже
+
avatar
0
Люблю всякие обзоры DIY, но таких домашних зверушек (не белая ведь, а Himalayan, судя по метке на носу?)- еще больше! Плюс от меня. :)
+
avatar
  • sav13
  • 28 августа 2013, 10:51
+3
Действительно странный выбор для первого знакомства плату Duemilanove брать.
Тем более это клон, совместимая плата, а не оригинал.

Проще и дешевле Arduino Uno. Про него и информации в интернете много.

Вполне рабочие платы китайцы менее 9$ пролают
+
avatar
0
Автор, забивайте на шилды, учитесь делать дополнительные модули самостоятельно. Почитайте про ЛУТ на easyelectronics.ru. Получается намного дешевле, понимание процессов и схемотехники взлетает до небес. Но надо почитать книжек по электронике, купить как минимум мультиметр и logic analyzer (а лучше осциллограф).
+
avatar
  • sav13
  • 28 августа 2013, 11:50
+4
Ежели так подходить, то забить нужно и на Arduino и переходить на что-нибудь получше
+
avatar
  • resetnow
  • 28 августа 2013, 12:30
0
AVR для своих целей тоже неплох, потому что не везде нужны 32кб памяти — где-то хватит ATTiny. И еще нужно не забывать, что Arduino — это плата для прототипирования и в реальных устройствах нет смысла применять всю плату.
+
avatar
  • Dylfin
  • 05 сентября 2013, 15:27
0
Не все что временное является временным ;)
+
avatar
  • fomenks
  • 28 августа 2013, 15:40
0
Получше но через это!
$7.99 с доставкой FedEx прям домой с непередаваемой скоростью!

https://estore.ti.com/Stellaris-LaunchPad.aspx?sp_rid_pod4=MzUyNzgxNzgwNjMS1&sp_mid_pod4=42306888

Из "+" — есть Ардуиноподобносовместимая среда Energia
Из "-" — это TexasInstruments. Ожидайте неожиданного! :)
+
avatar
0
Ардуино все-таки попроще будет. Я пробовал :)
+
avatar
  • fomenks
  • 28 августа 2013, 21:28
0
Это да, но я отвечал на тему sav32 про STM32.
У STM32 начинается хардкор с настройкой пинов гпио, включения таймеров и прочее внутреннее строение железного программирования. У тексаса есть нечто ардуиноподобное IDE и библиотеки. там просто читаем состояние пина, пишем и не думаем о настройках и прочих параметрах.
+
avatar
  • Maze
  • 28 августа 2013, 11:42
0
Если не секрет — почему взяли именно тележку? Я тоже думаю попробовать ардуину, но у меня глаз лег на гусеничное шасси, а не на колесное.
+
avatar
-16
+
avatar
  • sav13
  • 28 августа 2013, 12:32
+9
Ну кто-то вышивает. Кто-то декупажем занимается. Принцип общий, что-то делать своими руками. ;)
+
avatar
  • MIK
  • 28 августа 2013, 13:31
0
Не радиоуправляемая, запрограммированная
+
avatar
  • moneag
  • 28 августа 2013, 13:36
0
на самом деле это не «радиоуправляемая машинка», а конструктор. и, со временем, оно довольно заметно усовершенствуется. по меньшей мере именно на эту мысль наводит перечисление того, что скоро должно автору приехать в посылке ;)
+
avatar
+3
В общем, если коротко: это конструктор для автономного робота. Автор хочет его запрограммировать и навешать всяких датчиков, чтобы он ездил сам по себе, выполняя свою программу и реагировал на окружающую среду. Из применений (после доработки напильником): робот-пылесос, робот-развлекатель кошака, робот-мобильная камера. В общем игрушка для взрослых =)
+
avatar
+5
даже представить себе не могла, что такое кто-то будет делать и собирать сам)) Спасибо за объяснение)
+
avatar
+1
Ух классный обзор! Мне всегда нравилась это тема но я как чайник боялся и ленился к ней подойти а тут такое пособие наглядное.
Позвольте спросить а чем вы управляли машинкой? Контролёр шёл вместо с платой? И можно пару ссылок на контролёры?
Спасибо!
+
avatar
  • angy_v
  • 28 августа 2013, 20:46
+1
Драйвер двигателей покупался отдельно.
Ссылка
+
avatar
0
Спасибо
А пульт для управления где взять?
Извините за дураЦкие вопросы=)
+
avatar
  • penzet
  • 28 августа 2013, 18:02
0
В данной конструкции после установки шилдов на плату невозможно нормально нажать кнопку сброса- занесите в минусы
+
avatar
  • moneag
  • 28 августа 2013, 18:55
+1
почему? на мотор-шилде этом, впрочем как и на большинстве шилдов, ресет присутствует. кнопка находится в одном из углов платы.

из описания:

9.With Arduino's reset button

+
avatar
  • penzet
  • 28 августа 2013, 19:17
0
Встречал много шилдов где такой кнопки не было
+
avatar
+1
Какого рода профессии вы специалист?
т.е. какова отдаленность ваша была от контроллеров и решились заняться таким хобби?
+
avatar
  • angy_v
  • 28 августа 2013, 20:43
0
Я веб разработчик.
+
avatar
0
программирование дает хороший багаж знаний для такого хобби. Я вот тоже в поисках хобби, присмотрюсь на ваш выбор :). аналогично опыта работы с контроллерами не имею.
+
avatar
  • SAIRUS
  • 28 августа 2013, 22:23
+1
эх я всё на эту платформу облизываюсь да жаба чтоб её (((
+
avatar
  • Maze
  • 29 августа 2013, 03:03
+1
Дайте пожалуйста ссылку. Я тоже думаю о танковом шасси, но их негусто.
+
avatar
  • SAIRUS
  • 29 августа 2013, 18:41
0
138 зелени ((((
aliexpress.com/item/New-tanks-metal-robot-chassis-crawler-robot-crawler-chassis-tracking-car-toy-car/1156336694.html

у продавца несколько моделей
+
avatar
  • Maze
  • 30 августа 2013, 07:10
0
Да уж…
Тут уж моя жаба тоже не даст. Тогда буду по-прежнему смотреть на тамию, там конечно все пластиковое, но комплект в 25 долларов обходится, плюс доставка.
+
avatar
+2
Ребяты, я вам так скажу — не влезайте в это дело, если у вас нет гигазов свободного времени или вы имеете тенденцию лениться от души (навроде меня). Вот у меня этих хренюлек ардуиновых огроменная коробень накопилась, и такую тележку покупал, и даже руку-манипулятор с шестью степенями свободы соорудил. Но вот всё это упорядочить во что-то работающее — так и удосужился. Жуткие траты, куча кайфа, но очень мало отдачи.

Впрочем, кому я это говорю? Для чайника подсесть на дуину — это как на герыча, неизлечимо! :)
+
avatar
  • Chhag
  • 29 августа 2013, 00:27
+1
Все хорошо- но паять с движку не стоило- контакты там под наконечники обжимные. И, естественно, два цвета провод хотя бы… Ну и прикупить дремель- дабы не притягивать хомутами а сверлить отверстие :)
PS К робо-самоходкам не пришел, у мну пока уно цветы поливает, температуру пола держит да отслеживает движение и количество людей в квартире включая свет в комнате куда идешь а не куда зашел. На очереди — шторы…
+
avatar
  • MadZerg
  • 01 сентября 2013, 08:28
0
Вы не описывали это подробнее где-то?
А то очень интересно))
+
avatar
  • blackky
  • 22 сентября 2014, 09:44
0
А можно подробнее про подсчет людей?
+
avatar
  • kirych
  • 29 августа 2013, 01:40
+1
Интересный обзор. А кто что думает про Lego Mindstorms? (http://mindstorms.lego.com/en-us/default.aspx) ИМХО тоже достойный вариант для шаловливых ручек для более широкого круга. В комплекте есть сенсоры, сервоприводы, а если все это скрестить с ардуиной…
+
avatar
  • Maze
  • 29 августа 2013, 03:12
0
Лего майндшторм все-таки чуть ближе к игрушкам (проще в сборке, но негуманный ценник). Хотя как обучающе-развивающая игрушка — штука весьма серьезная. Не зря они партнерствуют с NI LabView
+
avatar
  • angy_v
  • 30 августа 2013, 11:03
0
Только что заметил, что магазин снизил цену до $10.99. Сижу и думаю: с чего бы это?
+
avatar
  • Dylfin
  • 05 сентября 2013, 15:31
0
Тоже подумываю взять, правда для управления форточкой в осень-зима-лето :) Датчик температуры и регулировка степени открытости форточки.
+
avatar
  • Mikeoff
  • 07 ноября 2013, 06:58
0
Источником, по-началу, была выбрана сборка из четырех элементов AAA, но такого запаса хватало не на долго
может быть потому, что в одном блоке были установлены аккумуляторы и солевые батарейке (судя по фото)?
+
avatar
0
отличная мышь! плюс белому зверю от владельца стада из четырёх голов :)