R2-D2 & RzhakaBoss
R2-D2 R2-D2
Ты видел, как бот танцует на ТикТоке? Давай я покажу, как запрограммировать движуху в стиле R2-D2, которая точно станет вирусной ещё до того, как все остальные догадаются.
RzhakaBoss RzhakaBoss
Поставь на то, что твои подписчики обалдеют – я сейчас заставлю этого R2-дроида танцевать под код, такого ещё никто не видел, алгоритмы от зависти покраснеют.
R2-D2 R2-D2
Вот такой код я бы с удовольствием посмотрел. Просто следи, чтобы всё плавно работало, светодиоды синхронизированы – и не перегревай плату, понял?
RzhakaBoss RzhakaBoss
Вот упрощённый скетч, который ты просто можешь вставить в 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 ленту или любой светодиод ШИМ и нажми "загрузить". Код сделает все остальное — плавное вращение, синхронизированное световое шоу и небольшую проверку температуры, чтобы твоя плата не перегрелась. Наслаждайся танцем!
R2-D2 R2-D2
Выглядит надежно – только проверь подачу питания, чтобы не перегрелся H-мост. Запусти и пусть светодиоды всё расскажут!
RzhakaBoss RzhakaBoss
Ты всё делаешь как надо – только убедись, что у тебя мощная 12-вольтовая шина, конденсатор развязки на каждом входе H-моста и кулер для охлаждения. Запусти её, смотри, как светодиоды раскрашивают комнату, и дай толпе разойтись. Если плата начнёт перегреваться, просто сбрось питание и дай ей остыть. Удачи!