• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

NodeMCU Robot Car

Volt-Amper

New member
Код:
#define IN_1  16          // L298N in1 motors Right           GPIO16(D0)
#define IN_2  5           // L298N in2 motors Right           GPIO5(D1)
#define IN_3  14          // L298N in3 motors Left            GPIO14(D5)
#define IN_4  12          // L298N in4 motors Left            GPIO12(D6)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

String command;             //String to store app command state.
int speedCar = 800;         // 400 - 1023.
int speed_Coeff = 3;

const char *ssid = "ASUS";
const char *password = "379931sbmc";
ESP8266WebServer server(80);

void setup()
{ 
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
 
Serial.begin(115200);

// Connecting WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
// Starting WEB-server
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();
}

void goAhead(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
  }

void goBack(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void goRight(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
  }

void goLeft(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void goAheadRight(){
     
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
   }

void goAheadLeft(){
     
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
  }

void goBackRight(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void goBackLeft(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void stopRobot(){ 

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, LOW);
}

void loop() {
    server.handleClient();
   
      command = server.arg("State");
      if (command == "F") goAhead();
      else if (command == "B") goBack();
      else if (command == "L") goLeft();
      else if (command == "R") goRight();
      else if (command == "I") goAheadRight();
      else if (command == "G") goAheadLeft();
      else if (command == "J") goBackRight();
      else if (command == "H") goBackLeft();
      else if (command == "0") speedCar = 400;
      else if (command == "1") speedCar = 470;
      else if (command == "2") speedCar = 540;
      else if (command == "3") speedCar = 610;
      else if (command == "4") speedCar = 680;
      else if (command == "5") speedCar = 750;
      else if (command == "6") speedCar = 820;
      else if (command == "7") speedCar = 890;
      else if (command == "8") speedCar = 960;
      else if (command == "9") speedCar = 1023;
      else if (command == "S") stopRobot();
}

void HTTP_handleRoot(void) {

if( server.hasArg("State") ){
       Serial.println(server.arg("State"));
  }
  server.send ( 200, "text/html", "" );
  delay(1);
}
Да машинка запустилась, но без подключённых ENA и ENB пинов. Подключение по пинам такое:
D0 - IN1
D1 - IN2
D2 - IN3
D3 - IN4
Осталось завести на пины NodeMCU ENA и ENB.
 

Вложения

nikolz

Well-known member
Код:
#define IN_1  16          // L298N in1 motors Right           GPIO16(D0)
#define IN_2  5           // L298N in2 motors Right           GPIO5(D1)
#define IN_3  14          // L298N in3 motors Left            GPIO14(D5)
#define IN_4  12          // L298N in4 motors Left            GPIO12(D6)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

String command;             //String to store app command state.
int speedCar = 800;         // 400 - 1023.
int speed_Coeff = 3;

const char *ssid = "ASUS";
const char *password = "379931sbmc";
ESP8266WebServer server(80);

void setup()
{
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
 
Serial.begin(115200);

// Connecting WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
// Starting WEB-server
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();
}

void goAhead(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
  }

void goBack(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void goRight(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
  }

void goLeft(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void goAheadRight(){
    
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
   }

void goAheadLeft(){
    
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
  }

void goBackRight(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void goBackLeft(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
  }

void stopRobot(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, LOW);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, LOW);
}

void loop() {
    server.handleClient();
  
      command = server.arg("State");
      if (command == "F") goAhead();
      else if (command == "B") goBack();
      else if (command == "L") goLeft();
      else if (command == "R") goRight();
      else if (command == "I") goAheadRight();
      else if (command == "G") goAheadLeft();
      else if (command == "J") goBackRight();
      else if (command == "H") goBackLeft();
      else if (command == "0") speedCar = 400;
      else if (command == "1") speedCar = 470;
      else if (command == "2") speedCar = 540;
      else if (command == "3") speedCar = 610;
      else if (command == "4") speedCar = 680;
      else if (command == "5") speedCar = 750;
      else if (command == "6") speedCar = 820;
      else if (command == "7") speedCar = 890;
      else if (command == "8") speedCar = 960;
      else if (command == "9") speedCar = 1023;
      else if (command == "S") stopRobot();
}

void HTTP_handleRoot(void) {

if( server.hasArg("State") ){
       Serial.println(server.arg("State"));
  }
  server.send ( 200, "text/html", "" );
  delay(1);
}
Да машинка запустилась, но без подключённых ENA и ENB пинов. Подключение по пинам такое:
D0 - IN1
D1 - IN2
D2 - IN3
D3 - IN4
Осталось завести на пины NodeMCU ENA и ENB.
что-то не видно, где вы определили ENA и ENB?
 

nikolz

Well-known member
можете задействовать GPI015(D8) , GPIO0(D3)
сначала просто ничего не подключайте а используйте их в программе
после старта они могут использоваться как угодно
и покажите схему того что к ним подключали
----------------------
 

tretyakov_sa

Moderator
Команда форума
можете задействовать GPI015(D8) , GPIO0(D3)
сначала просто ничего не подключайте а используйте их в программе
после старта они могут использоваться как угодно
и покажите схему того что к ним подключали
----------------------
Скорее всего входы драйвера подтянуты к VCC, а значит нельзя использовать именно GPI015(D8). Все остальные можно, но это зависит от схемотехники Драйвера, нужно проверить.
 

Volt-Amper

New member
Да машинка запустилась, но без подключённых ENA и ENB пинов.
что-то не видно, где вы определили ENA и ENB?
ENA и ENB пока не подключил, сначала проверил работу моторов. Подсоединить к Nodemcu получится только двигатели, пинов не хватает на подключение другой периферии, придётся подключать вот такую связку из: Arduino Uno+Nodemcu+периферия.
 

nikolz

Well-known member
Да машинка запустилась, но без подключённых ENA и ENB пинов.

ENA и ENB пока не подключил, сначала проверил работу моторов. Подсоединить к Nodemcu получится только двигатели, пинов не хватает на подключение другой периферии, придётся подключать вот такую связку из: Arduino Uno+Nodemcu+периферия.
выше написал что можно использовать но надо правильно включить
поэтому если надо то покажите схему что включаете
либо напишите какие сигналы на свободных концах всех подключаемых проводов
можно попробовать подключить правильно
 

Volt-Amper

New member
выше написал что можно использовать но надо правильно включить
поэтому если надо то покажите схему что включаете
либо напишите какие сигналы на свободных концах всех подключаемых проводов
можно попробовать подключить правильно
Спасибо вам, что помогаете, это мой первый проект, сам не справился бы, от пояснений мне все понятно пока что, вот только бы теперь понять какую функцию вводить чтобы была возможность задействовать все Digitat pin на NODEMCU.
Вот моя схема подключения будет выглядить так:
D0 - IN1
D1 - IN2
D5 - IN3
D6 - IN4
D2 - SG90(servo)
D7 - ENA
D8 - ENB
Или можно сделать вот по этой схеме с подключением Arduino Uno:
 

Вложения

Volt-Amper

New member
можете задействовать GPI015(D8) , GPIO0(D3)
сначала просто ничего не подключайте а используйте их в программе
после старта они могут использоваться как угодно
и покажите схему того что к ним подключали
----------------------
Если судить по схеме, то входы драйвера моторов не подключены к логическому VSS, а подключены через 5 вольт, вот посмотрите на схему:
 

Вложения

nikolz

Well-known member
Если судить по схеме, то входы драйвера моторов не подключены к логическому VSS, а подключены через 5 вольт, вот посмотрите на схему:
Полагаю что Вы разбираетесь в схемотехнике.
Поясню, к чему надо стремиться
При пуске ESP, когда включаете питание или закорачиваете кнопкой RST на землю,
начальный загрузчик читает сигналы на пинах GPIO15(D8) и GPIO0(D3).
В этот момент, для нормального пуска ESP , надо обеспечить Low на D8 и High на D3.
Т е к D8 надо подключать то, что будет включаться High сигналом
а к D3 наоборот, т е включаться будет Low сигналом
----------------
Т е если ваше устройство(мотор) включается High, то на D8 его можно подключить прямо,
а на D3 надо через инвертор и обеспечить выкл в момент пуска
---------------------
примерно так.
 

nikolz

Well-known member
Volt-Amper,
В качестве совета.
Я бы сделал так.
сначала собрал схему управления двигателем
и проверил ее работу подключая вход через резистор к GND и Vcc
Чтобы сделать схему управления надо взять параметры двигателя
и посчитать сможет ли пин ESP управлять без усилителя
если нет то поставить транзистор либо логический элемент
потом добавил инвертор там где надо управление инвесным сигналом Это либо еще транзистор либо логический элемент
после этого стал бы подключать все к ESP учитывая особенности пинов D8 и D3
примерно так.
 

Volt-Amper

New member
Код:
#define light_FR  14    //LED Front Right   pin A0 for Arduino Uno
#define light_FL  15    //LED Front Left    pin A1 for Arduino Uno
#define horn_Buzz 18    //Horn Buzzer       pin A4 for Arduino Uno

#define ENA_m1 5        // Enable/speed motor Front Right
#define ENB_m1 6        // Enable/speed motor Back Right
#define ENA_m2 10       // Enable/speed motor Front Left
#define ENB_m2 11       // Enable/speed motor Back Left

#define IN_11  2            // L298N #1 in 1 motor Front Right
#define IN_12  3            // L298N #1 in 2 motor Front Right
#define IN_13  4            // L298N #1 in 3 motor Back Right
#define IN_14  7            // L298N #1 in 4 motor Back Right

#define IN_21  8            // L298N #2 in 1 motor Front Left
#define IN_22  9            // L298N #2 in 2 motor Front Left
#define IN_23  12           // L298N #2 in 3 motor Back Left
#define IN_24  13           // L298N #2 in 4 motor Back Left

int command;                   //Int to store app command state.
int speedCar = 100;         // 50 - 255.
int speed_Coeff = 4;
boolean lightFront = false;
boolean horn = false;

void setup() { 
  
      pinMode(light_FR, OUTPUT);
    pinMode(light_FL, OUTPUT);
    pinMode(horn_Buzz, OUTPUT);
   
      pinMode(ENA_m1, OUTPUT);
      pinMode(ENB_m1, OUTPUT);
      pinMode(ENA_m2, OUTPUT);
      pinMode(ENB_m2, OUTPUT);
 
    pinMode(IN_11, OUTPUT);
    pinMode(IN_12, OUTPUT);
    pinMode(IN_13, OUTPUT);
    pinMode(IN_14, OUTPUT);
   
    pinMode(IN_21, OUTPUT);
    pinMode(IN_22, OUTPUT);
    pinMode(IN_23, OUTPUT);
    pinMode(IN_24, OUTPUT);

    Serial.begin(115200);

  }

void goAhead(){

      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
        analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
        analogWrite(ENB_m1, speedCar);


      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
        analogWrite(ENA_m2, speedCar);


      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
        analogWrite(ENB_m2, speedCar);

  }

void goBack(){

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
        analogWrite(ENA_m1, speedCar);


      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
        analogWrite(ENB_m1, speedCar);


      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
        analogWrite(ENA_m2, speedCar);


      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
        analogWrite(ENB_m2, speedCar);

  }

void goRight(){

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
        analogWrite(ENA_m1, speedCar);


      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
        analogWrite(ENB_m1, speedCar);


      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
        analogWrite(ENA_m2, speedCar);


      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
        analogWrite(ENB_m2, speedCar);


  }

void goLeft(){

      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
        analogWrite(ENA_m1, speedCar);


      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
        analogWrite(ENB_m1, speedCar);

       
      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
        analogWrite(ENA_m2, speedCar);


      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
        analogWrite(ENB_m2, speedCar);

       
  }

void goAheadRight(){
     
      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar/speed_Coeff);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar/speed_Coeff);


      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);


      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);
  }

