专业综合实验报告远程灯光控制系统

更新时间:2023-09-17 11:38:01 阅读量: 幼儿教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

专业综合实验报告

课题名称:远程灯光控制系统班级: 姓名: 学号: 指导教师:完成日期:

电子信息学院

Electronic Information School

目录

一.课程设计题目与分析 ................................................................................................................................ 3

1.1课程设计题目 .................................................................................................................................. 3 1.2设计题目的应用领域 ...................................................................................................................... 3 1.3课程设计题目的分析 ...................................................................................................................... 3 二.整体的系统设计方案 ............................................................................................................................. 4

2.1 智能灯光app软件需求分析 ......................................................................................................... 4

2.1.1功能需求分析 ...................................................................................................................... 4 2.1.2性能需求分析 ...................................................................................................................... 4 2.1.3非功能性需求分析 .............................................................................................................. 5 2.2 智能灯光app硬件需求分析 ......................................................................................................... 6 2.3 系统的总体架构设计 ..................................................................................................................... 6

2.3.1系统结构及环境设计 .......................................................................................................... 6 2.3.2 APP 功能模块划分 ............................................................................................................. 7

三.系统硬件设计 ......................................................................................................................................... 9

3.1OCROBOT MANGOII Ardunio 兼容板 ....................................................................................... 9 3.2HC-06 无线蓝牙串口模块 ..................................................................................................... 10

四系统软件设计 ........................................................................................................................................... 11

4.1 蓝牙设备搜索与匹配功能模块实现 ................................................................................... 11 4.2 Ardunio IDE 编程 ............................................................................................................... 15

五系统测试及结果 ....................................................................................................................................... 17

5.1智能灯光系统测试 ................................................................................................................ 17

六总结 ........................................................................................................................................................... 18 参考文献 ....................................................................................................................................................... 19

一.课程设计题目与分析

1.1课程设计题目

远程灯光控制系统

1.2设计题目的应用领域

物联网的不断发展,推动了智能行业的前进步伐。受限于传统单片机的繁琐复杂,单片机领域的ardunio应运而生。Arduino,是一块基于开放源代码的USB接口 Simple i/o 接口板(包括12 通道数字GPIO,4 通道PWM 输出,6-8 通道l Obit ADC 输入通道),并且具有使用类似Java,C 语言的IDE 集成开发环境。让您可以快速使用Arduino语言与Flash 或Processing...等软件。

1.3课程设计题目的分析

通过对本课题的分析,远程灯光控制系统是基于android NDK 的智能手机开发技术,设计实现一套基于ardunio/android 的智能手机控制灯光系统,使得物联网技术应用到实践中,为创建未来智能家居提供有力素材。

二.整体的系统设计方案

2.1 智能灯光app软件需求分析

2.1.1功能需求分析

随着人们生活水平的提高,人们从追求物质的要求越来越高,科技的不断进步,改变着人们的日常生活方式。物联网技术和智能手机的兴起使得智能家居的发展进入到一个崭新的阶段。用户可以通过智能手机,在任何地方任何地点控制家用电器。光,在整个人类的发展中具有不可磨灭的作用,人类也在不断的进行光的探索,从自然的火光到爱迪生发明的白炽灯到后来的彩灯,人类对光的运用越来越成熟,对光的要求也越来越高。为了满足不同人群对光的不同要求,本文运用软件工程的思想开发一套基于 android 手机的 APP 系统,搭配arduino开发板来实现手机对灯光的各种控制。 2.1.2性能需求分析

智能灯光手机软件核心功能包括:灯光的打开、关闭;调节灯光的亮度;调节灯光的颜色;灯光的闪烁等几个部分。用户进入系统后根据不同的需要对灯光进行相应的控制。系统的用例图如下所示:

图2-1 app用例图

“灯光的开关”作为智能灯光手机软件的基础核心模块,它提供给用户控制接入的

不同灯的开关功能。举例来说,用户接入的总共有三个灯,包括厨房,客厅,卧室三个独立不同的灯,当用户进入 APP 时,可以根据需要,从三个灯中选择一个进行控制。

图2-2 灯光颜色调节活动图

2.1.3非功能性需求分析

作为一款控制灯光的 APP 软件,其界面的安全性和可靠性都是必须的。为了能使用户放心的使用软件,一些保证安全性和可靠性的措施是必须提供的。同样,为了能吸引用户使用,还需要增强软件的稳定性和友好性。因此在设计软件时需要考虑如下几个方面:

①安全性

由于某些病毒或木马程序在移动终端传播迅速,为了避免出现用户的灯光被第三方控制,因此本文选用在通信连接的时候进行密码验证。应用到具体实验的例子中,为手机在首次与 HC-06 蓝牙模块进行连接时,需要输入密码验证,如果通过才能进行下一步操作执行,若密码错误则不能匹配成功,无法进行下一步的操作。另一种方式,可以打开 APP 软件时,进行密码验证,成功进入 APP,失败则退出。但此种方式影响 APP 软件使用的便捷性,因此不再考虑。

