Сервомотор SG90 с памятью на SD-карте Arduino
Сервомотор SG90 с записью траектории на SD-карту — отличный проект для создания повторяемых движений в робототехнике, ЧПУ-станках или панорамных камерах. В этом уроке своими руками мы подключим два сервомотора SG90 к Arduino, запишем углы поворота с потенциометров на microSD-карту и воспроизведём сохранённые движения автономно.
Возможности проекта
- Запись углов двух сервомоторов с потенциометров
- Сохранение траектории на microSD-карту
- Автономное воспроизведение движений
- Лёгкое расширение до 12 сервомоторов (на Uno)
- Создание роботов, манипуляторов, панорамных систем
Необходимые компоненты
- Arduino Uno / Nano
- 2 сервомотора SG90
- 2 потенциометра 10 кОм
- Модуль microSD-карты
- microSD-карта (FAT16/FAT32)
- Макетная плата и провода
Схема подключения
Потенциометры:
- Крайние выводы → 5V и GND
- Средний → A0 и A1
Сервомоторы SG90:
- Красный → 5V
- Коричневый → GND
- Оранжевый → D9 и D10
Модуль microSD:
- CS → D4
- SCK → D13
- MOSI → D11
- MISO → D12
- VCC → 5V, GND → GND
Запись траектории (скетч 1)
#include <SPI.h>
#include <SD.h>
#include <Servo.h>
Servo servo1, servo2;
File dataFile;
void setup() {
Serial.begin(9600);
if (!SD.begin(4)) {
Serial.println("SD error!");
return;
}
dataFile = SD.open("traj.txt", FILE_WRITE);
}
void loop() {
int pot1 = analogRead(A0);
int pot2 = analogRead(A1);
int angle1 = map(pot1, 0, 1023, 0, 180);
int angle2 = map(pot2, 0, 1023, 0, 180);
servo1.write(angle1);
servo2.write(angle2);
if (dataFile) {
dataFile.println(String(angle1) + "," + String(angle2));
Serial.println(String(angle1) + "," + String(angle2));
}
delay(100); // частота записи
}
считывает два потенциометра на A0 и A1.
преобразует значения в углы 0–180°.
управляет двумя сервоприводами в реальном времени.
записывает текущие углы в файл traj.txt на SD-карту каждые 100 мс.
Воспроизведение (скетч 2)
#include <SPI.h>
#include <SD.h>
#include <Servo.h>
Servo servo1, servo2;
File dataFile;
void setup() {
servo1.attach(9);
servo2.attach(10);
if (!SD.begin(4)) return;
dataFile = SD.open("traj.txt");
}
void loop() {
if (dataFile.available()) {
String line = dataFile.readStringUntil('\n');
int comma = line.indexOf(',');
int angle1 = line.substring(0, comma).toInt();
int angle2 = line.substring(comma+1).toInt();
servo1.write(angle1);
servo2.write(angle2);
delay(100);
} else {
dataFile.seek(0); // повтор с начала
}
}
читает файл traj.txt с SD-карты построчно.
парсит углы из строк вида «angle1,angle2».
устанавливает их на два сервопривода (пины 9 и 10).
после конца файла возвращается в начало и повторяет воспроизведение.
Заключение
Проект позволяет создавать сложные повторяемые движения без постоянного управления. Идеален для анимации, роботов-манипуляторов, панорамного видеонаблюдения и простых ЧПУ-систем.
FAQ — Сервомотор SG90 с памятью
Сколько сервомоторов можно подключить?
До 12 на Arduino Uno (библиотека Servo), до 48 с Servo.h на Mega.
Можно ли сгладить рывки при воспроизведении?
Да, уменьшите delay() до 20–50 мс и записывайте чаще.
Как питать мощные сервомоторы?
Отдельный источник 5–6В, общая земля с Arduino.
Формат SD-карты важен?
Да, только FAT16 или FAT32. Имя файла в формате 8.3 (traj.txt).
Можно записать больше двух серв?
Да, добавьте потенциометры и углы в строку через запятую.
Как редактировать траекторию вручную?
Откройте файл traj.txt в блокноте — углы через запятую, по строке на шаг.
Работает ли с другими сервомоторами?
Да, любые с углом 0–180° (MG996R, MG90S и др.).