Компоненты · 8 мин чтения

Сервопривод на 360 градусов (FS90R): скорость и направление с Arduino

Как работает сервопривод FS90R на 360 градусов? Остановка через write(90), управление скоростью и направлением, подстройка остановки, привод колеса робота и код PWM для ESP32 и Pico.

Сервопривод на 360 градусов хоть и называется сервоприводом, на деле представляет собой небольшой мотор с редуктором, который непрерывно вращается, а не поворачивается на заданный угол и останавливается. Самый известный вариант — FS90R от FEETECH: у него те же размеры и те же три провода, что у SG90, но подаваемый сигнал задаёт скорость и направление вращения, а не угол. Он подключается прямо к пину Arduino без драйвера мотора, поэтому очень удобен для колёс маленьких роботов, поворотных столиков и устройств вроде кормушек для питомцев.

В этом руководстве ты узнаешь, чем устройство FS90R отличается от обычного сервопривода, почему команда write(90) останавливает мотор, как задавать скорость и направление длительностью импульса и как с помощью подстроечного резистора остановки устранить медленное вращение вместо остановки. Затем попробуешь управлять маленьким роботом на двух FS90R, регулировать скорость потенциометром и повторить то же на ESP32 и Raspberry Pi Pico. В конце разберём, почему этот сервопривод не позволяет управлять положением и что выбрать для такой задачи.

Сервопривод непрерывного вращения FS90R на 360 градусов
Сервопривод непрерывного вращения FS90R: размером с SG90, весит 9 граммов. Сигнал задаёт скорость и направление вращения, а не угол.

Что такое сервопривод на 360 градусов и чем он отличается от обычного?

В обычном сервоприводе есть небольшой DC-мотор, редуктор, схема управления и потенциометр, связанный с выходным валом. Схема управления сравнивает угол, заданный входным импульсом, с фактическим углом, считанным с потенциометра, и вращает мотор, пока разница не станет нулевой; когда вал достигает цели, мотор останавливается. В сервоприводе непрерывного вращения эта обратная связь разорвана: потенциометр отсоединён от вала и зафиксирован в среднем положении, а механический упор в шестернях удалён. Схема по-прежнему вычисляет «разницу между заданным и фактическим положением», но фактическое положение для неё не меняется, поэтому разница не исчезает. В результате чем больше разница, тем быстрее вращается мотор, а знак разницы определяет направление.

ХарактеристикаSG90 (сервопривод на 180°)FS90R (непрерывное вращение на 360°)
Что задаёт сигнал?Угол вала (0–180°)Скорость и направление вращения
Импульс 1500 мксПоворачивается в среднее положение (90°) и удерживает егоОстанавливается
1000 мкс / 2000 мксПоворачивается в одно или другое крайнее положениеПолная скорость в одну или другую сторону
Внутренняя обратная связьПотенциометр связан с валомНет; потенциометр задаёт только точку остановки
Механический упорЕстьНет, вращается неограниченно
Удержание положенияСохраняет угол под нагрузкойНевозможно; не знает, где остановился
Типичное применениеМанипуляторы, крышки, рулевое управлениеКолёса, поворотные столики, шнековые дозаторы

Характеристики FS90R

ХарактеристикаЗначение
Рабочее напряжение4,8–6 V
Скорость без нагрузкиОколо 100–110 об/мин при 4,8 V, около 130 об/мин при 6 V
Момент при заторможенном валуОколо 1,3 кг·см при 4,8 V, около 1,5 кг·см при 6 V
Ток100–130 mA без нагрузки, до 800 mA при 6 V с заторможенным валом
Управляющий сигналPWM 50 Hz; остановка при 1500 мкс, рабочий диапазон около 900–2100 мкс
Уровень сигналаРаботает с сигналами 5 V и 3,3 V
НаправлениеБольше 1500 мкс — в одну сторону, меньше — в другую (со стороны выходного вала: больше 1500 мкс — против часовой стрелки)
Вес и размеры9 г, около 23 × 12 × 22 мм (такой же корпус, как у SG90)
ПроводаКоричневый — GND, красный — VCC, оранжевый — сигнал
Не каждый товар, который продавцы называют «сервоприводом на 360 градусов», является сервоприводом непрерывного вращения. Некоторые сервоприводы удерживают положение в диапазоне от 0 до 360° (или 0–270°); они не вращаются неограниченно, как FS90R, а поворачиваются на заданный угол и останавливаются. Ищи в описании товара обозначение continuous rotation (непрерывное вращение). Кроме того, длительное удержание вала FS90R в заблокированном состоянии рукой или препятствием повреждает мотор и пластиковые шестерни.

