Arduino程序设计(三) 光照采集 + 温度采集

光照采集 + 温度采集

  • 前言
  • 一、光敏电阻检测环境光
  • 二、DS18B20检测环境温度
  • 总结
  • 参考文献


前言

  • 本文主要介绍两种常见的传感器采集环境参数,即光照传感器和温度传感器。
  • 光照传感器采用光敏电阻GL3516(5-10K)检测环境光。
  • 温度传感器采用DS18B20检测环境温度。

一、光敏电阻检测环境光

  • 光敏电阻:一种电阻值随照射光强度增加而下降的电阻。
  • 光敏电阻的使用方法:将其作为一个电阻接入电路中,然后使用analogRead() 读取电压。
  • ESP8266EX有1个多通道的 10 bit 模拟数字转换器A0 ,输入电压 0-1V 对应 0-1023 的整数值,模拟输入函数为:
analogRead(pin)
  • 实验采用ESP8266EX裸芯片,通过自主搭建电路的方式,实现预设功能。
  • 光敏电阻检测环境光的电路图,如下图所示:
    Arduino程序设计(三) 光照采集 + 温度采集_第1张图片
  • 注意:
  • ① 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通过串口输出了当前从光敏电路读到的模拟值,串口显示界面如下:
    Arduino程序设计(三) 光照采集 + 温度采集_第2张图片
  • 注释:
  • ① 程序中使用了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检测环境光的电路图,如下图所示:
    Arduino程序设计(三) 光照采集 + 温度采集_第3张图片

代码实现:

//DS18B20采集环境温度

#include                              //加载单总线库函数
#include                    //加载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通过串口输出了当前从温度采集电路读到的模拟值,串口显示界面如下:
    Arduino程序设计(三) 光照采集 + 温度采集_第4张图片
  • 注释:串口打印的第一行中数字22.5,显示当前环境温度为22.5℃。以此类推,得到其余行显示的环境温度值。

总结

  • 本文主要介绍了采用光敏电阻和DS18B20,进行环境光检测和环境温度检测,采用自主搭建电路的形式,实现目标功能,体现了软硬件结合的思想。

参考文献

参考文献1: 光敏电阻检测环境光实验
参考文献2: Arduino教程——DS18B20温度传感器

你可能感兴趣的:(Arduino,物联网)