void goAheadLeft(){
     
      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);


      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar/speed_Coeff);


      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar/speed_Coeff);
  }

void goBackRight(){

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar/speed_Coeff);


      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar/speed_Coeff);


      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);


      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

  }

void goBackLeft(){

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);


      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);


      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar/speed_Coeff);


      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar/speed_Coeff);

  }

void stopRobot(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, LOW);
        analogWrite(ENA_m1, speedCar);


      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, LOW);
        analogWrite(ENB_m1, speedCar);

 
      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, LOW);
        analogWrite(ENA_m2, speedCar);

     
      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, LOW);
        analogWrite(ENB_m2, speedCar);
 
  }
 
void loop(){
   
if (Serial.available() > 0) {
    command = Serial.read();
   
if (lightFront) {digitalWrite(light_FR, HIGH); digitalWrite(light_FL, HIGH);}
if (!lightFront) {digitalWrite(light_FR, LOW); digitalWrite(light_FL, LOW);}
if (horn) {digitalWrite(horn_Buzz, HIGH);}
if (!horn) {digitalWrite(horn_Buzz, LOW);}

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;
case 'W':lightFront = true;break;
case 'w':lightFront = false;break;
case 'V':horn = true;break;
case 'v':horn = false;break;

}
}
}
 

