基于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);//高电平