Подключение FS90R: Arduino Uno, ESP32 и Pico

Провод сервоприводаНазначениеArduino UnoESP32Raspberry Pi Pico
КоричневыйGNDGNDGNDGND
КрасныйПитание 4,8–6 V5V (один сервопривод) или внешние 5 VVIN / 5V или внешние 5 VVBUS (5 V) или внешние 5 V
ОранжевыйСигнал PWMD9GPIO 18GP15

Пина 5V на Uno хватает для одного FS90R без нагрузки. Когда колесо сервопривода касается пола или два сервопривода запускаются одновременно, ток подскакивает до нескольких сотен миллиампер; напряжение USB проседает, Arduino может перезагрузиться, а сервоприводы — дёргаться. Поэтому в роботе питай сервоприводы от отдельного источника 5 V (4 аккумулятора NiMH, стабилизатор на 5 V или подходящий источник питания), обязательно соединяй GND питания сервоприводов с GND Arduino и добавь конденсатор 470 µF рядом с проводами сервоприводов. Сигнала 3,3 V от ESP32 и Pico достаточно для FS90R; сам сервопривод всё равно нужно питать от 5 V, а не от пина 3.3V.

write(90) = остановка: как длительность импульса задаёт скорость?

Управляющий сигнал сервопривода — импульс, который подаётся 50 раз в секунду (каждые 20 мс), и значение имеет его длительность. Для FS90R 1500 мкс означает «стоп». При увеличении длительности относительно 1500 мкс сервопривод ускоряется в одном направлении, при уменьшении — в другом; полной скорости он достигает примерно при 1000 мкс и 2000 мкс, а за этими пределами скорость почти не растёт. Поэтому write(90) в библиотеке Servo для Arduino означает остановку, а write(0) и write(180) — полную скорость в каждом из направлений. Но есть нюанс: по умолчанию библиотека переводит значения 0–180 в диапазон 544–2400 мкс, поэтому write(90) на самом деле выдаёт 1472 мкс. Этой разницы может хватить, чтобы сервопривод медленно вращался даже при write(90). Решение — сузить диапазон через attach(9, 1000, 2000) или напрямую использовать writeMicroseconds(1500).

ИмпульсАналог Servo.write (при attach(pin, 1000, 2000))Поведение FS90R
1000 мксwrite(0)Полная скорость, по часовой стрелке
1300 мксwrite(54)Средняя скорость, по часовой стрелке
1461 мксwrite(83)Очень медленно, по часовой стрелке
1500 мксwrite(90)Остановка (если подстроечный резистор настроен правильно)
1538 мксwrite(97)Очень медленно, против часовой стрелки
1700 мксwrite(126)Средняя скорость, против часовой стрелки
2000 мксwrite(180)Полная скорость, против часовой стрелки

Первый скетч: вперёд, стоп, назад

C++ (Arduino IDE)
1// FS90R ilk test: ileri, dur, geri / FS90R first test: forward, stop, backward
2#include <Servo.h>
3
4Servo teker;                         // sürekli dönüş servosu / continuous rotation servo
5
6void setup() {
7  teker.attach(9, 1000, 2000);       // write(0..180) artık 1000..2000 µs üretir / write(0..180) now outputs 1000..2000 µs
8}
9
10void loop() {
11  teker.write(180);                  // tam hız bir yöne / full speed one way
12  delay(2000);
13  teker.write(90);                   // 1500 µs: dur / 1500 µs: stop
14  delay(1000);
15  teker.write(0);                    // tam hız ters yöne / full speed the other way
16  delay(2000);
17  teker.write(110);                  // yavaş / slow
18  delay(2000);
19  teker.writeMicroseconds(1500);     // durmanın en kesin yolu / the most precise way to stop
20  delay(1000);
21}

