嵌入式系统自主设计实验报告.docx

上传人:b****6 文档编号:7339579 上传时间:2023-01-23 格式:DOCX 页数:30 大小:453.21KB
下载 相关 举报
嵌入式系统自主设计实验报告.docx_第1页
第1页 / 共30页
嵌入式系统自主设计实验报告.docx_第2页
第2页 / 共30页
嵌入式系统自主设计实验报告.docx_第3页
第3页 / 共30页
嵌入式系统自主设计实验报告.docx_第4页
第4页 / 共30页
嵌入式系统自主设计实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

嵌入式系统自主设计实验报告.docx

《嵌入式系统自主设计实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统自主设计实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

嵌入式系统自主设计实验报告.docx

嵌入式系统自主设计实验报告

深圳大学实验报告

 

课程名称:

嵌入式系统

实验项目名称:

智能小车设计

学院:

信息工程学院,计算机软件学院

专业:

指导教师:

李坚强

报告人:

学号:

实验时间:

实验报告提交时间:

教务部制

实验目的:

自主设计利用喇叭设计出不同音乐

实验原理:

本文很简单,需要用到的材料:

adruinouno一块(其他也可),面保线若干条,蜂鸣器或小喇叭一个(小喇叭更好蜂鸣器要接电阻不然声音有点刺耳)

连接方法如图:

首先讲下简单的乐理知识,知道音乐是怎么演奏出来的自然就可以通过代码来进行编排了。

1.演奏单音符一首乐曲有若干音符组成,一个音符对应一个频率。

知道到相对应的频率让arduino输出到蜂鸣器蜂鸣器就会放出相应的声音,这里有个表供大家参考:

 

2.音符的演奏时间我们知道了音符是如何演奏出来的,下一步就是控制音符的演奏时间。

每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来。

如何确定每个音符演奏的单位时间呢?

我们知道,音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。

以葫芦娃为例:

先看下左上角1=D这里,用的是D调,好那就看《音符频率表》中的D行(红色部分)

第一个音符是1但上面有个点,所以对应的就是589,时间是一拍=1,

第二个音符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_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,

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_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,

1,1,0.5,0.5,1,

0.5,1,1+0.5,1,

0.5,0.5,0.5,0.5,1+1,

0.5,1,1+0.5,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,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,

1+1,0.5,0.5,1,

1+1+1+1,

0.5,1,0.5,1+1,

0.5,1,0.5,1+1,

1+1,0.5,0.5,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

{

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调的频率

#defineWHOLE1

#defineHALF0.5

#defineQUARTER0.25

#defineEIGHTH0.25

#defineSIXTEENTH0.625

//列出所有节拍

inttune[]=//根据简谱列出各频率

{

NTD3,NTD3,NTD4,NTD5,

NTD5,NTD4,NTD3,NTD2,

NTD1,NTD1,NTD2,NTD3,

NTD3,NTD2,NTD2,

NTD3,NTD3,NTD4,NTD5,

NTD5,NTD4,NTD3,NTD2,

NTD1,NTD1,NTD2,NTD3,

NTD2,NTD1,NTD1,

NTD2,NTD2,NTD3,NTD1,

NTD2,NTD3,NTD4,NTD3,NTD1,

NTD2,NTD3,NTD4,NTD3,NTD2,

NTD1,NTD2,NTDL5,NTD0,

NTD3,NTD3,NTD4,NTD5,

NTD5,NTD4,NTD3,NTD4,NTD2,

NTD1,NTD1,NTD2,NTD3,

NTD2,NTD1,NTD1

};

floatdurt[]=//根据简谱列出各节拍

{

1,1,1,1,

1,1,1,1,

1,1,1,1,

1+0.5,0.5,1+1,

1,1,1,1,

1,1,1,1,

1,1,1,1,

1+0.5,0.5,1+1,

1,1,1,1,

1,0.5,0.5,1,1,

1,0.5,0.5,1,1,

1,1,1,1,

1,1,1,1,

1,1,1,0.5,0.5,

1,1,1,1,

1+0.5,0.5,1+1,

};

intlength;

inttonepin=3;//得用6号接口

intmelody[]={

NOTE_G4,//5

NOTE_G4,//5

NOTE_A4,//6

NOTE_G4,//5

NOTE_C5,//1.

NOTE_B4,//7

0,

NOTE_G4,//5

NOTE_G4,//5

NOTE_A4,//6

NOTE_G4,//5

NOTE_D5,//2.

NOTE_C5,//1.

0,

NOTE_G4,//5

NOTE_G4,//5

NOTE_G5,//5.

NOTE_E5,//3.

NOTE_C5,//1.

NOTE_B4,//7

NOTE_A4,//6

0,

NOTE_F5,//4.

NOTE_F5,//4.

NOTE_E5,//3.

NOTE_C5,//1.

NOTE_D5,//2.

NOTE_C5,//1.

0,

};

intnoteDurations[]={

8,8,4,4,4,4,

4,

8,8,4,4,4,4,

4,

8,8,4,4,4,4,2,

8,

8,8,4,4,4,2,

4,

};

/*

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);//forlight

pinMode(13,OUTPUT);//forlight

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);//读取输入引脚

delay(100);

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)

{

pinMode(3,OUTPUT);

tone(3,i);

delay(10);

}

}

}

voidplay()

{

for(in

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1