Как подключить потенциометр к сервоприводу
Перейти к содержимому

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

  • автор:

Сервопривод Ардуино подключение, управление

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

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

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

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

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

#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. переменная Servo необходима, чтобы не запутаться при подключении нескольких сервоприводов к Ардуино. Мы назначаем каждому приводу свое имя;
  2. команда servo1.attach(10) привязывает привод к цифровому выходу 10.
  3. в программе мы вращаем привод на 0-90-180 градусов и возвращаем в начальное положение, поскольку процедура void loop повторяется циклично.

Плавное вращение сервомотора от Ардуино

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

Управление скоростью вращения сервомотора Ардуино сделать довольно просто, если вы знакомы с циклами for или while в языке программирования Arduino. Рассмотрим, как сделать плавные повороты серво от 0 до 90 градусов, используя циклы. Представленные на этой странице примеры программ позволят вам использовать сервоприводы в различных проектах, где требуется плавный поворот.

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

#include "Servo.h" Servo servo; int angle; // переменная для угла поворота микро серво void setup() < servo.attach(11); // пин для подключения микро серво > void loop() < // цикл для поворота от 0 до 90 градусов for (angle = 0; angle write(angle); // сообщаем микро серво угол поворота delay(20); // ждем 20 мс, пока серво не сделает поворот > // цикл для поворота от 90 до 0 градусов for (angle = 90; angle >= 0; angle--) < servo.write(angle); // сообщаем микро серво угол поворота delay(20); // ждем 20 мс, пока серво не сделает поворот > >
Пояснения к коду:
  1. максимальный угол для плавного поворота микросерво — 180 градусов;
  2. увеличивая задержку delay(20); , можно замедлить скорость поворота.

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

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

Подключение потенциометра к Ардуино

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

Крайние ножки переменного резистора подключаются к портам питания (5V и GND). Средний контакт имеет подвижный контакт, на котором меняется напряжение вследствие изменения сопротивления при вращении ручки. Полярность подключения «+» и «-» роли не играет, при этом будет происходить только инверсия сигнала потенциометра. Соберите следующую схему и загрузите приведенный код в плату.

Скетч. Подключение потенциометра к Ардуино

void setup() < Serial.begin(9600); // запускаем монитор порта pinMode(A1, INPUT); // к входу A1 подключаем потенциометр > void loop() < int val = analogRead(A1); // считываем данные с порта A1 Serial.println(val); // выводим данные на монитор порта delay(500); // ставим задержку для удобства >
Пояснения к коду:
  1. при необходимости подключения нескольких потенциометров к Arduino Nano, следует их подключать к другим аналоговым входам.

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

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

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

Скетч. Подключение к Ардуино потенциометра и светодиода

void setup() < pinMode(10, OUTPUT); // подключаем светодиод к пин 10 pinMode(A1, INPUT); // к входу A1 подключаем потенциометр > void loop() < int val = analogRead(A1); // считываем данные с порта A1 val = val / 4; // делим значения на 4 analogWrite(10, val); // меняем яркость светодиода >
Пояснения к коду:
  1. светодиод подключается к аналоговому выходу с ШИМ сигналом;
  2. данные с порта A1, которые находятся в диапазоне 0…1023, мы делим на 4 и получаем диапазон от 0 до 255 для изменения яркости светодиода.

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

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

Сервомотор подключается к аналоговым выходам Arduino Nano. В скетче использована функция map, которая пропорционально переносит значение переменной из текущего диапазона значений в новый диапазон. Таким образом, значения с потенциометра в диапазоне 0…1023, мы переводим их в новый диапазон от 0 до 180 (угол поворота сервомотора). Соберите схему и загрузите следующий скетч.

Скетч. Подключение к Ардуино потенциометра и сервомотора

#include "Servo.h" // подключаем библиотеку для сервопривода Servo servo; // объявляем переменную servo типа "servo" void setup() < servo.attach(10); // привязываем сервопривод к порту 10 pinMode(A1, INPUT); // к входу A1 подключаем потенциометр > void loop() < int val = analogRead(A1); // считываем данные с порта A1 val = map(val, 0, 1023, 0, 180); // переводим val в новый диапазон servo.write(val); // передаем значения для сервопривода >
Пояснения к коду:
  1. функция map пропорционально переносит значение переменной val из диапазона значений от 0 до 1023 в новый диапазон от 0 до 180;
  2. в самых крайних положениях (0 и 180 градусов) сервомотор может «дергаться».

Заключение. Ардуино позволяет не только считывать показания с переменного резистора, но и управлять с помощью него различными устройствами. Команда analogRead() считывает положение ручки переменного резистора, который можно увидеть на мониторе порта. Мы предоставили на этой странице примеры управления сервоприводом и светодиодом с помощью потенциометра на Ардуино.

● Проект 17: Сервопривод. Крутим потенциометр, меняем положение

Сервопривод (см. рис. 17.1) – устройство, обеспечивающее преобразование сигнала в строго соответствующее этому сигналу перемещение (как правило, поворот) исполнительного устройства. Представляет собой прямоугольную коробку с мотором, схемой и редуктором внутри и выходным валом, который может поворачиваться на строго фиксированный угол, определяемый входным сигналом.
Как правило, этот угол имеет предел в 60 в 180. Кроме этого, еще бывают сервоприводы и постоянного вращения.

Рис. 17.1. Сервопривод

 Сервопривод TowerPro SG90 подключается к Arduino

