Автоматическое управление модельной железной дорогой на Arduino — DIY-контроллер поезда
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO (или Nano, Mega — любая плата) | 1 |
| Драйвер мотора L298N (модуль с двойным H-мостом) | 1 |
| Провода-перемычки | 1 комплект |
ПО
- Arduino IDE
О проекте
Простой и надежный автомат для модельной ЖД. Задает расписание движения: разгон, остановка, разворот, повтор. Все параметры меняются в скетче — не требует перепрошивки «на лету», просто правите константы и загружаете.
Подходит для любой шкалы (N, HO, O и др.), если двигатель токосовместим с L298N (до 2А на канал).
Схема подключения
Соединения:
- L298N ENA (PWM) → Arduino D5
- L298N IN1 → Arduino D6
- L298N IN2 → Arduino D7
- Мотор → OUT1/OUT2 L298N
- Питание мотора → VIN/GND L298N (7–35В)
- Arduino питание от 5V L298N (есть на борту) или отдельно
Алгоритм работы (расписание в коде)
Расписание задается переменной counterScheduler (секунды от старта) и проверяется в loop() каждую секунду:
// 1 | 0–5 сек: разгон
if (counterScheduler <= 5) { ... }
// 2 | 10–15 сек: торможение и остановка
if (counterScheduler >= 10 && counterScheduler <= 15) { ... }
// 3 | 16 сек: смена направления (IN1/IN2 переключаются)
if (counterScheduler == 16) { ... }
// 4 | 20–30 сек: разгон в обратную сторону
if (counterScheduler >= 20 && counterScheduler <= 30) { ... }
// 5 | 31–40 сек: остановка
if (counterScheduler >= 31 && counterScheduler <= 40) { ... }
// 6 | >40 сек: сброс таймера, возврат к п.1
if (counterScheduler > 40) { counterScheduler = 0; ... }
Параметры движения
int brakingDelta = 5; // Шаг уменьшения ШИМ при торможении
int accelerateDelta = 6; // Шаг увеличения ШИМ при разгоне
// ШИМ 0–255, остановка при скорости < 30
Настройте дельты под ваш локомотив: тяжелые поезда — меньше ускорение, более плавный старт.
Полный код (Swing.ino)
#define L298_ENA 5
#define L298_IN1 6
#define L298_IN2 7
int counterScheduler = 0;
unsigned long timerScheduler = 0;
unsigned long timerLocal = 0;
byte speedAuto = 0;
void setup() {
pinMode(L298_ENA, OUTPUT);
pinMode(L298_IN1, OUTPUT);
pinMode(L298_IN2, OUTPUT);
// Направление по умолчанию: вперед
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
}
void loop() {
// Тикаем счетчиком каждую секунду
if (millis() > (timerScheduler + 1000)) {
counterScheduler++;
timerScheduler = millis();
}
// 1. Разгон 0-5 сек
if (counterScheduler <= 5) {
if (millis() > (timerLocal + 100)) {
if (speedAuto < 240) speedAuto += accelerateDelta; else speedAuto = 255;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 2. Торможение 10-15 сек
if (counterScheduler >= 10 && counterScheduler <= 15) {
if (millis() > (timerLocal + 100)) {
if (speedAuto > 30) speedAuto -= brakingDelta; else speedAuto = 0;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 3. Разворот на 16 сек
if (counterScheduler == 16) {
digitalWrite(L298_IN1, LOW);
digitalWrite(L298_IN2, HIGH);
}
// 4. Разгон назад 20-30 сек
if (counterScheduler >= 20 && counterScheduler <= 30) {
if (millis() > (timerLocal + 100)) {
if (speedAuto < 240) speedAuto += accelerateDelta; else speedAuto = 255;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 5. Торможение 31-40 сек
if (counterScheduler >= 31 && counterScheduler <= 40) {
if (millis() > (timerLocal + 100)) {
if (speedAuto > 30) speedAuto -= brakingDelta; else speedAuto = 0;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 6. Цикл повторяется
if (counterScheduler > 40) {
counterScheduler = 0;
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
}
}
Доработки и идеи
- Добавить датчики положения (рефлективные/магнитные) для точной остановки на платформах.
- Реализовать несколько поездов на одной voies с блок-системой.
- Управление через Bluetooth/WiFi (мобильное приложение).
- Звуковые эффекты (свисток, гудок) через DFPlayer Mini.
- Плавное управление на базе PID для реалистичного разгона.
Простой старт для автоматизации вашей макетки. Welcome aboard!
Производственный процесс
- Управляющие цепи: основы, применение и лучшие практики
- Автоматизированная система наполнения и мониторинга бассейна
- Сверлочная работа (benchwork): определение, применение, преимущества
- Понимание контроля качества: обеспечение стабильного совершенства
- Автоматические прессовые станки: принцип работы, преимущества и применение
- Автоматические кованые прессы: особенности, преимущества и применение
- Автоматические трубогибоны: функции, преимущества и применение
- Автоматические вращательные столы: точность и эффективность в металлообработке
- Автоматическая коробка передач: полное руководство — виды, узлы, принцип работы
- Автоматические системы смазки (ALS): принципы, виды, компоненты и преимущества