基于KittenBot的智能家居系统iei-Arduino中文社区 - Powered by Discuz! Archiver

王顺 发表于 2017-8-18 15:53

基于KittenBot的智能家居系统iei

本帖最后由 王顺 于 2017-11-18 14:20 编辑

参赛项目:基于KittenBot的智能家居系统

参赛组员:
4人
王顺 - 一只程序猿,最近喜欢折腾电子,负责电子设计与arduino程序编写
万大圣 - 某物联网公司产品经理,负责基于KittenBot的智能家居系统改造
向芸花 - 程序媛一枚,本职工作是做物联网前端,现在做基于KittenBot的智能家居系统技术分析。
陈宁佳 - 程序媛一枚,产品设计包装,外观包装分析,“打酱油”


从申请板子到现在有一段时间了,当我拿到板子的时候,由于申请板子的时候说的是做一个自动窗帘,但是看见板子申请完美,我就做了一个智能家居系统,包含了如下功能:
(由于暑假时间比较紧,这个系统做到了90%,突然家里有点情况,先把我做的实物图公布出来,9月初将全面补充完整。) (以下为更新内容)
今天终于完成了本次作品,总体来说还是花费了我一部分时间,主要由于时间凌乱,一直放在心上。

先给他家上一张平台控制图和实物俯视图,如果软件硬件同时由一个人做完,还是一件很辛苦的事!本人深有体会!

   

实物图照片上 本人大部分已经很明确标注的很清楚了。:D



接下来我为大家介绍一下本次本人做的作品的一些主要功能!大家从控制平台的图片可以看到,从硬件上,本智能家居系统主要包括客厅区控制、卧室区控制部分、厨房区控制部分以及过道监视和控制区5个部分。

首先先说一下申请的开发板外设接线标注,这是本次核心板接线定义,其实代码上就可以看出来,是不是通过图片观看看会明了了许多呢!


客厅控制部分,在客厅区本人主要做了客厅的空调控制、空气净化器控制、温度检测、湿度监测;通过温湿度数据实时监测客厅环境状态,可以通过平台一键控制空调和空气净化器的开和关,这样当你出门在外,回家遇上高温天气(例如重庆,本人就是重庆的深有体会),这样就可以远程打开空调等,回家直接体验凉爽的感觉是不是很开心呢!



厨房控制部分,在厨房主要做的三个事情,第一是可燃气体泄流监测,如果忘记关煤气灶了,不提前得到煤气泄流信息是一件很可怕的事情,最近新闻报到煤气泄流也不少数;第二是远程开启排风扇,比如煤气泄流,烟雾过浓人不能直接进入厨房的;第三就是油烟机控制,可以一键开启,一键关闭!



卧室控制部分,卧室控制完成了寝室插座控制、卧室远程灯控制、窗帘远程控制,还有窗台紫外线数据提取功能,不一一介绍了,懂了就行!



还有一个过道人体红外监测,只要用于开灯和防盗用的!



好了,硬件介绍差不多了现在再来介绍一下主控区的一些连线和显示还有工作原理!。
先看看主控区全图


连线部分由于自己手工画的,不好看,请大家理解一下!:lol


显示分为开机显示和运行中显示,图片上都有标注,话不多说嘻嘻!



最后就剩下代码部分了,我主要提示做关键的代码部分标注,在本文低有压缩包可下载!