Сервопривод подключается с помощью трех проводов к управляющему устройству (драйверу или контроллеру) и источнику питания. Сервопривод управляется с помощью импульсов переменной длительности. Угол поворота определяется длительностью импульса, который подается по сигнальному проводу. Это называется широтно-импульсной модуляцией. Сервопривод ожидает импульса каждые 20 мс. Длительность импульса определяет, насколько далеко должен поворачиваться мотор. Например, импульс в 1,5 мс диктует мотору поворот в положение 90° (нейтральное положение). Когда сервопривод получает команду на перемещение, его управляющий орган перемещается в это положение и удерживает его. Если внешняя сила действует на сервопривод, когда он удерживает заданное положение, сервопривод будет сопротивляться перемещению из этого положения. Максимальная величина силы, которую может выдерживать сервопривод, характеризует вращающий момент сервопривода. Однако сервопривод не навсегда удерживает свое положение, импульсы позиционирования должны повторяться, информируя сервопривод о сохранении положения.
В нашем эксперименте мы будем управлять положением сервопривода с помощью потенциометра. Схема подключения сервопривода и потенциометра к плате Arduino показана на рис. 17.2.

Рис. 17.2. Схема подключения сервопривода и потенциометра к Arduino

Cервопривод подключается тремя проводами: питание (Vcc), «земля» (Gnd) и сигнальный (С). Питание– красный провод, он может быть подключен к +5 В внешнего источника питания, черны (или коричневый) провод – «земля» – подключается к GND-выводу Arduino GND, сигнальный (оранжевый/желтый/белый) провод подключается к цифровому выводу контроллера Arduino. Для питания сервопривода используем отдельный блок питания +5 В. Для управления сервоприводом в Arduino имеется стандартная библиотека Servo. На платах, отличных от Mega, использование библиотеки отключает возможность применения analogWrite() (ШИМ) на пинах 9 и 10 (вне зависимости, подключены к этим пинам сервы или нет). На платах Mega до 12 сервоприводов могут использоваться без влияния на функциональность ШИМ, но использование от 12 до 23 сервомашинок отключит PWM ШИМ на пинах 11 и 12.
Аналоговые данные потенциометра (0–1023) масштабируем функцией map() в значения угла поворота сервопривода (0–180) и с помощью библиотечной функции servo.write(angle) даем сервоприводу команду для поворота. Скетч приведен в листинге 17.1.

#include // подключение библиотеки Servo Servo servo1; const int pinServo=8; // Пин для подключения сервопривода const int POT=0; // Аналоговый вход A0 для подключения потенциометра int valpot = 0; // переменная для хранения значения потенциометра int angleServo = 0; // переменная для хранения угла поворота сервы void setup() < // подключить переменную servo к выводу pinServo servo1.attach(pinServo); > void loop() < valpot = analogRead(POT); // чтение данных потенциометра // масштабируем значение к интервалу 0-180 angleServo=map(valpot,0,1023,0,180); // поворот сервопривода на полученный угол servo1.write(angleServo); delay(15); // пауза для ожидания поворота сервопривода >

Порядок подключения:

1. Подключаем датчик сервопривода и потенциометр по схеме на рис. 17.2.
2. Загружаем в плату Arduino скетч из листинга 17.1.
3. Поворотом ручки потенциометра управляем положением сервопривода.

Листинги программ скачать

Управление сервоприводом джойстиком Ардуино

Управление сервоприводом с помощью джойстика на Ардуино

Подключите к плате Ардуино сервомотор и джойстик, согласно схеме, изображенной на картинке выше. И загрузите следующий скетч в микроконтроллер, позволяющий сделать плавное управление сервоприводом с помощью джойстика на Ардуино. В программе мы используем функцию map(), которая преобразует числовой диапазон значений 0-1023, в новый диапазон чисел 0-180 (угол поворота серво).

Скетч. Управление сервоприводом с помощью джойстика

#define pinX A1 // ось X джойстика #include Servo.h> // подключаем библиотеку для серво Servo servo1; // объявляем объект servo1 void setup() < pinMode(pinX, INPUT); // указываем пин для джойстика servo1.attach(9); // указываем пин для микро серво > void loop() < int X = analogRead(pinX); // считываем значение оси X X = map(X, 0, 1023, 0, 180); // переводим значение X в новый диапазон servo1.write(X); // поворачиваем серво от джойстика >
Пояснения к коду:
  1. с помощью map() можно задать любой диапазон чисел, в том числе обратный;
  2. обратите внимание, что у разных производителей распиновка джойстика может отличаться, от представленной выше схемы подключения модуля к плате.

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

Скетч. Управление двумя серво с помощью джойстика

#define pinX A1 // ось X джойстика #define pinY A0 // ось Y джойстика #include Servo.h> // подключаем библиотеку для серво Servo servo1; // объявляем объект servo1 Servo servo2; // объявляем объект servo2 void setup() < pinMode(pinX, INPUT); // указываем пин для джойстика pinMode(pinY, INPUT); // указываем пин для джойстика servo1.attach(9); // указываем пин для первого серво servo2.attach(11); // указываем пин для второго серво > void loop() < int X = analogRead(pinX); // считываем значение оси X int Y = analogRead(pinY); // считываем значение оси Y X = map(X, 0, 1023, 0, 180); // переводим значение X в новый диапазон Y = map(Y, 0, 1023, 0, 180); // переводим значение Y в новый диапазон servo1.write(X); // поворачиваем первый серво servo2.write(Y); // поворачиваем второй серво >
Пояснения к коду:
  1. в данной программе мы лишь добавили новую локальную переменную int Y; для значений оси Y джойстика, чтобы управлять вторым серво.

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

(7 оценок, среднее: 4,86 из 5)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *