基于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的项目具有很好的帮助。