基于wemos D1 的WiFi避障小车

*项目介绍:该项目主要通过wemos D1 ,超声波传感器模块(HC-SR04),L9110s步进电机,等模块组成。 *各模块实物图片如下: 一.wemos d1模块 板载无线网卡 支持AP(路由),sta(上网)模式。 wemos d1和51单片机的区别在于多了个无线网卡,可以进行网络连接,其他的I/O口和51单片机类似。在此项目中担任主控芯片,控制步进电机和红外模块。 二.超声波传感模块 该模块主要实现避障的功能,超声波发出波遇到前面的障碍物后会返回,通过这段时间来判断距离前面障碍物的距离,距离通过串口传给wemos d1从而判断碰到障碍物该做什么反应。 三.L9110s步进电机 该电机主要来控制电机的转方向 该电机有六个接口,其中vcc和gnd分别接电源和地,其余四个接口的输出如下: B-1A B-2A 电机1 0 1 正转(假设) 1 0 反转 0 0 不转 1 1 不转 A-1A A-2A 电机2 0 1 正转(假设) 1 0 反转 0 0 不转 1 1 不转 其中的正转与反转只是在假设的情况下,如果相反的话,可以更改一下,总之就是0 1 不是正转就是反转,只有这两种结果 1 0则与之相反。这样就可以把除了vcc和gnd的俩个接口连在wemos d1的I/o口上来控制电机的转动从而使得小车动起来。 开发环境:arduion 以及elipse 连接方式: 将除了vcc gnd接到单片机的vcc gnd上以外,其余的都接到d0-d10的I/o口上面 源码如下:

#include<ESP8266WiFi.h>
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5
#define Echo D2
#define Trig D8

char* ssid = "TP-LINK_3F0C";
char* passwd = "18068943800";
int port = 8888;           //端口号
WiFiServer server(port);   //设置端口号


long getTime()
{
          
   
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  return pulseIn(Echo, HIGH);
}
void initChaoShengBo()
{
          
   
  pinMode(Echo, INPUT);
  pinMode(Trig, OUTPUT);
}

void initWifiSta()
{
          
   
  WiFi.mode(WIFI_STA);         //设置STA模式
  WiFi.begin(ssid, passwd);    //连接网络
  while (WiFi.status() != WL_CONNECTED) {
          
   
    Serial.print(".");
    delay(500);
  }
  Serial.println(WiFi.localIP());    //通过串口打印wemos的ip地址
}

void initL9110s()
{
          
   
  pinMode(Dong1, OUTPUT);
  pinMode(Dong2, OUTPUT);
  pinMode(Zhuan1, OUTPUT);
  pinMode(Zhuan2, OUTPUT);
}
void qian()
{
          
   
  digitalWrite(Dong1, HIGH);
  digitalWrite(Dong2, LOW);
}
void hou()
{
          
   
  digitalWrite(Dong1, LOW);
  digitalWrite(Dong2, HIGH);
}
void ting()
{
          
   
  digitalWrite(Dong1, LOW);
  digitalWrite(Dong2, LOW);
}

void zuo()
{
          
   
  digitalWrite(Zhuan1, HIGH);
  digitalWrite(Zhuan2, LOW);
}
void you()
{
          
   
  digitalWrite(Zhuan1, LOW);
  digitalWrite(Zhuan2, HIGH);
}
void zheng()
{
          
   
  digitalWrite(Zhuan1, LOW);
  digitalWrite(Zhuan2, LOW);
}
void setup() {
          
   
  // put your setup code here, to run once:
  initL9110s();
  initChaoShengBo();
  Serial.begin(115200);
  initWifiSta();
  server.begin();
}

void loop() {
          
   
  char cmd;
  long dis;
  int mark = 0;

  WiFiClient client = server.available();
  while (client.connected())
  {
          
   
    while (client.available() > 0)
    {
          
   
      cmd = client.read();
      Serial.println(cmd);
      dis = getTime() / 58;
      if (dis < 12) {
          
   
        hou();
        delay(200);
        ting();
        mark = 1;
      }
      else {
          
   
        mark = 0;
      }
      if (mark == 0) {
          
   
        switch (cmd) {
          
   
          case q:
            qian();
            break;
          case h:
            hou();
            break;
          case z:
            zuo();
            break;
          case y:
            you();
            break;
          case s:
            ting();
            break;
          case d:
            zheng();
            break;
        }
      }
    }
  }
}

项目总结:该项目多了个WiFi的功能,可以和家用WiFi很好的连接到一起,对于开发其他的智能家居一些连接家用WiFi的项目具有很好的帮助。

经验分享 程序员 微信小程序 职场和发展