一、项目介绍(包括设计思路、软硬件介绍等)
本项目是为参加FastBond活动设计的,活动要求项目中必须同时使用ADI和美信的产品。本项目设计了基于微信小程序蓝牙通信的室内环境监测仪,系统使用RSL10开发板实现了采集环境数据:温度、湿度、气压、光照、声音、空气质量指数,通过低功耗蓝牙将采集数据传输到智能手机微信小程序,设计了微信小程序数据展示UI界面。电源系统采用了美信和亚德诺两家的产品,其中美信公司的MAX1551EZK实现太阳能锂电池充电管理,ADI公司的ADP150AUJZ-3.3实现锂电池3.7V~4.2V转3.3V给控制芯片和传感器芯片供电。
二、项目用到的板卡、芯片、模块、仪器、设备等介绍
项目使用的硬件模块如下表所示:
名称 | 数量 | 备注 |
ADP150AUJZ-3.3 | 1 | ADI公司5V转3.3V LDO电源芯片 |
MAX1551EZK | 1 | 美信公司锂电池充电管理芯片 |
RSL10开发板 | 1 | 安森美公司 |
3.7V锂电池 | 1 | 可充电锂电池,满电4.2V |
ADP150是一款超低噪声(9 μV)、低压差线性调节器,采用2.2 V至5.5 V电源供电,最大输出电流为150 mA。驱动150 mA负载时压差仅为105 mV,这种低压差特性不仅可提高效率,而且能使器件在很宽的输入电压范围内工作。ADP150采用新颖的电路拓扑结构,实现了超低噪声性能,而无需额外的噪声旁路电容,非常适合对噪声敏感的模拟和RF应用。ADP150在提供超低噪声性能的同时,并不影响其电源抑制(PSRR)或线路与负载瞬态响应性能。它实现了超低噪声与低静态功耗的较佳组合,使便携式应用的电池使用时间可达到较长。ADP150经过专门设计,利用1 μF ± 30%小陶瓷输入和输出电容便可稳定工作,适合高性能、空间受限应用的要求。它可提供1.8 V至3.3 V范围内的14种固定输出电压选项。短路和热过载保护电路可以防止器件在不利条件下受损。ADP150提供5引脚TSOT和4引脚、0.4 mm间距WLCSP两种小型封装,是适合各种便携式供电应用的较小尺寸解决方案。
MAX1551是首款USB/AC适配器双输入Li+电池充电器,SOT23封装,无需外部FET或二极管,SOT23封装、双输入、USB/AC适配器、单节Li+电池充电器。
MAX1551通过USB和AC适配器电源为单节锂离子(Li+)电池充电。它们不需要外部FET或二极管,可以接受最高7V的输入电压。片上温度限制简化了PCB布局,通过优化充电速率,可以在电池状况和输入电压处于最糟糕的情况下不受散热问题的制约。当达到MAX1551与MAX1555温度限制时,充电器并不关断,而是逐渐降低充电电流。
MAX1551带有用来指示输入电源是否接通的/POK输出。只要有一个充电电源有效,/POK就为低电平。与之相应的,MAX1555具有/CHG输出,用来指示充电状态。
当连接到USB口,但无DC电源时,充电电流被设定为100mA (最大值)。这样在不需要端口通信的情况下,就允许从供电的或未供电的USB口充电。当DC电源接通后,充电电流被设定为280mA (典型值)。无需输入屏蔽二极管来防止电池漏电。
MAX1551与MAX1555采用5引脚薄型SOT23封装,工作温度范围为-40°C至+85°C。
为了方便,直接使用了手头现成的RSL10蓝牙开发板,开发板主要资源如下图所示:
只需要设计一个扩展板就行,扩展板实现锂电池充电管理和电源变换,原理图设计如下:
PCB版图如下:
版图3D效果如下:
实物散件图如下:
焊接完成的效果:
三、关键性代码及说明
RSL10蓝牙开发板数据采集和蓝牙通信程序开发使用的是安森美IDE。微信小程序则使用微信开发者工具进行编程,基于官方提供的SDK开发非常方便。RSL10蓝牙开发板作为外网设备运行GATT Server程序,提供一个自定义服务,该服务包含2个特征值,一个具有通知权限和可读权限,另外一个具有可写权限,周期性采集数据后,将数据以数据包的形式用通知发送给微信小程序(中央设备,实现GATT Client),数据包长度为10字节,依次是温度(1byte)、湿度(1byte)、气压(2byte)、空气质量(2byte) 、光照(2byte)、声音(2byte)。微信小程序节点功能界面提供对采集数据的显示以及可以控制RSL10蓝牙开发板的红色LED。这里主要介绍微信小程序的设计,可以作为一个通用的蓝牙数据接收程序。
主要代码说明如下:
//加载事件通知库,用于不同页面发布和订阅事件
var event = require('../../utils/event.js')
var app=getApp()
Page({
data: {
charts: [{
id: 'wendu',
name: '温度',
data:'0',//温度值
unit:'℃'//温度单位
}, {
id: 'shidu',
name: '湿度',
data:'0',
unit:'%'
},
{
id: 'pressure',
name: '气压',
data:'0',
unit:''
},
{
id: 'air',
name: 'AQI',
data:'0'
},
{
id: 'lux',
name: '光照',
data:'0',
unit:'Lux'
},
{
id: 'dmic',
name: '声音',
data:'0'
}],
checked: false,//风扇的状态,默认关闭
fanIcon:"/utils/img/fanOff.png",//显示风扇图标的状态,默认是关闭状态图标
},
//点击图标的回调函数,这里就触发跳转到对应的曲线图界面
open: function (e) {
wx.navigateTo({
url: '../' + e.target.dataset.chart.id + '/' + 'line'
});
},
//屏幕打开时执行的函数
onLoad: function () {
//接收别的页面传过来的数据
event.on('environmetDataChanged', this, function(data) {
//另外一个页面传过来的data是16进制字符串形式
console.log("接收到蓝牙设备发来的数据:"+data)
//温度 1byte
var a=parseInt(data[0]+data[1],16);
//湿度 1byte
var b=parseInt(data[2]+data[3],16);
//气压 4byte
var c=parseInt(data[4]+data[5],16);
var d=parseInt(data[6]+data[7],16);
var e=c*256+d;
//空气质量 4byte
var f=parseInt(data[8]+data[9],16);
var g=parseInt(data[10]+data[11],16);
var h=f*256+g;
//光照 4byte
var i=parseInt(data[12]+data[13],16);
var j=parseInt(data[14]+data[15],16);
var k=i*256+j;
//声音 4byte
var l=parseInt(data[16]+data[17],16);
var m=parseInt(data[18]+data[19],16);
var n=l*256+m;
//实时修改显示值
var up0 = "charts[" + 0 + "].data";
var up1 = "charts[" + 1 + "].data";
var up2 = "charts[" + 2 + "].data";
var up3 = "charts[" + 3 + "].data";
var up4 = "charts[" + 4 + "].data";
var up5 = "charts[" + 5 + "].data";
this.setData({
[up0]:a,
[up1]:b,
[up2]:e,
[up3]:h,
[up4]:k,
[up5]:n,
});
})
},
onUnload: function() {
event.remove('environmetDataChanged', this);
event.remove('deviceConnectStatus', this);
},
//控制led的函数,小滑块点击后执行的函数
onChange({ detail }){
this.setData({
checked: detail,
});
if(detail == true){
//发送'fefe'给蓝牙设备 开
event.emit('EnvMonitorSendData2Device','fefe');
this.setData({
fanIcon: "/utils/img/fanOn.png",
});
}else{
//发送'0101'给蓝牙设备 关
event.emit('EnvMonitorSendData2Device','0101');
this.setData({
fanIcon: "/utils/img/fanOff.png",
});
}
},
})
四、功能演示结果及说明(可添加演示图片进行解释说明)
电源系统测试工作正常,微信小程序顺利收到了开发板采集的数据。小程序界面数据显示效果如下截图:
提供了一个按钮可以发送指令给开发板进行控制,效果如下:
五、对本活动的心得体会(包括意见或建议)
1.平时工作比较忙,玩单片机硬件是我的爱好,FastBond活动很好,自由发挥空间很大。由于我报名有点仓促,项目创意也有点仓促,对ADI公司的产品比较熟悉,不怎么熟悉美信的,开始不知道用啥芯片,选型费了好久,后来群里管管发的选型pdf帮了我的大忙了。
2.LDO一开始没有焊接合适的输入输出电容,导致电压不太对,焊接后正常;本来是设计了一个OLED12864用于显示一些数据,但是没有调试成功。
3.最近看到各个论坛上kicad讨论火热,看了苏老师的课程,十分不错。