В этой статье я покажу, как можно работать с сервоприводами на примере дешевого сервопривода SG90 и потенциометра-слайдера. Идея управлять сервами с помощью потенциометра не новая, но почему-то всегда в примерах задействованы круговые потенциометры, про слайдеры ни кто не рассказывает. Постараюсь исправить это в статье ниже.
Что использовалось в проекте:
- Arduino (я использовал arduino nano, но можно любую другую). Покупал тут: arduino nano
- Сервопривод SG90. Покупал тут: Сервопривод SG90
- Потенциометр-слайдер. Покупал тут: Потенциометр-слайдер
Сервопривод SG90. Подключение к arduino
Сервопривод SG90 имеет три провода. Красный – это плюсовой провод, рабочее напряжение от 3 до 7 вольт, поэтому 5 вольт от ардуино подходит идеально. Коричневый провод – это земля. И последний, желтый – это управляющий провод, который нужно подключать к цифровому пину ардуино, в примере будем использовать пин 9.
Для работы с сервоприводами в IDE ардуино уже есть по умолчанию библиотека Servo.h, которую нужно подключать в начале скетча.
Замечание: сервопривод SG90 имеет возможность поворачиваться только на 180 градусов.
Ниже приведен пример кода, который поворачивает сервопривод на 90 градусов.
#include <Servo.h> // подключение библиотеки Servo test_servo; // создание объекта для сервы void setup() { test_servo.attach(9); // указываем управляющий пин delay(100); test_servo.write(90); // делаем поворот на 90 градусов } void loop() {}
Потенциометр-слайдер 10КОм. Подключение к arduino
Как уже писал выше, управление сервоприводом будет осуществляться с помощью потенциометра, только потенциометр будет иметь нестандартную форму – слайдер с ползунком. Такой потенциометр стоит дороже обычного кругового, но для некоторых проектов подходит намного удачнее.
Потенциометр имеет две тройки пинов, использовать можно любую из них, отличается они только началом отсчета. Для подключения к ардуино необходимо три провода: VCC – плюс 5 вольт, GND – земля и OTA(или OTB) – это пин с данными, который возвращает значение от 0 до 1023, поэтому подключать к ардуино нужно тоже к аналоговому пину, например A0.
Ниже приведен пример кода, который считывает данные с потенциометра и выводит их.
int val = 0; void setup() { Serial.begin(9600); pinMode( A0, INPUT ); } void loop() { val = analogRead(A0); Serial.println(val); delay(100); }
Вращение сервопривода SG90 в зависимости от положения потенциометра
Осталось только подключить сервопривод и потенциометр вместе и связать их. Подключаем все точно так же, как и по отдельности, отличие будет заключаться только в коде скетча. Необходимо получить значение с потенциометра, которое меняется от 0 до 1023, преобразовать его в значение от 0 до 180 градусов и повернуть сервопривод на получившийся угол.
Пример такого кода я приведу ниже:
#include <Servo.h> // подключение библиотеки Servo test_servo; // создание объекта для сервы void setup() { test_servo.attach(9); // указываем управляющий пин delay(100); test_servo.write(90); // делаем поворот на 90 градусов } void loop() {} #include <Servo.h> // подключение библиотеки Servo myservo; // создание объекта для сервы int potpin = A0; // пин потенциометра int val; // переменная, в которую запишем значение с потенциометра void setup() { myservo.attach(9); // указываем управляющий пин для сервы } void loop() { val = analogRead(potpin); // считываем значение потенциометра val = map(val, 0, 1023, 0, 180); // переводим значения от 0 до 1023 в нужные 0-180 градусов myservo.write(val); // делаем поворот сервы delay(50); }
Послесловие
Статья оказалась не большая и довольно простая, но на основе этих знаний можно делать довольно интересные штуки, например, сейчас я пытаюсь сделать поворотные светильники, которые будут управляться с пульта. Когда проект будет закончен, и если получится интересно, то напишу об этом.
Ниже приложу коротенькое видео, на котором видно, как работают в связке сервопривод sg90 и потенциометр-слайдер.