arduino starter kit初级实验套件使用说明至_第1页
arduino starter kit初级实验套件使用说明至_第2页
arduino starter kit初级实验套件使用说明至_第3页
arduino starter kit初级实验套件使用说明至_第4页
arduino starter kit初级实验套件使用说明至_第5页
免费预览已结束,剩余270页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、Arduino环境都很简单、易理解的特点。可以快速使用Arduino做出有趣的东西。并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成。Arduino可以用来开发交互产品,比如它可以大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。Arduino项目可以是单MaxMSP)进行通讯。Arduino开源的IDE可以免费得到。特色描开放原始码的电路图设计,开发界面免费,也可依需求自己修改!!程(如:LED灯、蜂鸣器、按键、光敏电阻等等)性能描数字输入/输出端口0—13。模拟输入/输出端口0-5。支持ISP功能 出来32位的MCU平台支持arduino。几个比较特殊的端口说明VIN端口:VINinputvoltage的缩写,表示有外部电源时的输入端口。电,电池正构接VIN端口,负构接GND端口)。AREF:Referencevoltagefortheoginputs模拟输入的基准电压)。使用ogReference()命令调用。二、ArduinoC语法介AVR单片机(微控制器)的朋友也能轻松上手。那么这里我就简单的注释一下Arduino语法。关键 语法符运算---数据类布尔类型字符类型字节类型整数类型无符号长整型实数类型常表示数字IO口的电平,HIGH表示高电平(1),LOW表示低IO口的方向,INPUT表示输入(高阻态),OUTPUT表示输出(AVR5V电压40mA电流)。true|falsetrue表示真(1),false表示假(0)结voidloop():连续执行函数内的语句功13,ModeINPUTOUTPUTdigitalWrite(pin,value)IO口输出电平定义函数,pin0~13,valueHIGHLOWHIGHLED。表示为HIGH或LOW感器(10位AD,0~5V表示为0~1023)。ogWrite(pin,value)_数字IO口 的IO口可使用该函数,pin表示3,5,6,9,10,11,value表示为0~255。比如可用于电机 调速或音乐。时间函delay(ms):延时函数(单位ms)delayMicroseconds(us):延时函数(单位us)数学函min(xy)abs(x)map(value,fromLowfromHigh,toLowtoHigh):约束函数,valuefromLowtoLowfromHightoHighpow(base,exponent):开方函数,baseexponentsq(x)sqrt(x)三、 入门--课前准第一步,arduino开发环(需要把ArduinoIDE回来(IDE就是arduino的软件程序开发环境)进行MacOS第二步,安arduino拆了包装,usb数据线连接到电脑,本帖以winxpwin7两种系统为例,演示一下arduino原版驱动何如安装。winxp使用方头 找驱动的位置。驱动在IDE软件中的win7脑中查找arduino驱动。 当出现如上提示的时候,证明arduino原版驱动已经安装完成。为了查看可以看到我们的arduino驱动已经安装成功,并且com是COM9第三步,软件的使 。然后就可以看到arduino.exe文件,双击打开IDE。菜单栏上,首先看File菜单~接下来看Edit菜单~SketchToolsHelp(2)程发板程序。找到IDE接着我们在工具COM9COM9即可。之后点击上传按钮,也就是程序的意思,这个时候要保证arduino载程序的步骤您已经成功了!可以说你的arduino已经有入门基础了!四、Arduino入门—实战操作 oWorld!void{Serial.begin(9600);//opensserialport,setsdatarateto9600bps oWorld!");}void{}Serial.begin(9600);这个函数是为串口数据传输设置每秒数据传输速率,每率“300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200”。把代码到arduino控制板2)成功后,先选择选项“tool”工具按钮,选择相应的arduino控制板,和对应的“com”口。打开串口工具,在新打开的串口工具窗口的“右下角”选择相应的波特率。第二章板载LED闪烁实按照上图好电路后,就可以开始编写程序了,我们还是让LED小灯闪烁,int =13;//定义数字13void{pinMode(ledPin,OUTPUT);//定义小灯接口}void{digitalWrite(ledPin,HIGH);//点亮小灯delay(1000);//延时1秒digitalWrite(ledPin, //熄灭小灯 延时1秒}第三LED闪烁实PN结组成,也具有单向导电性。当给发光PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:R=(E-VF)/I式中E为电源电压,VFLED的正向压降,ILED的一般工作电流。发光二1.5~2.0V10~20mA5v的数字逻辑电路中,可使用220Ω的电阻作为限流电阻。3、LedLed灯有两种连线方法:当led灯的阳极通过限流电阻与板子上的数字I/O电平时,led截止,发光二极管熄灭。如图:止,发光二极管熄灭;数字口输出低电平,led灯导通,发光二极管点亮。本实验选择了接线方法1连接发光二极管,将220Ω电阻的一端插在PrototypeShield8digitalI/O口,电阻的另一端插在面包板上,简单的控制一个ledLed灯:1按照Arduino使用介绍将控制板、板子、面包板连接好,线插好。最led快速闪烁,可以将延时时间设置的小一些,但不能led灯一直在亮着;如果想led慢一点闪烁,可以将延时时间设置的大一些,但也不能过大,过大的话void{}void{delay(1000);//设定延时时间,1000=1秒digitalWrite(ledPin,LOW);//PIN8LOW=0Vdelay(1000);//设定延时时间,1000=1秒}setup()IO口输入输出模式定义函数pinMode(pin,mode),将数字的第8引脚设置为输出模式。时1000ms,让发光二极管亮1s;再用数字IO口输出电平定义函数delay(ms)(ms)1000ms1s。因为按照 中的程序方法将本程序到实验板中第四章控制实PulseWidthModulation就是通常所说的PWM,号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0或5V的的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么是5V(ON),要么是0V(OFF)。电压或电流源是以一种通(ON)或断(OFF)(接通时间/脉冲时间)*最大电压值PulseWidthation就是通常所说的PWM,译为脉冲宽度调制,简称脉宽调制。脉平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的带宽足够,任何模拟值都可以使用PWM进行编码。输出的电压值是通过通办…,也许你会说串联电阻?OK,这个方法是正确的。但是如果1V,3V,3.5V等等之间来回变动怎么办呢?不可能不停地切换电阻吧。这种情况下…,就需要使用 了。他是怎么控制的呢,对于arduino的数字端口电压输出只有LOW与HIGH两个开关,对应的就是0V与5V的电压输出,我们如果010101010101这样输出,刚好一半一半,这样输出端口实际的输出电压是2.5V。这个类似我们放映,我们所看的并不是完全连续的,它其实是每秒输出25张,在这种情况下人眼是分辨不出来的,看上去就是连 也是同样的道理,如果想要不同的电压,就控制0与1的输出比例就ok。当然…这和真实的连续输出还是有差别的,单位时间内输出的0,1在上图中,绿线之间代表一个周期,其值也是频率的倒数。换句话说,如果arduino ogWrite()命令中可以操控的范围为0-255, ogWrite(255)表示100%占空比(常开 ogWrite(127)占空比大约为50%(一半的时间) ogWrite()ogWrite():作用是给端口写入一个模拟值( LED灯的亮度变化,或者以不同的速度驱动马达。当执行ogWrite()命令后,端口会输出一个稳定的占空比的方波。除非有下一个命令来改变它。信号的频率大约为490Hz.ATmega168ATmega328UNOarduino控制板上,其工作3,5,6,9,10,11ArduinoMega,25602-13号端作于9,10,11号端口。在使用ogWrite()命令前,可以不使用pinMode()命Pin 输出与5,6号端,会产生比预期更高的占空比。原因是Led灯:1按照Arduino使用介绍将控制板、面包板连接好最后,按照图将发光二级管2209引脚。这样我们就完成了实验的连线部分。5intbrightness0;//brightness与其初始值,此变量用来表示LED的亮度。intfadeAmount5;//fadeAmount,此变量用来做亮度变化voidsetup()}voidloop()ogWrite(9,brightness);//brightness9brightnessbrightnessfadeAmount;//brightness值,使亮度在下一if(brightness==0||brightness==255)fadeAmountfadeAmount}}5)程按照 中的程序方法将本程序到实验板中6)将程序到实验板后我们可以观察到,通过 PulseWidthModulation脉冲宽度调制,简称脉宽调制。是利用微处理器的0V5V的数字电压值,(0V0;5V1)所以通过高分辨率计数器,利用方波的占空比被调制的方法对一个具体但信号仍然是数字的,因为在给定的任意时刻,直流供电要么进行编码。输出电=(接通时间/)*最大电压值1、脉冲宽度变化幅度(最小值/最大值2、脉冲周期(1秒内脉冲频率个数的倒数3、电压高度(例如:0V- 接口分别是数字接口、、、、第五章流水灯实Led灯:6LED灯依次接到数字1~6图1.6灯实验的接在生活中我们经常会看到一些由各种颜色的led灯组成的灯,灯是利用led灯编程模拟灯的效果。在程序中我们设置led灯亮灭的次序和时间,这样就可以组成不同的效果。样式一子程序:led首先从左边的绿灯开始间隔200ms依次点亮六个led灯,led200msled灯全部熄灭,这个过程循环两次就实现了闪烁的效果。样式二子程序设置k和j的值让中间执行一遍后改发k和j的值让让两边的绿灯先熄灭,接着两边的红灯熄灭,最后中间的两个黄灯熄灭。样式程序:设置k和j的值,让两边的绿灯亮400ms后再熄灭,接着让两边的红灯亮400ms后再熄灭,最后让中间的两个黄接着让两边的绿灯亮400ms后熄灭。看到这是arduino编程软件窗口,上面有本实验的程序代码。//LedIOintLed1=1;intLed2=2;intLed3=intLed4=intLed5=5;intLed6=//led1void{unsignedcharfor(j=1;j<=6;j++)//200ms1~6led{digitalWrite(j,HIGH);//jleddelay(200);//延时}for(j=6;j>=1;j--)//200ms6~1led{digitalWrite(j,LOW);//jleddelay(200);//延时}}void{unsignedcharfor(k=0;k<=1;k++)//闪烁两{for(j=1;j<=6;j++)//1~6led灯digitalWrite(j,HIGH);//jled灯delay(200);//延时200msfor(j=1;j<=6;j++)//1~6led灯digitalWrite(j,LOW);//jled灯delay(200);//延时200ms}}//led2void{unsignedcharj,k;{delay(400);//延时400msk=2;//k}{delay(400);//延时400ms}}//led3void{{delay(400);//延时400msdigitalWrite(j,LOW);//熄灭k-=2;//k值减2}{delay(400);//延时400msk+=2;//k值加2}}void{unsignedcharfor(i=1;i<=6;i++)//依次设置1~6pinMode(i,OUTPUT);//设置第i}void{}for(i=1;i<=6;i++)//依次设置1~6个数字引脚为输出模pinMode(i,OUTPUT);//设置第i个引脚为输出模for循环。它的一般形式为for(<初始化条件表达式增量语句初始化总是一个赋值语句它用来给循环控制发量赋初值条件表达式是一个关系表达式它决定什么时候退出循环增量定义循环控制发量每循环一次后按什么方式变化。这三个部分之间用";"分开。例如:for(i=1;i<=10;i+语句i1,i10,若是则执行语句,1。再重新判断,直到条件为假,i>10时,结束循环。(5)程按照 中的程序方法将本程序到实验板中(6)程序—>闪烁子程序—>样式二子程序—>闪烁子程序—>样式程序—>第六章交通灯设计实Led灯:3的电阻:3图1.6灯实验的接arduinodelay()函数来控制延时时间,这相对于C语言就要简单trafficLed.pdearduino编程intledred=10;//10红灯intledyellow=7;//7黄灯intledgreen=4;//4绿灯voidsetup(){}void{delay(1000);//延时1000毫秒=1秒delay(200);//延时200毫秒//delay(1000);//延时1000毫秒}(4)程按照 中的程序方法将本程序到实验板中(5)第七章蜂鸣器实蜂鸣器是一种结构的电子讯响器,采用直流电压供电,广泛应用于计算机、、复印机、器、电子玩具、设备、机、定时器等电子产品中作器件。2.1(外部驱动积小(llmm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要观如图a、b所示。a)有源b)无源。有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣Rxl档测试:用黑表笔接蜂鸣器"+"引脚,红表笔在另一引脚上来回碰觉,如果觉发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。有源蜂鸣器直接接上额定电源(新的蜂鸣器在上都有注明)就可连续;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能。由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片压电经极化和老化处理后,再不黄铜片或不锈钢片粘在一起。电磁式蜂鸣器由振荡的相互作用下,周期性地振动。蜂鸣器原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发数字口,蜂鸣器的负极连接到GND插口中。如下图:1、实验器件按照Arduino将控制板、面包板连接好,线插好。然后按照蜂鸣器的接法将蜂鸣器连接到数字7口上,连线完毕。蜂鸣器发出声音的时间间隔不同,频率就不同,所以发出就不同。根模拟各种声音。本程序首先让蜂鸣器间隔1ms发出一种频率,循环80次;接着让蜂鸣器间隔2ms发出另一种频率,循环100次。4、程序代码void{pinMode(buzzer,OUTPUT);//设置数字IO脚模式,OUTPUT}void{{for(i=0;i<80;i++)//输出一个频率{delay(1);//延时1msdelay(1);//延时ms}for(i=0;i<100;i++)//输出另一个频率{delay(2);//延时2msdelay(2);//延时2ms}}}在loop()中用的whilewhile(表达式表达式是循环条件,语句是循环体。语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。其执行过程可用下图表:作用:实现“当型”循环。当“表达式”非0(真)时,执行“语句”。“语句”是被循环执行的程序,按照 中的程序方法将本程序到实验板中 第八章模拟值实66个接口可ogRead();语句就可以读出模拟口的值,ArduinoUNO10位的ArduinoPCArduino的波特率应与 intpotpin=0;//定义模拟接口0intledpin1313voidsetup(){pinMode(ledpin,OUTPUT);//设置数字13Serial.begin(9600);//设置波特率}void{delay(50);//延时0.05秒delay(50);//延时0.05秒val= Serial.println(val);//显示出val的值}每一次值,arduino自带的意只做参考):候就可以看到屏幕上的数值变化了。这种模拟值是我们很常用的功能。第九章光控声音实6.1光敏电阻:1蜂鸣器:1使用模拟口模拟值。程序代码在“光控声音实验”文件夹中intphotocellPin= intledPin //ledPin=12ledintval //valvoidsetup()pinMode(ledPin,OUTPUT);//ledPin}voidloop()val }}}4、程按照 中的程序方法将本程序到实验板中本次实验设计的效果是,当光照正常的时候 leddelay(1000);//1}{delay(500);//延时0.5秒钟}}}会亮1秒钟。第十章LM35温度传感器实LM35温度传感器。如下图:每升高1℃,输出电压增加10mV。转换公式如下:VOUT(电压值输出引脚,接板子上的模拟引脚),GND二、温度实验温度传感器模块:1从LM35温度传感器的工作原理可知,温度每升高1℃,vout口输出的电10MV。根据这一原理程序中实时读出模拟0口的电压值,由于模拟口读出的电压值使用0~10230V0、5V1023。void{Serial.begin(9600);//设置波特}void{intval;//定义变量val= dat=(125*val)>>8;//温度计算公式Serial.print(dat);//输出显示dat的值delay(500);//延时0.5秒}将程序到实验板,打开监视器,就可以看到当前的环境温度了。(实第十一章(多一个小数点显示共阳枀数码管内部结码管。共阳数码管在应用时应将公共PWR接到电源输入PWR上,当某一字段3.4共阴枀数码管引脚接到+5V,如果是共阴极的就接到GND。数码管:1癿电阻:8按照Arduino将控制板、面包板连接好,线插好。按数码管癿接法g93.4中的(a)图,f段通过限流电阻与数字8引脚相连,共阳极与5V插口相连,同样的接法a、b分7、6引脚,e、d10、11引脚,第二个共阳极可以不接,c、DP分别接5、4引脚,连线完毕。如下图:3.5将每个数字写成一个子程序。在主程序中每隔2s显示一个数字,让数码管循//设置控制各段的数字IOinta=7;intintc=5;inte=10;intf=8;intg=9;int//void{unsignedchardigitalWrite(b,LOW);//点亮b段}//void{unsignedchar}//void{unsignedcharj;}//void{}//void{unsignedcharj;}//void{unsignedcharj;}//void{unsignedcharj;}//void{unsignedcharj;}void{inti;//定义发量pinMode(i,OUTPUT);//设置4~11}void{{digital_1();//数字1}5、程按照 中的程序方法将本程序到实验板中第十二4位数码管实15.2I/O中,另一端不数码管的字段引脚相连,剩下的接到+5VGND412个引脚,小数1,其他管脚顺序为逆时针旋转。左上角为最大的12号管脚。位数码管:1的电阻:8d1-d4阳极接,总共接4颗。这种接法好处是需求电阻比较少,但是会产生每8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。本次实验使用8颗,inta=1;intb=2;intc=3;intd=4;inte=5;intf=6;intg=7;intp=intd4=9;intd3=10;intd2=11;intd1=设置变量longn=0;intxintdel=55;//此处数值对时钟进行微调voidsetup(){pinMode(d1,OUTPUT);pinMode(d2,OUTPUT);pinMode(d3,OUTPUT);pinMode(a,OUTPUT);pinMode(b,OUTPUT);pinMode(c,OUTPUT);pinMode(d,OUTPUT);pinMode(e,OUTPUT);pinMode(f,OUTPUT);pinMode(g,OUTPUT);pinMode(p,OUTPUT);}void{if(digitalRead(13)=={n=}}voidpickDigit(intx)//pickDigit(x),dx{digitalWrite(d1,HIGH);digitalWrite(d2,HIGH);digitalWrite(d3,digitalWrite(d4,{casecasecase}}voidpickNumber(int //定义pickNumber(x),其作用是显示数字{{case1:case2:case3:case4:case5:case6:case7:case8:case9:}}voiddispDec(intx)//{digitalWrite(p,}voidclearLEDs()//{digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(p,LOW);}voidzero()//0{digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,HIGH);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,LOW);}voidone()//1{digitalWrite(a,LOW);digitalWrite(c,HIGH);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);}voidtwo()//2{digitalWrite(c,LOW);digitalWrite(f,LOW);}voidthree()//3{digitalWrite(c,HIGH);digitalWrite(e,LOW);digitalWrite(f,LOW);}voidfour4{digitalWrite(a,LOW);digitalWrite(c,HIGH);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,HIGH);digitalWrite(g,}voidfive()//5{digitalWrite(b,LOW);digitalWrite(c,HIGH);digitalWrite(e,LOW);digitalWrite(f,HIGH);digitalWrite(g,}voidsix()//6{digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,HIGH);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,}voidseven(7{digitalWrite(c,HIGH);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);}voideight()//8{digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,HIGH);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,}voidnine()//9{digitalWrite(c,HIGH);digitalWrite(e,LOW);digitalWrite(f,HIGH);digitalWrite(g,}5、程按照 中的程序方法将本程序到实验板中第十三章74HC5958I/O8arduino74HC595I/O74HC595以后,我们可以用3I/O8LED小灯,岂不美哉!constintON=HIGH;constintOFF=LOWintlatchPin //595intclockPin //5595intdataPin //595//59516intledState=0;void{pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,}voidloop()intdelayTime=100;{ }}void EDs(int{shiftOut(dataPin,clockPin,MSBFIRST,value);}void EDsLong(int{for(inti=0;i<8;i++){intbit=value&B value=value<<1;{}{}}}intbits[] intmasks[] voidchangeLED(intled,int{ledState=ledState&if(state==ON){ledState=ledState|bits[led];} }第十8x8LEDs下图是矩阵LED8X8LEDLED//thepintocontrolconstintrow1=2;//thenumberoftherowpin9constintrow2=3;//thenumberoftherowpin14constintrow3=4;//thenumberoftherowpin8constintrow4=5;//thenumberoftherowpin12constintrow5=17;//thenumberoftherowpin1constintrow6=16;//thenumberoftherowpin7constintrow7=15;//thenumberoftherowpin2constintrow8=14;//thenumberoftherowpin//thepintocontrolconstintcol1=6;//thenumberofthecolpin13constintcol2=7;//thenumberofthecolpin3constintcol3=8;//thenumberofthecolpin4constintcol4=9;//thenumberofthecolpin10constintcol5=10;//thenumberofthecolpinconstintcol6=11;//thenumberofthecolpin11constintcol7=12;//thenumberofthecolpin15constintcol8=13;//thenumberofthecolpin16setup(){inti=0;{pinMode(i,}pinMode(row5,OUTPUT);pinMode(row6,OUTPUT);pinMode(row7,OUTPUT);pinMode(row8,OUTPUT);for(i=2;i<18;i++){digitalWrite(i,}digitalWrite(row5,LOW);digitalWrite(row6,LOW);digitalWrite(row7,}loop(){int//therow#1andcol#1oftheLEDsturnondigitalWrite(row1,HIGH);digitalWrite(row2,LOW);digitalWrite(row3,LOW);digitalWrite(row4,LOW);digitalWrite(row5,LOW);digitalWrite(row6,LOW);digitalWrite(row7,LOW);digitalWrite(col1,LOW);digitalWrite(col2,HIGH);digitalWrite(col3,HIGH);digitalWrite(col4,HIGH);digitalWrite(col5,HIGH);digitalWrite(col6,HIGH);digitalWrite(col7,digitalWrite(col8,//turnoffalldigitalWrite(i,}}第十五章红外实红外发出的信号是一连串的二进制脉冲码。为了使其在无线传输过程中后还原为发射出的原始编码,经由接收头的信号输出脚输入到电器上的用的时候将VOUT接到模拟口,GND接到实验板上的GND,VCC接到实验板上红外:1红外接收头:1蜂鸣器:1百战不殆。本产品使用的的编码方式为:NEC协议。下面就介绍一下NEC协议:1.125ms低位)0x590x16。一个消息是由长度重复。如果你不感,你可以忽略这个可靠性取反,也可以扩大地址和命令,以每16位!一个110ms的脉冲不上图一样,之后每110ms代码是由一个9ms的高电平脉冲和一个2.25ms低电平和560μs 注意:脉冲波形进入接收头以后,因为接收头里要进行、信址的取反)16位(88位命令位的取反)(9ms、2.25ms、560us脉冲组成)。利用定时器对接收到的波形的高电平段和低电平段进量,根据测量到的时间来区分:逻辑“0”、逻辑“1”、但是命令码必须,因为每个按键令码都不同,4字端口8口,参照以下图:#defineIR_IN8//红外接收intPulse_Width=0;//脉宽intir_code=0x00;//用户编码值charadrL_code=0x00;//命令码charadrH_code0x00;//命令码反码 timer1_init(void)//定时器初始化函{TCCR1A=TCCR1B0X05;//给定时器时钟源TCCR1C=0X00;TCNT1=TIMSK1=0X00;//定时器溢出中} remote_deal(void)//执行译码结果函 }{TCNT1=if(Pulse_Width>=7&&Pulse_Width<=10)//低电平{return0;return1;}return-}{inti;intir_code=0x00;//清零adrL_code=0x00;//清零;//for(i=0;i<16;{if(logic_value()==1)//是1}//解析编码中令for(i=0;i<8;{if(logic_value()==1)//是1}//解析编码中令码反for(j=0;j<8;{if(logic_value()==1)//是1}} remote_decode(void)//译码函{while(digitalRead(IR_IN))//是高就等{if(TCNT1>=1563)100ms下{ir_code=0x00ff;//用户编码值}}{{}else{{}}}}void{}void{{remote_decode();//译码 }}第十六章超声波测距科学家们将每秒钟振动的次数称为声音的频率,它的单位是(Hz)。我们人20Hz~20000Hz20Hz或称为“超声波”。由于超声波指向性强,能量消耗缓慢,在介质中的距离较超声波测距原理超声波向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中,途中碰到物就立即返回来,超声波收到反射波就立即停止计时。超声波在空气中的速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距物的距离(s),即:s=340t/2。这就是所谓的时间差超声波测距的原理是利用超声波在空气中的速度为已知,测量声波在发射后遇到物反射回来的时间,根据发射和接收的时间差计算出发射点到物的实际距离。由此可见,超声波测距原理与原理是一样的。式中L为测量的距离长度;C为超声波在空气中的速度;T为测量距离的时间差(T为发射到接收时间数值的一半)。SR04超声波模块来进行距离测量。会用到上constintTrigPin=8;constintEchoPin9;floatcm;void{pinMode(EchoPin,INPUT);}void{digitalWrite(TrigPin,LOW);cmpulseIn(EchoPin,HIGH)58.0;cm}第十七章舵机控制实舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无马达、齿轮与动方向,再驱动无马达开始转动,透过齿轮将动力传至摆臂,同时由并可以保持的控制系统。当电机转速一定时,通过级联齿轮带动电位器旋转,使得电压差为0,电机停止转动。一般舵机旋转的角度范围是0180舵机的转动的角度是通过调节(脉冲宽度调制)信号的占空比来实现的,标准(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分1ms2ms0.5ms2.5ms之间,脉宽和舵机的转角0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,SG90舵机面包板跳线*1ArduinoArduino的普通数字传感器接ArduinoServo函数进行舵机的控制,这种控制方法的优点在于程#includeServomyservo;intpos= void{myservo.attach(9);}void{for(pos=0;pos<180;pos+={}for(pos=180;pos>=1;pos-{}}Arduino0180第十八章步进电机控制实 直径28mm步进角度:5.625x该步进电机空载耗电在50mA以下,带64倍器,输出力矩比较大,可arduinoIDEStepper.h#include//#defineSTEPSattachedtoStepperstepper(STEPS,8,9,10,//定义变量用来历史读intprevious=void{}void{intval=stepper.step(val-previous=}第十九章火焰实火焰的亮转化为高变化的电信号,输到处器,理器根据信号电阻的另一端连接GND。在三极管与电阻之间接一根导线接到模拟端口A0上,当有火焰靠近时,模拟口读出的电压就是变化的,所以在实验开始时可以先一鸣器。intflame=A0;//0接口intBeep=8;//8接口intval=0;//定义数字变量void{voidloop(){ if(val>=600)//当模拟值大于600时蜂鸣器鸣响{}{}}A0A1上去,导致线路图与程序不想符,写入程序出现错误;另第二十章液晶文字显易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字机、PDA移动通信工具等众多领域。1602液晶、1KΩ电阻1个、面包跳线若干、面包板、Arduino3.3V接法,串联1KΩ电阻后接GND。程序代码:intDI=12;intRWintDB{345678910};//使用数组来定义总线需要的管脚intEnable=2; mandWrite(intvalue)inti=for(i=DB[0iDI;i+{digitalWrite(i,value&01);//1602D7-D0(D0-D7),value>>=}delayMicroseconds(11msdelayMicroseconds(11ms}voidLcdDataWrite(intvalue)inti=0;digitalWrite(DI,HIGH);digitalWrite(RW,for(i=DB[0];i<=DB[7];i++)digitalWrite(i,value&value>>=}delayMicroseconds(11ms}voidsetup{inti=for(i=Enable;i<=DI;{}mandWrite(0x38);8-bit接口,2行显示,5x7mandWrite(0x38);8-bit接口,2行显示,5x7mandWrite(0x38);8-bit接口,2行显示,5x7mandWrite(0x06);//mandWrite(0x0E);//mandWrite(0x01);//mandWrite(0x80);//}voidloop(void)mandWrite(0x01);////写入欢迎信息LcdDataWrite('');mandWrite(0xc0+1);//mandWrite(0x01);//LcdDataWrite('');LcdDataWrite('');mandWrite(0xc0+1);//LcdDataWrite('');mandWrite(0x01);//mandWrite(0xc0+1);//LcdDataWrite('');LcdDataWrite('');mandWrite(0x01);//LcdDataWrite('');LcdDataWrite('');mandWrite(0xc0+1);//LcdDataWrite('');}第二十一章亮度实由于计算机不能输出模拟电压,只能输出0或5V的的数字电压值,我们就通号的电平进行编码。信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么是5V(ON),要么是0V(OFF)。电压或电流源是以一种通(ON)值都可以使用进行编码。输出的电压值是通过通和断的时间进行计算的。被用在许多地方,调光灯具、电机调速、声音的制作等等。下面介绍一下的三个基本参数:1、脉冲宽度变化幅度(最小值/最大值2、脉冲周期(1秒内脉冲频率个数的倒数3、电压高度(例如:0V-Arduino控制器有6个接口分别是数字接口、、、、 电位计模块面包板面包板跳线*1样通过产生不同的信号就可以让小灯有亮度不同的变化。在编写程序的过程中,我们会用到模拟写入ogWrite( 验中电位计的模拟值信号并将其赋给接口使小灯产生相应的亮度变化,再在屏幕上显示出的模拟值,大家可以理解为此程序是在模拟值的实验程序中多加了将模拟值赋给接口这一部分,下面给大家提供一段 输出intval=0;//void{pinMode(ledpin,OUTPUT);//定义数字接口11Serial.begin(9600);//设置波特率为}void{ Serial.println(val);//显示val变量delay(10);//延时0.01秒}可以清楚的看到我们面包板上的LED小灯的亮度也在随之变化。第二十实一、中断的基本原电视,突然家里座机响了,你起身去接,接完后继续回来看电视。这二、什么是中断排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先根据中断源的位置,有两种类型的中断。有的中断源在CPU的内部,称为内或者CPU响应中断的不同条件,也可以把中断划分为可中断和不可中三、使用中断的好1、实行分时操作。提高CPU的效率只有当服务对象向CPU发出中断申请时才去为它服务这样我们就可以利用中断功能同时为多个对象服务从而大大提高了CPU的工作效率。2、实现实时处理。利用中断技术各个服务对象可以根据需要随时向CPU发出中断申请及时发现和处理中断请求。在我们的实验中,有两个可以使用的外部中断,0(数字引脚2)和1(数字四、标准的数字输入与输出--没有Arduino。代码用来你输入的值,然后作为条件进行比较,intpbIn intledOut intstate void{//pinMode(pbIn,INPUT);}void{state= digitalWrite(ledOut, //把的状态赋予LED指示for(inti=0;i<100;i++){//10}} 五、使下面的代码进入控制板中,当按下按钮时,LED的状态就会立刻改变,尽intpbIn intledOut volatileintstate void{}void{for(inti=0;i<100;{}}void{state=!state;} 六、中断命令语法介interruptmode:定义何时发生中断以下四个contstants 执行的程序。大多数的Arduino板有两个外部中断:0(数字引脚2)和1(数字引脚3)。七、注当中断函数发生时,delya()millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该一个变量来在未发生中断时变量。八、重新分配中九、启用\停止执行noInterrupts()命令。当这段代码执行完以后,你可以使用interrupts()命十、删 detachInterrupt(interrupt_number)命令进行删除第二十实用Arduino做0-5V量程的电压表.本实验电路设计没有设计相对复杂的保护电一、电Arduino控制 一面包 一面包 六1KΩ电 一USB连接 一二、电路连接三、程序源代float //创建一个浮点型变量temp作为空间准备存放数void{ //使用9600}void{intV1 为0-5V返回的值为0-1024floatvol=V1*(5.0/if(vol==temp){temp=vol; 的变量temp}{ //串口输出电压值,并且不Serial.println("V"); temp=vol; }}四、打开串口监视I/O口的意思即INPUT接口和OUTPUT接口,到目前为止我们设计的小灯实验都还只是应用到Arduino的I/O口的输出功能,这出结合使用的实验,让大家能简单了解I/O的作用。按键开关大家按键开关面包板面包板跳线*1按键接到数字7接口,红色小灯接到数字11接(Arduino控制0-13I/O接口都可以用来接按键和小灯,但能外也是串口通口,程序时属于与PC机通信故应保持01接口悬空,所以为避免插拔线的麻烦尽量不01接口),实验的程序中多加了一条条件判断语句,这里我们使用if语句,Arduino的程序便写语句是基于C语言的,所以C的条件判断语句自然也适用于Arduino,像while、swich等等。这里根据个人喜好我们习惯于使用简单易于理解的if语句给大家做演示例程。我们分析电路可知当按键按下时,数字7接口可读出为高这时我们使数字11口输出高电平可使小灯亮起,程序中我们判断参考源程序intinpin=7;//定义数字7接口intval;//定义变量valvoid{}void{val=digitalRead(inpin);//数字7口电平值赋给val{}{}}难在各种设备上发现,例如大家的当按下任一按键时背光灯就中应用实例抢答器。第二十验了,本实验就是将上面的按键控制小灯的实验扩展成3个按键3个小灯,占6个数字I/O接口。原理这里就不多说了同上面下面附上参考原理图和实物连参考源程序如下intredled=10;intgreenled=8;intredpin=7;intgreenpin=5;intred;intyellow;intgreen;{}void{{}{}{}{}{}{}}分析。完程序,我们自己制作的简易抢答器就完成了。第二十六章馨水arduino控制 1面包 1面包板 1红黄蓝 各1 3lm35温度传感 1USB数据 12、电路原3、电路接4、程序如void{pinMode(13,OUTPUT);pinMode(12,OUTPUT);pinMode(11,OUTPUT);}voidloop()intvol=ogRead(A0)*(5.0/ //LM35温度if //低温区的温度值设置、以及led{digitalWrite(13,HIGH);digitalWrite(12,LOW);digitalWrite(11,LOW);}elseif(vol>=32&&{digitalWrite(13,LOW);digitalWrite(12,HIGH);digitalWrite(11,LOW);}elseif //高温区温度设{digitalWrite(12,LOW);}}第二十开关1、了解倾路的目的。目前滚珠开关在市场上使用的常用型号有SW-200D、SW-460、SW-300DA等,本节使用的是SW-200D型号的。这类开关不象传统的水银开关,它2、工作原寻针。金色一端为<ON>导通触发端银色一端为<OFF>开路端当受到外力摇性会产生短时间导通或持续导通<ON>状态。而当电气特性要恢复开路状态<OFF>时开关设置环境必须为静止,且银色一端设置角度需低于水平 3、倾斜开4、倾斜开led灯的亮倾斜开关模块:1当金色一端低于水平位置倾斜,开关寻通,模拟口电压值为5V左右(数开关连接到模拟5引脚。void{pinMode(8,OUTPUT);//设置数字8}void{{i=ogRead(5);//模拟5口电压if(i>200)//如果大于{digitalWrite(8,HIGH);//点亮led}else//{digitalWrite(8,LOW);//熄灭led}}}按照 中的程序方法将本程序到实验板中(6)将程序到实验板后大家可以将板子倾斜观察 led灯;当银色一端低于水平位置倾斜,开关截止,模拟口电压值为0V左右(数字二进制表示为0),led灯。第二十八章灯实1、什么是红外接收头2、工作原IC内部放大器进行放大,然后通过自动增益控制、带通滤波、解调变、波形整形3、红外接收头的引脚与连二、红外实1、实验器红外:1红外接收头:1LED灯:6220Ω电阻:6多彩面包线:若2、实验连VOUT11口引脚,将LED灯通过电阻接到数字引脚2,3,4,5,6,7。返样就完成了电路3、实验原的码方式为:NEC协议。下面就介绍一下NEC协议:上面显示了NEC的协议典型的脉冲序列。注意:这首先发送LSB(最低位)的协议。在上面癿脉冲传输的地址为0x59命令为0x16。一个消息是由一个9ms的高电平开始,随后有一个4.5ms的低电平,(返两段电平组成引寻码)然果你不感,你可以忽略这个可靠性取反,也可以扩大地址和命令,以每16位!一个命令发送一次,即使在上的按键仍然按下。当按键一直按下时,第是由一个9ms的高电平脉冲和一个2.25ms低电平和560μs癿高电平组成。键值0x00FFA25D;0x00FFE01F=0x00FF629D;0x00FFA857;0x00FFE21D0x00FF906F;0x00FF22DD0x00FF6897;0x00FF02FD;=0x00FF9867;=0x00FFC23D;四排三=0x00FFB047;程序代intRECV_PIN=11;intLED1=2;intLED2=3;intLED3=4;intLED4=5;intLED5=6;intLED6=longon1=0x00FFA25D;longoff1=0x00FFE01F;longon2=0x00FF629D;longoff2=0x00FFA857;longon3=0x00FFE21D;longoff3=0x00FF906F;longon4=0x00FF22DD;longoff4=0x00FF6897;longon5=longoff5=0x00FF9867;longon6=0x00FFC23D;longoff6=0x00FFB047;IRrecvirrecv(RECV_PIN);decode_resultsresults;//Dumpsoutthedecode_results//Callthisafter//void*toworkaroundcompiler//voiddump(void*v)//decode_results*results=(decode_results*)vvoiddump(decode_results*results){intcount=results-if(results->decode_type=={}{if(results->decode_type=={}elseif(results->decode_type=={}elseif(results->decode_type=={}elseif(results->decode_type=={}Serial.print("(");Serial.print(results->bits,DEC);Serial.println("bits)");}Serial.print("Raw(");Serial.print("):");for(inti=0;i<count;{if((i%2)==1)Serial.print(results- }{Serial.print(-(int)results- }}}void{pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT);pinMode(LED3,OUTPUT);pinMode(LED4,OUTPUT);pinMode(LED5,OUTPUT);pinMode(LED6,OUTPUT);irrecv.enableIRIn();//Startthe}inton=unsignedlonglast=void{if{//Ifit'sbeenatleast1/4secondsincethe//IRreceived,toggletherelayif(millis()-last>250){on=//digitalWrite(8,on?HIGH:LOW);digitalWrite(13,on?HIGH:LOW);}if(results.value==on1)if(results.value==off1)if(results.value==on2)if(results.value==off2if(results.value==on3)if(results.value==off3)if(results.value==on4)if(results.value==off4)if(results.value==on5)if(results.value==off5)if(results.value==on6)if(results.value==off6)last=irrecv.resume();//Receivethenext}}五、程序功 第二十DHT11温湿概DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用的数字模块技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC8、、DHT11传感器都在极为精确的湿度校验室行校校准以程形式在OTP内存中,传感器内20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。DHT113针PH2.0供电电压:3-供电电流:最大温度范围:0-50℃误差1/e(636-测量分辨率分别为8bit(温度)、8bit(湿度传感器的时DATA于微处DHT11间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格下:一次完整的数据传输为40bit,先出。数据格式8bit湿度整数数据+8bit湿度小数数+8bi温度整数数据+8bit温度小数数+8bit校验数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末位。用户MCU发送一次开始信号后,DHT11从低功耗模式转速模式,等待主机开始信号结束后,DHT11发送响应信40bit的数据,并触发一次信号,用户可选择部分数据.从模式机发送开始信号,DHT11不会主动进行温湿度.数据后转换模块的使DHT11块接到Arduino感器扩展板的#defineDHT11_PIN0ADC0模拟0byteread_dht11_dat(){bytei=byteresult=0;for(i=0;i<8;i++){while(!(PINC&_BV(DHT11_PIN)));//waitfor50usif(PINC&result|=(1<<(7-while((PINC&_BV(DHT11_PIN)));//wait'1'}return}void{DDRC|=_BV(DHT11_PIN);PORTC|=_BV(DHT11_PIN);}void{bytedht11_in;bytei;//start//1.pull-downi/opinfrom18msPORTC&=~_BV(DHT11_PIN);PORTC|=DDRC&=~_BV(DHT11_PIN);dht11_in=PINC&_BV(DHT11_PIN);Serial.println("dht11startcondition1notmet");}dht11_in=PINC&_BV(DHT11_PIN);Serial.println("dht11startcondition2notmet");}//nowreadyfordatareceptionfor(i=0;i<5;i++)dht11_dat[i]=read_dht11_dat();DDRCPORTC|=bytedht11_check_sum=//checkcheck_sum{Serial.println("DHT11checksum}Serial.print("Currenthumdity=Serial.print("%");Serial.print("temperature=");Serial.println("C");}编译代码后到Arduino中,打开串口助手即可看见实际测第三十章红外对管接收实1、电路连PC838(2.5v-2、代码并程#includeIRrecvirrecv(RECV_PIN);void{}voidloop()irrecv.resume();//接收下一个值}}3、记录红第三十感首先科普一下,当一块通有电流的金属或半导体薄片垂直地放在磁场中时,薄片的两端就会产生电位差,这种现象就称为霍尔效应。霍尔开关则是利用霍尔效应的一种传感器,它可以很方便的把磁信号转换成电信号,具有很高的可靠性和灵敏度。编程的话使用最简单的数字输入函 digitalRead()进行就可以了intledPin=13;intswitchPin=19;intvalue=0;voidsetup()pinMode(switchPin,}voidloop()value=digitalRead(switchPin);if(HIGH==value){digitalWrite(ledPin,}elsedigitalWrite(ledPin,}}使用的时候当霍尔开关靠近磁铁的时候,从AduioAduio的另一极使用噢。第三十电器实一、实验ArduinounoR3USB线一LED 二、实验目的三、实验备:5V电源、万用表。步骤:1K欧姆左右的两个脚是线圈引脚。注意有些继电器的线圈分正负极,反接虽然不至于损坏,但不动作2、找出常、将我提供的调试程序到Arduino开发板中、看LED4、实验程voidsetup(){pinMode(jdqPin,OUTPUT);//设定数字接口13、12、 Serial.begin(9600);//设置串口波特率为}voidloop()digitalWrite(jdqPin,LOW);delay(1000);}第三十三章亮RGBLED实在这一课中,您将学习如何用Arduino控制共阳RGB(红绿蓝)LED,您将使用Arduino中的 ogWrite的功能控制RGBLED。下图是一个直径一厘米的RGBLED。同的是RGBLEDLED,一个红色,一个绿色的,一个LED共阳RGBLED共有4个引脚,常见的正极是第二管脚,也是最长的那个引线。此管脚将被连接到+5V。其余的每个LED的需要串联220Ω的电阻,以防止太大的电流流过烧毁。三个正管脚的LED(一个红色,一个绿色以及一个蓝色)连接到电阻然后连接到Arduino的 引脚,这里我们用到了D9、D10、D11号管脚。intredPin=11;intgreenPin=10;intbluePin=9;void{pinMode(redPin,OUTPUT);pinMode(bluePin,OUTPUT);}void{setColor(2550,0);//setColor(0,255,0);//setColor(0,0,255);//setColor(255255,0);//setColor(80,0,80);//setColor(0,255,255);//}voidsetColor(intred,intgreen,int{ogWrite(redPin,255-red);ogWrite(bluePin,255-blue);}如果你熟悉网页编程,你可能会,颜色通常表示为一个“十六来。让我们尝试这种浅绿颜色(#32B16C)。setColor(0x32,0xB1,0x6C)//了在setColor函数后面加上延时函数,这样就可以显示你所需第三十四章数字实种器件的基本用法。这次使用数码管与按键进行组合,做一个简易数字。1-8之间循环跳动,当按下按键时,数码inta=7;intb=6;intc=5;inte=10;intf=8;intg=9;int//void{unsignedchardigitalWrite(b,LOW);//点亮b段}//void{unsignedcharj;}//void{unsignedcharj;}//void{}//void{unsignedcharj;}//void{unsignedcharj;}//void{unsignedcharj;}//void{unsignedcharj;}void{inti;{pinMode(i,OUTPUT);//设置4~11}}void{{digital_1();//显示数字 ogRead(0)>1000);//如果读到模拟0口的值1000 }}第三十五章讯线水位器模void{ //让模拟口A5作为数字口输}void{intn= if(n>=1){digitalWrite(A5,HIGH); }}第三十六章电位控制的十六进制显将电位器采样值map到0~255后以16进制显示,其中用数码管显示,低位用4个LED显示(4位二进制)。如果点亮数字“5”的话,则要让table1中的第五行从右向左分别为a~h段输出,让b,e和h段不亮。04位的值);再将二进制数“”进行“与”运算,#defineLED1#defineLED2#defineLED3#defineLED4#defineSEG_a2IO#defineSEG_b#defineSEG_c#defineSEG_d#defineSEG_e#defineSEG_f#definePotA0bytei;bytea;byteintPotBuffer=//0-9unsignedchartable1[16][8] //1,168{ {0,0,1,1,1,1,1,},{0,0,0,0,0,1,1,},{0,1,0,1,1,0,1,},{0,1,0,0,1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论