hollyedward 发表于 2024-3-4 13:34

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

<div class='showpostmsg'> 本帖最后由 hollyedward 于 2024-3-4 13:37 编辑

<p><strong>一、DHT11温湿度传感器</strong></p>

<p><strong>&nbsp; &nbsp; &nbsp; &nbsp; 1、模块介绍</strong></p>

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

<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>

<p>&nbsp; &nbsp; &nbsp;</p>

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

<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 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>&nbsp; &nbsp; &nbsp; &nbsp; 2、模块连接</strong></p>

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

<p><strong>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</strong> &nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 接入开发板的3.3电源,数据线接端口8</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</p>

<p>&nbsp;<strong> &nbsp; &nbsp; &nbsp; 3、烧录程序</strong></p>

<p><strong>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</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>&nbsp; &nbsp; &nbsp; &nbsp; 串口输出结果</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</p>

<p><strong>二、光敏电阻模块</strong></p>

<p data-sourcepos="1:1-1:78">&nbsp; &nbsp; &nbsp; &nbsp;<strong>1、模块介绍</strong></p>

<p data-sourcepos="1:1-1:78">&nbsp; &nbsp; &nbsp; &nbsp; 光敏电阻模块是一种使用光敏电阻的传感器模块。光敏电阻是一种光照强度变化时电阻值也会变化的电阻器。光敏电阻模块通常由光敏电阻、比较器、限流电阻和电源电路组成。</p>

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

<p data-sourcepos="3:1-3:119">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</p>

<p data-sourcepos="3:1-3:119">&nbsp;光敏电阻模块的接线方法如下:</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> &nbsp;</p>

<p><strong>&nbsp; &nbsp; &nbsp; &nbsp; 2、烧录代码</strong></p>

<p><strong>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</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 &lt; 300){
         // fade RED in from min to max in increments of 5 points:
    for (int fadeValue = 0; fadeValue &lt;= 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 &gt;= 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 &gt;= 300 &amp;&amp; inputValue &lt; 1100){
    // fade BLUE in from min to max in increments of 5 points:
   for (int fadeValue = 0; fadeValue &lt;= 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 &gt;= 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> &nbsp;</p>

<p>光照强的时候,红色呼吸灯</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>光照弱的时候,蓝色呼吸灯</p>

<p> &nbsp;</p>

<p>&nbsp;</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 &amp; 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:03

本帖最后由 HuangDarren 于 2024-5-15 17:05 编辑

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

hollyedward 发表于 2024-5-17 15:39

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

<p>可以</p>

HuangDarren 发表于 2024-5-20 23:53

本帖最后由 HuangDarren 于 2024-5-20 23:54 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3330381&amp;ptid=1273378" target="_blank"><font color="#999999">hollyedward 发表于 2024-5-17 15:39</font></a></font> 可以</blockquote>
</div>

<p> &nbsp;&nbsp; 這是我連接的方式與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>&nbsp;</p>

hollyedward 发表于 2024-5-21 11:24

HuangDarren 发表于 2024-5-20 23:53
&nbsp;&nbsp; 這是我連接的方式與Output結果(使用您帖子上面相同的Code),因為私信不能傳圖片所以只能 ...

<p>接线没问题吗,接3.3v看看,还有数据线接PA26</p>

HuangDarren 发表于 2024-5-21 22:47

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

<p> &nbsp;&nbsp; 我嘗試使用3.3V了,並且DATA接到PA26,但還是讀取不到</p>

HuangDarren 发表于 2024-5-24 13:56

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

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

<p>&nbsp;</p>

hollyedward 发表于 2024-5-26 10:50

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

&nbsp;

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

HuangDarren 发表于 2024-5-26 14:59

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

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

hollyedward 发表于 2024-5-28 16:54

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

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

hollyedward 发表于 2024-5-28 16:57

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

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

HuangDarren 发表于 2024-5-30 04:54

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

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

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

<p> &nbsp; &nbsp;</p>

<p>err=16(// Error to wait for start high signal.)</p>
页: [1]
查看完整版本: 【安信可BW16-Kit开发板】温湿度与光强传感器接入测试