Урок 92: Управление несколькими сервомоторами, каждый из которых подключен к потенциометру | Курс Arduino шаг за шагом
В этом проекте вы научитесь строить независимый многоканальный сервоконтроллер с использованием Arduino Uno и двух потенциометров. Вместо того чтобы один сервомотор следовал за одним ручным регулятором, этот гид показывает, как предоставить каждому сервомотору свой собственный аналоговый вход, что позволит вам независимо и одновременно управлять двумя и до шести сервомоторами. Это основополагающий строительный блок для любого проекта, требующего точного ручного управления несколькими движущимися частями.

Эта настройка невероятно универсальна. Вот несколько практических способов ее использования:
- Робототехника:Управление панорамированием и наклоном карданного подвеса камеры или базой и суставами рук小 робота.
- Аниматроника:Создание реалистичных движений для куклы или анимационного персонажа путем независимого управления его головой и глазами.
- Модель управления:Создание пользовательского контроллера для радиоуправляемых автомобилей или моделей самолетов для точной настройки закрылков и элеронов.
- Автоматизация:Создание станции ручного управления для солнечного трекера или многоосевого позиционирования.
Требуемое оборудование
- Arduino Uno (или любая совместимая плата)
- 2x Серводвигателя (здесь используются стандартные серводвигатели на 180 градусов)
- 2-х потенциометра (10 кОм — распространённый выбор)
- Макетная плата и перемычки
- Внешний блок питания 5В (рекомендуется для нескольких серво)
Справочник по проводке
Этот проект требует немного больше проводки, чем установка с одним сервоприводом, главным образом потому, что необходимо распределить питание и землю на несколько компонентов. Ключевое — использовать силовые шины макетной платы для создания общего шины 5 В и земли. Схема подключения является необходимой для этой сборки.

Давайте разберем соединения, как объяснено в видео (в видео на 02:23). Сначала установите свои силовые шины: подключите Arduino's5Впришпиливайте к положительной шине макетной платы иГНДприсоедините к отрицательной шине. Это обеспечивает легкий доступ к питанию для всех ваших компонентов.
Потенциометры:Каждый потенциометр работает как делитель напряжения. Подключите правый контакт каждого потенциометра к5Вжелезной дороге и левый штифт кGNDрельс. Средний контакт - это "смахиватель" и обеспечивает переменное напряжение. Подключите средний контакт первого потенциометра к аналоговому входуA0и средний контакт второго наА1(в видео на 03:22).
Сервомоторы:Каждый сервопривод имеет три провода. Подключите провода темного цвета (обычно черный или коричневый) кСГНрельс. Подключите средний провод (обычно красный) к5Вжелезная дорога. Наконец, соедините сигнальный провод (обычно оранжевый или желтый) с выводом, поддерживающим ШИМ, на Arduino. Сигнальный провод первого сервомотора идет к выводу3, а сигнал провод второго сервопривода идет на контакт5(в видео на 04:01). Помните, вы должны использовать контакты с поддержкой ШИМ (обозначенные тильдой "~" на Уно) для управления сервомоторами.
Объяснение кода
Код основан на стандартном примере "Ручка" из Arduino IDE, но модифицирован для управления двумя сервоприводами. Логика проста: считываем аналоговое значение с потенциометра, сопоставляем его с углом и приказываем сервоприводу переместиться в этот угол. Раздел конфигурации в верхней части кода — это место, где вы сделаете все свои настройки.
Вот настраиваемый пользователем раздел, который определяет контакты и создает объекты серво:
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
Это основа конфигурации. Чтобы добавить третий сервопривод, вам нужно скопировать блок "настроек сервопривода 2", изменить все "2" на "3", назначить новый аналоговый пин (например,A2) и новый PWM-выход (например,9). TheServoКласс встроен в среду разработки Arduino IDE, поэтому дополнительные библиотеки не нужны.
In thesetup()функция, этаservo.attach(pin)команда указывает Arduino, к какому пину подключен сигнальный провод каждого сервопривода. У вас должна быть строка для каждого сервопривода, который вы используете.
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
В loop()код считывает значение потенциометра, отображает его в диапазон от 0 до 180 градусов и записывает этот угол на сервопривод.delay(5)в конце является параметром настройки. Как показано в видео, уменьшение этого значения с 15 до 5 миллисекунд делает движение сервопривода намного более плавным и устраняет вибрацию (в видео на 12:00).
Демонстрация живого проекта
Как только вы подключите цепь и загрузите код, демонстрация будет немедленной. Когда вы подадите питание на Arduino, каждый серво приведется в положение, определяемое текущими настройками соответствующего потенциометра. Когда вы поворачиваете ручку, ее сервопривод плавно следует за движением. В видео показано, что два сервопривода полностью независимы в работе, что позволяет осуществлять сложные, одновременные движения. Если вы заметите дрожание или вибрацию, отрегулируйтеdelay()значение в цикле — это первая вещь, которую стоит попробовать.
Главы
- [00:00] Введение и Обзор Проекта
- [00:56] Понимание сервомоторов
- [02:23] Схема подключения для двух сервоприводов и потенциометров
- [04:15] Подробное объяснение проводки
- [06:49] Объяснение кода: Конфигурация и настройка
- [09:15] Объяснение кода: Логика управления и сопоставление
- [11:15] Живое демонстрационное выступление и настройка
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Вещи, которые могут вам понадобиться
-
Амазонка
-
Амазонка
-
eBay
-
АлиЭкспрессКупите сервомотор SG90 180 или 360 на AliExpress.s.click.aliexpress.com
Ресурсы и ссылки
Ресурсов пока нет.
Файлы📁
Другие файлы
-
Технический паспорт мотора SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB