本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于ESP8266智能WIFI控制小车
发布时间:2021-05-12
分享到:
基于ESP8266智能WIFI控制小车
发布时间:2021-05-12
分享到:

该项目是制造一款ESP8266智能汽车,该WIFI遥控车运行ESP8266模块(NODEMCU)。

硬件组件:

  • ESP8266-12E模块(NodeMCU)
  • L293D电机驱动器-IC
  • 直流减速电机
  • 7805稳压器-IC
  • 电池-7/12V
  • 电解电容器-100µF
  • 陶瓷圆盘电容器-100 pF
  • 母头针脚
  • 2针螺丝连接器
  • 车轮
  • 拨动开关,拨动

原理图:

 PCB:

代码:

//基于NodeMCU的WIFI控制车//

#define ENA   14          //启用/加速电机右侧GPIO14(D5)
#define ENB   12          //启用/加速电动机左GPIO12(D6)
#define IN_1 15           // L298N in1电机右侧GPIO15(D8)
#define IN_2 13           // L298N in2电机右侧GPIO13(D7)
#define IN_3 2             // L298N  in3电机左GPIO2(D4)
#define IN_4 0             // L298N in4电机左GPIO0(D3)

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

String command;             //用于存储应用命令状态的字符串。
int speedCar = 800;         // 400 - 1023.
int speed_Coeff = 3;

const char* ssid = "NodeMCU Car";
ESP8266WebServer server(80);

void setup() {
 
 pinMode(ENA, OUTPUT);
 pinMode(ENB, OUTPUT);  
 pinMode(IN_1, OUTPUT);
 pinMode(IN_2, OUTPUT);
 pinMode(IN_3, OUTPUT);
 pinMode(IN_4, OUTPUT); 
  
  Serial.begin(115200);
 //连接WiFi

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
 
 //启动WEB服务器  
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();    
}

void goAhead(){ 

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
  }

void goBack(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goRight(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
  }

void goLeft(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goAheadRight(){
      
      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar/speed_Coeff);
 
      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
   }

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

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar/speed_Coeff);
  }

void goBackRight(){ 

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar/speed_Coeff);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goBackLeft(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar/speed_Coeff);
  }

void stopRobot(){  

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
 }

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);
}

设计步骤:

步骤一:

安装元器件(使用电容器来获得适当的输出)

将L293D电机驱动器IC插入IC插座,L293D是一种流行的16引脚电动机驱动器IC。单个L293D IC能够同时运行两个直流电动机。这两个电机的方向也可以独立控制。该项目将两个IC用于四个电机。该IC按照半H桥原理工作

步骤二:

在NodeMCU上上传代码

  • 在PC上连接NodeMCU
  • 打开Arduino IDE(软件)
  • 然后转到工具>主板> ESP8266主板> NodeMCU 1.0(ESP-12E模块)
  • 选择正确的端口
  • 然后在下面上传代码
  • 上传完成后,将NodeMCU设置为PCB

 

步骤三:

设计机壳

使用亚克力板制作了CHASSIS,将亚克力板切成14CM x 8 CM的尺寸并设置4档电机在4侧。两张丙烯酸纸中间有一个电池和一个用于打开和关闭它的开关,所有齿轮马达电线都已拔出。

步骤四:

组装:

  • 将PCB放在丙烯酸纸的顶部:使用4颗螺钉将PCB板固定在丙烯酸板上

  • 接线:将齿轮电机的所有电线都放在PCB板上的2针连接器中.PCB上总共有5个2针连接器,其中一个是电池输入,其余是齿轮电机的输出。

  • 打开电源:

步骤五:

应用安装:

  • 应用链接:ESP8266 WIFI机器人车
  • 下载ESP8266 WIFI机器人车
  • 开启WIFI
  • 搜索并连接NodeMCU Car
  • 开启ESP8266 WIFI机器人车

 

 

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论