Пример использования сервопривода sg90 и потенциометра-слайдера

Пишем программу для Arduino

Для того, чтобы управлять камерой, нам понадобится две сервомашинки. На качалку первой сервомашинки прикрепим веб-камеру, которая будет отвечать за высоту (широту) поворота камеры. Теперь закрепим первую серву на качалке второй – она отвечает за азимутальный угол поворота. То, что у меня получилось, можно увидеть на картинке. Схема управления очень проста. Берем Arduino или аналог (в моем случае – CraftDuino) и просто подключаем сервомашинки напрямую к плате по схеме, приведенной на картинке. То есть управляющий выход одной сервы подключаем к седьмому порту, а другой – к восьмому. Вот и все :).

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

Firmata.begin(9600); // инициализация библиотеки Firmata
}

Теперь этот несложный код компилируем и заливаем получившуюся программу в Arduino. Для этого необходимо запустить Arduino IDE, выбрать свою версию платы через меню «Tools –> Board», затем указать порт, к которому она подключена («Tools –> Serial Port»), вставить код и нажать на кнопку компиляции. После завершения компиляции в строке состояния появится сообщение «Done compiling». Остается только нажать кнопку «Загрузить скетч в Arduino», и программа начнет прошиваться в МК. Если все прошло хорошо, загрузка завершается сообщением «Done uploadling».Ура, механика и электроника готовы! Осталось написать программу для управления этим мини-роботом.

Как управлять сервоприводом?

Вообще, сервоприводы нужны в первую очередь, моделистам, для управления положениями закрылок, рулей и вертолетных лопастей. Вал мотор-редуктора жестко связан с движком переменного резистора. Резистор подключен в схему контроля и своим текущим сопротивлением сообщает о текущем положении вала. На схему контроля поступают сигналы управления, сообщающие, в какое положение нужно повернуть выходной вал (и резистор соответственно). Схема подает питание на моторчик и крутит им до нужного угла (сопротивления резистора), там замирает и, если что-нибудь повернет вал из нужной точки, вернет ее на место. При этом управлять сервой очень просто – у нее есть три провода:

  • земля (коричневый/черный),
  • питание +5 вольт (красный),
  • сигнальный (оранжевый/желтый/белый).

Управление импульсное, по сигнальному проводу. Особая прелесть состоит в том, что сигнальный провод слаботочный – импульсы можно давать непосредственно с ноги микроконтроллера. Чтобы удерживать определенную позицию – импульс должен повторяться. Все это может звучать сложно, но на деле довольно просто. Задача упрощается еще и потому, что в комплекте штатных библиотек Arduino IDE уже есть библиотека Servo для управления сервомашинками (www.arduino.cc/en/Reference/Servo). В результате очень просто можно набросать код, который заставит серву делать поворот от 0 до 180 градусов и обратно:

Servo myservo; // создаем объект для контроля сервы
// максимальное количество таких объектов – 8

int pos = 0; // переменная для хранения позиции сервы

void setup()
{
myservo.attach(9); // серва подключена к девятому пину
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // от 0 до 180 градусов
{ // с шагом в 1 градус
myservo.write(pos); // устанавливаем положение
delay(15); // ждем 15 мс пока серва займет новое положение
}
// и обратно
for(pos = 180; pos>=1; pos-=1) // от 180 до 0 градусов
{
myservo.write(pos);
delay(15);
}
}

Как подключить сервопривод к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • сервопривод SG90, MG995, MG996;
  • потенциометр (переменный резистор);
  • макетная плата;
  • провода «папа-папа» и «папа-мама».

Схема подключения сервопривода к Arduino обычно следующая: черный провод присоединяем к GND, красный провод присоединяем к 5V, оранжевый/желтый провод к цифровому выводу общего назначения. Управление сервоприводом на Ардуино достаточно просто, но по углам поворота сервомоторы делятся на 180° и 360°, что следует учитывать при разработке проектов с применением servo.


Схема подключения сервопривода к Ардуино UNO

Servo Arduino Uno Arduino Nano Arduino Mega
черный провод GND GND GND
красный провод 5V 5V 5V
желтый провод 11 11 11

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

Скетч для сервопривода на Ардуино

#include <Servo.h> // подключаем библиотеку для работы с сервоприводом

Servo servo1; // объявляем переменную servo типа "servo1"

void setup() {
   servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11
}

void loop() {
   servo1.write(0); // ставим угол поворота под 0
   delay(2000); // ждем 2 секунды

   servo1.write(90); // ставим угол поворота под 90
   delay(2000); // ждем 2 секунды

   servo1.write(180); // ставим угол поворота под 180
   delay(2000); // ждем 2 секунды
}

Пояснения к коду:

  1. переменная  необходима, чтобы не запутаться при подключении нескольких сервоприводов к Ардуино. Мы назначаем каждому приводу свое имя;
  2. команда привязывает привод к цифровому выходу 10.
  3. в программе мы вращаем привод на 0-90-180 градусов и возвращаем в начальное положение, поскольку процедура void loop повторяется циклично.

Что такое Arduino?

