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