基于WEMOS的智能WiFi避障小车

基于WEMOS的智能WiFi避障小车

前言

学习智能小车系统,有助于提高搭建系统的能力和对自动控制技术的理解。智能小车是一个较为完整的智能化系统,而智能化的研究已成为我国追赶世界科技水平的重要任务。整个智能小车系统作为一个完整的系统,从它的原理图的实现到实物的完成的过程,不仅需要深厚的电子方面的知识,还有对电路实现的良好掌握,对于培养学生的实践能力都有重要的意义[1]。智能小车的竞赛在我国各大高校中都受到了重视,吸引了大批的高校学生的兴趣,而且取得了很多优异的成果,为我国推进智能化的进程做出了巨大的贡献,也为智能汽车的发展提供了理论依据。只有当把理论和模型应用到实践中,这样的创新才用意义,我们国家这几年在智能化方面的进步越来越快,也推动了我国在国际社会上在智能化方面的话语权。智能小车是智能化的一部分,它的系统里的避障、循迹、红外遥控的技术用到了智能化[2-4],将智能化应用到传统技术上是21世纪发展的趋势。我国虽然从改革开放以来大力发展科技创新,但是在智能化的创新水平与国外较发达的国家相比还有巨大的差距,智能竞赛在高校越来越流行,也证明了我国教育在这方面很快会赶上世界上的发展水平。本次设计是以安卓系统APP通过控制手机内部的Wi-Fi模块去连接车载Wi-Fi,实现手机和小车的连接,然后利用手机上的控制软件以Wi-Fi网络信号为载体发送相关信号,Wi-Fi模块接收手机端发送来的相关信号并分析转换成TTL电平信号,然后发送给单片机,单片机接收到的电平信号处理、分析、计算,转化成控制指令并发送给电机驱动模块和超声波模块以实现小车的前进、后退、左拐、右拐和超声波避障等功能[5],从而达到控制小车。对于电子知识的热爱与钻研有利于研发更多智能车辆,使我们的生活更加便利、智能化。

一、设计平台介绍