Volt-Amper

New member
Код:
#define horn_Buzz 18    //Horn Buzzer       pin A4 for Arduino Uno

#define ENA 5        // Enable/speed motor Front Right
#define ENB 6        // Enable/speed motor Back Right


#define IN1  2            // L298N #1 in 1  motor Front Right
#define IN2  3            // L298N #1 in 2 motor Front Right
#define IN3  4            // L298N #1 in 3 motor Back Right
#define IN4  7            // L298N #1 in 4 motor Back Right

int command;                   //Int to store app command state.
int speedCar = 100;         // 50 - 255.
int speed_Coeff = 4;
boolean lightFront = false;
boolean horn = false;

void setup() {
    pinMode(horn_Buzz, OUTPUT);
 
      pinMode(ENA, OUTPUT);
      pinMode(ENB, OUTPUT);
     
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);

    Serial.begin(115200);

  }

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();
 
if (horn) {digitalWrite(horn_Buzz, HIGH);}
if (!horn) {digitalWrite(horn_Buzz, LOW);}

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;
case 'V':horn = true;break;
case 'v':horn = false;break;

}
}
}
 

Volt-Amper

New member
Не знаю как удалить предыдущий пост, 2 поста получилось с кодом, один под 2 шт-L298N, а второй код под один драйвер моторов, наваял я себе вот такую программу.
 

