Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Автоматическое управление модельной железной дорогой на Arduino — DIY-контроллер поезда

Компоненты и материалы

Компонент Количество
Arduino UNO (или Nano, Mega — любая плата) 1
Драйвер мотора L298N (модуль с двойным H-мостом) 1
Провода-перемычки 1 комплект

ПО

О проекте

Простой и надежный автомат для модельной ЖД. Задает расписание движения: разгон, остановка, разворот, повтор. Все параметры меняются в скетче — не требует перепрошивки «на лету», просто правите константы и загружаете.

Подходит для любой шкалы (N, HO, O и др.), если двигатель токосовместим с L298N (до 2А на канал).

Схема подключения

Автоматическое управление модельной железной дорогой на Arduino — DIY-контроллер поезда
Автоматическое управление модельной железной дорогой на Arduino — DIY-контроллер поезда

Соединения:

Алгоритм работы (расписание в коде)

Расписание задается переменной 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);
  }
}

Доработки и идеи

Простой старт для автоматизации вашей макетки. Welcome aboard!

Производственный процесс

  1. Управляющие цепи: основы, применение и лучшие практики
  2. Автоматизированная система наполнения и мониторинга бассейна
  3. Сверлочная работа (benchwork): определение, применение, преимущества
  4. Понимание контроля качества: обеспечение стабильного совершенства
  5. Автоматические прессовые станки: принцип работы, преимущества и применение
  6. Автоматические кованые прессы: особенности, преимущества и применение
  7. Автоматические трубогибоны: функции, преимущества и применение
  8. Автоматические вращательные столы: точность и эффективность в металлообработке
  9. Автоматическая коробка передач: полное руководство — виды, узлы, принцип работы
  10. Автоматические системы смазки (ALS): принципы, виды, компоненты и преимущества