Скетч для сервопривода arduino nano

Скетч для сервопривода arduino nano

Сервопривод Ардуино (англ. — arduino servo) — устройство с электрическим мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время.

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

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

Изначально сервоприводы начали использовать еще задолго до появления Ардуино, скажем так, в мире пультов дистанционного управления (RC), как правило, для управления рулевым колесом игрушечных машинок или крыльями самолетов. Со временем они нашли свое применение в робототехнике, автоматизации и, конечно же, в мире Ардуино.

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

Как это работает

Сервоприводы Arduino — это умные устройства. Используя только один входной пин, они получают значения для позиционирования от микроконтроллера и переходят в это положение. Как можно увидеть на рисунке в самом начале статьи внутри они имеют двигатель и цепь обратной связи, которая гарантирует, что вал/рычаг сервопривода достигнет желаемого положения.

Но какой сигнал сервомоторы получают на входе? Это прямоугольная волна, подобная PWM (англ. — pulse-width modulation, широтно-импульсная модуляция). Каждый цикл в сигнале длится 20 миллисекунд, и большая часть времени в значении LOW. В начале каждого цикла значение сигнала становится HIGH на время от 1 до 2 миллисекунд. При 1 миллисекунде она составляет 0 градусов, а при 2 миллисекундах — 180 градусов, а в промежутке значение от 0 до 180. Это очень хороший и надежный метод. График выше упрощает понимание.

Комплектующие

Нам понадобятся следующие детали:

  • Плата Arduino (подключенная к компьютеру через USB), подойдет Arduino Uno;
  • Сервопривод;
  • Перемычки.

В мире сервомоторов мало известных брендов. Как пример, можно взять Hitec и Futaba, которые являются ведущими производителями сервоприводов для RC-моделей. Но в целом найти подходящий на АлиЭкспресс и подобных сайтах не сложно.

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

Схема подключения ниже:

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

  • Сервомотор имеет гнездовой разъем с тремя контактами. Самый темный или даже черный — это обычно земля. Подключите его к GND Arduino.
  • Подключите кабель питания, который по всем стандартам должен быть красным к 5В на Ардуино.
  • Подключите оставшийся контакт разъема сервопривода к цифровому выходу на Arduino.

Также ниже приводим пример подключения двигателя и Arduino Diecimilia. Фото найдено на официальном сайте производителя микроконтроллеров.

Для этого варианта подключение следующее:

  • Подключите красный от сервопривода к +5 В на ардуине.
  • Подключите черный/коричневый от сервопривода к Gnd на ардуино.
  • Подключите белый/оранжевый от сервопривода к аналоговому 0 на arduino.

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

Скетч ниже заставит сервопривод переместиться в позицию 0 градусов, подождать 1 секунду, затем повернуться на 90 градусов, подождать еще одну секунду, после повернуться на 180 градусов и перейти в первоначальное положение.

Также дополнительно мы используем библиотеку servo — скачайте ниже или в нашем разделе Библиотеки.

Содержимое zip-файла размещается в папку arduino-xxxx/hardware/liraries.

Если сервомотор подключен к другому цифровому контакту, просто измените значение servoPin на значение используемого цифрового вывода.

Наш код просто объявляет объект и затем инициализирует сервопривод с помощью функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.

Второй скетч для варианта с Arduino Diecimilia ниже.

Нам достаточно будет скачать и подключить библиотеку из архива:

Стандартные методы серво-библиотеки

attach(int)

Соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке.

detach()

Отсоединение пина от сервопривода.

write(int)

Установка угла сервопривода в градусах, от 0 до 180.

read()

Возвращает значение, установленное write(int).

attached()

Возвращает 1, если серво в настоящее время подключен.

Дополнительные примеры скетчей

Следующий код позволяет вам контролировать серводвигатель на пине 2 с помощью потенциометра на аналоговом 0.

Следующий код — это поворот (пинг/понг) на выводе A0 с переменной скоростью.

Дополнительные возможности

Управление сервоприводами на Ардуино очень простое и мы можем использовать еще несколько интересных фишек.

Контроль точного времени импульса

