[原创] 【安信可BW16-Kit开发板】温湿度与光强传感器接入测试

hollyedward   2024-3-4 13:34 楼主

一、DHT11温湿度传感器

        1、模块介绍

        DHT11是一种工作电压为3.3V~5V的温湿度传感器。在室温条件下(25摄氏度左右),湿度的可测量范围为20%~90%RH,精度为±5%RH,温度的可测量范围为0~50℃,精度为±2℃。温湿度传感器的另一种选择是DHT22传感器,它具有更好的精度。其湿度可测量范围为0%~100%RH,精度为±5%RH,温度可测量范围为-40~125℃,精度为±0.2℃。

传感器上有4个引脚:

pin名称 用途
VCC 供电3.3~5V
DATA 数据单总线
NC 接空
GND 接地

 

        

  image.png   image.png  

        一般NC脚接空没有用,市面上只有3个引脚的温度/湿度传感器,将传感器的三脚引出,同时加了上拉电阻5k:

         image.png  

        DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分

一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如果,某次从传感器中读取如下5Byte数据:由以上数据格式可以得到温湿度计算方法humi (湿度)= byte4 . byte3=45.0 (%RH)temp (温度)= byte2 . byte1=28.0 ( ℃)jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)

        2、模块连接

           一般买过来的模块都是安装在pcb板上的,未安装在PCB上的DHT传感器,则必须在数据线添加5k~10K欧姆上拉电阻。

         image.png  

        接入开发板的3.3电源,数据线接端口8

        

         image.png  

         291389ed65a564288b8d1782f9af49a.jpg  

        3、烧录程序

        

#include "DHT.h"

// The digital pin we're connected to.
#define DHTPIN 8

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

void setup() {
    Serial.begin(115200);
    Serial.println(F("DHTxx test!"));
    dht.begin();
}

void loop() {
    // Wait a few seconds between measurements.
    delay(2000);

    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    // Read temperature as Celsius (the default)
    float t = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    float f = dht.readTemperature(true);

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
    }

    // Compute heat index in Fahrenheit (the default)
    float hif = dht.computeHeatIndex(f, h);
    // Compute heat index in Celsius (isFahreheit = false)
    float hic = dht.computeHeatIndex(t, h, false);

    Serial.print(F("Humidity: "));
    Serial.print(h);
    Serial.print(F("%  Temperature: "));
    Serial.print(t);
    Serial.print(F("°C "));
    Serial.print(f);
    Serial.print(F("°F  Heat index: "));
    Serial.print(hic);
    Serial.print(F("°C "));
    Serial.print(hif);
    Serial.println(F("°F"));
}

        串口输出结果

         image.png  

二、光敏电阻模块

       1、模块介绍

        光敏电阻模块是一种使用光敏电阻的传感器模块。光敏电阻是一种光照强度变化时电阻值也会变化的电阻器。光敏电阻模块通常由光敏电阻、比较器、限流电阻和电源电路组成。

光敏电阻模块的原理是利用光敏电阻的光电效应。当光照强度变化时,光敏电阻的电阻值也会变化。比较器将光敏电阻的电阻值与参考电压进行比较,输出高电平或低电平。限流电阻用于限制流过光敏电阻的电流,保护光敏电阻。电源电路用于为光敏电阻模块提供电源。

         image.png  

 光敏电阻模块的接线方法如下:

  • VCC:接电源正极
  • GND:接电源负极
  • DO:数字输出
  • AO:模拟输出

BW16上有一个模拟量adc输入口A2

image.png  

        2、烧录代码

        光强改变rgb灯颜色,设置一个阈值

#ifndef BOARD_AITHINKER_BW16
#error "Please use this example on the BW16 Board"
#endif

const int analogPin = A2; // 模拟脚A0 定义为analogPin

int inputValue = 0;//设置一个全局变量
void setup() {
  Serial.begin(115200); // 设置串口波特率
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
}
void loop(){
// 将模拟引脚A0口上读入的电压量的数值,赋值到inputValue上,然后打印出来
  inputValue = analogRead(analogPin);
  Serial.print("LDR Reading:");
  Serial.println(inputValue);
  if(inputValue < 300){
           // fade RED in from min to max in increments of 5 points:
    for (int fadeValue = 0; fadeValue <= 255; fadeValue += 5) {
    // sets the value (range from 0 to 255):
      analogWrite(LED_R, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
      delay(30);
    }

  // fade RED out from max to min in increments of 5 points:
    for (int fadeValue = 255; fadeValue >= 0; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
      analogWrite(LED_R, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
      delay(30);
    }            // wait for a second
  }
  if(inputValue >= 300 && inputValue < 1100){
    // fade BLUE in from min to max in increments of 5 points:
   for (int fadeValue = 0; fadeValue <= 255; fadeValue += 5) {
    // sets the value (range from 0 to 255):
      analogWrite(LED_B, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
      delay(30);
    }

  // fade BLUE out from max to min in increments of 5 points:
    for (int fadeValue = 255; fadeValue >= 0; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
      analogWrite(LED_B, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
      delay(30);
    }
  }
  delay(1000);
}

烧录结果:

image.png  

光照强的时候,红色呼吸灯

6af2dfe44de3828621ba2ca96cc2939.jpg  

 

image.png  

光照弱的时候,蓝色呼吸灯

0f8aa72094d150f51a7a53b9e922bc4.jpg  

 

reference:

https://www.amebaiot.com.cn/en/amebad-arduino-gpio-dht/

DHT11 Humidity & Temperature Sensor 文档

DHT11传感器的学习使用

Arduino的光敏电阻应用

本帖最后由 hollyedward 于 2024-3-4 13:37 编辑

回复评论 (11)

您好,我想請問為甚麼我照著上面的步驟連接bw16-kit(腳位PA26)跟DHT11但是卻無法讀取到數值?如果可以的話,方便私信您嗎?

本帖最后由 HuangDarren 于 2024-5-15 17:05 编辑
点赞  2024-5-15 17:03
引用: HuangDarren 发表于 2024-5-15 17:03 您好,我想請問為甚麼我照著上面的步驟連接bw16-kit(腳位PA26)跟DHT11但是卻無法讀取到數值?如果可以的話, ...

可以

点赞  2024-5-17 15:39

436729388_1145270106614577_6370502448270796907_n.jpg   螢幕擷取畫面 2024-05-20 234529.png   這是我連接的方式與Output結果(使用您帖子上面相同的Code),因為私信不能傳圖片所以只能傳在這裡,造成不便很不好意思

 

本帖最后由 HuangDarren 于 2024-5-20 23:54 编辑
点赞  2024-5-20 23:53
引用: HuangDarren 发表于 2024-5-20 23:53    這是我連接的方式與Output結果(使用您帖子上面相同的Code),因為私信不能傳圖片所以只能 ...

接线没问题吗,接3.3v看看,还有数据线接PA26

点赞  2024-5-21 11:24
引用: hollyedward 发表于 2024-5-21 11:24 接线没问题吗,接3.3v看看,还有数据线接PA26

446029377_972169374583106_6740056579715911645_n.jpg   445544790_1119041389326374_1867864154885552077_n.jpg   我嘗試使用3.3V了,並且DATA接到PA26,但還是讀取不到

点赞  2024-5-21 22:47
引用: HuangDarren 发表于 2024-5-21 22:47    我嘗試使用3.3V了,並且DATA接到PA26,但還是讀取不到

除了PA26以外其他的腳位可以接DATA嗎?我在想會不會是腳位出現故障才無法讀取到傳感器

 

点赞  2024-5-24 13:56
引用: HuangDarren 发表于 2024-5-24 13:56 除了PA26以外其他的腳位可以接DATA嗎?我在想會不會是腳位出現故障才無法讀取到傳感器  

代码肯定没问题的,我都试过了,你可以排查下是不是板子针脚还是传感器的问题

点赞  2024-5-26 10:50
引用: hollyedward 发表于 2024-5-26 10:50 代码肯定没问题的,我都试过了,你可以排查下是不是板子针脚还是传感器的问题

應該不是傳感器的問題,我有再新買一個傳感器但同樣不能用,請問要如何排查針腳?有其他替代針腳可以使用嗎?

点赞  2024-5-26 14:59
引用: HuangDarren 发表于 2024-5-26 14:59 應該不是傳感器的問題,我有再新買一個傳感器但同樣不能用,請問要如何排查針腳?有其他替代針腳可以使用 ...

你使用默认的例程试试,这个就是sdk自带的例程,应该没有问题的。还有就是传感器的针脚确定没接错吧,有的不同厂商针脚顺序不一样,看看它的原理图。其他的就没啥了啊,除非是硬件问题可能

点赞  2024-5-28 16:54
引用: hollyedward 发表于 2024-5-28 16:54 你使用默认的例程试试,这个就是sdk自带的例程,应该没有问题的。还有就是传感器的针脚确定没接错吧,有 ...

你可以试试别的例程,pa26接个别的pwm,gpio调试的,或者啥

点赞  2024-5-28 16:57
引用: hollyedward 发表于 2024-5-28 16:57 你可以试试别的例程,pa26接个别的pwm,gpio调试的,或者啥

我嘗試了別的Code,我發現了問題好像是高電壓訊號出現故障,但目前還沒找到方法修正Q

我有嘗試使用PA30跟PA25連接DATA訊號,都無法使用,應該不是腳位故障,我有去找尋我DHT型號的腳位圖,確定接腳沒有問題

image.png   image.png  

err=16(// Error to wait for start high signal.)

点赞  2024-5-30 04:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复