Arduino UNO的原理图:https://www.arduino.cc/en/Main/ArduinoBoardUno

原理图PDF:https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。UNO已经发布到第三版,与前两版相比有以下新的特点:

在AREF处增加了两个管脚SDA和SCL,支持I2C接口;增加IOREF和一个预留管脚,将来扩展板将能兼容5V和3.3V核心板。
改进了复位电路设计
USB接口芯片由ATmega16U2替代了ATmega8U2
概要

处理器 ATmega328
工作电压 5V
输入电压(推荐) 7-12V
输入电压(范围) 6-20V
数字IO脚 14 (其中6路作为PWM输出)
模拟输入脚 6
IO脚直流电流 40 mA
3.3V脚直流电流 50 mA
Flash Memory 32 KB (ATmega328,其中0.5 KB 用于 bootloader)
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
工作时钟 16 MHz
电路图和PCB

所有的参考设计是基于Atmega8,168,or 328,他们的管脚是兼容的

电路图 http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
硬件设计文件(Eagle文件) http://arduino.cc/en/uploads/Main/arduino_Uno_Rev3-02-TH.zip
电源

Arduino UNO可以通过3种方式供电,而且能自动选择供电方式

  • 外部直流电源通过电源插座供电。
  • 电池连接电源连接器的GND和VIN引脚。
  • USB接口直接供电。

电源引脚说明

VIN --- 当外部直流电源接入电源插座时,可以通过VIN向外部供电;也可以通过此引脚向UNO直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源。
5V --- 通过稳压器或USB的5V电压,为UNO上的5V芯片供电。
3.3V --- 通过稳压器产生的3.3V电压,最大驱动电流50mA。
GND --- 地脚。
存储器

ATmega328包括了片上32KB Flash,其中0.5KB用于Bootloader。同时还有2KB SRAM和1KB EEPROM。

输入输出

14路数字输入输出口:工作电压为5V,每一路能输出和接入最大电流为40mA。每一路配置了20-50K欧姆内部上拉电阻(默认不连接)。除此之外,有些引脚有特定的功能
串口信号RX(0号)、TX(1号): 与内部 ATmega8U2 USB-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:信号为低时复位单片机芯片。

通信接口

  1. 串口:ATmega328内置的UART可以通过数字口0(RX)和1(TX)与外部实现串口通信;ATmega16U2可以访问数字口实现USB上的虚拟串口。
  2. TWI(兼容I2C)接口:
  3. SPI 接口:

下载程序

Arduino UNO上的ATmega328已经预置了bootloader程序,因此可以通过Arduino软件直接下载程序到UNO中,参见[[]]。
可以直接通过UNO上ICSP header直接下载程序到ATmega328,参见[[]]。
ATmega16U2的Firmware(固件)也可以通过DFU工具升级,参见[[]]。注意要点
Arduino UNO上USB口附近有一个可重置的保险丝,对电路起到保护作用。当电流超过500mA是会断开USB连接。
Arduino UNO提供了自动复位设计,可以通过主机复位。这样通过Arduino软件下在程序到UNO中软件可以自动复位,不需要在复位按钮。在印制板上丝印"RESET EN"处可以使能和禁止该功能。
【Arduino Mega2560】

基于ATmega2560的主控开发板,采用USB接口
具有54路数字输入/输出口,16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。
工作电压:5V 推荐输入电压范围:7-12V; 输入电压范围:6-20V; 数字输入输出口:54 ;模拟输入输出口:16 ;每个I/O口的输出电流:40mA; 3.3V管脚的输出电流:50mA; 内存空间:256KB; SRAM:8KB; EEPROM:4KB; 时钟频率:16MHz

输入输出:

54路接口都可作为输入输出,并使用pinMode(), digitalWrite()和digitalRead(),5V电压,每个IO口最大电流40mA,并且接口内置20-50千欧上拉电阻

Serial 串口:Serial 0:0 (RX) and 1 (TX);Serial 1: 19 (RX) and 18 (TX);Serial 2: 17 (RX) and 16 (TX);Serial 3: 15 (RX) and 14 (TX).SoftwareSerial library,通信时数据灯会闪烁

External Interrupts(外部中断):2 (interrupt 0),3 (interrupt 1),18 (interrupt 5),19 (interrupt 4),20 (interrupt 3),21 (interrupt 2)每个引脚都可配置成低电平触发,或者上升、下降沿触发。详见attachInterrupt()功能。

PWM脉冲调制:2-13, 44-46; 提供8位PWM输出,有analogWrite()功能函数实现。

SPI(串行外设接口): 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)。使用SPI  library库实现。是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线。SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。

板载LED:13引脚。这是板上自带的LED灯,高电平亮,低电平灭。

TWI:20 (SDA) 和21 (SCL)。使用Wire library实现功能。对I^2C总线接口的继承和发展,完全兼容I^2C总线,具有硬件实现简单、软件设计方便、运行可靠和成本低廉的优点。TWI由一根时钟线和一根传输数据线组成,以字节为单位进行传输。TWI_SCL\TWI_SDA是TWI总线的信号线。SDA是双向数据线,SCL是时钟线SCL。在TWI总线上传送数据,首先送最高位,由主机发出启动信号,SDA在SCL 高电平期间由高电平跳变为低电平,然后由主机发送一个字节的数据。数据传送完毕,由主机发出停止信号,SDA在SCL 高电平期间由低电平跳变为高电平。

Analog输入:16个模拟输入,每个提供10位的分辨率(即2^10=1024个不同的值)。默认情况下他们测量0到5v值。可以通过改变AREF引脚和analogReference()功能改变他们变化范围的上界。AREF:是AD转换的参考电压输入端(模拟口输入的电压是与此处的参考电压比较的)。使用analogReference()(点击查看详细介绍)完成功能。

【IDE使用】

1.get an arduino board and usb cable

2.download the arduino IDE :http://www.arduino.cc/en/Main/Software
3.connect the board,   the green power(labelled PWR) go on.
4.install the driver, if download, you will find the USB Serial Port to see your board
5.open arduino examples:  file->examples            

6.select your board:                                                                         

7. select your serial port

8.upload your program

或者下载 arduino agent create 使用网页版进行编程。

【基础语法】

pinMode(pin, mode)

pin: the number of the pin whose mode you wish to set

mode: INPUT, OUTPUT, or INPUT_PULLUP. (see the (digital pins) page for a more complete description of the functionality.)

digitalRead()

Reads the value from a specified digital pin, either HIGH or LOW.

digitalRead(pin) return high,low
int ledPin = 13;   // LED connected to digital pin 13
int inPin = 7;     // pushbutton connected to digital pin 7
int val = 0;       // variable to store the read value
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
  pinMode(inPin, INPUT);        // sets the digital pin 7 as input
}
 
void loop()
{
  val = digitalRead(inPin);     // read the input pin
  digitalWrite(ledPin, val);    // sets the LED to the button's value
}

Serial:串口通信

Serial.begin(); //开启串口
Serial.end();    //关闭串口
Serial.available();//判断串口缓冲器是否有数据装入
Serial.read();    //读取串口数据
Serial.flush();    //清空串口缓存
Serial.print();    //写入字符串数据到串口
Serial.println();   //写入字符串数据+换行到串口
Serial.write();     //写入二进制数据到串口
Serial.SerialEvent();//read时触发的事件函数
Serial.readBytes(buffer,length);//读取固定长度的二进制流

#include <SoftwareSerial.h>
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9
char val;  //存储接收的变量

void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率
}

void loop() {
  //如果串口接收到数据,就输出到蓝牙串口
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  //如果接收到蓝牙模块的数据,输出到屏幕
  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}