Ардуино имеет встроенную функцию servo.write(градусы), которая упрощает управление сервомоторами. Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

Читайте также:  Чем отличается офис 2010 от 2013

Для лучшего контроля мы можем использовать функцию servo.writeMicroseconds(микросекунды), которая в качестве параметра принимает точное количество микросекунд. Помните, 1 миллисекунда равна 1000 мкс.

Несколько сервоприводов

Чтобы использовать более одного сервопривода в Ардуино нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

В конце концов, мы должны обращаться к каждому объекту индивидуально:

Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

Вопреки распространенному мнению, сервоприводами не нужно управлять через пины PWM — любой цифровой пин подойдет и будет работать.

Управление мышью

Чтобы управлять серво с помощью мыши, вот простой код:

Вам не обязательно использовать этот код, вы также можете отправлять команды на плату arduino с серийного монитора Arduino IDE. Позиция сервопривода от 0 до 180 — это команды 0 и 180 сек соответственно.

В основном этот код берет позицию mouseX (от 0 до 720) и делит на 4, чтобы получить угол для сервопривода (0-180). Наконец, значение выводится на последовательный порт с префиксом ‘s’.

Примечание: «s» на самом деле должен быть суффиксом, но поскольку это повторяется, это не имеет значения для результата.

Не забудьте сначала проверить с помощью println(Serial.list ()) COM-порт, который следует использовать.

Сервоприводы с непрерывным вращением

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

Например, функция Servo1.write(0) заставит сервомотор вращаться против часовой стрелки на полной скорости. Функция Servo1.write(90) остановит двигатель, а Servo1.write(180) будет вращать вал по часовой стрелке на полной скорости.

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

Сервопривод Ардуино (англ. — arduino servo) — устройство с электрическим мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время.

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

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

Изначально сервоприводы начали использовать еще задолго до появления Ардуино, скажем так, в мире пультов дистанционного управления (RC), как правило, для управления рулевым колесом игрушечных машинок или крыльями самолетов. Со временем они нашли свое применение в робототехнике, автоматизации и, конечно же, в мире Ардуино.

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

Как это работает

Сервоприводы Arduino — это умные устройства. Используя только один входной пин, они получают значения для позиционирования от микроконтроллера и переходят в это положение. Как можно увидеть на рисунке в самом начале статьи внутри они имеют двигатель и цепь обратной связи, которая гарантирует, что вал/рычаг сервопривода достигнет желаемого положения.

Но какой сигнал сервомоторы получают на входе? Это прямоугольная волна, подобная PWM (англ. — pulse-width modulation, широтно-импульсная модуляция). Каждый цикл в сигнале длится 20 миллисекунд, и большая часть времени в значении LOW. В начале каждого цикла значение сигнала становится HIGH на время от 1 до 2 миллисекунд. При 1 миллисекунде она составляет 0 градусов, а при 2 миллисекундах — 180 градусов, а в промежутке значение от 0 до 180. Это очень хороший и надежный метод. График выше упрощает понимание.

Комплектующие

Нам понадобятся следующие детали:

  • Плата Arduino (подключенная к компьютеру через USB), подойдет Arduino Uno;
  • Сервопривод;
  • Перемычки.

В мире сервомоторов мало известных брендов. Как пример, можно взять Hitec и Futaba, которые являются ведущими производителями сервоприводов для RC-моделей. Но в целом найти подходящий на АлиЭкспресс и подобных сайтах не сложно.

Читайте также:  Виды обтекания текста в ворде

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

Схема подключения ниже:

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

  • Сервомотор имеет гнездовой разъем с тремя контактами. Самый темный или даже черный — это обычно земля. Подключите его к GND Arduino.
  • Подключите кабель питания, который по всем стандартам должен быть красным к 5В на Ардуино.
  • Подключите оставшийся контакт разъема сервопривода к цифровому выходу на Arduino.

Также ниже приводим пример подключения двигателя и Arduino Diecimilia. Фото найдено на официальном сайте производителя микроконтроллеров.

