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

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

[复制链接]
STMCU小助手 发布时间:2022-5-11 13:37
一.硬件方案
, Y4 O6 D) H: h0 Z6 {* Y) l本设计以STM32单片机作为主控芯片,实现对农作物大棚环境的温度、湿度、光强度和土壤湿度进行监测,并根据具体情况进行相应的补水和补光。
! d- m- `, z5 @' N$ W主要由STM32F103C8T6单片机最小系统+wifi模块+温湿度模块+1602液晶显示模块+光敏模块+土壤湿度检测模块+继电器模块+水泵电路+补光电路+按键电路+蜂鸣器报警+电源电路组成;如图:1 M5 G4 ?0 e5 r4 y
# L4 G  L" E" o; R
LHRLOMZL3TS~V1RJIVD3.png - A' }" h1 q  _6 d
  X: ^3 L- P2 P% \+ a+ C$ N! W1 t
二.设计功能
3 _3 _" ~, ^' b7 a(1)采用LCD1602显示屏进行显示,实时显示测量到的土壤湿度,空气温湿度,光照值。4 l0 Z% G% k2 I0 N( M, L+ z- V
(2)可使用Wifi模块实时将采集到的数据传递给手机app。手机app可设置浇水和光照阀值,低于阀值自动浇水和补光;同时也可通过手机app发送指令,直接进行补光和浇水。
& @) A/ _) |/ l3 L3 k2 }* ?(3)当任何一检测值低于阈值,蜂鸣器自动报警。8 M, ]: G% w' x' i, W
(4)可通过按键控制浇水补光;
$ k3 Y' y+ X, }7 R( P" @1 B$ r: S0 e; ^( ]4 _3 ]
三.设计原理图
# T: ~. j( d4 _1 q- n1 C, _% z原理图主要采用AD软件进行设计,如图:# u5 q% H( P1 N: ^$ s
9 \3 k9 m  H0 v: j+ z" x" r4 q+ S
Y$`@}1_C@17]2)H967V7XIT.png # f6 A4 G1 \- ?  v, u
5 b7 I6 j8 _7 s' g7 [
四.软件设计
# v4 C8 \+ {$ X6 ~2 o0 I(1)程序流程图1 e  n& q) n# X: g9 Z3 b
) i2 n( I+ e  p4 ~' p
VU]2M`SZL((YP]3(KGZKW18.png
" G  ]. H- o' j3 S$ U
. ]" Y# K, g( R% L. c- V(2)主程序源码
% z" V( h+ \0 Q& B- |3 t' d6 f1 g" e$ G) m& x  V9 D! N
  1. int main(void)
    ( k% L* a/ c" g3 y* d! s( I" P
  2. {
    8 `7 C  c5 w) P, ^: V3 t" p; h
  3.         u16 adcx;
    " e1 L8 ]" {: w1 `, U7 T: k0 G
  4. //        float temp;
    8 ^( Z1 O. U) w+ a/ h
  5.         delay_init();                     //延时函数初始化         
    9 W1 E1 j7 V/ N- V2 |0 M
  6.         uart_init(115200);                 //串口初始化为115200+ G7 A5 V! b! G) u  B+ `
  7.   TIM3_Int_Init(4999,5999);//50ms           
    * U1 |& e7 j1 s! e2 n0 A
  8.          Adc_Init();                                  //ADC初始化            
    . H3 m7 b, f. @
  9.         Beep_Init();9 [6 K8 A3 f$ _3 M4 I
  10.         Relay_Init();
    2 h+ X4 q1 M3 l9 v6 Z; |' q
  11.         Led_Init();) j, b. J! E8 X3 z  R$ s
  12.         key_Init();
    : D. s6 U, P% D5 I8 T$ [
  13.         Lcd_Init();                  //初始化lcd屏幕& c" S7 U6 g  E, D$ ]
  14.         delay_ms(20);! z, p' F7 p) I
  15.         Lcd_Puts(0,0,"Crop shed design");        //初始化显示         3 e1 w' s% G5 H) [& ?+ M6 S- l
  16.         delay_ms(1000); 7 [( p& Q: S; T' B! l6 D" V
  17.          delay_ms(1000);
    + ^. u" m/ |7 H, L# a; W& [' ^
  18.          delay_ms(1000); , c) A2 Z: Y% y3 p
  19.          delay_ms(1000); $ l# a$ O8 B/ ~, n: s
  20.          delay_ms(1000); " D8 T1 {" ?: G5 I4 K- H
  21.         while(1)) o( b3 ^$ a) J( F( Y# S
  22.         {- g8 V" t& |1 m
  23.                 if(ReadDhtFlag==1)//定时读取温湿度标志& N( k; v. R" T
  24.                 {                        % x& P" e# p5 a! P2 B& ^* g
  25.                         . {+ B" X8 p1 [. B
  26.                         sprintf(tab,"Temp:%02d DH:%02d",(u16)DHT11.Tem_H,(u16)DHT11.Hum_H);
    6 t% f9 ^  h* k' U% m2 `7 G
  27.                         Lcd_Puts(0,0,(unsigned char *)tab);        //初始化显示
    ! P: C% ]$ ?8 }& F; D: T
  28. 6 i, o* g9 _  V  I; W) M7 Q
  29.                 }                5 B0 g% I) {  [6 l% y* q
  30. / K8 c" c$ V, j; J
  31.                 if(readFlag == 1)// 定时读取标志
    : U8 _$ k7 P* k+ ^( L
  32.                 {. c. A& e! w  _7 `0 c% S# H
  33.                         readFlag = 0;        ; x0 ?4 ]+ K+ x- J0 t0 X8 d8 j( I
  34.                         soil =99 - (unsigned int)adcx*99/4096;// 浓度按照100算*100                                                        
    ; a. U+ q3 ^% a( w: w: e# Y
  35.                         sprintf(tab,"soil:%02d",(unsigned int)soil);1 k7 t  O( e) ^6 H! o& Y
  36.                         Lcd_Puts(0,1,(unsigned char *)tab);        //显示
    # x& s/ s5 o) v) L6 t) C
  37.         
    / e9 T" f& m9 L' {% O
  38.                 }
    5 q7 \7 L) q1 Z6 ^- ]8 b

  39. ' z: D+ B7 S* [0 H! v$ r# S' ?
  40.                 if(readDhtFlag == 1)// 定时读取标志$ c% @6 H/ T$ I
  41.                 {
    - p3 t5 g9 s$ L% s2 y  Y) W
  42.                         readDhtFlag = 0;        2 V) H' f. ~9 o# }6 T- t
  43.                         ligh_max = adcx*50.1/255;+ f) W9 t) N( B! L! @+ a+ S( }
  44.                         if(ligh_max>460)
    ! X: R9 [3 k6 P' Z7 c
  45.                                 ligh_max=460;
    - u% }* x0 n$ z# o: U
  46.                         ligh =475-ligh_max;// 浓度按照100算*100                        0 a( t/ A# s0 r0 x1 \- |
  47.                         sprintf(tab,"ligh:%03d",(unsigned int)ligh);' i+ H$ ]3 _# u: T! D% q% z" ?
  48.                         Lcd_Puts(8,1,(unsigned char *)tab);        //显示2 e* A7 u1 `0 {7 Z: J+ _% F3 M
  49.         7 m# G, W# v8 ?
  50.                 }; s+ f3 f" h: I" j+ ^: m- Y; t9 J
  51. 1 u8 P# D: G% t
  52.                 if(Key3==0)
    1 p% _5 L1 i2 A( b% q) M
  53.                 {
    ) _. P9 E: }; A5 ?6 o
  54.                         delay_ms(10);
    $ X, h0 e( v2 A$ I# p/ \7 f4 X/ Q1 }
  55.                         if(Key3==0), B0 f- B- n9 X- h" f2 j
  56.                         {. g; J- s+ e6 V% l5 K3 i; m0 t
  57.                                 HAS_Flag = !HAS_Flag;
    6 H2 u/ o6 F2 F- l7 C
  58.                                 Led=Led_before;
    " o8 x/ l/ F% g2 B/ ?1 f
  59.                                 Relay=Relay_before;                                       
    1 U2 @( g6 u5 j# f& d% o
  60.                                 while(!Key3);  
    5 ~( a7 x" f8 ?# H0 D( i4 o
  61.                         }+ R1 w& w  j& q. e& o
  62.                 }        % ~7 s1 R5 ]+ v/ }8 |
  63.                         
    & M% E7 N' I) a" }5 T6 {
  64.                 if(DHT11.Tem_H>TEMP_Alarm||DHT11.Hum_H>HUMI_Alarm||soil>soilmax_Alarm||ligh>ligh_max_Alarm); I3 I& w' L4 W
  65.                 {$ p0 W, N1 m( A' G
  66.                         Beep=1;               
    / r0 `" b; i5 M4 R9 N0 j
  67.                 }
    ' M( C+ F; D1 Q: ]. p* |) r
  68.                 else
    $ q3 j( J7 r/ \, ]
  69.                 {7 R/ E% P6 ?8 `) r/ J
  70.                         Beep=0;. i8 e7 C9 e+ M! c" ^) g3 }
  71.                 }* u! k0 r+ Z" \" R5 d
  72.         / g3 }/ d3 l7 d% }( k  V( }
  73.                 if(HAS_Flag==1)
    + X. T2 m0 R9 u/ G
  74.                 {
    2 S) R' Z1 M9 i0 b! {4 E6 k
  75.                         sprintf(tab,"M:%01d",(u8)HAS_Flag);' U/ u/ h; g  a4 J# `
  76.                         Lcd_Puts(13,0,(unsigned char *)tab);        //初始化显示                        
    * t2 o/ N- O9 F! w7 a  N0 {
  77.                                 if(Key2==0)
    - \5 z3 d4 j* {" |2 x
  78.                                 {  F1 Z% U; a; q% u" F& E4 P
  79.                                         delay_ms(10);& M' D: Q( ~0 D
  80.                                         if(Key2==0)( ~5 w7 K2 A0 h4 S7 \$ C
  81.                                         {$ t4 h5 @- r5 J8 p. R% ~
  82.                                                 Relay =!Relay;        $ ^' R- ~# x0 S0 O4 E
  83.                                                 while(!Key2);  8 C0 D) L0 l% f) ~" [6 W. T  {
  84.                                         }: s. s; _; f9 c  ^! P; Z% b
  85.                                 }               
    5 r, n, m# d  [- V
  86.                                 if(Key1==0)+ Z2 k  I* f0 M0 s
  87.                                 {6 A" _5 H( Q' {; t: \
  88.                                         delay_ms(10);
    ) F$ Z2 L+ d1 P0 [6 K
  89.                                         if(Key1==0)
    , ~% D. Q7 `9 @) g
  90.                                         {' h/ q# |+ u/ Y
  91.                                                 Led =!Led;        , ~' w3 Z  Q6 N- O1 ?8 b
  92.                                                 while(!Key1);  
    5 |  ]" n3 @/ P3 y" z. l* l
  93.                                         }+ F% D2 g2 \/ t; V. v
  94.                                 }                        
    3 p8 t: `0 h3 h0 G, x6 ?
  95.                 }
    $ w& U' t3 y( c* B: m8 a" u; |$ L
  96.                 else( s; W4 c7 H2 {! ^
  97.                 {4 g0 A& {4 L5 K! W: t
  98.                         sprintf(tab,"M:%01d",(u8)HAS_Flag);
    9 f5 O1 q7 q5 Q! f( J1 L: B
  99.                         Lcd_Puts(13,0,(unsigned char *)tab);        //初始化显示                         " Q: c) A: n' l- O$ c* b
  100.                                 if(soil<soil_Alarm)+ Z+ [, k) [/ G8 T
  101.                                 {' x7 O4 n) ?( G
  102.                                         Relay =1;               
    0 ?, b( Y- t( P1 J* T
  103.                                 }
    / @4 \& v% S. o/ e2 N
  104.                                 else: D5 r% X/ Z) ~$ ~6 g
  105.                                 {
    & w! b$ ^( |: d' C
  106.                                         Relay =0;                        
    6 J$ M; I3 e3 ], v! D1 J- }
  107.                                 }                8 s7 a' F8 o, H: V6 [
  108.                                 if(ligh<ligh_min_Alarm)& ]) f# [' N: x, s  n
  109.                                 {
    - {, W. p, W2 b5 P. @  _
  110.                                         Led =1;               
    : z+ a$ M$ s, F" ]2 x7 o
  111.                                 }
    ) t# _" G4 `: `; A
  112.                                 else
    ' N# `8 h% E( _/ D  ]; g& d
  113.                                 {; T' d  t; o9 u! @0 `; A
  114.                                         Led =0;                        
      b8 h; y, T: {! V8 I
  115.                                 }                : Q- k7 u- g( L  x; \8 V
  116.                                 Led_before=Led;
    % ?# `& K7 F! ?: n& z5 k
  117.                                 Relay_before=Relay;                                8 j3 \9 X' o6 J  y2 T* X  x
  118.                 }        9 \) C1 q" ~  K, C  B! Z
  119.         }                                                                                            2 b, x9 {, l* w0 v3 B/ ]* C
  120. }
    7 K+ w# B. B. r% U6 |; V
复制代码

4 j$ y+ R2 P9 i" @2 D! a0 @* J. r9 e9 \  l# i; W* a0 P8 @
- H3 m/ F0 M# _. l
" M1 [! N- U1 {- y) E
赞 收藏 评论0 发布时间:2022-5-11 13:37

举报

0个回答

所属标签

相似技术帖

官网相关资源

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