一、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 | 接地 |
一般NC脚接空没有用,市面上只有3个引脚的温度/湿度传感器,将传感器的三脚引出,同时加了上拉电阻5k:
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欧姆上拉电阻。
接入开发板的3.3电源,数据线接端口8
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"));
}
串口输出结果
二、光敏电阻模块
1、模块介绍
光敏电阻模块是一种使用光敏电阻的传感器模块。光敏电阻是一种光照强度变化时电阻值也会变化的电阻器。光敏电阻模块通常由光敏电阻、比较器、限流电阻和电源电路组成。
光敏电阻模块的原理是利用光敏电阻的光电效应。当光照强度变化时,光敏电阻的电阻值也会变化。比较器将光敏电阻的电阻值与参考电压进行比较,输出高电平或低电平。限流电阻用于限制流过光敏电阻的电流,保护光敏电阻。电源电路用于为光敏电阻模块提供电源。
光敏电阻模块的接线方法如下:
BW16上有一个模拟量adc输入口A2
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);
}
烧录结果:
光照强的时候,红色呼吸灯
光照弱的时候,蓝色呼吸灯
reference:
https://www.amebaiot.com.cn/en/amebad-arduino-gpio-dht/
DHT11 Humidity & Temperature Sensor 文档
本帖最后由 hollyedward 于 2024-3-4 13:37 编辑您好,我想請問為甚麼我照著上面的步驟連接bw16-kit(腳位PA26)跟DHT11但是卻無法讀取到數值?如果可以的話,方便私信您嗎?
本帖最后由 HuangDarren 于 2024-5-15 17:05 编辑引用: HuangDarren 发表于 2024-5-15 17:03 您好,我想請問為甚麼我照著上面的步驟連接bw16-kit(腳位PA26)跟DHT11但是卻無法讀取到數值?如果可以的話, ...
可以
引用: HuangDarren 发表于 2024-5-20 23:53 這是我連接的方式與Output結果(使用您帖子上面相同的Code),因為私信不能傳圖片所以只能 ...
接线没问题吗,接3.3v看看,还有数据线接PA26
引用: hollyedward 发表于 2024-5-21 11:24 接线没问题吗,接3.3v看看,还有数据线接PA26
引用: HuangDarren 发表于 2024-5-21 22:47 我嘗試使用3.3V了,並且DATA接到PA26,但還是讀取不到
除了PA26以外其他的腳位可以接DATA嗎?我在想會不會是腳位出現故障才無法讀取到傳感器
引用: HuangDarren 发表于 2024-5-24 13:56 除了PA26以外其他的腳位可以接DATA嗎?我在想會不會是腳位出現故障才無法讀取到傳感器
代码肯定没问题的,我都试过了,你可以排查下是不是板子针脚还是传感器的问题
引用: hollyedward 发表于 2024-5-26 10:50 代码肯定没问题的,我都试过了,你可以排查下是不是板子针脚还是传感器的问题
應該不是傳感器的問題,我有再新買一個傳感器但同樣不能用,請問要如何排查針腳?有其他替代針腳可以使用嗎?
引用: HuangDarren 发表于 2024-5-26 14:59 應該不是傳感器的問題,我有再新買一個傳感器但同樣不能用,請問要如何排查針腳?有其他替代針腳可以使用 ...
你使用默认的例程试试,这个就是sdk自带的例程,应该没有问题的。还有就是传感器的针脚确定没接错吧,有的不同厂商针脚顺序不一样,看看它的原理图。其他的就没啥了啊,除非是硬件问题可能
引用: hollyedward 发表于 2024-5-28 16:54 你使用默认的例程试试,这个就是sdk自带的例程,应该没有问题的。还有就是传感器的针脚确定没接错吧,有 ...
你可以试试别的例程,pa26接个别的pwm,gpio调试的,或者啥
引用: hollyedward 发表于 2024-5-28 16:57 你可以试试别的例程,pa26接个别的pwm,gpio调试的,或者啥
我嘗試了別的Code,我發現了問題好像是高電壓訊號出現故障,但目前還沒找到方法修正Q
我有嘗試使用PA30跟PA25連接DATA訊號,都無法使用,應該不是腳位故障,我有去找尋我DHT型號的腳位圖,確定接腳沒有問題
err=16(// Error to wait for start high signal.)