Девайс, который мы выше назвали Arduino, представляет собой простую и удобную плату ввода/вывода со встроенной средой разработки на языке специальном языке Wiring. Прелесть в том, что язык этот фактически является C++, поэтому нет никакой необходимости осваивать набор программ контроллера и фактически писать программу на ассемблере. Плата Arduino состоит из микроконтроллера ATmega328 или ATmega168 и небольшой элементной обвязки для программирования и интеграции с другими схемами. На каждой плате обязательно присутствуют линейный стабилизатор напряжения 5 В для питания микроконтроллера и 16 МГц кварцевый резонатор, задающий тактовую частоту работы микроконтроллера (МК). Все эти данные – лишь для общего развития

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

«В чем фишка?», – спросишь ты. Суди сам: чтобы залить (прошить) программу в большинство микроконтроллеров требуются специальные устройства – программаторы. Для разных МК и других нужд существует куча программаторов – от специализированных (шьет только AVR) до универсальных (шьет все), от простых (7 проводков от LPT-порта к ножкам МК) до сложных (часто и сами они построены на МК). Общая проблема программаторов в том, что их надо где-то взять (купить, взять у товарища, спаять самому). А теперь почувствуй разницу: для Arduino программатор не нужен. Прошивка может заливаться в нее через обычный USB-шнурок. Более того, саму Arduino можно использовать как программатор и шить ею другие МК! Питаться Arduino может как от внешнего постоянного напряжения 9-12В (то есть запитать ардуину можно от блока питания компьютера или ноутбука, батареек или аккумуляторов), так и от USB-порта компьютера. Короче говоря, чтобы начать работать с микроконтроллером, нужна только сама плата и USB-шнурок типа A-B, которым к ПК подключаются принтеры.

Управляющая программа

Разработать программу для ПК ты можешь на любом удобном для тебя языке программирования, но я выбрал С++. Так как в дальнейшие планы входит научить этого мини-web-cam-бота самостоятельно обнаруживать объекты и следить за ними, то для работы с камерой я воспользуюсь библиотекой OpenCV (sourceforge.net/projects/opencvlibrary). Это открытая библиотека компьютерного зрения, которая до первой версии разрабатывалась в Центре разработки программного обеспечения Intel (причем российской командой в Нижнем Новгороде). Фактически, OpenCV – это набор данных, функций и классов для обработки изображений алгоритмами компьютерного зрения. Эта библиотека очень популярна за счет своей открытости и возможности бесплатно использовать как в учебных, так и коммерческих целях.

Идея нехитрая: подключаемся к веб-камере и показываем то, что она «видит». Также выведем в окошко с картинкой пару ползунков, с помощью которых будем управлять положением сервомашинок. Так как в моей конструкции робота веб-камеру пришлось закрепить на боку, то в программе приходится это исправлять (поворачивать картинку на 90 градусов против часовой стрелки). Эта процедура реализуется функцией rotate(), являющейся оберткой вокруг функции OpenCV: cvWarpAffine(), которая и выполняет поворот изображения. Полный код программы ты найдешь на диске, а здесь я приведу только функцию-обработчик, который считывает положение ползунков в управляющей программе и отправляет их в качестве команды на микроконтроллер:

Вот, собственно, и все. Теперь момент истины. Компилируем код, пробуем его запустить, двигаем ползунки. Сервоприводы издают звук, и – да, камера двигается! Работает!

Если у тебя возникнет желание повторить подобный опыт, то на освоение всей платформы у тебя едва ли уйдет больше одного вечера. Каких-то несколько часов – и ты уже можешь создавать работающие девайсы. Бывалые фрикеры, возможно, скажут, что Arduino годится разве что для новичков. Но даже если так, то что? Главное, что через минимальное время ты можешь получить результат.

Дополнительные шилды

Впрочем, прелесть Arduino не заканчивается в простоте подключения и легкости программирования под него. Огромное число энтузиастов пишут для микроконтроллера программные библиотеки – своего рода модули, которые ты можешь подключить к своей программе. В результате, всего несколькими строчками кода можно управлять сервомашинками, взаимодействовать с компьютерной клавиатурой/мышкой и т.д. Более того, для Arduino разрабатываются так называемые шилды – платы-дополнения (модули, только аппаратные), которые невероятно расширяют возможности контроллера. Например, Ethernet-шилд позволяет подключить Arduino к компьютерной сети и даже работать в интернете (клиентом или сервером). Есть GSM-шилд для взаимодействия с сотовой сетью, GPS-шилд для взаимодействия с GPS-приемниками, Wi-Fi-шилд для работы с беспроводными сетями и т.д. Все это дает невероятную возможность на простой платформе создавать сложные и хитроумные девайсы. По сути, Arduino превращается в конструктор для быстрого прототипирования и воплощения в жизнь самых безумных идей, не требующий при этом паяльник. Любая возможность автоматизировать что-то с легкостью реализуется с Arduino! Выкладывать ритм сердцебиения в Twitter? Или через инет удаленно включить полив цветов? Легко! Автоматизация аквариума, элементы умного дома, кодовый замок или, наоборот, цифровая отмычка в виде универсального ключа – все это возможно с помощью Arduino. Мы же сегодня попробуем еще одну отрасль, в которой так силен микроконтроллер – робототехнике.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Электрошкола
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: