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

文章目录

  • 摘 要:
    • 关键词: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 所示,系统由一个协调器 和四个终端节点,即人体红外传感器,步进电机传感器,温湿度传感器,光照强度传感器以及电脑作为网关串口和本地数据库组成。

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第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值的读取光照越强,数值越低
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第2张图片

图 2人体红外传感器

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第3张图片

图 3 光敏传感器

·
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第4张图片
图四温湿度传感器
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第5张图片

图 5步进电机传感器
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第6张图片

图 6协调器

2.3系统数据库设计

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第7张图片

图 7 光照强度数据表

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第8张图片

图 8 温湿度数据表

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

3.系统详细设计与实现

光敏传感器功能
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第9张图片

图 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);        
}

步进电机功能图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第10张图片

图 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();//转动
   
      }

 
   }


人体红外功能图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第11张图片

图 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;//关灯
   }


温湿度功能图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第12张图片

图 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 ); 	//发送数据
  
}

串口功能图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第13张图片

图 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 = None
    ser = serial.Serial(portx, bps, timeout=timex)
    return ser


def 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 result


def get_audio(sec):
    p=pyaudio.PyAudio()
    #创建流,采样数,声道数,采样频率,缓存区,input=True
    stream=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功能图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第14张图片

图 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.sec
         option_left1.series[0].data = data.humi
            option_left1.series[1].data = data.temp
         ec_left1.setOption(option_left1)
      },
      error: function(errorData) {
      }
   });

}
get_l1_data()
setInterval(get_l1_data, 1000)

4.系统测试结果

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第15张图片

图15温湿度折线图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第16张图片

图16温湿度折线图

可以看到数据随着时间的变化进行采集,温湿度设置为3s读取一次,串口读取数据读10,可能协调器不一定能接受到因为传感器太多,需要等一等
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第17张图片

图 17光照强度折线图
基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第18张图片

图 18光照强度折线图

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

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第19张图片

图 19实时数据

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现_第20张图片

图 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.

你可能感兴趣的:(物联网,单片机,语音识别,嵌入式硬件)