当乐高遇见arduino:近场控制之蓝牙控制

当乐高遇见arduino:近场控制之蓝牙控制

很久很久以前,丹麦有一个国王Harald Blatand,将纷争不断的各丹麦部落统一成为一个完整的国家。国王有个绰号叫“blátǫnn”,翻译成英文就是bluetooth。在北欧古文字中,国王名字的首字母“H”“B”写法与现在不同:

当乐高遇见arduino:近场控制之蓝牙控制

没错,这就是蓝牙符号以及名称的由来

曾经的通信巨头索尼爱立信在1994年创制蓝牙通讯技术时,就借了这个彩头。

时光荏苒,索爱已走下神坛,而“蓝牙”却再次完成了“统一”,成为通讯协议的全球标准。

昔日的近场控制霸主红外遥控,技术成熟、成本低廉、应用广泛,但红外传输却有两个无法超越的弱点:

        1.极强的指向性与极短的通讯距离;

        2.单向通讯(除非同时配备发射及接收模块)

红外通讯双方要么只能发出指令,要么只能接收指令。蓝牙传输则不同,在信号覆盖范围内,无需指向,信号甚至能穿墙;通讯设备主从状态随时切换,信息可收可发。

当乐高遇见arduino:近场控制之蓝牙控制

注:对比中忽略红外点对点文件传输情形

这种自由与便利,让蓝牙应用迅速覆盖了我们日常生活需求:蓝牙耳机、蓝牙鼠标、智能手环甚至电视或智能盒子的遥控器。蓝牙几乎以电子设备标配的形式融入了我们的日常生活。

乐高也不例外,WeDo和EV3套件都支持蓝牙,WeDo套件甚至只能通过蓝牙连接编程控制。Arduino的板子虽默认不带蓝牙功能(Arduino BT除外),但都可方便的进行蓝牙扩展。

 

一起来看下我们今天的主角:

HC-05    主从一体蓝牙模块

 

当乐高遇见arduino:近场控制之蓝牙控制

HC-05 ZS-040 蓝牙模块

 

这款模块由分线板(breakout board)和蓝牙插件板(daughter board)两片电路板拼成。分线板由于自带分压模块,可适应3.6V~6V电压输入,但蓝牙插线板通讯接口电压被限定在3.3V,过高的电压输入有可能烧坏插件板(别问我是怎么知道的)。

 

 

1.0 接口及连线图

 

RX为蓝牙插件板信号输入接口,TX为信号输出接口,两者的工作电压均为3.3V。基于Arduino对高低电平的定义,高于3V即可被识别为高电平,TX接口0V/3.3V的状态切换可以被识别为高低电平切换,所以TX接口可直接与arduino相连。但RX作为插件板输入端,必须要遵循3.3V的输入限制,在使用时需要对arduino输出的电平信号做降压,降压原理就是物理中学到的分压定律:

当乐高遇见arduino:近场控制之蓝牙控制

连线原理图及面包板连线图

 

 RX与GND之间分得2V/(1V+2V)*5V≈3.33V电压,满足插件版的电压需求。

当乐高遇见arduino:近场控制之蓝牙控制

 

 

2.0 蓝牙设置

 

设备连线完成,并不意味着蓝牙模块可以直接使用,此时蓝牙设备的各项参数如通信端口、连接密码、主从状态等都处在出厂状态,我们需要结合需求进行配置。各配置参数断电仍可保存,所以只需设置一次即可。

板子通电后默认直接进入工作状态,想进入设置模式,则需要先按住蓝牙板上的SWITCH按钮,再通电,板子上的蓝色指示灯变为2S为周期的慢闪则表示进入设置模式。

当乐高遇见arduino:近场控制之蓝牙控制

配置模式

配置过程要依次更改通信端口、设备名称、连接PIN码、主从状态、校检等参数,满足后续程序需求。配置过程可利用arduino的串口转发来实现,arduino将我们输入到串口监视器内的命令转发给MC-05,完成设置。

 

设置采用AT+COMMAND的方式,常用设置命令如下:

当乐高遇见arduino:近场控制之蓝牙控制
如果设置成功,会返回OK的提示:

 

当乐高遇见arduino:近场控制之蓝牙控制

设置完成后重新通电,板子即按照新配置开始工作,并且可被手机等设备搜索及匹配:

当乐高遇见arduino:近场控制之蓝牙控制

3.0 建立与手机的通讯

 

想要实现蓝牙控制,首先要能与设备对话。这里我们需要一款手机软件:Bluetooth Terminal。下载安装后,打开软件查看周围的蓝牙设备,选择“LEGOINO”后,即可完成连接。

当乐高遇见arduino:近场控制之蓝牙控制
于是我们拿起手机,与近在咫尺的arduino对话:

 

当乐高遇见arduino:近场控制之蓝牙控制

当然这些交互都是我们设定好:

当乐高遇见arduino:近场控制之蓝牙控制

程序截图

整个过程中由arduino实现信息转发及判定:将串口监视器内的信息转发给蓝牙模块或将蓝牙模块收到的信息显示在串口监视器中;若收到程序预设的指令,执行对应操作。

当乐高遇见arduino:近场控制之蓝牙控制
指令传播流程图

 

 

4.0 控制

 

通信链路打通了,与控制就一步之遥了,只需修改类似于“hi”这样的关键词以及对应的程序执行代码即可:

当乐高遇见arduino:近场控制之蓝牙控制

代码截图

 

 测试一下:

当乐高遇见arduino:近场控制之蓝牙控制

继电器控制太简单了,我们换一个颜色识别模块:

当乐高遇见arduino:近场控制之蓝牙控制
色彩识别模块,返回颜色的RGB值

 

识别过程:

当乐高遇见arduino:近场控制之蓝牙控制

我们看一下识别出来的颜色:

当乐高遇见arduino:近场控制之蓝牙控制

5. 出其不意的送礼物

 

 

能远程控制开关、返回识别颜色,就能进行更复杂的功能。

圣诞快来了,如果你想给他/她送祝福,还想出彩,那可以试下乐高~

于是又双叒叕顺手做了一个乐高装置:

当乐高遇见arduino:近场控制之蓝牙控制

当乐高遇见arduino:近场控制之蓝牙控制

乐高云梯

这个设备可以方便的隐藏在盒子里或者显示器后方:

当乐高遇见arduino:近场控制之蓝牙控制

 

快去给她/他一个小惊喜(吓)吧~

 

提前祝大家圣诞快乐~

当乐高遇见arduino:近场控制之蓝牙控制

—————————————————————————————————

篇后语

 

不知不觉,秉承“乐高结构+Arduino功能”的思路模式,《当乐高遇见arduino系列》文章已经写到第五篇了,分别从:LEGO arduino控制板、乐高舵机控制(齿轮组变速及转动量映射)、物联网控制、红外控制、蓝牙控制等角度切入,介绍了实现的原理与方法思路;其中也穿插讲了PM2.5微尘探测器、W5100网络扩展板、继电器、红外设备、蓝牙模块、颜色识别等模块使用,力图为大家呈现出两者的独特魅力以及在结合应用过程中碰撞出的火花。

认真阅读的朋友不难发现,整系列的文章都是基于“Arduino探测器—arduino—乐高电机—乐高结构”思路,并未使用乐高的探测器,也未使用非乐高的动力结构,接下来的会陆续推出不同的专题,从不同的角度切入,努力为大家带来更丰富的应用场景和更好的文章。