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

Урок 18/31: Использование серводвигателя с Arduino — набор SunFounder для Arduino

Урок 18/31: Использование серводвигателя с Arduino — набор SunFounder для Arduino

Сервоприводы являются рабочей лошадкой countless проектов робототехники и радиоуправления, обеспечивая точное угловое управление для всего: от рулевых механизмов до роботизированных рук. Это руководство, основанное на Уроке 18 курса SunFounder Arduino Kit, проведет вас через основы использования сервопривода с Arduino. Вы узнаете, как подключить оборудование и управлять положением двигателя двумя различными методами: простым качающимся движением и положением, управляемым ручкой. Знания, которые вы здесь получите, очень практичны и могут быть применены в широком спектре проектов, включая:

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

Обзор оборудования

Прежде чем углубляться в код, важно понять сам сервопривод. Как показано в видео, сервопривод не вращается непрерывно, как стандартный двигатель постоянного тока. Вместо этого он поворачивается на определенный угол, обычно от 0 до 180 градусов. Это делает его идеальным для применений, требующих точного движения. В видео подчеркиваются несколько примеров: от управления радиоуправляемой машиной до управления сложными суставами роботизированной руки (в видео на 00:06).

Сервоприводы бывают разных размеров, при этом физический размер и крутящий момент определяют их цену и применение. Маленький микро-сервопривод идеально подходит для легких моделей, в то время как более крупный и мощный сервопривод необходим для более тяжелых задач, таких как управление «очень мощной или толстой машиной» (в видео на 01:59).

Большинство хобби-сервоприводов имеют три провода в стандартном разъеме. В видео объясняется продуманное конструкторское решение: средний провод всегда является проводом питания (VCC), обычно 5 В. Это функция безопасности, которая защищает устройство от неправильной полярности, если разъем подключен наоборот (в видео на 03:27). Два других провода предназначены для земли (GND) и управляющего сигнала.

Руководство по подключению

Servo-wiring_bb
Servo-pot_wiring

Подключение сервопривода к Arduino несложно. В видео представлена четкая демонстрация соединений (в видео на 04:48). Три контакта на разъеме сервопривода подключаются к Arduino следующим образом:

  • Сигнальный провод (часто оранжевый или желтый): Подключите его к цифровому ШИМ-контакту на Arduino. В примере используется контакт 9.
  • Провод питания (часто красный): Подключите его к контакту 5 В на Arduino.
  • Земляной провод (часто коричневый или черный): Подключите его к одному из контактов GND на Arduino.

В видео ведущий использует перемычки типа «папа-папа» DuPont для подключения женского разъема сервопривода к контактным штырькам Arduino (в видео на 05:23).

Программа 1: Управление сервоприводом (Sweep)

Эта первая программа является классическим примером «sweep» (качание). Она предназначена для демонстрации полного диапазона движения сервопривода, перемещая его вперед и назад между 0 и 180 градусами. Это отличный способ проверить правильность подключения и увидеть сервопривод в действии. В видео демонстрируется загрузка этого кода и наблюдение за тем, как сервопривод качается вперед и назад (в видео на 09:21).

Для управления сервоприводом код сначала включает встроенную библиотеку Servo.h, которая упрощает процесс генерации необходимых управляющих сигналов. Затем вы создаете объект сервопривода и даете ему имя, например myservo. В функции setup() вы прикрепляете этот объект к определенному контакту с помощью myservo.attach(9), сообщая Arduino, что сигнальный провод сервопривода подключен к контакту 9.

Волшебство происходит в функции loop(), которая использует два цикла for для перемещения сервопривода. Первый цикл увеличивает переменную положения pos от 0 до 180, перемещая сервопривод на один градус за раз. Второй цикл делает обратное, уменьшая pos от 180 обратно до 0. Ключевая часть — это delay(15) в конце каждой итерации цикла. Эта пауза дает сервоприводу достаточно времени, чтобы физически переместиться в новое положение, прежде чем будет отправлена следующая команда. Без этой задержки сервопривод не смог бы успевать и остановился бы или начал дрожать (в видео на 12:31).

Этот пример идеально подходит для обучения, но в реальном применении вам, скорее всего, потребуется установить сервопривод на определенный угол. Как показано в видео, вы можете изменить код, заменив циклы for одной командой, например myservo.write(90), чтобы переместить сервопривод на 90 градусов и удерживать его там (в видео на 10:09).

Программа 2: Управление сервоприводом (Knob)

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

Эта программа развивает предыдущую, добавляя потенциометр. Потенциометр — это переменный резистор, который работает как аналоговый делитель напряжения. Когда вы поворачиваете ручку, он изменяет напряжение на своем выходном контакте. Arduino считывает это напряжение с помощью аналого-цифрового преобразователя (АЦП) на одном из своих аналоговых выводов, преобразуя его в значение от 0 до 1023.

Ключ к этой программе — функция map(). Эта функция масштабирует число из одного диапазона в другой. В данном случае она используется для преобразования сырого значения потенциометра (от 0 до 1023) в значение, подходящее для сервопривода (от 0 до 180 градусов). Код считывает значение потенциометра с помощью analogRead(potpin), масштабирует его с помощью map(val, 0, 1023, 0, 180), а затем отправляет это масштабированное значение на сервопривод с помощью myservo.write(val). Это создает прямую связь, где поворот ручки до средней точки установит сервопривод на 90 градусов и так далее.

Этот метод управления очень интуитивен и является основой для многих человеко-машинных интерфейсов — от простых пультов дистанционного управления до сложных роботизированных контроллеров.

Живая демонстрация проекта

Видео предоставляет живую демонстрацию обеих программ в действии. Для программы развертки вы можете видеть, как рычаг сервопривода плавно движется от 0 до 180 градусов и обратно. Ведущий также показывает, как изменение размера шага в цикле for (например, с 1 градуса до 20 градусов) и времени задержки меняет поведение сервопривода, делая движение быстрее, но менее плавным (на видео в 11:19).

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

Главы

  • [00:00] Введение в сервоприводы
  • [01:07] Применение сервоприводов
  • [02:57] Анатомия сервопривода
  • [04:48] Подключение сервопривода к Arduino
  • [06:06] Изучение примера кода Sweep
  • [09:21] Демонстрация программы Sweep
  • [10:04] Установка пользовательского угла сервопривода
  • [11:19] Изменение скорости и размера шага Sweep
  • [13:15] Пример другого сервопривода

Изображения

SG90_servo_motor-1
SG90_servo_motor-1
SG90 servo
SG90 servo
Servo-pot_wiring
Servo-pot_wiring
Servo-wiring_bb
Servo-wiring_bb
914-Lesson 18/31: Controlling servo motor (sweep)
Язык: C++
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * 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 myservo;  // create Servo object to control a servo
// twelve Servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the Servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
}
915-Lesson 18/31: Controlling servo motor (knob)
Язык: C++
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * 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 myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

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

Файлы📁

Библиотеки Arduino (zip)