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

Что такое сервопривод на 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, оранжевый — сигнал |
Подключение FS90R: Arduino Uno, ESP32 и Pico
| Провод сервопривода | Назначение | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| Коричневый | GND | GND | GND | GND |
| Красный | Питание 4,8–6 V | 5V (один сервопривод) или внешние 5 V | VIN / 5V или внешние 5 V | VBUS (5 V) или внешние 5 V |
| Оранжевый | Сигнал PWM | D9 | GPIO 18 | GP15 |
Пина 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) | Полная скорость, против часовой стрелки |
Первый скетч: вперёд, стоп, назад
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», а управление углом обычных сервоприводов — в статье «Что такое сервопривод».
Настройка подстроечного резистора остановки (центра)
- Загрузи приведённый ниже калибровочный скетч; сервопривод получает сигнал 1500 мкс и в норме должен остановиться.
- Если сервопривод медленно вращается, найди маленькое отверстие сбоку корпуса рядом с выходом кабеля; внутри находится подстроечный резистор, задающий точку остановки.
- Немного поверни подстроечный резистор маленькой плоской или крестовой отвёрткой; если сервопривод замедляется, направление верное.
- Продолжай поворачивать понемногу, пока сервопривод полностью не остановится и не исчезнет даже слабый гул. Подстроечный резистор очень чувствительный; даже четверть оборота — слишком много.
- Если не хочется трогать подстроечный резистор, отправляй + и - из монитора порта, чтобы найти длительность импульса, при которой сервопривод останавливается, и используй это значение вместо 1500 в коде.
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}Управление скоростью и направлением с помощью потенциометра
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 м/с.
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 с ESP32
Библиотека Servo для Arduino не работает на ESP32; вместо неё установи ESP32Servo через «Менеджер библиотек» (Library Manager). Использование почти такое же, но частоту 50 Hz нужно явно задать через setPeriodHertz(50). Для сигнала подойдёт почти любой GPIO с выходом PWM; исключение — GPIO 34–39, которые работают только как входы. Красный провод сервопривода подключи к пину VIN (USB 5 V) на ESP32 или внешнему источнику 5 V, а не к пину 3V3. Код ниже плавно разгоняет сервопривод от остановки до полной скорости, затем замедляет его и меняет направление; монитор порта показывает длительность импульса на каждом шаге.
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».
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 обычно проще.
Что собрать после прочтения
Все проекты
Работа с сервоприводом
Рычаг маленького сервопривода по очереди поворачивается в три положения: до упора в начало, ровно на середину и до упора в конец, задерживаясь на каждой остановке на две секунды. Arduino сообщает мото

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

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

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

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

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

Робот, объезжающий препятствия
Как насчёт того, чтобы собрать умную машину, которая сама находит дорогу? Робот, объезжающий препятствия, постоянно осматривает всё вокруг благодаря ультразвуковому датчику спереди. Встретив препятств
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