① 操作友好

为了能使用户更加方便快捷的使用该工具进行灯光的修改,应用程序在设计之时,其 UI 界面应该遵循人机交互设计原则,采用简单、亲和的界面,让用户在不需要任何教程的条件下,都可以根据界面选项进行相应的操作。

② 可靠、可维护、可移植

软件在开发过程中,必须要保证软件的可靠性,这就要求软件在保证各基本需求功

而Wi-Fi 模块则价格昂贵,不便于普遍使用。因此本文基于通信距离和经济方面考虑,选用了无线蓝牙串口模块—HC-06。

HC-06 从机模块是低功耗,高性能无线收发系统,其无线收发的灵敏度(误码率)可以达到-80d Bm,并且具有-4->6d Bm可调功率输出。具有4 个引脚:VCC/GND/RXD/TXD,在设计过程中,可以通过面包板将此模块与arduino进行连接。 HC-06 其具体结构如下图所示

图3-3HC-06 无线串口蓝牙模块

四 系统软件设计

智能灯光系统的手机端APP 主要由五大功能模块构成,分别是:蓝牙设备搜索与匹配、RGB-LED 灯光的开启和关闭、RGB-LED灯光的亮度调节、RGB-LED 灯光的颜色调节和RGB-LED 灯光的闪烁调节。 4.1蓝牙设备搜索与匹配功能模块实现

传统的Android 平台提供了完整的Bluetooth APIS,其中包括Bluetooth Adapter(Bluetooth Adapter 代表本地设备的蓝牙适配器。Bluetooth Adapter 控制执行基本的蓝牙操作,例如启动蓝牙设备搜索,查询已连接(配对)设备清单,并且使用已知的MAC 地址实例化一个蓝牙设备,并创建一个Bluetooth Server Socket 监听连接请求)、Bluetooth Device (Bluetooth Device 方法可以同已配对设备建立连接或查询其相关信息,如设备名、设备地址、连接状态等)及Bluetooth Class (Bluetooth Class 这个类描述蓝牙设备的特征。手机、耳机、打印机等都会是蓝牙设备,Bluetooth Class就是用来表不该设备为何种类型。)等。Android 平台同样实现了大部分蓝牙Profile,本系统将会用到Serial Port Profile(SPP 蓝牙串口)。在文中,改进传统的功能实现,运用android NDK 技术将蓝牙串口的通信通过JNI 机制编写相应的本地代码,然后依据android NDK 的要

求编写.mk文件,这样android 手机操作系统就可以识别并生成能够被系统使用的动态库.so 文件;最后在android 的应用层上编写调用动态库和使用函数的接口。根据蓝牙串口通信实现的流程图,首先需要进行的是本地接口的实现,对NDK 开发环境进行配置,然后使用本地方法实现JNI 的接口设计。由于串口通信中不同接口有不同的波特率,只有当接口选定和波特率确定后接口才能使用,达到数据传输的目的。在本地文件中用以下代码实现:

