Код для поиска

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

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

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

Эта настройка невероятно универсальна. Вот несколько практических способов ее использования:

  • Робототехника:Управление панорамированием и наклоном карданного подвеса камеры или базой и суставами рук小 робота.
  • Аниматроника:Создание реалистичных движений для куклы или анимационного персонажа путем независимого управления его головой и глазами.
  • Модель управления:Создание пользовательского контроллера для радиоуправляемых автомобилей или моделей самолетов для точной настройки закрылков и элеронов.
  • Автоматизация:Создание станции ручного управления для солнечного трекера или многоосевого позиционирования.

Требуемое оборудование

  • Arduino Uno (или любая совместимая плата)
  • 2x Серводвигателя (здесь используются стандартные серводвигатели на 180 градусов)
  • 2-х потенциометра (10 кОм — распространённый выбор)
  • Макетная плата и перемычки
  • Внешний блок питания 5В (рекомендуется для нескольких серво)

Справочник по проводке

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

Two_or_more_Servo_pot_bb

Давайте разберем соединения, как объяснено в видео (в видео на 02:23). Сначала установите свои силовые шины: подключите Arduino'sпришпиливайте к положительной шине макетной платы иГНДприсоедините к отрицательной шине. Это обеспечивает легкий доступ к питанию для всех ваших компонентов.

Потенциометры:Каждый потенциометр работает как делитель напряжения. Подключите правый контакт каждого потенциометра кжелезной дороге и левый штифт кGNDрельс. Средний контакт - это "смахиватель" и обеспечивает переменное напряжение. Подключите средний контакт первого потенциометра к аналоговому входуA0и средний контакт второго наА1(в видео на 03:22).

Сервомоторы:Каждый сервопривод имеет три провода. Подключите провода темного цвета (обычно черный или коричневый) кСГНрельс. Подключите средний провод (обычно красный) кжелезная дорога. Наконец, соедините сигнальный провод (обычно оранжевый или желтый) с выводом, поддерживающим ШИМ, на 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] Живое демонстрационное выступление и настройка

Изображения

Multiple servo, one pot: Main setup
Multiple Servo one pot.: Main setup
Multiple servo, one pot: Main setup, top view
Multiple Servo one pot.: Main setup top view
Multiple servo one-pot: Creating extra 5V from an Arduino on a breadboard
Multiple Servo one pot.: Creating extra 5V from Arduino on breadboard
SG90 Mini Servo Motor
SG90 Mini Servo Motor
Two_or_more_Servo_pot_bb
Two_or_more_Servo_pot_bb
sg90_servo
sg90_servo
888-Lesson 92: Controlling Multiple servo motors
Язык: C++
/*
 * 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

Вещи, которые могут вам понадобиться

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Другие файлы