Arduino教程(非常适合初学者)_第1页
Arduino教程(非常适合初学者)_第2页
Arduino教程(非常适合初学者)_第3页
Arduino教程(非常适合初学者)_第4页
Arduino教程(非常适合初学者)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上专心-专注-专业, Arduino 的数字 I/O 被分成两个部分,其中每个部分都包含有 6 个可用的 I/O 管脚,即管脚 2 到管脚 7 和管脚 8 到管脚 13。除了管脚13 上接了一个 1K 的电阻之外,其他各个管脚都直接连接到 ATmega 上。我们可以利用一个 6 位的数字跑马灯,来对 Arduino 数字I/O 的输出功能进行验证,以下是相应的原理图:电路中在每个 I/O 管脚上加的那个 1K 电阻被称为限流电阻,由于发光二极管在电路中没有等效电阻值,使用限流电阻可以使元件上通过的电流不至于过大,能够起到保护的作用。该工程对应的代码为:int BASE

2、= 2;int NUM = 6;int index = 0;void setup() for (int i = BASE; i BASE + NUM; i +) pinMode(i, OUTPUT); void loop() for (int i = BASE; i MAX) count = 0; val = analogRead(potPin); val = val /4; delay(val);该工程调用 analogWrite()函数在数字 I/O 端口的 11 号管脚上模仿模拟输出,每产生一次输出后都设置了相应的延时,而延时的长度由模拟输入端口 0 号管脚上的电位器来决定。通过调整电位

3、器的位置,我们可以观察到发光二极管逐渐变亮后再逐渐变暗的效果。精选优质文档-倾情为你奉上专心-专注-专业, 在许多实际应用场合中我们会要求在 Arduino 和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。在 PC 机上上最常见的串行通信协议是 RS-232 串行协议,而在各种微控制器(单片机)上采用的则是 TTL 串行协议。由于这两者的电平有很大的不同,因此在实现 PC 机和微控制器的通信时,必须进行相应的转换。完成 RS-232 电平和 TTL 电平之间的转换

4、一般采用专用芯片,如 MAX232 等,但在 Arduino 上是用相应的电平转换电路来完成的。根据 Arduino 的原理图我们不难看出,ATmega 的 RX 和 TX 引脚一方面直接接到了数字 I/O 端口的 0 号和 1 号管脚, 另一方面又通过电平转换电路接到了串口的母头上。因此,当我们需要用 Arduino 与 PC 机通信时,可以用串口线将两者连接起来;当我们需要用Arduino 与微控制器(如另一块 Arduino)通信时,则可以用数字 I/O 端口的 0 号和 1 号管脚。串行通信的难点在于参数的设置,如波特率、数据位、停止位等,在 Arduino 语言可以使用 Serial

5、.begin()函数来简化这一任务。为了实现数据的发送,Arduino 则提供了 Serial.print()和 Serial.println()两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。在这一实验中没有用到额外的电路, 我们只需要用串口线将 Arduino 和 PC 机连起来就可以了,相应的代码为:void setup() Serial.begin(9600);void loop() Serial.println(Hello World!); delay(1000);在将工程下载到 Arduino 模块中之后,在 Arduino 集成开发环境的工具

6、栏中单击“Serial Monitor”控制,打开串口监视器:接着将波特率设置为 9600,即保持与工程中的设置相一致:精选优质文档-倾情为你奉上专心-专注-专业如果一切正常,此时我们就可以在 Arduino 集成开发环境的 Console 窗口中看到串口上输出的数据了:为了检查串口上是否有数据发送,一个比较简单的办法是在数字 I/O 端口的 1 号管脚(TX)和 5V 电源之间接一个发光二极管,如下面的原理图所示:这样一旦 Arduino 在通过串口向 PC 机发送数据时,相应的发光二极管就会闪烁,实际应用中这是一个非常方便的调试手段;-)精选优质文档-倾情为你奉上专心-专注-专业, 串行通