代码头文件和宏定义,有点多,要认真对照看了就简单明了;
/*
   采用外接电源单独供电,
   1 0为串口,连接WIFI模块
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <SoftwareSerial.h>
#include "edp.c"

#include "DHT.h"
#define DHTPIN 13//定义针脚
#define DHTTYPE DHT11//定义类型,DHT11或者其它
DHT dht(DHTPIN, DHTTYPE);//进行初始设置

#define F_L5   //定义左边马达 前进 Pin脚
#define B_L6   //定义左边马达 后退 Pin脚

#define F_R9   //定义右边马达 前进 Pin脚
#define B_R10//定义右边马达 后退 Pin脚

#define PAI2
#define YOU3
#define DENG4
#define CHA7
#define KONG8
#define JING11
#define MODE12

// 设置为16个字符,2行LCD显示地址0x3F
LiquidCrystal_I2C lcd(0x3F, 16, 2);

#define KEY"mw=1HPLJUY1urMpQu3ulhIqE4HE="    //APIkey
#define ID   "11298767"                        //设备ID
#define PUSH_ID NULL

// 串口
#define _baudrate   115200
//#define _rxpin      3
//#define _txpin      2
#define WIFI_UART   Serial
//#define DBG_UART    dbgSerial   //调试打印串口

//SoftwareSerial dbgSerial( _rxpin, _txpin ); // 软串口,调试打印
edp_pkt *pkt;


数据上传云平台部分代码


trigger = readGY_30(num);
if (edp_connect && trigger)
{
    //DBG_UART.print("GY_30: ");
    //DBG_UART.println(num);
    packetSend(packetDataSaveTrans(PUSH_ID, "light_intensity", num));//发送数据存储包
    //当PUSH_ID不为NULL时转发至PUSH_ID
}
Ultraviolet = sensorValue(sensor);
if (edp_connect && Ultraviolet)
{
    //DBG_UART.print("sensorValue: ");
    //DBG_UART.println(sensor);
    packetSend(packetDataSaveTrans(PUSH_ID, "sensorValue", sensor));//发送数据存储包
    //当PUSH_ID不为NULL时转发至PUSH_ID
}

Induction_red = Induction(Infra_red);
if (edp_connect && Induction_red)
{
    //DBG_UART.print("Induction: ");
    //DBG_UART.println(Infra_red);
    packetSend(packetDataSaveTrans(PUSH_ID, "Induction", Infra_red));//发送数据存储包
    //当PUSH_ID不为NULL时转发至PUSH_ID
}

coal_read = coal_gas(Gas);
if (edp_connect && coal_read)
{
    //DBG_UART.print("coal_gas: ");
    //DBG_UART.println(Gas);
    packetSend(packetDataSaveTrans(PUSH_ID, "coal_gas", Gas));//发送数据存储包
    //当PUSH_ID不为NULL时转发至PUSH_ID
}

wendu_read = TEMP(temperature);
if (edp_connect && wendu_read)
{
    //DBG_UART.print("TEMP: ");
    //DBG_UART.println(temperature);
    packetSend(packetDataSaveTrans(PUSH_ID, "wendu_read", temperature));//发送数据存储包
    //当PUSH_ID不为NULL时转发至PUSH_ID
}

shidu_read = HUMI(humidity);
if (edp_connect && shidu_read)
{
    //DBG_UART.print("HUMI: ");
    //DBG_UART.println(humidity);
    packetSend(packetDataSaveTrans(PUSH_ID, "shidu_read", humidity));//发送数据存储包
    //当PUSH_ID不为NULL时转发至PUSH_ID
}


控制部分部分代码如下


//数据处理与应用中EDP命令内容对应
          //本例中格式为datastream:
          sscanf(edp_command, "%[^:]:%s", datastr, val);//命令处理

          //厨房排风扇
          if (atoi(val) == 1)
          {
            digitalWrite(PAI, LOW);//2
          }
          if (atoi(val) == 11)
          {
            digitalWrite(PAI, HIGH);
          }

          //抽油烟机开关
          if (atoi(val) == 2)//3
          {
            digitalWrite(YOU, LOW);
          }
          if (atoi(val) == 22)
          {
            digitalWrite(YOU, HIGH);
          }

          //窗帘
          if (atoi(val) == 3)
          {
            // 顺时针由慢到快   6/5
            for (unsigned char j = 0; j < 255; ++j)
            {
            MotorForward(j);
            delay(10);
            }
            delay(3000);
            motorStop();
          }

          if (atoi(val) == 33)
          {
            // 顺时针由快到慢
            for (unsigned char j = 0; j < 255; ++j)
            {
            MotorBackward(j);
            delay(10);
            }
            delay(3000);
            motorStop();
          }




以上是作品整个全过程,这是发布链接!https://open.iot.10086.cn/appview/p/a4f75a88f53119dcedd796f33da218c5

视频链接:http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1

附上源码:





KittenBot 发表于 2017-8-23 19:49

赞一个,好期待楼主下次更新

myra07 发表于 2017-9-1 17:34

厉害了LZ,参赛做好多项目啊!

iArduion 发表于 2017-9-1 18:36

厉害了楼主

syl312 发表于 2017-10-22 22:16

1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。
页: [1]
查看完整版本: 基于KittenBot的智能家居系统iei