资讯详情

STM32老人防跌倒报警GSM短信GPS定位设计(程序+原理图+PCB)

本设计: 基于STM32老人防跌倒报警GSM短信GPS定位设计(程序 原理图 PCB) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0025

功能描述: 本系统由基于STM32单片机核心板,ADXL345加速度传感器,GSM、GPS模块、指示灯、按键电源 蜂鸣器报警及电源组成。 1.正常情况下,口袋里垂直在口袋里(adxl345模块垂直站在下角),一旦倾角传感器检测到平放,蜂鸣器报警,跌倒时间超过15秒(15秒确定老人跌倒,15秒不起床,需要报警提醒周围人帮忙)。如果老人没有摔倒,而是弯腰等等,这是误报警,老人可以用按钮取消报警。 2、触发GSM模块发送短信, 包括位置经纬度信息在内的设备将向人员发送信息。 3.短信处理和初始化状态指示灯指示。 注:GSM上电初始化需要几秒钟,系统电源至少需要支持5V/2A,GPS天线必须放在漏天位置。

原理图(提供源文件): 在这里插入图片描述

PCB(提供源文件):

源程序(提供源文件):

#include "led.h" #include "delay.h" #include "sys.h" #include "timer.h" #include "key.h" #include "usart.h"  #include <string.h> #include "adxl345.h"  unsigned char BufTab[10]; //wifi数据暂存 unsigned char Count;    //串口数据计数 unsigned char UartBusy=0;  //盘忙 unsigned char ReadFlag=0;//阅读标志 unsigned char sendDataFlag=0;///发送短信标志 unsigned char i ;  unsigned char ReadAdxl345;    ///定期阅读adxl345数据 unsigned char ErrorNum=0;   //记录错误次数 unsigned char CheckNum=0;   //检测次数 unsigned long ReportLater=0; //上报延时 unsigned long KeyLater=3;	 //按键延时计数

unsigned long Mid_Du;       //经纬度处理 度
unsigned long Mid_Fen;      //经纬度处理 分
unsigned long Mid_Vale;     //经纬度处理 中间变量

char Lin0_No[16]="N:000.000000";//存储纬度
char Lin1_Ea[16]="E:000.000000";//存储经度

char Crtl_Z[1]={ 
       0x1a};	//发送短信标志

void dealGps(void) ;//gps数据处理

int main(void)
 { 
       	
	delay_init();	    	 //延时函数初始化
	NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	LED_Init();		  	//初始化与LED连接的硬件接?
	KEY_Init();
	uart_init(9600);
	uart2_init(9600)	;
	
	 TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms

	BUZZER = 1;delay_ms(100);BUZZER = 0;	//初始化
	GSM_LED = 0;
	 
	i=5;
	while(i--) delay_ms(100);//延时

  Init_ADXL345();
  if(Single_Read_ADXL345(0X00)==0xe5)	
  { 
       
    delay_ms(5);
  }
  else
  { 
       
    delay_ms(3);
  }
	
	UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
	i=10;
	while(i--) delay_ms(100);//延时
	
	UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本?
	i=10;
	while(i--) delay_ms(100);//延时
	
	GSM_LED =1;	//关闭LED指示
	while(1)
	{ 
         
    if(ReadAdxl345== 1)   //定时读取adxl345数据
    { 
       
      ReadAdxl345= 0;
      ReadData_x();  						//三轴检测函数
      CheckNum++;
      if((temp_X<550)||(temp_X>10000))        //方位值判断 查看正常次数
      { 
       
        ErrorNum++;
      }
      if(CheckNum>=5)	  	//进行5次处理
      { 
       
        if(KeyLater>=3)	  	//非按键下
        { 
       
          if(ErrorNum>=1)	   //角度出现错误 5次出息1次情况
          { 
       
            BUZZER = 1;	   //打开蜂鸣器
          }
          else
          { 
       					
            BUZZER = 0;		//关闭蜂鸣器
            ReportLater=0;		//上报延时计数
          }					
        }
        ErrorNum=0;		  //清空滤波计数
        CheckNum=0;	
      }
    }

    if(ReportLater>=15)	//15s
    { 
       
      GSM_LED = 0;
			
      UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
      i=3;
      while(i--) delay_ms(100);//延时
			
      UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
      i=3;
      while(i--) delay_ms(100);//延时
			
			UART_SendStr(USART1 ,"AT+CMGSM=\"+8615555183057\"\r\n",26); //测试号//**All notes can be deleted and modified**//
// UART_SendStr(USART1 ,"AT+CMGS=\"+8615542546521\"\r\n",26); //测试号
      i=2;
      while(i--) delay_ms(100);//延时

			UART_SendStr(USART1 ,"help me!",8); //发送经度 

	    if(sysmode_GPS==1)		//gps有效
      { 
       
				sysmode_GPS=0;					
				dealGps();	
				UART_SendStr(USART1 ,Lin0_No,12); //发送纬度
				UART_SendStr(USART1 ,Lin1_Ea,12); //发送经度 
			}
			else
			{ 
       
					UART_SendStr(USART1 ,"gps linking...",14); //gps无信号 
			}
      delay_ms(200);//延时
			
      UART_SendStr(USART1 ,( char *)Crtl_Z, 1);        //发送
      i=40;
      while(i--) delay_ms(100);//延时
			
      GSM_LED =1;		//led关闭
      ReportLater=0;	//上报标志清空
      KeyLater=0;	//按键清零延时处理
    }
		
    if(key==0)		 //按键处理
    { 
       
      delay_ms(3);  	//按键消抖动
      if(key ==0)		 //按键处理
      { 
       
        ReportLater=0;	  //按键延时上报
        BUZZER = 0;		 //关闭蜂鸣器
        KeyLater=0;		//按键延时处理
      }
    }
	
	}
}

