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);
}
посмотри как сделано здесь, все проблемы танкового управления решены:
Функции управления моторами правого и левого борта:
//************** Функции работы с моторами привода *************// 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); }Подпишусь.
Всё работает норм! Пытался от Меги запустить. Когда обратно собрал на есп, то заработало идеально. Вполне возможно сам косякнул с пинами, или модуль питания от батареи 18650 смуту наводит. Ну и добавил delay(1) после каждого digitalwright. Wifi отваливался время от времени. Сейчас и связь стабильна. Походу реально не хватало delays/
теперь вводить регулировку газа )))
8-) ни за что ))) не асилю скрипты такие..
Задумался геймпад блютусный прикрутить к есп32кам.
теперь вводить регулировку газа )))
Ёкарный бабай :) Дошёл до этого всё же. Делаю плавное управление с помощью стика PS3.
ESP32cam транслирует видеои получает данные с джойстика по блютусу. Потом скидывает команды по серийнику на мегу, а та уже крутит вертит всю силовую часть..