Для этого варианта подключение следующее:

  • Подключите красный от сервопривода к +5 В на ардуине.
  • Подключите черный/коричневый от сервопривода к Gnd на ардуино.
  • Подключите белый/оранжевый от сервопривода к аналоговому 0 на arduino.

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

Скетч ниже заставит сервопривод переместиться в позицию 0 градусов, подождать 1 секунду, затем повернуться на 90 градусов, подождать еще одну секунду, после повернуться на 180 градусов и перейти в первоначальное положение.

Также дополнительно мы используем библиотеку servo — скачайте ниже или в нашем разделе Библиотеки.

Содержимое zip-файла размещается в папку arduino-xxxx/hardware/liraries.

Если сервомотор подключен к другому цифровому контакту, просто измените значение servoPin на значение используемого цифрового вывода.

Наш код просто объявляет объект и затем инициализирует сервопривод с помощью функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.

Второй скетч для варианта с Arduino Diecimilia ниже.

Нам достаточно будет скачать и подключить библиотеку из архива:

Стандартные методы серво-библиотеки

attach(int)

Соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке.

detach()

Отсоединение пина от сервопривода.

write(int)

Установка угла сервопривода в градусах, от 0 до 180.

read()

Возвращает значение, установленное write(int).

attached()

Возвращает 1, если серво в настоящее время подключен.

Дополнительные примеры скетчей

Следующий код позволяет вам контролировать серводвигатель на пине 2 с помощью потенциометра на аналоговом 0.

Следующий код — это поворот (пинг/понг) на выводе A0 с переменной скоростью.

Дополнительные возможности

Управление сервоприводами на Ардуино очень простое и мы можем использовать еще несколько интересных фишек.

Контроль точного времени импульса

Ардуино имеет встроенную функцию servo.write(градусы), которая упрощает управление сервомоторами. Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

Для лучшего контроля мы можем использовать функцию servo.writeMicroseconds(микросекунды), которая в качестве параметра принимает точное количество микросекунд. Помните, 1 миллисекунда равна 1000 мкс.

Несколько сервоприводов

Чтобы использовать более одного сервопривода в Ардуино нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

В конце концов, мы должны обращаться к каждому объекту индивидуально:

Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

Вопреки распространенному мнению, сервоприводами не нужно управлять через пины PWM — любой цифровой пин подойдет и будет работать.

Управление мышью

Чтобы управлять серво с помощью мыши, вот простой код:

Вам не обязательно использовать этот код, вы также можете отправлять команды на плату arduino с серийного монитора Arduino IDE. Позиция сервопривода от 0 до 180 — это команды 0 и 180 сек соответственно.

В основном этот код берет позицию mouseX (от 0 до 720) и делит на 4, чтобы получить угол для сервопривода (0-180). Наконец, значение выводится на последовательный порт с префиксом ‘s’.

Примечание: «s» на самом деле должен быть суффиксом, но поскольку это повторяется, это не имеет значения для результата.

Не забудьте сначала проверить с помощью println(Serial.list ()) COM-порт, который следует использовать.

Сервоприводы с непрерывным вращением

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

Читайте также:  Рейтинг беспроводных мышек для компьютера 2018

Например, функция Servo1.write(0) заставит сервомотор вращаться против часовой стрелки на полной скорости. Функция Servo1.write(90) остановит двигатель, а Servo1.write(180) будет вращать вал по часовой стрелке на полной скорости.

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

Данная библиотека является “дополнением” к стандартной библиотеке Servo.h и позволяет плавно управлять сервоприводом. Суть работы кроется в методе tick(), который нужно вызывать постоянно в loop (или прерывании таймера), внутри тика находится алгоритм с собственным таймером, который по чуть чуть поворачивает серво к нужному положению. Библиотека дублирует несколько методов из Servo.h (attach имеет расширенную инициализацию):

  • write() и writeMicroseconds() – повернут вал серво с максимальной скоростью
  • attach() и detach() – подключить и отключить серво от управления

Инициализация

Объект создаётся точно так же, как в Servo.h, без параметров. Также можно передать рабочий угол серво (если не передавать, будет равен стандартному 180 град.)

