当前位置:   article > 正文

单片机开发|基于单片机的婴儿睡眠监测系统设计_单片机睡眠辅助器

单片机睡眠辅助器

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-DPJ-003

前言:

婴儿一天中的大多数时间都处于睡眠状态,如何对婴儿进行睡眠监测、及时安抚婴儿,以及如何解决婴儿的尿湿问题,这些都是新妈妈们最关心的问题。大部分的家庭都会选择方便的纸尿裤,但是纸尿裤不仅价格昂贵,而且吸水性很强,如果不及时更换,很可能会长出红疹等皮肤疾病,对婴儿的身体也是有威胁的;婴儿醒了就会大哭,家长没有及时的听见,造成婴儿很长一段时间没有人照料。所以,为婴儿设计一个适合婴儿的睡眠监测系统,对于新手家长来说是很有帮助的。本论文采用STC89C52单片机为核心,采用声控、语音播报、湿度采集电路采集各种场景的数据,并通过 LED灯光、语音播报等方式来实现对幼儿进行实时监测。

一,环境介绍

语言环境:C语言开发

开发技术:51单片机;声音控制电路;语音播报;湿度采集;液晶显示

二,项目简介

睡眠是人体的一个重要的生理过程,其质量的高低直接关系到人体的健康。在医学上,人们对睡眠的结构和过程的认识,主要是通过多导睡眠记录仪和多通道睡眠描记法来实现。具体来说,就是使用脑电图(EEG)来监测睡眠者的脑波,来预测睡眠状况。但是,由于医疗器械和技术都以医院、科研院所为主,其普及程度受到高昂的费用限制。近年来,随着传感技术的飞速发展,微型探测器的研制也在不断地进步。目前,最常见的是使用体动记录仪进行监测,通常使用三个方向的传感器来获取人体各个部分的动作,如 Fitbit、 JawboneUP、 WakeMate、 YawnLog等都是目前市场上使用的一种便携式智能手机。分析软件可以根据采集到的信息,对人体的能量消耗、睡眠质量、唤醒时间、睡眠效率等进行分析。

与此同时,一大批以智能手机为基础的睡眠管理软件(SleepAsAndroid、 Sleep Cycle),通过调用智能硬件中的加速传感器,对睡眠行为进行记录,从而达到了只需使用智能硬件就能够监测睡眠质量的目的。然而,这种类型的传感器仍然有一些缺陷,如:行为识别不清楚,错误识别率高。

现在的社会,工作压力越来越大,女人要同时兼顾工作与家庭,特别是刚做母亲的,要照顾婴儿,又要操持家务,这让新妈妈很是焦头烂额。婴儿一天中的大多数时间都是在睡觉,如何监测婴儿的睡眠,如何安抚婴儿,如何解决婴儿的尿湿问题,这些都是忙碌的新妈妈们所关心的问题。大部分的家庭都会选择用便携的纸尿裤,但是纸尿裤不仅价格昂贵,而且吸水性很强,如果不及时更换,很可能会引起婴儿的皮肤起疹子。纯棉纸尿裤既卫生又舒服,又要及时更换,目前市场上的尿液湿度测试设备大都是单一的,容易造成漏报。所以在婴儿睡觉的时候,要想知道婴儿有没有尿床,这对于新手家长来说也是非常重要的。

本论文主要针对以单片机为核心的婴儿睡眠监测系统进行了设计。当婴儿在睡眠中被监测,当婴儿被尿湿或者因为需要照料而哭泣时,就会发出警报。

首先,在参考了有关的数据之后,确定了整个方案和功能,并按照设计的要求,完成了电路的设计和硬件的构建,然后编写了单片机的控制软件,最后进行了实际的焊接和试验。

该系统主要包括:51单片机最小系统, LED指示灯,ULN2003驱动步进电机,功能按键,WT588D播放,声音采集模块,湿度检测, LCD显示当前信息和状况,声音传感器检测婴儿哭闹,湿度传感器检测婴儿尿床,检测尿床, LED灯亮,声音播报。具体是这样的:

1)查阅有关数据,了解51微处理器的基本原理;

2)了解51微处理器在婴儿睡眠监测中的应用;

3)完成了以单片机为核心的婴儿睡眠监测系统的电路设计;

4)用 C语言进行有关的控制;

5)对程序进行调试,使之符合设计要求;

6)焊接一块用于检测和分析婴儿睡眠监测系统的硬件电路;

7)完成毕业设计报告。

2.1 系统总体框图

此方案的整体设计方框图见图2-1。

图2-1 系统框图

图2-1是本系统的系统配置,从图中可以看出,它包括九个部件:

1)微处理器:

由于STC89C52是一种低功耗,高性能的COMS8位单片机,它的系统中有8 K的可编程 Flash内存。该系统以STC89C52系列微处理器为核心,根据采集到的数据进行相应的数据处理和控制。

2)声控电路:

本系统主要用于采集超过某一特定数值分贝的声音,以满足起动步进电动机的要求。

3)湿度度采集电路:

本电路主要完成对各温度的测量,并将其送至单片机进行处理。

4)语音采集电路:

该线路用于判断婴儿是否在哭泣。

5)步进电机:

此模块可实现婴儿床的晃动。

6)LED灯:

在这个系统中, LED灯会及时发光,可以让保姆们及时地照看婴儿,查看婴儿有没有尿床。

7)语音播报:

WT588D在这个系统中会自动报警,提醒保姆注意婴儿有没有尿床,并能及时的哄婴儿入睡。

8)LCD1602模块:

本系统采用杜邦线路与单片机连接,由单片机采集相关的信号,并将其传输至液晶显示器,以提高其亮度。

9)系统供电电路:为报警系统的工作提供稳定的直流稳压电源。

2.2 系统功能设计

在系统启动后,将会针对以下情况进行相应的处理:

1.每当婴儿号角哭泣时,电机由音响控制回路自动摇摆,语音模组会自动播放轻歌,以安抚婴儿的心情;

2.语音控制模块能够实时获取婴儿的哭闹情况;

3.每当儿童小便造成棉被湿时,由湿度传感器发出的信号触发自动警报,语音提示是否尿床, LED灯点亮;

4.采用ULN2003驱动步进电动机,在需要哄婴儿的时候,可以控制马达左右转动,让婴儿安静。

5.按键用于进行3种不同的设定,便于对各种情况进行快速的处理。

三,系统展示

整体展示

系统测试:湿度检测器检测到婴儿尿床会进行语音播报+LCD灯闪烁展示