Скетч подключает сервопривод к D9 и с помощью attach(9, 1000, 2000) переводит шкалу write() в диапазон, который действительно использует FS90R, поэтому write(90) точно соответствует 1500 мкс. Скорость зависит от импульса нелинейно: около 1500 мкс есть мёртвая зона шириной в несколько десятков микросекунд, в которой сервопривод не движется; в пределах 1500 ± 300 мкс скорость быстро растёт, а ближе к краям остаётся почти постоянной. Для медленного и точного движения держи значения близкими к 1500 мкс. Общий принцип длительности импульса разобран в статье «Что такое PWM», а управление углом обычных сервоприводов — в статье «Что такое сервопривод».

Настройка подстроечного резистора остановки (центра)

  1. Загрузи приведённый ниже калибровочный скетч; сервопривод получает сигнал 1500 мкс и в норме должен остановиться.
  2. Если сервопривод медленно вращается, найди маленькое отверстие сбоку корпуса рядом с выходом кабеля; внутри находится подстроечный резистор, задающий точку остановки.
  3. Немного поверни подстроечный резистор маленькой плоской или крестовой отвёрткой; если сервопривод замедляется, направление верное.
  4. Продолжай поворачивать понемногу, пока сервопривод полностью не остановится и не исчезнет даже слабый гул. Подстроечный резистор очень чувствительный; даже четверть оборота — слишком много.
  5. Если не хочется трогать подстроечный резистор, отправляй + и - из монитора порта, чтобы найти длительность импульса, при которой сервопривод останавливается, и используй это значение вместо 1500 в коде.
C++ (Arduino IDE)
1// Durma noktası ayarı: Serial Monitor'den µs değeri gönder
2// Stop point calibration: send a µs value from the Serial Monitor
3#include <Servo.h>
4
5Servo teker;
6int darbe = 1500;                    // başlangıç: teorik durma noktası / start: theoretical stop point
7
8void setup() {
9  Serial.begin(9600);
10  teker.attach(9);
11  teker.writeMicroseconds(darbe);
12  Serial.println(F("Sayi yaz (900-2100) ya da + / - gonder"));
13  Serial.println(F("Type a number (900-2100) or send + / -"));
14}
15
16void loop() {
17  if (Serial.available()) {
18    char c = Serial.peek();
19    if (c == '+') { Serial.read(); darbe += 5; }          // 5 µs artır / add 5 µs
20    else if (c == '-') { Serial.read(); darbe -= 5; }     // 5 µs azalt / subtract 5 µs
21    else if (isDigit(c)) darbe = Serial.parseInt();       // doğrudan değer / direct value
22    else { Serial.read(); return; }                       // satır sonu vb. atla / skip line endings etc.
23
24    darbe = constrain(darbe, 900, 2100);
25    teker.writeMicroseconds(darbe);
26    Serial.print(F("Darbe / pulse: "));
27    Serial.print(darbe);
28    Serial.println(F(" us"));
29  }
30}
Точка остановки может смещаться на несколько микросекунд из-за напряжения питания и температуры; не удивляйся, если по мере разряда батареек сервопривод снова начнёт слегка вращаться. Для длительных пауз, когда он должен оставаться полностью неподвижным, можно совсем отключить сигнал через detach(): FS90R без сигнала останавливается и почти не потребляет ток. Когда потребуется движение, просто снова вызови attach().

Управление скоростью и направлением с помощью потенциометра

