美文网首页
微信控制树莓派小车

微信控制树莓派小车

作者: Natsu想当科学家 | 来源:发表于2018-09-01 15:33 被阅读0次

    介于毕业设计刚刚结束,这里算是一个收尾总结一下这次毕业设计用到的itchat这个库,并说明来控制树莓派的方法,为各位读者提供一种新的远程控制的方式。

    先来说一下,树莓派是如何来控制小车的,先来说下我给小车加装的功能,移动(前进,后退,左拐,右拐),LED通断,黑线循迹,移动所需要的硬件为:L298N,4个电机,LED灯的通断需要发光二极管,黑线循迹需要(D80NK漫反射模块),树莓派控制小车主要是通过GPIO(General Purpose Input And Output),英文翻译为通用输入输出端口,可以通过他们输出高低电平或通过他们读入引脚状态我们就是通过他们来控制树莓派小车的,这里树莓派的引脚是不够的我们需要为他加装拓展版。这里我们可以看下树莓派官方给的引脚的定义。


    L298N:

    这里我们不讲如何接线,直讲一下我们是如何控制它移动的,L298N有四个引脚,作为逻辑输入端,同时L298N又有两个逻辑输出端即为 OutPutA,OutPutB,这里我们把同侧的两个电机并联分别接入OutPutA,OutPutB.

    下图为逻辑输入端与电机运动方向的关系:

    先来讲下前进的控制:

    此函数为控制小车前进的代码,小车使用BCM编码,按照上图的输入端与电机与电机运动方向的关系图,只需对IN1输入高电压,IN2输入低电压,IN3输入高电压,IN4输入低电压即可,这样就做到了,左侧电机前进右侧电机前进,小车前进,后退道理同理。

    小车左转:

    对于这样的小车我们真的要思考下怎么让其左转,这里我们可以借鉴坦克左转的道理即为履带差,所以我们可以让左侧电机正向旋转右侧电机反向旋转即为实现了小车的左转,右转道理同理,函数如下。


    LED通断:

    一个LED光较弱,我们可以将三个LED并联,将LED长的一端拧在一起,将LED短的一端拧在一起,并将母对母杜邦线或者公对母杜邦线的母的一头或者公的一头消去将铜线分别缠绕在并联在LED的两个头上,即可。

    LED灯开始的时候处于低电压状态只需要在我们输入开大灯的时候将其调至高电压状态即可完成LED的通断。


    D80NK漫反射模块:

    先来介绍下D80NK的特性,众所周知,黑色是吸收光的颜色,其他颜色是反射光的颜色,当D80NK遇到非黑色线红灯亮起,此时处于一个高电压状态,当D80NK漫反射模块遇到黑色线,此时红灯熄灭,处于一个高电压状态,我们可以通过这个特性来做碰撞检测,下面是实现黑线循迹碰撞检测的代码:

    它的基本逻辑就是如果黑线在D80NK中间即为左右都不碰触黑线,左右都处于低电压状态此时,前进,如果左边碰到黑线,此时左边的D80NK处于高电压状态,说明左边碰触到了黑线,此时只需要调用向左移动的函数即可,右边碰触到黑线同理,下面视频即为实现了黑线循迹的视频:

    寻黑线测试视频


    所有的功能已经介绍完了,下面就来介绍一下如何接入树莓派小车以做到远程控制,这里接入的方式有很多,比如通过ZigBee协议,另一种是通过自己搭建一个服务器通过开发一个手机app来接入,但是这些都不够简单也不具有普适性,试想一下如果可以用微信控制,比如小车在四川我在山东,小车已经联网,我只需要在微信上发送一个“开大灯”,就可以控制LED的通断,发送一个“前进”就可以使小车前进,这样就真的即具有普适性:人人都有微信,操作简单,有真正做到了远程控制,有这样一个东西是不是就太酷了?

    这里的酷是itchat为我们提供了一种思路,如果物联网强调是万物互联,那么微信这种简单人人都有的东西能否成为万物互联的接口呢?

    下面来介绍下itchat库,itchat这个库是Python关于微信的一个库,通过这个库具有很多的功能,比如说对公共账号,好友,群聊的整体获取,如果做到这个就可以实现好友云词分析,好友分析等来实现微信分析,这里推荐大家一篇教程:https://blog.csdn.net/lee20093905/article/details/79052795/一篇很好的通过itchat来做微信分析的教程。

    还可以实现对于微信消息的接收,发送,分析,微信的小车就是利用了这一点来实现了远程的控制,前段时间朋友是做BI(数据分析),他有一个需求是:

    用itchat就可以满足他的需求,这样就可以聊天记录专成excel就可以很方便的来进行需求分析了,具体教程如下:https://wxpy.readthedocs.io/zh/latest/index.html

    这里po一篇我看过讲itchat库最详细写的最好的教程,感兴趣同学可以学习下:

    https://segmentfault.com/a/1190000009420701

    好了,不扯别的了直接说下思路上一下代码:


    登陆:

    itchat提供了一个登录的方法,itchat.auto_login(enableCmdQR=2,hotReload=True)介于我是在MAC终端远程连接的树莓派,所以需要在终端形成二维码,enableCmdQR=2即位在终端形成二维码,如果不想每次登陆都扫描二维码可使用参数hotReload=True该方法会生成一个静态文件itchat.pkl,用于存储登陆的状态。


    消息处理:

    首先我们要想一下我们要发给谁消息,然后让树莓派小车做出响应,这里我们可以发送给文件助手,具体代码如下这里使用的是搜索好友的方法:

    接下来要判断的就是我们收到的消息是语音还是文本消息,如果收到的是语音的话,我们将其下载下来并使用百度的STT将其转换为文本,如果收到的文本的话,我们可以通过python的find方法来做一下判断,这里我们以前进和开大灯为例,如果我给微信文件助手发送的字符串是开大灯,即为find方法不返回-1,此时为关键字,触发小车做出反馈:

    这个时候只需要将电压置于高电压状态,小灯即被点亮。

    在举例前进:

    微信文件助手收到“前进”,这个时候需要给小车即调用前进函数,此函数被调用两秒即为小车前进两秒,两秒后执行停止命令,电机停止运转,小车停止。

    同理黑线循迹依然如此。

    再次强调itchat给我们很好的提供了一个接入互联网智能设备的方法,我们可以从此出发来连接万物,可能用文字来描述不太清楚,下面给大家看下测试视频:

    微信控制树莓派小车测试视频


    但是只是有文字还是不够智能,我们希望一种更为智能的方式说白了就是懒以及更人性化的东西来远程控制,下篇文章就会对这两种方式作出介绍即为STT(Speak To Text),TTS(Text To Speak),语音识别,语音反馈。

    实现这两种东西的意义就是我对文件助手发送语音例如“打开大灯”,他会在执行打开大灯命令的同时,通过3.5mm的音频输出设备给我们一个反馈例如会说“好的,以打开大灯”。

    以及语音聊天,语音聊天的实现方式即为使用了图灵机器人,然后再使用百度的TTS将图灵机器人回复的文本播放出来,这样就做到了语音聊天,这些都会在下篇做出更新。

    最后,现在百度的DuerOS以他方便的硬件和系统,已经有人做到了使用DueroS来控制家居设备,比如坐在沙发上,大喊“小度,小度,打开空调”,无需通过微信而是通过拾音器来做到这一点,这对于未来连接万物以及未来智能设备提供了一种新的思路。


    本文纯原创,6月写完之后发布于自己的公共账号,图片所示名字即为公共号的id,转载使用请联系作者,侵权必究。

    相关文章

      网友评论

          本文标题:微信控制树莓派小车

          本文链接:https://www.haomeiwen.com/subject/kjfuwftx.html