Урок 88: Управление сервоприводом с помощью двух кнопочных переключателей
Этот проект демонстрирует, как управлять сервоприводом с помощью двух кнопок с использованием Arduino. Вместо потенциометра или последовательной команды вы можете использовать простые тактильные переключатели для ручного перемещения сервопривода влево или вправо. Это невероятно полезно для приложений, где требуется прямое физическое управление механизмом, например, при создании роботизированной руки, настройке карданного подвеса камеры или создании системы панорамирования и наклона с дистанционным управлением. Кнопки позволяют поэтапно регулировать угол сервопривода, а при удержании кнопки — плавно перемещать его по всему диапазону движения.
Вот несколько практических проектов, которые вы можете собрать с помощью этой схемы:
- Создание панели ручного управления для роботизированной руки или захвата.
- Создание слайдера для камеры или панорамной головки с дистанционным управлением.
- Разработка физического интерфейса управления рулем модели самолета или лодки.
- Создание простого «пульта обучения» для записи позиций для станка с ЧПУ или 3D-принтера.

Аппаратное обеспечение и компоненты
Для этого проекта требуется всего несколько базовых компонентов, что делает его отличной отправной точкой для изучения как устройств ввода, так и вывода с Arduino.
- Плата Arduino (Uno, Nano, Mega и т. д.)
- Сервопривод (например, SG90 или MG995)
- Две тактовые кнопки
- Соединительные провода
- Макетная плата (необязательно, но рекомендуется)
Схема подключения
В видео схема подключения проста. Сигнальный вывод сервопривода подключается к контакту с поддержкой ШИМ на Arduino, в данном примере это контакт 9. Питание и земля сервопривода подключаются к выводам 5V и GND Arduino. Две кнопки подключаются аналогично друг другу. Один вывод каждой кнопки подключается к земле, а другой — к цифровому входному контакту Arduino (контакт 2 для кнопки «влево» и контакт 3 для кнопки «вправо»). В коде используются внутренние подтягивающие резисторы, поэтому внешние резисторы для кнопок не требуются. (в видео на 00:57)

Объяснение кода
Код разработан так, чтобы его было легко настраивать. Ключевые настраиваемые пользователем части находятся в начале скетча. Вот разбор важных переменных и определений, которые вы можете изменить для своего проекта.
#include <Servo.h>
Servo myservo; // создаем объект сервопривода для управления
int servoPin = 9;// этот контакт должен быть с ШИМ ~
int angle =90; // начальный угол сервопривода
int angleStep =5;
#define LEFT 2 // контакт 2 подключен к кнопке «влево»
#define RIGHT 3 // контакт 3 подключен к кнопке «вправо»
servoPin: Эта переменная определяет контакт Arduino, к которому подключен сигнальный провод сервопривода. Важно использовать контакт с поддержкой широтно-импульсной модуляции (ШИМ), обычно обозначаемый символом~на плате.angle: Это задает начальный угол сервопривода при запуске Arduino. Значение по умолчанию — 90 градусов, что обычно центрирует сервопривод.angleStep: Это шаг, на который изменяется угол сервопривода при каждом нажатии кнопки. Значение 5 означает, что каждое нажатие переместит сервопривод на 5 градусов. Вы можете увеличить это значение для более быстрого движения или уменьшить для более точного управления.LEFTиRIGHT: Эти директивы#defineназначают цифровые контакты, к которым подключены кнопки. Если вы подключите кнопки к другим контактам, вам нужно изменить эти значения в соответствии с вашей схемой.
Основная логика в функции loop() проверяет, нажата ли кнопка (считывая сигнал LOW из-за подтягивающей конфигурации). Если нажата кнопка «вправо», переменная angle уменьшается на angleStep. Если нажата кнопка «влево», angle увеличивается. Код включает проверки границ, чтобы угол оставался в диапазоне от 0 до 180 градусов. Затем функция myservo.write(angle) используется для команды сервоприводу переместиться в новую позицию.
Живая демонстрация проекта
В видеодемонстрации функциональность четко показана. При нажатии и удержании кнопки «влево» сервопривод плавно перемещается влево, угол увеличивается на 5 градусов за раз, пока не достигнет 180 градусов и не остановится. Аналогично, при нажатии и удержании кнопки «вправо» сервопривод перемещается обратно вправо, уменьшая угол, пока не достигнет 0 градусов. Текущий угол выводится в последовательный монитор, что позволяет видеть точное положение сервопривода в реальном времени. (в видео на 05:20)
Главы видео
- [00:00] Введение в управление сервоприводом с помощью кнопок
- [00:57] Схема подключения сервопривода и кнопок
- [02:12] Объяснение кода, часть 1: Настройка и конфигурация
- [03:25] Объяснение кода, часть 2: Основная логика цикла
- [05:20] Живая демонстрация проекта
- [06:23] Заключение и возможные применения
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* 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/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Вещи, которые могут вам понадобиться
-
Амазонка
-
Амазонка
-
АмазонкаКупите кнопки нажатия на Amazonamzn.to
-
АмазонкаСервомотор на Амазон.amzn.to
-
eBay
Файлы📁
Другие файлы
-
Технический паспорт мотора SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB