Arduino教程及简明例程_第1页
Arduino教程及简明例程_第2页
Arduino教程及简明例程_第3页
Arduino教程及简明例程_第4页
Arduino教程及简明例程_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、1Arduino教教程程一一: 数数字字输输出出Arduino, 教程 11 Comments Arduino 的数字 I/O 被分成两个部分,其中每个部分都包含有 6 个可用的 I/O 管脚,即管脚 2 到管脚 7 和管脚 8 到管脚 13。除了管脚13 上接了一个 1K 的电阻之外,其他各个管脚都直接连接到 ATmega 上。我们可以利用一个 6 位的数字跑马灯,来对 Arduino 数字I/O 的输出功能进行验证,以下是相应的原理图:电路中在每个 I/O 管脚上加的那个 1K 电阻被称为限流电阻,由于发光二极管在电路中没有等效电阻值,使用限流电阻可以使元件上通过的电流不至于过大,能够起到

2、保护的作用。该工程对应的代码为:int BASE = 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; 7 val = analogRead(potPin); val = val /4; delay(val);该工程调用 analogWrite()函数在数字 I/O 端口的 11 号管脚上模仿模拟输出,每产生一次输出后都设置了相应的延时,而延时的长度由

3、模拟输入端口 0 号管脚上的电位器来决定。通过调整电位器的位置,我们可以观察到发光二极管逐渐变亮后再逐渐变暗的效果。Arduino教教程程五五: 串串口口输输出出Arduino, 教程 No Comments 在许多实际应用场合中我们会要求在 Arduino 和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。在 PC 机上上最常见的串行通信协议是 RS-232 串行协议,而在各种微控制器(单片机)上采用的则是 TTL 串行协议。由于这两者的电平有很大的不同,因此在实

4、现 PC 机和微控制器的通信时,必须进行相应的转换。完成 RS-232 电平和 TTL 电平之间的转换一般采用专用芯片,如 MAX232 等,但在 Arduino 上是用相应的电平转换电路来完成的。根据 Arduino 的原理图我们不难看出,ATmega 的 RX 和 TX 引脚一方面直接接到了数字 I/O 端口的 0 号和 1 号管脚, 另一方面又通过电平转换电路接到了串口的母头上。因此,当我们需要用 Arduino 与 PC 机通信时,可以用串口线将两者连接起来;当我们需要用Arduino 与微控制器(如另一块 Arduino)通信时,则可以用数字 I/O 端口的 0 号和 1 号管脚。串

5、行通信的难点在于参数的设置,如波特率、数据位、停止位等,在 Arduino 语言可以使用 Serial.begin()函数来简化这一任务。为了实现数据的发送,Arduino 则提供了 Serial.print()和 Serial.println()两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。在这一实验中没有用到额外的电路, 我们只需要用串口线将 Arduino 和 PC 机连起来就可以了,相应的代码为:void setup() Serial.begin(9600);void loop() Serial.println(Hello World!); de

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

7、手段;-)9Arduino教教程程六六: 串串口口输输入入Arduino, 教程 1 Comment 串行通信是在实现在 PC 机与微控制器进行交互的最简单的办法。之前的 PC 机上一般都配有标准的 RS-232 或者 RS-422 接口来实现串行通信,但现在这种情况已经发生了一些改变,大家更倾向于使用 USB 这样一种更快速但同时也更加复杂的方式来实现串行通信。尽管在有些计算机上现在已经找不到 RS-232 或者 RS-422 接口了,但我们仍可以通过 USB/串口或者 PCMCIA/串口这样的转换器,在这些设备上得到传统的串口。通过串口连接的 Arduino 在交互式设计中能够为 PC 机

8、提供一种全新的交互方式,比如用 PC 机控制一些之前看来非常复杂的事情,像声音和视频等。很多场合中都要求 Arduino 能够通过串口接收来自于 PC 机的命令,并完成相应的功能,这可以通过 Arduino 语言中提供的 Serial.read()函数来实现。在这一实验中我们同样不需要任何额外的电路,而只需要用串口线将 Arduino 和 PC 机连起来就可以了,相应的 Arduino 工程代码为:int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() val

