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

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

[复制链接]
STMCU小助手 发布时间:2022-11-16 15:23
该智能环境监测系统采用STMF103R4为主控MCU单元,主要外设有LCD1602,DHT11,EEPROM 24C02以及LDR光电检测单元,采用Proteus作为仿真平台用于对系统进行一个初步的验证,采用CubMX和Keil作为程序编辑软件,以实现监测周围环境的主要参数的功能。
1 Q# k$ q  ~& o+ Y+ Z  V/ U! ~: n3 d" O5 g' @4 z& |& W
第一,先介绍一下Proteus上搭建的硬件电路图。+ ~3 \# d' N: O0 x
首先是STMF103R4单元,如下图所示:
+ j7 K# t# j6 K# |& b" S
- i9 S6 S0 C' n6 w% n$ ] )F3R1WS}0SJ~9K0NQ6{8M89.png
- B; m$ E# q" H3 L% t% L/ O2 a* h; m1 W3 H& V! K* E+ I; J  x
然后是LCD1602模块:
; ]  C# M( N8 v5 P
. d  k4 ~. d( w: m$ k R[N5FRTT~WUEJ%HN9JVOY)B.png % I- d! q9 t  B; b# W

0 o! u# v$ n, {0 T$ e& @0 T% g然后是EEPROM 24C02模块:" n7 [2 U; L- x
& E; S" x" I9 _  ^* e0 \; L
J}PLNP}S{AHU4A{ALU_6BL7.png ( d5 D$ c0 s4 S2 u4 M# W' a6 U' B

- E! r$ ^1 K) J: d0 _2 z然后是DHT11模块:9 n4 ^+ m! j3 d8 c
( t/ o/ [4 N9 M/ u+ @
S[21Y6T[3`74~BSE5{OM7S2.png ! o+ ~$ D2 R& p" T
& L9 A! w" L6 i1 H6 F+ z
最后是LDR光电检测部分,用于转换光强数据:( X4 Z6 b, c  H; w

& ^5 _4 K/ I2 ]: V' r C}R@Q99[9(Y73GO1@EBHE}K.png
# z1 @, t. L; N( w6 [6 P  N
) c' T7 |2 i7 t1 f' M, ~+ X; t6 [最最后,再来一张整体的图。3 ^+ Q( s4 \8 P1 z  Y9 \3 ^
: o6 `8 w1 I0 J0 t
X0]%(CX9]U`4G$H%(@1U@@Y.png
/ C! k, N5 R( E  ~$ b$ Y0 Y- ^
; c8 Q. j5 V$ A' t0 c( M2 Y' r; @7 m1 m) O/ V( ~& J
第二,对功能进行一个简单的概括
# @" J; N$ _: L5 p; Y' ULCD1602实时显示测量的温度与湿度;- y) `3 M/ A" j6 H; [+ W" l

- y+ ^4 V& {/ H& T' L: B对光照强度进行实时监控,在LCD1602上显示AD_Value,8 w! `) U# h$ W7 h
3 R/ Q7 e! h& P" b6 \
设置AD_Value在一定值的时候输出不同占空比的PWM波给LED灯;: R. _. B$ Y; x9 _

$ n, P2 {2 a1 a6 d. {; A3 @; I: f将最近的5个温湿度数据输入进24C02中,存储起来,按下按键后在LCD1602上显示最近的5个湿度温度数据,% N9 Q3 }, E# U0 o' G  e
) q+ C3 Z7 h( o7 N6 V
再按一次按键就显示实时的温度湿度以及AD_Value。
/ w( S. @+ N+ D5 N
. k# h- T) A8 ]( X4 u& g, S' t& f$ |3 H3 K! Z; w2 V* }( J
* N2 ^; Z: E* D. [1 U0 f, `
第三,简单介绍一下Keil中的程序
9 b5 S* m5 d$ u1 I4 `! t& H0 d首先是温湿度采集显示功能,相关程序如下图所示,刚开始调用DHT11_Read_Data函数将温度数据和湿度数据分别赋给temp和humi两个变量,然后将它们赋值给要存储进24C02中的数组,最后调用sprintf格式化函数和LCD_WRITE_StrDATA显示函数将温湿度数据显示再LCD1602中。* a2 j& Z* b' O2 N: W
- E8 ~1 w; e& e* A. S- z6 Y
{%@_)607I_(R$BG$XGOKP.png 8 l. A* u1 @7 _4 \: G/ e
/ s* |" s6 Z, z  o
然后是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灯的亮度。* c8 @+ T% c9 z( I* i7 N: v$ }
) _8 D, P0 C+ y5 m# {4 c0 g
86P)HC3XH$T4_]KLR8XPS1R.png
: S9 f" m1 M( {* Y' n* N1 P; y+ b9 v
还有就是存储最近的5次温湿度数据进24C02中,程序如下图所示,首先复位一下写地址,然后一个for循环调用AT_24C02_write_data写入函数分别将5个温度数据和5个湿度数据写入24C02中以供备用。: g# v3 ~5 B- K& V7 s7 k5 D( W

7 B) @- R( v$ N1 e, j. N VXO8{U@]}_DF7XP$DB]M8[4.png ) \- Z! d# }" B, e

4 _. ?6 t# g& i4 R$ ^最后就是一个按键切换的功能,先提前设置好一个标志位flag,主要程序如下图所示,当检测到按键正常按下后,取反标志位flag,然后给LCD1602清一次屏。6 d* _8 h* f7 ^
: T7 o6 T0 S: C4 [- Z
$@O9~}S1MPD%`HA2F38W3`C.png
1 K! ?6 T3 ^. f" U2 R( @7 C" k( r
. q& p# p6 Q! A. ]* K最最后在while循环里面判断标志位并设置标志位为不同值时的功能即可。程序如下图所示,flag为1的时候读取24C02中的数据并在LCD1602上显示。
$ \0 H7 M4 a. X1 i! q: t) H& p) G- _$ C/ x, V5 H3 j
W40LXO{18CN%OOU82AHAA(A.png
! f* d' X6 ?5 }! H5 I7 R- O- {$ q" i6 i6 l9 c2 B, P9 l! m* f
反之,flag为0的时候则将前三个功能一起应用起来即可。
% ]( K, Q- C) C7 B
$ g' m- W+ o% v G0HVGCGHPZSMID4M]KI9R61.png
1 a3 L% L. B' l5 U6 \$ D2 M$ [6 Q" {0 j+ n, X$ N6 Z/ ^( j

+ [6 N/ z; C2 Z* Q    第四,进入实际检验阶段
& l8 u" S! j& A  O9 B将程序编译好然后在Proteus中显示出来。实际现象如下图所示。& i' o( h5 E7 n. @

9 f. N4 C1 t: Z, t5 L' mLCD1602第一行显示温度和湿度,第二行显示AD_Value和PWM占空比。+ q) b5 d+ c4 i  U# H! F+ j1 z
/ v' S( A* T: H0 |8 U
按下一次按键后,将24C02存储的最近的5次温度数据和湿度数据显示在LCD1602上。
  {/ ?7 O( Q; f. E* m$ `: L& y" g  A" q- n" T- k3 k# q" @
{`W1KBF2STQIIP08[16~E`X.png ; u7 q1 G( Y1 t! f

% o! S% C( ]9 X) Z; W其实还是仿真还是有点问题的,可能调用的资源比较多,Proteus仿真的时候比较慢,且容易卡住,这个问题应该在实际的板子上能够消除。6 \7 L1 G1 F* @! E( n3 s1 q

5 i7 s1 l8 ?! j5 B) Y7 t! t0 ^2 P2 R) v
补充一下CubMX的配置:
2 U& w* A# x6 i, R% j/ ^) _' |) w0 G" t( b5 A9 a0 Q: s
9{9AA7`00DLBWH8UD5IYH4S.png + _7 c0 D! Y. |9 e0 b+ ?

9 A; X7 [) e' q8 c9 y8 `% a P2THBCS)O4)EFIJVQGZ[KW8.png
) V2 \1 H1 x! [$ m" R% c" z* B. |& \' z' T7 ]' E
7 |! Q, N  C* u  \" m% e+ f0 Y
2CEW}NG~KOPE@IO4C{9@C[Q.png   ~# Y; \, ]4 n) R
; A' H* t$ X1 u# m) V6 r
8QNX62K[R_3O{TKP[MPX55Q.png ( u) Q" e  Z( ?3 r
5 c6 u4 u# B: |/ [$ z! D" P/ j* z
HPOA}1I`2(U0TWEZ(GXF}AG.png & h5 B# X* u! N$ ]4 e, e
2 f- v2 K' a4 e3 [, \1 H
B)]2BEPO{)IS5SKJ0RZO4QB.png
8 B0 q- Z% H' }( o/ @3 d. d9 f6 g$ b6 V6 |9 q/ N
作者:jxjajl   bilibili0 x1 I7 {+ ^1 k( Z3 }8 k) Q

. Q3 Y! t/ q# N5 N
收藏 评论0 发布时间:2022-11-16 15:23

举报

0个回答

所属标签

相似分享

官网相关资源

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