Top.Mail.Ru
Ответы

Помогите с мотором, ардуино

Нужно, чтобы при нажатии на кнопку, коллекторный мотор крутился только определенное время, например, 5 секунд, при повторном нажатии, крутился в обратную сторону такое же время

По дате
По рейтингу
Аватар пользователя
Мыслитель

Конечно, я помогу вам с этим проектом! Для этой задачи нам понадобятся:

Arduino
Кнопка
Коллекторный мотор
Н-мост (например, L298N или L293D) для управления направлением вращения мотора
Ниже приведен пример кода для реализации этой задачи. Он предполагает использование одного входа для кнопки, одного выхода для управления направлением и одного выхода для управления питанием мотора.

Схема подключения
Подключите один вывод кнопки к цифровому пину Arduino (например, D2) и другой вывод к GND.
Подключите выводы мотора к выходам Н-моста.
Подключите входы Н-моста к цифровым пинам Arduino (например, D3 и D4 для управления направлением, D5 для включения питания мотора).
Подключите питание Н-моста и мотора к внешнему источнику питания.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
 // Определяем пины 
const int buttonPin = 2;  // Пин для кнопки 
const int motorPin1 = 3;  // Пин для управления направлением мотора (прямое направление) 
const int motorPin2 = 4;  // Пин для управления направлением мотора (обратное направление) 
const int enablePin = 5;  // Пин для включения мотора 
 
int buttonState = 0;  // Переменная для хранения состояния кнопки 
int motorDirection = 1;  // Переменная для хранения направления вращения (1 - вперед, -1 - назад) 
unsigned long previousMillis = 0;  // Переменная для хранения времени начала работы мотора 
const unsigned long motorRunTime = 5000;  // Время работы мотора (в миллисекундах) 
 
void setup() { 
  // Настраиваем пины 
  pinMode(buttonPin, INPUT); 
  pinMode(motorPin1, OUTPUT); 
  pinMode(motorPin2, OUTPUT); 
  pinMode(enablePin, OUTPUT); 
 
  // Инициализируем мотор выключенным 
  digitalWrite(enablePin, LOW); 
} 
 
void loop() { 
  // Читаем состояние кнопки 
  buttonState = digitalRead(buttonPin); 
 
  if (buttonState == HIGH) { 
    // Если кнопка нажата, начинаем вращение мотора 
    previousMillis = millis();  // Запоминаем время начала работы мотора 
    if (motorDirection == 1) { 
      // Вращение вперед 
      digitalWrite(motorPin1, HIGH); 
      digitalWrite(motorPin2, LOW); 
    } else { 
      // Вращение назад 
      digitalWrite(motorPin1, LOW); 
      digitalWrite(motorPin2, HIGH); 
    } 
    digitalWrite(enablePin, HIGH);  // Включаем мотор 
 
    // Ждем окончания времени работы мотора 
    while (millis() - previousMillis < motorRunTime) { 
      // Ничего не делаем, ждем 
    } 
 
    // Останавливаем мотор 
    digitalWrite(enablePin, LOW); 
 
    // Меняем направление вращения на противоположное 
    motorDirection = -motorDirection; 
 
    // Ждем, пока кнопка будет отпущена, чтобы избежать многократных срабатываний 
    while (digitalRead(buttonPin) == HIGH) { 
      // Ничего не делаем, ждем 
    } 
  } 
}  

Объяснение кода
В функции setup() мы настраиваем пины для кнопки, управления мотором и включения мотора.
В функции loop() мы постоянно проверяем состояние кнопки.
Если кнопка нажата, мы запоминаем текущее время и начинаем вращение мотора в текущем направлении.
Мотор вращается в течение заданного времени (5 секунд), после чего останавливается.
Мы меняем направление вращения на противоположное и ждем, пока кнопка будет отпущена, чтобы избежать многократных срабатываний.
Этот код можно доработать в зависимости от конкретных требований и условий вашего проекта.