1.1 Arduino是什么
Arduino是什么?
根据维基百科,Arduino的定义如下:一种开源的单片机控制器,它使用Atmel AVR单片机,采用基于开放源代码的软硬件平台,构建开放源代码simple I/O接口板,并且具有使用类似Java,C语言的Processing/Wiring开发环境。
从维基百科对Arduino的定义中,我们可以知道Arduino不仅是一种基于Atmel AVR单片机的控制器,而且是一个开源系统,包含了硬件(Arduino控制板)、软件(Arduino IDE)以及开源社区。相比于Arduino硬件控制板,Arduino的软件及开源社区是Arduino的精髓所在。
自从2005年被推出以来,随着使用者和爱好者数量不断增加,Arduino控制器得到了快速发展。同时,Arduino设计团队不断推出各式各样、更加强大的Arduino控制器及Arduino扩展板,以满足不同使用者的应用需求。
截止到现在,Arduino开发团队已经推出的Arduino控制器有数十种之多,主要有Uno、Due、Leonardo、Mega 2560、Mega ADK、Micro、Mini、Nano、Ethernet、Esplora、ArduinoBT、Fio、Pro、LilyPad等。
除了Arduino官方设计和生产的Arduino控制器,还有很多Arduino兼容控制器。因为Arduino采用开源协议,任何人或公司均可以利用Arduino公布的文档来生产和销售Arduino控制器,唯一的要求是不能使用Arduino作为商标。
由于Arduino兼容控制器价格较低,受到国内外广大Arduino爱好者的欢迎,这从一定程度上降低了Arduino使用者的门槛和成本,进而让Arduino得到了极大推广。
1.1.1 Arduino控制器系列
由于Uno为标准板,拥有Arduino所有的基本功能,所以使用最为广泛;Mega 2560拥有较多的输入/输出管脚,适用于需要较多管脚的大型项目或实验;Leonardo带有USB接口,适用于需要USB功能的应用;Mega ADK带有USB Host接口,可以连接Android手机;Due是Arduino第一款基于32位ARM Cortex-M3核心的控制板,拥有更快的速度和更大的存储容量。Arduino兼容控制板是Arduino控制板的重要组成部分,助推了Arduino开源硬件的发展,而且价格相对低廉,易于在购物网站购买。
基于以上原因,下面主要介绍Uno、Mega 2560、Leonardo、Mega ADK、Due和兼容控制器。开发者应根据自己的使用需要和项目的需求,选择合适型号的Arduino控制器或兼容控制器。
1.Arduino Uno
Arduino Uno是Arduino USB接口系列的最新型号,也是Arduino控制板使用最广泛的型号。
Uno的处理器核心是ATmega328,它包括14路数字输入/输出接口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB接口,一个电源插座,一个ICSP接口和一个复位按钮。Arduino Uno控制器如图1-1所示。
图1-1 Arduino Uno
2.Arduino Mega2560
Arduino Mega2560也是采用USB接口的核心电路板,最大的特点就是具有多达54路数字输入/输出接口,特别适合需要大量I/O接口的设计。
Mega2560的处理器核心是ATmega2560,同时包含54路数字输入/输出接口(其中16路可作为PWM输出),16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB接口,一个电源插座,一个ICSP接口和一个复位按钮。Arduino Mega2560也兼容为Arduino Uno设计的扩展板。Arduino Mega2560控制器如图1-2所示。
图1-2 Arduino Mega2560
3.Arduino Leonardo
Leonardo是Arduino家族的新成员,最大的特点是集成了USB驱动,可以模拟鼠标或键盘的功能,与Uno有同样的外观和接口,只是将方头USB换成了Micro USB。
Leonardo的处理器核心是ATmega32u4,拥有20路数字输入/输出接口(其中7路可作为PWM输出、12路可用于模拟输入),一个16MHz晶体振荡器,一个Micro USB接口,一个DC接口,一个ICSP接口和一个复位按钮。Arduino Leonardo控制器如图1-3所示。
图1-3 Arduino Leonardo
4.Arduino Mega ADK
Arduino Mega ADK是采用USB接口的核心电路板,它与Mega2560最大的不同就是Mega ADK上多了用来与Android手机连接的一路USB主控制接口。
Mega ADK的处理器核心是ATmega2560,同时具有54路数字输入/输出接口(其中16路可作为PWM输出),16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB接口,一个电源插座,一个ICSP接口和一个复位按钮。Arduino Mega ADK控制器如图1-4所示。
图1-4 Arduino Mega ADK
5.Arduino Due
Arduino Due是第一块基于32位ARM核心的Arduino控制板,以满足需要更快速度和更大存储容量的Arduino控制板的应用需求。
Arduino Due的处理器核心是Atmel SAM3X8E,拥有54路数字输入/输出接口(其中12路可作为PWM输出),12路模拟输入,4路UART接口,一个USB OTG接口,两路DAC(数模转换),一个电源插座,一个JTAG接口,一个复位按键和一个擦写按键。Arduino Due控制器如图1-5所示。
Arduino Due与其他Arduino控制板的区别:1)使用32位ARM核心的处理器,比以往使用8位AVR核心的其他Arduino功能更加强大;2)84MHz的CPU时钟频率;3)96KB的SRAM;4)512KB的Flash;5)内部集成DMA控制器,极大地提高了运算速度。
图1-5 Arduino Due
注意 与其他Arduino有所区别,Arduino Due的工作电压为3.3V,I/O口可承载电压也为3.3V。如果使用过大的电压,比如5V加到一个I/O口,可能会损坏芯片。
6.Arduino兼容控制器
随着Arduino的不断发展,国内也出现了一大批制造Arduino兼容控制器的厂商,这也使得国内的爱好者能够以较为低廉的价格购买到Arduino兼容控制器及配件。而且在制造Arduino兼容控制器的时候,多数厂商也对Arduino原版控制器进行了合理优化和改进。
国内Arduino兼容控制器生产厂商主要有DFRobot、SeeedStudio(深圳矽递)、OpenJumper(成都智能盒子)、OCROBOT(杭州橡木桶科技)。它们生产的Arduino兼容控制器如图1-6~图1-9所示。
图1-6 DFRduino Uno R3
图1-7 Seeeduino V3.0
1.1.2 Arduino Uno控制器
Arduino Uno是Arduino的典型控制器,拥有Arduino所有的基本功能,使用最为广泛,而且本书的应用篇和项目篇都是基于Arduino Uno来设计的,所以接下来重点介绍Arduino Uno的硬件部分,其他型号Arduino控制板硬件介绍可以参考Arduino官方网站:www.arduino.cc。
图1-8 MANGO II(ATmega328P)
图1-9 Zduino Uno R3
截止到本书出版之际,Arduino Uno已经发布到第3版,最新版为Arduino Uno R3,其板载资源分布如图1-10所示。
图1-10 Arduino Uno 控制器
1.控制器
❏处理器:ATmega328
❏工作电压:5V
❏输入电压:(推荐)7~12V
❏输入电压:(范围)6~20V
❏数字I/O接口:14路(其中6路作为PWM输出)
❏模拟输入接口:6路
❏I/O接口直流电流:40mA
❏3.3V接口直流电流:50mA
❏Flash Memory:32KB(ATmega328,其中0.5KB用于Bootloader)
❏SRAM:2KB(ATmega328)
❏EEPROM:1KB(ATmega328)
❏工作时钟:16MHz
2.电源
Arduino Uno可以通过3种方式供电,而且能自动选择供电方式。
❏外部直流电源通过电源插座供电。
❏电池连接电源连接器的GND和VIN引脚。
❏USB接口直接供电。
电源引脚说明:
❏VIN:当外部直流电源接入电源插座时,可以通过VIN向外部供电;也可以通过此引脚向Uno直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源。
❏5V:通过稳压器或USB输出的5V电压,为Uno上的5V芯片供电。
❏3.3V:通过稳压器产生的3.3V电压,最大驱动电流50mA。
❏GND:电源负极。
3.存储器
ATmega328拥有片上32KB Flash,其中0.5KB用于Bootloader,同时还有2KB SRAM和1KB EEPROM。通常情况下,Arduino的存储空间即其主控芯片所集成的存储空间,也可以通过使用外设芯片的方式扩展Arduino的存储空间。
❏Flash:32KB。其中0.5KB分作BOOT区,用于储存引导程序,实现串口下载程序的功能,另外的31.5KB作为用户存储程序的空间,可以满足一般的应用设计。
❏SRAM:2KB。SRAM相当于计算机的内存,在CPU运算时,需要在其中开辟一定的存储空间。当Arduino断电或者复位后,其中的数据都会丢失。
❏EEPROM:1KB。EEPROM全称为电可擦写可编程只读存储器,是一种用户可更改的只读存储器,特点是Arduino断电或者复位后,其中的数据不会丢失。
4.输入/输出
❏14路数字输入/输出接口:工作电压为5V,每一路输出或输入的最大电流为40mA。每一路配置了20~50kΩ的内部上拉电阻(默认不连接)。除此之外,有些引脚有特定的功能,具体说明如下:
❏串口信号RX(0号)和TX(1号):与内部ATmega16U2USB-to-TTL芯片相连,提供TTL电压水平的串口接收信号。
❏外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。
〇脉冲宽度调制PWM(3、5、6、9、10、11):提供6路8位PWM输出。
〇SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
〇LED(13号):Arduino专门用于测试LED的保留接口,输出为高时点亮LED,反之,输出为低时熄灭LED。
❏6路模拟输入A0~A5:每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0~5V,可以通过AREF调整输入上限。除此之外,有些引脚有特定功能。
〇TWI接口(SDA A4和SCL A5):支持通信接口(兼容I2C总线)。
❏AREF:模拟输入信号的参考电压。
❏Reset:信号为低时复位单片机芯片。
5.通信接口
❏串口:ATmega328内置的UART可以通过数字口0(RX)和1(TX)与外部实现串口通信;ATmega16U2可以通过访问数字口0和1实现USB上的虚拟串口。
❏TWI(兼容I2C)接口:A4(SDA)、A5(SCL),可用于TWI通信,兼容I2C通信。
❏SPI接口:10(SS)、11(MOSI)、12(MISO)、13(SCK),可用于SPI通信。