ARDUINO入门及其简单实验(7例).doc_第1页
ARDUINO入门及其简单实验(7例).doc_第2页
ARDUINO入门及其简单实验(7例).doc_第3页
ARDUINO入门及其简单实验(7例).doc_第4页
ARDUINO入门及其简单实验(7例).doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

ARDUINO入门及其简单实验(7例)11. Arduino硬件开发平台简介11.1 Arduino的主要特色21.2 Arduino的硬件接口功能描述31.3 Arduino的技术性能参数31.4 电路原理图42. Arduino软件开发平台简介52.1 菜单栏52.2 工具栏62.3 Arduino 语言简介63. Arduino开发实例中所用部分器件81. LED简介82. 光敏电阻简介93. 直流电机简介94. 电位器简介104. Arduino平台应用开发实例104.1【实作项目一】利用LED作光敏电阻采样实验104.2【实作项目二】利用PWM信号控制LED亮度124.3【实作项目三】单键控制一只LED的亮灭154.4【实作项目四】利用PWM控制直流电机转速174.5【实作项目五】利用电位器手控LED亮度194.6【实作项目六】控制LED明暗交替214.7【实作项目七】利用光敏电阻控制LED的亮灭23ARDUINO入门及其简单实验(7例)1. Arduino硬件开发平台简介Arduino硬件是一块带有USB的I/O接口板(其中包括13条数字I/O引脚,6通道模拟输出,6通道模拟输入),并且具有类似于Java、C语言的集成开发环境。Arduino既可以扩展一些外接的电子元器件,例如开关、传感器、LED、直流马达、步进马达或其他输入、输出装置;Arduino也可以独立运行,成为一个可以跟交互软件沟通的接口装置,例如:Flash、Processing、Max/MSP、VVVV或其他互动软件。Arduino开发环境IDE全部开放源代码,可以供大家免费下载、利用,还可以开发出更多激发人们制作欲望的互动作品。如图1和图2所示,分别为Arduino硬件平台的实物图和电路布局图。 图1 两款Arduino硬件平台实物图图2 Arduino硬件平台电路布局图1.1 Arduino的主要特色l 开放源代码的电路图设计,程序开发环境软件也免费下载,许多现成的成功制作案例也都开放,可依需求自主修改、任意裁剪。l 使用流行的高性价比的单片机(ATmega8、ATmega168或ATmega328)。l 可以采用USB接口供电,不需外接电源。也可以使用外部接入DC 9V电源适配器供电。l Arduino支持ISP在线烧写或者升级,可以自行将新的“bootloader(自举程序)”固件烧入单片机芯片。有了新版bootloader之后,可以通过串口或者USB/RS232线更新固件。l 依据官方免费提供的电路板图和电路原理图(即为Eagle格式PCB和SCH电路图),可以自主修改或者简化Arduino电路,以独立仿制或者改制Arduino开发板。可以方便地外接各种传感器、各式各样的人机接口器件。例如,红外线、超音波、热敏电阻、光敏电阻、伺服马达等功能器件。l 应用方面,利用Arduino可以突破以往只能使用鼠标、键盘、CCD等输入装置的互动内容,可以更简单地达成单人或多人游戏互动。l 支持多种互动程序,如:Flash、Processing、Max/Msp、VVVV等。1.2 Arduino的硬件接口功能描述1 数字输入/输出(Digital I/O)端子013(共14个数字输入/输出口DIO)。2 模数转换(ADC)输入端子05(共6个,可做模拟输入口AI)。3 脉宽调制(PWM)输出(Pin11,Pin10,Pin9,Pin6,Pin5,Pin3)共6个,可做模拟输出口AO。4 支持USB接头传输数据及供电(可以免用外接电源)。5 支援串口通信TX/RX端子。6 支持在线串行烧写(ICSP)功能。接线端子为6芯的排针。7 支持外部模数转换(ADC)的电压基准(AREF)端子输入。8 输入电压:USB接口提供,无须外部供电。也可由7V12V DC外部供电。9 可以向外提供电源电压:DC5V输出。10 智能核心器件采用的是型号为ATmega328的高性能单片机。11 Arduino物理尺寸:宽70mm高54mm。1.3 Arduino的技术性能参数1 核心器件:AVR系列的ATmega328(运行速度可达20MIPS);2 数字信号I/O接口端子:14(其中6个可做模拟输出接口端子);3 模拟信号输入接口端子:6个;4 数字I/O端子直流驱动电流(最大值):40mA;5 程序存储器Flash容量:32KB(其中2KB用于固化自举程序bootloader);6 数据存储器SRAM容量:1KB;7 永久数据存储器EEPROM容量:512B;8 时钟频率:16MHz;9 工作电压:+5V;10 外部输入电源电压(推荐值):7V12V;11 外部输入电源电压(极限值):+6VVin20V。1.4 电路原理图最经典的一款Arduino的电路原理图如图3所示。其电路中的核心芯片为一片ATmega328单片机。图 3 Arduino电路原理图从图中可以看出,除了核心器件单片机之外,还包含一片FT232(构成USB/UART的通信转换接口)、一片MC33269稳压器(构成稳压电源电路)、一片LM358和一只MOS晶体管2955(共同构成两路电源输入的自动切换电路)。对于初学者来说,不需要了解电路板细节,也不需要搞懂单片机,只要记住3个排针插口的局部和用途,即可快速上手实战!2. Arduino软件开发平台简介如图4所示,为Arduino(以V1.0版本为例)软件开发平台的工作界面。图4 Arduino(V1.0)软件平台2.1 菜单栏(1)File:文件下拉菜单包括的命令有:new新建、open打开、sketchbook程序薄、exampels示例、close关闭、save保存、print打印、quit退出。(2)Edit:编辑下拉菜单包括的命令有:Cut剪切、Copy复制、Copy for Forum、Paste粘贴、Select All全选等。(3)Sketch:程序(4)Tools:工具(5)Help:帮助以上命令的功能及用法跟中文说明大体一致,并附有快捷键使用方法。2.2 工具栏:校验工具按钮。实际功能为编译。:上传工具按钮。实际功能是把编译成功的机器码程序文件,加载(烧写)到单片机芯片内部的程序存储器中。:新建项目文件工具按钮。:打开现有项目文件工具按钮。:保存当前项目文件工具按钮。:打开串并口窗口按钮。2.3 Arduino 语言简介1. 程序总体架构(三个主要部分)声明变量及接口名称(例如int val;int ledPin = 13;)。void setup()初始化函数。置于程序的开头部分,每次Arduino加电或者复位,仅被执行一次。void loop()主循环函数。置于setup()函数之后,即初始化之后,loop()让你的程序循环往复、周而复始地被执行。2. 常用函数数字I/O类:l pinMode(pin,mode) 数字IO口输入输出模式定义函数,将接口定义为输入或输出接口。l digitalWrite(pin,value) 数字IO口输出电平定义函数,将数字接口值至高或低、开或关。l int digitalRead(pin) 数字IO口读输入电平函数,读出数字接口的值,pin表示为013。模拟I/O类:l int analogRead(pin) 模拟IO口读函数,从指定的模拟接口读取值。l analogWrite(pin,value) 数字IO口PWM输出函数,给一个接口写入模拟值(输出PWM波)。扩展I/O类:l shiftOut(dataPin,clockPin,bitOrder,value) SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,把资料传给用来延伸数字输出的寄存器,此函数通常使用在延伸数字输出。l unsigned long pulseIn(pin,value) 脉冲长度记录函数,设定读取脚位状态的持续时间,返回时间参数(s)。3. 时间函数l unsigned long millis() 返回时间函数(单位ms),回传单片机开始执行到目前的毫秒数。该函数是指,当程序运行就开始计时并返回记录的时间参数。该参数溢出大概需要50天时间。4. 数学函数l min(x,y) 求最小值,回传两数之间较小者。l max(x,y) 求最大值,回传两数之间较大者。5. 随机数函数l randomSeed(seed) 随机种子数设置函数,使得随机数发生器产生的随机数更加不可预测。l long random(max) 随机数返回函数,返回数据大于等于0,小于max。l long random(min,max) 随机数返回函数,返回数据大于等于min,小于max。 6. 中断使能函数l interrupts() 使能中断函数。放开中断功能。l noInterrupts() 禁止中断函数。关闭中断功能。7. 串口收发函数l Serial.begin(speed) 启用串口和定义波特率函数。设置每秒串行传输数据的速率(波特率),即指定Arduino与PC微机交换信息的速率,通常选用9600bps(比特/秒)。l Serial.print(data) 串行端口数据输出函数。将输出结果显示于PC微机端的“串口通信窗口”里。例如,Serial.print(数据),默认为十进制数据,等效于Serial.print(数据,DEC)。l Serial.println(data) 自动换行的串行端口输出数据函数。在以上函数基础上增加了回车和换行功能。l int Serial.read() 串行端口数据输入函数。读串口并返回收到的一个字节数据。3. Arduino开发实例中所用部分器件首先对于本文后面制作实例中所用到的主要器件进行简介。1. LED简介LED(Light Emitting Diode)是发光二极管的简称。这种半导体元件一般是作为指示灯、显示板,它不但能够高效率地直接将电能转化为光能,而且拥有最长达数万小时的使用寿命,同时具备不像传统灯泡易碎并省电等优点。图1为LED实物图,图2为LED内部结构。图1 LED实物图片图2 LED内部结构LED还可分为普通单色LED(红、绿、黄、蓝、白)、高亮度LED、超高亮度LED、变色LED、闪烁LED、电压控制型LED、红外LED和负阻LED等。LED特点:u 工作电压低,工作电流很小;u 适合于易变的环境,对环境无污染;u 稳定性好,可靠性高,寿命长;u 价格比较低廉,性价比高。2. 光敏电阻简介光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器。入射光强,电阻减小,入射光弱,电阻增大。光敏电阻器一般用于光照测量、光的控制和光电转换(将光的变化转换为电的变化)。图3给出了光敏电阻的实物图、结构图和电路符号。图3 光敏电阻3. 直流电机简介利用直流电压和电流来驱动的旋转电机,称为直流电机。它是一种能够把直流电能转换为旋转机械能的电机(也叫马达,Motor)。如图4所示,为一款常用于玩具中的微型直流电机的实物图。图4 直流电机实物图4. 电位器简介电位器(potentiometer)是一种最简单的模拟输入设备。它实际上就是一个可变电阻器。通过控制滑端所在的位置我们可以得到不同的电阻值或者电压值。如图5所示的用法,是从电位器的滑端提取信号,作为单片机或Arduino的模拟输入信号。图5为电位器的实物图和电路连接图。 图5 电位器的实物图和接线图4. Arduino平台应用开发实例以下针对基础薄弱的初学者或电子制作爱好者,规划设计了几个容易仿制、方便取材、简单易行、一学就会、一会就做、一做就成的实用制作项目,以便达到培养学习兴趣、激发动手欲望的功效。4.1【实作项目一】利用LED作光敏电阻采样实验实作项目简述:在本实作中,将Arduino的USB接口与PC连接起来,将一只普通LED连接到Arduino的一个模拟输入端上,观察对应的环境光的不同变化,即Arduino中模拟量采集。硬件上需要选用6个具有ADC功能的模拟I/O端子之一,硬件上需要选用analogRead()功能函数,来读取端子上的模拟量电压值,每读一次需要延迟1000ms的时间。实验电路框图:本实作的系统框图如图6所示。通过程序设计,让Arduino每1000ms进行一次A/D转换,并将结果显示于PC计算机端的“串口通信窗口”里。图6 实验系统框图实验电路原理图:本实作的实验电路图如图7所示。将Arduino的0号模拟口接至LED的阳极,LED阴极与接地端连接,USB口连接至PC计算机的一个USB口,用于传送采样数据。图7 电路原理图电路实物连接图:本实作的实物连接图如图8所示。图8 实物连接图实验程序清单:int recvpin=0;/ 为模拟端子0命名int wait=1000;/ 定义一个延时常数int val =0;/ 定义一个变量void setup()/ 初始化函数 Serial.begin(9600);/ 设置和启用串口USRTvoid loop()/ 主循环函数 val=analogRead(recvpin);/ 读取模拟端子,存于变量中 Serial.println(DETECT:);/ 串口输出给PC一个字符串 Serial.println(val);/ 串口输出给PC变量的内容 delay(wait);/ 等待一个预定的延迟时段4.2【实作项目二】利用PWM信号控制LED亮度实作原理简介:本实作中我们将用模拟输出来调节发光二极管(LED)亮度。由于LED的亮度与施加的电压有关,因此可以通过控制电压来达到调节亮度的目的。具体这里采用的方法是,产生和输出一个PWM信号给LED。为了消除PWM信号中的脉动成分,以避免闪烁现象,在此还设置了一个阻容(RC)低通滤波器,其原理非常简单,只需要一个电阻和一个电容。图9 经过低通滤波驱动LED由于Arduino的微控制器只能产生高电压(5V)或者低电压(0V),而不能产生变化的电压,因此必须采用脉宽度调制技术(PWM,Pulse Width Modulation)来模仿模拟电压。在Arduino数字I/O端子9、10和11上,我们可以通过analogWrite()函数来产生模拟输出。该函数有两个参数,其中第一个参数是要产生模拟信号的端子(9、10或者11);第二个参数是用于产生模拟信号的脉冲宽度,取值范围是0到255。脉冲宽度的值取0可以产生0V的模拟电压,取255则可以产生5V的模拟电压。不难看出,脉冲宽度的取值变化1,产生的模拟电压将变化0.0196V(5/255 = 0.0196)。实验电路原理图:本实作的实验电路原理图如图10所示。从图中可见,LED连接的是D11端子。图10 电路原理图电路实物连接图:本实作的电路实物图如图11所示。图11 实验实物图实验程序清单:int ledPin = 11;/设定控制LED的数字I/O脚int potPin = 0;byte bright_table = 30, 30, 30, 40, 50, 60, 70, 80, 90, 100,110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 250, 240, 230, 220, 210, 200, 190, 180, 170, 160, 150, 140, 130, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 30, 30 ;int MAX = 50;int count = 0;int val = 0;/定义val变量的初始值void setup() analogWrite(ledPin, bright_tablecount);/把bright_tablecount中的值写入到ledPin中 count +;if (count MAX) count = 0; val = analogRead(potPin);/从传感器读取值 val = val /4; delay(val);该实作通过调用analogWrite()函数,在数字I/O端口的11号端子上模仿输出一个模拟电压给LED,每产生一次输出后都设置了相应的延时。在此实验中,我们可以观察到发光二极管逐渐变亮后再逐渐变暗的效果。4.3【实作项目三】单键控制一只LED的亮灭实验功能简介:本实作使用按键来控制LED的亮或者灭。一般情况是直接把按键开关串联在LED的电路中来开关,这种应用情况比较单一。这次实验通过间接的方法来控制,按键接通后判断按键电路中的输出电压,如果电压大于4.88V,就使给LED电路输出高电平,反之就输出低电平。使用逻辑判断的方法来控制LED亮或者灭,此种控制方法应用范围较广。连接方法如图12所示。按键开关SW的一端连接5V,另一端串联一个10k电阻到接地,中头连接D11号端子;LED阳极串联220限流电阻后连接D9端子,阴极连接到地。如果手不按下开关,LED被点亮;而当开关被按下时,LED被熄灭。实验电路原理图:本实作的实验电路原理图如图12所示。图12 电路原理图电路实物连接图:本实作的电路实物连接图如图13所示。图13 实验实物图实验程序清单:int ledPin = 9;int switchPin = 11;int value = 0;void setup() pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT);void loop() value = digitalRead(switchPin);if (HIGH = value) digitalWrite(ledPin, LOW); /熄灭LED else digitalWrite(ledPin, HIGH); /点亮LED 4.4【实作项目四】利用PWM控制直流电机转速实作项目简述:在本实作中,利用Arduino的一个模拟输出端子,连接功率驱动电路,然后驱动一只直流电机。通过改变施加到电机上的模拟电压,来控制电机的转速,自动按周期性三角波规律变化:从慢到快,从快到慢,从慢到快,从快到慢,实验电路原理图:本实作的实验电路原理图如图14所示。将Arduino的9号模拟端子连接驱动电路。驱动电路由一只小功率三极管组成,基极串联一只限流电阻,集电极串联一只微型直流电机到5V,与电机并联的二极管用来实现续流作用,避免感性负载上的感应电压击穿三极管。图14 电路原理图电路实物连接图:本实作的电路实物连接图如图15所示。图15 实验实物图实验程序清单:int ledPin = 9; /设定9号端子接电机void setup() void loop() for(int fadeValue = 0 ; fadeValue = 0; fadeValue -=10) analogWrite(ledPin, fadeValue); delay(30); /每步延时30ms 4.5【实作项目五】利用电位器手控LED亮度 实作项目简述:在本制作中,我们将利用一只电位器来手动旋转,通过改变电位器的值来控制发光二极管的亮度。通过旋转电位器的轴,就能改变电位器中头同地之间的电阻值,从而也就能改变从模拟输入端子上所读取的模拟量的电压值。在我们的实验中,读出的模拟量被用来确定发光二极管的亮度,以反映模拟量的变化。实验电路原理图:本实作的实验电路原理图如图16所示。电位器上一共有三个管脚,两端分别连接到Arduino的5V电源和地之间,中头连接模拟输入的0号端子上。发光二极管则串联一只限流电阻之后,接到数字I/O的9号端子上。图16 电路原理图电路实物连接图:本实作的电路实物连接图如图17所示。图17 实验实物图软件算法说明:当电位器完全旋转到一头时,输入到模拟输入端子上的电压为0V,用analogRead()函数读出的值为0;当电位器完全旋转到另一头时,输入到模拟 端子上的电压为5V,此时用 analogRead()函数读出的值为1023(即为一个10位数值,210 = 1024);当电位器旋转到中间的某个位置时,输入到模拟输入端子上的电压是0V到5V之间的某个值,而用analogRead()函数读出的则是介于0到1023之间的某个对应值。驱动和改变LED的亮度,需要利用的函数为analogWrite(),而该函数所需参数为一个8位数值(28 = 256),这就需要对从电位器读出的、10位宽的值进行转换,变换成8位数值。具体思路是,直接舍弃10位数值的低端2位即可;具体方法也简单,利用算式直接除以2即可。实验程序清单:int sensorPin=A0; /定义一个模拟量输入端子int ledpin=9 ; /选择一个模拟量输出端子(连接LED)int sensorValue=0; /定义一个存储所测数据的变量void setup() /设置环境 void loop() /主循环 sensorValue=analogRead(sensorpin); /读取电位器,得10位数据analogWrite(ledpin,sensorValue/4);/把10位值转换为8位值,送出delay(100); /插入一个延时4.6【实作项目六】控制LED明暗交替实作项目简述:其工作电压一般为1.52.0V,工作电流一般为1020mA,反向击穿电压为5V。控制板逻辑电路供电为5V。根据以上参数假设LED工作电压选用1.7V,工作电流选用15mA,限流电阻=(总电压-LED电压)/电流,所以限流电阻=(5-1.7)/0.015=220。笔者使用的平台为WIN7 32位操作系统,如果大家使用的是其他平台,按照对应的下载就可以。arduino.exe是程序的启动文件,driver目录是控制板USB芯片驱动,USB接上控制板后如果要寻找驱动,把目录指定到这里就可以。本次实验所用到的器材为一个电路板,一个LED,一个220的电阻,几根导线,本次实验的连接方法如18图,LED两个针脚有一长一短,短的是连接GND,长的是连接正极。在LED的长引脚前,需要添加一个220的限流电阻。连接数字5号接口。通过面包板把个个电子器件连接好以后,接上USB线,设置好控制板型号、端口号。实验电路原理图:本实作的实验电路原理图如图18所示。图18 电路原理图电路实物连接图:本实作的电路实物连接图如图19所示。图19 实物连接图实验程序清单:int ledPin=5; /设定控制LED的数字输出端子 void setup() /初始化函数 pinMode(ledPin,OUTPUT); /设定数字端子的模式为输出void loop() /主循环函数 digitalWrite(ledPin

温馨提示

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

最新文档

评论

0/150

提交评论