C++ (Arduino IDE)
1// Potansiyometreyle hız ve yön: ortada dur, sağa ileri, sola geri
2// Speed and direction with a pot: centre = stop, right = forward, left = backward
3#include <Servo.h>
4
5const int POT_PIN = A0;
6const int OLU_BOLGE = 40;            // ortadaki ±40 adım: kesin dur / ±40 steps in the middle: solid stop
7Servo teker;
8
9void setup() {
10  teker.attach(9);
11}
12
13void loop() {
14  int okuma = analogRead(POT_PIN) - 512;                   // -512 ... +511
15  int darbe = 1500;                                        // varsayılan: dur / default: stop
16  if (okuma > OLU_BOLGE) {
17    darbe = map(okuma, OLU_BOLGE, 511, 1540, 2000);        // ileri, yavaştan hızlıya / forward, slow to fast
18  } else if (okuma < -OLU_BOLGE) {
19    darbe = map(okuma, -OLU_BOLGE, -512, 1460, 1000);      // geri / backward
20  }
21  teker.writeMicroseconds(darbe);
22  delay(20);                                               // servo periyodu kadar / one servo period
23}

Если потенциометр подключён к 5V, A0 и GND, среднее положение означает остановку, поворот вправо — движение вперёд, а влево — назад. Код задаёт в середине мёртвую зону ±40 шагов, поэтому сервопривод надёжно останавливается, даже если потенциометр не совсем по центру или показания немного колеблются. Вне мёртвой зоны значение переводится в диапазон 1540–2000 мкс или 1460–1000 мкс: небольшой поворот ручки даёт медленное вращение, а поворот до упора — полную скорость. Тот же принцип можно применить с джойстиком; подключение потенциометра описано в статье «Что такое потенциометр».

FS90R как привод колеса маленького робота

FS90R популярен в роботах благодаря простоте: редуктор и схема драйвера уже встроены, поэтому отдельный драйвер мотора, H-мост или энкодер не нужны; на каждое колесо достаточно одного сигнального пина. Два сервопривода устанавливаются по бокам шасси зеркально, поэтому для движения вперёд один должен вращаться по часовой стрелке, а другой — против. Приведённый ниже код учитывает это внутри функции surus(); тебе нужно только задать скорость от -100 до +100. Колесо диаметром 60 мм, вращаясь со скоростью 130 об/мин при 6 V, проходит около 0,4 метра в секунду; при 4,8 V это значение снижается примерно до 0,3 м/с.

C++ (Arduino IDE)
1// İki FS90R ile küçük robot: tekerlekler ayna gibi takılır
2// A small robot with two FS90Rs: the wheels are mounted as mirror images
3#include <Servo.h>
4
5Servo sol, sag;
6const int DUR_SOL = 1500;            // kalibrasyonla bulduğun değerler / values you found during calibration
7const int DUR_SAG = 1500;
8
9// hiz: -100 (tam geri) ... +100 (tam ileri) / speed: -100 (full back) ... +100 (full forward)
10void surus(int hizSol, int hizSag) {
11  sol.writeMicroseconds(DUR_SOL + hizSol * 5);             // sol teker normal yönde / left wheel normal direction
12  sag.writeMicroseconds(DUR_SAG - hizSag * 5);             // sağ teker ters takılı / right wheel is mounted reversed
13}
14
15void setup() {
16  sol.attach(9);
17  sag.attach(10);
18  surus(0, 0);
19  delay(1000);
20}
21
22void loop() {
23  surus(80, 80);    delay(1500);     // ileri / forward
24  surus(0, 0);      delay(500);      // dur / stop
25  surus(-60, 60);   delay(600);      // yerinde sola dön / spin left in place
26  surus(60, 60);    delay(1000);
27  surus(30, 80);    delay(1500);     // sola doğru yay çiz / curve to the left
28  surus(-80, -80);  delay(1000);     // geri / backward
29  surus(0, 0);      delay(2000);
30}

Два сервопривода никогда не вращаются с совершенно одинаковой скоростью; если робота уводит в сторону вместо движения прямо, отдельно откалибруй значение остановки каждого сервопривода (DUR_SOL, DUR_SAG) и немного уменьши коэффициент более быстрого. Момент FS90R в 1,5 кг·см подходит для маленьких роботов массой не больше нескольких сотен граммов; для более тяжёлого шасси или крупных колёс лучше выбрать DC-мотор с L298N или моторы с редуктором. При питании от батарей 4 аккумулятора NiMH (4,8 V) дают идеальное напряжение; напряжение 4 свежих щелочных батареек может достигать 6,4 V и превышать предел сервопривода. Полная сборка шасси с датчиками описана в статье «Сборка робота-машинки на Arduino».

