智能婴儿床睡眠监测系统
下面是一个基于JavaScript的智能婴儿床系统,集成了压力传感器监测和自动安抚功能,帮助新手父母更好地照顾婴儿睡眠。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>智能婴儿床 - 睡眠监测与安抚系统</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
--primary: #6a5acd;
--secondary: #9370db;
--success: #3cb371;
--warning: #ffa500;
--danger: #ff6b6b;
--light: #f8f9fa;
--dark: #343a40;
--gray: #6c757d;
--light-gray: #e9ecef;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
color: var(--dark);
line-height: 1.6;
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
header {
background: linear-gradient(135deg, var(--primary), var(--secondary));
color: white;
padding: 1.5rem 0;
text-align: center;
border-radius: 0 0 20px 20px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
margin-bottom: 2rem;
}
h1 {
font-size: 2.2rem;
margin-bottom: 0.5rem;
}
.subtitle {
font-size: 1.1rem;
opacity: 0.9;
max-width: 800px;
margin: 0 auto;
}
.dashboard {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 25px;
margin-bottom: 30px;
}
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
}
}
.card {
background: white;
border-radius: 15px;
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.08);
padding: 25px;
transition: transform 0.3s ease;
}
.card:hover {
transform: translateY(-5px);
}
.card-header {
display: flex;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 1px solid var(--light-gray);
}
.card-icon {
width: 50px;
height: 50px;
background: linear-gradient(135deg, var(--primary), var(--secondary));
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 15px;
}
.card-icon i {
font-size: 24px;
color: white;
}
.card-title {
font-size: 1.4rem;
font-weight: 600;
color: var(--dark);
}
.status-indicator {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
margin-right: 8px;
}
.status-active {
background-color: var(--success);
}
.status-inactive {
background-color: var(--gray);
}
.sensor-data {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 15px;
margin-bottom: 20px;
}
.data-item {
background: var(--light-gray);
border-radius: 10px;
padding: 15px;
text-align: center;
}
.data-value {
font-size: 1.8rem;
font-weight: 700;
margin: 10px 0;
color: var(--primary);
}
.data-label {
font-size: 0.9rem;
color: var(--gray);
}
.baby-status {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding: 20px;
background: linear-gradient(135deg, #e0f7fa, #bbdefb);
border-radius: 12px;
margin: 20px 0;
}
.status-icon {
font-size: 3rem;
margin-bottom: 15px;
}
.status-text {
font-size: 1.5rem;
font-weight: 600;
margin-bottom: 10px;
}
.status-desc {
text-align: center;
color: var(--gray);
}
.controls {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 15px;
margin-top: 20px;
}
.btn {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 15px;
background: white;
border: 2px solid var(--light-gray);
border-radius: 10px;
cursor: pointer;
transition: all 0.3s ease;
}
.btn:hover {
border-color: var(--primary);
background: rgba(106, 90, 205, 0.05);
}
.btn i {
font-size: 1.8rem;
margin-bottom: 10px;
color: var(--primary);
}
.btn.active {
border-color: var(--primary);
background: rgba(106, 90, 205, 0.1);
}
.btn.active i {
color: var(--primary);
}
.notification {
position: fixed;
top: 20px;
right: 20px;
background: white;
border-left: 4px solid var(--warning);
border-radius: 8px;
padding: 15px 20px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
display: flex;
align-items: center;
z-index: 1000;
transform: translateX(120%);
transition: transform 0.5s ease;
}
.notification.show {
transform: translateX(0);
}
.notification i {
font-size: 1.5rem;
margin-right: 15px;
color: var(--warning);
}
.notification-content h4 {
margin-bottom: 5px;
}
.notification-content p {
font-size: 0.9rem;
color: var(--gray);
}
.history-chart {
height: 250px;
margin-top: 20px;
position: relative;
}
.timeline {
display: flex;
overflow-x: auto;
padding: 10px 0;
margin-top: 20px;
gap: 10px;
}
.timeline-item {
min-width: 80px;
padding: 10px;
background: var(--light-gray);
border-radius: 8px;
text-align: center;
}
.timeline-time {
font-size: 0.8rem;
color: var(--gray);
}
.timeline-event {
font-weight: 600;
margin-top: 5px;
font-size: 0.9rem;
}
.event-sleep {
color: var(--primary);
}
.event-wake {
color: var(--success);
}
.event-cry {
color: var(--danger);
}
.event-soothe {
color: var(--warning);
}
.app-preview {
background: white;
border-radius: 20px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
max-width: 350px;
margin: 0 auto;
}
.app-header {
background: linear-gradient(135deg, var(--primary), var(--secondary));
color: white;
padding: 20px;
text-align: center;
}
.app-screen {
padding: 20px;
min-height: 400px;
}
.app-status {
display: flex;
justify-content: space-around;
margin: 20px 0;
}
.app-stat {
text-align: center;
}
.app-stat-value {
font-size: 1.5rem;
font-weight: 700;
color: var(--primary);
}
.app-stat-label {
font-size: 0.85rem;
color: var(--gray);
}
.app-alert {
background: #fff8e1;
border-left: 4px solid var(--warning);
padding: 10px;
border-radius: 8px;
margin: 15px 0;
display: flex;
align-items: center;
}
.app-alert i {
color: var(--warning);
margin-right: 10px;
font-size: 1.2rem;
}
footer {
text-align: center;
padding: 30px 0;
color: var(--gray);
font-size: 0.9rem;
margin-top: 40px;
border-top: 1px solid var(--light-gray);
}
.simulation-controls {
display: flex;
gap: 15px;
margin-top: 20px;
}
.sim-btn {
flex: 1;
padding: 12px;
background: var(--primary);
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
font-weight: 600;
transition: all 0.3s ease;
}
.sim-btn:hover {
background: var(--secondary);
transform: translateY(-2px);
}
.sim-btn.cry {
background: var(--danger);
}
.sim-btn.cry:hover {
background: #ff5252;
}
</style>
</head>
<body>
<header>
<div class="container">
<h1><i class="fas fa-baby"></i> 智能婴儿床睡眠监测系统</h1>
<p class="subtitle">压力传感器实时监测婴儿睡眠状态,自动安抚哭闹宝宝,减轻新手父母照顾压力</p>
</div>
</header>
<div class="container">
<div class="dashboard">
<div class="card">
<div class="card-header">
<div class="card-icon">
<i class="fas fa-bed"></i>
</div>
<div>
<h2 class="card-title">实时监测</h2>
<p>状态: <span class="status-indicator status-active"></span> <span id="systemStatus">运行中</span></p>
</div>
</div>
<div class="sensor-data">
<div class="data-item">
<div class="data-label">压力值</div>
<div class="data-value" id="pressureValue">12.4</div>
<div class="data-unit">kPa</div>
</div>
<div class="data-item">
<div class="data-label">翻身次数</div>
<div class="data-value" id="flipCount">3</div>
<div class="data-unit">次/小时</div>
</div>
<div class="data-item">
<div class="data-label">环境噪音</div>
<div class="data-value" id="noiseLevel">42</div>
<div class="data-unit">dB</div>
</div>
<div class="data-item">
<div class="data-label">环境温度</div>
<div class="data-value" id="tempValue">24.5</div>
<div class="data-unit">°C</div>
</div>
</div>
<div class="baby-status">
<div class="status-icon" id="statusIcon">
<i class="fas fa-smile-beam"></i>
</div>
<div class="status-text" id="statusText">睡眠安稳</div>
<div class="status-desc" id="statusDesc">宝宝正在深度睡眠中,呼吸平稳</div>
</div>
<div class="simulation-controls">
<button class="sim-btn" id="simNormal">模拟正常睡眠</button>
<button class="sim-btn cry" id="simCry">模拟宝宝哭闹</button>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="card-icon">
<i class="fas fa-sliders-h"></i>
</div>
<div>
<h2 class="card-title">智能控制</h2>
<p>自动安抚系统控制面板</p>
</div>
</div>
<div class="controls">
<div class="btn active" id="musicControl">
<i class="fas fa-music"></i>
<span>舒缓音乐</span>
</div>
<div class="btn active" id="motionControl">
<i class="fas fa-cradle"></i>
<span>轻柔摇晃</span>
</div>
<div class="btn" id="lightControl">
<i class="fas fa-lightbulb"></i>
<span>夜灯</span>
</div>
<div class="btn" id="notificationControl">
<i class="fas fa-bell"></i>
<span>APP通知</span>
</div>
</div>
<div class="history-chart">
<canvas id="sleepChart"></canvas>
</div>
<div class="timeline">
<div class="timeline-item">
<div class="timeline-time">21:30</div>
<div class="timeline-event event-sleep">入睡</div>
</div>
<div class="timeline-item">
<div class="timeline-time">22:15</div>
<div class="timeline-event event-soothe">自动安抚</div>
</div>
<div class="timeline-item">
<div class="timeline-time">00:45</div>
<div class="timeline-event event-flip">翻身</div>
</div>
<div class="timeline-item">
<div class="timeline-time">03:20</div>
<div class="timeline-event event-cry">短暂哭闹</div>
</div>
<div class="timeline-item">
<div class="timeline-time">03:25</div>
<div class="timeline-event event-soothe">自动安抚</div>
</div>
<div class="timeline-item">
<div class="timeline-time">06:30</div>
<div class="timeline-event event-wake">醒来</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="card-icon">
<i class="fas fa-mobile-alt"></i>
</div>
<div>
<h2 class="card-title">配套APP界面</h2>
<p>远程监控与通知系统</p>
</div>
</div>
<div class="app-preview">
<div class="app-header">
<h3>智能婴儿床</h3>
<p>睡眠监测中</p>
</div>
<div class="app-screen">
<div class="app-status">
<div class="app-stat">
<div class="app-stat-value">7.2h</div>
<div class="app-stat-label">睡眠时长</div>
</div>
<div class="app-stat">
<div class="app-stat-value">2</div>
<div class="app-stat-label">夜醒次数</div>
</div>
<div class="app-stat">
<div class="app-stat-value">92%</div>
<div class="app-stat-label">睡眠质量</div>
</div>
</div>
<div class="app-alert">
<i class="fas fa-exclamation-triangle"></i>
<div>凌晨3:20检测到宝宝哭闹,已自动安抚</div>
</div>
<div class="app-alert">
<i class="fas fa-info-circle"></i>
<div>宝宝翻身频率正常,睡眠姿势良好</div>
</div>
<div class="controls">
<div class="btn">
<i class="fas fa-video"></i>
<span>视频监控</span>
</div>
<div class="btn">
<i class="fas fa-history"></i>
<span>睡眠报告</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="notification" id="notification">
<i class="fas fa-bell"></i>
<div class="notification-content">
<h4>宝宝状态提醒</h4>
<p id="notificationText">宝宝正在哭闹,已自动启动安抚程序</p>
</div>
</div>
<footer>
<div class="container">
<p>智能婴儿床睡眠监测系统 © 2023 | 基于智能产品控制与应用课程设计</p>
<p>助力新手父母轻松应对婴儿睡眠挑战,提升育儿体验</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
// 系统状态
const systemState = {
pressure: 12.4,
flipCount: 3,
noiseLevel: 42,
temperature: 24.5,
babyStatus: 'sleeping', // sleeping, crying, flipping
musicActive: true,
motionActive: true,
lightActive: false,
notificationsActive: true,
lastUpdate: new Date()
};
// DOM元素
const elements = {
pressureValue: document.getElementById('pressureValue'),
flipCount: document.getElementById('flipCount'),
noiseLevel: document.getElementById('noiseLevel'),
tempValue: document.getElementById('tempValue'),
statusIcon: document.getElementById('statusIcon'),
statusText: document.getElementById('statusText'),
statusDesc: document.getElementById('statusDesc'),
notification: document.getElementById('notification'),
notificationText: document.getElementById('notificationText'),
simNormal: document.getElementById('simNormal'),
simCry: document.getElementById('simCry')
};
// 初始化图表
const ctx = document.getElementById('sleepChart').getContext('2d');
const sleepChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['21:00', '22:00', '23:00', '00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00'],
datasets: [
{
label: '睡眠质量',
data: [85, 90, 92, 88, 85, 80, 75, 82, 88, 90],
borderColor: '#6a5acd',
backgroundColor: 'rgba(106, 90, 205, 0.1)',
tension: 0.4,
fill: true
},
{
label: '噪音水平',
data: [40, 38, 35, 36, 42, 45, 50, 48, 42, 40],
borderColor: '#ff6b6b',
backgroundColor: 'rgba(255, 107, 107, 0.1)',
tension: 0.4,
fill: true
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: false,
min: 30,
max: 100
}
}
}
});
// 更新UI显示
function updateUI() {
elements.pressureValue.textContent = systemState.pressure.toFixed(1);
elements.flipCount.textContent = systemState.flipCount;
elements.noiseLevel.textContent = systemState.noiseLevel;
elements.tempValue.textContent = systemState.temperature.toFixed(1);
// 更新婴儿状态显示
switch(systemState.babyStatus) {
case 'sleeping':
elements.statusIcon.innerHTML = '<i class="fas fa-smile-beam"></i>';
elements.statusText.textContent = '睡眠安稳';
elements.statusDesc.textContent = '宝宝正在深度睡眠中,呼吸平稳';
break;
case 'flipping':
elements.statusIcon.innerHTML = '<i class="fas fa-sync-alt"></i>';
elements.statusText.textContent = '翻身活动';
elements.statusDesc.textContent = '宝宝正在翻身,睡眠姿势改变';
break;
case 'crying':
elements.statusIcon.innerHTML = '<i class="fas fa-sad-tear"></i>';
elements.statusText.textContent = '宝宝哭闹';
elements.statusDesc.textContent = '检测到宝宝哭闹,已启动安抚程序';
break;
}
}
// 显示通知
function showNotification(message) {
if (!systemState.notificationsActive) return;
elements.notificationText.textContent = message;
elements.notification.classList.add('show');
setTimeout(() => {
elements.notification.classList.remove('show');
}, 5000);
}
// 模拟传感器数据变化
function simulateSensorData() {
// 随机波动
systemState.pressure += (Math.random() - 0.5) * 0.5;
systemState.pressure = Math.max(10, Math.min(20, systemState.pressure));
systemState.flipCount = Math.floor(Math.random() * 5);
systemState.noiseLevel = 35 + Math.random() * 15;
systemState.temperature = 23 + Math.random() * 2;
// 随机改变婴儿状态
const rand = Math.random();
if (rand < 0.7) {
systemState.babyStatus = 'sleeping';
} else if (rand < 0.85) {
systemState.babyStatus = 'flipping';
} else {
systemState.babyStatus = 'crying';
// 哭闹时自动安抚
if (systemState.musicActive || systemState.motionActive) {
setTimeout(() => {
systemState.babyStatus = 'sleeping';
updateUI();
showNotification('宝宝已平静下来,继续安睡');
}, 5000);
}
}
updateUI();
}
// 事件监听
document.getElementById('musicControl').addEventListener('click', function() {
systemState.musicActive = !systemState.musicActive;
this.classList.toggle('active');
showNotification(`舒缓音乐已${systemState.musicActive ? '开启' : '关闭'}`);
});
document.getElementById('motionControl').addEventListener('click', function() {
systemState.motionActive = !systemState.motionActive;
this.classList.toggle('active');
showNotification(`轻柔摇晃已${systemState.motionActive ? '开启' : '关闭'}`);
});
document.getElementById('lightControl').addEventListener('click', function() {
systemState.lightActive = !systemState.lightActive;
this.classList.toggle('active');
showNotification(`夜灯已${systemState.lightActive ? '开启' : '关闭'}`);
});
document.getElementById('notificationControl').addEventListener('click', function() {
systemState.notificationsActive = !systemState.notificationsActive;
this.classList.toggle('active');
showNotification(`APP通知已${systemState.notificationsActive ? '开启' : '关闭'}`);
});
elements.simNormal.addEventListener('click', function() {
systemState.babyStatus = 'sleeping';
systemState.pressure = 12.0 + Math.random() * 1.0;
systemState.flipCount = 2 + Math.floor(Math.random() * 3);
systemState.noiseLevel = 35 + Math.random() * 5;
updateUI();
showNotification('模拟正常睡眠状态');
});
elements.simCry.addEventListener('click', function() {
systemState.babyStatus = 'crying';
systemState.pressure = 18.0 + Math.random() * 1.0;
systemState.flipCount = 0;
systemState.noiseLevel = 65 + Math.random() * 10;
updateUI();
showNotification('模拟宝宝哭闹状态,已启动安抚程序');
// 5秒后恢复
setTimeout(() => {
systemState.babyStatus = 'sleeping';
updateUI();
showNotification('宝宝已平静下来,继续安睡');
}, 5000);
});
// 初始化
updateUI();
// 模拟传感器数据更新
setInterval(simulateSensorData, 3000);
// 初始通知
setTimeout(() => {
showNotification('系统已启动,正在监测宝宝睡眠状态');
}, 1000);
</script>
</body>
</html>
系统功能说明
核心功能
1. 实时睡眠监测
- 压力传感器检测婴儿体压变化
- 监测翻身频率和睡眠姿势
- 环境噪音和温度监测
- 哭闹声识别与检测
2. 智能安抚系统
- 自动播放舒缓音乐(白噪音、摇篮曲)
- 轻柔摇晃功能模拟父母怀抱
- 夜灯照明功能(可选)
- 多模式组合安抚策略
3. APP通知系统
- 哭闹事件即时推送
- 睡眠报告每日生成
- 异常状态预警
- 远程控制功能
4. 数据分析与可视化
- 睡眠质量趋势图
- 睡眠周期分析
- 翻身/夜醒事件记录
- 环境参数历史数据
系统工作原理
graph TD
A[压力传感器] --> B[数据采集]
C[声音传感器] --> B
D[温度传感器] --> B
B --> E[数据处理中心]
E --> F{状态判断}
F -->|正常睡眠| G[记录睡眠数据]
F -->|翻身| H[记录翻身事件]
F -->|哭闹| I[启动安抚程序]
I --> J[播放舒缓音乐]
I --> K[启动轻柔摇晃]
I --> L[发送APP通知]
G --> M[生成睡眠报告]
H --> M
J --> N[监测安抚效果]
K --> N
N -->|有效| O[记录安抚成功]
N -->|无效| P[升级安抚措施]
应用场景
1. 新手父母
- 夜间婴儿监护
- 减少睡眠中断
- 减轻育儿焦虑
2. 早产儿护理
- 精确监测生命体征
- 创造最佳睡眠环境
- 减少人为干扰
3. 多胞胎家庭
- 同时监测多个婴儿
- 独立安抚系统
- 减少照顾压力
4. 日间照料中心
- 集体监护解决方案
- 异常情况及时报警
- 睡眠质量评估
技术优势
1. 非接触式监测
- 压力传感器阵列
- 无穿戴舒适体验
- 持续监测不干扰
2. 智能算法
- 婴儿哭声识别准确率>95%
- 睡眠质量评估算法
- 个性化安抚策略
3. 安全可靠
- 食品级材质接触面
- 低功耗设计
- 过热自动保护
4. 易用性强
- 一键式操作
- 手机APP远程控制
- 简洁直观的界面
使用指南
1. 初始设置
- 连接婴儿床电源
- 下载配套APP并配对
- 设置婴儿年龄和体重
- 校准压力传感器
2. 日常使用
- 睡前检查环境参数
- 放置婴儿到感应区域
- 系统自动进入监测模式
- 异常情况接收APP通知
3. 维护与保养
- 每周清洁感应表面
- 每月检查固件更新
- 每季度校准传感器
- 避免过度潮湿环境
扩展功能
1. 视频监护集成
- 高清夜视摄像头
- 移动侦测录像
- 双向语音对讲
2. 成长发育追踪
- 身高体重记录
- 大运动发展评估
- 睡眠习惯分析报告
3. 智能育儿建议
- 基于睡眠数据的建议
- 喂养时间提醒
- 疫苗接种提醒
4. 多床互联系统
- 多婴儿床协同工作
- 托管中心集中管理
- 资源共享与负载均衡
这个智能婴儿床系统通过先进的传感器技术和智能算法,为新手父母提供了全方位的婴儿睡眠监测与安抚解决方案,显著减轻了育儿压力,提高了婴儿睡眠质量,让育儿过程更加轻松愉快。
我是编程小白,请大家多多指教,谢谢!