マイコン開発 | マイコンをベースにした赤ちゃん睡眠モニタリングシステムの設計

著者のホームページ:千羽鶴のプログラミング

著者について: Java、フロントエンド、Python は長年にわたって開発されており、シニア エンジニア、プロジェクト マネージャー、アーキテクトとして働いてきました。

主な内容:Javaプロジェクト開発、Pythonプロジェクト開発、大学データ・AIプロジェクト開発、MCUプロジェクト設計、インタビュー技術整理、最新技術共有

お気に入り、いいね、迷わず作者フォローすると良いです

記事の最後にあるソースコードを入手してください

商品番号:BS-DPJ-003

序文:

赤ちゃんは 1 日のほとんどを寝ています。赤ちゃんの睡眠を監視する方法、時間内に赤ちゃんをあやす方法、赤ちゃんのおねしょの問題を解決する方法は、新米母親にとって最も懸念される問題です。多くの家庭では便利なおむつを選ぶと思いますが、おむつは高価なだけでなく吸水性が高く、交換時期が遅れると発疹などの皮膚疾患が発生しやすく、赤ちゃんの体にとっても危険です。それは泣きます、そして両親はそれを聞くのが間に合わず、赤ちゃんは長い間一人で残されました。したがって、赤ちゃんに適した睡眠監視システムを設計することは、初心者の親にとって非常に役立ちます。この論文は、STC89C52シングルチップマイコンをコアとして使用し、音声制御、音声ブロードキャスト、湿度取得回路を採用してさまざまなシーンのデータを収集し、LEDライト、音声ブロードキャストなどの方法で子供のリアルタイム監視を実現します。

1. 環境紹介

言語環境:C言語開発

 

開発技術:51ワンチップマイコン、音声制御回路、音声放送、湿度収集、液晶表示

2. プロジェクト紹介

睡眠は人体の重要な生理学的プロセスであり、その質は人体の健康に直接関係します。医学では、睡眠の構造とプロセスについての人々の理解は、主に睡眠ポリグラフィーとマルチチャンネル睡眠記録によって達成されます。具体的には、脳波検査 (EEG) を使用して睡眠者の脳波を監視し、睡眠状態を予測します。しかし、医療機器や医療技術は主に病院や科学研究機関で使用されるため、その普及はコストが高いために制限されています。近年、センシング技術の急速な発展に伴い、マイクロ検出器の開発も継続的に改良されています。現在、最も一般的なのはモニタリングにアクチグラフを使用することで、通常は 3 方向のセンサーを使用して人体のさまざまな部分の動きを取得します。Fitbit、JawboneUP、WakeMate、YawnLog などはすべてポータブル スマートフォンです。現在市場に出ています。分析ソフトウェアは、収集された情報に基づいて人体のエネルギー消費、睡眠の質、起床時間、睡眠効率などを分析できます。

同時に、多くのスマートフォンベースの睡眠管理ソフトウェア (SleepAsAndroid、Sleep Cycle) は、スマート ハードウェア内の加速度センサーを呼び出して睡眠行動を記録するため、スマート ハードウェアを使用するだけで睡眠の質を監視できます。の目標。ただし、このタイプのセンサーには、不明瞭な行動認識や高い誤認識率などのいくつかの欠点がまだあります。

今日の社会では、仕事のプレッシャーが増大しており、女性は仕事と家庭を同時に守らなければならず、特に新米の母親は赤ちゃんの世話や家事をしなければならないため、新米母親は非常に不安を感じています。赤ちゃんは 1 日のほとんどを寝ています。赤ちゃんの睡眠を監視する方法、あやす方法、おねしょのトラブルシューティング方法はすべて、忙しい新米ママにとって懸念事項です。携帯おむつを使用する家庭が多いと思いますが、おむつは高価であるだけでなく吸水性が高いため、交換時期が遅れると赤ちゃんの皮膚にかぶれを引き起こす可能性があります。綿おむつは衛生的で快適であり、適時に交換する必要がありますが、市販されている尿湿度検査装置のほとんどは単一であるため、偽陽性が発生しやすいです。したがって、赤ちゃんが寝ているときに、初心者の親にとって、赤ちゃんがおねしょをしたかどうかを知ることは非常に重要です。