7、信是在实现在 PC 机与微控制器进行交互的最简单的办法。之前的 PC 机上一般都配有标准的 RS-232 或者 RS-422 接口来实现串行通信,但现在这种情况已经发生了一些改变,大家更倾向于使用 USB 这样一种更快速但同时也更加复杂的方式来实现串行通信。尽管在有些计算机上现在已经找不到 RS-232 或者 RS-422 接口了,但我们仍可以通过 USB/串口或者 PCMCIA/串口这样的转换器,在这些设备上得到传统的串口。通过串口连接的 Arduino 在交互式设计中能够为 PC 机提供一种全新的交互方式,比如用 PC 机控制一些之前看来非常复杂的事情,像声音和视频等。很多场合中都要求 A

8、rduino 能够通过串口接收来自于 PC 机的命令,并完成相应的功能,这可以通过 Arduino 语言中提供的 Serial.read()函数来实现。在这一实验中我们同样不需要任何额外的电路,而只需要用串口线将 Arduino 和 PC 机连起来就可以了,相应的 Arduino 工程代码为:int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() val = Serial.read(); if (-1 != val) if (H = val) digitalWr

9、ite(ledPin, HIGH); delay(500);精选优质文档-倾情为你奉上专心-专注-专业 digitalWrite(ledPin, LOW); 把工程下载到 Arduino 模块中之后,在 Arduino 集成开发环境中打开串口监视器并将波特率设置为 9600,然后向 Arduino 模块发送字符 H,如下图所示:该工程运行起来之后会不断调用 Serial.read()函数从串口获得数据。Arduino 语言提供的这个函数是不阻塞的,也就是说不论串口上是否真的有数据到达,该函数都会立即返回。Serial.read()函数每次只读取一个字节的数据,当串口上有数据到达的时候,该函数的

10、返回值为到达的数据中第一个字符的 ASCII 码;当串口上没有数据到达的时候,该函数的返回值则为-1。Arduino 语言的没有对 Serial.read()函数做过多的说明,我的一个疑问是如果 PC 机一次发送的数据太多,Arduino 是否提供相应的串口缓存功能来保证数据不会丢失?Arduino 语言中提供的另外一个函数 Serial.available()或许能够帮助我们用实验来进行验证:int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() val =

11、Serial.read(); if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); Serial.print(Available: ); Serial.println(Serial.available(), DEC); 精选优质文档-倾情为你奉上专心-专注-专业函数 Serial.available()的功能是返回串口缓冲区中当前剩余的字符个数,按照 Arduino 提供的,串口缓冲区中最多能缓冲 128 个字节。我们可以一次给 Arduino 模块发送多个字

12、符,来验证这一功能:在这一实验中,每当 Arduino 成功收到一个字符 H,连接在数字 I/O 端口管脚 13 上的发光二极管就会闪烁一次:, 借助 XBee 扩展板我们可以很方便地将 XBee 模块连接到 Arduino 上,XBee 模块的工作原理也非常简单,它与 Arduino 之间其实就是通过串行接口(即 Tx 和 Rx 引脚)进行通信。对于简单的点对点通信来讲,只需要通过串行接口向 XBee 模块写数据就可以实现数据的发送;当 XBee 模块通过无线通道接收到数据时,通过读串行接口可以很方便地获得这些数据。原理弄清楚之后,其实我们可以将 XBee 模块看成是 Arduino 的串口

13、,通过相应的串口操作函数来实现数据的接收和发送。首先请按照中的说明配置好你的两个 XBee 模块,然后将相应的跳线连接到 XBEE一端:这里我们使用一个最简单的工程来进行相应的实验:int ledPin = 13;int val;void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600);void loop() / send data to another XBee module Serial.print(A);精选优质文档-倾情为你奉上专心-专注-专业 delay(1000); / receive data from another XB

14、ee module val = Serial.read(); if (-1 != val) if (A = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); 该工程首先通过 Serial.print()函数向 XBee 模块发送一个字母 A,该字母会被 XBee 模块通过无线网络发送出去,并被另外一个 XBee模块接收到。紧接着再通过 Serial.read()函数从 XBee 模块读取从无线网络接收到的数据,如果是字母 A 的话,则点亮相应的发光二极管。将该工程编译并分别下载