staticspeed_t get Baudrate(jintbaudrate) {

switch(baudrate) { case 0: return B0; case 50: return B50; …

(省略部分代码)

default:return -1; }

上述代码的返回值是speed_t用于特定的波特率类型,在Linux 操作系统中宏定义0 就是B0,同样其它速率也按此格式。蓝牙串口通信的接口主要包括两个部分:蓝牙串口的打开和关闭。其中,在蓝牙串口打开的函数部分主要有四个部分:验证串口参数、打开蓝牙设备、配置蓝牙设备和创建蓝牙通信对应的相关文件描述符。其参数需要包括 JNIEnv指针和当前实体的jobject,同时还要有串口文件所处路径和可用波特值,例如 JNIEXPORT jobject JNICALL Java_Android _Serial Port_open (JNIEnv *env,jobjectthiz,jstring path,jintbaudrate)。函数中有三个参数:fd表示文件号,speed 表示串口速率(结构为linux系统的speed_t)和m File Descriptor 则为JNI 中对象。通过使用get Baudrate检查蓝牙串口参数并将相关值传给speed,假如speed = get Baudrate(baudrate),此处也要加入异常判断机制,这里波特率判断函数的默认值。以下就是打开串口的主要代码:

jbooleaniscopy;

const char *path_utf = (*env)->Get String UTFChars(env, path,&iscopy); fd = open(path_utf, O_RDWR | O_DIRECT | O_SYNC);

(*env)->Release String UTFChars(env, path,path_utf); if (fd == -1) {

LOGE(\ return NULL; }

在生成文件描述符的时候要将设备表示成android 平台能够识别的形式,需要采用JNI 提供的函数表示,见如下:

jclassIH_File Descriptor = (*env)->Find Class(env, \ jmethod ID IH_File Descriptor = (*env)->Get Method ID(env,IH_File Descriptor, \, \

jfield ID IH_descriptor ID = (*env)->Get Field ID(env,IH_FileDescriptor,\,

\

IH_File Descriptor = (*env)->New Object(env,IH_File Descriptor,IH_File Descriptor); (*env)->Set Int Field(env,IH_File Descriptor,IH_descriptor ID, (jint)fd);

其中通过使用Find Class(JNIEnv *env,const char *name)方法来加载本地定义的文 件标识符类,其作用是搜索环境变量CLASSPATH 中第二个参数所指明的目录和zip 文件。参数分别是:JNI 接口指针env和类全名name。在完成如上蓝牙串口通信的JNI 层函数后,下面所需的工作是将所写代码与Android 平台连接起来,目的是要形成动态连接库文件以供应用程序调用。既在Linux 平台下编译成.so 文件,需要完成 Android.mk 文件编写,其主干代码如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)

TARGET_PLATFORM := Android-5 LOCAL_MODULE:= serial_port LOCAL_SRC_FILES := Serial Port.c LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

“TARGET_PLATFORM := Android-5”主要是指所处的平台的名字,它同样也会在 Android.mk 这个文件中被解析编译。通常情况下只针对某些平台特性做出指出,在高版本的平台中会向下兼容。

“LOCAL_LDLIBS := -llog”表示需要连接的库(lib),这些lib 自身之间不产生依赖的关系,在不需要重新编译lib 的时候进行使用,如果加载的lib 不存在则会抛 出系统无法找到的异常。即使导入更多的lib,但目标软件最终只能链接那些本模块所需要连接的lib。当某一个lib 既有动态库又有静态库的情况时,那么在默认情况下系统会选择链接动态库而非静态库。

通过以上部分实现主要的底层通信功能,但在蓝牙设备的搜索与匹配功能模块 中,最主要的问题是找到蓝牙设备并将设备与如上本地通信代码联系起来,因此, 设计Serial Port Finder 和 Serial Port 两个专门的类。前者功能是查找设备中所有可 用的蓝牙设备文件名,后者是调用预先生成的动态链接库中的函数:打开蓝牙串 口设备并进行配置,并且赋予这个蓝牙设备可写、可读和可执行的操作权限,并 在后续生成一个通用模板。 在实现

serialport Finder

过程中需要设计一个驱动,这个驱动的主干就是通过在 Android

文件系统对找到的文件驱动的名字和位置进行赋值,其主要代码如下: e.print Stack Trace();

throw new Security Exception(); }… ( 省略部分代码 )

}

public class Driver { ??

省略部分代码

private String m Driver Name; private String m Device Root;

Vector m Devices = null; public Vector get Devices() { if (m Devices == null) {

m Devices = new Vector(); File dev = new File(\ File[] files = dev.list Files(); inti;

for (i=0; i

if (files[i].get Absolute Path().starts With(m Device Root)) { mDevices.add(files[i]); } } }

return m Devices; } ??

省略部分代码

} 将

serialport Finder 实现完成后,需要对 Serial Port

类进行完成,其中部分关键代码 如下:

try {

Process su;

su = Runtime.get Runtime().exec(\

String cmd = \ + \

su.get Output Stream().write(cmd.get Bytes()); if ((su.wait For() != 0) || !device.can Read() || !device.can Write()) { throw new Security Exception(); }

} catch (Exception e) { e.print Stack Trace();

throw new Security Exception(); }… (

省略部分代码 ) }

在实现了Serial Port 和Serial Port Finder 两个类的编写以后,为了使程序能够使用, 在这之前需要编写一个设备类(Application),这个类是Android.app.Application的 一个子类。由于在Android 应用中要使用全局变量,除了public 的静态变量以外的 另外一种方式。首先需要明确的是在每次创建一个application 后,系统都会创建 一个表示这个应用的进程ID(PID),这个应用(工程)中的所有Activity 就会依 据这个进程 ID 识别并运行。通过创建这样一个Application 以后,那些初始化的 全局变量就可以被所有拥有PID 的activity 使用。通过这种方式混合android SDK 编程,就可以实现该核心功能模块。

蓝牙设备的搜索与匹配功能效果图如下所示:

图4-1蓝牙设备搜索与匹配

4.2Ardunio IDE 编程

在完成硬件设备互联之后,需要根据系统要求,编写硬件端程序并将其烧录到arduino开发板中。 在本文中,arduino控制板需要实现的功能是将android 手机APP 通过HC-06 传送的数字信号,接受并通过pmw输出引脚传送给RGB-LED,具体C 语言编程代码如下所示:

//pins for the LEDs: constint red Pin = 3; constint green Pin = 5;

constint blue Pin = 6; constint red Pin2 = 9; constint green Pin2 = 10; constint blue Pin2 = 11;

#define REDPIN 3 #define GREENPIN 5 #define BLUEPIN 6

#define FADESPEED 5

void setup() { // initialize serial: Serial.begin(9600);

// make the pins outputs:

pin Mode(red Pin,OUTPUT); pin Mode(green Pin, OUTPUT); pin Mode(blue Pin, OUTPUT); pin Mode(red Pin2, OUTPUT); pin Mode(green Pin2, OUTPUT); pin Mode(blue Pin2,OUTPUT);

//if connect is ok then sent back message

Serial.print(\ control RGB LEDs Connected OK Arduinno Board )\

Serial.print('\\n'); }

void loop() {

// if there's any serial available, read it: while (Serial.available() > 0) {

// look for the next valid integer in the incoming serial stream: int red = Serial.parseInt(); int green = Serial.parseInt(); int blue = Serial.parseInt();

int red2 = Serial.parseInt(); int green2 = Serial.parseInt(); int blue2 = Serial.parseInt();

// look for the newline. That's the end of the sentence: if (Serial.read() == '\\n') {

// constrain the values to 0 - 255 and invert for common anode red = 255 - constrain(red,0,255);

( Sent From

green = 255 - constrain(green, 0 ,255);

blue = 255 - constrain(blue,0,255);

red2 = 255 - constrain(red, 0, 255); green2 = 255 - constrain(green, 0, 255); blue2 = 255 - constrain(blue, 0, 255);

// fade the red, green, and blue legs of the LED: analog Write(red Pin, red); analog Write(green Pin, green); analog Write(blue Pin, blue); analog Write(red Pin2,red2);

analog Write(green Pin2, green2); analog Write(blue Pin2, blue2);

// print the three numbers in one string as hexadecimal: Serial.print (\ Serial.print(red, HEX); Serial.print(green, HEX); Serial.println(blue, HEX); } } }

void setuo() //控制灯光开关 {

pinMode(13,OUTPUT); }

Void loop(){

digtal write(13,HIGH) ;//使灯亮 digitalwrite(12,LOW);//使灯灭 }

五 系统测试及结果

5.1智能灯光系统测试

将手机与HC-06 蓝牙模块进行连接,连接成功后就可进行模块测试。(注:未建立 连接时,HC-06 蓝牙模块的“state”灯是一直闪烁,当手机与蓝牙模块建立连接后该 指示灯处于长亮状态)下图显示手机APP 在蓝牙连接建立前后的状态:

图5-1手机连接状态

对手机

APP 软件中“智能灯光颜色控制”模块进行测试。当设定seekbar中red值设定为80,green 值设定为0,blue 值设定为8 时,灯光颜色如下图所示:

图5-2灯光颜色改变模块测试

六 总结

本次专业实习的课题是基于android NDK 技术的智能灯光系统的设计与实现,论文主要的研究侧重点在于NDK 对传统SDK 技术的性能提升,同时也重点关注NDK 技术在实现蓝牙串口通信中的作用。最终系统的目标是,运用NKD 技术实现手机软件与硬件设备相结合,实现一套手机控制RGB-LED 灯系统。该系统的实现依托于物联网环境,融合智能家居设计理念,通过高效、稳定设计实现方式来完成基于Android NDK 技术的智能灯光系统的设计与实现。

基于Android NDK 技术的智能灯光系统的设计与实现是通过蓝牙传输协议,将传统的硬件设备 —Ardunio控制板与Android 手机软件想结合,组合成一种具有智能家居模式的新产品。APP 程序首先打开手机蓝牙功能,在确保硬件端设备正常连接的情况下,搜索附近的蓝牙信号,并建立匹配连接。连接建立成功后,可以根据APP 软件功能,完成对RGB-LED 灯的开关、颜色调节、闪烁调节及亮度调剂等功能。

参考文献

1,熊刚基于Android 的智能手机的设计与实现.武汉理工大学,2010.5

2,鹿曼. 基于 android 的智能家居控制系统的设计与实现山东建筑大学,2010.9 3,孙晓宇.Android 手机界面管理系统的设计与实现北京北京邮电大学,2009

4,吴 晓 , 周 建 平 , 梁 楚 华 等 . 物 联 网 技 术 在 智 能 家 居 中 的 应 用 研 究 物 联 网 技术,.2011(11):71-73

5,高焕堂.Andrnid应用框架原理与程式设计 36 技广悦文化事业有限公司,2009

本文来源:https://www.bwwdw.com/article/kqwh.html

Top