この論文は主に、シングルチップマイクロコンピュータを核とした赤ちゃんの睡眠監視システムの設計を目的としています。睡眠中に赤ちゃんを監視すると、赤ちゃんが濡れたり、世話が必要で泣いたりするとアラームが送信されます。

まず、関連データを参照した後、全体のスキームと機能を決定し、設計要件に従って回路設計とハードウェア構築を完了し、シングルチップマイコンの制御ソフトウェアを作成します。最後に実際の溶接と実験を行います。

このシステムには主に以下が含まれます: 51個のシングルチップ最小システム、LEDインジケータライト、ULN2003駆動ステッピングモーター、ファンクションキー、WT588D再生、サウンド取得モジュール、湿度検出、LCDディスプレイの現在の情報とステータス、赤ちゃんの泣き声を検出するサウンドセンサー、湿度センサー赤ちゃんのおねしょ検知、おねしょ検知、LEDライト点灯、音声ブロードキャスト。具体的には次のとおりです。

1) 関連データを参照し、51 個のマイクロプロセッサの基本原理を理解します。

2) 乳児の睡眠モニタリングにおける 51 個のマイクロプロセッサの応用を理解する。

3) シングルチップマイコンを核とした幼児睡眠監視システムの回路設計を完了。

4) 関連する制御を C 言語で実行します。

5) プログラムをデバッグして、設計要件を満たすようにします。

6) 赤ちゃんの睡眠監視システムを検出および分析するためのハードウェア回路を溶接する。

7) 卒業設計レポートを完成させます。

2.1全体システム構成図

この方式の全体的な設計ブロック図を図2-1 に示します。

図 2-1 システムブロック図

図 2-1 はこのシステムのシステム構成であり、図からわかるように、次の 9 つのコンポーネントで構成されています。

1) マイクロプロセッサ:

STC89C52 は低消費電力、高性能 COMS 8 ビット マイクロコントローラであるため、システム内に 8K プログラマブル フラッシュ メモリが搭載されています。このシステムは、STC89C52シリーズマイクロプロセッサをコアとして採用し、収集されたデータに従って対応するデータ処理と制御を実行します。

2) 音声制御回路:

このシステムは主に、ステッピング モーターの始動要件を満たすために、特定のデシベルを超える音を収集するために使用されます。

3) 湿度取得回路:

この回路は主に各温度の測定を完了し、それをシングルチップマイコンに送信して処理します。

4) 音声取得回路:

この線は、赤ちゃんが泣いているかどうかを判断するために使用されます。

5) ステッピングモーター:

このモジュールはベビーベッドのロッキングを可能にします。

6) LEDライト:

このシステムでは、LEDライトがタイミングよく発光し、乳母が赤ちゃんのおねしょを確認するのに間に合うように赤ちゃんの世話をすることができます。

7) 音声ブロードキャスト:

WT588D は、このシステムで自動的にアラームを鳴らし、赤ちゃんがおねしょをしたかどうかに注意を払うように乳母に思い出させ、赤ちゃんを時間内に寝かせることができます。

8) LCD1602 モジュール:

このシステムは、シングルチップマイコンとの接続にデュポン社の回線を採用しており、シングルチップマイコンが関連信号を収集して液晶ディスプレイに送信し、輝度を向上させます。

9) システム電源回路: 警報システムの動作に安定した DC 安定化電源を提供します。

2.2システム機能設計

システムが起動すると、次の状況に応じて対処します。

1. 赤ちゃんのホーンが鳴くと、オーディオ制御回路によってモーターが自動的にスイングし、音声モジュールが自動的に軽い歌を再生して赤ちゃんを落ち着かせます。

2.音声制御モジュールは、赤ちゃんの泣き状況をリアルタイムで取得できます。

3. 子供が排尿してキルトが濡れている場合は常に、湿度センサーからの信号が自動アラームをトリガーし、ベッドが濡れているかどうかを音声で確認し、LED ライトが点灯します。

