基于WeMos的WiFi避障小车

项目介绍

小车是基于Ardiuno (WeMos d1)开发,由板载无线网卡esp8266提供sta上网和AP路由功能,把WeMos架设为ftp服务器,手机APP通过TCP/IP连接,实现小车控制,超声波模块实现测距避障功能

小车主要硬件部分

  1. 从小朋友那里抢的遥控车一个
  2. wemos d1开发板一块
  3. L9110s步进电机控制器一个
  4. 超声波测距模块一枚
  5. 电源(从室友那里嫖的充电宝,嘿嘿)

在这里插入图片描述

WeMos服务器——c/s模式

在这里插入图片描述

上代码

#include<ESP8266WiFi.h>

#define dong1 D6
#define dong2 D7
#define zhuan1 D4
#define zhuan2 D5
#define Echo D8
#define Trig D2

long getTime()//通过波在空气中的传播时间来计算距离
{
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);

  return pulseIn(Echo, HIGH);
}
void initchaoShengBo()
{
  pinMode(Echo, INPUT);
  pinMode(Trig, OUTPUT);
}

char* ssid = "apple";
char *passwd = "123456789";
int port = 8888;
WiFiServer server(port);//设置端口号

void initWifiSta()
{
  WiFi.mode(WIFI_STA);//设置STA模式
  WiFi.begin(ssid, passwd); //连接网络
  while (WiFi.status() != WL_CONNECTED) //判断是否连接成功,不成功的话每隔0.5秒打印一个.
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println(WiFi.localIP());//通过串口每隔0.5秒打印一次wemosIP地址
}

void initrun()
{
  pinMode(dong1, OUTPUT);
  pinMode(dong2, OUTPUT);
  pinMode(zhuan1, OUTPUT);
  pinMode(zhuan2, OUTPUT);
}
void qian()
{
  digitalWrite(dong1, HIGH);
  digitalWrite(dong2, LOW);
}
void ting()
{
  digitalWrite(dong1, HIGH);
  digitalWrite(dong2, HIGH);
}
void hou()
{
  digitalWrite(dong1, LOW);
  digitalWrite(dong2, HIGH);
}
void zuo()
{
  digitalWrite(zhuan1, HIGH);
  digitalWrite(zhuan2, LOW);

}
void you()
{
  digitalWrite(zhuan1, LOW);
  digitalWrite(zhuan2, HIGH);
}
void zheng()
{
  digitalWrite(zhuan1, HIGH);
  digitalWrite(zhuan2, HIGH);
}
void setup() {
  // put your setup code here, to run once:
  initrun();
  //Serial.begin(115200);//开启端口,并设置波特率
  initWifiSta();//接入WiFi
  server.begin();//启动服务器
  initchaoShengBo();
}

void loop()
{
  // put your main code here, to run repeatedly:
  char cmd;
  long dis;
  int mark = 0;
  WiFiClient client = server.available();  //服务初始化
  while (client.connected())   //等待客户端连接
  {
    while (client.available() > 0) //判断是否有数据到来
    {
      cmd = client.read();//读取数据
      Serial.println(getTime() / 58);
      dis = getTime() / 58;
      if (dis < 10) //障碍物离小车还有10cm,小车就后退200毫秒,并停下来,并且让mark=1,不继续执行后面的代码
      {
        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;
        }
      }
    }
  }
}

超声波模块小学习

在这里插入图片描述

超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差和超声波传播速度,计算出模块到前方障碍物的距离。这个模块是2线制的(不包含电源线),Echo与Trig,Trig负责接收10us以上的触发信号,Echo则是输出距离信号;

PS在这里插入图片描述

心得体会

主要是体会吧,心得谈不上
1,在电脑上用手机模拟器,连接小车,使用adb连接时。首先要看ecplise安装目录下的sdk文件中的adb程序和模拟器安装目录下bin文件里的adb程序版本号是否一致(adb version),其次就是该模拟器的默认端口号
2,ardiuno IDE烧录有点慢,感觉wemos板子有点小问题(应该是我烧录太频繁导致)
3,服务器配置最重要的两点:地址和端口号
4,APP是老师封装好的,只需要修改IP和端口号,以及一些控制函数,保存后,在libs文件夹里面把apk文件发给手机安装,就可以起飞了>>>>
5,手机和要和小车连上同一WiFi,这个c/s模式好像是在局域网才能进行数据传输
6,在实际体验中避障功能不太灵敏(可能是代码不够完善,或是硬件条件原因)

最后来上一张帅气的WiFi避障小车图

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值