基于STM32单片机的汽车安全带检测语音提醒系统原理图PCB

功能介绍:
0.本系统采用STM32F103C8T6作为单片机
1.采用HX711传感器检测安全带的拉力,是否系上安全带可以通过该值来判断
2.采用4个微动开关开模拟检测人是否坐下,如果该开关未被触发即表示该座位没有人
3.每个座位有对应的LED指示灯,当出现警示情况的时候LED会亮起
4.采用DC002作为电源接口可直接输入5V给整个系统供电
5.采用TTS播报模块实现语音的播放

原理图:
在这里插入图片描述

PCB :
在这里插入图片描述

主程序:

#define __MIAN_C
#include "main.h"


// 局部变量,用于保存转换计算后的电压值 	 
CreatByte Flag;

uint32_t initialWeight[4] = {0, 0, 0, 0}; //单位g
int32_t objectWeight[4] = {0, 0, 0, 0}; //单位g
float f_volt = 0;

int main(void)
{	
    uint16_t i;

    // 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MH
    HSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz

    // 端口初始化
    GPIO_Config();
    EXTI_START_Config();
    HX711_GPIO_Config();
    ADCx_Init();
    DelayMs(1000);
    DelayMs(1000);

    for (i = 0; i <= 3; i++)
    {
        initialWeight[i] = HX711_GetInitialWeight(i); //获取初始重量
    }
    
    GENERAL_TIM_Init();
    USART1_Config();
    DelayMs(1000);

    while (1)
    {
        if (refreshFlag == 1)
        {
            if (startFlag == 1)
            {
                if (SWITCH1 == 0) //1号座位有人    
                {
                    objectWeight[0] = HX711_Read(0) - initialWeight[0]; //检测拉力
                    if (objectWeight[0] < 0)
                    {
                        objectWeight[0] = 0;
                    }
                    if (objectWeight[0]/GAPVALUE < 200) //小于200g
                    {
                        errorFlag1 = 1;
                        printf("请一号座位乘客系好安全带");
                        DelayMs(5000);
                    }
                    else
                    {
                        errorFlag1 = 0;
                        LED1_ON;
                    }
                }
                else
                {
                    errorFlag1 = 0;
                    LED1_OFF;
                }
                DelayMs(20);
                if (SWITCH2 == 0) //2号座位有人
                {
                    objectWeight[1] = HX711_Read(1) - initialWeight[1];//检测拉力
                    if (objectWeight[1] < 0)
                    {
                        objectWeight[1] = 0;
                    }
                    if (objectWeight[1]/GAPVALUE < 200) //小于200g
                    {
                        errorFlag2 = 1;
                        printf("请二号座位乘客系好安全带");
                        DelayMs(5000);
                    }
                    else
                    {
                        errorFlag2 = 0;
                        LED2_ON;
                    }
                }
                else
                {
                    errorFlag2 = 0;
                    LED2_OFF;
                }
                DelayMs(20);
                if (SWITCH3 == 0) //3号座位有人
                {
                    objectWeight[2] = HX711_Read(2) - initialWeight[2];//检测拉力
                    if (objectWeight[2] < 0)
                    {
                        objectWeight[2] = 0;
                    }
                    if (objectWeight[2]/GAPVALUE < 200) //小于200g
                    {
                        errorFlag3 = 1;
                        printf("请三号座位乘客系好安全带");
                        DelayMs(5000);
                    }
                    else
                    {
                        errorFlag3 = 0;
                        LED3_ON;
                    }
                }
                else
                {
                    errorFlag3 = 0;
                    LED3_OFF;
                }
                DelayMs(20);
                if (SWITCH4 == 0) //4号座位有人
                {
                    objectWeight[3] = HX711_Read(3) - initialWeight[3];//检测拉力
                    if (objectWeight[3] < 0)
                    {
                        objectWeight[3] = 0;
                    }
                    if (objectWeight[3]/GAPVALUE < 200) //小于200g
                    {
                        errorFlag4 = 1;
                        printf("请四号座位乘客系好安全带");
                        DelayMs(5000);
                    }
                    else
                    {
                        errorFlag4 = 0;
                        LED4_ON;
                    }
                }
                else
                {
                    errorFlag4 = 0;
                    LED4_OFF;
                }
                
                f_volt = 2 * ADC_ConvertedValue * 3.3 / 4096; //检测电压
                if (f_volt < 4.5) //电压低于10%报警
                {
                    printf("系统工作电压偏低");
                    DelayMs(3000);
                }
            }
        }
    }
}

/*********************************************END OF FILE**********************/

实物演示视频:
https://www.bilibili.com/video/BV1DZ4y1t7us/

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值