15、到两个 Arduino 模块中,注意下载的时候不要连接 XBee 扩展板,这是因为 XBee 模块会占用串口,从而导致下载无法正确完成。下载完成后将 XBee 扩展板连接到 Arduino 上,并分别给两者上电。这两个 Arduino 模块都会向对方发送字母 A,然后从对方接收字母 A,并对点亮数字 I/O 管脚 13 上连接的发光二极管。你可以试着将两个模块放在房间里的不同位置,来对 XBee 模块的传输性能进行测试。, , 除了使用传感器对各种外部物理量进行感知之外,能够对实际物体的运动进行相应的控制也是互动设计中不可或缺的一部分。在所有这类动力装置中,电机显然是最常见、最基本、最便宜的解

16、决方案了,常用的电机的种类有很多种,如直流电机,步进电机,伺服电机,减速电机等,并且每一种电机的控制方法都有所不同。如果你是一个电子高手,控制普通的直流电机用几个三极管就行了,否则话像 L293 这样的芯片将是一个更好的选择。L293 芯片的核心是两个 H-桥,所有的 H-桥芯片都具有如下一些引脚:逻辑输入 逻辑电压 电源电压 电源输出 地 其中逻辑电压引脚采用与微控制器相同的电压和电流,电源电压采用与运行电机所需要的电压和电流。逻辑输入引脚连接到用来向H-桥输出控制信号的微控制器上的引脚,而电源输出引脚则连接到电机上。这么专业的术语翻译到 Arduino 上可以这样来理解。首先,我们需要两套

17、电源,一套用来给 Arduino 供电,一套用来给电机供电。其次,我们需要用到 Arduino 的数字 I/O 管脚来控制 L293,并把电机接到 L293 上接受控制。说到这里,正好解释一下 Arduino 的供电系统,通常 Arduino 有三种供电方式:精选优质文档-倾情为你奉上专心-专注-专业USB 供电 电池供电 变压器供电 后两者在 Arduino 上统称为外部供电。供电方式的选择是通过 Arduino 上的电源选择跳线来实现的,当把跳线接到“USB”一端时,采用的是 USB 供电方式,这时整个 Arduino 及其附属电路上的电源都由 PC 的 USB 接口提供,此时电流一般比较

18、小,只能驱动功率比较小的电路,如 LED 等。当把跳线接到“EXT”一端时,采用的是外部供电方式,这时一般能够驱动比较大的设备,如电机等。Arduino内部一套电源转换电路,可以用来将外部供电时的电压(6-12V)转换成内部所需要的 5V 电压,使用 L293 控制电机正是需要这两套电源。下面这个就是基于 L293D 芯片的 Arduino 专用电机驱动扩展板,它能够用来驱动两个直流电机。使用该扩展板来驱动直流电机非常简单,只需要将扩展板插到 Arduino 上,同时将直流电机连接到扩展板上的 motors 引脚上就可以了。正如上面所提到的,此时应该采用 Arduino 的外部供电方式,并使用

19、变压器或者电源为 Arduino 提供电力。这里我选用的是 9V 变压器和 9V 的直流电机:精选优质文档-倾情为你奉上专心-专注-专业电机扩展板上 motors 引脚的上面两针是用来接电机 1 的,下面两针是用来接电机 2 的。电路连接好之后,剩下的工作就是如何用程序进行控制了。使用这一扩展板我们能够控制直流电机的转动方向和转动速度,其中对转动方向的控制是通过 Arduino 上的数字 I/O 引脚 12 和 13 来实现的,对转速的控制则是通过数字 I/O 引脚 9 和 10 来实现的。如果要控制直流电机 1,我们需要向引脚 9 输出相应的 PWM 信号来控制电机的速度,同时设置引脚 12

20、 和 13 的高低电压来控制电机的方向。如果要控制直流电机 2,则需要向引脚 10 输出相应的 PWM 信号来控制电机的速度,此时也是通过设置引脚 12 和 13 的高低电压来控制电机的方向的。电机扩展板上带有 S1 和 S2 两个按钮,分别对应于 Arduino 数字 I/O 的 7 号和 6 号管脚 ,并且在按下时为低电平。因此我们可以像下面的程序这样利用 S1 来控制电机 1 的正反转:int switchPin = 7; / switch pinint dir1Pin = 12; / direction 1int dir2Pin = 13; / direction 2int speedPin = 9; / spped pin精选优质文档-倾情为你奉上专心-专注-专业void setup() pinMode(switchPin, INPUT); pin

温馨提示

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

评论

0/150

提交评论