Перейти в магазин ( $10.99 )
В какой-то момент жизни я осознал, что темное пятно в понимании микроконтроллеров не дает мне жить спокойной размеренной жизнью. При этом я был уверен, что времени выделить на это занятие много не получится и поэтому мой выбор пал на Arduino, который позволяет абстрагироваться от схемотехники и заняться простым макетированием и программированием конечных устройств.
Немного изучив представленную во всемирной паутине информацию, было принято решение сделать первые покупки. Мои первые впечатления от погружения в этот мир описаны под катом.
Вместо пролога
Данная статья не претендует на полноту описания, но показывает опыт человека, никоим образом ранее не сталкивавшегося ни с электроникой, ни с микро контролерами в частности.
Отчетливо понимая, что мир микроконтроллеров не начинается с Arduino и то, что данная платформа скроет от меня многие премудрости работы с ними (равно как и уберет многие грабли для начинающего) я запасаюсь терпением и желанием открыть для себя что-то, что окружает ежедневно, но спрятано за стеной непонимания, а скорее просто не заметно глазу.
Первым шагом стала покупка
Микроконтроллер: 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 среда разработки видеть плату без бубна не захотела - пункт последовательный порт не был активен в меню "Сервис".
Следующим шагом стала покупка
Количество моторов: 4
Количество колес: 4
Цвет: черный или прозрачный
Крепления: платформа содержит множество отверстий, предназначенных для крепления датчиков, кроме того возле каждого колеса есть посадочное место под датчик прерывания (для получения обратной связи по скорости вращения колеса)
Motor Shield – силовой модуль управления двигателями для микроконтроллеров серии Freeduino/Arduino. Модуль предназначен для упрощения разработки моторизированных и робототехнических устройств.
Технические возможности позволяют реализовать разнообразные проекты, связанные с подключением и управлением слаботочными двигателями следующих типов:
* четырёх двигателей постоянного тока (DC motors);
* двух шаговых двигателей униполярных или биполярных с одинарной или * двойной обмоткой (stepper motors);
* двух 5В сервоприводов.
Технические характеристики
напряжение питания: +7...+ 24 В;
количество силовых каналов: 4;
максимально-продолжительный ток каждого канала: 0,6 А;
напряжение питания сервоприводов: 5 В;
возможность реверса каждого двигателя;
возможность независимого управления каждым каналом;
Отверстия на платформе оказались не приспособленными для крепления Arduino-подобных, но это не смутило. Вооружившись стяжками удалось закрепить на ней Duemilanove, поверх которого тут же был водружен motor shield:
Еще одним неприятным моментом стало отсутствие припаянных проводов к моторам. Пришлось потратить какое-то время на лужение и припаивание проводов из тех что были в наличии.
Возможно имеет смысл скручивать провода питающие мотор в витую пару для того, чтобы исключить наводки токов протекающих в проводниках на микроконтроллер.
Процесс сборки шасси детально проиллюстрированный в инструкции не вызвал вопросов и через 15 минут моя, пока еще не самоходная, тележка была готова.
Мне, как новичку, показалось удобным на этапе сборки платформы пронумеровать пары проводов и сами моторы, чтобы не путаться в дальнейшем при написании кода.
Кроме того, чтобы не путать полярность при отключении проводов от моторов, плюсовые провода и зажимные контакты шилда были также помечены красным маркером:
Конечно, если вы будете использовать провода разных цветов, помечать провода не имеет смысла. Мне же было удобно, так как все использованные мною провода были черного цвета.
Чтобы закончить с материальной составляющей, осталось лишь обеспечить питание для моторов. Источником, по-началу, была выбрана сборка из четырех элементов AAA:
Но такого запаса хватало не на долго и немного позже была добавлена сборка из 6 AA элементов, которая в отличии от первой не имела кнопки включения/выключения, поэтому в разрез плюсового проводника был вставлен переключатель:
Обе батареи решил оставить для чистоты эксперимента - разделить по питанию Ардуино и мотор шилд и оценить разницу.
Для написания кода (т.н. скетчей) используется одноименная среда разработки "
Осталось вдохнуть в ардуино немного жизни - написать скетч, управляющий моторами. Для старта была выбрана библиотека 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 заслуживает внимания в качестве увлекательного хобби.
Плюсы:
Огромное комьюнити, тонны видео и статей
Открытая архитектура
Легкое макетирование
Минусы:
Цена некоторых шилдов кусается.