四,核心代码展示

  1. #include <reg52.h> //调用单片机头文件
  2. #include <intrins.h>
  3. #include "lcd1602.h"
  4. #include "StepMotor.h"
  5. #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
  6. #define uint unsigned int //无符号整型 宏定义 变量范围0~65535
  7. #include "WT588D.h"
  8. //按键引脚定义
  9. sbit KEY1 = P3^5;
  10. sbit KEY2 = P3^6;
  11. sbit KEY3 = P3^7;
  12. sbit ShiDu = P1^0;//湿度传感器
  13. sbit LED = P1^1;
  14. sbit Voice = P1^2;//声音传感器
  15. bit openFlag = 0;//电机开启标志
  16. bit Mode = 0;//0是自动模式,1是手动模式
  17. uint DJ_TIME = 0;//电机开启时间
  18. /*********************定时器1初始化******************/
  19. void time_init()
  20. {
  21. TMOD |= 0X10;
  22. TH1=0x4c;//50ms
  23. TL1=0x00;
  24. ET1 = 1;
  25. TR1 = 1;//开启定时
  26. EA = 1; //开总中断
  27. }
  28. void keyscan()
  29. {
  30. if(KEY1 == 0)//切换键按下
  31. {
  32. delay_ms(10);
  33. if(KEY1 == 0)
  34. {
  35. while(!KEY1);//等待按键松开
  36. Mode = !Mode;
  37. if(Mode==0)lcd_write_str(0, 1, "MODE: ZIDONG ");
  38. else lcd_write_str(0, 1, "MODE: SHOUDONG ");
  39. openFlag = 0;
  40. }
  41. }
  42. if(Mode==1)//手动模式
  43. {
  44. if(KEY2 == 0)//手动开关键按下
  45. {
  46. delay_ms(10);
  47. if(KEY2 == 0)
  48. {
  49. while(!KEY2);
  50. openFlag = 1;
  51. }
  52. }
  53. if(KEY3 == 0)//手动开关键按下
  54. {
  55. delay_ms(10);
  56. if(KEY3 == 0)
  57. {
  58. while(!KEY3);
  59. openFlag = 0;
  60. }
  61. }
  62. }
  63. }
  64. void motoRotate()//电机处理
  65. {
  66. static uint djcount=0;
  67. static bit flag = 0;
  68. if(flag == 0)
  69. {
  70. djcount++;
  71. if(djcount < 30)
  72. {
  73. MotorCW();//正转
  74. }
  75. else
  76. {
  77. if(djcount < 130)
  78. {
  79. MotorStop();//电机停止
  80. }
  81. else
  82. {
  83. flag = 1;
  84. djcount = 130;
  85. }
  86. }
  87. }
  88. else
  89. {
  90. djcount--;
  91. if(djcount > 100)
  92. {
  93. MotorCCW();//电机反转
  94. }
  95. else
  96. {
  97. if(djcount<=0){flag = 0;djcount=0;}
  98. MotorStop();//电机停止
  99. }
  100. }
  101. }
  102. void main()
  103. {
  104. uint sy_count1 = 0;
  105. uint sy_count2 = 0;
  106. uint yuyin = 0;
  107. bit flag = 0;
  108. time_init();//定时器初始化
  109. lcd_init();//1602初始化
  110. lcd_write_str(0, 0, "STATE: CLOSE ");
  111. lcd_write_str(0, 1, "MODE: ZIDONG ");
  112. while(1)
  113. {
  114. keyscan();
  115. if(Mode == 0)//在自动模式下
  116. {
  117. if(Voice == 0)//检测到有声音
  118. {
  119. if(sy_count1++ > 10)//检测哭声是否延续
  120. {
  121. DJ_TIME = 60;//电机开启时间1分钟
  122. openFlag = 1;//电机开启
  123. sy_count1 = 0;
  124. if(ShiDu==0)Line_1A(1);//播报歌曲
  125. }
  126. }
  127. else
  128. {
  129. if(sy_count2++ > 200)
  130. {
  131. sy_count2 = 0;
  132. sy_count1 = 0;
  133. }
  134. }
  135. }
  136. if(ShiDu==1)//检测到尿不湿湿了
  137. {
  138. LED = 0;
  139. if(flag == 0)//只播报一次
  140. {
  141. flag = 1;
  142. Line_1A(0);//播报
  143. yuyin = 0;
  144. }
  145. if(flag==1)
  146. {
  147. if(yuyin++ > 400)
  148. {
  149. yuyin = 0;
  150. Line_1A(0);//播报
  151. }
  152. }
  153. }
  154. else
  155. {
  156. LED = 1;flag = 0;
  157. }
  158. if(openFlag==1)//电机开启
  159. {
  160. lcd_write_str(0, 0, "STATE: OPEN ");
  161. motoRotate();
  162. }else
  163. {
  164. lcd_write_str(0, 0, "STATE: CLOSE");
  165. MotorStop();//电机关闭
  166. }
  167. delay_ms(1);
  168. }
  169. }
  170. void zd1() interrupt 3
  171. {
  172. static uchar cnt1=0;
  173. TH1=0x4c;//50ms
  174. TL1=0x00;
  175. if(cnt1++ >= 20)//1s
  176. {
  177. cnt1 = 0;
  178. if(DJ_TIME > 0)
  179. {
  180. DJ_TIME--;
  181. }
  182. else
  183. {
  184. if(Mode == 0)openFlag=0;
  185. }
  186. }
  187. }
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "lcd1602.h"
  4. sbit RS = P2^5;//数据命令引脚
  5. sbit RW = P2^6;//读写引脚
  6. sbit E = P2^7;//使能引脚
  7. #define DataPort P0//1602并行通信口
  8. void delay_ms(unsigned int ms)//延时毫秒函数
  9. {
  10. unsigned char i, j;
  11. do
  12. {
  13. _nop_();
  14. i = 2;
  15. j = 199;
  16. do
  17. {
  18. while (--j);
  19. } while (--i);
  20. }while(--ms);
  21. }
  22. void lcd_clear(void)//清屏函数
  23. {
  24. lcd_write_com(0x01);
  25. delay_ms(5);
  26. }
  27. void lcd_write_com(unsigned char byte)//写命令
  28. {
  29. RS = 0;
  30. RW = 0;
  31. E = 1;
  32. DataPort = byte;
  33. _nop_();
  34. _nop_();
  35. delay_ms(1);
  36. E = 0;
  37. }
  38. void lcd_write_data(unsigned char byte)//写数据
  39. {
  40. RS = 1;
  41. RW = 0;
  42. E = 1;
  43. DataPort = byte;
  44. _nop_();
  45. _nop_();
  46. delay_ms(1);
  47. E = 0;
  48. }
  49. void lcd_init()//1602初始化
  50. {
  51. delay_ms(5);
  52. lcd_write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
  53. delay_ms(5);
  54. lcd_write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
  55. delay_ms(5);
  56. lcd_write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
  57. delay_ms(5);
  58. lcd_write_com(0x08); //关闭显示
  59. delay_ms(5);
  60. lcd_write_com(0x01);//清屏指令
  61. delay_ms(5);
  62. lcd_write_com(0x06);
  63. delay_ms(5);
  64. lcd_write_com(0x0c);
  65. delay_ms(5);
  66. }
  67. void lcd_write_char(unsigned char x,unsigned char y,unsigned char byte)//在某一位置显示一字符
  68. {
  69. if(0 == y)
  70. {
  71. lcd_write_com(0x80 + x);//第一行
  72. }
  73. else if(1 == y)
  74. {
  75. lcd_write_com(0x80 + 0x40 + x);//第二行
  76. }
  77. lcd_write_data(byte);//显示数据
  78. }
  79. void lcd_write_str(unsigned char x, unsigned char y, unsigned char *s)//在某一位置显示一字符串
  80. {
  81. if(0 == y)
  82. {
  83. lcd_write_com(0x80 + x);//第一行
  84. }
  85. else
  86. {
  87. lcd_write_com(0x80 + 0x40 + x);//第二行
  88. }
  89. while(*s)//判断是否检测到结尾符
  90. {
  91. lcd_write_data(*s);//显示数据
  92. s++;//指针加1
  93. }
  94. }

五,项目总结

本论文采用了信息学习法、文献研究法、经验法等多种研究方法,包括:

(1)信息学习法:了解和实践婴儿的睡眠监测功能,并结合当前的实际情况,进行婴儿的睡眠监测系统的开发。

(2)文献调研:收集了国内外有关婴儿睡眠监测设计的研究成果,并对其进行了梳理,并对其进行了系统的需求分析。

(3)经验方法:在进行系统设计时,常常会出现代码错误等问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/178960?site
推荐阅读
相关标签
  

闽ICP备14008679号