功能介绍:
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**********************/