37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十二:9合一多功能扩展板 DHT1器温湿度 LM3 温度5蜂鸣1兼容UNO
采取"Arduino程序代码"+“Mind+图形编程”+"Linkboy仿真编程’三者相结合的方式
互为补充,打好基础,促进理解
实验目录(Arduino动手做)
一、LED 实验
01 Blink:D13蓝色 LED 闪烁
02 Blink2:D12、D13红蓝色 LED 交替闪烁
03 Blink3:模拟爆闪警灯
04 Breath_LED:D9 全彩 LED 模拟红色呼吸灯
二、按键实验
05 Button:D2 按键控制 D13蓝色 LED
06 Button_Lock:D3 按键控制 D13 蓝色LED 自锁实验
三、电位器实验
07 RS232_AD:串口读取 A0 电位器采集数值(旋转角度270°输出0-3.3V/5V电压信号电位器阻值10K)
08 Rotation_LED:A0 电位器控制 D11 全彩 LED 蓝色端亮度
09 RC_Motor:A0 电位器控制 D7 输出口的舵机控制其转动角度(舵机需自备Arduino 需要外部供电)
四、RGB 全彩 LED 实验
10 LED_RGB_Text:全彩 LED 基本颜色变化
11 LED_RGB:全彩 LED 彩虹变化
五、红外传感器D6实验(红外遥控器需自备)
12 IRrelay:按红外遥控器任意键,可以控制 D13 LED 开关(控制距离1-8米,频率38KHz,兼容市面上大部分红外遥控器)
13 IRrecord:串口显示读取的红外遥控代码
六、温度传感器实验
14 LM35_RS232AD:串口显示 A2 口 LM35 温度传感器读取的温度(可测试室内外温度,范围-50-150°C,灵敏度好)
七、温湿度传感器实验
15 DHT11_Test:串口显示 D4 口 DHT11 温湿度传感器读取的温湿度数据(测温范围0-50°C,湿度范围20%-90%PH)
八、亮度传感器实验
16 Light Sensor:串口显示 A1 口光敏电阻采集的数值
17 Light_LED:A1 口光敏电阻控制 D13 LED 开关(感光比较灵敏,适合教学实验及民用设备)
九、蜂鸣器实验
18 Buzzer:D5 口无源蜂鸣器模拟救护车警笛(可发出简单的音乐声,音乐需要通过程序编写)
十、扩展实验
19 模拟超声波测距传感器(探测类I,IIC/I2C接口)
20 总线DS18B20温度传感器(数值类,接扩展板数字D7接口)
21 TM1637四位数码管(数码管和点阵类,接扩展板数字D7/D8接口)
22 GY-BMP280-3.3 大气压强高度计传感器模块 ( 数值类,IIC/I2C接口)
23 GY-NEO-6MV2新款飞控GPS卫星信号接收模块 (数值类,TTL接口)
24 5V低电平触发单路继电器模块(执行类,数字D7接口)
25 带驻极话筒4线制声音传感器模块(触发类,数字D7接口)
26 BH1750FVI 数字光强度模块光照传感器(数值类, IIC/I2C接口)
27 开源DFPlayer Mini TF卡MP3播放模块(输出执行器类D7/D8数字接口)
28 LCD1602液晶屏模块(输出显示器类, IIC/I2C接口)
29 人体红外热释电运动传感器模块 (触发类,数字D7接口)
30 DS1307时钟模块 Tiny RTC I2C模块(探测传感器类, IIC/I2C接口)
31 兼容HC-06从机蓝牙模块(通信与存储类,TTL接口)
十、扩展实验
22 GY-BMP280-3.3 大气压强高度计传感器模块 ( 数值类,IIC/I2C接口)
23 GY-NEO-6MV2新款飞控GPS卫星信号接收模块 (数值类,TTL接口)
BMP280
博世Sensortec - BMP280 是一种专为移动应用设计的绝对气压传感器。该传感器模块采用极其紧凑的封装。得益于小尺寸和低功耗特性,这种器件可用在如移动电话、GPS 模块或手表等电池供电型设备中。与上代产品相同,BMP180、BMP280 也基于Bosch 成熟的压阻式压力传感器技术,具有高确度和线性度,以及长期稳定性和很高的 EMC 稳健性。多种设备工作选择带来了最高灵活性,可以在功耗、分辨率和滤波性能方面对设备进行优化。
BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器功耗仅有2.7μA。BMP280具有业界最小封装,采用极其紧凑的8引脚金属盖LGA封装,占位面积仅为2.0×2.5mm2,封装高度为0.95 mm。包括有压力和温度测量功能。该气压传感器支持SPI和IIC通信接口,相比上一代的BMP180,精度已有相当大的提升,非常适合应用于低成本的多旋翼飞行器飞行控制器上,价格仅有目前流行的MS5611的四分之一。传感器模块它的小尺寸和2.74μA@ 1Hz的低功耗允许在电池驱动的设备中实现。门内导航,医疗保健以及GPS改进的新兴应用需要高相对精度和低TCO。
BMP280非常适用于地板水平检测等应用,因为传感器具有±0.12 hPa的优异相对精度,相当于±1m高度差,偏移温度系数(TCO)仅为1.5 Pa / K(相当于12.6厘米/ K)。作为广泛实施的BMP180的继承者,BMP280最初在2011年开始大量使用手机中的气压测量,BMP280在所有需要精确压力测量的应用中实现了高性能。同时,BMP280具有更高的应用灵活性,新的滤波器模式和SPI接口,而且相对于BMP180,占位面积缩小了63%。
GY-BMP280-3.3 高精度大气压强传感器模块
是个低功耗数字复合传感器,它可以测量环境温度和大气压强。气压敏感元件是一个低噪高精度高分辨率绝对大气压力压电式感应元件;温度感测元件具有低噪高分辨率特性,温度值可以对气压进行温度补偿自校正。通过配置采样率寄存器,可以设置敏感元件的采样率。非常适合空间有限的移动设备,如智能是手机、平板电脑、智能手表和可穿戴设备、天气预报、垂直速度指示、飞控设备、室内室外导航、智能家居装置。
22、 GY-BMP280-3.3 大气压强高度计传感器模块 ( I2C接口)
项目:通过串口实时读取温度、气压与海拔数据
Arduino实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序四:基于博世 BME280I2C 环境传感器数据表的测试
安装库:https://itbrainpower.net/downloadables/sSense-BMx280.zip
*/
#define SERIAL_SPEED 19200 //初始化串口
#include <sSense-BMx280I2C.h>//导入驱动库
#include <Wire.h>
/* 推荐模式 -
基于博世 BME280I2C 环境传感器数据表。
天气监测:
强制模式,1 个样本/分钟
压力×1、温度×1、湿度×1、过滤
电流消耗 = 0.16 μA
RMS 噪声 = 3.3 Pa/30 cm, 0.07 %RH
数据输出速率 1/60 Hz
湿度感应:
强制模式,1 个样本/秒
压力×0,温度×1,湿度×1,过滤
电流消耗 = 2.9 μA
RMS 噪声 = 0.07 %RH
数据输出速率 = 1 Hz
室内导航:
正常模式,待机时间 = 0.5ms
压力×16,温度×2,湿度×1,过滤器= x16
电流消耗 = 633 μA
RMS 噪声 = 0.2 Pa/1.7 cm
数据输出速率 = 25Hz
滤波器带宽 = 0.53 Hz
响应时间 (75%) = 0.9 秒
游戏:
正常模式,待机时间 = 0.5ms
压力×4,温度×1,湿度×0,过滤器= x16
电流消耗 = 581 μA
RMS 噪声 = 0.3 Pa/2.5 cm
数据输出速率 = 83 Hz
滤波器带宽 = 1.75 Hz
响应时间 (75%) = 0.3 秒
*/
BMx280I2C::Settings settings(
BME280::OSR_X1,
BME280::OSR_X1,
BME280::OSR_X1,
BME280::Mode_Forced,
BME280::StandbyTime_1000ms,
BME280::Filter_Off,
BME280::SpiEnable_False,
0x76 // I2C 地址。 I2C 专用。
);
BMx280I2C ssenseBMx280(settings);
void setup(){
delay(5000);
DebugPort.begin(SERIAL_SPEED);
while(!DebugPort) {} // 等待
DebugPort.println("s-Sense BME/BMP280 I2C sensor.");
Wire.begin();
while(!ssenseBMx280.begin())
{
DebugPort.println("Could not find BME/BMP280 sensor!");
delay(1000);
}
switch(ssenseBMx280.chipModel())
{
case BME280::ChipModel_BME280:
DebugPort.println("Found BME280 sensor! Humidity available.");
break;
case BME280::ChipModel_BMP280:
DebugPort.println("Found BMP280 sensor! No Humidity available.");
break;
default:
DebugPort.println("Found UNKNOWN sensor! Error!");
}
// 使用前更改一些设置。
settings.tempOSR = BME280::OSR_X4;
ssenseBMx280.setSettings(settings);
}
void loop(){
printBMx280Data(&DebugPort);
delay(500);
}
void printBMx280Data(
Stream* client
)
{
float temp(NAN), hum(NAN), pres(NAN);
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
ssenseBMx280.read(pres, temp, hum, tempUnit, presUnit);
client->print("Temp: ");
client->print(temp);
//client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
client->print(" "+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->println(" Pa");
delay(1000);
}
实验串口返回情况
可换算气压为高度,只是不确定这个高度是否正确?
Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序五:可换算气压为高度,只是不确定这个高度是否正确?
安装库:https://itbrainpower.net/downloadables/sSense-BMx280.zip
*/
#define SERIAL_SPEED 19200 //初始化串口
#include <BMx280_EnvCalc.h>//导入驱动库
#include <sSense-BMx280I2C.h>
#include <Wire.h>
// 默认值:强制模式,待机时间 = 1000 ms
// 过采样=压力×1,温度×1,湿度×1,过滤掉
BMx280I2C ssenseBMx280;
void setup(){
delay(5000);
DebugPort.begin(SERIAL_SPEED);
while (!DebugPort) {} // 等待
Wire.begin();
while (!ssenseBMx280.begin())
{
DebugPort.println("Could not find BME280 sensor!");
delay(1000);
}
switch (ssenseBMx280.chipModel())
{
case BME280::ChipModel_BME280:
DebugPort.println("Found BME280 sensor! Humidity available.");
break;
case BME280::ChipModel_BMP280:
DebugPort.println("Found BMP280 sensor! No Humidity available.");
break;
default:
DebugPort.println("Found UNKNOWN sensor! Error!");
}
}
void loop(){
printBMx280Data(&DebugPort);
delay(500);
}
void printBMx280Data( Stream* client )
{
float temp(NAN), hum(NAN), pres(NAN);
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
ssenseBMx280.read(pres, temp, hum, tempUnit, presUnit);
client->print("Temp: ");
client->print(temp);
client->print(String(tempUnit == BME280::TempUnit_Celsius ? "C" : "F"));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->print(" Pa");
BMx280_EnvCalc::AltitudeUnit envAltUnit = BMx280_EnvCalc::AltitudeUnit_Meters;
BMx280_EnvCalc::TempUnit envTempUnit = BMx280_EnvCalc::TempUnit_Celsius;
float altitude = BMx280_EnvCalc::Altitude(pres, envAltUnit);
float dewPoint = BMx280_EnvCalc::DewPoint(temp, hum, envTempUnit);
float seaLevel = BMx280_EnvCalc::EquivalentSeaLevelPressure(altitude, temp, pres);
// seaLevel = BMx280_EnvCalc::SealevelAlitude(altitude, temp, pres); // 已弃用。请参见等效SeaLevelPressure()。
client->print("\r\nAltitude: ");
client->print(altitude);
client->print((envAltUnit == BMx280_EnvCalc::AltitudeUnit_Meters ? "m" : "ft"));
client->print("\tDew point: ");
client->print(dewPoint);
client->print(String(envTempUnit == BMx280_EnvCalc::TempUnit_Celsius ? "C" : "F"));
client->print("\t\tEquivalent Sea Level Pressure: ");
client->print(seaLevel);
client->println(" Pa\r\n");
delay(1000);//延时1000毫秒
}
实验串口返回情况
实验开源图形编程(Mind+、编玩边学)
实验串口返回情况