通信工程综合实训.docx
- 文档编号:25043278
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:24
- 大小:506.73KB
通信工程综合实训.docx
《通信工程综合实训.docx》由会员分享,可在线阅读,更多相关《通信工程综合实训.docx(24页珍藏版)》请在冰豆网上搜索。
通信工程综合实训
成绩评定表
学生姓名
连宋
班级学号
12030603
专业
通信工程
课程设计题目
通信工程综合实训
评
语
题目复杂性
文档规范性
验收成绩
1Arduino文档编辑
2Arduino创新设计
3卫星电视接收
总评
组长签字:
成绩
日期
20年月日
课程设计任务书
学院
信息科学与工程
专业
通信工程
学生姓名
连宋
班级学号
12030603
课程设计题目
1、微博机器人
2、交通灯+手控延时
3、卫星天线及接收机调试
实践教学要求与任务
1学习撰写编辑课程设计指导书的基本技能
按照给定资料,翻译或编辑Arduino创新训练教程,要求内容准确、格式规范。
2使用Arduino进行创新电子产品设计制作
电子产品完成后,总结整理材料,撰写设计报告。
报告要素为:
功能说明、电路原理、软件清单、产品照片。
3卫星电视接收技能训练
(1)网上自主查找卫星参数选定要接收的节目,如中星9号---中央电视台体育频道、韩星6号---KBS频道。
(2)调整卫星天线方位角、俯仰角、卫星接收机上的下行频率、符号率等。
工作计划与进度安排
●第11周:
学习Arduino原理、打字编辑整理Arduino课程设计训练教程。
●第12-13周:
使用Arduino设计制作电子产品或使用MATLAB仿真给定通信系统
●第14周:
信息学院楼下广场,卫星天线及接收机调试。
指导教师:
陈慕羿、王洪源
2015年11月9日
专业负责人:
王洪源
2015年11月9日
学院教学副院长:
张文波
2015年11月9日
目录
1微博机器人2
1.1编写代码3
1.2代码回顾6
2交通灯+手控延时11
2.1功能12
2.2电路原理12
2.3代码清单13
2.4测试结果16
3卫星天线及接收机调试16
1微博机器人
在这个项卡具中还是需要使用两个温度传感器的电路。
这次,你要有规律地在微博上更新两个传感器的状态。
用发送微博的办法使你可以了解已经连接到Arduion上的和、任何传感器的状态。
Twitter是一条微博服务器,允许你发送长度在140个字符以内的微博或短消息。
任何人只要进行下搜索,或那些已选择了关注你的微博的人,都可以看到你发布的微博的内容。
微博是非常流行的网络应用,可以从任何网络浏览器或许多可用微博客户机中浏览微博内容,甚至电话终端也可以发送微博。
这使得微博成为发送简单消息的理想选择。
你也可以通过移动终端查看微博内容。
你需要连到T注册一个新用户。
我推荐创建一个只被你的Arduino使用的账号。
因为2010年8月31日以后,Twitter改变了它的第三方程序入口注册策略,使用了一种叫做OAuth的认证方法,使得直接从Arduino发送微博非常困难。
在这个改变之前,向Twitter发送微博是一个简单的过程,现在只能通过第三方实现。
换句话说,你发布微博到一个网站或代理服务器,代理服务器使使用OAuth协议代替你发布微博,Arduino当前的微博库主使用这种方法。
如果你已有账号,输入下的代码。
输入代码
在你上传代码之前,需要注册一条微博账号。
你使用这个库已比由NeaCat完成,可以使用它的网址作为代理服务器发送微博。
这意味你必须首先获得一个口令,它是一个你自己的要进入微博网站的用户名和口令的加密版本。
要得到这个版本可以去网址http:
//arduino-,并单击”stepq”链接口令,复制并粘贴结果到口令代码段。
注意,因为你使用代理服务器而且必须给出你的微博用户名和口令来获得OAuth令牌,所以推荐创建一个新的微博账号保持它为匿名。
我相信你用自己的账号使用库也是安全的但是相比较而言匿名更安全。
之后,单击”step2”链连,获得两套相关的库代码。
安装这些库文件夹到之前你下载和安装的0018版本的ArduinoIDE内。
使用这些库之前需要重启IDE。
Twitter库也有一些例子可以试一下。
1.1编写代码
//项目–微博机器人
#include
#include
#include
#include
#include
#include
//Datawireispluggedintopin3ontheArduino
#defineONE_WIRE_BUS3
#defineTEMPERATURE_PRECISION12
floatitempC,itempF,etempC,etempF;
booleanfirstTweet=true;
//SetupaoneWireinstancetocommunicatewithanyOneWiredevices(notjustMaxim/Dallas
temperatureICs)
OneWireoneWire(ONE_WIRE_BUS);
//PassouroneWirereferencetoDallasTemperature.
DallasTemperaturesensors(&oneWire);
//arraystoholddeviceaddresses
DeviceAddressinsideThermometer={0x10,0x7A,0x3B,0xA9,0x01,0x08,0x00,0xBF};
DeviceAddressoutsideThermometer={0x10,0xCD,0x39,0xA9,0x01,0x08,0x00,0xBE};
bytemac[]={0x64,0xB9,0xE8,0xC3,0xC7,0xE2};
//YourTokentotweet(getitfromhttp:
//arduino-
Twittertwitter("608048201-CxY1yQi8ezhvjz60ZVfPHVdzIHbMOD1h2gvoaAIx");
unsignedlonginterval=600000;//10minutes
unsignedlonglastTime;//timesincelasttweet
//Messagetopost
charmessage[140],serialString[60];
//functiontogetthetemperatureforadevice
voidgetTemperatures()
{
itempC=sensors.getTempC(insideThermometer);
itempF=DallasTemperature:
:
toFahrenheit(itempC);
etempC=sensors.getTempC(outsideThermometer);
etempF=DallasTemperature:
:
toFahrenheit(etempC);
}
voidtweet(charmsg[]){
Serial.println("connecting...");
if(twitter.post(msg)){
intstatus=twitter.wait();
if(status==200){
Serial.println("OK.Tweetsent.");
Serial.println();
lastTime=millis();
firstTweet=false;
}else{
Serial.print("failed:
code");
Serial.println(status);
}
}else{
Serial.println("connectionfailed.");
}
}
voidsetup()
{
EthernetDHCP.begin(mac);
Serial.begin(9600);
sensors.begin();
//settheresolution
sensors.setResolution(insideThermometer,TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer,TEMPERATURE_PRECISION);
sensors.requestTemperatures()
getTemperatures();
//compilethestringtobetweeted
while(firstTweet){
sprintf(message,"Int.Temp:
%dC(%dF)Ext.Temp:
%dC(%dF).TweetedfromArduino.%ld",
int(itempC),int(itempF),int(etempC),int(etempF),millis());tweet(message);
}
}
voidloop()
{
EthernetDHCP.maintain();
sensors.requestTemperatures();
//compilethestringtobeprintedtotheserialmonitor
sprintf(serialString,"InternalTemp:
%dC%dF.ExternalTemp:
%dC%dF",int(itempC),
int(itempF),int(etempC),int(etempF));
delay(500);
Serial.println(serialString);
Serial.println();
if(millis()>=(lastTime+interval)){
//compilethestringtobetweeted
sprintf(message,"Int.Temp:
%dC(%dF)Ext.Temp:
%dC(%dF).TweetedfromArduino.%ld",
int(itempC),int(itempF),int(etempC),int(etempF),millis());tweet(message);
}
delay(10000);//10seconds
}
AfteryouhaveuploadedthecodetoyourArduino,opentheserialmonitorwindow.TheArduino
willattempttoconnecttoTwitter(actuallyNeoCat’swebsite)andsendthetweet.Ifthefirsttweetis
successful,theoutputintheserialmonitorwindowwillbeabitlikethis:
connecting...
OK.Tweetsent.
InternalTemp:
26C79F.ExternalTemp:
26C79F
InternalTemp:
26C79F.ExternalTemp:
26C79F
InternalTemp:
26C79F.ExternalTemp:
26C79F
程序第一次运行时,在进入主循环之前它将在setup函数中获得温度之后保持尝试连接到微博。
尝试连接不会停止,直到成功连接。
如程序连接失败,返回一个failed:
code403或connectionfailed信息。
如果发送微博成功,程序将不再发送直到间隔时间已过,这个时间的默认设置是10分钟。
虽然你可以改变这个时间间隔,但是Twitter限制每小时最多发送350次,因些要保证不要超过这个数。
你现在可以进入Twitter网站,从任何位置看账号内的信息,查看温度读数。
1.2代码回顾
下面让我们看一下代码是如何工作的。
代码回顾
这个程序开始于包含相应的库:
#include
#include
#include
#include
#include
#include
Twitter库需要3个Tthernet库才能工作,因此你要全部包含这3个库,之后定义传感器:
definesforthesensorsareset:
#defineONE_WIRE_BUS3
#defineTEMPERATURE_PRECISION12
给温度生成4个浮点数,这次内部和外部温度都用摄氏度和华氏度:
CandF:
floatitempC,itempF,etempC,etempF;
程序第一次试图生成一条微博,你希望程序保持尝试连接,直到成功连接并送出信息。
因此生成一个布尔数,设置为true,使你知道本次发送的是否为第一条微博:
booleanfirstTweet=true;
如前所述,生成一个单线温度传感器实例和两个传感器的地址实例:
OneWireoneWire(ONE_WIRE_BUS);
DallasTemperaturesensors(&oneWire);
DeviceAddressinsideThermometer={0x10,0x7A,0x3B,0xA9,0x01,0x08,0x00,0xBF};
DeviceAddressoutsideThermometer={0x10,0xCD,0x39,0xA9,0x01,0x08,0x00,0xBE};
设定网卡的Mac地址:
bytemac[]={0x64,0xB9,0xE8,0xC3,0xC7,0xE2};
之后,生成一个Twitter实例传递给它你的账户的口令作为参数:
Twittertwitter("608048201-CxY1yQi8ezhvjz60ZVfPHVdzIHbMOD1h2gvoaAIx");
设置发送两条微博之间的时间间隔:
unsignedlonginterval=600000;//10minutes
生成一个变量存储最后一条微博发出的时间:
unsignedlonglastTime;//timesincelasttweet
生成两个字符串数组,它们将存储微博的信息和要在你的串口监视器上显示的字符:
charmessage[140],serialString[60];
现在生成一些函数,第一个函数就是从两个传感器中获得温度,存储温度到变量
voidgetTemperatures()
{
itempC=sensors.getTempC(insideThermometer);
itempF=DallasTemperature:
:
toFahrenheit(itempC);
etempC=sensors.getTempC(outsideThermometer);
etempF=DallasTemperature:
:
toFahrenheit(etempC);
}
之后,这个函数发送一条微博,它需要一个参数,这个参数是一个字符数组,微博信息存储在其中:
voidtweet(charmsg[]){
通知用户正尝试连接:
Serial.println("connecting...");
之后,使用Twitter对象的post()方法去发送信息。
如果发送成功,这个函数true,如果连接失败,它返回false。
thefunctionreturnstrue.Ifitfailstoconnect,itreturnsfalse.
if(twitter.post(msg)){
如果连接成功,那么使用wait()方法检查发送的状态,这个方法返回Twitte网站的HTTP状态代码。
intstatus=twitter.wait();
如果状代码是200,这是一个HTTP代码,它意味着每件事情都做对了,换句话说,如果微博成功发送出去,那么将执行括号中的代码。
tweetwassuccessfullysent,thenthecodewithintheblockwillexecute.
if(status==200){
如果成功,通知使用者:
Serial.println("OK.Tweetsent.");
Serial.println();
之后设置lastTime()中的当前值。
这使你可以判断自从最后一次发送微博多长时间已经过去了。
sincethelasttweet.
lastTime=millis();
你第一次成功发送微博后希望程序退出setup函数中的while循环,然后继续运行主循环,因此设置firsttTweet标志为false。
firstTweet=false;
如果状态不是200,表明传送失败,那么通知使用者返回的代码作为调试信息用:
}else{
Serial.print("failed:
code");
Serial.println(status);
}
如果在第一部分就没有连接成功,通知用户如下:
}else{
Serial.println("connectionfailed.");
}
定义用函数后,到setup函数:
voidsetup()
首先你开始给EthernetDHCP类传递Mac地址:
EthernetDHCP.begin(mac);
DHCP(动态主机协议)是在网上自动注册IP地址的协议。
协议允许网卡自动地注册从路由器获得的一个IP地址。
在之前的项目中手工设置了IP地址,这次用EthernetDHCP类去自动注册一个IP地址。
这虽然方便了用户,但是会使得代码变得非常长。
之后,用9600波特率开始串口通信,与前面的项目一样建立传感器:
Serial.begin(9600);
sensors.begin();
sensors.setResolution(insideThermometer,TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer,TEMPERATURE_PRECISION);
获得温度,因为你要使用温度数值:
sensors.requestTemperatures()
getTemperatures();
现在尝试送出第一条微博,while循环使这个动作保持运行直到第一条微博成功帝出。
firstTweetissettotrue:
while(firstTweet){
之后,使用sprintf函数把微博内容合成到Message[]数组中。
给sprintf函数传递4个温度值和millis()值。
因为millis是一个无黏土号长整型数,在sprintf中要使用%d描述符来打印长整型数。
sprintf(message,"Int.Temp:
%dC(%dF)Ext.Temp:
%dC(%dF).TweetedfromArduino.%ld",
int(itempC),int(itempF),int(etempC),int(etempF),millis());
加millis()值到最后发送的微博内的原因是,Twitter将不发布与上一次一样的信息。
如果当前温度与上一次发送微博时相比没有发生变化,信息将是相同的,这样Twitter将返回错误代码。
因为你想在时间间隔内有规律地更新每个数据,所以通过加millis()的值对信息的尾部,可以保证信息与上一次发送的不同。
确保你的微博的长度总共不超过10字符,否则在代的微博上会出现不完整的信息。
现在你已经完成了微博信息的合成,进入tweet()函数:
tweet(message);
之后到主循环,只有在setup函数中第一次发送成功才能进入:
voidloop()
首先,运行一个EthernetDHCP类中的maintain函数,保持自动注册IP地址激活和有效。
addressliveandvalid.
EthernetDHCP.maintain();
更新温度:
sensors.requestTemperatures();
之后,使用sprintf函数去编译串口监视器的输出。
这个函数比整行打印serial.prit()函数更方便,因些你可以很好地使用sprintf函数,尽管它增加了代码的长度。
sprintf(serialString,"InternalTemp:
%dC%dF.ExternalTemp:
%dC%dF",int(itempC),
int(itempF),int(etempC),int(etempF));
之后,在一个短的延时后把字符串输出到串口监视器:
delay(500);
Serial.println(serialString);
Serial.println();
之后,确定自从最后一次发送微博是否间隔时间已经过去。
如果是,发送另外一条微博。
计算lastTiem+interval的值是否millis()中的当前值大于它(如间隔时间已经过去),
如果是,编译的信息再次发送微博信息。
if(millis()>=(lastTime+interval)){
sprintf(message,"Int.Temp:
%dC(%dF)Ext.Temp:
%dC(%dF).Tweetedfrom
Arduino.%ld",int(itempC),int(itempF),int(etempC),int(etempF),millis());
tweet(message);
}
最后,在更新串口监视器延时10秒,以保证不会用过多的信息轰炸用户。
delay(10000);//10seconds
现在你知道了如何从Arduino中发送微博,可以使用这个技术做各种项目。
微博可以告诉你一个盆景是否需要浇水了,或在一个房子周围加上传感器,当有人进入房间时发布信息,或当有人在问口时发送一个门铃,或者告诉你的猫已经离开或进入房
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信工程 综合
![提示](https://static.bdocx.com/images/bang_tan.gif)