系统功能:
基于STM8的便携式智能药盒控制系统设计的总体方案设计,目前确定的模块主要有:
STM8、蓝牙模块、时钟芯片、时钟和复位电路、压力传感器、声光报警电路、按键模块、系统电源模块构成。
STM8:核心控制器,完成各模块的控制,读取传感器的数据加载到算法上进行处理存储。
蓝牙模块:连接手机或云端平台,完成数据的交互,实现药盒功能个性化控制、用药提醒、
数据共享和远程监控等功能。
时钟芯片:提供定当前时间和定时时间,达到定时提醒的作用。
时钟和复位电路:使电路进入一个能稳定操作的确定状态。
压力传感器:采集用药数据。
声光报警器:提醒患者服药。
按键模块:结束声光提醒,对便携式药盒进行简单控制。
系统电源模块:为整个系统供电。
主要功能模块原理图:
单片机接口:
按键及传感器电路:
蓝牙及蜂鸣器电路:
系统主要功能模块代码
InitSystem();
DelayMs(100);
InitOled();
InitOledDisp();
//测试写DS1302时间
// DS1302_WriteTime(&TimeBuffer);
//系统控制
void SystemControl(void)
{
UpdateBleData();
GetSystemTime();
getHourVal = TimeDisplay.hour;
getMinVal = TimeDisplay.minute;
getAdcVal = ReadADCValue();
//重量超标或定时时间到
if((getAdcVal>setAdcVal)||(getHourVal==setHourVal))
{
buzzerOn = true;
}
else
{
buzzerOn = false;
}
//蜂鸣器打开并且蜂鸣器报警
if((buzzerOn==true)&&(buzzerOpen==true))
{
BUZZER_ON();
}
else
{
BUZZER_OFF();
}
}
系统显示:
//处理OLED显示内容
void SystemDisplay(void)
{
char textBuf[20];
uint8_t i = 0;
//第一行显示系统状态信息
for(i=13; i<19; i++)
{
OledShowCN(16+(i-13)*16, 0, i);
}
//第二行显示系统时间
sprintf(textBuf, "Get %02d:%02d Set:%2d", getHourVal, getMinVal, setHourVal);
OledShowString(0, 2, (uint8_t*)textBuf, OLED_FONT_8X16);
//第三行显示药物重量
sprintf(textBuf, "GW:%4d SW:%4d ", getAdcVal, setAdcVal);
OledShowString(0, 4, (uint8_t*)textBuf, OLED_FONT_8X16);
//第四行显示系统模式
if((buzzerOpen==false)&&(buzzerOn==false))
{
sprintf(textBuf, "bOpen:F bOn:F ");
}
else if((buzzerOpen==false)&&(buzzerOn==true))
{
sprintf(textBuf, "bOpen:F bOn:T ");
}
else if((buzzerOpen==true)&&(buzzerOn==false))
{
sprintf(textBuf, "bOpen:T bOn:F ");
}
else if((buzzerOpen==true)&&(buzzerOn==true))
{
sprintf(textBuf, "bOpen:T bOn:T ");
}
OledShowString(0, 6, (uint8_t*)textBuf, OLED_FONT_8X16);
}
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。