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

使用CubMX和Proteus学习STM32单片机(七)------智能环境监测系统

[复制链接]
STMCU小助手 发布时间:2022-12-31 19:29
该智能环境监测系统采用STMF103R4为主控MCU单元,主要外设有LCD1602,DHT11,EEPROM 24C02以及LDR光电检测单元,采用Proteus作为仿真平台用于对系统进行一个初步的验证,采用CubMX和Keil作为程序编辑软件,以实现监测周围环境的主要参数的功能。5 t# A: N; ~3 }: K7 C

: V2 T- B' Z# H第一,先介绍一下Proteus上搭建的硬件电路图。
0 N" }) E$ [* A/ x( i" Q0 q首先是STMF103R4单元,如下图所示:
+ v7 d" w) h. \( K& G% {8 l# U9 f: V8 z! a$ U
GJEZCMI(TY0E%7[3H_U][2L.png
  F- m: R: r7 \/ W. @$ \$ G/ j& [
5 S. f9 ~) M2 A6 [+ J5 {  L8 I然后是LCD1602模块:
! ]/ f6 \$ t  S! D$ a  W! \8 O1 T/ L% _3 v
LCMM63DLJYVQCJAK5)UVML2.png
5 k. G# I, t+ S9 [: f

" y0 Y$ a/ y% G' F然后是EEPROM 24C02模块:4 [3 [+ z9 @1 a, |

( Z* ~! e2 a2 D8 `
N$(H[Z6C~83QT5BNN`3$EFD.png * g% s) x7 |+ N2 _4 T
( ~1 F$ f6 b7 R! ]( I
然后是DHT11模块:
$ I/ S$ g' s3 p1 P, ~/ U7 r! t2 q8 S
44BTL5N{%P]2{C}N`[0EBIB.png : N8 j$ e  X. S  a
8 B  i0 p3 J; Y8 L
最后是LDR光电检测部分,用于转换光强数据:9 M) M8 j. j/ x

2 |3 Q) u: P& l: L' c' k
SHXZOZI5ID5DHXC6Z%GMV~E.png
: K( F; u7 C2 z' A
5 \2 V# B$ n1 L; ^  t3 v8 Z" x5 V
最最后,再来一张整体的图。
% T/ x6 H: l6 E
: C6 x8 y5 U# V$ S* X) v
8~6FQF8MY2IDO`BFLFV3FPD.png # |$ r# b, ~+ U# t. B$ [2 P
1 u5 G, ~2 a: _- [$ ^7 M
第二,对功能进行一个简单的概括8 k& S- z, E4 m, b1 N' f  A
LCD1602实时显示测量的温度与湿度;' B$ F7 S2 B) Y4 V* X: X
) d1 K0 ^6 o! H3 t% W
对光照强度进行实时监控,在LCD1602上显示AD_Value,
( P( t* ]. O5 |# i5 g
  w: h) t  n; J! d5 B. }; z
设置AD_Value在一定值的时候输出不同占空比的PWM波给LED灯;
  T3 A/ D6 Z. X4 w; `* J2 B
: d' T$ P0 _+ n
将最近的5个温湿度数据输入进24C02中,存储起来,按下按键后在LCD1602上显示最近的5个湿度温度数据,' v8 q% h3 Z3 ~  D! A

3 c) z. x% J" q' {( u再按一次按键就显示实时的温度湿度以及AD_Value。
% x6 ^1 k! @1 T2 n- J  f) w! R# z
# K5 P3 _& t) H7 X
- O" G% ^& |4 N4 y
第三,简单介绍一下Keil中的程序" J* e$ Q3 m) z# c. ^2 v' ~
首先是温湿度采集显示功能,相关程序如下图所示,刚开始调用DHT11_Read_Data函数将温度数据和湿度数据分别赋给temp和humi两个变量,然后将它们赋值给要存储进24C02中的数组,最后调用sprintf格式化函数和LCD_WRITE_StrDATA显示函数将温湿度数据显示再LCD1602中。
2 c: b8 Q6 S: Z6 e, y
/ S% B5 M9 b- R
N1_XP]Y)_@H5D~OY7T_XP.png / e; D1 ^3 h  L7 R8 C- l* ]

" L1 M# ]* N+ s$ x# Z然后是ADC采集功能以及PWM占空比设置功能,光照强度越强,AD采集的电压越小,需要LED的亮度也要越暗些,所以PWM的占空比要小一些,所以AD_Value与PWM的占空比P_Value成一种正关系,即AD_Value越大,P_Value越大,设置P_Value=AD_Value/50就行,因为AD_Value最大值是4096,不要让P_Value超过100就可以了。程序如下图所示。刚开始掉用HAL_ADC_Start函数启动32单片机内部ADC,之前已经初始化了,然后判断是否转换完成和检测完成,都没问题之后再用HAL_ADC_GetValue函数获取ADC转换数据,然后计算出PWM占空比,再进行格式化并在LCD1602上显示。最后将新的占空比写进__HAL_TIM_SET_COMPARE函数中,从而改变输出的PWM波形占空比,改变LED灯的亮度。
# v" `9 N4 y4 [9 l2 Q3 @5 F
! d; m3 i+ \1 Z! H& c4 ~5 r
{37$]U%T49`X@__BQ7S%[}L.png
9 i: M, y( v  [4 I" c  t
' A' e& |( g# r$ F- I6 v. i还有就是存储最近的5次温湿度数据进24C02中,程序如下图所示,首先复位一下写地址,然后一个for循环调用AT_24C02_write_data写入函数分别将5个温度数据和5个湿度数据写入24C02中以供备用。  h% ]3 [, g5 B% Z& |  b! d' ?

6 Y& F3 _! B, N
$)~K8OKPO7_@HG{%KC%B}{Y.png
% x2 u, q# j/ e7 [1 r' h) U0 M( q& w' d
. t0 d; w6 [1 c) J2 T
最后就是一个按键切换的功能,先提前设置好一个标志位flag,主要程序如下图所示,当检测到按键正常按下后,取反标志位flag,然后给LCD1602清一次屏。2 C1 `8 B* h8 W/ f4 b8 y
' U  m, D9 ]+ |& k
_78(O]9C1%_LUL(SY3G9KUT.png
# k0 u# H4 d' `+ }

0 x" q5 J* _% U- T" \: H3 n最最后在while循环里面判断标志位并设置标志位为不同值时的功能即可。程序如下图所示,flag为1的时候读取24C02中的数据并在LCD1602上显示。$ m& P& N& r$ u, U7 u. S, x
' B5 B1 y4 R$ e; `. Q
L_C85_7{G60W@0]40C~HCLG.png
5 c7 `/ X. n; r7 t

2 b3 R! l) e8 c, ?反之,flag为0的时候则将前三个功能一起应用起来即可。
7 I2 D5 h  M( W- ?5 w
' }% n3 W: T( y1 e0 [
1I)U4CQKQC6%I600{@PA.png & f5 @) \$ w4 H; K# E
4 X5 p$ N* w  X0 P8 B+ s
    第四,进入实际检验阶段

$ V8 Z7 ~& g7 E+ I- X将程序编译好然后在Proteus中显示出来。实际现象如下图所示。0 E  @- s2 g# V/ Q

) \" F- b: ]" zLCD1602第一行显示温度和湿度,第二行显示AD_Value和PWM占空比。
- g9 p6 q9 V1 i9 J
% J+ W) m# T" J# J按下一次按键后,将24C02存储的最近的5次温度数据和湿度数据显示在LCD1602上。
0 \, d1 B( P6 o9 A$ T; F$ H  b! u) I' I
[1`H~O]}IOM40%ID5C`A1.png / q5 Y+ f8 D% m1 I9 I4 w3 s& n

8 `" Y( i0 w' o; B( F. G其实还是仿真还是有点问题的,可能调用的资源比较多,Proteus仿真的时候比较慢,且容易卡住,这个问题应该在实际的板子上能够消除。) M' g4 o5 W) f9 D9 E7 y. v- H1 z
( j  n6 B4 ~& V3 e3 ^2 T
补充一下CubMX的配置:
/ \$ S7 t' S' f: ^: D* l2 J- Y
4 F) e# |- ^) l  b' Q1 t- J0 m
%H2F`RC87)MOXI3G9RXB2RA.png
0 ^/ w- q# r- i! k6 b# f
! d% r; u8 V' ?/ {0 ]4 [
OE@4{%SRLZMBW7FQL{U2_JA.png 6 A+ {! b* u' J1 o; ~
# Q, O. F" y/ M
((49S0BYI{29V$N{5PR%7(5.png
* j* `9 `8 A0 w8 z
- X+ R, t! m3 D9 I5 M9 z. v
30[ARBPT`9`]Q_ZIK31CJ.png / S! q  h# p5 _, S$ _& a$ Y8 k

3 M" \1 P! f" R8 t2 U
A5J7$[MA(PT5Q)(8FL4$%[Y.png 3 v# _. U. H) g3 B& F( t, F8 a
# W5 H6 d. m, E) b
T90AI9Z@V6HLRP19P~NWW_N.png 9 Y) c( Z- D9 q7 b

9 k) ~) ?, p. P$ e
9 m+ A% k5 d7 K 作者:jxjajl
, h3 p) D! a. I$ n$ ]  @1 f8 h" f/ |/ Q" u$ Y/ N; |8 W+ U
+ l; s- V& G) d
收藏 评论0 发布时间:2022-12-31 19:29

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版