9、= Serial.read(); if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW);10 把工程下载到 Arduino 模块中之后,在 Arduino 集成开发环境中打开串口监视器并将波特率设置为 9600,然后向 Arduino 模块发送字符 H,如下图所示:该工程运行起来之后会不断调用 Serial.read()函数从串口获得数据。Arduino 语言提供的这个函数是不阻塞的,也就是说不论串口上是否真的有数据到达,该函数都会立即返回。Serial.rea

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

11、; Serial.begin(9600); void loop() val = Serial.read(); if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); Serial.print(Available: ); Serial.println(Serial.available(), DEC); 11函数 Serial.available()的功能是返回串口缓冲区中当前剩余的字符个数,按照 Arduino 提供的该函数的说明,串口缓冲区中最多能缓冲 128

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

13、e 模块通过无线通道接收到数据时,通过读串行接口可以很方便地获得这些数据。原理弄清楚之后,其实我们可以将 XBee 模块看成是 Arduino 的串口,通过相应的串口操作函数来实现数据的接收和发送。首先请按照 Arduino XBee 模块使用手册中的说明配置好你的两个 XBee 模块,然后将相应的跳线连接到 XBEE 一端:这里我们使用一个最简单的工程来进行相应的实验:int ledPin = 13;int val;void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600);void loop() / send data to anoth

14、er XBee module Serial.print(A); delay(1000);12 / receive data from another XBee 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模块接收到。紧接

15、着再通过 Serial.read()函数从 XBee 模块读取从无线网络接收到的数据,如果是字母 A 的话,则点亮相应的发光二极管。将该工程编译并分别下载到两个 Arduino 模块中,注意下载的时候不要连接 XBee 扩展板,这是因为 XBee 模块会占用串口,从而导致下载无法正确完成。下载完成后将 XBee 扩展板连接到 Arduino 上,并分别给两者上电。这两个 Arduino 模块都会向对方发送字母 A,然后从对方接收字母 A,并对点亮数字 I/O 管脚 13 上连接的发光二极管。你可以试着将两个模块放在房间里的不同位置,来对 XBee 模块的传输性能进行测试。Arduino电电机机

16、驱驱动动扩扩展展板板Arduino, 基本电路, 教程 11 Comments 除了使用传感器对各种外部物理量进行感知之外,能够对实际物体的运动进行相应的控制也是互动设计中不可或缺的一部分。在所有这类动力装置中,电机显然是最常见、最基本、最便宜的解决方案了,常用的电机的种类有很多种,如直流电机,步进电机,伺服电机,减速电机等,并且每一种电机的控制方法都有所不同。如果你是一个电子高手,控制普通的直流电机用几个三极管就行了,否则话像 L293 这样的芯片将是一个更好的选择。L293 芯片的核心是两个 H-桥,所有的 H-桥芯片都具有如下一些引脚:13逻辑输入 逻辑电压 电源电压 电源输出 地 其中

17、逻辑电压引脚采用与微控制器相同的电压和电流,电源电压采用与运行电机所需要的电压和电流。逻辑输入引脚连接到用来向H-桥输出控制信号的微控制器上的引脚,而电源输出引脚则连接到电机上。这么专业的术语翻译到 Arduino 上可以这样来理解。首先,我们需要两套电源,一套用来给 Arduino 供电,一套用来给电机供电。其次,我们需要用到 Arduino 的数字 I/O 管脚来控制 L293,并把电机接到 L293 上接受控制。说到这里,正好解释一下 Arduino 的供电系统,通常 Arduino 有三种供电方式:USB 供电 电池供电 变压器供电 后两者在 Arduino 上统称为外部供电。供电方式

