Подключение к плате Arduino cервопривода TowerPro SG90

Сервопривод TowerPro SG90 относится к разряду хоббийных сервоприводов и при своем небольшом потребление тока в 50-80mA может без проблем подключаться напрямую к плате Arduino. Если вы задумаете подключать несколько сервоприводов или сервопривод с более серьезным потреблением тока, необходимо будет построить стабилизирующую схему. В нашем же случае сервопривод TowerPro SG90 идеально подходит для начального изучения принципов работы сервоприводов, быстро подключается к микроконтроллеру и позволяет практически сразу перейти к экспериментам над кодом управления сервопривода.

Подключение очень простое. Желтый провод сервопривода, это провод управления, подключаем его к пину 12 платы Arduino. Красный и черный провода сервопривода это питание, подключаем соответственно красный провод к выходу 5V платы Arduino, а черный провод к любому из выходов GND платы Ардуино.

Подключение к плате Arduino cервопривода TowerPro SG90

Заливаем простейший скетч, читаем комментарии к коду.

#include <Servo.h> // подключаем библиотеку для управления сервоприводами
Servo servo1; // придумываем имя для нашей сервы и присваеваем его переменной типа "Servo"

void setup() // НАСТРОЙКИ
{ 
  servo1.attach(12); // указываем пин который будет управлять сервоприводом
}

void loop() // БЕСКОНЕЧНЫЙ ЦИКЛ
  {  
  servo1.write(30); // устанавливаем угол 30°  
  delay(1000); // пауза 1 секунда
  servo1.write(120); // устанавливаем угол 120° 
  delay(1000); // пауза 1 секунда
  }

Как видим все просто. Сервопривод циклично изменяет свой угол с одного на другой.

Давайте добавим в нашу схему потенциометр и заставим поворачиваться сервопривод, в зависимости от поворота потенциометра.

Управление сервоприводом с помощью потенциометра и платы Ардуино

Записываем в микроконтроллер новый скетч.

#include <Servo.h> // подключаем библиотеку для управления сервоприводами
Servo servo1; // придумываем имя для нашей сервы и присваеваем его переменной типа "Servo"
 
void setup() // НАСТРОЙКИ
  {
  servo1.attach(12); // указываем пин который будет управлять сервоприводом
  }
 
void loop() // БЕСКОНЕЧНЫЙ ЦИКЛ
  {
  int val = analogRead(A0); // аналоговый пин на который мы принимаем сигнал (напряжение) с потенциометра
  int angle = int(val / 1024.0 * 270); // вычисляем угол поворота на основе полученного аналогового сигнала с потенциометра
  angle = constrain(angle, 0, 180); // ограничиваем угол поворота сервопривода от 0 до 180 градусов, так как на больший угол они не поворачиваются
  servo1.write(angle); // устанавливаем угол согласно повороту потенциометра
  }

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

Все вроде просто. Если у Вас остались какие-то вопросы, буду рад услышать их в комментариях на этой странице.

 

 

 

Комментарии  

 
+1 # ИгорюшкаВладимирович 02.04.2016 17:13
А как заставить его вращаться от резистора, но медленно - с использованием функции
servoslow( Servo num, int pos, int time, int start)?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+3 # Volt0m 03.04.2016 00:26
Функция servoslow про которую вы говорите вызывается в основном цикле строкой:

servoslow(myservo, 180, 10, 0);

где 180 - это конечная позиция сервопривода (в градусах)

Чтобы Вам решить свою задачу, попробуйте сначала принять сигнал с потенциометра и вычислить угол поворота, как показано в примере:

int val = analogRead(A0);
int angle = int(val / 1024.0 * 270);

после чего, вызывая функцию servoslow, подставьте переменную angle вместо цифры 180, вот так:

servoslow(myservo, angle, 10, 0);
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+1 # ИгорюшкаВладимирович 02.04.2016 17:26
А как усовершенствовать код (например, через servoslow( Servo num, int pos, int time, int start), чтобы вторым резистором можно было бы скорость сервы менять ?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+2 # Volt0m 03.04.2016 00:42
Точно также как и с первым потенциометром, получаете показания со второго потенциометра и полученное значение присваиваете например переменной speed, после чего вызывая функцию servoslow подставляете в неё свою переменную

servoslow(myservo, angle, speed, 0);
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 

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

Защитный код
Обновить

шт.
Корзина пуста
Принимаем к оплате: