实习项目报告书
深圳亿道电子有限公司
四川师范大学计算机科学院学院
五组: 徐勇,李萍,高攀,康逸飞,王洁
1.前言... 3
1.1项目背景介绍... 3
2.软件需求说明... 3
2.1 项目概述... 3
2.2 客户分析... 3
2.3实现技术... 4
3.总体设计... 4
3.1 系统功能和特点... 4
3.2 系统框架图... 5
4.详细设计(项目实施)... 5
4.1硬件原理图设计/PCB设计... 5
4.2 元器件的焊接... 7
4.3电路板调试... 7
4.4 单片机程序调试... 8
4.5 单片机与ARM串口通信... 8
4.6 本地控制(嵌入式Linux操作系统)... 10
4.6.1交叉编译工具的移植... 10
4.6.2 Qt/Qtopia的移植与编程... 11
4.7远程监控... 14
4.7.1网络通信编程... 14
5.实习收获... 15
1.前言
1.1项目背景介绍
据近期的一项国家统计资料显示,中国富有阶层正在形成,该部分家庭户均年收入在5.6万元以上,人口约4460万人,1400多万户,占城市人口的 10%,总人口的3.5%,占全社会消费购买力总和6万亿元的17%左右,因此主要针对这部分人的智能家居系统其市场总量为1400万套。正是在这种情况下,近两年来,智能家居系统的销售数量和总销售额都呈现连续攀升的势头,并且随着人们消费意识的提高,还会有更多的人选用。
中国在住宅小区、商业办公场所使用智能管理系统的需求将达到50-60亿人民币,在20##年以后的三年内,每年将以不低于30%的速度增长。应该说智能家居产品潜在市场巨大,以前智能家居市场主要在南方沿海地区和内地大中型城市,现在已经辐射到西部地区。
2.软件需求说明
2.1 项目概述
该方案可通过传感器与家电控制扩展模块控制烟雾、红外、煤气传感器及摄像头模块来实现对家庭异常状况的采集,并通过RS232 与本地控制中心进行上下位机通讯及信息交互,通过与本地控制中心相连的GSM 通讯模块及无线/有线网络与户主进行互动并实现使用网络和手机短信对系统的远程控制与监视,达到家庭防火,防盗,防煤气泄露,异常景象抓拍等安全监控功能。
2.2 客户分析
l 居住空间90-120平方,所以对信号的传输距离要求不是很高;
l 用户在选择智能家居时都希望今后能够升级换代;
l 对于智能家居产品的需求也不会一样,所以要能够满足不同用户的个性化较需求;
l 不用一般不喜欢砸墙砸洞
l 家庭成员的年龄、文化均不一样,所以要使用简单化,才能被家人接受;
l 舒适,快乐,给人享受
2.3实现技术
l 协议:RS232协议,TCP/IP协议等
l 系统:采用Linux系统
l 软件开发平台--嵌入式Qt-2.3.7;
l 用户界面—嵌入式Qtopia-1.7.0
l 视频处理-- Intel开源的OpenCV
l GSM通信 -- SMS的AT指令集
l 处理器芯片:PXA270
3.总体设计
3.1 系统功能和特点
安全监控:包括各种报警探测器的讯息采集,开关门报警等如门磁、紧急按钮、红外探测、煤气探测、火警探测等,并完成与住宅小区物业管理和110报警的联网。
3.2 系统框架图
4.详细设计(项目实施)
4.1硬件原理图设计/PCB设计
根据功能分析,设计出合理的原理图,
PCB设计:
根据原理图,可以进行PCB原理图的设计.
4.2 元器件的焊接
1 )电阻器焊接
按图将电阻器准确装人规定位置。要求标记向上,字向一致。装完同一种规格后再装另一种规格,尽量使电阻器的高低一致。焊完后将露在印制电路板表面多余引脚齐根剪去。
2 )电容器焊接
将电容器按图装人规定位置,并注意有极性电容器其 “ + ” 与 “ - ” 极不能接错,电容器上的标记方向要易看可见。先装玻璃釉电容器、有机介质电容器、瓷介电容器,最后装电解电容器。
3 )二极管的焊接
二极管焊接要注意以下几点:第一,注意阳极阴极的极性,不能装错;第二,型号标记要易看可见;第三,焊接立式二极管时,对最短引线焊接时间不能超过 2S 。
4 )三极管焊接
注意 e 、 b 、 c 三引线位置插接正确;焊接时间尽可能短,焊接时用镊子夹住引线脚,以利散热。焊接大功率三极管时,若需加装散热片,应将接触面平整、打磨光滑后再紧固,若要求加垫绝缘薄膜时,切勿忘记加薄膜。管脚与电路板上需连接时,要用塑料导线。
5 )集成电路焊接
首先按图纸要求,检查型号、引脚位置是否符合要求。焊接时先焊边沿的二只引脚,以使其定位,然后再从左到右自上而下逐个焊接。
对于电容器、二极管、三极管露在印制电路板面上多余引脚均需齐根剪去。
焊接顺序
元器件装焊顺序依次为:电阻器、电容器、二极管、三极管、集成电路、大功率管,其它元器件为先小后大。
4.3电路板调试
可以把电源部分先装好,然后就上电检测电源输出电压是否正常。如果在上电时您没有太大的把握(即使有很大的把握,也建议您加上一个保险丝,以防万一),可考虑使用带限流功能的可调稳压电源。先预设好过流保护电流,然后将稳压电电源的电压值慢慢往上调,并监测输入电流、输入电压以及输出电压。如果往上调的过程中,没有出现过流保护等问题,且输出电压也达到了正常,则说明电源部分正确。反之,则要断开电源,寻找故障点,并重复上述步骤,直到电源正常为止。接下来逐渐安装其它模块,每安装好一个模块,就上电测试一下,上电时也是按照上面的步骤,以避免因为设计错误或/和安装错误而导致过流而烧坏元件。
4.4 单片机程序调试
分别有:LED显示,LED响应按钮显示,测试存储器实验,定时实验等
4.5 单片机与ARM串口通信
#include <reg52.h>
#include"string.h"
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
int count=5;
bit Contrl;
void Inital()
{
TMOD = 0x20;
SCON = 0x50;
PCON = 0x00;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA =1 ;
P2 = 0xFF ;
}
void delay()
{
unsigned int i,j,m;
for(i=20;i>0;i--)
for(j=30;j>0;j--)
for(m=256;m>0;m--);
}
void send(unsigned char a )
{
SBUF = a;
while(!TI);
TI = 0;
}
void recieve() interrupt 4
{
unsigned char b;
b = SBUF;
RI = 0;
if(b == '%' )
count=0;
else if (count<5)
{
count++;
if (b=='0')
Contrl = 1;
else
Contrl = 0;
}
switch ( count)
{
case 1:P1_0=Contrl;break;
case 2:P1_1=Contrl;break;
case 3:P1_2=Contrl;break;
case 4:P1_3=Contrl;break;
}
}
void main()
{
Inital() ;
while( 1 )
{
if(P2_0 == 0)
{
send ( '#' );
send ( '$' );
send ( '#' );
send ( '1' );
}
else if ( P2_1 == 0)
{
send ( '#' );
send ( '$' );
send ( '#' );
send ( '2' );
}
else if ( P2_2 == 0)
{
send ( '#' );
send ( '$' );
send ( '#' );
send ( '3' );
}
P2 = 0xFF;
delay();
}
}
4.6 本地控制(嵌入式Linux操作系统)
4.6.1交叉编译工具的移植
l 先把虚拟机的Tools装上,建立共享目录,在/mnt/hgfs下面可以找到共享目录,可以实现虚拟机和主机的文件共享。
l 把Boot-XSBase270_010005.tar.gz拷贝到工项目下,在linux环境下复制到linux自己的目录下,再用tar –zxvf进行解压释放,用ls查看目录,再用make clean 清楚以前的编译的结果。最后用make进行编译。至此bootLoader
安装完成。
l 随后进行内核的编译。先把linux-2.4.21-51Board_EDR.tar.gz拷贝到共享目录下,用同样的方法进行解压。然后进入/pxa270/kernel目录下,用make clean 清除以前编译,再make. 随后make xsbase270_config,再次用make oldconfig,再次用make dep寻找依赖关系,最后make zImage
l
l 最后进行驱动程序分析、bootLoader分析
4.6.2 Qt/Qtopia的移植与编程
l Qt/Qtopia的移植、使用与编程、
l 基于ARM微处器编译和运行平台
设置环境参量
? export QTDIR=$PWD/qt-2.3.7-arm
? export LD_LIBRARY_PATH=$QTDIR/lib
? export PATH=$QTDIR/bin:$PATH
? export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
编译
? ./configure -xplatform linux-arm-g++
? Make
设置环境变量
? export QTDIR=$PWD/qt-2.3.7-arm
? export QPEDIR=$PWD/qtopia-1.7.0-arm
? export LD_LIBRARY_PATH=/usr/lib:$QTDIR/lib:$QPEDIR/lib
? export PATH=$QTDIR/bin:$PATH
? export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
编译
? ./configure -platform linux-arm-g++
? make
编译步骤:
tar xfz qt-embedded-2.3.10-free.tar.gz
export QTEDIR=$PWD/qt-2.3.10-target
tar xfz qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
tar xfz qtopia-free-source-2.1.1.tar.gz(解压后qtopia-free-2.1.1改名为qtopia-2.1.1-target)
export QPEDIR=$PWD/qtopia-2.1.1-target
tar xfz tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
export TMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-arm-g++
export PATH=$TMAKEDIR/bin:$PATH
cd qt-2.3.2
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft
make
make -C tools/qvfb
cd ..
cd qt-2.3.10-target
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdir bin
cp $QT2DIR/bin/uic bin
cp $QT2DIR/tools/qvfb/qvfb bin
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -xplatform linux-arm-g++ -qconfig qpe -qvfb -thread -system-jpeg -gif -depths 4,8,16,32
make
cd ..
hybus-arm-linux-R1.1
tar xzf e2fsprogs-1.35.tar.gz
cd e2fsprogs-1.35
./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-elf-shlibs -prefix=/usr/local/hybus-arm-linux-R1.1/arm-linux
make install lib/uuid/
cd ..
cd qtopia-2.1.1-host
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
cp src/libraries/qtopia/custom-linux-ipaq-g++.cpp src/libraries/qtopia/custom-linux-arm-g++.cpp
cp src/libraries/qtopia/custom-linux-ipaq-g++.h src/libraries/qtopia/custom-linux-arm-g++.h
./configure -xplatform linux-arm-g++
make
l Qt编程工具的使用方法
Step 2:设置Qt环境
export QTDIR=/usr/local/arm-linux/qt_toolchain/qt-2.3.7
export QPEDIR=/usr/local/arm-linux/qt_toolchain /qtopia-1.7.0
export LD_LIBRARY_PATH=/usr/local/arm-linux/qt_toolchain /qt-2.3.7/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/arm-linux/qt_toolchain /qt-2.3.2/lib:$LD_LIBRARY_PATH
export TMAKEDIR=/usr/local/arm-linux/qt_toolchain/tmake-1.11
export TMAKEPATH=/usr/local/arm-linux/qt_toolchain /tmake-1.11/lib/qws/linux-arm-g++
export PATH=/usr/local/arm-linux/qt_toolchain /tmake-1.11/bin:$PATH
Step 3 :使用Desinger进行图形化设计
#cd /usr/local/arm-linux/qt_toolchain /qt-2.3.2/bin
#./designer
Step 4: 编译.h和.cpp文件
# uic -o test.h test.ui
#uic -o test.cpp -impl test.h test.ui
Step 5: 修改main.cpp文件
#include <qapplication.h>
#include "test.h"
int main( int argc, char ** argv )
{
QApplication a( argc, argv );
Form1 w;
w.show();
return a.exec();
}
Step 6: 修改tmake文件的相关配置
#vim $TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
TMAKE_LINK = arm-linux-g++
TMAKE_LINK_SHLIB = arm-linux-g++
TMAKE_LIBS_QT = -lqte -lts
Step 7: 编译工程文件
#progen -t app.t -o test.pro
#tmake -o Makefile test.pro
Step 8: 编译
#make clean
#make
Setp 9: 完成C++父类与子类继承之间的转换
4.7远程监控
4.7.1网络通信编程
(1)、基于PC平台的server网络程序编译
将光盘提供的server的源代码复制到硬盘中(假设将源码复制在/root/work目录下)
? 对源码进行编译
[root@localhos work]$cd server
[root@localhost server]$make
? 在PC机上运行server程序,运行界面如图1所示
[root@localhost server]$./server
(2)、基于目标平台的client网络程序编译
将光盘提供的client.tar的源代码复制到硬盘中,设置交叉编译工具参数(arm-linux-g++)
对源代码进行编译
[root@localhost work]$cd client
[root@serialarm]$make
将编译好的程序client下载到开发板的/usr/qpe/bin目录下
在目标板上利用chmod命令修改client的属性
[root@bin]$ chmod 755 client
在开发板的/usr/qpe/apps/Applications目录下新建client.desktop文件(内容如下);
[Desktop Entry]
Comment=A network Program
Exec=client
Icon=Clock
Type=Application
Name=Clock
Name[zh_CN]=网络通讯测试
5.实习收获
l 通过这次实习,我们了解了并掌握了开发一个项目的流程,从项目立案到需求分析再到进行实际的项目开发和后期的测试和维护。并了解学会了现在的公司中实际做项目中的对各种成本的估计和人员的安排以及开发周期的正确估计。
l 通过这次实习我们深刻开发一个项目团队合作的重要性。硬件人员和软件人员只有合理的分工并要互相了解对方的进度和功能,项目才能事半功倍的完成。
l 通过这次实习,让我更加深刻的了解了当前流行的嵌入式技术,基于ARM的嵌入式技术在现实中运用越来越广泛,而嵌入式技术对人员的要求是:要有扎实的软硬基础知识,又要有开发项目的实际经验。所以要成为一个嵌入式的工程师,应该要亲身去从事几个项目的开发,并要有相应的老师指导和勤奋的进取心。才能有所成就。这也让我深刻的理解了嵌入式人才”难以复制性”的独特性。
l 通过这次实习也在一定程度上规范了我们编码的规范和养成良好的编习惯。