esp8266 nodemcu и Dual H-Bridge v1.3
- Войдите на сайт для отправки комментариев
Сб, 29/01/2022 - 22:49
Добра всем!
Подскажит, что за глюк я словил. Ранее пользовался этим комплектом для дрифт машинки. Там был задействован лишь один канал и та же 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; }
В MotorForward колеса крутятся в разные стороны.
https://youtu.be/Si1CnWMBgDk
Какие команды должны быть?
Иные.
да у него и Backward() так же, а он вроде говорит что назад едет
Вот и поговорили )))
Программа верная? Левый поворот работает. Правый нет. Одна сторона стоит.
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);
}
посмотри как сделано здесь, все проблемы танкового управления решены:
Функции управления моторами правого и левого борта:
Подпишусь.
Всё работает норм! Пытался от Меги запустить. Когда обратно собрал на есп, то заработало идеально. Вполне возможно сам косякнул с пинами, или модуль питания от батареи 18650 смуту наводит. Ну и добавил delay(1) после каждого digitalwright. Wifi отваливался время от времени. Сейчас и связь стабильна. Походу реально не хватало delays/
теперь вводить регулировку газа )))
8-) ни за что ))) не асилю скрипты такие..
Задумался геймпад блютусный прикрутить к есп32кам.
теперь вводить регулировку газа )))
Ёкарный бабай :) Дошёл до этого всё же. Делаю плавное управление с помощью стика PS3.
ESP32cam транслирует видеои получает данные с джойстика по блютусу. Потом скидывает команды по серийнику на мегу, а та уже крутит вертит всю силовую часть..