嵌入式系统自主设计实验报告Word格式文档下载.docx
《嵌入式系统自主设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统自主设计实验报告Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
第二个音符6(没有点)就是495,时间也是一拍=1,
第三个音符5即441,因为有下划线所以是半拍=0.5,
……以此类推
第四0这里要注意下,这里是没有声音,但是要是用频率0表示还是会有声音(这个不懂),所以用一个很高频率的声音,这样人耳听不到就达到了没有声音的效果,所以频率为-1。
拍子=1拍
第五,再接着看到第一句歌词葫芦娃这个娃的音是3—,这表示是两拍,后面每加一个“-”,表示拍子+1(1+1),本例中最多是加到4.
第六,第二句歌词葫芦娃这个娃,3•带个点,点的意思是去3的拍子的一半,即3•的拍子是1+0.5
第七,这在音乐中属于连音,要表示的话,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更流畅,但操作上更复杂了,本例没有做连音的处理,
实验中还利用超声波测距与红外线配合使用:
当超声波检测前面有障碍物时候发出警报,其他情况下,便放音乐
超声波传感器原理:
基本工作原理:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2;
本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,即可以达到你移动测量的值
5、操作:
初始化时将trig和echo端口都置低,首先向给trig发送至少10us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,捕捉echo端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照测试距离=(高电平时间*声速(340M/S))/2就可以算出超声波到障碍物的距离。
红外线感应传感器原理:
人体热释电红外线传感器的工作原理及特性
普通人体会发射10um左右的特定波长红外线,用专门设计的传感器就可以针对性的检测这种红外线的存在与否,当人体红外线照射到传感器上后,因热释电效应将向外释放电荷,后续电路经检测处理后就能产生控制信号。
这种专门设计的探头只对波长为10μm左右的红外辐射敏感,所以除人体以外的其他物体不会引发探头动作。
探头内包含两个互相串联或并联的热释电元,而且制成的两个电极化方向正好相反,环境背景辐射对两个热释元件几乎具有相同的作用,使其产生释电效应相互抵消,于是探测器无信号输出。
一旦人侵入探测区域内,人体红外辐射通过部分镜面聚焦,并被热释电元接收,但是两片热释电元接收到的热量不同,热释电也不同,不能抵消,于是输出检测信号。
为了增强敏感性并降低白光干扰,通常在探头的辐射照面覆盖有特殊的菲泥尔滤光透镜,菲泥尔滤光片根据性能要求不同,具有不同的焦距(感应距离),从而产生不同的监控视场,视场越多,控制越严密。
实验步骤:
#defineNOTE_D0-1
#defineNOTE_D1294
#defineNOTE_D2330
#defineNOTE_D3350
#defineNOTE_D4393
#defineNOTE_D5441
#defineNOTE_D6495
#defineNOTE_D7556
#defineNOTE_DL1147
#defineNOTE_DL2165
#defineNOTE_DL3175
#defineNOTE_DL4196
#defineNOTE_DL5221
#defineNOTE_DL6248
#defineNOTE_DL7278
#defineNOTE_DH1589
#defineNOTE_DH2661
#defineNOTE_DH3700
#defineNOTE_DH4786
#defineNOTE_DH5882
#defineNOTE_DH6990
#defineNOTE_DH7112
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。
这样后面写起来比较好识别。
#defineWHOLE1
#defineHALF0.5
#defineQUARTER0.25
#defineEIGHTH0.25
#defineSIXTEENTH0.625
//这部分是用英文对应了拍子,这样后面也比较好看
inttune[]=
{
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,NOTE_D6,
NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,NOTE_D6,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,
NOTE_D1,NOTE_D1,NOTE_D3,
NOTE_D1,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,
NOTE_D5,
NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,
NOTE_D1,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_DH1,NOTE_D0,NOTE_D7,NOTE_D5,
NOTE_D6,
};
//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
floatduration[]=
1,1,0.5,0.5,1,
0.5,0.5,0.5,0.5,1,0.5,0.5,
0.5,1,0.5,1,0.5,0.5,
0.5,0.5,0.5,0.5,1,1,
1,1,1+1,
0.5,1,1+0.5,1,
0.5,0.5,0.5,0.5,1+1,
1+1,0.5,0.5,1,
1+1+1+1,
0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
0.5,1,0.5,1,1,
0.5,1,0.5,1+1,
1+1+1+1
//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
intlength;
//这里定义一个变量,后面用来表示共有多少个音符
inttonePin=5;
//蜂鸣器的pin
voidsetup()
pinMode(tonePin,OUTPUT);
//设置蜂鸣器的pin为输出模式
length=sizeof(tune)/sizeof(tune[0]);
//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
}
voidloop()
for(intx=0;
x<
length;
x++)//循环音符的次数
{
tone(tonePin,tune[x]);
//此函数依次播放tune序列里的数组,即每个音符
delay(400*duration[x]);
//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
noTone(tonePin);
//停止当前音符,进入下一音符
}
delay(5000);
//等待5秒后,循环重新开始
以下是其他程序:
constintLQ=8;
constintLH=9;
constintRQ=7;
constintRH=6;
constintENL=10;
constintENR=5;
#defineNOTE_B031
#defineNOTE_C133
#defineNOTE_CS135
#defineNOTE_D137
#defineNOTE_DS139
#defineNOTE_E141
#defineNOTE_F144
#defineNOTE_FS146
#defineNOTE_G149
#defineNOTE_GS152
#defineNOTE_A155
#defineNOTE_AS158
#defineNOTE_B162
#defineNOTE_C265
#defineNOTE_CS269
#defineNOTE_D273
#defineNOTE_DS278
#defineNOTE_E282
#defineNOTE_F287
#defineNOTE_FS293
#defineNOTE_G298
#defineNOTE_GS2104
#defineNOTE_A2110
#defineNOTE_AS2117
#defineNOTE_B2123
#defineNOTE_C3131
#defineNOTE_CS3139
#defineNOTE_D3147
#defineNOTE_DS3156
#defineNOTE_E3165
#defineNOTE_F3175
#defineNOTE_FS3185
#defineNOTE_G3196
#defineNOTE_GS3208
#defineNOTE_A3220
#defineNOTE_AS3233
#defineNOTE_B3247
#defineNOTE_C4262
#defineNOTE_CS4277
#defineNOTE_D4294
#defineNOTE_DS4311
#defineNOTE_E4330
#defineNOTE_F4349
#defineNOTE_FS4370
#defineNOTE_G4392
#defineNOTE_GS4415
#defineNOTE_A4440
#defineNOTE_AS4466
#defineNOTE_B4494
#defineNOTE_C5523
#defineNOTE_CS5554
#defineNOTE_D5587
#defineNOTE_DS5622
#defineNOTE_E5659
#defineNOTE_F5698
#defineNOTE_FS5740
#defineNOTE_G5784
#defineNOTE_GS5831
#defineNOTE_A5880
#defineNOTE_AS5932
#defineNOTE_B5988
#defineNOTE_C61047
#defineNOTE_CS61109
#defineNOTE_D61175
#defineNOTE_DS61245
#defineNOTE_E61319
#defineNOTE_F61397
#defineNOTE_FS61480
#defineNOTE_G61568
#defineNOTE_GS61661
#defineNOTE_A61760
#defineNOTE_AS61865
#defineNOTE_B61976
#defineNOTE_C72093
#defineNOTE_CS72217
#defineNOTE_D72349
#defineNOTE_DS72489
#defineNOTE_E72637
#defineNOTE_F72794
#defineNOTE_FS72960
#defineNOTE_G73136
#defineNOTE_GS73322
#defineNOTE_A73520
#defineNOTE_AS73729
#defineNOTE_B73951
#defineNOTE_C84186
#defineNOTE_CS84435
#defineNOTE_D84699
#defineNOTE_DS84978
//欢乐颂
#defineNTD0-1
#defineNTD1294
#defineNTD2330
#defineNTD3350
#defineNTD4393
#defineNTD5441
#defineNTD6495
#defineNTD7556
#defineNTDL1147
#defineNTDL2165
#defineNTDL3175
#defineNTDL4196
#defineNTDL5221
#defineNTDL6248
#defineNTDL7278
#defineNTDH1589
#defineNTDH2661
#defineNTDH3700
#defineNTDH4786
#defineNTDH5882
#defineNTDH6990
#defineNTDH7112
//列出全部D调的频率
//列出所有节拍
inttune[]=//根据简谱列出各频率
NTD3,NTD3,NTD4,NTD5,
NTD5,NTD4,NTD3,NTD2,
NTD1,NTD1,NTD2,NTD3,
NTD3,NTD2,NTD2,
NTD2,NTD1,NTD1,
NTD2,NTD2,NTD3,NTD1,
NTD2,NTD3,NTD4,NTD3,NTD1,
NTD2,NTD3,NTD4,NTD3,NTD2,
NTD1,NTD2,NTDL5,NTD0,
NTD5,NTD4,NTD3,NTD4,NTD2,
NTD2,NTD1,NTD1
floatdurt[]=//根据简谱列出各节拍
1,1,1,1,
1+0.5,0.5,1+1,
1,0.5,0.5,1,1,
1,1,1,0.5,0.5,
inttonepin=3;
//得用6号接口
intmelody[]={
NOTE_G4,//5
NOTE_G4,//5
NOTE_A4,//6
NOTE_C5,//1.
NOTE_B4,//7
0,
NOTE_D5,//2.
NOTE_G5,//5.
NOTE_E5,//3.
NOTE_F5,//4.
intnoteDurations[]={
8,8,4,4,4,4,
4,
8,8,4,4,4,4,2,
8,
8,8,4,4,4,2,
/*
HappyBirthdayToneforDaner.
MadebyTAHOon6th,Nov.2013
[email]tahoroom@[/email]
version1.0
*/
constinttrig=A1;
constintecho=A0;
intsensor=A2;
//设置传感器信号输出端接到Arduino板子上的Pin2端口
intval=0;
voidsetup(){
pinMode(ENR,OUTPUT);
pinMode(ENL,OUTPUT);
pinMode(RQ,OUTPUT);
pinMode(RH,OUTPUT);
pinMode(LQ,OUTPUT);
pinMode(LH,OUTPUT);
pinMode(tonepin,OUTPUT);
length=sizeof(tune)/sizeof(tune[0]);
//计算长度
pinMode(echo,INPUT);
pinMode(trig,OUTPUT);
//iterateoverthenotesofthemelody:
pinMode(11,OUTPUT);
//forlight
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(sensor,INPUT);
//设置为输入数字管脚
Serial.begin(9600);
voidloop(){
Run('
Q'
10,150);
longtime=0;
while
(1)
digitalWrite(trig,1);
delay(15);
digitalWrite(trig,0);
time=pulseIn(echo,HIGH);
floats=time/58.00;
Serial.println(s);
if(s<
20)
Baojing();
digitalWrite(3,1);
delay(100);
//noneedtorepeatthemelody.
val=digitalRead(sensor);
//读取输入引脚
Serial.println(val);
if(val==1)
play();
//Playthemusic.
digitalWrite(3,0);
//delay(100);
//Pauseforawhile.
voidBaojing()
for(intj=0;
j<
2;
j++)
for(inti=200;
i<
=800;
i+=3)//用循环的方式将频率从200HZ增加到800HZ
pinMode(3,OUTPUT);
tone(3,i);
//在四号端口输出频率
delay(5);
//该频率维持5毫秒
delay(2000);
//最高频率下维持4秒钟
for(inti=800;
i>
=200;
i-=3)
delay(10);
voidplay()
for(in