Ардуино для авто

Подключение сервоприводов к Arduino

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

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

Используемые компоненты (купить в Китае):

• Управляющая плата

Arduino UNO 16U2, либо более дешевая Arduino UNO CH340G,

Arduino Nano CH340G, либо Arduino MEGA 16U2, либо более дешевая Arduino MEGA CH340G,

• Сервоприводы

Сервопривод SG90

Сервопривод MG995

Сервопривод MG996

• Соединительные провода

Соединительные провода папа-папа

Полезная вещь для проверки сервориводов

Тестер сервоприводов

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

Управляющий сигнал представляет из себя импульсы с нужной нам шириной, которые посылаются с определенной частотой. Для рассматриваемых нами сервоприводов частота посылания импульса почти всегда будет около 50 Гц (это примерно 1 раз в 20мс), а ширина импульса будет лежать в пределе от 544мкс до 2400мкс.

Как видно из картинке, импульс шириной в 544мкс выставит выводной вал в положение 0°, 1520мск соответствует углу в 90°, а 2400мкс соответствует 180°.

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

Для подключения к контроллеру от сервопривода тянется 3 провода обжатых стандартным 3 пиновым разъемом с шагом 2.54мм . Цвета проводов могут варьироваться. Коричневый или черный — земля (GND), красный — плюс источника питания (VTG), оранжевый или белый — управляющий сигнал (SIG).

У старых Ардуин, укомплектованных мегой 8, имеется всего три ШИМ вывода (digital 9,10,11), у Ардуин укомплектованных мегой 168 или 328 их 6 (digital 3,5,6,9,10,11). Семейство Arduino MEGA имеет на своем борту целых 14 ШИМ выводов.

Один 9G сервопривод, потребляющий слабый ток, еще можно подключить напрямую к Arduino.

GND на любой из GND пинов­­­ ардуино

VTG на + 5 вольт на ардуино

SIG на ШИМ (PWM) вывод ардуино

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

• ​ Вариант 1

Можно приобрести блок питания на 5 или 6 вольт, в зависимости от напряжения питания вашего сервопривода и питать сервопривод от него.

В случае, если под рукой нет стабилизированного источника питания на 5Вольт, но имеется любой другой источник питания (блок, аккумулятор, сборка из батареек) с напряжением 6-12В, то из него можно легко получить требуемое напряжение для сервопривода. Поможет нам в этом стабилизатор. Рассмотрим самый простой L7805/L7806, требующий минимум деталей внешней обвязки.

Стабилизатор имеет 3 ноги:

1 — Вход. На него подается напряжение от 6 или 7(в зависимости от модели) до 12Вольт

2 — Общий минус

3 — Выход 5 или 6 вольт (в зависимости от модели)

7805 отечественный аналог КР142ЕН5А — выходное напряжение 5Вольт.

7806 отечественный аналог КР142ЕН5Б — выходное напряжение 6Вольт.

Как видно из рисунка необходима установка конденсаторов, можно и без них, но выходное напряжение будет не стабильным. Рекомендуемые номиналы конденсаторов: на входе 0.33 мкФ, на выходе 0.1 мкФ. Я всегда ставлю два электорлита по 100мкФ. Чем больше — тем лучше.

P.S. Не забудьте соединить земли источников питания

Программный код управления

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

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

пример программного кода:

//Тестировалось на Arduino IDE 1.0.1 // добавляем библиотеку для работы с сервоприводами #include <Servo.h> // для дальнейшей работы назовем 9 пин как servoPin #define servoPin 9 // 544 это эталонная длина импульса при котором сервопривод должен принять положение 0° #define servoMinImp 544 // 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180° #define servoMaxImp 2400 Servo myServo; void setup() { myServo.attach(servoPin, servoMinImp, servoMaxImp); // устанавливаем пин как вывод управления сервоприводом, // а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов. // импульсы с большей или меньшей длиной восприниматься не будут. // для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440. // поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода. } void loop() { // устанавливаем качалку сервопривода в положение 0°(т.к.импульс равен 544мкс) myServo.writeMicroseconds(servoMinImp); delay(2000); // в данной функции можно задавать длины импульсов непосредственно числами. // 90°(т.к.vимпульс равен 1520мкс) myServo.writeMicroseconds(1520); delay(2000); // 180°(т.к. импульс равен 2400мкс) myServo.writeMicroseconds(servoMaxImp); delay(2000); }