18、的选择是通过 Arduino 上的电源选择跳线来实现的,当把跳线接到“USB”一端时,采用的是 USB 供电方式,这时整个 Arduino 及其附属电路上的电源都由 PC 的 USB 接口提供,此时电流一般比较小,只能驱动功率比较小的电路,如 LED 等。当把跳线接到“EXT”一端时,采用的是外部供电方式,这时一般能够驱动比较大的设备,如电机等。Arduino内部一套电源转换电路,可以用来将外部供电时的电压(6-12V)转换成内部所需要的 5V 电压,使用 L293 控制电机正是需要这两套电源。下面这个就是基于 L293D 芯片的 Arduino 专用电机驱动扩展板,它能够用来驱动两个直流电机

19、。使用该扩展板来驱动直流电机非常简单,只需要将扩展板插到 Arduino 上,同时将直流电机连接到扩展板上的 motors 引脚上就可以了。14正如上面所提到的,此时应该采用 Arduino 的外部供电方式,并使用变压器或者电源为 Arduino 提供电力。这里我选用的是 9V 变压器和 9V 的直流电机:电机扩展板上 motors 引脚的上面两针是用来接电机 1 的,下面两针是用来接电机 2 的。15电路连接好之后,剩下的工作就是如何用程序进行控制了。使用这一扩展板我们能够控制直流电机的转动方向和转动速度,其中对转动方向的控制是通过 Arduino 上的数字 I/O 引脚 12 和 13 来

20、实现的,对转速的控制则是通过数字 I/O 引脚 9 和 10 来实现的。如果要控制直流电机 1,我们需要向引脚 9 输出相应的 PWM 信号来控制电机的速度,同时设置引脚 12 和 13 的高低电压来控制电机的方向。如果要控制直流电机 2,则需要向引脚 10 输出相应的 PWM 信号来控制电机的速度,此时也是通过设置引脚 12 和 13 的高低电压来控制电机的方向的。电机扩展板上带有 S1 和 S2 两个按钮,分别对应于 Arduino 数字 I/O 的 7 号和 6 号管脚 ,并且在按下时为低电平。因此我们可以像下面的程序这样利用 S1 来控制电机 1 的正反转:int switchPin

21、= 7; / switch pinint dir1Pin = 12; / direction 1int dir2Pin = 13; / direction 2int speedPin = 9; / spped pinvoid setup() pinMode(switchPin, INPUT); pinMode(dir1Pin, OUTPUT); pinMode(dir2Pin, OUTPUT); pinMode(speedPin, OUTPUT);void loop() / switch is pressed if (digitalRead(switchPin) = LOW) / set sp

22、ped analogWrite(speedPin, 250); / set direction digitalWrite(dir1Pin, LOW);16 digitalWrite(dir2Pin, HIGH); else analogWrite(speedPin, 100); digitalWrite(dir1Pin, HIGH); digitalWrite(dir2Pin, LOW); 在将上述程序下载到 Arduino 上并运行起来之后,我们就可以通过按 S1 键,来改变电机的旋转速度和方向了:)P.S. 在调试这一电机扩展板的奇遇是,在将其插入到 Arduino Diecimila 的

23、贴片版本上时,发现 MC33269 异常热,并且电机偶尔才能工作。进一步设计发现如果把整个扩展板很好地插入到 Arduino 上时,5V 和 Gnd 之间居然是短路的。一开始并没有发现问题在哪,后来才发现扩展板上的电容 C9 与 USB 接头的外壳短路了!将其锡去掉一下,并抬高扩展板时问题得到解决。实际使用时请检查下图电容下面的引脚是否与 USB 接口的外壳短路了,特别是对于贴片版本来讲,最好在通电前用万用表检查一下 5V 和 Gnd 之间的电阻值:)Arduino下下载载线线使使用用手手册册Arduino, DIY, 手册 3 Comments Arduino 使用的是 Atmel 公司的

