【安信可BW16-Kit开发板】温湿度与光强传感器接入测试
<div class='showpostmsg'> 本帖最后由 hollyedward 于 2024-3-4 13:37 编辑<p><strong>一、DHT11温湿度传感器</strong></p>
<p><strong> 1、模块介绍</strong></p>
<p> DHT11是一种工作电压为3.3V~5V的温湿度传感器。在室温条件下(25摄氏度左右),湿度的可测量范围为20%~90%RH,精度为±5%RH,温度的可测量范围为0~50℃,精度为±2℃。温湿度传感器的另一种选择是DHT22传感器,它具有更好的精度。其湿度可测量范围为0%~100%RH,精度为±5%RH,温度可测量范围为-40~125℃,精度为±0.2℃。</p>
<p>传感器上有4个引脚:</p>
<table align="center" border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
<td>pin名称</td>
<td>用途</td>
</tr>
<tr>
<td>VCC</td>
<td>供电3.3~5V</td>
</tr>
<tr>
<td>DATA</td>
<td>数据单总线</td>
</tr>
<tr>
<td>NC</td>
<td>接空</td>
</tr>
<tr>
<td>GND</td>
<td>接地</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p> </p>
<p> 一般NC脚接空没有用,市面上只有3个引脚的温度/湿度传感器,将传感器的三脚引出,同时加了上拉电阻5k:</p>
<p> </p>
<p> DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分</p>
<p>一次完整的数据传输为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)(校验正确)</p>
<p><strong> 2、模块连接</strong></p>
<p><strong> </strong> 一般买过来的模块都是安装在pcb板上的,未安装在PCB上的DHT传感器,则必须在数据线添加5k~10K欧姆上拉电阻。</p>
<p><strong> </strong> </p>
<p> 接入开发板的3.3电源,数据线接端口8</p>
<p> </p>
<p> </p>
<p> </p>
<p> <strong> 3、烧录程序</strong></p>
<p><strong> </strong></p>
<pre>
<code class="language-cpp">#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("°FHeat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
</code></pre>
<p> 串口输出结果</p>
<p> </p>
<p><strong>二、光敏电阻模块</strong></p>
<p data-sourcepos="1:1-1:78"> <strong>1、模块介绍</strong></p>
<p data-sourcepos="1:1-1:78"> 光敏电阻模块是一种使用光敏电阻的传感器模块。光敏电阻是一种光照强度变化时电阻值也会变化的电阻器。光敏电阻模块通常由光敏电阻、比较器、限流电阻和电源电路组成。</p>
<p data-sourcepos="3:1-3:119">光敏电阻模块的原理是利用光敏电阻的光电效应。当光照强度变化时,光敏电阻的电阻值也会变化。比较器将光敏电阻的电阻值与参考电压进行比较,输出高电平或低电平。限流电阻用于限制流过光敏电阻的电流,保护光敏电阻。电源电路用于为光敏电阻模块提供电源。</p>
<p data-sourcepos="3:1-3:119"> </p>
<p data-sourcepos="3:1-3:119"> 光敏电阻模块的接线方法如下:</p>
<ul data-sourcepos="33:1-37:0">
<li data-sourcepos="33:1-33:24">VCC:接电源正极</li>
<li data-sourcepos="34:1-34:24">GND:接电源负极</li>
<li data-sourcepos="35:1-35:10">DO:数字输出</li>
<li data-sourcepos="36:1-37:0">AO:模拟输出</li>
</ul>
<p>BW16上有一个模拟量adc输入口A2</p>
<p> </p>
<p><strong> 2、烧录代码</strong></p>
<p><strong> </strong>光强改变rgb灯颜色,设置一个阈值</p>
<pre>
<code class="language-cpp">#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);
}
</code></pre>
<p>烧录结果:</p>
<p> </p>
<p>光照强的时候,红色呼吸灯</p>
<p> </p>
<p> </p>
<p> </p>
<p>光照弱的时候,蓝色呼吸灯</p>
<p> </p>
<p> </p>
<p>reference:</p>
<p><a href="https://www.amebaiot.com.cn/en/amebad-arduino-gpio-dht/" target="_blank">https://www.amebaiot.com.cn/en/amebad-arduino-gpio-dht/</a></p>
<p><a href="https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf" target="_blank">DHT11 Humidity & Temperature Sensor 文档</a></p>
<p><a href="https://blog.csdn.net/qq_39829913/article/details/104672452" target="_blank">DHT11传感器的学习使用</a></p>
<p><a href="http://www.taichi-maker.com/homepage/reference-index/arduino-sensor-index/arduino-ir-sensor/" target="_blank">Arduino的光敏电阻应用</a></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 本帖最后由 HuangDarren 于 2024-5-15 17:05 编辑
<p>您好,我想請問為甚麼我照著上面的步驟連接bw16-kit(腳位PA26)跟DHT11但是卻無法讀取到數值?如果可以的話,方便私信您嗎?</p>
HuangDarren 发表于 2024-5-15 17:03
您好,我想請問為甚麼我照著上面的步驟連接bw16-kit(腳位PA26)跟DHT11但是卻無法讀取到數值?如果可以的話, ...
<p>可以</p>
本帖最后由 HuangDarren 于 2024-5-20 23:54 编辑
<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&goto=findpost&pid=3330381&ptid=1273378" target="_blank"><font color="#999999">hollyedward 发表于 2024-5-17 15:39</font></a></font> 可以</blockquote>
</div>
<p> 這是我連接的方式與Output結果(使用您帖子上面相同的Code),因為私信不能傳圖片所以只能傳在這裡,造成不便很不好意思<img height="28" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/face-with-cold-sweat_1f613.png" width="28" /></p>
<p> </p>
HuangDarren 发表于 2024-5-20 23:53
這是我連接的方式與Output結果(使用您帖子上面相同的Code),因為私信不能傳圖片所以只能 ...
<p>接线没问题吗,接3.3v看看,还有数据线接PA26</p>
hollyedward 发表于 2024-5-21 11:24
接线没问题吗,接3.3v看看,还有数据线接PA26
<p> 我嘗試使用3.3V了,並且DATA接到PA26,但還是讀取不到</p>
HuangDarren 发表于 2024-5-21 22:47
我嘗試使用3.3V了,並且DATA接到PA26,但還是讀取不到
<p>除了PA26以外其他的腳位可以接DATA嗎?我在想會不會是腳位出現故障才無法讀取到傳感器</p>
<p> </p>
HuangDarren 发表于 2024-5-24 13:56
除了PA26以外其他的腳位可以接DATA嗎?我在想會不會是腳位出現故障才無法讀取到傳感器
<p>代码肯定没问题的,我都试过了,你可以排查下是不是板子针脚还是传感器的问题</p>
hollyedward 发表于 2024-5-26 10:50
代码肯定没问题的,我都试过了,你可以排查下是不是板子针脚还是传感器的问题
<p>應該不是傳感器的問題,我有再新買一個傳感器但同樣不能用,請問要如何排查針腳?有其他替代針腳可以使用嗎?</p>
HuangDarren 发表于 2024-5-26 14:59
應該不是傳感器的問題,我有再新買一個傳感器但同樣不能用,請問要如何排查針腳?有其他替代針腳可以使用 ...
<p>你使用默认的例程试试,这个就是sdk自带的例程,应该没有问题的。还有就是传感器的针脚确定没接错吧,有的不同厂商针脚顺序不一样,看看它的原理图。其他的就没啥了啊,除非是硬件问题可能</p>
hollyedward 发表于 2024-5-28 16:54
你使用默认的例程试试,这个就是sdk自带的例程,应该没有问题的。还有就是传感器的针脚确定没接错吧,有 ...
<p>你可以试试别的例程,pa26接个别的pwm,gpio调试的,或者啥</p>
hollyedward 发表于 2024-5-28 16:57
你可以试试别的例程,pa26接个别的pwm,gpio调试的,或者啥
<p>我嘗試了別的Code,我發現了問題好像是高電壓訊號出現故障,但目前還沒找到方法修正Q</p>
<p>我有嘗試使用PA30跟PA25連接DATA訊號,都無法使用,應該不是腳位故障,我有去找尋我DHT型號的腳位圖,確定接腳沒有問題</p>
<p> </p>
<p>err=16(// Error to wait for start high signal.)</p>
页:
[1]