void dealGps(void)
{ 
       		
	Mid_Du=(gps_infor_weijing[0]-0x30)*10000000+(gps_infor_weijing[1]-0x30)*1000000;    //处理经度扩大10000000
	
	Mid_Fen=(gps_infor_weijing[2]-0x30)*10000000+(gps_infor_weijing[3]-0x30)*1000000+
		(gps_infor_weijing[4]-0x30)*100000+(gps_infor_weijing[5]-0x30)*10000+
			(gps_infor_weijing[6]-0x30)*1000+(gps_infor_weijing[7]-0x30)*100;          
	Mid_Fen=Mid_Fen/60;                                                      //分秒换算为小数位
	Mid_Vale=Mid_Du+Mid_Fen;         //最终为度格式000.00000000 非度分秒格式
	Lin0_No[0]='N';                  
	Lin0_No[1]=':';                  
	Lin0_No[2]='0';                  
	Lin0_No[3]=Mid_Vale/10000000+0x30;                  //转化为字符
	Lin0_No[4]=(Mid_Vale/1000000)%10+0x30;
	Lin0_No[5]='.';
	Lin0_No[6]=(Mid_Vale/100000)%10+0x30;
	Lin0_No[7]=(Mid_Vale/10000)%10+0x30;
	Lin0_No[8]=(Mid_Vale/1000)%10+0x30;
	Lin0_No[9]=(Mid_Vale/100)%10+0x30;
	Lin0_No[10]=(Mid_Vale/10)%10+0x30;
	Lin0_No[11]=Mid_Vale%10+0x30;

	Mid_Du=(gps_infor_weijing[8]-0x30)*100000000+(gps_infor_weijing[9]-0x30)*10000000+(gps_infor_weijing[10]-0x30)*1000000; //处理经度扩大10000000 

	Mid_Fen=(gps_infor_weijing[11]-0x30)*10000000+(gps_infor_weijing[12]-0x30)*1000000+
		(gps_infor_weijing[13]-0x30)*100000+(gps_infor_weijing[14]-0x30)*10000+
		(gps_infor_weijing[15]-0x30)*1000+(gps_infor_weijing[16]-0x30)*100; 
	Mid_Fen=Mid_Fen/60;                                                //分秒换算为小数位
	Mid_Vale=Mid_Du+Mid_Fen;                                          //最终为度格式000.00000000 非度分秒格式
	Lin1_Ea[0]='E';                  
	Lin1_Ea[1]=':';     
	Lin1_Ea[2]=Mid_Vale/100000000+0x30;                           //转化为字符
	Lin1_Ea[3]=(Mid_Vale/10000000)%10+0x30;
	Lin1_Ea[4]=(Mid_Vale/1000000)%10+0x30;
	Lin1_Ea[5]='.';
	Lin1_Ea[6]=(Mid_Vale/100000)%10+0x30;
	Lin1_Ea[7]=(Mid_Vale/10000)%10+0x30;
	Lin1_Ea[8]=(Mid_Vale/1000)%10+0x30;
	Lin1_Ea[9]=(Mid_Vale/100)%10+0x30;
	Lin1_Ea[10]=(Mid_Vale/10)%10+0x30;
	Lin1_Ea[11]=Mid_Vale%10+0x30;
}

标签: 无线倾角传感器模块qr30传感器无线传感器模块sys连接器345

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台