24、AVR 单片机,一般为 ATmega8 和 ATmega168,这一系列的单片机都支持 ISP(In System Programmability )编程,无需依赖昂贵的编程器就可以完成程序的下载。Arduino 电路在设计上考虑到了 ISP 功能,也留出了相应的接口(ICSP),从而允许我们通过 ISP 下载线来完成 bootloader 的下载。新买来的 Arduino 模块上一般都已经预先下载好了 bootloader,因此上电之后就能够直接通过 Arduino 集成开发环境下载相应的Arduino 程序。正常情况下我们在用 Arduino 时是不需要 ISP 下载线的,但在某些情况下可

25、能会出现在 Arduino 集成开发环境中无法正常下载程序的现象,这很可能是由于 bootloader 受损所致。解决的办法就是重新将 bootloader 烧写到 ATmega 芯片中,此时你就需要用到这里介绍的 ISP 下载线了。17Arduio 网站上给出的并口下载线电路我只成功地更新过 ATmega8 的 bootloader,而无法为 Diecimila 上的 ATmega168 下载bootloader。此外,Arduino 给出的这一下载线电路过于简单,没有做相应的隔离和保护, 经常使用可能会对 Atmega 芯片带来一定的损害。AVR 建议使用一片 74HC244 来隔离并口和

26、 ATmega 芯片,下面是我所使用的下载线的原理图:以及自制的下载线:使用并口下载线的时候,我们需要先到计算机的 BIOS 中将并口设为 ECP(The extended capabilities port )模式,同时将 I/O基地址设置成 378:18此时在 Windows 的设备管理器中,我们会发现并口已经被标记为“ECP 打印机端口”:用鼠标右键单击后从弹出的菜单中选择“属性”命令打开属性对话框,在“资源”页面中我们会看到相应 I/O 基地址的设置已经生效:现在就可以用 ISP 下载线连接计算机并口和 Arduino 上的ICSP 接口了,请特别留意连接方向:ISP 下载线六口插座上

27、标有小三角的一端应该靠近 Arduino 的 ICSP 接口上标为 1的一端。虽然计算机并口能够为下载电路提供一定的电压,但一般我还是建议给 Arduino 模块加上 5V 电压(通过 USB线和外接电源都可以),以保证下载过程的稳定。硬件准备好之后,我们就可以通过相应的软件将 bootloader烧到 Arduino 中。支持 AVR 下载线的软件比较多,如AVRDUDE 和 SLISP 等,我们在这里使用的是 PonyProg。下载并安装好 PonyProg v2.07a BETA 版本,启动 PonyProg 时会提示你进行相应的校准和设置工作。首先选择“Setup”菜单中的“Calib

28、ration”命令进行校准,然后再选择“Setup”菜单中的“Intreface Setup”命令进行相应的并口设置:根据你的 Arduino 模块上的芯片类型,从“Device” 菜单中的“AVR micro”子菜单中选择“ATmega8”或者“ATmega168”。你也可以从工具栏上的 Device 下拉框中进行相应的选择:19首先从“Command”菜单中选择“Read All” 命令,从 Arduino 模块上读出 ATmega 中的当前数据和设置,其中最重要的是之后要设置的熔丝位。然后选择“File”菜单中的“Open Program (FLASH) File” 命令,打开“Open

29、 program (FLASH) content file”对话框。从你的 Arduino安装目录下找出对应于的 bootloader。对于 Arduino 0010 版本来讲,我们可以在 hardwarebootloaders 目录下找到 atmega8 和atmega168 两个目录,分别对应 ATmega8 和 ATmega168 芯片所对应的 bootloader(文件扩展名为.hex),在 atmega168 目录下可以找到 ATmegaBOOT_168_diecimila.hex 和 ATmegaBOOT_168_ng.hex 两个文件,分别对应 Diecimila 和 NG 模块

