R2-D2 & RzhakaBoss
Ты видел, как бот танцует на ТикТоке? Давай я покажу, как запрограммировать движуху в стиле R2-D2, которая точно станет вирусной ещё до того, как все остальные догадаются.
Поставь на то, что твои подписчики обалдеют – я сейчас заставлю этого R2-дроида танцевать под код, такого ещё никто не видел, алгоритмы от зависти покраснеют.
Вот такой код я бы с удовольствием посмотрел. Просто следи, чтобы всё плавно работало, светодиоды синхронизированы – и не перегревай плату, понял?
Вот упрощённый скетч, который ты просто можешь вставить в Arduino IDE. Он обеспечивает плавное вращение мотора с небольшой кривой ускорения, синхронизирует светодиодную ленту и проверяет терморезистор, чтобы не спалить плату.
// ---- Пара контактов ----
const int motorA = 9; // Вход ШИМ для драйвера мотора
const int motorB = 10; // Вход ШИМ для драйвера мотора
const int ledStrip = 6; // Светодиодная лента ШИМ
const int tempPin = A0; // Аналоговый контакт терморезистора
// ---- Константы ----
const int maxSpeed = 255; // Максимальный ШИМ
const int minSpeed = 20; // Минимальная безопасная скорость
const int tempThresh = 70; // 70 °C — начало снижения мощности
const int delayMs = 10; // Задержка цикла
// ---- Помощник для плавного изменения скорости ----
int smoothSpeed(int target) {
static int current = 0;
if (current < target) current += 5;
else if (current > target) current -= 5;
return constrain(current, minSpeed, maxSpeed);
}
// ---- Синхронизация светодиодной ленты ----
void ledSync(int speed) {
// Преобразование скорости (20-255) в яркость (0-255)
int bright = map(speed, minSpeed, maxSpeed, 0, 255);
analogWrite(ledStrip, bright);
}
// ---- Проверка температуры ----
bool safeToRun() {
int raw = analogRead(tempPin);
float voltage = raw * (5.0 / 1023.0);
float tempC = (voltage * 100.0); // Приблизительная шкала 10 мВ/°C
return tempC < tempThresh;
}
void setup() {
pinMode(motorA, OUTPUT);
pinMode(motorB, OUTPUT);
pinMode(ledStrip, OUTPUT);
pinMode(tempPin, INPUT);
Serial.begin(9600);
}
void loop() {
if (!safeToRun()) {
// Снижаем скорость до минимума для охлаждения
analogWrite(motorA, minSpeed);
analogWrite(motorB, minSpeed);
Serial.println("Троттлинг: перегрев");
delay(1000);
return;
}
// Пример танца: вращение вперед, назад, вращение на месте
for (int i = 0; i < 5; i++) { // 5 быстрых оборотов
int speed = smoothSpeed(maxSpeed); // Плавно увеличиваем
analogWrite(motorA, speed);
analogWrite(motorB, 0);
ledSync(speed);
delay(delayMs);
}
for (int i = 0; i < 5; i++) { // 5 оборотов назад
int speed = smoothSpeed(maxSpeed);
analogWrite(motorA, 0);
analogWrite(motorB, speed);
ledSync(speed);
delay(delayMs);
}
// Замираем на долю такта
analogWrite(motorA, 0);
analogWrite(motorB, 0);
analogWrite(ledStrip, 0);
delay(200);
}
Просто подключи трехфазный драйвер или двойной H-мост, вставь WS2812 ленту или любой светодиод ШИМ и нажми "загрузить". Код сделает все остальное — плавное вращение, синхронизированное световое шоу и небольшую проверку температуры, чтобы твоя плата не перегрелась. Наслаждайся танцем!
Выглядит надежно – только проверь подачу питания, чтобы не перегрелся H-мост. Запусти и пусть светодиоды всё расскажут!
Ты всё делаешь как надо – только убедись, что у тебя мощная 12-вольтовая шина, конденсатор развязки на каждом входе H-моста и кулер для охлаждения. Запусти её, смотри, как светодиоды раскрашивают комнату, и дай толпе разойтись. Если плата начнёт перегреваться, просто сбрось питание и дай ей остыть. Удачи!