L298n подключение к Arduino Uno

Тема в разделе "Arduino & Shields", создана пользователем Volt-Amper, 18 сен 2019.

  1. Volt-Amper

    Volt-Amper Нерд

    Здравствуйте уважаемые, подскажите куда в скетче прописывать движение 4 колёс, L298n рассчитан на 2 мотора, т.е. скетч получается пишется под два мотора. Сейчас у меня получается работает только вперёд, назад и стоп, в лево и вправо не двигается. Моторы начинают шуметь но движения нет.

    Вот код рабочей программы:
    Код (C++):
    #define ENA 7        // Включить обороты переднего правого двигателя
    #define ENB 8        // Включить обороты заднего правого двигателя
    #define IN1  11            // L298N in 1 Передний правый мотор
    #define IN2  10            // L298N in 2 Передний правый мотор
    #define IN3  9            // L298N in 3 Задний правый мотор
    #define IN4  6            // L298N in 4 Задний правый мотор
    int command;                   // Int to store app command state.
    int speedCar = 100;         // 50 - 255.
    int speed_Coeff = 4;
    void setup()
    {
          pinMode(ENA, OUTPUT);
          pinMode(ENB, OUTPUT);
        pinMode(IN1, OUTPUT);
        pinMode(IN2, OUTPUT);
        pinMode(IN3, OUTPUT);
        pinMode(IN4, OUTPUT);
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
        Serial.begin(9600);
      }
    void goAhead(){
          digitalWrite(IN1, HIGH);
          digitalWrite(IN2, LOW);
            analogWrite(ENA, speedCar);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, HIGH);
            analogWrite(ENB, speedCar);
      }
    void goBack(){
          digitalWrite(IN1, LOW);
          digitalWrite(IN2, HIGH);
            analogWrite(ENA, speedCar);
          digitalWrite(IN3, HIGH);
          digitalWrite(IN4, LOW);
            analogWrite(ENB, speedCar);
      }
    void goRight(){
          digitalWrite(IN1, LOW);
          digitalWrite(IN2, HIGH);
            analogWrite(ENA, speedCar);
          digitalWrite(IN3, HIGH);
          digitalWrite(IN4, LOW);
            analogWrite(ENB, speedCar);
      }
    void goLeft(){
          digitalWrite(IN1, HIGH);
          digitalWrite(IN2, LOW);
            analogWrite(ENA, speedCar);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, HIGH);
            analogWrite(ENB, speedCar);
       
      }
    void goAheadRight(){
     
          digitalWrite(IN1, HIGH);
          digitalWrite(IN2, LOW);
          analogWrite(ENA, speedCar/speed_Coeff);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, HIGH);
          analogWrite(ENB, speedCar/speed_Coeff);
      }
    void goAheadLeft(){
     
          digitalWrite(IN1, HIGH);
          digitalWrite(IN2, LOW);
          analogWrite(ENA, speedCar);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, HIGH);
          analogWrite(ENB, speedCar);
      }
    void goBackRight(){
          digitalWrite(IN1, LOW);
          digitalWrite(IN2, HIGH);
          analogWrite(ENA, speedCar/speed_Coeff);
          digitalWrite(IN3, HIGH);
          digitalWrite(IN4, LOW);
          analogWrite(ENB, speedCar/speed_Coeff);
      }
    void goBackLeft(){
          digitalWrite(IN1, LOW);
          digitalWrite(IN2, HIGH);
          analogWrite(ENA, speedCar);
          digitalWrite(IN3, HIGH);
          digitalWrite(IN4, LOW);
          analogWrite(ENB, speedCar);
      }
    void stopRobot(){
          digitalWrite(IN1, LOW);
          digitalWrite(IN2, LOW);
            analogWrite(ENA, speedCar);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, LOW);
            analogWrite(ENB, speedCar);
      }
    void loop(){
    if (Serial.available() > 0) {
        command = Serial.read();
    switch (command) {
    case 'F':goAhead();break;
    case 'B':goBack();break;
    case 'L':goLeft();break;
    case 'R':goRight();break;
    case 'I':goAheadRight();break;
    case 'G':goAheadLeft();break;
    case 'J':goBackRight();break;
    case 'H':goBackLeft();break;
    case '0':speedCar = 100;break;
    case '1':speedCar = 120;break;
    case '2':speedCar = 135;break;
    case '3':speedCar = 155;break;
    case '4':speedCar = 170;break;
    case '5':speedCar = 185;break;
    case '6':speedCar = 195;break;
    case '7':speedCar = 215;break;
    case '8':speedCar = 235;break;
    case '9':speedCar = 255;break;
    case 'S':stopRobot();break;
    }
    }
    }
     

    Вложения:

  2. NikitOS

    NikitOS Король шутов Администратор

    Hi!
    А почему у Вас движение назад и вправо, это одно и то же?

    По сути, движение вперёд: HIGH+LOW, HIGH+LOW
    Назад: LOW+HIGH, LOW+HIGH
    Вараво: HIGH+LOW, LOW+HIGH
    Влево: LOW+HIGH, HIGH+LOW
     
  3. Volt-Amper

    Volt-Amper Нерд

    Или нужно ещё один L298n подключать к Uno? Но тогда все цифровые пины будут заняты, ничего больше не подключишь
     
  4. Volt-Amper

    Volt-Amper Нерд

    Этот скетч для двух драйверов моторов, но я для себя просто скопипастил и изменил немного функции. Надо попробовать за комментировать каждую строчку. Ведь коммент не занимает места во внутренней памяти Arduino?
     
  5. Volt-Amper

    Volt-Amper Нерд

    Код (C++):
    case '0':speedCar = 100;break;
    case '1':speedCar = 120;break;
    case '2':speedCar = 135;break;
    case '3':speedCar = 155;break;
    case '4':speedCar = 170;break;
    case '5':speedCar = 185;break;
    case '6':speedCar = 195;break;
    case '7':speedCar = 215;break;
    case '8':speedCar = 235;break;
    case '9':speedCar = 255;break;
    case 'S':stopRobot();break;
    }
    }
    }
    Никак не пойму что это за цифры от 0...9, это скорее всего ползунок скорости?
     
  6. Volt-Amper

    Volt-Amper Нерд

    И не пойму, почему в создании программы MIT App Inventor дублируются "блоки" с привязкой к конкретной кнопке?
     

    Вложения:

  7. NikitOS

    NikitOS Король шутов Администратор

    При изменении схемы, нужно менять и скетч.
    Нет, комментарии не занимают место
    Скорее всего, скетч для приложения Arduino Bluetooth RC Car, так что да, это склроско
    А вот это уже не епархия
     
    Volt-Amper нравится это.
  8. Volt-Amper

    Volt-Amper Нерд

    Этот скетч для Arduino Uno в связке с Nodemcu. А приложение я для себя сам настроил, ненужные блоки удалил, осталось правильно скетч написать, попробую закоментировать строчки которые непонятны, чтобы наглядно видеть куда и что вписывается.
     
  9. Volt-Amper

    Volt-Amper Нерд

    Понял почему, на каждую кнопку движения робота, должна быть остановочная функция, т.е. кпопка стоп(квадрат) привязывается ко всем кнопкам, для того чтобы робот мог остановится когда я ничего не жму, а если не остановился робот, то принудительно нажимается кнопка стоп.
     
  10. Volt-Amper

    Volt-Amper Нерд

    Код (C++):
    #define ENA 7        // Включить обороты переднего правого двигателя
    #define ENB 8        // Включить обороты заднего правого двигателя
    #define IN1  11            // L298N in 1 Передний правый мотор
    #define IN2  10            // L298N in 2 Передний правый мотор
    #define IN3  9            // L298N in 3 Задний правый мотор
    #define IN4  6            // L298N in 4 Задний правый мотор
    int command;                   // Int to store app command state.
    int speedCar = 100;         // 50 - 255.
    int speed_Coeff = 4;
    void setup()
    {
          pinMode(ENA, OUTPUT);
          pinMode(ENB, OUTPUT);
        pinMode(IN1, OUTPUT);
        pinMode(IN2, OUTPUT);
        pinMode(IN3, OUTPUT);
        pinMode(IN4, OUTPUT);
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
        Serial.begin(9600);
     
    Вот эту часть кода я не трогаю, она остаётся без изменений?
     
  11. NikitOS

    NikitOS Король шутов Администратор

    Да, это менять не нужно.
     
    Volt-Amper нравится это.
  12. Volt-Amper

    Volt-Amper Нерд

    Не пойму как схематично вывод OUT связан с выводов IN, и какие получаются моторы, это то что подписано на драйвер моторов соответствуют выводы:
    OUT1 >> IN1
    OUT2 >> IN2
    OUT3 >> IN3
    OUT4 >> IN4

    Или как-то по другому, нужно определить какой мотор к какому выводу IN относится.
     

    Вложения:

    • 76415.gif
      76415.gif
      Размер файла:
      37,8 КБ
      Просмотров:
      391
  13. NikitOS

    NikitOS Король шутов Администратор

    Должно быть так
     
    Volt-Amper нравится это.
  14. Volt-Amper

    Volt-Amper Нерд

    Но я все равно не пойму порядок подключения IN, к какому мотору IN подключается
     
  15. issaom

    issaom Гуру

    А скиньте ссылку на сам модуль.... ?
     
  16. Volt-Amper

    Volt-Amper Нерд

    Вот вся схема подключения, но к этой схеме я ещё добавил NodeMCU. Подключение NODEMCU к Arduino Uno такое: RX>>TX; TX>>RX; Vin>>Vin; GND>>GND. Не знаю как в скетче подключить SR-04+Servo. Прописал все сто нужно в void setup и в vode loop, работает только Servo, а все остальное не работает, даже 4 колеса, не понимаю вообще принцип алгоритма последовательности.
     

    Вложения:

  17. Volt-Amper

    Volt-Amper Нерд

    Какая должна быть последовательность действий алгоритма? Сначала крутятся колеса, потом включается серво-привод, потом дальномер?
     
  18. NikitOS

    NikitOS Король шутов Администратор

    Ну это уже в гугл :D
     
  19. Volt-Amper

    Volt-Amper Нерд

    Да я бы новичку тоже так же ответил, если бы не знал ответа на вопрос, а в другом случае разобрал код.

    Если вписывать к примеру серво, выше строк кода двигателей, то только серво работает,а колеса не крутятся.
     
  20. issaom

    issaom Гуру

    Разобрать код можно для не сложного устройства - то что собираете Вы таковым не является.....
     
    Volt-Amper нравится это.