30、。你需要根据你的Arduino 模块的具体情况,加载相应的 bootloader 文件。AVR 通过熔丝来控制芯片内部的一些功能,比如 JTAG,时钟的使用,掉电检测电压,是否允许调试等。熔丝位的配置是为 Arduino下载 bootloader 过程中最复杂的一步,而且设置出错很有可能导致芯片锁死,所以一定要仔细。选择“Command”菜单中的“Security and Configuration Bits ”命令,打开相应的熔丝设置对话框。Arduino 的 bootloader 对熔丝位有一定的要求,主要是同外部时间设置相关的。对于串口模块采用的 ATmega8 来讲,相应的熔丝字节要设

31、置成 0 xCA(Fuse High Byte)和 0 xFF(Fuse Low Byte),具体每位的含义可以参见 Wolf Paulus 的文章。在 PonyProg 中对ATmega8 的熔丝位设置为下图所示:对于 NG 和 Diecimila 采用的ATmega168 来讲,相应的熔丝字节要设置成 0 xF8(Extended Fuse Byte), 0 xDF(Fuse High Byte)和 0 xFF(Fuse Low Byte)。在 PonyProg 中对ATmega168 的熔丝位设置为下图所示:熔丝位设置好之后,选择“Command”菜单中的“Write All”命令,将b

32、ootloader 下载到 Arduino 中。下载过程中 Arduino 上的发光二极管 L 会不断闪烁。下载完成之后,我们可以通过Arduino 集成开发环境下载一个Arduino 工程,来验证新下载的 bootloader 是否能够正常工作。DIY Arduino: Hello WorldArduino, DIY No Comments 终于要开始写第一个 Arduino 程序了,就跟之前学习所有语言一样,第一个程序自然是 Hello World 了。不过这次有点特殊,要让Arduino 显示一个“Hello World”字符串恐怕有点难度,这是因为 Arduino 模块上没有提供任何可

33、供显示字符的设备。而这对 Arduino新手来讲,也就意味着程序的调试将是一个令人头疼的问题。最简单的办法是在 Arduino 提供的数字端口(Digital I/O)上连接发光二极管,然后通过控制发光二极管的亮灭来表明程序的当前运行状态,这的的确确可以算得上是最原始的调试方法。20我的第一个 Arduino 程序正是要通过对数字 I/O 的 13 号管脚的控制,来实现与其相连的发光二极的亮灭。之所以要选择 13 号管脚步,是因为从原理图上可以看出该管脚与 ATmega 的引脚之间连接了一个 1K 的电阻,能够起到限流的作用,以保护二极管不被烧坏。发光二极管是有正负极性的,因此必须连接正确才能

34、够让其正常发光。刚买来的发光二极腿比较长的一端是正极,需要接在 Arduino数字 I/O 的 13 号管脚上;腿比较短的一端是负极,需要接在 GND 管脚上。运行 Arduino 的集成开发环境,选择 File-New 菜单创建一个新的 Arduino 工程接着在 Arduino 集成开发环境的主窗口中输入相应的代码:int ledPin = 13;void setup() pinMode(ledPin, OUTPUT);void loop()21 digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); dela

35、y(1000);不难看出,一个最简单的 Arduino 程序至少要实现两个函数:setup()和 loop()。其中 setup()这个函数主要用来完成相应的初始化工作,在上面的例子中是将数字 I/O 的 13 号管脚设置为数字输出。loop()这个函数则是 Arduino 程序的主函数,相当于 C 语言中的main()函数,一个 Arduino 程序要完成的主要功能都在该函数中实现,在上面的例子中是通过变换 13 号管脚的高低电平,并设置一秒的延时,从而使发光二极管能够间歇性地不断亮灭。从原理上讲,用 Arduino 语言编写的程序最后会被翻译成相应的 C 代码,再用 AVR-GCC 编译后