1.1 Arduino描述
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。
它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是通过 Arduino编程语言 (基于Wiring)和Arduino开发环境(基于Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,它们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。
在这里插入图片描述

                      图1  Arduino界面

1.2 Wemos D1开发板介绍
(1)Wemos D1是自带ESP8266 Wifi芯片并兼容Arduino的开发板,可使用Arduino IDE直接进行开发。它有11个 I/O 引脚,1 个 ADC 引脚(输入范围0-3.3V),而且板载5V及1A开关电源(高输入电压24V),在工作中,它和stm32模块开发类似,集成度高,同时也比STM32单片机更经济便宜。Wemos D1开发板实物图如下图所示:

在这里插入图片描述

                图2  wemos D1开发板

(2)此开发板芯片为ESP8266(32位),缓存比Arduino Uno大,并且包含11个数字IO引脚以及1个模拟输入引脚,使用Micro-B type USB线进行连接。ESP8266EX 内置超低功耗Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,工作电压为3.3V,闪存为4Mbytes,支持实时操作系统(RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发,ESP8266模块可以独立于Arduino等开发板,作为一块独立的开发板使用。它拥有GPIO、I2C、ADC、SPI、PWM等模块,可以用它做大多数MCU能做的工作,且性能甚至远超多数MCU。

二、设计步骤

2.1 电机控制前进后退左右转和端口初始化的实现
本次使用的是L9110s步进电机控制器,该模块供电电压为2.5V-12V,其GND接到开发板上的GND引脚,IA1\IB1\IA2\IB2外接开发板IO口[6],如下图所示:
在这里插入图片描述

                  图3 L9110s步进电机

(1)宏定义端口
在编写控制代码前,我们要先宏定义出电机前进后退和左转右转在开发板上对应的引脚,代码如下:

#define zhuan1 D6
#define zhuan2 D7
#define dong1 D4
#define dong2 D5

(2)初始化串口
首先我们要创建一个无类型串口初始化函数,把宏定义的引脚设置为输出引脚,代码如下:

void initLs() {
  pinMode(zhuan1, OUTPUT); //设置引脚为输出引脚
  pinMode(zhuan2, OUTPUT);
  pinMode(dong1, OUTPUT);
  pinMode(dong2, OUTPUT);
}

(3)前进后退和左转右转
首先创建出小车前进后退,左转右转和停止的函数,然后再在函数里设置转向的高低电平,比如小车左转向时,对应引脚设置为高电平,相反转向的引脚设置为低电平,同理,小车回正,前进后退,停止也是如此[7]。代码如下:

void you() {                 //右转向
  digitalWrite(zhuan1, HIGH);//高电平
  digitalWrite(zhuan2, LOW);
}
void zuo() {                   //左转向
  digitalWrite(zhuan1, LOW);
  digitalWrite(zhuan2, HIGH);
}
void  zheng() {                 //回正
  digitalWrite(zhuan1, LOW);
  digitalWrite(zhuan2, LOW);
}
void qian() {                   //小车前进
  digitalWrite(dong1, LOW);
  digitalWrite(dong2, HIGH);
}
void hou() {                      //小车后退
  digitalWrite(dong1, HIGH);
  digitalWrite(dong2, LOW);
}
void ting() {                     //小车停止
  digitalWrite(dong1, LOW);
  digitalWrite(dong2, LOW);
}

2.2 WiFi模块的初始化
(1)定义WIFI库
在编写WIFI连接的代码前,我们要定义一个特有的WIFI库,从而才能调用相应的函数[8],代码如下:

#include <ESP8266WiFi.h>

(2)初始化WIFI
① 定义我们要连接的WIFI帐号密码并且声明端口号,代码如下:

char* ssid = "chendan520";       //定义WIFI
char* passwd = "chendan2016";    //输入WIFI密码
int port = 8888;                //设置端口号
WiFiServer server(port);         //端口接入WIFI

② 创建一个WIFI连接函数,代码如下:

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

2.3 超声波测距
(1)超声波测距原理
① 超声波传感器先发送一个信号,信号遇到障碍物后就会被反弹回来再被超声波传感器接收,接收到的高电平持续的时间就是超声波从发射到接收到的时间,所以测试的距离=(高电平时间*声速)/2;再将距离单位换算成厘米,所用函数为:distance=pulseIn(接收信号的引脚echo,HIGH)/58,声速为340m/s[9-11];
在这里插入图片描述

             图4  超声波测距原理图

② 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收,电路板上有4个引脚:VCC(正极),Trig(触发),Echo(回应),GND(接地)。

在这里插入图片描述

                  图5 超声波传感器

(2)测距编程实现
超声波测距的主要代码如下[12]。

#define Echo D2  //宏定义“回应”引脚
#define Trig D8  //宏定义“触发”引脚
long getTime() {     //超声波测距
  digitalWrite(Trig, HIGH); //接受一个高电平
  delayMicroseconds(10);  //持续10秒
  digitalWrite(Trig, LOW); //再变成低电平
  return pulseIn(Echo, HIGH); 
}
void initChaoshenbo() {    //选定超声波管脚
  pinMode(Echo, INPUT);
  pinMode(Trig, OUTPUT);
}

2.4 setup函数所需要写的代码
该函数为初始化执行函数,主要内容是以上提到的各个初始化函数,代码如下:

void setup() {                       
  // put your setup code here, to run once:
  initLs();      //初始化电机管脚
  Serial.begin(115200); //设置波特率
  initWifiSta();   //连接WIFI
  initChaoshenbo();  //选定超声波管脚
  server.begin();
}

2.5 loop函数所需要写的代码
该函数是循环执行函数,主要内容如下:

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(cmd); //打印cmd的值,测试cmd输出是否正确
      dis = getTime() / 58;    //测试超声波距离
      if (dis < 10) {            //当小车遇到障碍物时,若距离小于10厘米,则执行下一条指令
        hou();        //小车后退
        delay(200);   //持续200毫秒   
        ting();        //然后小车停止
      } 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.6 安卓app模拟器
(1)Android开发环境搭建
首先下载编程软件–eclipse ADT,如图6所示,解压。然后再导入程序包,最后在代码中编写我们要连接WIFI的ip地址[13-14]。如图7所示。

在这里插入图片描述

                    图6 Eclipse ADT 

在这里插入图片描述

                 图7  WiFi的IP地址修改

(2)把程序跑在模拟器上
安卓app模拟器和小车怎么连接起来的关键是adb软件,打开电脑的命令提示符cmd,需要进到我们存储adb位置上,然后输入adb connect 127.0.0.1:62001(62001是夜神模拟器的端口号,模拟器不一样可能端口号也不一样),这样我们就能把APP跑进去,然后就能控制小车了!如图8,图9所示。
在这里插入图片描述

               图8 adb连接模拟器

在这里插入图片描述

                图9 安卓app界面

三、项目演示效果

我们将所有模块进行代码整合,然后将程序烧写到Wemos D1开发板上,再使用串口助手来调试经改装后的小车前进后退和左转右转是否正常。如果正常,再测试超声波测距,我们将一障碍物放置于小车正前方,然后点击app模拟器前进按钮,当小车与障碍物的距离小于10cm时,如果小车后退然后停止,表示测试成功。硬件实物如下图所示。
在这里插入图片描述

                      图10 小车实物图

同时也可以使用12v电池给小车供电,让小车脱掉数据线自己动起来,但是由于小车耗电量大,所以我们尽量使用小型充电宝来给小车供电,从而达到更佳的效果。

四、结语

避障小车是一种智能设备,可以自动感知前方的障碍物,并通过朝另一个方向转动来避开障碍物。避障小车的应用不受限制,现在大多数军事组织都使用它,这有助于执行许多士兵无法完成的危险工作。通过本次基于C语言与Java的WiFi避障小车的设计,我们对嵌入式系统设计的整个过程有了初步的了解,我们首先要需求分析,然后分模块设计,再进行代码整合,最后最重要的是对项目进行调试,在调试过程找出错误点,寻求更优的,更符合设计目的方案。这个过程需要自己动手拼装制作,这样完成后会有满满的成就感,小车作为一个基本的开发平台,可以在上面搭建各种传感器,自定义功能,相对于四旋翼等安全系数高,技术能力要求较低,适合初学者,这样为以后做更复杂的嵌入式系统设计项目奠定坚实的基础。与此同时,本次项目多了个WiFi的功能,它要有一定的网络知识储备,需懂得串口通信,网络协议,服务器与客户端的连接等,对于开发其他一些连接家用WiFi的智能家居项目具有很好的帮助。.

五、参考文献

[1]陆蕊. 基于单片机的智能小车系统的设计[J]. 电子世界,2017(8):166-167.
[2]陈梦婷,胡白燕,黄璨.基于单片机的智能循迹避障小车的设计与实现[J].智能机器人,2016:47-51.
[3]陈海宴.51单片机原理及应用[M].北京:北京航空航天大学出版社,2010:62-65.
[4]高枫.基于ARM的智能寻迹小车的设计与实现[D].山西:中北大学,2012:6.
[5]陈海洋,李东京.基于单片机的智能循迹避障机器人小车设计[J].科技风,2014(20):99.
[6]钱栢霆,李娟.基于单片机的循迹避障智能小车系统的设计[J].电子制作,2015:25-26.
[7]寸巧萍.基于Mega16单片机的智能小车循迹避障设计方案[J].电子世界,2016:45-46.
[8]顾群,蒲双雷.基于单片机的智能小车避障循迹系统设计[J].数字技术与应用,2012(5):23.
[9]蔡莉莎,曾维鹏.基于人工智能路径规划系统的智能小车的设计与实现[J].电子世界,2016(18):112-113.
[10]朱思敏.自循迹智能小车控制系统的设计与实现[D]. 浙江工业大学,2013:16-17.
[11]徐少朋.基于Android开发的智能小车路径规划[D]. 天津大学,2014:7-8.
[12]吕闪,金巳婷,沈巍.基于STM32的循迹避障智能小车的设计[J].计算机与数字工程,2017:549-552.
[13]朱丹峰, 葛主冉,林晓雷.基于Android平台的无线遥控智能小车[J].电子器件,2013:408-412.
[14]俞文武,程恒文,金天宝等.基于STM32的智能跟踪小车的设计[J].山东工业技术,2017:294-296.

避障循迹智能2WD车,这个机器人车不是什么新鲜事。就它的作用而言,标题全部显示(或看视频),所以我不会详细介绍。 先看下这个避障+循迹智能小车的实物图吧: 步骤1:零件 这是我的机器人车间(1级)的标准套件,您可以在线查找零件(保险杠除外)。 包含: 2WD汽车底盘带2个电机,脚轮和6v电池座(为定制模块添加额外的孔) 定制的保险杠附加传感器 9V电池座 Arduino Uno兼容板 电机防护罩 超声波传感器 2 x红外传感器 迷你面包板 20 x线扎 8 x 1in方形泡沫胶带 20 x MF 20厘米Dupont连接器 10 x MM 20厘米Dupont连接器 USB到迷你USB电缆 4 x AA电池 1 x 9v电池 6v电池座的魔术贴(电池不时弹出) 附加的平头M3 7mm和10mm螺丝用于保险杠和9v电池座。 精密螺丝刀组 虽然电机连接器使用杜邦连接器进行预焊,但开关仍需要焊接。下一个版本的计划是拥有所有杜邦连接。没有焊接!此外,所有的平头螺钉孔都是反沉的。 步骤2:组装汽车 组装小车主要包括两个部分 第1部分:底盘,电机,电机屏蔽和Arduino(或兼容)板 第2部分:传感器 详细的过程详见附件!(都是图片教程哦!) 步骤3:编译和上传 将附件相关代码下载到您的Arduino IDE中,根据您的方案进行编译和上传。 1)障碍物避免 2)追踪 步骤4:运行 如果您已经按照我的电线连接和引脚分配,障碍物回避和追踪的2个代码应该运行。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值