arduino项目整理[共31页]_第1页
arduino项目整理[共31页]_第2页
arduino项目整理[共31页]_第3页
arduino项目整理[共31页]_第4页
arduino项目整理[共31页]_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、报警器代码Float sinVal /浮点型sin函数变量Int toneVal /整形音调变量Void setup()pin mode(8,OUTPUT) /设置引脚为8的输出 Void loop() For (int x=0;x180,x+) /for循环 初始变量为0度 范围0180增加 sinVal=(sin(x*(3.1412/180) /将角度转换为弧度制赋值给sinValtoneVal=2000+(int(sinVal*1000) /将数值化为整数,无小数 tone(8,toneVal) /给引脚8音调delay(2) /延迟2毫秒 SOS求救器SOS求救器是通过LED开关两种状

2、态来拼出一个个字母。通过长闪烁和短闪烁来表示点和横杠。我们这个项目中, 我们就拼写S.O.S这三个字母。通过查阅莫尔斯码表,我们可以知道,字母“S”用三个点表示,我们这里用短闪烁替代,字母“O”则用三个横 杠表示,用长闪烁替代。【实验现象】LED灯短闪烁三次,停顿0.1s,长闪烁3次,停顿0.1s,再短闪烁三次,停顿五秒,最后循环整个程序。【试验线路图】按图连接好线路图(注意LED灯正负极及接地)注释:蓝线接地(Gnd)红线接10号【程序2-1】int ledPin = 10; void setup() pinMode(ledPin, OUTPUT); void loop() / 三个快闪烁来

3、表示字母“S” digitalWrite(ledPin,HIGH); /LED亮灯 (高电平)delay(150); /延时程序150(150ms)digitalWrite(ledPin,LOW); /LED熄灭 (低电平)delay(100); /延时程序150(150ms) digitalWrite(ledPin,HIGH); /同第一段程序注释相同delay(150); digitalWrite(ledPin,LOW); delay(100);digitalWrite(ledPin,HIGH); /同第一段程序注释相同delay(150); digitalWrite(ledPin,LOW

4、); delay(100); delay(100); /100毫秒延时产生字母之间的间隙这是程序S的表示方法,三个短闪烁,然后延时/三个短闪烁来表示字母“O” digitalWrite(ledPin,HIGH); / LED亮灯 (高电平)delay(400); /延时程序400(400ms)digitalWrite(ledPin,LOW); /LED熄灭 (低电平)delay(100); /延时程序100(100ms)digitalWrite(ledPin,HIGH); /同第一段程序注释相同delay(400); digitalWrite(ledPin,LOW); delay(100);d

5、igitalWrite(ledPin,HIGH); /同第一段程序注释相同delay(400); digitalWrite(ledPin,LOW); delay(100); delay(100); /100毫秒延时产生字母之间的间隙这是程序O的表示方法,三个长闪烁,然后延时/再用三个快闪烁来表示字母“S” digitalWrite(ledPin,HIGH); /LED亮灯 (高电平)delay(150); /延时程序150(150ms)digitalWrite(ledPin,LOW); /LED熄灭 (低电平)delay(100); /延时程序150(150ms) digitalWrite(l

6、edPin,HIGH); /同第一段程序注释相同delay(150); digitalWrite(ledPin,LOW); delay(100);digitalWrite(ledPin,HIGH); /同第一段程序注释相同delay(150); digitalWrite(ledPin,LOW); delay(100);这是程序S的表示方法,三个短闪烁,然后延时delay(5000); / 在重复S.0.S信号前等待5秒 最后延迟5s 然后循环程序这就是一段完整的SOS求救器的程序,在经过电路测试好之后,我们可以简化一下我们的程序,进一步的加深难度。【程序2-2】int ledPin = 10;

7、 void setup() pinMode(ledPin, OUTPUT); void loop() / 三个快闪烁来表示字母“S” for(int x=0;x3;x+) digitalWrite(ledPin,HIGH); /设置LED 为开delay(150); /延时150毫秒 digitalWrite(ledPin,LOW); /设置LED 为关delay(100); /延时100毫秒 delay(100); /100毫秒延时产生字母之间的间隙 这是程序S的表示方法,三个短闪烁,然后延时 /三个短闪烁来表示字母“O”for(int x=0;x3;x+) digitalWrite(led

8、Pin,HIGH); /设置LED 为开delay(400); /延时400毫秒 digitalWrite(ledPin,LOW); /设置LED 为关delay(100); /延时100毫秒delay(100); /100毫秒延时产生字母之间的间隙 这是程序O的表示方法,三个长闪烁,然后延时/ 再用三个快闪烁来表示字母“S” for(int x=0;x3;x+) digitalWrite(ledPin,HIGH); /设置LED 为开 delay(150); /延时150毫秒 digitalWrite(ledPin,LOW); /设置LED 为关delay(100); /延时100毫秒这是程

9、序S的表示方法,三个短闪烁,然后延时delay(5000); / 在重复S.0.S信号前等待5秒 在输入代码的时候,注意保持代码的一个层次感,除了美观外,也便于你日后检查代码。确认正确后,下载代码到 Arduino中,如果一切顺利的话,我们将看到LED闪烁出莫尔斯码S.O.S信号,等待5秒。重复闪烁。给Arduino外 接电池,整个装到防水的盒子里,就可以用来发S.O.S信号了。【补充】【for语句格式】for(循环初始化;循环条件;循环调整语句) 条件为真循环体语句; For循环顺序第一轮:第二轮:直到2不成立,for循环结束【比较运行符】l =(等于)l !=(不等于)l (大于)l =(

10、大于等于)特别要说明一下,等于必须是两个 等号。还有像小于等于和大于等 于,和=之间不能留有空格,否则 编译不通过。 当然,除了比较运算符外,程序也 可以用的+、-、*、/(加、减、 乘、除)这些常用的算术运算符。呼吸灯方法一:int pwm=0; /声明pwm变量int PinMode=3;void setup() Serial.begin(9600);viod loop()analongWrite(PinMode,pwm); /设置PWM占空比delay(100);pwm+; /增加输出的PWM占空比PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种有效技术,这种技术被

11、广泛应用在测量、通信、功率控制与变换的许多领域中。模拟输出用到的函数为analongWrite(pin,value),其中pin是输出的引脚号,value为0255之间的数值。通过这种函数,硬件PWM通过0255之间的任一值来编程,其中0为关闭,255为全功率,0255之间的任意一个值都会产生一个约490HZ的占空比可变的脉冲序列。Arduino软件限制PWM通道为8位计数器。方法二int ledPin = 10; /将10号端口命名为ledPinvoid setup() pinMode(ledPin,OUTPUT); /设置端口的模式为输出模式 void loop() fadeOn(1000

12、,5); /调用fadeOn函数 将1000传输nsigned int time 中 5传输到int increament中fadeOff(1000,5); /调用fadeOff函数 void fadeOn(unsigned int time, int increament) /fadeOn函数读取括号中的数值for (byte value = 0 ; value 0; value-=decreament) /for循环实现小灯从亮到暗 analogWrite(ledPin, value); /将value的值通过pwm来表示出来delay(time/(255/5); /每一次循环后等待的时间

13、 analogWrite()其作用是给端口写入一个模拟值(PWM波)。可以用来控制LED灯的亮度变化,或者以不同的速度驱动马达。当执行analogWrite()命令后,端口会输出一个稳定的占空比的方波。除非有下一个命令来改变它。PWM信号的频率大约为490Hz.在使用uno的arduino控制板上,其工作在3,5,6,9,10,11端口。在使用analogWrite()命令前,可以不使用pinMode()命令把端口定义为输出端口,当然如果定义了更好,这样利于程序语言规范。语法analogWrite(pin, value)参数pin:写入的端口value:占空比:在0-255之间。注释与已知问题

14、当PWM输出与5,6号端口的时候,会产生比预期更高的占空比。原因是PWM输出所使用的内部时钟,millis()与delay()两函数也在使用。所以要注意使用5,6号端口时,空占比要设置的稍微低一些,或者会产生5,6号端口无法输出完全关闭的信号。PWM(Pulse-width modulation)脉宽调制PWM是使用数字手段来控制模拟输出的一种手段。使用数字控制产生占空比不同的方波(一个不停在开与关之间切换的信号)来控制模拟输出。以本次实验来看,端口的输入电压只有两个0V与5V。如我我想要3V的输出电压怎么办。有同学说串联电阻,对滴,这个方法是正确滴。但是如果我想1V,3V,3.5V等等之间来

15、回变动怎么办呢?不可能不停地切换电阻吧。这种情况下。就需要使用PWM了。他是怎么控制的呢,对于arduino的数字端口电压输出只有LOW与HIGH两个开关,对应的就是0V与5V的电压输出,咱本把LOW定义为0,HIGH定义为1.一秒内让arduino输出500个0或者1的信号。如果这500个全部为1,那就是完整的5V,如果全部为0,那就是0V。如果010101010101这样输出,刚好一半一半,输出端口就感觉是2.5V的电压输出了。这个和咱们放映电影是一个道理,咱们所看的电影并不是完全连续的,它其实是每秒输出25张图片,在这种情况下人的肉眼是分辨不出来的,看上去就是连续的了。PWM也是同样的道

16、理,如果想要不同的电压,就控制0与1的输出比例控制就ok当然。这和真实的连续输出还是有差别的,单位时间内输出的0,1信号越多,控制的就越精确。在下图中,绿线之间代表一个周期,其值也是PWM频率的倒数。换句话说如果arduino PWM的频率是500Hz,那么两绿线之间的周期就是2毫秒。 analogWrite() 命令中可以操控的范围为0-255, analogWrite(255)表示100%占空比(常开), analogWrite(127)占空比大约为50%(一半的时间)。传统方法实现PWM除了使用analogWrite()命令实现PWM,还可以通过传统方法来控制电平的开关时间来设置。请看如

17、下代码1 void setup()2 3 pinMode(13, OUTPUT);/设定13号端口为输出4 56 void loop()7 8 digitalWrite(13, HIGH);9 delayMicroseconds(100); / 大约10%占空比的1KHz方波10 digitalWrite(13, LOW);11 delayMicroseconds(900);12 这种方法的的优点是他可以使用任意数字端口做输出端口。而且可以自己随意设定占空比与频率。一个主要的缺点是任何中断都会影响时钟,这样就会导致很大的抖动,除非你禁用中断。第二个却就是CPU在处理输出的时候,就无法做其他事情

18、了。上面的代码用到了一个新的命令delayMicroseconds()其作用是产生一个延时,计量单位是微秒,1000微秒=1毫秒。目前delayMicroseconds()最大值为16383。如果值大于1000,推荐使用delay() 命令。 炫彩RGB LED共阳RGB与 共阴RGB的 区别(1)接线中的改变,共阳的话,共用端需要接5V,而不是GND,否则LED不能被点亮。 (2)第二点就是,在颜色的调配上,与共阴是完全相反的。 举个例子:共阴RGB显示红色为R-255,G-0,B-0。然而共阳则完全相反,RGB数值是 R-0, G-255, B-255。连接之前,先判别RGB是共阴还是共阳

19、首先需要了解两个函数指令constrain()函数需要3个参数:x、a和b。这里x是你的控制对象,a是最小值,b是最大值。如果值小于a, 则返回a。如果大于b,则返回b。random()函数用于生成一个随机数,min是随机数的最小值,max是随机数的最大值。最主要的部分,也就是主函数。主函数中调用了一个自己创建的函数colorRGB(),函数有三个传递参数,用于写入 Red、Green、Blue的值,也就是0255的值 那么让我们 来看程序int redPin = 9;int greenPin = 10; int bluePin = 11;/ 设置每个颜色引脚对应的端口void setup()

20、 pinMode(redPin, OUTPUT);pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); /设置每个端口的模式为输出void loop() /R:0-255 G:0-255 B:0-255 colorRGB(random(0,255),random(0,255),random(0,255); delay(1000); /设置一个随机颜色的值void colorRGB(int red, int green, int blue) analogWrite(redPin,constrain(red,0,255); analogWrite

21、(greenPin,constrain(green,0,255); analogWrite(bluePin,constrain(blue,0,255); /给予颜色的取值范围感光灯这个项目中将介绍一个新元件光敏电阻。从名字可以看出,这个器件是依赖光作用的。在黑暗的环境中,光敏 电阻具有非常高阻值的电阻。光线越强,电阻值反而越低。通过读取这个电阻值,就可以检查光线的亮暗了。光敏二极管=感光元件,光照亮大,输出组织小,流经电流大,反之则小所需元件:Arduino Uno*1 原型拓展版*1 条线(公公头)*5220欧电阻*15MM LED灯*110k电阻*1光敏电阻*1 STEP 1: 硬件连接L

22、ED灯还是和以往一样的接法。而光敏二极管是有正负极的,和LED一样,也是遵循长脚(+),短脚(-)的原则。还需注意的与光敏二极管相连的电阻是10k,而不是220。STEP 2:输入代码完成硬件连接后,打开Arduino IDE,输入下面这段代码。1. int LED = 13; /设置LED灯为数字引脚132. int val = 0; /设置模拟引脚0读取光敏二极管的电压值3. void setup()4. pinMode(LED,OUTPUT); / LED为输出模式5. Serial.begin(9600); / 串口波特率设置为96006. 7. void loop()8. val =

23、 analogRead(0); / 读取电压值010239. Serial.println(val); / 串口查看电压值的变化10. if(val1000) / 一旦小于设定的值,LED灯关闭11. digitalWrite(LED,LOW);12. else / 否则LED亮起13. digitalWrite(LED,HIGH);14. 15. delay(10); / 延时10ms1. 对端口进行申明对13号命名为LED同理0号端口为读取VAL2. 功能定义13号口LED在此为输出端口9600为信息传送速率(读取模拟量)模拟量读取(将此端口数据读取,显示数据)if语句如果val1000信

24、号输出使LED有高电平,点亮,延时十秒STEP 3:代码回顾我们之讲LM35温度传感器的时候,也用到了用模拟口读值。强调了,模拟量不需要输入输出模式。这里,也是同样用模拟口用来读取光敏二极管的模拟值。一旦有光照射,读出的模拟值就会减小,这里设定的上限值是1000。这个值可以按你需要的亮度来选取。选取方法:先把整个装置放在你想让LED关闭的一个环境下,然后打开串口,查看串口显示的值,把这个值替换掉代码中的1000。从串口读值,是调试代码一种很好的方法。STEP 4:硬件回顾这里接触了一种新元件光敏器件。这类器件都是将光信号变成电信号的特殊电子元件。元件内部有特殊的光导材料,外部用塑料或者玻璃封装

25、。光线照射在这类光导材料上时,光敏器件的电阻值就会迅速变小。光敏元件有很多,光敏电阻,光敏二极管,光敏三极管等等。不过原理是差不多的。我们这里选用的是光敏二极管。光敏二极管其实是光敏电阻中的一种。所谓二极管,就是有正负极的,所以在连线的时候也要注意正负极。光敏电阻在黑暗的环境中,具有非常高阻值的电阻。光线越强,电阻值反而越低。随着两端电阻值的减小,电压也就相应减小(从模拟口读到的值也就变小,模拟口01023的值对应是05V的电压值)。互动交通信号灯针对红黄绿交通的灯进行一个拓展,增加一种行人按键请求通过马路的功能。当按键按下时Arduino会自动反应,改变交通灯的状态,让车停下,允许行人通过。

26、此项目开始实现Arduino的互动也会在代码中学习到如何创建自己的函数。元器件 Arduino Uno*1 原型拓展版*1 条线(公公头)*13 220欧姆电阻*6 按键开关*1 5MM LED灯红*2绿*2黄*1接线行车灯红黄绿与人行灯红绿串联限流电阻后阳极分别连接数字口12,11,10,8,7,负极共阴接地 代码int carRed=12; /设置汽车红灯引脚int carYellow=11; /设置汽车黄灯引脚int carGreen=10; /设置汽车绿灯引脚int button=9; /按钮引脚int pedRed=8; /设置人行红灯引脚int pedGreen=7; /设置人行红

27、灯引脚int crossTime=5000; /允许行人通过的时间unsigned long changeTime; /按钮按下后的时间void setup()pinMode(carRed,OUTPUT); /设置汽车红灯为输出模式pinMode(carYellow,OUTPUT ); /设置汽车黄灯为输出模式pinMode(carGreen,OUTPUT); /设置汽车绿灯为输出模式pinMode(pedRed,OUTPUT); /设置人行红灯为输出模式pinMode(pedGreen,OUTPUT); /设置人行绿灯为输出模式pinMode(button,INPUT); /按钮设置为输入模

28、式digitalWrite(carGreen,HIGH); /开始时汽车灯绿灯亮digitalWrite(pedRed,HIGH); /开始时行人灯红灯亮void loop()int state=digitalRead(button); /设置按钮为数字量输入if(state=HIGH&(millis()-changTime)5000); /检测按钮是否被按下,并且是否距上次按下按钮后有5秒的等待时间changeLights(); /调用变灯函数 void changeLights() /变灯函数 digitalWrite(carGreen,LOW); /汽车绿灯灭 digitalWrite(

29、carYellow,HIGH); /汽车黄灯亮 delay(2000); /等待2秒 digitalWrite(carYellow,LOW); /汽车黄灯灭 digitalWrite(carRed,HIGH); /汽车红灯亮 delay (1000); /为安全考虑等待一秒digitalWrite(carYellow,LOW); /汽车黄灯灭 digitalWrite(carRed,HIGH); /汽车红灯亮 delay(crossTime); /等待一个通过时间for(int x=0;x5000millis()是一个函数,该函数是arduino语言自有的函数,它返回值是一个时间,arduin

30、o开始运行到执行到当前的时间,也称之为机器时间,如同一个隐形时钟,从控制器开始运行的那一刻起开始计时,以毫秒为单位。变量changeTime初始化时,不储存任何数值,直到millis()赋值给它,才开始有数值,且随millis()值变化而变化。通过millis()函数不断记录时间,判断两次记录的时间间隔是否大于5秒,5秒之内不予反应,以防止重复按键导致运行错误,让交通灯之间的跳转完整完成。8. 按键开关按键共有四个引脚。1与4,2与3始终导通,1、4和2、3之间按键按下就导通了,否则为断开。9.下拉电阻“下拉”可以理解为吧电压往下拉,价低电压。按键作为开关,当输入电路状态为high时,电压要尽

31、可能接近5v,输入电路状态为low时,电压要尽可能接近0v。若不能确保状态接近所需电压,这部分电路会产生电压浮动,读取的数字量不能确保正确。一图未接下拉电阻按键为按下时input引脚处于悬空状态,空气会使该引脚电压产生浮动,不能确保为0v。二图接了下拉电阻,按键为按下时,9号口通过电阻接地确保为0v,不会产生电压浮动现象。 舵机初动舵机,其实就是个低端的伺服电机系统,它也是最常见的伺服电机系统。主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。它将PWM信号与滑动变阻器的电压相比对,通过硬件电路实现固定控制增益的位置控制。它使用一个反馈系统来控制电机的位置。可以很好掌握电机角度。大多数

32、舵机是可以最大旋转180的。也有一些能转更大角度,甚至360。#include /声明调用Servo.h库 Servo myservo; /创建一个舵机对象 int pos = 0; /变量pos用来存储舵机位置 void setup() myservo.attach(9); /将引脚9上的舵机与声明的舵机对象连接起来 void loop() for(pos = 0; pos =1; pos-=1) /舵机从180转回0每次减小1 myservo.write(pos); /写角度到舵机 delay(15); /延时15ms让舵机转到指定位置 #include/定义头文件,这里有一点要注意,可以直接在Arduino软件菜单栏单击SketchImportlibrary

温馨提示

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

评论

0/150

提交评论