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

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

[复制链接]
STMCU小助手 发布时间:2022-12-31 19:29
该智能环境监测系统采用STMF103R4为主控MCU单元,主要外设有LCD1602,DHT11,EEPROM 24C02以及LDR光电检测单元,采用Proteus作为仿真平台用于对系统进行一个初步的验证,采用CubMX和Keil作为程序编辑软件,以实现监测周围环境的主要参数的功能。
" f  D+ Y, n1 ?3 }( e6 h) G9 C/ j; o- v
第一,先介绍一下Proteus上搭建的硬件电路图。5 @% r2 }! V7 T4 Z1 }! i8 z
首先是STMF103R4单元,如下图所示:, w3 C0 ]1 G1 `4 I6 u

9 k9 H6 b; ?" ^  b" A6 {) {
GJEZCMI(TY0E%7[3H_U][2L.png
0 w/ t# {' r/ n4 {" f; o1 k3 O" T: O) q: Q, K7 c
然后是LCD1602模块:  o, `  Y- W1 W- p1 U# h! Q

* l3 @7 y- o7 x9 d( G9 Y
LCMM63DLJYVQCJAK5)UVML2.png
$ [5 {: E- V$ G3 m! ]$ x  N

9 E+ n# Y! E5 [4 Q# H( B然后是EEPROM 24C02模块:
. e' |9 _1 z* |) }1 [2 p7 ^- D- n7 U5 T* M& ~4 d
N$(H[Z6C~83QT5BNN`3$EFD.png
' N/ q; p) `6 _$ o! ]' s
# S3 L, B- f' d( c' w$ n
然后是DHT11模块:
; c, I9 P6 L5 U9 f* G/ [9 }6 T- [* L+ V  p
44BTL5N{%P]2{C}N`[0EBIB.png - a9 j3 \% L2 E9 w) q
* N) o. u6 K) @! c. ^" w
最后是LDR光电检测部分,用于转换光强数据:* X9 r5 l* J+ j7 b( ~* ^0 }$ Y
0 O9 x) S1 J2 V7 u" x( C" E( D  D
SHXZOZI5ID5DHXC6Z%GMV~E.png # n) z4 \! [  a+ A0 }- ]

: D5 G: O* Y  a$ Y* z' `1 E. C最最后,再来一张整体的图。
/ x+ s# J3 o2 q% m- M# q4 J/ t2 w1 w" J+ R  G) r6 c
8~6FQF8MY2IDO`BFLFV3FPD.png
. J; k0 \% C9 m3 n# \# b9 q6 T
$ |' F  ~( H8 A& Q- H/ e
第二,对功能进行一个简单的概括" a% T$ T7 s$ X/ R8 h5 D4 C8 E! L
LCD1602实时显示测量的温度与湿度;+ P3 n2 _2 {0 W$ r9 a1 ?5 g0 F

  b2 Z! n' V- s% Z. q对光照强度进行实时监控,在LCD1602上显示AD_Value,
' P3 M& [& V3 }
/ I5 j% f# X1 @4 m
设置AD_Value在一定值的时候输出不同占空比的PWM波给LED灯;
: I: |2 H' I: w! [& r
* v" E; z4 C3 z  U# I& }. h! k
将最近的5个温湿度数据输入进24C02中,存储起来,按下按键后在LCD1602上显示最近的5个湿度温度数据,3 ^" v/ k8 |; _

: h+ {; p) ?! j& q; b5 P再按一次按键就显示实时的温度湿度以及AD_Value。
8 X- ?2 z5 I( B9 D3 Q0 N" _/ O2 l7 ?8 w; E% c0 S: Z% ~- G6 H$ \8 ~

; f% g3 I/ ]' m) p: X
第三,简单介绍一下Keil中的程序
( y9 S* @" ^+ g% H- q3 U) S首先是温湿度采集显示功能,相关程序如下图所示,刚开始调用DHT11_Read_Data函数将温度数据和湿度数据分别赋给temp和humi两个变量,然后将它们赋值给要存储进24C02中的数组,最后调用sprintf格式化函数和LCD_WRITE_StrDATA显示函数将温湿度数据显示再LCD1602中。
; o$ ^; A7 A0 f3 [: n9 }$ ^$ B( I  a0 W$ F# B* p# i; p* w* r1 J
N1_XP]Y)_@H5D~OY7T_XP.png
) K9 Y9 V+ w/ p4 P) }
; h6 k6 S- a& t, l
然后是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灯的亮度。
, Y0 b$ v! E9 R5 o+ g8 Q6 y
4 K( P3 Q; m4 v$ s& F4 l9 x
{37$]U%T49`X@__BQ7S%[}L.png
3 u" V  O' f4 z) ^9 L4 Y' {+ `) u6 F! k- [8 ~4 ^, |
还有就是存储最近的5次温湿度数据进24C02中,程序如下图所示,首先复位一下写地址,然后一个for循环调用AT_24C02_write_data写入函数分别将5个温度数据和5个湿度数据写入24C02中以供备用。
8 h* c* H- ]4 S0 c4 T# T: b1 P
$)~K8OKPO7_@HG{%KC%B}{Y.png
7 a" t! q( q: f9 ]' B+ \' q3 S
  h7 y8 @) `9 y' G5 ^2 Q
最后就是一个按键切换的功能,先提前设置好一个标志位flag,主要程序如下图所示,当检测到按键正常按下后,取反标志位flag,然后给LCD1602清一次屏。+ J5 z  @- U; \8 o

7 ~& B! N+ G! ^) D& z  a
_78(O]9C1%_LUL(SY3G9KUT.png
5 N" [9 K# ]! o  }: V, Z

2 N( r; Y' q0 T, w最最后在while循环里面判断标志位并设置标志位为不同值时的功能即可。程序如下图所示,flag为1的时候读取24C02中的数据并在LCD1602上显示。
: W6 q# Y* b+ V, ^# J8 X: G5 }6 z: N% K( R# a
L_C85_7{G60W@0]40C~HCLG.png
: M) ]4 `: c1 {
" G# ^/ b7 q/ f
反之,flag为0的时候则将前三个功能一起应用起来即可。9 F8 R9 |, Z0 G& {+ M

0 a2 @+ f, H# A+ E0 S% X  c1 U9 ^1 [
1I)U4CQKQC6%I600{@PA.png
6 \: P7 w9 ?0 _- d/ V8 r
" t8 X! k5 x5 p; P6 @    第四,进入实际检验阶段

$ z+ O5 d! E- l将程序编译好然后在Proteus中显示出来。实际现象如下图所示。, r; m: u. _6 F. D) i4 B. |+ X  k

& H' a# I4 a5 C/ r2 l! `# I6 QLCD1602第一行显示温度和湿度,第二行显示AD_Value和PWM占空比。
7 U2 |( M# Q: z& e
" W6 Q3 h# p, e1 b  N按下一次按键后,将24C02存储的最近的5次温度数据和湿度数据显示在LCD1602上。( s: }3 U8 s- E5 ^% A

2 n" i2 O7 T4 n3 u, U# O
[1`H~O]}IOM40%ID5C`A1.png # I7 I' L/ ^3 c

8 j, j% |; m8 O  G( W$ D其实还是仿真还是有点问题的,可能调用的资源比较多,Proteus仿真的时候比较慢,且容易卡住,这个问题应该在实际的板子上能够消除。
1 n6 W8 Q2 b, p; L5 v5 y$ P7 Y, h( e
0 t% Q9 c& l% J. F3 F; t% }补充一下CubMX的配置:
# ~% q8 N6 r6 i+ U6 K' V# y- ]  Q# @5 |
%H2F`RC87)MOXI3G9RXB2RA.png
" {7 j0 [' i8 G% ^  b) S' u1 Z( e2 [0 `. _) _
OE@4{%SRLZMBW7FQL{U2_JA.png
; B+ @$ ]/ E2 W6 [% J9 J* b! q8 B1 W! d8 `6 X
((49S0BYI{29V$N{5PR%7(5.png
4 \" u: f  y. c# `( m6 L+ e2 d" C, F0 l. O
30[ARBPT`9`]Q_ZIK31CJ.png
% R1 F" r# @5 e! H2 }0 O3 z& Q* K/ o$ S& ~2 A; _1 b; h
A5J7$[MA(PT5Q)(8FL4$%[Y.png 0 d$ o" q" @8 a  K' u' Q9 J

) l, O7 I$ B! h8 p
T90AI9Z@V6HLRP19P~NWW_N.png % b3 I/ H% F0 d+ Z) x; E
* a$ p! y3 [; d0 r

3 h& l& [$ C) Y 作者:jxjajl
; X6 h( W3 W: u# P! A" k
7 T; _. y# z+ x% e7 [  d2 u- o, g! z8 L+ F0 S2 \  I7 E6 C6 I
赞 收藏 评论0 发布时间:2022-12-31 19:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版