Модуль драйвера двигателей MX1508 (L298N)

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#1 Дим » 5 августа 2019, 21:51

Так как скоро понадобится подключать центральный замок, он же активатор замка двери, он же соленоид, он же втягивающее реле, он же актуатор ... Она же Анна Федоренко... Она же Элла Кацнельбоген... Она же Людмила Огуренкова... Она же... Она же Изольда Меньшова... она же Валентина Панеят. тьфу, это не от сюда :grin:
активатор замка двери.jpg
активатор замка двери
активатор замка двери.jpg (22.14 КБ) 1212 просмотров

решил использовать для этой цели модуль драйвера двигателей MX1508 (L298N)
модуль драйвера двигателей L298N.jpg
модуль драйвера двигателей L298N
модуль драйвера двигателей L298N.jpg (68.68 КБ) 1212 просмотров

С помощью его можно управлять от 1 до 4 двигателями. Я буду двигать замок только в одну сторону, а обратно будет толкать пружина. Подключив по вышеуказанной схеме, можно включать или выключать 2 мотора. Вот "программа" которая подаст на оба двигателя плюс, и они начнут вращаться.

Код: Выделить всё

int IN3 = 5; 
int IN4 
= 4;

void setup()
{
  pinMode (IN4, OUTPUT);
  pinMode (IN3, OUTPUT);
}
void loop()
{
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, HIGH); 

Более детально описано тут _http://zelectro.cc/Motor_shield_L298N_Arduino
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#2 Дим » 6 августа 2019, 22:19

На основе этой обработки кнопок Arduino, наваял не большой скетч. При нажатии на кнопку центральный замок перемещается в одну сторону (определённое количество времени), так же при повторном нажатии в другую.
схема подключения модуля драйвера двигателей L298N.JPG
схема подключения модуля драйвера двигателей L298N
схема подключения модуля драйвера двигателей L298N.JPG (204.65 КБ) 1196 просмотров

Код: Выделить всё

#define PIN_BUTTON 2

bool     button_state      = false;
bool     button_auto_state = false;
uint32_t ms_button         = 0;
uint32_t ms_auto_click     = 0;
int INA1 = 4;                          // A1 подключен к выводу 4 
int INA2 = 5;                          // A2 подключен к выводу 5 
int knopka=0;
void setup()
{
    pinMode (INA1, OUTPUT);
    pinMode (INA2, OUTPUT);
    Serial.begin(115200);
    Serial.println("Test button ...");
    pinMode(PIN_BUTTON, INPUT_PULLUP);    
}

void loop(){
   uint32_t ms    = millis();
   bool pin_state = digitalRead(PIN_BUTTON);
// Фиксируем нажатие кнопки   
   if( pin_state  == LOW && !button_state && ( ms - ms_button ) > 50 ){
      button_state      = true;
      button_auto_state = false;  
      ms_button         
= ms;
      if( knopka  == 0 ){
        Serial.println("Press key"); 
        digitalWrite 
(INA2, HIGH);     // На пару выводов "IN" поданы РАЗНОименные сигналы, мотор вращается  
        digitalWrite (INA1, LOW); 
        delay
(200);                   // время вращаения мотора 
        digitalWrite (INA2, LOW);      // На пару выводов "IN" поданы ОДНОименные сигналы, мотор не вращается 
        knopka=1;                     // значит уже включали мотор в одну сторону
        return;
  }

  if( knopka  == 1 ){
      Serial.println("Press key");
      digitalWrite (INA1, HIGH);       // На пару выводов "IN" поданы РАЗНОименные (и уже противоположные относительно первого случая) сигналы, мотор вращается в другую сторону
      delay(200);                     // время вращаения мотора
      digitalWrite (INA1, LOW);        // Снова на выводах "IN" появились одноименные сигналы, мотор не вращается 
      knopka=0;   
  
}
  
   
}/*
// После 2000 мс нажатия кнопки каждые 500 мс фиксируем событие нажатия  
   if( pin_state  == LOW && ( ms - ms_button ) > 2000 && ( ms - ms_auto_click )>500 ){
      button_auto_state = true;
      ms_auto_click     = ms;
      Serial.println("Auto press key");    
   }*/
// Фиксируем отпускание кнопки   
   if( pin_state == HIGH && button_state && ( ms - ms_button ) > 50  ){
      button_state      = false;   
      ms_button         
= ms;
      if( !button_auto_state )Serial.println("No press key");
   }
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Аппаратная часть»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость