使用ROHM附加板,通过Spresense轻松实现传感器检测!
第1回:什么是Spresense?
第2回:使用Spresense制作高分辨率音乐播放器!
大家好,我是吉田!
这是使用索尼推出的Spresense进行电子制作的第3篇,这次我将利用该开发板是基于开放式体系结构这一特点,使用附加板添加一些功能!
ROHM已经推出了跟Spresense完全匹配的附加板,我将使用ROHM的附加板,在短时间内简单地制作一个可以进行传感器检测的设备!
本项目所需部件
・小型锂聚合物电池(400mAh)和电源插座
(※注:请小心处理,使用风险自负)
・Micro USB 数据线
・Micro SD 卡
・日本百元店就能买到的外壳
本项目的流程
1. ROHM附加板介绍
2. 使用传感器附加板测量气温和海拔
3. 制作气温、海拔测量设备
4. 总结
1.ROHM附加板介绍
所谓的附加板,就是一类仅通过插入Spresense的GPIO引脚和端口,就能实现功能添加的电路板的总称。ROHM已经推出了支持传感器相关部件的附加板SENSOR-EVK-701和支持Bluetooth Low Energy的附加板BLE-EVK-701。
我们先来看看这一块传感器附加板。该附加板已经内置了3个传感器,它们分别是加速度传感器、气压传感器、地磁传感器。
因为已经内置了这些传感器,所以只需要连接Spresense,再运用ROHM提供的库文件,就可以开始使用了。
另外,该附加板上也设有GPIO引脚,所以只需要在引脚上插入ROHM推出的传感器评估套件等,就可以轻轻松松地完成传感器的添加。
话不多说,接下来我们就来体验一下这一块传感器附加板。
先将传感器附加板插入Spresense的主板上的GPIO引脚,具体位置见下述图片。(如图所示,附加板的5个引脚要在GPIO的下方)
仅仅这一步,就可以使用Spresense实现传感器检测了。
接下来,在下述ROHM官网上,下载传感器的库文件。
https://github.com/RohmSemiconductor/Arduino
将下载下来的库文件群组保存在Arduino文件夹下。
我们先进行初步测试。双击气压传感器的BM1383AGLV.ino,这样Arduino IDE就会自动启动,然后将Spresense连上电脑,加载Sketch。
之后,打开串口监视器,怎么样?界面上显示出气压(hPa)和气温(Celsius)的数值了吧?实现气压和温度的测量,就是如此简单。
2. 使用传感器附加板测量海拔
通过初步测试,我们已经确认到传感器附加板连接成功,可以正常工作了。接下来就要用到各类传感器,进行稍微具体一点的测量。
首先,基于刚刚用到的气压传感器,简易地测量一下当前所在地的海拔。
可以利用下述公式,根据气压计算海拔,我们先要将相应的值代入公式。
在Arduino IDE中编辑下述内容。
altitude (m) = ((pow((标准大气压 /实测大气压), (1 / 5.257)) – 1) * (标准温度 + 273.15)) / 0.0065
这里用到的标准大气压是1013.15hPa,标准温度是15℃。所以,要在刚刚运行的BM1383AGLV Sketch的基础上,在loop中添加下述黄色部分内容。
/** altitude計算をloop内に追加 **/ void loop() { byte rc; float press = 0, temp = 0, altitude = 0; volatile float refPress = 1013.15;//高度計算に使用する基準高度での大気圧[hPa] volatile float refTemp = 15.0;//高度計算に使用する基準温度[C] rc = bm1383aglv.get_val(&press, &temp); altitude = ((pow((refPress / press), (1 / 5.257)) - 1) * (refTemp + 273.15)) / 0.0065; if ( rc == 0 ) { Serial.print("ALT: "); Serial.print(altitude); Serial.println(" [m]"); Serial.print("TEMP: "); Serial.print(temp); Serial.println(" [C]"); } delay(500); }
将这一Sketch加载至Spresense,启动串口监视器,就可以开始测量海拔和气温了。这时,我们也可以把Spresense换个位置,确认海拔等测量结果是否会因此发生变化。
3. 制作气温、海拔测量设备
接下来,让我们用Spresense,制作成一个可以测量气温、海拔等信息的可穿戴式设备吧。
因为只需要通过Spresense的主板和电池就能测量,所以用日本百元店就能买到的外壳也可以装得下。当然,也需要留意,确保放进外壳之后,从壳体外面能够看到绿色的LED。
再加上钥匙扣或夹子等附件,就能把它挂在衣服或裤子等上面了。这样,爬山时带着这个设备,就能随时随地测量气温和当前所在位置的海拔等信息了。
在本项目里,我还将Spresense的LED做成了分段发光的式样,这样就可以在爬山等使用场景下,能够知道自己的所在位置是不是到了一定的海拔高度。我这次制作出来的设备,当海拔达到或者超出200m,就会有两个LED发光。
最终完成的Sketch如下,其中浅蓝色部分,也就是控制LED发光的命令,还可以改成当温度上升到某一数值时,就进行显示的命令。请根据您自己想测量的内容和想显示的信息进行调整。
#include #include "BM1383AGLV.h" BM1383AGLV bm1383aglv; void setup() { byte rc; Serial.begin(115200); while (!Serial); Wire.begin(); rc = bm1383aglv.init(); if (rc != 0) { Serial.println("BM1383AGLV initialization failed"); Serial.flush(); } pinMode(LED0, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); } void loop() { byte rc; float press = 0, temp = 0, altitude = 0; volatile float refPress = 1013.15;//高度計算に使用する基準高度での大気圧[hPa] volatile float refTemp = 15.0;//高度計算に使用する基準温度[C] rc1 = bm1383aglv.get_val(&press, &temp); altitude = ((pow((refPress / press), (1 / 5.257)) - 1) * (refTemp + 273.15)) / 0.0065; Serial.print("ALT: "); Serial.print(altitude); Serial.println(" [m]"); Serial.print("TEMP: "); Serial.print(temp); Serial.println(" [C]"); Serial.println(); delay(50); if ( (altitude > 50) && (altitude < 200) ) { digitalWrite(LED0, HIGH); } else if ( (altitude >= 200) && (altitude < 300) ) { digitalWrite(LED1, HIGH); } else if ( (altitude >= 300) && (altitude < 400) ) { digitalWrite(LED2, HIGH); } else if (altitude >= 400) { digitalWrite(LED3, HIGH); } else { digitalWrite(LED0, LOW); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); } }
即使是本项目里面用到的小电池,也能用上好几个小时。因此,强烈建议在春光烂漫的季节里,带上自己亲自制作的小设备,在确认气温和海拔等信息的同时,闲情散步,为您的健康管理添砖加瓦!
4. 总结
在本项目里面,我们用到了ROHM推出的附加板。
只要将附加板插入Spresense,就能测量加速度、气压、地磁的数值,非常方便。ROHM推出的其他传感器也不需要焊接,就可以直接使用。有了它们,使用Spresense进行电子制作的门槛一下子就低了很多,对吧?
此外,这款开发板的功耗非常低,即使是小型电池,也能长时间使用,对于制作移动设备来说,简直是再合适不过了。
下次,我将进一步添加传感器等部件,制作更多的有趣的电子作品。
敬请期待!
(吉田)
本系列连载的内容
第1篇:什么是Spresense?
第2篇:使用Spresense制作高分辨率音乐播放器!
第3篇:使用ROHM附加板,通过Spresense轻松实现传感器检测!(本文)
第4篇:使用ROHM的BLE附加板,通过智能手机玩转高分辨率音乐播放器!
第5篇:使用Spresense相机板制作数码相机!