☰
C语言智能家居控制模拟系统:从设计到实现
2026/10/3 6:36:04 网站建设 项目流程

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)替换命令行交互。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询