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

【经验分享】基于STM32单片机的农作物大棚灌溉系统设计

[复制链接]
STMCU小助手 发布时间:2022-5-11 13:37
一.硬件方案
2 j& T$ M/ f+ P( }本设计以STM32单片机作为主控芯片,实现对农作物大棚环境的温度、湿度、光强度和土壤湿度进行监测,并根据具体情况进行相应的补水和补光。; T4 C- |: M/ W$ [& k& `1 Y6 R
主要由STM32F103C8T6单片机最小系统+wifi模块+温湿度模块+1602液晶显示模块+光敏模块+土壤湿度检测模块+继电器模块+水泵电路+补光电路+按键电路+蜂鸣器报警+电源电路组成;如图:
. m! z7 e/ u  }! B* w6 D; ~
' \7 i9 s- G4 w. s7 E4 G0 p, Z LHRLOMZL3TS~V1RJIVD3.png ; P/ U( \0 l0 v4 J  u) m/ p1 Z. e
* W9 n6 y0 r, }) k& S9 i
二.设计功能
: v$ ^$ D5 z9 Z+ v(1)采用LCD1602显示屏进行显示,实时显示测量到的土壤湿度,空气温湿度,光照值。8 _2 V1 P4 H* U0 }
(2)可使用Wifi模块实时将采集到的数据传递给手机app。手机app可设置浇水和光照阀值,低于阀值自动浇水和补光;同时也可通过手机app发送指令,直接进行补光和浇水。
7 b5 B1 d! n( x) A(3)当任何一检测值低于阈值,蜂鸣器自动报警。
8 {( r. Z9 s* [2 r" Q(4)可通过按键控制浇水补光;
+ u8 w# F& I, i. m( Z# ]
0 @2 d( @) e* K& [+ G0 A三.设计原理图
; \; D0 C3 X7 Z$ N# t! a原理图主要采用AD软件进行设计,如图:
; Z& e0 z2 T! y1 u  h( x) l8 P% ~( R; h2 `' \0 b9 }. I( s! m
Y$`@}1_C@17]2)H967V7XIT.png
- Y4 }4 l+ E( @- Q1 G5 X* L" R! @. P" e. Q1 k6 G" E. \" V, A
四.软件设计
7 d. u  }! @5 d% r$ f; Z+ g* x(1)程序流程图
( H# J0 o8 j; ~5 H, I5 C% @! F1 ]+ x8 F2 p! `& m' E
VU]2M`SZL((YP]3(KGZKW18.png 5 n& X$ G9 e. S5 r1 f3 W

1 a; r- K% t& Z" y$ b  t- h* I(2)主程序源码
4 Z0 K; O( s, m" l1 C
" P1 v/ t) p( l9 J/ {2 l1 Z
  1. int main(void)" w1 V& ]) U7 ], v7 L
  2. {
    + |# G: M' ?$ ~; f1 F
  3.         u16 adcx;6 ~* {/ v. W$ m3 w* s5 ]' f$ z% M: ]
  4. //        float temp;
    $ O8 E  V" L  c9 @7 p# d6 S
  5.         delay_init();                     //延时函数初始化         
    : _( W5 z& P8 ?: {2 m2 C
  6.         uart_init(115200);                 //串口初始化为115200
    8 y4 y7 o* _- K4 p4 ]- Z2 P( e
  7.   TIM3_Int_Init(4999,5999);//50ms           ( H+ F4 P) f: g* l" i
  8.          Adc_Init();                                  //ADC初始化            
    - j" X1 z/ r; r: h  N
  9.         Beep_Init();
    , Q& v1 E4 A! X" I
  10.         Relay_Init();* d) A3 S- u* p2 Y' M& b7 j
  11.         Led_Init();4 w7 D  a2 D0 J
  12.         key_Init();
    % g4 F  o! b6 m7 f7 U6 d3 a
  13.         Lcd_Init();                  //初始化lcd屏幕- J4 {- y% m% F; j8 A- Y
  14.         delay_ms(20);
    4 v4 U3 Z# J' C& u
  15.         Lcd_Puts(0,0,"Crop shed design");        //初始化显示         $ C1 E3 u- w7 R5 @% q6 K! e4 t7 I- |
  16.         delay_ms(1000);
    % t7 Z4 A( P' j0 U( _2 V$ q8 a
  17.          delay_ms(1000);
    ( z: @3 i! W4 }1 A
  18.          delay_ms(1000); 3 g' ~  N  w3 \
  19.          delay_ms(1000); 5 ~* T6 w: U& c% x. {/ c, J
  20.          delay_ms(1000); & u, D5 r1 g# X$ h: |# M% Q
  21.         while(1)1 a. j1 ~' C' d0 {; s
  22.         {
    0 ]4 S: ^) H/ g% S  o. c
  23.                 if(ReadDhtFlag==1)//定时读取温湿度标志
    & E, P) x/ M. w: I2 k
  24.                 {                        + l/ b  B! D- W. x0 z2 V/ T
  25.                         
    ; J+ ~* `' N: z; C0 V! \
  26.                         sprintf(tab,"Temp:%02d DH:%02d",(u16)DHT11.Tem_H,(u16)DHT11.Hum_H);/ K+ t( H( Y# O# P! P# ^
  27.                         Lcd_Puts(0,0,(unsigned char *)tab);        //初始化显示 ) ^% s; ?) b0 E# U
  28. % x5 W" j( ]  F% e% R
  29.                 }                # Y3 [. q" H! Z- x9 l
  30. ' D( t1 \% c9 ~% g
  31.                 if(readFlag == 1)// 定时读取标志
      A3 M* G5 t5 z
  32.                 {; S% h* p. K6 v! Y6 A: x
  33.                         readFlag = 0;        
    3 D% q) x9 P  |5 ^  z$ M
  34.                         soil =99 - (unsigned int)adcx*99/4096;// 浓度按照100算*100                                                        
    : T0 r- w  C( {" N8 f
  35.                         sprintf(tab,"soil:%02d",(unsigned int)soil);
    ( \- i# z) D3 D4 h3 m
  36.                         Lcd_Puts(0,1,(unsigned char *)tab);        //显示% H/ l" C* h' e# H  R( k
  37.         ; x) L1 k  m% R- B
  38.                 }; i% a7 ?% w2 o' v7 C

  39. : e1 {2 D( s0 g6 X7 H$ b
  40.                 if(readDhtFlag == 1)// 定时读取标志
    , K% I! ^: g/ D* o- E- \2 f0 G# _
  41.                 {
      D4 s  ^) s* {+ |. y5 t+ S
  42.                         readDhtFlag = 0;        + }9 w+ o6 f' `3 ^( |7 c! h
  43.                         ligh_max = adcx*50.1/255;
    & x& U) a$ Z* g" v9 g: @
  44.                         if(ligh_max>460)
    2 y" m1 E0 M  c- m' S6 Q
  45.                                 ligh_max=460;+ o+ V5 b5 y1 L! ~5 G" s3 l
  46.                         ligh =475-ligh_max;// 浓度按照100算*100                        
    " s# M0 q, h6 s- L  S
  47.                         sprintf(tab,"ligh:%03d",(unsigned int)ligh);4 r( o+ t' C$ _
  48.                         Lcd_Puts(8,1,(unsigned char *)tab);        //显示8 ]) Y! _% c6 ?3 w/ c% J& F
  49.         6 H' p* T. @4 ~  y" i+ C! y0 w* {
  50.                 }2 Y' E' U( _2 n! ?) H! W+ y  ~

  51. 8 K) W0 O6 S  B" @; ]
  52.                 if(Key3==0)* y. `' u9 b( G' Z
  53.                 {0 H- ~! {; \1 M" s+ j2 P1 S
  54.                         delay_ms(10);# Z2 A: q3 f9 b* G8 o
  55.                         if(Key3==0)
    0 j) @3 ~: P2 ]  F
  56.                         {
    - c# Z5 ]9 A$ s' Q/ j- l
  57.                                 HAS_Flag = !HAS_Flag;
    1 E; ]$ ?/ D' `* K& m# |8 A
  58.                                 Led=Led_before;
    ' ]+ S2 i% N; |) X- K! `) `' V5 Z
  59.                                 Relay=Relay_before;                                       
    5 A1 s4 |' _  o6 I3 k& Q/ u
  60.                                 while(!Key3);  - i; p$ B  {: B" }( g3 P6 r
  61.                         }
    4 Q  m* S  ]3 z% G- d3 r- `
  62.                 }        , @* y# @- q8 O+ U
  63.                         
    ( o' H( l/ M2 y& _2 y5 R' P1 P
  64.                 if(DHT11.Tem_H>TEMP_Alarm||DHT11.Hum_H>HUMI_Alarm||soil>soilmax_Alarm||ligh>ligh_max_Alarm)
    # t4 ^/ M( N- R# i/ N+ O: C
  65.                 {* Z1 K6 r$ C2 r5 X
  66.                         Beep=1;                1 D, c( l& J" W) r7 v( Z6 y: j% `& q
  67.                 }
    8 K! V$ O; ^: V5 i3 ~3 o% q
  68.                 else  F" B* d( M6 [# I
  69.                 {
    % `  v/ ]5 W& g
  70.                         Beep=0;2 {  K3 r1 O% U. q2 }
  71.                 }
    7 A% e% i" E- }+ A; o
  72.         
    4 k5 R/ M* c0 E8 b& j
  73.                 if(HAS_Flag==1)# S1 G9 L' ?, w& _: R4 e2 D. d
  74.                 {) G) ?/ Z: u" Q" U) U+ q6 B
  75.                         sprintf(tab,"M:%01d",(u8)HAS_Flag);2 p7 x% d, w$ n. f2 x! h) g' q
  76.                         Lcd_Puts(13,0,(unsigned char *)tab);        //初始化显示                        
    ) U. H' V/ w. p  x/ z
  77.                                 if(Key2==0)( p- a$ p; `8 o  s
  78.                                 {
    " s) k- R. v0 {, B9 }2 }$ s7 n
  79.                                         delay_ms(10);
    ! `+ ^: Q* N7 _2 V( O
  80.                                         if(Key2==0)
    % T2 y% O6 {5 r$ ~
  81.                                         {
    + n# Q( ?$ \+ z8 N0 K1 y) q7 w" f
  82.                                                 Relay =!Relay;        4 s+ e* {  G# I8 |; f' U6 e$ g
  83.                                                 while(!Key2);  ; \) L- `' T( @" i) D
  84.                                         }5 ^  G. X, g2 @) b
  85.                                 }               
    4 o+ p3 W9 j- _% q9 A% h
  86.                                 if(Key1==0)6 Q( y+ @) t0 R# k- K
  87.                                 {1 b. O+ z9 q; C. y7 v2 F/ ?; Z. U
  88.                                         delay_ms(10);! ]$ l5 M% Z/ k0 O
  89.                                         if(Key1==0)
    * a0 G! b9 Y, C' _0 d; E
  90.                                         {" L6 k( u6 [7 g8 t4 f9 n; m
  91.                                                 Led =!Led;        0 I1 Q: M& B: q: @! T
  92.                                                 while(!Key1);  2 W  o7 G) Q+ m; {& d7 R/ e# h
  93.                                         }
    % _, T$ j0 O6 O0 w% J
  94.                                 }                        
    . j9 J2 g& Y0 S' h
  95.                 }
    1 Y7 D# E- r: ~/ ~6 n2 Q
  96.                 else, L& Q8 F0 l# ?5 v( g, A% n0 P
  97.                 {0 h) `( z. e. \% s
  98.                         sprintf(tab,"M:%01d",(u8)HAS_Flag);
    3 a0 E# p* I1 T8 E5 B+ }
  99.                         Lcd_Puts(13,0,(unsigned char *)tab);        //初始化显示                        
    ) f( o/ q0 |- x/ h% o1 {
  100.                                 if(soil<soil_Alarm)
    ' b3 O! T" J# N, R' j/ ]
  101.                                 {
    / m0 `0 K. f3 U
  102.                                         Relay =1;               
    * m% n  H2 D  c- M; g, c1 `
  103.                                 }3 w5 D7 X5 U! ~2 i- e, y- T) Y
  104.                                 else& o9 M) f- u4 [8 y% p
  105.                                 {' W5 m8 S0 f  C5 F
  106.                                         Relay =0;                        % G7 }+ R8 a4 s+ ?5 A* t. g
  107.                                 }                / n2 I( n; Q, [( J6 _% U% m9 [7 ]
  108.                                 if(ligh<ligh_min_Alarm)! y# @+ h: N/ c! K! I
  109.                                 {
    & n3 n$ Y4 F: p$ h% X
  110.                                         Led =1;               
    " Z6 J& F" L! {4 w6 {3 K0 ~. h
  111.                                 }
    4 u, L, _+ `" S# b* _+ q: F2 c
  112.                                 else0 h  f% y. W5 s/ {3 U+ |& }+ `: a% k
  113.                                 {
    + J, l) g5 z% E/ j! w" P, c
  114.                                         Led =0;                        * G' D* X: [/ Q
  115.                                 }                7 H, K2 n. v2 _' y- Z) r- s8 G: Z
  116.                                 Led_before=Led;% ~& O8 r' k) [+ N
  117.                                 Relay_before=Relay;                                5 h; U8 c5 m* g( L0 p; e/ J
  118.                 }        
    - v* T' t/ c6 ?9 P
  119.         }                                                                                            ' e7 L# E8 s  i6 y4 x' U/ _
  120. }
    9 q2 D  {, h; r8 z. y
复制代码
2 i- x3 K/ a8 q+ h2 |1 s
0 k' ]8 z3 P, f( I6 j

! a+ F8 I  M: p6 m7 }! s
" a. b2 B1 q" _: X* ^3 Q) L3 @: J1 C
收藏 评论0 发布时间:2022-5-11 13:37

举报

0个回答

所属标签

相似分享

官网相关资源

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