• ​ Вариант 2

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

пример программного кода:

//Тестировалось на Arduino IDE 1.0.1 #include <Servo.h> Servo myservo; void setup() { // устанавливаем пин как вывод управления сервой myservo.attach(9); } void loop() { // устанавливаем угол 0° myservo.write(0); delay(2000); // устанавливаем угол 90° myservo.write(90); delay(2000); // устанавливаем угол 180° myservo.write(180); delay(2000); }

Также вам могут понадобиться следующие команды:

myservo.read();
Считывает текущий угол поворота сервопривода, возвращает значение типа int — угол от 0 до 180 градусов.

myservo.attached();
Проверяем, привязан ли сервопривод. Возвращает логическое значение bool.

myservo.detach();
Отключает сервопривод от пина.

Беспроводная сигнализация на базе Arduino

Здравствуйте посетители сайта «В Гостях У Самоделкина»
Я, просматривая разные сайты, нашел очень полезную самоделку для охраны дома, на системе Arduino.
Её автор хотел выполнить самоделку, чтобы она была дешевой и беспроводной.
Эта самоделка использует PIR датчик движения, а передача информации происходит при помощи RF модуля.
Автор хотел воспользоваться инфракрасным модулем, но так как он имеет ограниченную дальность действия, и плюс может работать только на линии прямой видимости приемником, поэтому он выбрал RF модуль, при помощи которого можно добиться дальности приблизительно 100 метров.
Для того, чтобы посетителям было удобнее просматривать сборку сигнализации, я решил поделить статью на 5 этапов:
Этап 1: Создание передатчика.
Этап 2: Создание приемника.
Этап 3: Установка программного обеспечения.
Этап 4: Тестирование собранных модулей.
Этап 5: Сборка корпуса и установка в него модуля.
Итак, начнем пожалуй с авторского видеоролика.

Все что понадобилось автору, это:
— 2 платы ARDUINO UNO/ARDUINO MINI/ARDUINO NANO для приёмника и передатчика;
— RF приёмопередающий модуль (433 MHZ);
— PIR датчик движения;
— 9В батарейки ( 2 штуки) и коннекторы к ним;
— Зуммер;
— Светодиод;
— Резистор с сопротивлением 220 Ом;
— Макетная плата;
— Джамперы/провода/перемычки;
— Монтажная плата;
— Межплатные штыревые соединители;
— Переключатели;
— Корпуса для приёмника и передатчика;
— Цветная бумага;
— Монтажный скотч;
— Наборной скальпель;
— Термоклеевой пистолет;
— Паяльник;
— Кусачки /инструмент для снятия изоляции;
— Ножницы по металлу.
Этап 1.
Начинаем создание передатчика.
Ниже предоставлена схема работы датчика движения.
Сам передатчик состоит из:
— Датчика движения;
— Платы Arduino;
— Модуль передатчика.
В качестве управляющей платы автор использовал Arduino Nano.
Собирал автор по такой схеме:
Сам датчик имеет три вывода:
— VCC;
— GND;
— OUT.
Потом автор подключил выводы датчика с выводами платы Arduino:
— Vcc > 5v;
— GND > GND;
— Out > D2.
После чего, проверил работу датчика
Внимание!!!
Перед загрузкой прошивки, автор убеждается в том, что в настройках Arduino IDE верно установлена текущая плата и последовательный порт. После чего загрузил скетч:
sketch-test-code.docx (скачиваний: 399)
Посмотреть онлайн файл: sketch-test-code.docx
Позже, как датчик движения зафиксирует движение перед собой, засветится светодиод, а также в мониторе вы сможете увидеть соответствующее сообщение.