36、下载到 ATmega 单片机中运行。因此设计 Arduino 语言的目的就是简化单片机编程,虽然这样效率上会有一些损失,但却能够极大地促进单片机在更广泛领域内的使用,基本上算是沿袭了 PC 机上软件设计语言从汇编语言到 C 语言再到高级语言这一过程,因此很多技术和做法其实可以借鉴。用 Arduino 语言编写的代码需要先验证(Verify),以保证语法的正确性,然后再编译生成相应的机器码。对 Arduino 代码的验证可以通过 Sketch-Verify/Compile 菜单命令完成,也可以通过工具栏上的按钮完成:代码成功通过验证和编译之后,就可以将其下载到 Arduino 模块中了。由于昨天

37、已经将 bootloader 成功地烧写到了 ATmega 中,因此下载 Arduino 应用的任务就可以完全交由 bootloader 来完成了。Arduino 的 bootloader 与集成开发环境的交互是通过串口来完成的,因此需要用串口线将 Arduino 与 PC 机的串中连接起来。我的串口线是自制的,按照 Arduino 的原理图,只需要接 2,3 和 5 三根线,其中前两根用于数据的收发,最后一根是地线。串口线连接好之后,在 Arduino 集成开发环境的 Tools-Serial Port 菜单下选择与 PC 相连的串口:一开始我很奇怪为什么没有设置波特率和其它串行通信参数的地

38、方,后来在 Arduino 的网站上才知道这些参数都保存在一个名为preferences.txt 的配置文件中,该文件一般保存在类似于 C:Documents and SettingsAdministratorApplication DataArduino 这样的目录下。下面是我在该文件中找到的与串口通信相关的一些参数:serial.stopbits=1serial.databits=8serial.download_rate=19200serial.parity=N不难看出,Arduino 模块采用的是 19200 8N1 方式来进行串口通信的。确定了这些之后,按下 Arduino 模块的复

39、位按钮,随后立即执行 File-Upload to I/O Board 菜单命令将编译好的程序下载到 Arduino 模块中。Arduino 的 bootloader 被设计成如果在给定的时间(通常有 7 到 8 秒)内没有接收到任何来自集成开发环境的命令,就自动运行之前已经下载的程序,所以我们必须保证在正确的时间段内给 Arduino 模块发送程序下载的指令。除了通过菜单命令外,下载程序也可以通过快捷键 Ctrl+U,或者直接点击工具栏上的相应按钮来完成:22将 Arduino 程序上传到 Arduino 模块中需要花一些时间,并且取决于工程的大小。当程序上传成功之后,可以在 Arduino

40、 集成开发环境的 console 窗口中看到上传后的程序大小,以及该 Arduino 模块能够接受的最大程序的大小:现在再次复位 Arduino 模块,会看到发光二极管立即闪了一下,表明 bootloader 正常工作了。接着再过一段时间,大约 7 到 8 秒,会看到发光二极管间歇性地不断亮灭,这就表明第一个 Arduino 程序已经成功地运行起来了,CONGRATULATIONS!我在这期间遇到的唯一问题是刚开始的时候无法通过串口线下载程序,最初怀疑是串口通信的问题,后来慢慢排查发现 Arduino 模块能够从串口收数据,但却无法从串口发数据。仔细检查了硬件发现原来我在 Arduino 模块

41、上接的是串口的公头,自然收发的两条线没有同 PC 机完全正常地连接上,后来换成一个母头就一切正常了。这一过程中的另一收区是仔细读了 Arduino 关于串口部分的原理图,原来这部分还是一个实用的 TTL 转 232 的电平转换电路,其中只用到了电阻、二极管和三极管,省去了一个 MAX232 芯片。至此,DIY Arduino 模块的工作算是暂告一段落,剩下的是如何对各个硬件功能进行详细的验证,这可以结合实际的项目来完成。我计划下一步做一些简单的 Arduino 工程,大部分可能都来源于 Arduino 网站或者是网上收集到的资料,以验证我的 Arduino 模块,同时也可以当作入门的教程供大家

