esp8266 nodemcu и Dual H-Bridge v1.3

etaon
Offline
Зарегистрирован: 16.12.2011

Добра всем!

Подскажит, что за глюк я словил. Ранее пользовался этим комплектом для дрифт машинки. Там был задействован лишь один канал и та же ESP8266.

Сейчас переставить решил на машинку 4х4. Поворачивает и движется как танк. Нет руля, сервы. 4 мотора, то есть на каждом колесе. Запаралелил два мотора слева и также два мотора справа. Принцип танка.

Повороты: Принцип такой, что колёса вращаются в противополжные стороны по сторонам. Налево если надо, то правая сторона вперед, а левая сторона назад...

Странно ведет себя. Поворот налево срабатывает, а поворот направо нет. Одна сторона не крутится.

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

 

 

 

#include <ESP8266WiFi.h>

WiFiClient client;
WiFiServer server(80);

/* WIFI settings */
const char* ssid = "";
const char* password = "";

/* data received from application */
String  data ="";

/* define L298N or L293D motor control pins */
int leftMotorROTATION = 12;     /* GPIO2(D4) -> IN3   */
int leftMotorSPEED = 14;    /* GPIO0(D3) -> IN4   */

int rightMotorROTATION = 4;   /* GPIO15(D8) -> IN1  */
int rightMotorSPEED = 15;  /* GPIO13(D7) -> IN2  */

 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  /* initialize motor control pins as output */
  pinMode(leftMotorROTATION, OUTPUT);
  pinMode(rightMotorROTATION, OUTPUT); 
  pinMode(leftMotorSPEED, OUTPUT);  
  pinMode(rightMotorSPEED, OUTPUT);
 
  /* Connect to WiFi network */
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
   /* start server communication */
  server.begin();
  Serial.println("Server started");
 
  /* print the IP address */
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  
  /* If the server available, run the "checkClient" function */  
    client = server.available();
    if (!client) return; 
    data = checkClient ();

/************************ Run function according to incoming data from application *************************/

    /* If the incoming data is "forward", run the "MotorForward" function */
    if (data == "forward") MotorForward();
    /* If the incoming data is "backward", run the "MotorBackward" function */
    else if (data == "backward") MotorBackward();
    /* If the incoming data is "left", run the "TurnLeft" function */
    else if (data == "left") TurnLeft();
    /* If the incoming data is "right", run the "TurnRight" function */
    else if (data == "right") TurnRight();
    /* If the incoming data is "stop", run the "MotorStop" function */
    else if (data == "stop") MotorStop();
    
  /* Web Browser */
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head>");
  client.println("<title> MERT ARDUINO and TECH </title>");
  client.println("</head>");
  client.println("<body>");
  client.println("<center>");
  client.println("<h2> WiFi CONTROLLED TANK via ESP8266 </h2>");
  client.println("<br><br>");
  client.println("<hr>");

  /* Buttons */
  client.println("<br><br>");
  client.println("<a href=\"/forward\"\"><button>FORWARD </button></a>");
  client.println("<a href=\"/backward\"\"><button>BACKWARD </button></a><br />");
  client.println("<br><br>");
  client.println("<a href=\"/left\"\"><button>LEFT </button></a>");
  client.println("<a href=\"/right\"\"><button>RIGHT </button></a><br />");
  client.println("<br><br>");
  client.println("<a href=\"/stop\"\"><button>STOP </button></a><br />");

  client.println("<br><br>");
  client.println("<hr>");
  client.println("<br><br>");
  client.println("<pre><h3>Mert Arduino and Tech - YouTube</br> WiFi controlled Tank via Web Browser (WiFibot/Web/WiFi/IoT/ESP8266)</br> NodeMCU ESP8266 Project</br></h3></pre>");
  client.println("</center>");
  client.println("</body>");
  client.println("</html>");
}


/********************************************* FORWARD *****************************************************/
void MotorForward(void)   
{
  digitalWrite(leftMotorROTATION,LOW);
  digitalWrite(rightMotorROTATION,LOW);
  digitalWrite(leftMotorSPEED,HIGH);
  digitalWrite(rightMotorSPEED,HIGH);
}

/********************************************* BACKWARD *****************************************************/
void MotorBackward(void)   
{
  digitalWrite(leftMotorSPEED,HIGH);
  digitalWrite(rightMotorSPEED,HIGH);
  digitalWrite(leftMotorROTATION,HIGH);
  digitalWrite(rightMotorROTATION,HIGH);
}

