文章目录

  • 摘 要:
    • 关键词:ZigBee 、语音识别、智能家居、传感器
  • 0.引言
  • 1.概述
  • 2.系统总体设计
      • 2.1系统组成
      • 2、系统使用流程
      • 3、开发环境
    • 2.2系统传感器构成
    • 2.3系统数据库设计
  • 3.系统详细设计与实现
  • 4.系统测试结果
  • 5.总结
  • 6.参考文献

摘 要:

对于传统阳台来说,阳台是采光的用来晾晒衣服作为主要作用,如今随着物联网技术的发展,阳台赋予了更多的应用,更多的使用空间,是一种生活场景。本文讲述智能阳台基础仿真设计与实现过程。使用语音助手,多传感器,ZigBee等技术为您展现。

关键词:ZigBee 、语音识别、智能家居、传感器

0.引言

随着社会的发展,城市化的比例越来越高,当下的年轻人对于房子的装修,也是不同于以前,尤其是智能家居的火热,当然对于阳台的使用也大有不同,对于传统阳台来说,阳台是采光的用来晾晒衣服作为主要作用,如今随着物联网技术的发展,阳台赋予了更多的应用,更多的使用空间,是一种生活场景。本文讲述智能阳台基础仿真设计与实现过程。

1.概述

阳台智能化,添加多元场景,本文介绍智能阳台三大功能:
其一,自然是智能晾衣架,作为阳台基本可以通过控制,自动升降,既不占空间,又保留其功能。使用步进电机传感器,以及中控系统完成晾衣架的自动升降。
其二就是智能养护功能,绿植在房子装饰上不可或缺,许多人都或多或少种植一些绿植,阳台作为采光的部分,自然是培养绿植的好地方,智能养护可以通过传感器获得光照强度,温度湿度,监测环境,完全可以实现科学种植,非常省心。
其三为智能灯光系统,要知道阳台作为不同生活场景时候对于灯光效果也是不相同的,所以配合灯光系统,可以带来不同的体验。最为最基础的灯光系统,配合光敏传感器,以及人体红外传感器,用于场景夜晚,检测阳台有人则自动开启灯光。

2.系统总体设计

2.1系统组成

1、本实验使用 Zstack 协议栈多点自组织网络形式采集实验数据。如图 1 所示,系统由一个协调器 和四个终端节点,即人体红外传感器,步进电机传感器,温湿度传感器,光照强度传感器以及电脑作为网关串口和本地数据库组成。

图 1 系统架构组成

2、系统使用流程

语音录入,python调用百度API识别语音命令向串口发送,再向协调器发送采集命令,协调器再将 命令以广播形式发送给四个终端节点。接着,终端节点采集信息反馈给协调器,协调器将数据发送给串口,最后通过python串口函数将数据存入数据库,然后通过python flask web框架结合echarts图表显示出来

3、开发环境

单片机编译IAR环境以及python3.9解释器,pyCharm环境需要的库与模块pymysql、serial、time、utils、 serial.tools.list_ports、win32com.client、from aip import AipSpeech、 pyaudio、 wave、flask、render_template。Mysql5.7数据库以及Navicat 作为数据管理工具。

2.2系统传感器构成

本任务使用HC-SR501传感器,是基于红外线技术的自动控制钱块,广泛应用于各类自动感应电器设备,HC-SR501的核心控制模块是采用稳定性好、可靠性强、灵敏度高且超低功耗
人体红外传感器检测到有人体活动时,其输出的I/O值发生变化。当传感器模块检测到有人入侵时,会返回一个高电平信号,无人入侵时,返回一个低电平信号,通过读取1/O口的状态判断是否有人体活动。因此通过检测此I/O口电平状态的变化,可判新是否检测到周围有人靠近。
光敏传感器主要是对于ADC值的读取光照越强,数值越低

图 2人体红外传感器

图 3 光敏传感器

·

图四温湿度传感器

图 5步进电机传感器

图 6协调器

2.3系统数据库设计

图 7 光照强度数据表

图 8 温湿度数据表

选择设计id作为主键自增,datatime设计为varchar,并没有设为time类型,因为可以直接存储,不需要调用数据库时间函数,id用来查询最新数据,这样就可以显示最新数据完成实时读取

3.系统详细设计与实现

光敏传感器功能

图 9光敏传感器功能图

核心代码


