基于STM32单片机智能手表GSM短信上报GPS定位温湿度检测记步设计

1 系统功能介绍

本设计为 基于 STM32 单片机的智能手表系统,其功能涵盖了定位、短信上报、温湿度检测与运动记步等多项实用功能,充分体现了嵌入式技术与智能穿戴设备的结合。系统以 STM32F103 系列单片机为核心,集成了 GPS 定位模块、GSM 短信模块、DHT11 温湿度传感器、ADXL345 三轴加速度计(用于计步)、LCD1602 液晶显示屏及 LED 灯等功能电路。通过模块化设计和程序控制,系统能够实现数据的采集、处理、显示和通信,构建一个完整的智能手表应用框架。

系统的主要功能如下:

  1. LCD1602 显示:能够显示实时时钟和日期,同时支持经纬度数据的显示。通过按键切换,可以在时钟与经纬度信息之间切换。
  2. GPS 定位:通过 GPS 模块获取当前经纬度信息,用户可以利用经纬度坐标在地图或浏览器上查看具体位置。
  3. LCD 清晰度调节:通过电位器调节 LCD 对比度,保证在不同光照条件下均能清晰显示。
  4. 手电筒功能:通过按键控制 LED 灯,实现手电筒开关,满足用户应急照明需求。
  5. 短信上报功能:通过第三个按键触发,将经纬度信息打包成短信发送至指定手机号码,方便远程位置上报。
  6. 短信远程获取功能:当用户向手表绑定的手机号发送 “GET” 指令时,手表会主动回复当前经纬度信息。
  7. 指示灯提示:在短信发送或接收过程中,指示灯闪烁提示系统工作状态。
  8. 温湿度检测:通过 DHT11 传感器实时监测环境温度与湿度,并显示在屏幕上。
  9. 运动计步功能:利用 ADXL345 三轴加速度传感器获取运动数据,经过算法处理后显示步数。

该系统的功能覆盖了智能穿戴设备的核心需求,兼具生活便利性、健康监测与信息通信能力,具有较强的实用价值和教学研究意义。


2 系统电路设计

2.1 STM32 最小系统电路

STM32F103 单片机作为主控制核心,提供强大的运算与接口能力。

  • 时钟电路:使用 8MHz 外部晶振,结合内部 PLL 倍频至 72MHz,为整个系统提供高效时钟。
  • 复位电路:采用按键和电容电阻组成的复位电路,确保系统上电时能够正常初始化。
  • 电源电路:由 3.3V 稳压芯片提供稳定电压,STM32 内部和各传感器模块均工作在 3.3V 电压下。

2.2 LCD1602 显示电路

1602 液晶主要用于显示时钟、日期、温湿度和经纬度数据。

  • 接口方式:采用 8 位并行或 4 位并行方式与 STM32 相连,常用端口为 GPIO 输出。
  • 电位器调节:通过电位器调节 LCD 对比度,保证在强光或弱光下均能清晰显示。
  • 功能拓展:按键可切换 LCD 显示内容,在“时钟+日期”和“经纬度+温湿度+步数”之间切换。

2.3 GPS 定位模块电路

GPS 模块采用 UART 串口与 STM32 通信,定期输出 NMEA 格式的数据字符串。

  • 数据格式:通过解析 $GPRMC$GPGGA 信息获取经纬度。
  • 供电:3.3V 电源供电,配合退耦电容稳定信号。
  • 天线要求:需要外接有源天线,确保定位灵敏度和精度。

2.4 GSM 短信模块电路

GSM 模块主要用于收发短信,模块与 STM32 通过 UART 串口通信。

  • 发送短信:通过 AT 指令控制模块,将经纬度信息打包发送至指定号码。
  • 接收短信:当接收到短信时,STM32 解析短信内容,若检测到 “GET” 指令,则回复经纬度数据。
  • 指示灯:在短信收发过程中点亮或闪烁,用于提示用户操作状态。

2.5 DHT11 温湿度传感器电路

DHT11 采用单总线与 STM32 相连,周期性输出温湿度数据。

  • 接口方式:单线数字信号输入。
  • 应用:通过温湿度检测,用户可以了解周围环境情况,并在 LCD 上显示。

2.6 ADXL345 加速度传感器电路

ADXL345 通过 I²C 总线与 STM32 相连,用于检测三轴加速度。

  • 计步原理:通过对加速度波形的检测,判断用户是否发生步行动作,累加步数。
  • 供电电压:3.3V,符合 STM32 系统电压。

2.7 LED 灯电路

用于实现手电筒功能与短信状态指示:

  • 手电筒:通过独立按键控制 LED 开关。
  • 短信状态灯:在短信发送或接收时点亮/闪烁,用于提示系统当前状态。

2.8 按键电路