Далее автор подключает RF Передатчик.
По схеме чуть ниже.
Передатчик имеет 3 вывода (VCC, GND, и Data), соединяем их:
— VCC > 5В выводом на плате;
— GND > GND ;
— Data > 12 выводом на плате.
Этап 2.
Сам приёмник состоит из:
— Модуля RF приёмника;
— Платы Arduino
— Зуммера (динамика).
Схема Приемника:
Приемник, как и передатчик, имеет 3 вывода (VCC, GND, и Data), соединяем их:
— VCC > 5В выводом на плате;
— GND > GND ;
— Data > 12 выводом на плате.
Этап 3.
Основой всей прошивки автор выбрал файл-библиотеки. Скачал, который он , и поместил его в папку с библиотеками Arduino.
ПО для передатчика.
Перед тем, как загружать код прошивки в плату, автор выставил следующие параметры IDE:
— Board -> Arduino Nano (или та плата, которую вы используете);
— Serial Port -> COM XX (проверьте com порт, к которому подключено ваша плата).
После установки параметров, автор скачал файл прошивки Wireless_tx и загрузил его на плату:
wireless_tx.docx (скачиваний: 340)
Посмотреть онлайн файл: wireless_tx.docx
ПО для приемника
Автор повторяет те же действия и для принимающей платы:
— Board -> Arduino UNO (или та плата, которую вы используете);
— Serial Port -> COM XX (проверьте com порт, к которому подключено ваша плата).
После того как автор установил параметры, скачивает файл wireless_rx и загружает его в плату:
wireless_rx.docx (скачиваний: 253)
Посмотреть онлайн файл: wireless_rx.docx
После, при помощи программы, которую можно скачать, автор сгенерировал звук для зуммера.
Этап 4.
Далее , после загрузки ПО автор решил проверить, все ли работает должным образом. Автор подсоединил источники питания, и провел рукой перед датчиком, и у него заработал зуммер, а значит все работает как надо.
Этап 5.
Финальная сборка передатчика
Сначала автор срезал выступающие выводы с приемника, передатчика, плат arduino, и т. д.
После чего, соединил плату arduino с датчиком движения и RF передатчиком при помощи джамперов.
Далее автор начал делать корпус для передатчика.
Сначала он вырезал: отверстие для выключателя, а также круглое отверстие для датчика движения,после чего приклеил его к корпусу.
Потом автор свернул лист цветной бумаги, и приклеил на лицевую крышку образа, для того чтобы скрыть внутренние части самоделки.
После чего, автор начал вставлять электронную начинку внутрь корпуса, при помощи двухстороннего скотча.
Финальная сборка приемника
Автор решил соединить плату Arduino с монтажной платой резиновой лентой, а также установим RF приемник.
Далее автор вырезает на другом корпусе два отверстия, одно для зуммера, другое для выключателя.
И приклеивает.
После чего, автор устанавливает на все детали джамперы.
Потом автор вставляет готовую плату в корпус, и фиксирует ее двухсторонним клеем.
Далее, как оба модуля были помещены в корпуса, автор расположил передатчик в месте которое нужно охранять, а приемник к себе на рабочий стол.
Диапазон действия модулей не очень то и большой, и поэтому найдя отверстие с маркировкой «ant» автор решил увеличить радиус действия, добавив антенны, к каждому модулю.
После этого он начал считать, какой длины антенна ему нужна.
Для расчета длины антенны нужно определить длину волны, а для этого нужно скорость света разделить на частоту, и потом разделить получившееся число на 4. У автора частота 433 МГц, а скорость света 3*10^8 м/с.
Тогда длина волны= (3×10^8) / (433×10^6)= 0.69284 м.,
А длина антенны=0.69284/4 = 0.1732 м =17.32 см
Потом автор отрезал два куска нужной длины, и запаял их в отверстия в каждый модуль.
И в конце концов у него получилась беспроводная сигнализация на базе arduino.
Доставка новых самоделок на почту

Получайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!

*Заполняя форму вы соглашаетесь на обработку персональных данных

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