聚丰项目 > 基于物联网的智能小车平台搭建
本设计旨在设计一款基于物联网的智能小车平台,可以实现通过wifi控制小车,以及可以通过各种传感器对周围环境进行检测以及适当的进行自己的对环境的适应。
jeffc_good
分享jeffc_good
团队成员
常旭磊 创客
小车的硬件搭建是个很复杂的过程,费去了我很多时间,费时间主要是根据手上的仅有的器件,所以就是凑出来的,用了很多胶带,甚至各位客观可以看到上面有牙膏盒的痕迹。所以一步步的介绍搭建的流程不现实,我就将其画成示意图,大概讲一下硬件的分布。总之,我的原则是手上有什么就用什么。
执行器件主要是两个57步进电机,两个大轮子以及一个行李箱的万向轮,两个步进电机驱动器,电源是24V锂电池,其直接给驱动器供电,通过一个电压转换模块,转换成12V给Intel Edison的Arduino供电。两个超声波模块是很常见的HC-SR04 超声波模块,传感器以及控制板就是Grove套件以及Intel Edison套件,小车的车体是一块亚克力板。整个硬件的结构图如下所示,Intel Edison上的接口为Arduino底板上的对应接口。驱动板的使能接口没有连接,可以省两个IO口。
搭建成的小车实物如下图所示:
拼凑完成之后还是感觉挺霸气侧漏的。
从上面看,蓝色电池上面的是蓝牙模块。
驱动器部分的细节,下面是继电器。
这是车后面,两个步进电机还是很清楚的
电池部分,上面的蓝色的方块是24V锂电池,下面的盒子里面是电源转换模块,将24v转换成12V提供给主板。
前面的万向轮
主控板部分,
程序的开始肯定是初始化了,初始化主要包括如下几个步骤:
初始化的部分包括了串口、Wifi、Web服务器、LCD、IO以及定时器的初始化,串口采用Serial 1,也就是Arduino板上的RX、TX两个引脚占用的串口,其主要是打印出一些要查看的信息,这里我连接了一个串口蓝牙模块;无线扫描主要是查看一下周围的无线有哪些,然后连上指定的无线;Web服务器主要是等会的传送Html代码;LCD要显示温度,对其进行初始化;IO根据实际需要进行输入输出的初始化;定时器初始化主要是对Timer1的初始化,其为步进电机提供脉冲,周期是10ms。
主程序如下所示:
前面主要是包括读取模拟量值,并进行相应的显示以及控制。温度值是将环境温度显示在LCD以及网页上;亮度值控制小灯是否亮灭,环境足够亮时熄灭小灯,环境比较暗的时候打开小灯;声音控制蜂鸣器是否发声,当周围声音很吵的时候表示有人闯入(模拟监控)发出警报声,并至少延迟一秒钟,家里没人的时候可以用来吓唬小偷。超声波传感器主要是来检测前后距离,当低于安全距离的时候改变运行方向,防止碰撞到墙壁或其他障碍物。在之后就是主要的在服务器上运行网页的实现了,其是控制的主体,其主要包括建立客户端,读取客户端请求内容,并发送网页内容。其根据客户端的返回内容主要包括启动、停止、前进、后退、左转以及右转。
程序编写
程序主要讲几段,以下片段是判断周围环境,val1是判断亮度,val2是判断声音大小,length1以及length2是判断前后安全距离的判断。
下面一段是判断web客户端返回的请求中的关键字是否有返回相应的控制类的字符,比如说是否返回了GET /On,如果有,就是启动小车。
步进电机的脉冲是在定时器中断函数里面的,其到时候就将两个的PUL引脚进行反转,形成脉冲。当然,其速度不可控。
这个程序段是超声波的驱动函数,num是对前后两个超声波的判断,其为1的时候代表的前面的超声波,其为2的时候代表驱动后面的超声波。先给trig至少10us的拉高,然后拉低,这时候Echo在返回超声波的时候是会拉高的,并且拉高时间跟距离是成正比的关系,因此需要记录这段拉高的时间。duration = pulseIn(echo, HIGH, 60000)这句会读取引脚上的高电平脉冲,最大脉冲时间间隔为60毫秒,并且把结果赋值给duration变量
调试与实验
将下载的执行文件设置成开机启动项后就可以开机后自动等待它的运动了。当然开始主要是通过开关给系统上电了,Edison的启动过程还是挺慢的。我用串口蓝牙,可以通过手机上的蓝牙调试助手查看系统打印的信息,并能最终得到Edison得到的IP号码。蓝牙接收到的信息如下所示:
在浏览器输入IP:8080(这是我定义的端口号),然后就可以进入网页控制页面了。
点击turn on就是启动小车,点击turnoff就是关闭小车,turn on状态下是可以控制小车运动方向的。这时候蓝牙界面是可以显示客户端的请求信息。
实验总结
因为Intel Edison的缘故,竟然第一次接触了Arduino的开发,怪不得很多人喜欢用Arduino,确实是因为很简单,无脑就能完成项目的实现。所以很happy的采用这种简单的方法进行试用以及功能验证。上手是快,但是随着开发的深入,也会发现,其实采用这种方法的局限性很强,过于依赖提供的库,而且很多功能无法实现。当然也可能是自己并不是很了解这些库。总之,通过Arduino的开发过程是个很开心的过程,但是如果深层次的学习技术我感觉还是不能这么玩。
我的这次试用的项目的实现,总体来说是实现了预期的各种功能,但是功能的实现效果一般,当然跟硬件的胡乱拼凑有关系,但是也是跟很多地方设计还是不是很精确。所以接下来需要进行深入的学习和开发,希望能够打造出一个灵活好用的物联网智能小车平台。
整体来说,这次提供的试用套件用起来很方便,资料齐全,而且定位准确,其丰富的资源以及多样的开发环境,可以满足各个层次的发烧友的需求,可以像我试用这样简单的玩,也可以很高端的开发。Intel Edison模块小巧的外形以及强大的处理运算能力是对当下物联网等行业很准确的定位,而Arduino底板以及其相应的开发环境使得整个的开发难度可以降到非常低。Grove套件则能使得玩法各种各样,总体很满意。当然,由于其IO引脚数等相对较少的缘故,我认为其无法满足大的开发项目的需求。