С FS90R нельзя управлять положением. Внутри сервопривода больше нет ничего, что измеряло бы положение вала, поэтому нельзя дать команду «повернись на 90 градусов и остановись»; движения по времени, например «вращайся 1 секунду», тоже каждый раз дают разный результат в зависимости от напряжения батареи, нагрузки и температуры. Для поворота на определённый угол используй обычный сервопривод, для точного пошагового вращения — шаговый двигатель или добавь на колесо энкодер, чтобы считать обороты. Какой мотор и когда выбирать, разобрано в статье «Разница между DC-мотором, сервоприводом и шаговым двигателем».

FS90R с ESP32

Библиотека Servo для Arduino не работает на ESP32; вместо неё установи ESP32Servo через «Менеджер библиотек» (Library Manager). Использование почти такое же, но частоту 50 Hz нужно явно задать через setPeriodHertz(50). Для сигнала подойдёт почти любой GPIO с выходом PWM; исключение — GPIO 34–39, которые работают только как входы. Красный провод сервопривода подключи к пину VIN (USB 5 V) на ESP32 или внешнему источнику 5 V, а не к пину 3V3. Код ниже плавно разгоняет сервопривод от остановки до полной скорости, затем замедляет его и меняет направление; монитор порта показывает длительность импульса на каждом шаге.

C++ (Arduino IDE)
1// ESP32 + FS90R: ESP32Servo kütüphanesiyle hız rampası
2// ESP32 + FS90R: a speed ramp with the ESP32Servo library
3#include <ESP32Servo.h>
4
5const int SERVO_PIN = 18;            // PWM verebilen herhangi bir GPIO / any PWM-capable GPIO
6Servo teker;
7
8void setup() {
9  Serial.begin(115200);
10  teker.setPeriodHertz(50);          // standart servo frekansı / standard servo frequency
11  teker.attach(SERVO_PIN, 1000, 2000);
12  teker.writeMicroseconds(1500);     // dur / stop
13  delay(1000);
14}
15
16void loop() {
17  for (int us = 1500; us <= 2000; us += 25) {   // yavaşça hızlan / speed up gently
18    teker.writeMicroseconds(us);
19    Serial.println(us);
20    delay(200);
21  }
22  for (int us = 2000; us >= 1000; us -= 25) {   // yavaşla, dur, ters yöne hızlan / slow down, stop, reverse
23    teker.writeMicroseconds(us);
24    Serial.println(us);
25    delay(200);
26  }
27  teker.writeMicroseconds(1500);
28  delay(2000);
29}

FS90R с Raspberry Pi Pico и MicroPython

На Pico дополнительная библиотека не нужна: задай объекту machine.PWM частоту 50 Hz и укажи длительность импульса в наносекундах через duty_ns(). Функция hiz() в коде переводит значение от -100 до +100 в диапазон 1000–2000 мкс; достаточно вписать в строку DUR_US значение остановки, найденное при калибровке твоего сервопривода. При остановке программы через Ctrl+C сервопривод тоже останавливается; иначе PWM продолжает работать с последним значением, и колесо продолжает вращаться. Питай сервопривод от пина VBUS на Pico (5 V от USB). Если MicroPython тебе пока незнаком, сначала прочитай «Основы MicroPython».

MicroPython
1# Raspberry Pi Pico (MicroPython) + FS90R: hız -100 ... +100
2# Raspberry Pi Pico (MicroPython) + FS90R: speed -100 ... +100
3from machine import Pin, PWM
4import time
5
6servo = PWM(Pin(15))
7servo.freq(50)                        # 20 ms periyot / 20 ms period
8DUR_US = 1500                         # kalibrasyonla bulduğun durma noktası / your calibrated stop point
9
10def hiz(yuzde):
11    yuzde = max(-100, min(100, yuzde))
12    us = DUR_US + yuzde * 5           # -100 -> 1000 µs, +100 -> 2000 µs
13    servo.duty_ns(us * 1000)
14
15try:
16    while True:
17        for h in (50, 100, 0, -50, -100, 0):
18            hiz(h)
19            print("Hiz / speed:", h)
20            time.sleep(2)
21except KeyboardInterrupt:
22    hiz(0)                            # durdurunca teker dönmeye devam etmesin / stop the wheel on exit
23    servo.deinit()

