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

【经验分享】STM32单片机老人防跌倒报警系统GSM短信上报加速度

[复制链接]
STMCU小助手 发布时间:2022-5-12 11:19
一.硬件方案, U3 Q) z# R9 d( z! _: l* ~
本系统由STM32单片机核心板、ADXL345加速度传感器、GSM、指示灯、按键电率+蜂鸣器报警及电源组成。: a" ?* V; r' K  u% l) L+ @+ X
  m* }! e4 s0 D' k# t7 o8 l
二.设计功能; \: O4 ^% f' V4 _! w3 t2 p2 Y& b
(1)板子正常情况下是竖直装在口袋里的(adxl345模块在下角竖直立着),一旦倾角传感器检测到平放即摔倒,蜂鸣器报警,且摔倒的时间持续超过15秒短信报警(15秒是为了确定老人已经跌倒且15秒钟都没有自行爬起来,需要报警提醒周围的人帮忙)。如果老人没有跌倒,而是弯腰等等,这属于误报警,则老人可以自己用按键取消键取消警报。
! y8 k: e) ^# s# ?4 J(2)触发GSM模块实现短信的发送, 设备将会向人员发送信息“help me!”!: v' S3 b( ~* R. V
(3)短信处理及初始化有状态指示灯指示。
2 l. j. V% Q( K. ^9 c: t, z(4)GSM上电有几秒初始化,系统供电电源至少要支持5V/2A。
. F7 E1 K4 s) H4 C" P% W4 L: W1 y1 K
) C, O3 n. |9 `* \6 T# I三.设计原理图
5 C9 ]3 f9 @4 B; p3 T(1)原理图主要采用AD软件进行设计,如图:) G1 A$ k9 V, O$ q" `# k

