一、引言
1.项目设计需求
智能家居系统主要是通过充分运用先进的计算机技术、搞笑的网络通讯技术以及强大的智能云端控制手段,同时紧密地融合人们的个性化需求,进而把与家居相关的安防系统、能够灵活调节的灯光控制系统、日常使用的电风扇控制,还有场景联动系统以及涉及人们健康的健康保健系统、关乎生活环境安全的卫生防疫系统等,都能够非常有机会地结合汇聚在一起,最终实现通过全面的网络化综合智能控制和科学有效地管
1.1项目设计的背景
人工智能技术发展迅猛,极大改变和影响社会各领域形态与进步。随互联网发展,大数据、云计算和物联网等技术普及,智能化成发展趋势。近年来中国人工智能产业发展迅速,语音识别和计算机视觉成熟。2015 年起产业规模逐年上升,2015 至 2018 年复合平均增长 54%超全球平均。2018 年达 415.5 亿元。随着人工智能专用芯片突破、应用范围扩大及众多创业公司诞生成长,2019 年产业规模持续增长至 554 亿元。
1.2 项目设计目的
通过参与本次课程设计,我们衷心地希望能够较为全面地了解本专业未来广阔的发展前景,从而进一步加深对本专业的深刻理解。同时,也期望能够深入地了解编程领域的良好发展前景。并且在这个过程中,能够真正学习到一定程度的编程能力,进而有效地拓展自身的思维,显著地提升对本专业的浓厚兴趣。还可以清晰地了解到未来的前行方向以及长远的发展方向,从而更加明确自己的奋斗目标,让自己能够在专业道路上更加坚定地前行,朝着理想的方向不断迈进。
2.项目功能要求
本次智能家居项目明确提出了相关要求,既需要充分利用互联网技术来切实地实现对家里实际情况的远程控制。不仅如此,还要能够做到对家里的温度以及湿度等方面进行精准的监控,实时掌握这些环境的变化情况。并且,还必须能够实现远程的对家内各种电器进行有效地控制,让人们可以在任何时间、任何地点都能够便捷地对家中的电器设备进行操作和管理。
2.1 远程监控
要求实现远程监控功能,在家里安装摄像头,通过手机app能够远程实时监控家里情况,并且能够实时拍照远程报警功能。
2.2 控制家里电器、检测温度
要求能实现远程控制家里电器,能够开关电灯。在手机app上控制电器。实时检测温度,温度过高会自动报警。及时防止安全隐患。
二、项目方案设计
1. 开发平台
本次设计基于虚拟机上的Linux系统和QT平台。
1.1 虚拟机上的Linux系统
Linux系统全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统Linux系统,本次实验用于主要系统代码的开发。
1.2 QT软件
Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
2. 开发语言
C语言和C++语言
2.1 C语言
Linux操作系统是用C语言、汇编语言编写的。但这次在Linux上编程我们使用c语言进行。C语言更适合Linux,它是Linux的“母语”,这也是Linux这个开源环境和本身机制所导致的。
2.2 C++语言
C++语言是C语言的继承,这次设计少量使用c语言,大部分时候使用C++语言。相比于C语言,C++更加方便,可以调用很多函数,不需要每个都我们自己编写。调用别人的函数可以让我们站的更高,也更加方便我们的设计。
3 .硬件开发平台
计算机和嵌入式开发箱
3.1 计算机
开发中我们使用计算机中的VMware软件模拟Linux系统进行基本的编程调试,其后用计算机中的QT软件编写ui界面,对app界面进行美化设计。
3.2 嵌入式开发箱
有带相机的机械臂、小风扇、继电器、蜂鸣器、温度传感器等硬件。用嵌入式人工智能箱可以模拟家里情况,把程序添加到开发箱中以模拟智能家居实现情况。机械臂模拟家里的摄像头,风扇模拟家里电器,继电器模拟家里电灯,温度传 开发箱中感器可以检测温度,蜂鸣器模拟家里报警器。
4.设计实现方案
4.1 视频监控
通过嵌入式开发箱中的机械臂模拟家里安装的摄像头,通过程序编写控制摄像头的开关,拍照。并且能传输到开发的app上实现远程监控功能。
4.2 温度检测及报警
通过嵌入式开发箱中的温度传感器实现温度检测,温度过高实时报警。
三、项目设计实现
3.1 主程序设计
QT += core gui
QT += multimedia
QT += multimediawidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
camera.cpp \
insert_id.cpp \
main.cpp \
login_dialog.cpp \
mainwindow.cpp \
mythread.cpp \
player.cpp \
slide.cpp \
picture_mainwindow.cpp \
http.cpp \
image.cpp \
audio.cpp \
_http.cpp \
speechsend.cpp \
image_.cpp \
face.cpp
HEADERS += \
camera.h \
insert_id.h \
login_dialog.h \
mainwindow.h \
mythread.h \
player.h \
slide.h \
picture_mainwindow.h \
http.h \
image.h \
audio.h \
_http.h \
speechsend.h \
image_.h \
face.h
FORMS += \
camera.ui \
insert_id.ui \
login_dialog.ui \
mainwindow.ui \
picture_mainwindow.ui \
face.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
image.qrc
3.2 模块设计
3.2.1摄像头模块:
while(1)
{
ret = camera dqbuf(fd, (void **)&jpeg_ ptr, &size, &index);
if(ret== -1)
return -1;
printf("taking one!: %d\n", size);
char buf[10]= {0};
sprintf(buf, "%d", size);
write(clientfd, buf, 10);
write(clientfd, jpeg. _ptr, size);