Идеи проектов с сервоприводом на 360 градусов

  • Мини-робот, следующий по линии: Лёгкое шасси с двумя FS90R и двумя ИК-датчиками; принцип работы описан в статье «Робот, следующий по линии».
  • Робот, объезжающий препятствия: Добавь спереди HC-SR04, чтобы при обнаружении препятствия робот разворачивался на месте и менял направление.
  • Машинка с управлением с телефона: Отправляй команды с телефона через Bluetooth-модуль HC-05.
  • Кормушка для питомца: FS90R вращает шнек, и корм подаётся в заданное время по таймеру.
  • Поворотный столик: Очень медленно вращающаяся платформа для предметной съёмки или таймлапса; задавай скорость значениями, близкими к 1500 мкс.
  • Маленькая лебёдка или привод шторы: Наматывай лёгкий шнур, а два концевых выключателя по краям остановят мотор в нужном месте.

Частые проблемы и их решения

СимптомВероятная причинаРешение
Медленно вращается даже при write(90)Шкала по умолчанию выдаёт 1472 мкс или неверно настроен подстроечный резистор остановкиИспользуй attach(pin, 1000, 2000) или writeMicroseconds(1500), настрой подстроечный резистор
Сервопривод совсем не вращаетсяНеверный сигнальный пин, нет общей GND или это на самом деле позиционный сервоприводПроверь номер пина и соединение GND, убедись, что это сервопривод непрерывного вращения
Сервопривод дёргается, Arduino перезагружаетсяПитание от USB не справляется с пиками токаПитай сервоприводы от внешнего источника 5 V, соедини GND, добавь конденсатор 470 µF
При изменении импульса с 1000 мкс до 1200 мкс скорость почти не меняетсяУ краёв диапазона сервопривод уже работает на полной скорости; наступает насыщениеДля точной регулировки скорости используй диапазон 1500 ± 300 мкс
Робот не едет прямоУ двух сервоприводов разные скорости и точки остановкиОткалибруй каждый сервопривод отдельно, уменьши коэффициент более быстрого
Сервопривод греется и гудит, но не вращаетсяВал заблокирован или нагрузка слишком великаУбери препятствие, уменьши нагрузку; блокировка вала повреждает шестерни и мотор
Ошибка компиляции или нет сигнала на ESP32Используется библиотека Servo только для AVR или выбран GPIO 34–39Установи библиотеку ESP32Servo, выбери GPIO, который работает как выход

FS90R — самый простой способ управлять непрерывно вращающимся механизмом через один пин без драйвера мотора: он останавливается при 1500 мкс, вращается в обе стороны с нужной скоростью и служит готовым приводом колеса для маленьких роботов. Настрой точку остановки один раз и помни, что для задач с управлением положением нужен обычный сервопривод или шаговый двигатель, — тогда FS90R долго проработает без проблем. В приложении BlueGrays ты найдёшь основы работы с сервоприводами, управление сервоприводом через потенциометр и джойстик, создание сервопривода на 360 градусов из шагового двигателя и проекты роботов-машинок с пошаговыми схемами подключения и готовым кодом.

Частые вопросы

Как остановить сервопривод на 360 градусов?

Сервоприводы непрерывного вращения вроде FS90R останавливаются при импульсе 1500 мкс; на Arduino используй writeMicroseconds(1500) или write(90) после подключения через attach(pin, 1000, 2000). Если при этом значении он всё ещё медленно вращается, настрой маленький подстроечный резистор на корпусе отвёрткой или используй в коде значение, при котором твой сервопривод действительно останавливается.

Чем сервопривод на 360 градусов отличается от обычного?

Обычный сервопривод поворачивается на заданный сигналом угол и остаётся в этом положении, потому что внутренний потенциометр измеряет положение вала. У сервопривода непрерывного вращения на 360 градусов такой обратной связи нет; сигнал задаёт скорость и направление вместо угла, и сервопривод вращается неограниченно.

