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

Общие принципы работы серводвигателей (сервомоторов)

Прежде всего, подключите датчик MPU 6050 к Ардуино. Соединения MPU6050 и Arduino заключаются в следующем:

  • Подключите VCC к MPU6050 к выходу 5V на Arduino.
  • Подключите GND на MPU6050 к GND на Arduino.
  • Подключите SCL к MPU6050 к A5 на Arduino.
  • Подключите SDA к MPU6050 к A4 на Arduino.

Штыри A4 и A5 на Ардуино предназначены для связи SPI. Вот почему мы подключили SCL и SDA на MPU6050 к A5 и A4 на Arduino. После подключения к MPU6050 и Arduino подключите сервомотор к Ардуино. Соединения для серводвигателя и Arduino следующие:

  • Подсоедините желтый провод серводвигателя к контакту 2 на Arduino.
  • Подключите красный провод серводвигателя к контакту 5V на Arduino.
  • Подключите черный провод серводвигателя к GND на Arduino.

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

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

Серводвигатель справа представляет собой так называемый стандартный серводвигатель. Это наиболее распространенный тип серводвигателя. Такие серводвигатели достаточно часто имеют одинаковые размеры и монтажные расстояния между отверстиями. Намного меньший (и более легкий) серводвигатель слева предназначен для летательных аппаратов. Эти серводвигатели называются сервоприводами 9g .

Сервоприводы с более высоким качеством исполнения и более высоким крутящим моментом имеют редуктор с шестернями из металла, а не из нейлона. Большинство серводвигателей работают на номинальном напряжении питания около 5 В при допустимом диапазоне питающих напряжений от 4 до 7 В. Подключение любительских сервоприводов обычно осуществляется через провода, заканчивающиеся 3-контактным разъемом: питание , питание — и управляющий сигнал.

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

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

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

Блок управления, получив через сигнал управления величину желаемого положения вала, вычитает из него величину действительного его положения и вырабатывает «сигнал ошибки», который может быть положительным или отрицательным. Этот «сигнал ошибки» подается на питание двигателя, заставляя его изменить положение вала в нужном направлении.

Управляющий сигнал на серводвигатель — это не напряжение, как можно было бы ожидать, а сигнал широтно-импульсной модуляции (ШИМ). Этот сигнал является стандартным для всех любительских сервомашинок и выглядит так, как показано на следующем рисунке.

Серводвигатель ожидает прихода импульса управления каждые 20 мс. Импульс длительностью 1,5 мс установит серводвигатель в центральное положение, соответствующее повороту выходного вала на 90°. Более короткие импульсы в 1,0 мс установят выходной вал в начальное положение — 0°, а импульсы в 2,0 мс — крайнее положение — 180°.

Представлено на следующем рисунке. Я думаю, здесь все просто и понятно.

1. Red (красный) = Положительное напряжение питания (от 4.8V до 6V)2. Brown (коричневый) = Ground (земля)3. Orange (оранжевый) = Control Signal – управляющий сигнал (PWM Pin – контакт ШИМ)

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

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

При перемещении датчика в направлении вверх или вниз он дает нам значения от -17000 до 17000. Мы будем отображать их от 0 до 180 для перемещения серводвигателя. Теперь, когда мы перемещаем датчик в направлении вверх, выходной сигнал от датчика будет равен 180. Когда мы перемещаем датчик в направлении вниз, тогда выход датчика будет 0.

Исходный код программы

Схема устройства представлена на следующем рисунке.

В отличие от управления серводвигателем с помощью микроконтроллеров AVR в случае использования платы Arduino нам уже нет необходимости вручную устанавливать значения регистров чтобы получить нужную частоту и коэффициент заполнения управляющих сигналов для серводвигателя. Для платформы Arduino для этих целей разработаны специальные библиотеки, с помощью которых эти функции реализуются достаточно просто – необходимо в программе просто подключить заголовочные файлы этих библиотек. В этом случае мы достаточно просто сможем устанавливать позицию сервомотора с помощью сигналов ШИМ.

Предлагаем ознакомиться  Как правильно подключить батареи в частном доме

1. #include <Servo.h>2. Servo sg90servo;3. Sg90.attach(servo_signal_pin_attached_to);4. Sg90.write(needed_position_ angle);

Вначале мы должны установить частоту ШИМ сигнала для управления сервомотором – в данном случае это делается простым подключением заголовочного файла “#include <Servo.h>”. С подключением этого заголовочного файла необходимая частота ШИМ сигнала для управления серводвигателем устанавливается автоматически, кроме этого открываются возможности использования различных функций для простого управления серводвигателем.

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