42、参考。AUG 26DIY Arduino: PCB和和焊焊接接Arduino, DIY 7 Comments 读了一些有关 Arduino 的介绍性的文章之后,才知道这么一个小东东居然在国外是大红大紫,虽然没有完全想清楚其中的原因,但似乎并不妨碍自己 DIY 它的决心。Arduino 采用开放源代码的模式,其原理图和电路图都可以从其网站免费得到。在权衡比较了一番之后,我决定从其采用串口方式的版本开始,这一方面是因为原理相对简单,能够降低组装和调试的难度,另一方面则考虑到 USB 模拟的串口并不总是那么稳定。决定开工之后,花了一上午的时间画好了原理图,基本凑和吧。可轮到电路图时可就不一样了,封装

43、和走线对我这业务选手来讲的确不是件容易的事情。花了两个晚上的时间,最后还是决定放弃,因为 Arduino 官方提供的电路图在我看来确实比自己布的要漂亮多了,看来这一修养只能在随后的日子里慢慢积累了。去做电路板时遇到一些问题,由于我问到的制造电路板的厂商基本上只认 Protel,根本不知道还有 Eagle CAD 一说,甚至有人还将其与 AutoCAD 混为一谈,告诉我这个软件不是用来画电路图的。没23有办法,只好回家一顿 Google,将其生成 Gerber 文件后再将送过去。这一过程也算有点收获,除了知道何为 Gerber 文件以及如何在 Eagle CAD 中生成 Gerber 文件之外,

44、还找到了一个用来查看 Gerber 文件的好工具:CAM350。电路板从送去到拿到一般需要一周多的时间,这期间的主要任务当然是购买元器件了。一开始并没有注意到 Arduino 串口版本的元件列表,以为与 NG 版本一样也采用的是 ATmega168,问了好些地方都没得卖,最好只好高价比香港快递过来,估计贵了不止一倍。最后在组装的时候才发现原来串口版本采用的仍旧是 ATmega8,而这在村里还算是很好买到的,这一个郁闷啊!元件都准备妥当之后,电路板也做出来了,虽然不是与 Arduino 官方一致的蓝色,但还是挺漂亮的;-)将元件焊接到 PCB 板上又是一次对基本功的训练,好在这一版本的 Ardu

45、ino 采用的都是分立元件,焊接上没有遇到太大的麻烦。期间再一次深刻体会到了工具的重要性,不时幻想自己手中那把最便宜的铬铁啥里也能更新换代一下,虽然他的寿命还不到短短的一个月。焊接完成之后,万里长征估计还只完成了第一步,要让 Arduino 能够正常的运行起来,肯定还有相当多的调试和排错的工作要做,而这也正是 DIY 的乐趣所在;-)Arduino 电电子子积积木木 专专用用传传感感器器扩扩展展板板 V4Arduino, 电子积木 2 Comments 真没想到,一块传感器扩展板居然被我改到了第四版,而且估计还会继续修改下去。最初的传感器扩展板在设计的时候,只考虑到了如何将数字传感器和模拟传感

46、器很方便地连接起来。因此在最初定义数字传感器线序的时候,没有更多可以参照的地方,直到后来有人提出是否可以考虑与伺服电机(舵机)的连线顺序一样,我才很认真地考虑这一问题,并且在最新的 V4 版本上采用,原因在于:可以很方便地与舵机相连 不容易出现短路的情况,在接错钱时不会有很严重的后果 24可以与模拟传感器接口统一起来,保持通用 用这么多的好处,自然是忍不住在 V4 上做了这么一个大的修改,好处多多,但升级也会给之前的用户一些不便。最主要的影响在于数字连接线,由于连线的顺序不一样,因此混用的时候会有一定的麻烦;-) 也就是说,使用 V4 之前的传感器扩展板的用户,依旧要使用以前的数字连接线;而使用 V4 版本的用户,则需要使用另一种数字连接线(我暂时叫它通用传感器连接线)。V4 上其它的改动还包括:调用了模拟传感器座的位置 POWER 区域与最新的 Arduino 保持一致 数字传感器

温馨提示

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

评论

0/150

提交评论