4. ステッピングモーターの駆動にはULN2003を使用しており、赤ちゃんをなだめる必要があるときは、モーターを左右に回転させて赤ちゃんを静かにさせることができます。

5. ボタンは 3 つの異なる設定に使用され、さまざまな状況での迅速な処理に便利です。

 

三、システム表示

全体的な表示

システムテスト:湿度検知器が赤ちゃんのおねしょを検知すると、音声ブロードキャスト+LCDライト点滅表示を行います。

 

4番目、コアコード表示

#include <reg52.h>			 //调用单片机头文件
#include <intrins.h>
#include "lcd1602.h"
#include "StepMotor.h"

#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

#include "WT588D.h"

//按键引脚定义
sbit KEY1 = P3^5;
sbit KEY2 = P3^6;
sbit KEY3 = P3^7;

sbit ShiDu = P1^0;//湿度传感器
sbit LED = P1^1;
sbit Voice = P1^2;//声音传感器

bit openFlag = 0;//电机开启标志 
bit Mode = 0;//0是自动模式,1是手动模式

uint DJ_TIME = 0;//电机开启时间

/*********************定时器1初始化******************/
void time_init()	  
{
	TMOD |= 0X10;	  
  TH1=0x4c;//50ms
  TL1=0x00; 	
	ET1 = 1;
	TR1 = 1;//开启定时
	EA  = 1;	 	  //开总中断
}

void keyscan()
{
		if(KEY1 == 0)//切换键按下
		{
				delay_ms(10);
				if(KEY1 == 0)
				{
						while(!KEY1);//等待按键松开
						Mode = !Mode;
            if(Mode==0)lcd_write_str(0, 1, "MODE: ZIDONG    ");			
            else lcd_write_str(0, 1, "MODE: SHOUDONG  ");	
            openFlag = 0;					
				}
		}
    if(Mode==1)//手动模式
		{
				if(KEY2 == 0)//手动开关键按下
				{
						delay_ms(10);
						if(KEY2 == 0)
						{
								while(!KEY2);
						
								openFlag = 1;
						}
				}
				if(KEY3 == 0)//手动开关键按下
				{
						delay_ms(10);
						if(KEY3 == 0)
						{
								while(!KEY3);
						
								openFlag = 0;
						}
				}
		}
}

void motoRotate()//电机处理
{
	  static uint djcount=0;
	  static bit flag = 0;

	  if(flag == 0)
		{
			  djcount++;
				if(djcount < 30)
				{
						MotorCW();//正转
				}
				else
				{
						if(djcount < 130)
						{
								MotorStop();//电机停止
						}
						else
						{
								flag = 1;
							  djcount = 130;
						}
				}
		}
    else
		{
			  djcount--;
				if(djcount > 100)
				{
						MotorCCW();//电机反转
				}
				else
				{
					  if(djcount<=0){flag = 0;djcount=0;}
						MotorStop();//电机停止
				}
		}
}

void main()
{
	  uint sy_count1 = 0;
	  uint sy_count2 = 0;
	  uint yuyin = 0;
	  bit flag = 0;
	
		time_init();//定时器初始化
		lcd_init();//1602初始化
		lcd_write_str(0, 0, "STATE: CLOSE    ");
    lcd_write_str(0, 1, "MODE: ZIDONG    ");

		while(1)
		{
			  keyscan();
			  if(Mode == 0)//在自动模式下
				{
						if(Voice == 0)//检测到有声音
						{
								if(sy_count1++ > 10)//检测哭声是否延续
								{
										DJ_TIME = 60;//电机开启时间1分钟
										openFlag = 1;//电机开启
									  sy_count1 = 0;
									  if(ShiDu==0)Line_1A(1);//播报歌曲
								}
						}
						else
						{
								if(sy_count2++ > 200)
								{
										sy_count2 = 0;
									  sy_count1 = 0;
								}
						}
				}
        if(ShiDu==1)//检测到尿不湿湿了
				{
						LED = 0;
					  if(flag == 0)//只播报一次
						{
								flag = 1;
							  Line_1A(0);//播报
							  yuyin = 0;
						}
						if(flag==1)
						{
								if(yuyin++ > 400)
								{
										yuyin = 0;
									  Line_1A(0);//播报
								}
						}
				}
				else
				{
						LED = 1;flag = 0;
				}
			  if(openFlag==1)//电机开启
				{
					  lcd_write_str(0, 0, "STATE: OPEN ");
						motoRotate(); 
				}else 
				{
					  lcd_write_str(0, 0, "STATE: CLOSE");
						MotorStop();//电机关闭
				}
			  
			  delay_ms(1);
		}
}


