Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Библиотека ServoTimer2: простое руководство по управлению сервоприводами без конфликта таймеров

Компоненты и материалы

Сервопривод (Tower Pro MG996R или SG90) × 1
Arduino UNO × 1
Перемыжки × 1

О проекте

Введение

При создании гуманоидного робота столкнулся с проблемой: библиотеки TMRpcm (воспроизведение звука) и VirtualWire используют Timer1 Arduino. Стандартная библиотека Servo.h тоже использует Timer1. Нельзя использовать два устройства на одном таймере одновременно — если робот говорит, сервоприводы не работают.

Решение — библиотека ServoTimer2, которая использует Timer2. В интернете не нашёл понятных туториалов по ней, поэтому написал это руководство. Мы подключим один сервопривод и напишем простой sweep (плавное вращение).

Шаг 1: Детали и сборка

Основная деталь — сервопривод (любая модель, например, SG90).

Надежнее закрепить рычаг на картоне для наглядности угла поворота, затем установить на вал сервы.

Шаг 2: Установка библиотеки ServoTimer2

  1. Скачайте с GitHub: https://github.com/nabontra/ServoTimer2
  2. В Arduino IDE: Sketch → Include Library → Add .ZIP Library → выберите скачанный архив.

Шаг 3: Схема подключения

  • Красный провод сервы → Arduino 5V (VCC)
  • Коричневый/чёрный → GND
  • Оранжевый/белый (сигнал) → Digital Pin 6

Шаг 4: Код — сравнение Servo.h и ServoTimer2

Стандартный Servo.h (управление градусами):

#include <Servo.h>
Servo servo1;

void setup() {
  servo1.attach(6);
}

void loop() {
  servo1.write(0);   delay(1000);
  servo1.write(90);  delay(1000);
  servo1.write(180); delay(1000);
}

Здесь просто указываем угол в градусах.

ServoTimer2 (управление длительностью импульса в микросекундах):

#include "ServoTimer2.h"
ServoTimer2 servo1;

void setup() {
  servo1.attach(6);
}

void loop() {
  servo1.write(750);   // мин. импульс ~0°
  delay(1000);
  servo1.write(1500);  // ~90°
  delay(1000);
  servo1.write(2250);  // макс. импульс ~180°
  delay(1000);
}

Ключевое отличие: в ServoTimer2 аргумент write() — это длительность импульса (pulse width) в микросекундах, а не градусы.

  • 750 мкс ≈ 0° (минимум)
  • 1500 мкс ≈ 90° (середина)
  • 2250 мкс ≈ 180° (максимум)

Точные значения зависят от конкретной сервы. Экспериментируйте — это не повредит привод.

Шаг 5: Питание и эксперименты

Подайте питание, наблюдайте за углом поворота при разных значениях импульса. Подберите свои минимум/максимум для точного позиционирования. У некоторых серв может потребоваться до 2700 мкс для 180°.

Код

Servo sweep (Servo.h)

#include <Servo.h>
Servo servo1;
void setup() { servo1.attach(6); }
void loop() {
  servo1.write(0); delay(1000);
  servo1.write(90); delay(1000);
  servo1.write(180); delay(1000);
}

ServoTimer2 sweep

#include "ServoTimer2.h"
ServoTimer2 servo1;
void setup() { servo1.attach(6); }
void loop() {
  servo1.write(750); delay(1000);
  servo1.write(1500); delay(1000);
  servo1.write(2250); delay(1000);
}

Схемы

Схема подключения и исходный код на GitHub: https://github.com/ashraf-minhaj/Arduino-ServoTimer2-basic-sweep-/tree/code-sweep

Производственный процесс

  1. Как молибден формирует современную промышленность: применение, преимущества и динамика поставок
  2. Создание робота на Arduino и Raspberry Pi: пошаговое руководство
  3. Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
  4. Полное руководство по производству стекловолокна
  5. Использование realloc() в C: синтаксис, лучшие практики и пример
  6. Освоение функции free() в C: практическое руководство и пример
  7. Использование термистора: пошаговое руководство для Arduino
  8. Создание анимации прогрессивного среза в SolidWorks — Пошаговый урок
  9. Создайте выигрывающий прототип: Пошаговое руководство для быстрой разработки продукта
  10. Освоение техник шлифовального станка для режущих инструментов: практическое руководство