你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F103C8 监控室内湿度温度

[复制链接]
STMCU小助手 发布时间:2022-6-21 13:30

1 U5 M* X& e: P% u5 D: h6 b 506ebff58f017e0d1e453d4d5754d681.jpg " k+ a5 b) o: T+ V' m! b0 Q4 r! H
' A  C' ^# T# S: G' K  G
DHT11是一种温度和湿度传感器,顾名思义,用于测量特定环境或密闭空间中的大气温度和湿度。该传感器通常用于监测农业、食品工业、医院、汽车、气象站等许多应用中的环境参数。
9 I  G# ]. O9 n0 @3 ^9 r8 [4 s
  }. z; w8 W6 b8 R该传感器可以测量0°C到50°C的温度,精度为1°C。它通常用于控制环境,如热通风系统、恒温室等,监测温度以采取纠正措施。
* v3 ~- Y# ~6 O) a5 X/ p8 Z# x- A, J$ |8 \7 m) Z
湿度测量范围为20%至90%,精度为1%。湿度表示空气中存在的水蒸气含量。在许多情况下,湿度值必须保持在受控范围内,例如在茶粉的制造和储存过程中,室内必须保持作业要求的湿度,否则会影响茶的味道和气味。客厅的湿度水平也应保持在舒适的范围内,理想的舒适的湿度值在50%到65%之间。9 K" ~' C9 C9 X( Y! z
7 k  u: k& \) Y
今天,我们学习如何将流行的 DHT11传感器与 STM32配合检测环境温度和湿度。前面我们已经学习了STM32 板的基础知识以及如何使用 Arduino IDE 对它编程。
4 P+ n( P+ N% j, M# {" p! Y6 G; g! C6 F3 m3 ]
DHT11温湿度传感器% Y' Q& W- g' _  c2 u9 W& s. k% D
如前所述,DHT11传感器用于测量温度和湿度。该传感器配有专用的内置NTC来测量温度。它有一个8位微控制器,通过单线协议将温度和湿度值作为串行数据输出。也就是说,传感器只有一个数据管脚,通过它可以读取温度和湿度值,从而节省微控制器端的管脚。传感器也经过工厂校准,因此易于与其他微控制器对接。% l; _0 }9 W; e! q! \) a0 V
0 W5 @. r- k5 y" K4 }
d2fb0c98ceedc46a847be490775f9251.jpg
6 v7 q/ o* }1 K0 I1 }4 R! M8 e& g0 p* p; U9 ^& e6 T1 D
DHT11 参数规格:  W! M- n  |/ ~  T2 ]8 |+ }