По инициализации ( attach() ) есть несколько вариантов:

  • attach(pin) – подключит серво на указанный pin, угол поворота будет установлен на градусов. Длина импульса* мин-макс будет стандартная, 500-2400 мкс
  • attach(pin, target) – подключит серво на указанный pin, угол поворота** будет установлен на target градусов. Длина импульса* мин-макс будет стандартная, 500-2400 мкс
  • attach(pin, min, max) – подключит серво на указанный pin, угол поворота будет установлен на градусов. Длина импульса* будет установлена min и max соответственно.
  • attach(pin, min, max, target) – подключит серво на указанный pin, угол поворота будет установлен на target градусов. Длина импульса* будет установлена min и max соответственно.

*Длина импульса – сервопривод управляется ШИМ сигналом, в котором длина импульса прямо управляет углом поворота, то есть подавая минимальную и максимальную длину мы получаем рабочий угол 180 градусов. По умолчанию мин. и макс. длина установлены 500 и 2400 соответственно, что подходит большинству сервоприводов, но желательно посмотреть и “откалибровать” свой привод так, чтобы он работал на все 180 градусов. Мин. и макс. время импульса отличаются у разных производителей и моделей серво.

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

Управление

Движение серво происходит автоматически в методе tick(), нам нужно всего лишь вызывать его как можно чаще в loop (tick() имеет встроенный таймер на 20 миллисекунд). Также есть метод tickManual(), который поворачивает серву на следующий “шаг” при каждом вызове (тот же tick(), но не имеет своего таймера). Оба метода tick() возвращают false, пока серво движется, и true, когда серво достигла установленного угла, это можно использовать. Также серво автоматически отключается от управления при достижении заданного угла поворота (это уменьшает жужжание серво в простое). Эту функцию можно отключить, вызвав setAutoDetach(false). Инструменты для управления движением привода:

    setTarget(длина) – устанавливает целевую позицию для серво в величине длина импульса, мкс (

500-2400)

  • setTargetDeg(угол) – устанавливает целевую позицию для серво в градусах (0-180)
  • setSpeed(скорость) – установка максимальной скорости (условные единицы, 1 – 200)
  • setAccel(ускорение) – установка ускорения (0.01 – 1). При значении 1 ускорение максимальное
  • start() – автоматический attach + разрешает работу tick – серво движется к заданной позиции
  • stop() – detach + запрещает работу tick – серво останавливается
  • Полезные вспомогательные методы для различных ситуаций:

    • setDirection(напр) – принимает NORMAL (false) или REVERSE (true), меняет направление серво
    • setCurrent(длина) – установка текущей позиции в мкс (500 – 2400). Может пригодиться в ситуации, когда мы знаем реальный угол серво и хотим сообщить о нём программе, чтобы алгоритм не дёргал привод.
    • setCurrentDeg(угол) – установка текущей позиции в градусах (0-180). Зависит от min и max.
    • getCurrent() – получение текущей позиции в мкс (500 – 2400)
    • getCurrentDeg() – получение текущей позиции в градусах (0-180). Зависит от min и max
    • getTarget() – получение целевой позиции в мкс (500 – 2400)
    • getTargetDeg() – получение целевой позиции в градусах (0-180). Зависит от min и max
    • setMaxAngle() – установка макс. угла серво, по умолчанию 180. Позволяет удобно работать с разными сервами (на 270 и 360 град.)
    Ссылка на основную публикацию
    Системная плата ecs mcp61m m3
    Средняя цена по России, руб: 3 877 Общие характеристики Производитель Фирма, которая произвела данную материнскую плату. ECS Форм-фактор Форм-фактор –...
    Самые популярные модели в инстаграм
    К ендалл Дженнер в этом году не было среди ангелов на Victoria’s Secret Fashion Show и не зря! Мало того,...
    Самодельная подставка для ноутбука с охлаждением
    Всем добрый вечер! Сегодня я снова пишу в Блог а не в Бортовой Журнал машины, лишь потому, что с машиной...
    Системное администрирование windows 10
    Наверняка вы уже слышали, что сегодня официально выходит Windows 10 Creators Update. В этой статье мы решили быть на шаг...
    Adblock detector