光照采集 + 温度采集
前言
- 本文主要介绍两种常见的传感器采集环境参数,即光照传感器和温度传感器。
- 光照传感器采用光敏电阻GL3516(5-10K)检测环境光。
- 温度传感器采用DS18B20检测环境温度。
一、光敏电阻检测环境光
- 光敏电阻:一种电阻值随照射光强度增加而下降的电阻。
- 光敏电阻的使用方法:将其作为一个电阻接入电路中,然后使用analogRead() 读取电压。
- ESP8266EX有1个多通道的 10 bit 模拟数字转换器A0 ,输入电压 0-1V 对应 0-1023 的整数值,模拟输入函数为:
analogRead(pin)
- 实验采用ESP8266EX裸芯片,通过自主搭建电路的方式,实现预设功能。
- 光敏电阻检测环境光的电路图,如下图所示:
- 注意:
- ① TOUT为ESP8266EX的引脚6,采集TOUT的ADC值;
- ② TOUT对应的模拟量输入引脚为A0;
- ③ 通过模拟输入口A0,读取分压后得到的电压。
代码实现:
//光敏电阻检测环境光
int light_value = 0; //定义光照强度变量light_value,置初始值为0
void setup() {
Serial.begin(9600); //设置串口通信波特率为9600
}
void loop() {
light_value = analogRead(A0); // 读出当前光线强度
Serial.println(light_value); //输出到串口显示
delay(1000); //间隔1s读取1次光线强度值
}
- 运行以上程序,打开串口监视器,Arduino通过串口输出了当前从光敏电路读到的模拟值,串口显示界面如下:
- 注释:
- ① 程序中使用了Serial.begin()、Serial.println() 语句,Serial.begin()功能为初始化串口,Serial.println() 功能为串口输出数据;
- ② 采集的光照强度对应的端口电压,计算公式:
- Vout为该光照强度对应的端口电压,light 为采集的光照强度值。
二、DS18B20检测环境温度
- DS18B20数字温度传感器是美国DALLAS公司生产的单总线数字温度传感器。
- DSl820数字温度计提供 9 位(二进制)温度读数指示器件的温度信息经过单线接口送入 DSl8B20 或从 DSl8B20 送出,因此从主机 CPU 到DSl820 仅需一条线(和地线) DSl820 的电源可以由数据线本身提供而不需要外部电源 。
- DS18B20测温原理:把芯片把感知到的温度换成数值放在数据寄存器里面,要想得到寄存器里面的数据,只有按照DALLAS规定的一种时序才能正确传出数据,这种时序被称为单总线,cpu就可通过单总线协议,取得DS18B20里面的温度值。
- DS18B20采集环境温度需要加载OneWire和DallasTemperature两个程序库,调用库函数,极大地简化了温度采集程序的编写。
- 实验采用ESP8266EX裸芯片,通过自主搭建电路的方式,实现预设功能。
- DS18B20检测环境光的电路图,如下图所示:
代码实现:
//DS18B20采集环境温度
#include <OneWire.h> //加载单总线库函数
#include <DallasTemperature.h> //加载DS18B20温度采集库函数
#define ONE_WIRE_BUS 5 //定义DS18B20数据口连接ESP8266的5号IO上
OneWire oneWire(ONE_WIRE_BUS); //初始化连接在单总线上的单总线设备
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600); //设置串口通信波特率为9600
Serial.println("Dallas Temperature IC Control Library Demo");
sensors.begin(); //初始化库
}
void loop(void)
{
Serial.print(" Requesting temperatures..."); //打印Requesting temperatures...
sensors.requestTemperatures(); //发送命令获取温度
Serial.println("DONE"); //打印DONE,再换行
Serial.print("Temperature for Device1 is: "); //打印Temperature for Device1 is:
Serial.print(sensors.getTempCByIndex(0)); //打印传感器的温度值
delay(500); //间隔500ms,获取1次温度值
}
- 运行以上程序,打开串口监视器,Arduino通过串口输出了当前从温度采集电路读到的模拟值,串口显示界面如下:
- 注释:串口打印的第一行中数字22.5,显示当前环境温度为22.5℃。以此类推,得到其余行显示的环境温度值。
总结
- 本文主要介绍了采用光敏电阻和DS18B20,进行环境光检测和环境温度检测,采用自主搭建电路的形式,实现目标功能,体现了软硬件结合的思想。
参考文献
参考文献1: 光敏电阻检测环境光实验
参考文献2: Arduino教程——DS18B20温度传感器