9 F* g  v+ V* J& c
7 s( X/ t7 z2 ^% \$ ]# m* E' |& t) [. M
(2)PCB图如下:! L# A3 h! i* |) @! H
6 n9 u6 I, q" {. K: r3 i
I]162~F`84EBYX}@`[IAJRI.png # S, E& s, C/ N
4 P: }2 h7 x9 e
四.软件设计
% ~8 p# y9 l& A/ _* {主程序源码% \% U% h1 S8 L# E) m
" g  m; m# I2 A
  1. int main(void)
    , l! Y5 v. s3 F
  2. {        
    ' Y- p: `3 C# N" V  Z( W9 E
  3.         delay_init();                     //延时函数初始化
    4 e. U6 U1 i* O
  4.         NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级6 _) d0 n/ _2 T  i) f: w" Y
  5.         LED_Init();                          //初始化与LED连接的硬件接?
    8 a  ~9 i' V8 D0 u: b) n5 A+ [
  6.         KEY_Init();
    0 y: x' B7 M7 j3 z) B( R% R
  7.         uart_init(9600);$ H7 X  O( M5 g5 _# S* z( x
  8.         TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms" C$ Q2 m9 O6 B& _% I. r
  9. ( ~! e! z% }  g' F' p% @
  10.         buzzer = 1;//初始化
    ! t6 I/ b! v' m/ l1 g, G' t" o1 v
  11.         delay_ms(100);7 {7 T8 h" S; l0 h7 C3 {) s+ P
  12.         buzzer = 0; //关蜂鸣器" E8 V' q& r/ z. P6 _
  13.         led_gsm = 0;& U* V( g& D2 X6 u' R9 \
  14.         
    1 I* _2 T2 @4 K4 ?, h( A/ W
  15.   Init_ADXL345();//初始化 adxl345
    " g9 Y; E* W; @/ I4 A5 K1 @0 H$ e
  16.   if(Single_Read_ADXL345(0X00)==0xe5)        //读取寄存器值 看是否初始化成功7 l! u& r; r# G6 V5 T) C+ a( X3 i
  17.   {% I) F  k# N, E$ E) y0 w
  18.     delay_ms(5);
    & Q( v- k, e; k8 T
  19.   }$ O5 a: D. U  e. L
  20.   else
    8 y3 T; X  X- H! ?0 n" \
  21.   {
    ) P$ i- Q5 U. O. n
  22.     delay_ms(3);
    0 ~8 }8 m  e, I$ _
  23.   }6 S# S5 P" G9 T+ L" q% b8 w. Y

  24. 6 i! x1 W$ I8 G- i
  25.         i=50;
    7 G* O! n; T& Y1 c6 ^) ~$ R  m
  26.         while(i--) delay_ms(100);//延时
    * {5 h" w% k& b3 N: I
  27.         
    + A6 H/ [3 O. U4 {1 o! ~! o
  28.         UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集  L0 B2 C0 q: r7 w
  29.         i=10;6 D0 d6 W/ `; T; O) m) m* ^6 h
  30.         while(i--) delay_ms(100);//延时" p& D' X* D9 q3 O" _% y
  31. 1 E* N6 ]2 V& U5 j, }
  32.         UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15);//设置文本
    # x% f1 h0 |$ m
  33.         i=10;
    & o4 J- K* h, p
  34.         while(i--) delay_ms(100);//延时0 L$ }$ x6 @5 I
  35.         
    * _  x3 G  v% x  l. s9 O
  36.         led_gsm =1;
    ( c7 g8 d, Z8 Q% z. \* R
  37.         while(1)0 z! ~& ^( T+ F. |$ S# |: |
  38.         {  3 F( |5 o- Z* I" @- k
  39.     if(ReadAdxl345== 1)   //定时读取adxl345数据
    & ~1 G' v- i& c
  40.     {
    ) u" g! f0 s+ v$ N2 e2 F+ y, L( [) c
  41.       ReadAdxl345= 0;% N) J) G1 R. k5 |& {
  42.       ReadData_x();                                                  //三轴检测函数% n/ t! D8 }1 P1 r. @# G+ \# R
  43.       CheckNum++;
    ; i5 }% l: M1 B) N% S3 G6 ^
  44.       if((temp_X<550)||(temp_X>10000))       //该数据为检测值 不是固定的 一个大概的 角度6 y& M  J4 L( G  L- y
  45.       {! d( M& h1 P' M# T  {
  46.         ErrorNum++;& P6 k7 ]7 F& ~7 }
  47.       }8 D6 i$ }" y+ }' Y. A: Q4 }
  48.       if(CheckNum>=5)                  //进行5次处理# @$ l8 P% g- ^- U/ Y
  49.       {% B0 N* g- D8 G1 {
  50.         if(keyLater>=3)                  //非按键下) {+ S) N% b6 s, a
  51.         {
      |' V9 q1 o4 }" B! r
  52.           if(ErrorNum>=1)           //角度出现错误 5次出息3次情况; U/ E9 b0 j3 p4 a8 K% B8 U8 j- z
  53.           {" w% q# l/ s! ]1 x7 Z- T
  54.             buzzer = 1;           //打开蜂鸣器
    ; p+ \$ [: R' \8 v: {$ x) N
  55.           }
    4 N( N* y0 q! z' B/ ^( Z& I
  56.           else
    $ L9 a% U! |/ S3 b, D: C1 }
  57.           {                                       
    8 A) c3 b5 g7 z8 c' V
  58.             buzzer = 0;                //关闭蜂鸣器) y6 r% z& ]( l  P9 c
  59.             reportLater=0;                //上报延时计数' I$ E1 R4 g. }* v; m' \" A( D
  60.           }                                       
    ! k: ~4 Z( T' `0 a, p$ ?( h
  61.         }
    & H  P9 A% \; A$ [
  62.         ErrorNum=0;                  //清空滤波计数
    ' n( ^2 h9 E* d4 ~2 [1 Y
  63.         CheckNum=0;        $ E: b+ B; \4 E% Y/ Q9 N0 W
  64.       }
    ; Y1 b- I6 g, K' l
  65.     }- O9 ~! L) U  z- i8 p9 T

  66. 4 b1 y! O$ o% @, Z) m/ h
  67.     if(reportLater>=15)        //15s
    ) n8 }& K# j. }0 r( g3 G( X; a
  68.     {& N9 d7 B3 Z4 z* {
  69.       led_gsm = 0;//打开led: \5 I; x3 o- D2 s7 w2 N0 l
  70.                         
    . p. N" m* ?8 V1 E& f2 [: ~- v
  71.       UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
    / L5 Z( w. K( F& D: a1 o
  72.       i=3;
      F( ?8 q) |8 B$ c
  73.       while(i--) delay_ms(100);//延时
    9 R$ G( ]! J9 q
  74.                         
    7 T7 `3 `, Y9 n; N
  75.       UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15);//设置文本
    ) T' B" H# |0 p% O; }. S3 f
  76.       i=3;/ ?! s; N( i/ e" b, ?5 V0 \1 M
  77.       while(i--) delay_ms(100);//延时7 A' v  Y. `! K1 I# a2 Y
  78.                         UART_SendStr(USART1 ,"AT+CMGS="+8615555183057"\r\n",26); //测试号
    ' F* H. m2 L4 Y) i/ m  G- p
  79. //      UART_SendStr(USART1 ,"AT+CMGS="+8618105140357"\r\n",26);  //可以修改电话号码6 o  m0 V4 @0 x+ k  d# \# h4 I# E
  80.       i=3;1 M1 y) }. d9 \& _* F- R) i- q1 F: s
  81.       while(i--) delay_ms(100);//延时6 _) U2 E7 O6 U. P, y" Z! y2 j
  82.                           U5 @: }5 z# S. m& v
  83.       printf("help me !"); //发送短信息内容2 U7 D6 @5 ]" J7 |4 X+ h
  84.       delay_ms(200);//延时$ b* C' g$ }* |4 |7 k5 h( ~
  85.                         & U' J$ |6 u7 t/ M+ E: B' A
  86.       UART_SendStr(USART1 ,( char *)Crtl_Z, 1);        //发送+ s! X# D* E! Z6 W2 K$ e
  87.       i=40;
    " j  w( P3 R% j6 {
  88.       while(i--) delay_ms(100);//延时
    1 v4 u9 V& \1 D  |0 o
  89.                         
    2 N. a) S. X. q; F
  90.       led_gsm =1;                //led关闭0 f5 }. l6 `/ F, L, D& i  ]
  91.       reportLater=0;        //上报标志清空# M- c2 c9 u  X; q
  92.       keyLater=0;        //按键清零延时处理
      z/ X) q0 G! |0 e, c) A& Y
  93.     }
    ; [) C, @  Z: e0 I9 Z  M
  94.                
    3 U, u' I+ X% h, `; F" K# y
  95.     if(key==0)                 //按键处理. S, s! e7 F" R5 R& L0 p
  96.     {
    5 s  C# @+ q5 j1 ~: P: T
  97.       delay_ms(3);          //按键消抖动5 }4 @7 w" q/ T8 Y! k: M
  98.       if(key ==0)                 //按键处理
    * d7 [$ U% j! O4 h2 a: O3 y! H
  99.       {* U) s& g1 K% A$ p
  100.         reportLater=0;          //按键延时上报
    3 x. H; c  `0 I% e
  101.         buzzer = 0;                 //关闭蜂鸣器
    , ~1 F' c! f/ s6 P; s" L% A' y" X
  102.         keyLater=0;                //按键延时处理
    ; ~1 a: x  X& [( o) A
  103.       }
    ( Z8 b+ ^( Y" D, g9 g
  104.     }
    ; F* B4 _. V( p! N+ G0 j; O, V
  105.         
    9 |2 |6 W4 L( v% N5 U
  106.         }7 I% G9 e% c7 h/ ^/ `, {% l+ K! t
  107. }9 L- j* J" n9 E
复制代码

* t( U9 k+ D3 g7 l! H, n( Z
+ D3 W9 x% h& i9 @. I; q- O* b8 Y
0 t: l. I/ C" K7 {
赞 收藏 评论0 发布时间:2022-5-12 11:19

举报

0个回答

所属标签

相似技术帖

官网相关资源

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