' Q1 f9 a( d* {# X: u  T9 F§ 工作电压:3.5V 至 5.5V
/ e/ d  \5 Y  g) v! P( d
& _# \( t6 O% N+ ~& q; ]7 W9 j§ 工作电流:0.3mA(测量)60uA(待机)
! T; r5 P" ~3 Y5 q0 M8 ?% p
. F1 z7 ~2 R; G3 I% O§ 输出:串行数据  Q6 C! y8 P9 X9 r: |% c* o

* Q9 l; h0 L( ~+ o& }+ i" n6 M§ 温度范围:0°C 至 50°C
. d( V) z" r1 F/ s) ~* R- x$ i$ w4 J" U" C
§ 湿度范围:20% 至 90%* M4 ]# s& ~' m+ \  E
! X% G$ E, n1 h* d# [
§ 分辨率:温度和湿度均为 16 位
3 Q6 {% k9 p3 S  F- i8 v; m4 k% j7 u: E. r  B" b0 a
§ 准确度:±1°C 和 ±1%3 n  ~; b' N- n( a/ _4 u

9 Q( b4 Y' M+ L; l; D7 M; S a7907ac89ec2bd78b035da5c795f0c1f.jpg   ^9 I0 i4 x2 U3 H  ]

, B% R& J% [: r/ o; r0 q电路连接
& h  y' ]9 _, p8 Y9 i2 d$ p- E将DHT11 与 STM32连接的电路图如下所示。电路是使用 Fritzing 软件绘制的。
" F3 H" l" y2 Z. s8 Y# P
9 ]* |3 E; S2 }6 r- L/ L 2f208c4148798608d528a9fe72e7395d.png
6 Y* M' I/ Q. B$ a0 Q/ A# ~6 p
% m7 B; w% o7 P) Y3 E3 [- M# I6 f' l如您所见,我们使用I2C 接口模块将 LCD 模块连接到 STM32。这使连接变得简单,并进一步减少了控制器端使用的引脚数量。如下图* W# }# o; ~; M3 d- h

- O2 h0 h0 f, r* p 35dafb62e1da58ee9cd683454324b9e0.jpg
$ q6 |' A7 x4 Z" G* M5 [! ^- N+ p% s$ N) Y# ~6 q' n
同样,STM32F103C8 和 DHT11 传感器之间的电路连接如下表所示。
, D8 A; P" z1 F& O/ x
: V. m- _& ?4 B/ P( y3 I7 f8 k 0fd37c6ebfa1055fbef5fe3294f8a67a.jpg . t" M0 V2 `0 W% Z, X* M

7 e6 i+ ?9 J( j; q5 J5 T+ _6 u整个电路由电脑的 USB 端口供电。现在我们的硬件已经准备好了,让我们进入编码部分。+ u2 B8 o4 h5 y7 ~9 n4 p, p

1 |+ A  Q! J# z$ f; J0 P配置Arduino IDE
2 x- V1 _' p8 P2 ?. s& \我们要编写程序,从 DHT11 传感器中读取温度和湿度值并将其显示在 LCD 模块上。这里LCD显示器是通过I2C适配器连接的,因此我们首先要找到这个适配器的I2C地址来与LCD通信。1 ?  y7 C+ x7 Y3 g6 l0 A9 Q

4 ~1 L( s2 c8 m% Q查找 I2C 串行接口模块的地址:
$ d+ c) o% V# S. s
0 l5 d4 g9 K3 V8 i" y& @! I; H6 T1.在Arduino IDE安装STM32开发包' z! u6 ]9 t( Q) n0 a4 [

( Z# S4 N- a3 O' A, F2. 示例中提供了用于扫描连接的 I2C 设备的程序(在 Arduino IDE 中:文件->示例->Wire->I2C scanner_wire)。如下所示。4 e2 U8 z% q* `: ^& ~4 X# o

) X0 c) I1 @6 a) O5 W3 x 823cc03f75819f2f4c02856f16eaab73.png
" N+ k4 P+ \+ x7 ~
9 ?  }3 Y+ D8 {2 E+ _3. 将代码上传到 STM32F103C8,打开串行监视器。给STM32F103C8上电开机。' @" G- z1 N% |* K6 D

! c- v2 j+ }- E' z. \2 Z fdd97edafe797494284f1c40f92336b6.jpg ( L7 Z6 z) h& r* i
/ E3 q4 S3 c7 ?& O
e7acc0ec47c7ec18c72fa3ee30dc927e.jpg 8 s; Q! l2 W9 V
! e3 R7 `9 H, g0 N9 \  o7 r5 ^. [
我们可以看到,在串口监视器中,I2C的地址为“0x27”。* q& f$ E6 U) D$ F5 p
3 ?6 f+ t5 K( k3 ~8 ^, o; n- N) I
安装相关库文件, C0 Y9 ?( R  d4 T/ ~- u6 I  X
导入I2C LCD库,以便STM32F103C8通过 I2C 与 LCD 显示器进行通信。
. x  B* E' \0 H4 V# K1 U2 p0 Q. f& |' P! z$ }0 l+ F* m! [
8359e7e8c0820f93fb1f5a245d96be5d.jpg
1 }" R8 T& I$ X; P) S; I
. l8 u1 b! P. ^" A& m接着安装DHT库- p7 T6 w% o5 d7 U3 z; d- x
" B1 @6 Y8 O- o5 r
7a28c66ccfc4f2f4771dd54201613734.png
5 z0 u  V$ w/ n2 U: g' m( g8 q" n! x) N* _* r0 _3 g* j/ U$ D
安装好DHT包后,就可以开始编写程序了。0 X0 u4 Z: s% x: m& g) }

4 q5 x4 y% U1 m( `程序6 e; ?- Y" _4 @) t
  1. #include <Wire.h> // I2C 库  A! _( _# o- u* M. d: j! j
  2. #include <LiquidCrystal_I2C.h> // I2C LCD 库. `& p( I! n' Y2 r, Y
  3. #include <DHT.h> //DHT库
    $ X- C( S# V) N- A; h
  4. #define DHTPIN PA1 //定义与STM32F103C8的PA1相连的DHT11(OUT引脚)的引脚名称
    7 w' E, m0 E3 ~# u4 i9 D4 A5 I
  5. #define DHTTYPE DHT119 m, v; A$ K: n( @) c  Z
  6. LiquidCrystal_I2C lcd(0x27, 16, 2); //初始化lcd,I2C地址0x27,16*2 类型LCD4 G  A" G: f, ^, x0 Q
  7. DHT dht(DHTPIN, DHTTYPE); // 初始化dht,stm连接DHT的引脚,类型为DHT11
    . r' l0 ?8 Z3 v" j, E4 [
  8. void setup()0 y" F. S9 g+ P# s1 ^6 V/ W! E0 a
  9. {
    ! |5 Y) p  f9 h8 s  r
  10.   lcd.begin();9 t' ?0 U  {" m, a, l" K6 B
  11.   dht.begin(); //开始接收温度和湿度值。+ U( M) ?1 {1 [6 ^4 I5 x8 b' J9 J2 }
  12.   lcd.backlight();8 I* V( U% t6 e3 Q; f
  13.   lcd.setCursor(0,0);* o* H9 k6 l& s3 k
  14.   lcd.print("Hello World");
    : L! f" y# F4 n" Y+ {
  15.   lcd.setCursor(0,1);
    , \0 k2 e" n& y- c
  16.   lcd.print("DHT11 with STM32");  G) m9 {3 f. _% J5 S
  17.   delay(3000);" X& l) J0 W& l) O1 [
  18.   lcd.clear();! |6 V9 F6 q0 I7 S9 ~- P8 R
  19. }
    4 p* j- o. }: `7 X

  20. * X2 {$ R* L7 V3 S9 W
  21. void loop()
    / C6 w$ o$ Z0 M! o1 m# a# x
  22. {8 L, o' N3 x: t# v, {: b( m
  23.   float h = dht.readHumidity(); //获取湿度值
    0 y) ?' l/ D; Q) _6 J
  24.   float t = dht.readTemperature(); //获取温度值* r3 ]% C9 t4 r& Z7 D% T/ b& _
  25.   lcd.setCursor(0,0);) e, D: L( v& [3 W3 r0 T! w
  26.   lcd.print("Temp: ");
    6 d9 r( ]8 L  L. h: Y
  27.   lcd.print(t);
    4 |! Y8 U6 i8 |2 ~' s* ?" x0 O
  28.   lcd.print(" C");
    " I9 m, A( L3 ~" }5 ^- h
  29.   lcd.setCursor(0,1);, K; A5 @: T5 c* d
  30.   lcd.print("Humid: ");
    * ?: N0 W/ t& N1 G1 _( C
  31.   lcd.print(h);
    # G' Z, W/ `- x( H
  32.   lcd.print(" %");
    ' o+ p. \  t$ L& |
  33. }+ k* q/ o7 E9 P& \& i! r; y
  34. , @% S, h2 R7 ]
复制代码
9 g! s1 ^  w/ J" d( |. l4 e

- v$ G2 l8 j+ T3 j
收藏 评论0 发布时间:2022-6-21 13:30

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版