if (strncmp("0x11", pData, len) == 0) {             //如果收到的数据是"0x11"osal_start_timerEx( sapi_TaskID, MY_REPORT_EVT, 3000 );//光照强度触发事件循环采集3s一次}
传感器初始化
int getADC(void)
{unsigned int  value;P0SEL |= 0x02;ADCCON3  = (0xB1);                    ADCCON1 |= 0x30;                      ADCCON1 |= 0x40;                                 while(!(ADCCON1 & 0x80));             value =  ADCL >> 2;value |= (ADCH << 6);                 //取得最终转化结果,存入value中return ((value) >> 2);
}

步进电机功能图

图 10步进电机功能图

核心代码

电机初始化

/*motor_init函数
-------------------------------------------------------*/
void motor_init(void)
{P0SEL &=~ 0x62;   //P0_1 P0_5 P0_6 为普通io口P0DIR |= 0x62;    //作输出P1SEL &=~ 0x08;   //P1_3为普通io口 P1DIR |= 0x08;    //作输出AA = 1;BB = 1;CC = 1;DD = 1;
}if (strncmp("0x14", pData, len) == 0) {             //如果收到的数据是"0x14"flag=0;     //改变方向用的 motor_init();//初始化for(int i=0;i<1000;i++){Motor_Test();//转动}}

人体红外功能图

图 11人体红外功能图

核心代码


初始化以及发送数据P0SEL &= ~0x20;                        //P0_5为普通io口P0DIR &= ~0x20;                        //P0_5输入int Value; Value = P0_5;char  rbuf[10] = {0};if(Value==1){sprintf(rbuf,"Y%u",Value); zb_SendDataRequest( 0, ID_CMD_REPORT,10, rbuf, 0, AF_ACK_REQUEST, 0 );  //发送数据*/}else{sprintf(rbuf,"N%u",Value); zb_SendDataRequest( 0, ID_CMD_REPORT,10, rbuf, 0, AF_ACK_REQUEST, 0 );   //发送数据*/
}else if (strncmp("0x13", pData, len) == 0) {     //如果收到的数据是"0x13"osal_start_timerEx( sapi_TaskID, MY_REPORT_EVT, 1000 );//人体红外}else if (strncmp("0x15", pData, len) == 0) { flag2=1;//开灯}else if (strncmp("0x16", pData, len) == 0) { flag2=0;//关灯}

温湿度功能图

图 12温湿度传感器功能图

核心代码


void dht11_io_init(void)
{P0SEL  &= ~0x20;          //P1为普通 I/O 口COM_OUT;COM_SET;
}
unsigned char dht11_temp(void)
{return sTemp;
}
unsigned char dht11_humidity(void)
{return sHumidity;
}void dht11_update(void)
{int flag = 1;unsigned char dat1, dat2, dat3, dat4, dat5, ck;//主机拉低18ms COM_CLR;halMcuWaitMs(18);COM_SET;flag = 0;while (COM_R && ++flag);if (flag == 0) return;//总线由上拉电阻拉高 主机延时20us//主机设为输入 判断从机响应信号  //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行            flag = 0;while (!COM_R && ++flag);if (flag == 0) return;flag = 0;while (COM_R && ++flag);if (flag == 0) return;dat1 = dht11_read_byte();dat2 = dht11_read_byte();dat3 = dht11_read_byte();dat4 = dht11_read_byte();  dat5 = dht11_read_byte();            ck = dat1 + dat2 + dat3 + dat4;if (ck == dat5) {sTemp = dat3;sHumidity = dat1;        }char  rbuf[20] = {0};sprintf(rbuf,"H%dT%d",dat1,dat3); //A0表示湿度,A1表示温度zb_SendDataRequest( 0, ID_CMD_REPORT,10, rbuf, 0, AF_ACK_REQUEST, 0 );  //发送数据}

串口功能图

图 13串口功能图

核心代码

Python


def serilink():#串口连接port_list = list(serial.tools.list_ports.comports())s=''if len(port_list) == 0:speak('无可用串口')else:for i in port_list:s=str(i)portx = s[0:4]bps = 38400# 超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)timex = Noneser = serial.Serial(portx, bps, timeout=timex)return serdef Judgmentcommand(n):#判断接收数据类型函数此处是我个性化数据if 'H' and 'T'in n:position=n.find('T')humi=int(n[1:position])temp=int(n[position+1::])insertdata(temp,humi)elif 'Y' in n:light=utils.selectmaxid()if(light>1000):Sendcommand('0x15\r\n')speak('自动为您开启阳台灯光')else:Sendcommand('0x16\r\n')elif 'L' in n:light=n[1::]insert_l2_data(light)elif 'D' in n:dark=n[1::]insert_l2_data(dark)speak("为你开启补光")def Readdata():#读取串口数据函数for i in range(10):time.sleep(1)data = serilink().read(10)#读取10字节data = str(data)#转为字符串data = data.replace('\\x00', '')#数据分割data = data.replace("'", '')#数据分割Judgmentcommand(data[1:])#数据判断函数判断数据并存入数据print(data[1:])
# 百度API语音识别自行申请
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client=AipSpeech(APP_ID,API_KEY,SECRET_KEY)
#语音识别
def recognize(file):data=open(file,'rb').read()result=client.asr(data,'wav',16000,{'dev_pid':1537})result=str(result['result'][0])return resultdef get_audio(sec):p=pyaudio.PyAudio()#创建流,采样数,声道数,采样频率,缓存区,input=Truestream=p.open(format=pyaudio.paInt16,channels=1,rate=16000,input=True,frames_per_buffer=1024)#创建打开音频文件wf=wave.open('test.wav','wb')#设置wf.setnchannels(1)wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))wf.setframerate(16000)print("请说话")for w in range(int(16000*sec/1024)):data=stream.read(1024)wf.writeframes(data)print("开始识别")stream.stop_stream()stream.close()p.terminate()wf.close()return "test.wav"
def speak(s):print("-->"+s)win32com.client.Dispatch("SAPI.SpVoice").Speak(s)

Web功能图

图 14 web功能图
核心代码

function get_l1_data() {$.ajax({type:"GET",url:"http://127.0.0.1:5000/l1",dataType:"json",async:false,success: function(data) {option_left1.xAxis.data = data.secoption_left1.series[0].data = data.humioption_left1.series[1].data = data.tempec_left1.setOption(option_left1)},error: function(errorData) {}});}
get_l1_data()
setInterval(get_l1_data, 1000)

4.系统测试结果

图15温湿度折线图

图16温湿度折线图

可以看到数据随着时间的变化进行采集,温湿度设置为3s读取一次,串口读取数据读10,可能协调器不一定能接受到因为传感器太多,需要等一等

图 17光照强度折线图

图 18光照强度折线图

同理光照强度也是如此可以随着时间变化读取数据,采集的数据也可以通过仪表图显示最新数据

图 19实时数据

图 20 整体效果

5.总结

本文主要是对于阳台的温度、湿度、光照强度进行采集,以及对于光照低情况下自动开启补光,光照低阳台有人的话,开启灯光,还有就是控制晾衣架自动升降这些作为主要功能,设计些许不足,后面拓展可以进行语音助手升级优化,可以设置唤醒词,或者按键唤醒,对于串口读取可以使用双线程实现边读边写,还有也可拓展写一个小程序用于手机控制,对于平台优化,可以基于算法模型对于土壤湿度模型曲线的预测把拟合数据与实际湿度数据对比这样就可以提醒什么时候浇水,补光等操作。

6.参考文献

[1]聂佰玲,武将将,沈昊.阳台菜园智能控制系统的设计与研究[J].产业与科技论坛,2019,18(01):64-65.
[2]李海川,杨思民.浅谈基于智能硬件在阳台智能化场景中的应用[J].科学技术创新,2021(17):147-148.
[3]何文祥,李社蕾.智能家居盆栽系统技术的研究与设计[J].现代计算机,2021,27(23):167-170.
[4]洪长平.基于物联网ZigBee技术的防盗报警系统设计[J].九江学院学报(自然科学版),2020,35(03):57-60.DOI:10.19717/j.cnki.jjun.2020.03.015.
[5]张军. 基于智能盆栽系统的新型物联网架构设计[D].深圳大学,2017.
[6]曾星,陈长菊,张坤. 基于物联网的智能阳台控制系统设计[J]. 通讯世界,2018(6):85-86. DOI:10.3969/j.issn.1006-4222.2018.06.053.
[7]成都信息工程大学,孙翔. 一种基于ZigBee的智能化盆栽浇灌系统:CN201721211830.4[P]. 2018-04-27.
[8]章煜佳,罗文强,金航,杨钦洋,陈祥军,陈超娣,杨金伟.专用于学生公寓阳台的智能防护装置研制[J].科学技术创新,2020(02):188-190.
[9]杨巍,刘倩,邱博.基于STM32与物联网IP技术的智能生态阳台场景的设计与实现[J].电子产品世界,2018,25(09):57-60.

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现相关推荐

  1. 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计

    1220基于单片机ADC0809八路电压采集系统设计-毕设课设资料 数码管显示,测量八路电压表. #define addo (5.0/255.0) #define zero 0.005 //用于校准A ...

  2. 基于51单片机霍尔传感器测速(仿真+源程序)

    资料编号:196  下面是该资料仿真演示视频: 196-基于51单片机霍尔传感器测速(仿真+源程序+全套资料) 功能简介: 51单片机计数测速转速测量,在仿真中等价于测量外部脉冲频率:如果修改输入脉冲 ...

  3. 基于单片机的饮水机温度控制系统、基于单片机继电器及双向可控硅控制照明设备、基于单片机的液位自动检测控制仿真设计、基于单片机家用厨房天然气火灾报警器系统-设计全套资料

    1347基于单片机的饮水机温度控制系统-电设资料 随着社会的发展和科技的不断进步,人们的生活水平也在逐渐提高.与之而来的问题也很多,例如能源危机与环境污染,绿色环保理念因而开始深入人心.太阳能作为新兴 ...

  4. c语言 数组放空自己,基于Arduino和Labview的无线遥控智能小车的设计与实现.docx

    PAGE V MACROBUTTON MTEditEquationSection2 SEQ MTEqn \r \h SEQ MTSec \r 1 \h SEQ MTChap \r 1 \h 中文摘要 ...

  5. 基于51单片机PT100热电偶AD转换protues仿真设计

    基于51单片机PT100热电偶AD转换protues仿真设计 (源码+仿真) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0023 这里写 ...

  6. 基于单片机节日彩灯控制器系统设计、基于单片机脉搏检测和体温检测设计、基于单片机可燃气体检测及报警系统、基于单片机可调八路抢答器仿真设计-全套设计资料

    1425基于单片机节日彩灯控制器系统设计-protues仿真资料 以单片机为核心,设计一个节日彩灯控制器: l  K1-开始,按此键则灯开始流动(由上而下). l  K2-停止,按此键则停止流动,所有 ...

  7. 基于51单片机的电子血压温度计(单片机健康检测系统设计)proteus仿真设计(仿真+程序+演示视频)

    基于51单片机的电子血压温度计proteus仿真设计 (仿真+程序+演示视频) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号:S0026 演示视频: 51单片机的 ...

  8. 基于51单片机的LCD1602电子钟闹钟proteus仿真设计

    本设计是基于51单片机的LCD1602电子钟闹钟proteus仿真设计 源码+仿真+原理图+器件清单 仿真软件版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编 ...

  9. 基于matlab的温度信号采集,基于matlab与单片机的动态温度监控系统的设计

    基于matlab与单片机的动态温度监控系统的设计 基于Matlab/Simulink 与单片机的动态温度监控系统的设计Matlab 有着强大的数值处理能力,已应用于工程计算.控制系统设计.数字信号处理 ...

  10. 【004】基于51单片机的音乐播放器proteus仿真设计

    一.压缩包资料内容(私信获取) (1).基于51单片机的音乐播放器proteus仿真设计一份: (2).基于51单片机的音乐播放器proteus仿真设计keli源代码一份: (3).基于51单片机的音 ...

最新文章

  1. 大神开源AI代码!这次我也可以亲自上手、模仿OpenAI利用文本合成图像啦!
  2. icon-font与svg
  3. 配置文件http://www.cnblogs.com/Jevon-ran/p/7112007.html
  4. 简易计算器里的小数点在程序中怎么表示_财管普通计算器(内有彬哥经验)
  5. php 原生多图上传,php 原生多图文件上传
  6. vue-cli3配置externals、jquery
  7. WCHAR char CString等常用类型互转
  8. fcn+caffe+siftflow实验记录
  9. 自底向上带你逆向解析hibernate联合主键
  10. PHP超级外链工具源码/无后台一键批量外链源码
  11. Android 如何检查麦克风是否被任何后台应用程序使用?
  12. 2005-10-22 风波
  13. Python中的图形绘制——3D绘图
  14. 要考驾照科目二了,好紧张
  15. 第44届世界技能大赛中国参赛项目集训选手名单公布,388人入选!(人社部今日发文)
  16. bootbox.js bootbox.promt()
  17. C语言入门系列 -运算符
  18. MySql数据库以及他的安装与环境变量配置
  19. 若要运行此应用程序 您必须首先安装 .NET Framework的以下版本之一
  20. Internet 上可用的“简单网络时间协议”时间服务器列表

热门文章

  1. 全志平台速鼎模块的BT调试记录
  2. 平衡小车—TB6612FNG与直流电机控制教程
  3. WINCC报表 VBS脚本链接SQL Server数据库 日报月报 导出EXCEL PDF
  4. linux 驱动安装带参数,【转】Intel Linux显卡驱动安装指南
  5. 优启通制作系统u盘_IT天空优启通(U盘PE制作助手)制作U盘PE启动图文教程
  6. Android本地音乐播放器(二)
  7. oracle临时表中数据消失了,oracle 临时表的使用
  8. iOS自带的GPS 定位
  9. python为什么胶水语言_Python可以干什么?Python胶水语言由来
  10. R语言 正态性检验 Q-Q plot shapiro test