ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言智能家居控制模拟系统:从设计到实现

C语言智能家居控制模拟系统:从设计到实现 1. 项目背景与目标随着物联网技术的快速发展智能家居逐渐走进日常生活。本文基于 C 语言设计并实现一个智能家居控制模拟系统通过命令行交互方式模拟灯光、空调、窗帘、安防等设备的控制与状态管理帮助初学者理解结构化编程、状态机设计和模块化开发思想。本系统不依赖真实硬件仅通过标准输入输出模拟设备行为适合作为 C 语言课程设计或入门项目练习。2. 系统功能设计系统主要提供以下功能模块设备管理支持灯光、空调、窗帘、门锁、烟雾报警器等设备的添加与状态查询。场景控制一键切换「回家模式」「离家模式」「睡眠模式」等预设场景。定时任务模拟定时开关设备如晚上 7 点自动开灯。安防监控模拟门窗入侵检测与报警提示。能耗统计统计各设备运行时长与模拟能耗。3. 系统架构设计系统采用模块化分层设计主要分为三层┌─────────────────────────────┐ │ 用户交互层菜单 │ ├─────────────────────────────┤ │ 业务控制层逻辑 │ ├─────────────────────────────┤ │ 设备数据层结构体 │ └─────────────────────────────┘其中设备数据层使用结构体数组保存设备信息业务控制层负责处理用户指令用户交互层提供菜单式命令行界面。4. 核心数据结构系统使用结构体描述设备属性代码如下#include stdio.h #include string.h #include stdlib.h #define MAX_DEVICES 20 #define NAME_LEN 32 typedef enum { DEV_LIGHT, DEV_AIR_CONDITIONER, DEV_CURTAIN, DEV_DOOR_LOCK, DEV_SMOKE_SENSOR } DeviceType; typedef struct { int id; char name[NAME_LEN]; DeviceType type; int status; // 0-关闭 1-开启 int value; // 亮度/温度/开合度等 int running_time; // 累计运行时间分钟 } Device; Device devices[MAX_DEVICES]; int device_count 0;5. 设备初始化与注册系统启动时初始化默认设备列表代码如下void init_devices() { // 添加客厅灯 strcpy(devices[0].name, 客厅灯); devices[0].type DEV_LIGHT; devices[0].status 0; devices[0].value 0; devices[0].running_time 0; devices[0].id 1; // 添加卧室空调 strcpy(devices[1].name, 卧室空调); devices[1].type DEV_AIR_CONDITIONER; devices[1].status 0; devices[1].value 26; // 默认 26 度 devices[1].running_time 0; devices[1].id 2; // 添加客厅窗帘 strcpy(devices[2].name, 客厅窗帘); devices[2].type DEV_CURTAIN; devices[2].status 0; devices[2].value 0; // 0-全关 100-全开 devices[2].running_time 0; devices[2].id 3; device_count 3; }6. 设备控制函数系统提供统一的设备控制接口根据设备类型执行不同操作void control_device(int id, int cmd, int param) { for (int i 0; i device_count; i) { if (devices[i].id ! id) continue; switch (devices[i].type) { case DEV_LIGHT: if (cmd 1) { devices[i].status 1; devices[i].value param; // 亮度 0-100 printf(灯光已开启亮度 %d%%\n, param); } else { devices[i].status 0; devices[i].value 0; printf(灯光已关闭\n); } break; case DEV_AIR_CONDITIONER: if (cmd 1) { devices[i].status 1; devices[i].value param; // 温度 16-30 printf(空调已开启设定温度 %d 度\n, param); } else { devices[i].status 0; printf(空调已关闭\n); } break; case DEV_CURTAIN: devices[i].status (param 0) ? 1 : 0; devices[i].value param; // 开合度 0-100 printf(窗帘开合度已设为 %d%%\n, param); break; case DEV_DOOR_LOCK: if (cmd 1) { devices[i].status 1; printf(门锁已上锁\n); } else { devices[i].status 0; printf(门锁已解锁\n); } break; default: printf(该设备不支持手动控制\n); break; } return; } printf(未找到设备 ID%d\n, id); }7. 场景模式实现场景模式通过批量调用设备控制函数实现一键切换void apply_scene(int scene) { switch (scene) { case 1: // 回家模式 control_device(1, 1, 80); // 开灯亮度 80% control_device(2, 1, 26); // 开空调26 度 control_device(3, 1, 60); // 窗帘开 60% control_device(4, 0, 0); // 门锁解锁 printf(已切换到回家模式\n); break; case 2: // 离家模式 control_device(1, 0, 0); // 关灯 control_device(2, 0, 0); // 关空调 control_device(3, 0, 0); // 关窗帘 control_device(4, 1, 0); // 门锁上锁 printf(已切换到离家模式\n); break; case 3: // 睡眠模式 control_device(1, 1, 20); // 夜灯亮度 20% control_device(2, 1, 24); // 空调 24 度 control_device(3, 0, 0); // 关窗帘 printf(已切换到睡眠模式\n); break; default: printf(未知场景\n); break; } }8. 定时任务模拟系统通过时间判断模拟定时任务例如晚上自动开灯void check_timed_tasks(int hour, int minute) { // 晚上 19:00 自动开客厅灯 if (hour 19 minute 0) { control_device(1, 1, 70); printf([定时任务] 客厅灯已自动开启\n); } // 晚上 23:00 自动关闭客厅灯 if (hour 23 minute 0) { control_device(1, 0, 0); printf([定时任务] 客厅灯已自动关闭\n); } // 早上 7:30 自动打开窗帘 if (hour 7 minute 30) { control_device(3, 1, 100); printf([定时任务] 窗帘已自动打开\n); } }9. 安防监控模拟系统模拟门窗入侵检测当检测到异常时触发报警void security_monitor(int door_open, int window_open) { if (door_open devices[3].status 1) { printf(⚠ 警告门被打开且门锁处于上锁状态疑似非法入侵\n); printf(建议立即查看监控画面并联系物业。\n); } if (window_open) { printf(⚠ 提示窗户处于打开状态。\n); } if (!door_open !window_open) { printf(安防状态正常门窗均已关闭。\n); } }10. 能耗统计系统根据设备运行时长估算能耗代码如下void show_energy_report() { int total_minutes 0; printf(\n 能耗统计报告 \n); for (int i 0; i device_count; i) { int power 0; switch (devices[i].type) { case DEV_LIGHT: power 10; break; // 10W case DEV_AIR_CONDITIONER: power 1500; break; // 1500W case DEV_CURTAIN: power 50; break; // 50W case DEV_DOOR_LOCK: power 5; break; // 5W default: power 0; break; } int kwh devices[i].running_time * power / 60000; printf(设备 %s运行 %d 分钟估算能耗 %d kWh\n, devices[i].name, devices[i].running_time, kwh); total_minutes devices[i].running_time; } printf(总运行时长%d 分钟\n, total_minutes); }11. 主菜单与交互逻辑系统主循环提供菜单式交互代码如下void show_menu() { printf(\n 智能家居控制系统 \n); printf(1. 查看设备状态\n); printf(2. 控制设备\n); printf(3. 切换场景模式\n); printf(4. 模拟定时任务\n); printf(5. 安防监控\n); printf(6. 能耗统计\n); printf(0. 退出系统\n); printf(请选择操作); } int main() { init_devices(); int choice; int hour 0, minute 0; while (1) { show_menu(); scanf(%d, choice); switch (choice) { case 1: show_device_status(); break; case 2: // 控制设备输入设备 ID、命令和参数 int id, cmd, param; printf(输入设备 ID、命令1-开 0-关和参数); scanf(%d %d %d, id, cmd, param); control_device(id, cmd, param); break; case 3: printf(选择场景1-回家 2-离家 3-睡眠); scanf(%d, choice); apply_scene(choice); break; case 4: printf(输入当前时间时 分); scanf(%d %d, hour, minute); check_timed_tasks(hour, minute); break; case 5: security_monitor(0, 0); break; case 6: show_energy_report(); break; case 0: printf(系统已退出再见\n); return 0; default: printf(无效选项请重新输入。\n); break; } } return 0; }12. 设备状态查询系统提供设备状态查询函数便于用户查看当前所有设备运行情况void show_device_status() { printf(\n 当前设备状态 \n); for (int i 0; i device_count; i) { printf(ID%d | 名称%s | 状态%s, devices[i].id, devices[i].name, devices[i].status ? 开启 : 关闭); switch (devices[i].type) { case DEV_LIGHT: printf( | 亮度%d%%, devices[i].value); break; case DEV_AIR_CONDITIONER: printf( | 温度%d 度, devices[i].value); break; case DEV_CURTAIN: printf( | 开合度%d%%, devices[i].value); break; default: break; } printf(\n); } }13. 编译与运行在 Linux 或 Windows 环境下使用 GCC 编译运行gcc smart_home.c -o smart_home ./smart_home运行后即可通过菜单交互控制模拟设备体验完整的智能家居控制流程。14. 总结与扩展方向本文实现了一个基于 C 语言的智能家居控制模拟系统涵盖了设备管理、场景切换、定时任务、安防监控和能耗统计等核心功能。通过本项目可以巩固结构体、枚举、函数封装和模块化设计等 C 语言知识点。后续可以从以下方向扩展增加文件读写功能实现设备配置的持久化保存。引入多线程模拟设备异步运行与实时状态刷新。结合网络编程实现远程控制接口。使用图形界面库如 GTK替换命令行交互。
返回列表