系统共用 3 个按键:

  1. 显示切换按键:在 LCD 上切换显示时钟信息与经纬度信息。
  2. 手电筒按键:控制 LED 灯开关。
  3. 短信发送按键:触发 GSM 模块发送经纬度短信。

按键采用下拉电阻电路设计,避免悬空引起误触发。


2.9 电源电路

手表整体电路采用锂电池供电,电源管理电路包括:

  • 3.7V 锂电池 + 充电管理模块
  • LDO 稳压芯片输出 3.3V,供单片机与外设使用;
  • 退耦电容保证模块运行稳定。

3 程序设计

系统程序采用模块化设计,分别针对 LCD1602、GPS、GSM、DHT11、ADXL345 和按键进行驱动编写,并通过主循环调用,实现智能手表的综合功能。


3.1 主程序框架

#include "stm32f10x.h"
#include "lcd1602.h"
#include "gps.h"
#include "gsm.h"
#include "dht11.h"
#include "adxl345.h"
#include "delay.h"
#include "usart.h"

int main(void)
{
    char gps_info[50];
    char sms_text[100];
    int steps = 0;
    float temperature, humidity;
    
    LCD1602_Init();
    GPS_Init();
    GSM_Init();
    DHT11_Init();
    ADXL345_Init();
    LED_Init();
    Key_Init();

    while(1)
    {
        // 显示时钟与日期
        LCD1602_ShowTime();
        
        // 按键切换显示经纬度
        if(Key_SwitchPressed())
        {
            GPS_GetLocation(gps_info);
            LCD1602_ShowString(1,0,gps_info);
        }
        
        // 获取温湿度数据
        DHT11_Read(&temperature,&humidity);
        LCD1602_ShowFloat(0,0,temperature);
        LCD1602_ShowFloat(1,0,humidity);

        // 计步功能
        steps = ADXL345_GetSteps();
        LCD1602_ShowNum(1,8,steps,4);

        // 短信发送按键
        if(Key_SMSPressed())
        {
            sprintf(sms_text,"GPS:%s",gps_info);
            GSM_SendSMS("1234567890",sms_text);
            LED_Flash(); // 指示灯提示
        }

        // 短信接收处理
        if(GSM_CheckSMS("GET"))
        {
            GSM_SendSMS("1234567890",gps_info);
        }

        // 手电筒按键
        if(Key_LightPressed())
        {
            LED_Toggle();
        }
    }
}

3.2 GPS 数据解析程序

void GPS_GetLocation(char *info)
{
    char buffer[100];
    USART_Receive(buffer);
    // 假设接收到的 NMEA 格式为 $GPRMC
    sscanf(buffer,"$GPRMC,%*f,A,%f,N,%f,E",&latitude,&longitude);
    sprintf(info,"Lat:%.4f Lon:%.4f",latitude,longitude);
}

3.3 GSM 短信发送与接收

void GSM_SendSMS(char *number, char *text)
{
    USART_SendString("AT+CMGF=1\r\n");   // 设置短信文本模式
    Delay_ms(100);
    USART_SendString("AT+CMGS=\"");
    USART_SendString(number);
    USART_SendString("\"\r\n");
    Delay_ms(100);
    USART_SendString(text);
    USART_SendData(0x1A); // 发送结束符
}

3.4 DHT11 温湿度读取

uint8_t DHT11_Read(float *temperature, float *humidity)
{
    uint8_t data[5];
    if(DHT11_ReadData(data) == SUCCESS)
    {
        *humidity = data[0];
        *temperature = data[2];
        return SUCCESS;
    }
    return ERROR;
}

3.5 ADXL345 计步程序

int ADXL345_GetSteps(void)
{
    int x,y,z;
    int step_count = 0;
    ADXL345_ReadXYZ(&x,&y,&z);
    if(abs(x) > THRESHOLD || abs(y) > THRESHOLD || abs(z) > THRESHOLD)
    {
        step_count++;
    }
    return step_count;
}

4 总结

本文介绍了一个 基于 STM32 单片机的智能手表设计,其主要功能包括 GPS 定位、GSM 短信上报、温湿度检测、运动计步、LCD 显示和手电筒功能。通过 STM32F103 单片机作为核心控制器,各功能模块实现了有机结合,形成了完整的智能穿戴应用系统。

  • 在硬件设计方面,系统涵盖了 LCD 显示、GPS、GSM、DHT11、ADXL345、LED、按键与电源管理等核心电路。
  • 在软件设计方面,通过模块化编程方法,实现了对 GPS 数据解析、短信收发、温湿度检测、步数计算和按键交互等功能的驱动与控制。
  • 系统支持自动与人工触发短信上报位置,兼顾了被动查询和主动汇报,实用性强。

该设计不仅可应用于智能穿戴产品的开发与实验,还能为物联网设备、移动监控和智能定位系统提供参考,具有广泛的推广价值和应用前景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值