void zd1() interrupt 3
{
	  static uchar cnt1=0;
		TH1=0x4c;//50ms
		TL1=0x00; 
	
		if(cnt1++ >= 20)//1s
		{
				cnt1 = 0;
        if(DJ_TIME > 0)
				{
						DJ_TIME--;
				}
				else
				{
						if(Mode == 0)openFlag=0;
				}
		}
}

#include <reg52.h>
#include <intrins.h>
#include "lcd1602.h"

sbit RS = P2^5;//数据命令引脚
sbit RW = P2^6;//读写引脚
sbit E = P2^7;//使能引脚

#define DataPort P0//1602并行通信口

void delay_ms(unsigned int ms)//延时毫秒函数
{
	unsigned char i, j;
		do
		{
				_nop_();
				i = 2;
				j = 199;
				do
				{
					while (--j);
				} while (--i);
		}while(--ms);
}

void lcd_clear(void)//清屏函数
{
     lcd_write_com(0x01);
		delay_ms(5);
}

void lcd_write_com(unsigned char byte)//写命令
{
		RS = 0;
	  RW = 0;
	  E = 1;
	  DataPort = byte;
	  _nop_();
	  _nop_();
	  delay_ms(1);
	  E = 0; 
}

void lcd_write_data(unsigned char byte)//写数据
{
	  RS = 1;
	  RW = 0;
	  E = 1;
	  DataPort = byte;
	  _nop_();
	  _nop_();
	  delay_ms(1);
	  E = 0;
}

void lcd_init()//1602初始化
{
	  delay_ms(5);
	  lcd_write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
	  delay_ms(5);
	  lcd_write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
	  delay_ms(5);
	  lcd_write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
	  delay_ms(5);
	  lcd_write_com(0x08); //关闭显示
	  delay_ms(5);
	  lcd_write_com(0x01);//清屏指令
	  delay_ms(5);
	  lcd_write_com(0x06);
	  delay_ms(5);
	  lcd_write_com(0x0c);
	  delay_ms(5);
	  
}

void lcd_write_char(unsigned char x,unsigned char y,unsigned char byte)//在某一位置显示一字符
{
	  if(0 == y)
		{
			lcd_write_com(0x80 + x);//第一行
		}
	  else if(1 == y)
		{
			lcd_write_com(0x80 + 0x40 + x);//第二行
		}
		lcd_write_data(byte);//显示数据
}

void lcd_write_str(unsigned char x, unsigned char y, unsigned char *s)//在某一位置显示一字符串
{
	 if(0 == y)
		{
			lcd_write_com(0x80 + x);//第一行
		}
	  else
		{
			lcd_write_com(0x80 + 0x40 + x);//第二行
		}
		
		while(*s)//判断是否检测到结尾符 
		{
			lcd_write_data(*s);//显示数据
			s++;//指针加1 
		}
		
}



V. プロジェクトの概要

この論文では、情報学習法、文献調査法、経験法などのさまざまな研究方法を採用しています。

(1)情報学習方法:赤ちゃんの睡眠監視機能を理解して実践し、現在の実際の状況を組み合わせて赤ちゃんの睡眠監視システムを開発します。

(2) 文献調査:乳幼児の睡眠モニタリング設計に関する国内外の研究結果を収集・整理し、系統的に分析した。

(3) 経験的手法:システム設計時には、コードエラーなどの問題が発生することがよくあります。

おすすめ

転載: blog.csdn.net/BS009/article/details/132299833