Можно ли управлять углом сервопривода на 360 градусов?

Нет. FS90R не знает положения своего вала, поэтому не может повернуться на заданный угол и остановиться. Вращение в течение заданного времени даёт приблизительный результат, который меняется с напряжением и нагрузкой. Если нужен заданный угол, используй обычный сервопривод, шаговый двигатель или мотор с энкодером.

При каком напряжении работает FS90R?

FS90R работает при 4,8–6 V; в проектах Arduino его обычно питают от 5 V. Сигнальная линия принимает уровни и 5 V, и 3,3 V, поэтому его можно напрямую использовать с ESP32 и Raspberry Pi Pico, но питание всё равно должно быть 5 V.

Сколько FS90R можно подключить к Arduino?

Библиотека Servo поддерживает до 12 сервоприводов на Arduino Uno, но реальное ограничение — ток. Каждый FS90R под нагрузкой может потреблять несколько сотен миллиампер, а при заторможенном валу — до 800 mA, поэтому больше двух сервоприводов обязательно питай от внешнего источника 5 V и соединяй GND.

Можно ли переделать SG90 в сервопривод на 360 градусов?

Да, но это необратимая переделка. Нужно открыть сервопривод, срезать механический упор на шестерне и отсоединить потенциометр от вала, заменив его двумя одинаковыми резисторами или зафиксировав в среднем положении. Результат работает как FS90R, но гарантия теряется, а сервопривод больше не сможет удерживать угол; купить готовый FS90R обычно проще.

Все проекты
Работа с сервоприводом
#35Новичок
Premium

Работа с сервоприводом

Рычаг маленького сервопривода по очереди поворачивается в три положения: до упора в начало, ровно на середину и до упора в конец, задерживаясь на каждой остановке на две секунды. Arduino сообщает мото

4.7(48)
67
Управление сервоприводом потенциометром
#36Новичок
Premium

Управление сервоприводом потенциометром

Когда ты поворачиваешь ручку потенциометра, рычаг сервопривода поворачивается вместе с ней: одно крайнее положение ручки — ноль градусов, другое — пол-оборота. Arduino всё время читает положение ручки

4.6(37)
52
Сервопривод на ESP32 (управление потенциометром)
#118Средний
Premium

Сервопривод на ESP32 (управление потенциометром)

В этом проекте сервопривод SG90 управляется потенциометром. Угол сервопривода задаётся сопоставлением аналогового значения потенциометра с диапазоном 0–180 градусов. Библиотека ESP32Servo формирует сигналы сервопривода на подходящих выходных пинах GPIO у ESP32; этот проект использует GPIO 18. Это базовый способ управления для роборук, подвесов камер и механизмов автоматических дверей.

4.3(29)
42
Управление сервоприводом джойстиком
#60Средний
Premium

Управление сервоприводом джойстиком

Управляй двумя моторами джойстиком, как будто поворачиваешь камеру наблюдения. Наклони рычажок влево или вправо, и нижний сервопривод медленно поворачивается, наклони вверх или вниз — верхний сервопри

4.7(42)
58
Сервопривод на 360 градусов из шагового мотора
#68Средний
Premium

Сервопривод на 360 градусов из шагового мотора

Научи обычный шаговый мотор вставать на любой нужный угол по всему кругу. Arduino вычисляет, сколько шагов нужно для каждого угла; мотор по очереди поворачивается на 0, 90, 45, 180, 135 и 360 градусов

4.5(22)
32
Машинка на L298N с управлением по Bluetooth
#80Продвинутый
Premium

Машинка на L298N с управлением по Bluetooth

Преврати телефон в пульт и управляй своей машинкой-роботом. Arduino получает команды из приложения-пульта на телефоне через Bluetooth-модуль и вращает колёса через драйвер моторов; машинка едет вперёд

5.0(38)
65
Робот, объезжающий препятствия
#81Продвинутый
Premium

Робот, объезжающий препятствия

Как насчёт того, чтобы собрать умную машину, которая сама находит дорогу? Робот, объезжающий препятствия, постоянно осматривает всё вокруг благодаря ультразвуковому датчику спереди. Встретив препятств

5.0(38)
49