基于51单片机的蓝牙计步器设计

硬件方案

        蓝牙计步器选用单片机STC89C52作为系统控制芯片,通过蓝牙模块把单片机处理的数据传输到手机APP上,这样更能清楚看到检测的效果。整机工作电流只有1-1.5mA,实现超低功耗。采集的步数,路程,卡路里及运动状态用手机APP显示。
         整体电路主要由51单片机最小系统,ADXL345加速度传感器,lcd1602液晶电路,蓝牙模块电路,呼吸灯电路,电源电路组成;原理图如图:

PCB图如下:

 

设计功能

  1. 通过ADXL345检测步数,然后通过蓝牙模块将步数,路程,卡路里及运动状态实时传输到手机。
  2. 有动态呼吸灯指示走路情况。
  3. 液晶lcd1602实时显示步数,路程,卡路里及运动状态,运动状态分stand、lie、walk、run。
  4. 手机通过蓝牙可实时显示当前行走的状态、步数、里程及消耗的能量。

软件设计

主程序源码

void main (void)
{     
    Init_Timer0();        //定时器0初始化
    UART_Init();
                 
    LCD_Init();           //初始化液晶
    DelayMs(20);          //延时有助于稳定
    LCD_Clear(); 

    Init_ADXL345();      //清屏
    if(Single_Read_ADXL345(0X00)==0xe5)    //读出的数据为0XE5,表示正确
    {
        DelayMs(5);
    }
    else
    {
        DelayMs(3);
    }
    led=1;
    while (1)         //主循环
    {
        if(ReadAdxl345==1)   //定时读取adxl345数据
        {
            BuShuCheck();            //检测步数
    
            sprintf(dis1,"B:%04d J:%4.1fm ",BuShu/2,JuLi);    //打印
            LCD_Write_String(0,0,dis1);//显示
            sprintf(dis2,"%7.2fcal ",KaLuLi);           //打印
            LCD_Write_String(0,1,dis2);//显示            

            if(statFlag == 0)//站着状态
            {LCD_Write_String(11,1,"Stand");}
            else if(statFlag == 1)躺着状态
            {LCD_Write_String(11,1,"Lie  ");}
            else if(statFlag == 2)//跑着状态
            {LCD_Write_String(11,1,"Run  ");}
            else if(statFlag == 3)//走着状态
            {LCD_Write_String(11,1,"Walk ");}
        }

        if(ReportFlag==1)    //2s
        {
            ReportFlag=0;
            sprintf(dis0,"*B:%04d",BuShu/2);    //上报步数
            SendStr(dis0,7);
            sprintf(dis0,"J:%04.1fm",JuLi);            //上报距离
            SendStr(dis0,7);
            sprintf(dis0,"K:%07.2fcal",KaLuLi);           //上报卡路里
            SendStr(dis0,12);

            if(statFlag == 0)//站着状态
            {SendStr("Stand#",6);}
            else if(statFlag == 1)躺着状态
            {SendStr("Lie  #",6);}
            else if(statFlag == 2)//跑着状态
            {SendStr("Run  #",6);}
            else if(statFlag == 3)//走着状态
            {SendStr("Walk #",6);}
            SendStr("\r\n",2);
        }
    }
}

资料链接:https://pan.baidu.com/s/1BV7C6sNkZyiSEBtY_uRajA?pwd=iyt9 
提取码:iyt9

猜你喜欢

转载自blog.csdn.net/m0_60790717/article/details/127828842