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



    前言

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

    一、光敏电阻检测环境光

    • 光敏电阻:一种电阻值随照射光强度增加而下降的电阻。
    • 光敏电阻的使用方法:将其作为一个电阻接入电路中,然后使用analogRead() 读取电压。
    • ESP8266EX有1个多通道的 10 bit 模拟数字转换器A0 ,输入电压 0-1V 对应 0-1023 的整数值,模拟输入函数为:
    analogRead(pin)
    
    • 1
    • 实验采用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次光线强度值
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 运行以上程序,打开串口监视器,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                              //加载单总线库函数
    #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次温度值
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 运行以上程序,打开串口监视器,Arduino通过串口输出了当前从温度采集电路读到的模拟值,串口显示界面如下:
      在这里插入图片描述
    • 注释:串口打印的第一行中数字22.5,显示当前环境温度为22.5℃。以此类推,得到其余行显示的环境温度值。

    总结

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

    参考文献

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

  • 相关阅读:
    IEEE802.11v协议介绍
    QP状态机学习②——QM的使用
    【学习笔记】ARC150/ARC151
    如何防止商业秘密泄露(洞察眼MIT系统商业机密防泄密解决方案)
    C#在winform 控制台输出 cmd窗口
    利用闭包的特点来实现一个简单的缓存
    STM32的标准库及其使用
    华为和华三(H3C),你总要选一个才行
    如果用nodejs开发一个网站
    Docker 的常用命令
  • 原文地址:https://blog.csdn.net/weixin_44887565/article/details/127897188