Volt-Amper

New member
Здравствуйте, подскажите решение проблемы, если я скетч от Arduino Uno буду заливать на NodeMCU, то не возникнет конфликта между скнтчем и NodeMCU? Ошибка espcomm_sync failed до сих пор появляется.
 

Volt-Amper

New member
Могу замеместо FTDI-конвертера использовать конвертер на микросхем RS232 usb>>TTL конвертером на микросхем CH340G, чтобы посмотреть, что передаёт Nodemcu в конвертер.
 

nikolz

Well-known member
Код:
#define horn_Buzz 18    //Horn Buzzer       pin A4 for Arduino Uno

#define ENA 5        // Enable/speed motor Front Right
#define ENB 6        // Enable/speed motor Back Right


#define IN1  2            // L298N #1 in 1  motor Front Right
#define IN2  3            // L298N #1 in 2 motor Front Right
#define IN3  4            // L298N #1 in 3 motor Back Right
#define IN4  7            // L298N #1 in 4 motor Back Right

int command;                   //Int to store app command state.
int speedCar = 100;         // 50 - 255.
int speed_Coeff = 4;
boolean lightFront = false;
boolean horn = false;

void setup() {
    pinMode(horn_Buzz, OUTPUT);
 
      pinMode(ENA, OUTPUT);
      pinMode(ENB, OUTPUT);
   
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);

    Serial.begin(115200);

  }

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();
 
if (horn) {digitalWrite(horn_Buzz, HIGH);}
if (!horn) {digitalWrite(horn_Buzz, LOW);}

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;
case 'V':horn = true;break;
case 'v':horn = false;break;

}
}
}
рекомендую подробнее изучить работу с GPIO.
дело в том, что вывод сигналов на пины выполняется в одном регистре
и поэтому вывести High или Low на любое число произвольных пинов можно одновременно одной командой,
а не кучей как сейчас у Вас.
В итоге будет все компактнее, колеса будут работать синхронно.
 

Volt-Amper

New member
Проблема немного в другом, у меня связка получается из NodeMCU+Arduino Uno мне нужно отправить на Arduino Uno какое-то сообщение, чтобы в терминале на Uno можно было это сообщение увидеть. В моем случае это 4 колеса которые вращаются вперёд-назад. Пины я расставлю правильно чуть позже, а пока вот такую связку нужно подключить к Wi-Fi.
 

Volt-Amper

New member
Входы на L298N понимаю так, это входы на каждое колесо, и если я обозначаю например pin IN1 как левое переднее колесо, с другими пинами тоже самое только меняется расположение колес, и командой DigitalWrite я записываю последовательность действий колеса, как это у меня IN1(HIGH) это логическая 1, если IN1(LOW) то логический 0. Правильно понимаю?
 

nikolz

Well-known member
Входы на L298N понимаю так, это входы на каждое колесо, и если я обозначаю например pin IN1 как левое переднее колесо, с другими пинами тоже самое только меняется расположение колес, и командой DigitalWrite я записываю последовательность действий колеса, как это у меня IN1(HIGH) это логическая 1, если IN1(LOW) то логический 0. Правильно понимаю?
Обзор драйвера мотора на L298N – RobotChip
 

Volt-Amper

New member
Arduino: 1.8.9 (Windows 10), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, 4M (3M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
C:\Users\vercl\AppData\Local\Temp\arduino_build_345906/arduino.ar(core_esp8266_main.cpp.o): In function `init_done()':
C:\Users\vercl\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/core_esp8266_main.cpp:149: undefined reference to `loop'
C:\Users\vercl\AppData\Local\Temp\arduino_build_345906/arduino.ar(core_esp8266_main.cpp.o): In function `loop_wrapper':
C:\Users\vercl\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/core_esp8266_main.cpp:120: undefined reference to `loop'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Вот такая ошибка вылезла при заливке скетча в плату NODEMCU.
Код программы:
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
String command;             //String to store app command state.
int speedCar = 800;         // 400 - 1023.
int speed_Coeff = 3;
const char *ssid = "Robot_car";
const char *password = "379931sbmc";
ESP8266WebServer server(80);
void setup()
{
Serial.begin(115200);
// Connecting WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_AP_STA); // Задаем режим работы WIFI_AP_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
// Starting WEB-server
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();
}

void HTTP_handleRoot(void) {
if( server.hasArg("State") ){
       Serial.println(server.arg("State"));
  }
  server.send ( 200, "text/html", "" );
  delay(1);
}
 
Сверху Снизу