制作感测障碍的瓦力号智慧自走车

易心STEAM编程
关注

瓦力号是一台自走车,可利用 WiFi 联机以及 IR 红外线控制,其主要是透过 NodeMCU 这块主控板来实现 WiFi 联机控制。

在这个专案里将program 刻录进 NodeMCU,利用 WiFi 连网,并设计一些供用户按的按钮,用来操控自走车。

材料

1. 伺服马达:伺服马达是回受控制系统的马达,相较于「步进马达」则是非回受控制系统,两者的差别在于准确度。

2. NodeMCU 主控板:使用 NodeMCU,主要是因为需要它上面搭载的 ESP8266 module,可以用来实现 WiFi 联机。

3. IR receiver: 利用 IR transmitter 发送讯号去给receiver 控制瓦力号的马达,使其可以做出前进、后退以及左右转弯的动作。

4. HC-SR04 超音波传感器:将这个 module 黏在瓦力号的前身,利用超声波原理,让瓦力号能够在与障碍物接触前,在预先设定的某个距离外,就会自动停下来,不会整个撞上去。

实作步骤

1.主控板的选定:

当车子组装完毕之后,要给车子装上控制板,由于希望能藉由 WiFi 联机来控制瓦力号,因此最后采用了 NodeMCU 这块主控板。

2.让轮子转动:

NodeMCU主控板控制马达的程序已经分享到Github上,可以从这里下载。

https://gist.github.com/Ryanhu1015/855ce5dc9b403c91e5808840b4812fd8#file-button_practice-cpp

这样车子就可以动起来,顺利直走了。

ESP8266 WiFi联机控制

轮子会动了,车子会跑了,接下来要做的就是用 WiFi 联机去控制这台车。这里分成两个部分来说明:

1. ESP8266 连结公司 WiFi AP:

参考程序可以从Github上下载,地址如下,

https://gist.github.com/Ryanhu1015/ce34c5ce25119d9443225ee06f167535#file-esp8266_wifi_connection-cpp

这样 WiFi 联机就变得轻而易举,可以利用console 去观察 ESP8266 WiFi module 到底有没有乖乖的连上WiFi,如果还没就会看到不断有「.」出现在同一行。

2. User interface:

这个部分的程序代码可以从这里下载,

https://gist.github.com/Ryanhu1015/e0963d6dda8e60fccbb3249b196eacd0#file-esp8266_wifi_server-cpp

若要开启 server,势必要先连上 WiFi ,才能回传 server 的 IP 位置。其过程主要是当 WiFi 先连上后,将 ESP8266 内建的 server 唤醒,唤醒后让他回传一个 IP 位置(即 ESP8266 server 的位置)到console ,因为MAC 和 ESP8266 的 IP 位置都是同一个 AP 给的(即 MAC 和 ESP8266 是连到同一个 WiFi)所以直接在 chrome 上打上显示在 console 的 IP 位置,就会连到 ESP8266 的 server。

接下来,「WiFiClient client」用 client 这个变量去做 server 端相关的活动,例如检查它到底可不可以用,还有很重要的是用 client.print() 去实作简易的网页。

最后也是最容易让人困惑的,就是中间 request 变量在做的事情。故事是这样的,request 是来自你在 webpage 上面做了一些事情(比如说你按了某个 button)后, address 上有变化,而这个变化再利用 HTTP GET 的方式送出一个 request 给 server, server 就会去做parse 的动作,如果有,server 当然就做出相对应的响应,没有就没反应。

红外线传感器的架设

首先是把 library 装了起来(这个 library 完整到完全不用自己写多少 code,连 decode 的部分都帮 user 写好了),接着再很快的把 IR receiver 跟 ESP8266 的脚接一接,然后 program 所需要的功能,详细程序代码可从这里下载,

https://gist.github.com/Ryanhu1015/eb80cfb76d863d67832b530fc7a13d43#file-ir_receiver-cpp

这里主要是透过R_FD、R_BD、L_FD、L_BD 分别控制瓦力号轮子的四个 pin 脚,利用 PWM 的 funciton – analogWrite 去设定相对应的参数,使其可以做出前进后退以及左右转弯的动作。

再来就是 IR communication 的部分,在 main loop 里面可以看到,irrecv.decode(&results) 如果回传 true(表示 receiver 有吃到东西),就进去找相对应解碼后的码到底是符合哪个,如果符合某个码,就 trigger 某件事。最后再用 resume() 这个 function 去清掉本次读到的 IR data。

HC-SR04超音波传感器

最后,在瓦力号前方装了一个超音波传感器,利用超声波原理,让瓦力号碰触到障碍物之前,就会在我设定的某个距离外自动停下来,不会整个撞上去。

成果展示

注*车体组装部分没有描述,这部分就留给读者自己去完成。

作者:Ryan Hu

更多精彩文章请关注微信公众号?易心Microbit编程

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存