/********************************************* TURN LEFT *****************************************************/
void TurnLeft(void)   
{
  digitalWrite(leftMotorROTATION,LOW);
  digitalWrite(leftMotorSPEED,HIGH);
  digitalWrite(rightMotorROTATION,HIGH);
  digitalWrite(rightMotorSPEED,HIGH);
}

/********************************************* TURN RIGHT *****************************************************/
void TurnRight(void)   
{
  digitalWrite(leftMotorROTATION,HIGH);
  digitalWrite(leftMotorSPEED,HIGH);
  digitalWrite(rightMotorROTATION,LOW);
  digitalWrite(rightMotorSPEED,HIGH);

}

/********************************************* STOP *****************************************************/
void MotorStop(void)   
{
  digitalWrite(leftMotorROTATION,LOW);
  digitalWrite(leftMotorSPEED,LOW);
  digitalWrite(rightMotorROTATION,LOW);
  digitalWrite(rightMotorSPEED,LOW);
}

/********************************** RECEIVE DATA FROM the WEB ******************************************/
String checkClient (void)
{
  while(!client.available()) delay(1); 
  String request = client.readStringUntil('\r');
  request.remove(0, 5);
  request.remove(request.length()-9,9);
  return request;
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

В MotorForward колеса крутятся в разные стороны.

etaon
Offline
Зарегистрирован: 16.12.2011
etaon
Offline
Зарегистрирован: 16.12.2011

Какие команды должны быть?

sadman41
Offline
Зарегистрирован: 19.10.2016

Иные.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
В MotorForward колеса крутятся в разные стороны.

да у него и Backward() так же, а он вроде говорит что назад едет

etaon
Offline
Зарегистрирован: 16.12.2011

Вот и поговорили )))

etaon
Offline
Зарегистрирован: 16.12.2011

Программа верная? Левый поворот работает. Правый нет. Одна сторона стоит.

void TurnLeft(void)
{
digitalWrite(leftMotorROTATION,LOW);
digitalWrite(leftMotorSPEED,HIGH);
digitalWrite(rightMotorROTATION,HIGH);
digitalWrite(rightMotorSPEED,HIGH);
}

void TurnRight(void)
{
digitalWrite(leftMotorROTATION,HIGH);
digitalWrite(leftMotorSPEED,HIGH);
digitalWrite(rightMotorROTATION,LOW);
digitalWrite(rightMotorSPEED,HIGH);
}

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

посмотри как сделано здесь, все проблемы танкового управления решены:
Функции управления моторами правого и левого борта:
 

//************** Функции работы с моторами привода *************//
void aForward() {
  digitalWrite(in1, LOW);
  delayMicroseconds(4); // блокируем сквозняки на всякий случай
  digitalWrite(in2, HIGH);
}

void bForward() {
  digitalWrite(in4, LOW);
  delayMicroseconds(4); // блокируем сквозняки на всякий случай
  digitalWrite(in3, HIGH);
}

void aBackward() {
  digitalWrite(in2, LOW);
  delayMicroseconds(4); // блокируем сквозняки на всякий случай
  digitalWrite(in1, HIGH);
}

void bBackward() {
  digitalWrite(in3, LOW);
  delayMicroseconds(4); // блокируем сквозняки на всякий случай
  digitalWrite(in4, HIGH);
}

void aStop() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
}

void bStop() {
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

 

NikShel
Offline
Зарегистрирован: 21.01.2018

Подпишусь.

etaon
Offline
Зарегистрирован: 16.12.2011

Всё работает норм! Пытался от Меги запустить. Когда обратно собрал на есп, то заработало идеально. Вполне возможно сам косякнул с пинами, или модуль питания от батареи 18650 смуту наводит. Ну и добавил delay(1) после каждого digitalwright. Wifi отваливался время от времени. Сейчас и связь стабильна. Походу реально не хватало delays/

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

теперь вводить регулировку газа )))

etaon
Offline
Зарегистрирован: 16.12.2011

8-) ни за что ))) не асилю скрипты такие..
Задумался геймпад блютусный прикрутить к есп32кам.

etaon
Offline
Зарегистрирован: 16.12.2011

ua6em пишет:

теперь вводить регулировку газа )))

Ёкарный бабай :)  Дошёл до этого всё же. Делаю плавное управление с помощью стика PS3.

ESP32cam транслирует видеои получает данные с джойстика по блютусу. Потом скидывает команды по серийнику на мегу, а та уже крутит вертит всю силовую часть..