После этого мы должны определиться с именем сервомотора, которым будем управлять в программе. Делается это с помощью функции “Servo sg90sevo”, где ‘sg90servo’ – это выбранное имя для нашего сервомотора. Особенно актуально указание имен сервомоторов когда под нашим управлением будет находиться несколько сервомоторов (до 8 для Arduino) – в этом случае удобно их будет различать по данным им именам.

Далее мы должны сообщить Arduino к какому контакту подключен сервомотор, то есть на каком контакте необходимо будет формировать сигнал ШИМ. Мы это будем делать с помощью функции “Sg90.attach(3);”, которая указывает Arduino что сервомотор подключен к контакту PIN3.

Теперь все, что осталось сделать, это указать на какой угол необходимо повернуть ось серводвигателя, это можно сделать с помощью функции “Sg90.write(30);”, которая повернет ось серводвигателя на 30 градусов. В дальнейшем, если нам понадобится повернуть ось серводвигателя на какой-нибудь другой угол, то необходимо воспользоваться командой ”Sg90.

Код программы снабжен комментариями, объясняющими смысл отдельных команд.

volatile int i=0; // объявляем переменную целого типа для хранения значения угла поворота оси серводвигателя#include <Servo.h> // подключаем заголовочный файл для управления серводвигателемServo servo; // указываем имя для нашего серводвигателяvoid setup(){pinMode(3, OUTPUT); // устанавливаем контакт 3 на вывод данныхpinMode(0, INPUT); // устанавливаем контакт 0 на ввод данныхpinMode(1, INPUT); // устанавливаем контакт 1 на ввод данных}

void loop(){servo.write(i); // устанавливаем позицию оси сервомотора в ‘i’ градусов

if (digitalRead(0)==LOW){if (i<180){i ; // если кнопка, подключенная к pin0, нажата и угол поворота (в градусах) меньше 180delay(30);}}if (digitalRead(1)==LOW){if (i>0){i–; // если кнопка, подключенная к pin1, нажата и угол поворота (в градусах) больше 0delay(30);}}}

Предлагаем ознакомиться  Установить краны на чугунную батарею

Код Ардуино

#include <Wire.h>
#include <MPU6050.h>
#include <Servo.h>   

Servo sg90;          
int servo_pin = 2;

MPU6050 sensor ;
int16_t ax, ay, az ;
int16_t gx, gy, gz ;

void setup (){ 
sg90.attach ( servo_pin );

Wire.begin ( );

Serial.begin  (9600); 

Serial.println  ( "Initializing the sensor" ); 

sensor.initialize ( ); 

Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed"); 
delay (1000); 

Serial.println ( "Taking Values from the sensor" );
delay (1000);
}
void loop (){ 

sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);
ax = map (ax, -17000, 17000, 0, 180) ;
Serial.println (ax);
sg90.write (ax); 
delay (200);
}

Объяснение кода

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

Прежде всего, мы включили библиотеку для датчика MPU6050 и серводвигателя. Библиотека Wire предназначена для связи SPI между датчиком Arduino и MPU6050.

#include <Wire.h>
#include <MPU6050.h>
#include <Servo.h>

Затем мы создали переменную с именем sg90 и типом Servo. Эта переменная поможет нам использовать функции серво библиотеки. Затем мы инициализировали вывод 2 для серводвигателя.

Servo sg90;          
int servo_pin = 2;

Затем мы создали переменную с именем и типом датчика: MPU6050. Эта переменная поможет нам использовать функции библиотеки. Затем мы инициализировали некоторые переменные, которые мы будем использовать для измерения выхода датчика MPU6050.

MPU6050 sensor ;
int16_t ax, ay, az ;
int16_t gx, gy, gz ;

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

sg90.attach ( servo_pin );
Wire.begin ( );
Serial.begin  (9600);

Затем мы проверили, работает ли датчик MPU6050, или нет. Если он работает нормально, на экране будет напечатано «Принимать значения от датчика» (“Taking Values from the sensor”). Если он не подключен, на экране будет напечатано сообщение «Ошибка соединения» (“Connection failed”).

Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed"); 
delay (1000); 
Serial.println ( "Taking Values from the sensor" );
delay (1000);

В функции цикла мы взяли данные  датчика MPU6050 и сделали меппинг значения с помощью которого мы сможем контролировать серво. Затем мы передаем это значение сервомотору, чтобы переместить его.

sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);
ax = map (ax, -17000, 17000, 0, 180) ;
Serial.println (ax);
sg90.write (ax); 
delay (200);

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

На этом всё. Желаем вам успешных проектов.

Супер отопление
Adblock detector