Arduino UNO R3

Esta placa podemos considerarla el buque insignia de Arduino. Tanto la placa que tenemos a la izquierda (modelo www.arduino.cc), como la que tenemos en la parte inferior (modelo de la recientemente absorbida www.arduino.org) son los dos modelos originales. Igualmente existen diferentes modelos fabricados por terceros que funcionan igual de bien a un precio algo mas reducido.

Tendríamos a grandes rasgos una placa que:
- Funciona a 5V
- Procesador de 8 bits y tecnología AVR de Atmel
- Velocidad de reloj de 16Mhz

CARACTERÍSTICAS

Como se ha comentado, este modelo de Ardunio lleva el microcontrolador ATMega328P (datasheet). Dispone de 14 pines de entrada/salida digitales de los cuales 6 pueden usarse como salidas PWM (Pulse Width Modulation, modulación por anchura de pulso), 6 pines de entrada analógicas, funciona a una velocidad de reloj de 16Mhz, dispone de entrada de alimentación externa a través de un Jack de 5,5/2,1mm (positivo interior) o a través del conector USB, conexión para periféricos por puerto ICSP y botón de reset en placa.

La comunicación con el ordenador se realiza a través del puerto USB y la conversión de USB a datos serie para que los entienda el MCU (microcontrolador ATMega328P) lo realiza otro MCU de la casa Atmel, el ATMega16U2. Este es un MCU completo, que en este caso viene programado con la única función de realizar la comunicación serie entre el MCU principal y el puerto USB del ordenador.

La alimentación de la placa es autoconmutable entre el jack y el conector USB. Ademas tenemos un polifusible que se encarga de supervisar los excesos de carga y si superan los limites corta la alimentación hasta que los niveles vuelvan a estar dentro del rango correcto. La tensión de alimentación deberá estar entre 6 y 20 voltios y un mínimo de 500mA. Recomiendan que el rango este entre 7 a 12 voltios para no sobrecalentar el regulador de tensión incorporado en la placa y así prolongar su vida útil.

ESPECIFICACIONES TÉCNICAS

Microcontrolador ATMega328P
Voltaje de la placa 5V
Voltaje de entrada (recomendado) 7-12V
Voltaje de entrada (máximo) 6-20V
Pines entrada/salida Digitales 14 (6 de ellos PWM en salida)
Pines digitales PWM salida 6
Pines analógicos de entrada 6
Corriente max. pines I/O 20 mA
Corriente max. pin 3.3V 50 mA
Memoria Flash 32 KBytes (dentro del ATMega328P)
SRAM 2 KBytes (dentro del ATMega328P)
EEPROM 1 KByte (dentro del ATMega328P)
Velocidad de Reloj 16 Mhz
Led en placa Pin 13
Longitud 68.6 mm
Ancho 53.4 mm
Peso 25 gr

PROGRAMACIÓN

Para programar este modelo de Arduino tenemos dos opciones:
- Usar el puerto USB y descargar los programas hechos en el IDE de Arduino
- Usar el programador externo que descarga los programas al MCU a través del puerto ISP.

Hasta hace bien poco teníamos dos versiones del IDE, pero ya quedo solo una que podemos descargar de la pagina de www.arduino.cc. Los pasos para instalarlo los podemos encontrar aquí.

En la memoria del MCU ATMega328P tenemos el bootloader (0.5 Kbytes) que es el encargado, cada vez que encendemos la placa o se resetea, de monitorizar si tenemos algún programa para descargar del ordenador a la placa. Si es así lo carga en la memoria del Arduino y lo ejecuta. Si no hay programa para descargar pasa a la ejecución del programa que tuviera en la memoria previamente cargado.
Si necesitáramos este espacio de memoria o simplemente no quisiéramos usar el bootloader, podríamos borrarlo y programar directamente el MCU desde el puerto ISP conectando la placa Arduino al programador ISP y este al ordenador mediante un puerto USB. En este caso al encender o resetear la placa Arduino se ejecuta siempre el programa cargado en la memoria sin retardos ni esperas.
Igualmente si compramos un MCU nuevo sin el bootloader cargado, podríamos cargarlo mediante este programador. Podemos descargar todos los bootloader de todas las placas y de los adaptadores USB en la página www.arduino.cc.

DESCRIPCIÓN DEL PINEADO

La funcionalidad de cada pin es la siguiente:

IOREF - Este pin se usa como referencia para los shield del voltaje al cual funcionan los pines de entrada y salida de la placa Arduino, en este caso 5V. Es importante este dato, ya que en placas como la UNO que funcionan a 5V si el shield cree que estamos ante una placa de 3,3V el nivel alto digital podría ser insuficiente. Igualmente si estuviéramos en una placa que funcionara a 3,3V de este pin obtendríamos este voltaje y el shield funcionaria a 3,3V, de otro modo podría funcionar a 5V y destruiríamos las entradas de la placa Arduino.

RESET - Este pin se usa para resetear la placa Arduino desde fuera. Es activo a nivel bajo.

3V3 - Este pin se usa para obtener de la placa Arduino un voltaje de 3,3V (solo un 1% de error) y poder alimentar componentes o shields con hasta 50mA. El chip encargado de regular esta tensión en la placa Arduino UNO es el LP2985. Tenemos esta tensión tanto si la placa esta alimentada por la clavija de 2,1mm o por el puerto USB.

5V - Este pin se usa para una doble función: por un lado obtenemos una tensión regulada a 5V para alimentar los shields o los componentes externos que deseemos (independientemente de como alimentemos la placa arduino, jack 2,1mm o USB), siendo 40mA la máxima corriente que podremos extraer. Pero también podremos alimentar nuestra placa Arduino UNO a través de este pin con una fuente de alimentación externa de 5V (regulada).

GND - Estos pines se usan para obtener una conexión de tierra de la placa. Es importante que todas las placas y componentes externos tenga una referencia de tierra común. Disponemos de 3 pines de GND (sin contar los disponibles en ICSP).

VIN - Este pin se usa para una doble función: por un lado obtenemos la tensión sin regular con la que estemos alimentando la placa Arduino mediante el jack 2,1mm o si estamos alimentando a través del puerto USB obtendríamos una tensión de 5V regulados. Por otro lado también podemos alimentar la placa Arduino desde una fuente de alimentación externa (respetando los márgenes de alimentación de 7 a 12V recomendados) sin usar el jack 2,1mm ni el puerto USB.

A0 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas. Tener en cuenta que solo hay un conversor A/D en el MCU, por lo que si vamos a leer mas de un pin de entrada analógico los leerá uno y luego el otro (funcionalmente para nosotros funciona como si tuviera un conversor en cada entrada).
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa este tomara el número 14 y será un puerto digital igual que los demás.

A1 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa este tomara el número 15 y será un puerto digital igual que los demás.

A2 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa este tomara el número 16 y será un puerto digital igual que los demás.

A3 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa este tomara el número 17 y será un puerto digital igual que los demás.

A4-SDA - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa este tomara el número 18 y será un puerto digital igual que los demás.
También podemos usar este pin para realizar comunicaciones I2C, sería el SDA o linea de datos en las comunicaciones I2C. Este pin esta duplicado en la placa Arduino UNO (esta junto a al pin AREF).

A5-SCL - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa este tomara el número 19 y será un puerto digital igual que los demás.
También podemos usar este pin para realizar comunicaciones I2C, sería el SCL o linea de reloj en las comunicaciones I2C. Este pin esta duplicado en la placa Arduino UNO (esta cerca del pin AREF).

0-RX - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Especialmente en este pin lo tenemos conectado al AtMega 16U2 para la recepción de datos del puerto USB. Lo podemos usar también para enviar a la placa Arduino señales serie TTL-UART desde el exterior.

1-TX - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Especialmente en este pin lo tenemos conectado al AtMega 16U2 para la transmisión de datos al puerto USB. Lo podemos usar también para transmitir de placa Arduino señales serie TTL-UART hacia el exterior.

2 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También podemos configurar por software este pin para lanzar la interrupción 0.

~3 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada. Realmente es una salida digital que genera una señal cuadrada de 490Hz y variando el ancho del pulso podemos simular una señal analógica (tensión promediada) de 8 bits de resolución (256 valores).
También podemos configurar por software este pin para lanzar la interrupción 1.

4 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).

~5 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

~6 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

7 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).

8 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).

~9 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

~10 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.
También podemos usar este pin para realizar comunicaciones SPI, sería el SS o linea de selección de esclavo (activa a nivel bajo) en las comunicaciones SPI.

~11 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.
También podemos usar este pin para realizar comunicaciones SPI, sería el MOSI o linea de transmisión del maestro al esclavo en las comunicaciones SPI.

12 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También podemos usar este pin para realizar comunicaciones SPI, sería el MISO o linea de transmisión del esclavo al maestro en las comunicaciones SPI.

13 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin tiene un LED conectado y visible en la placa Arduino, muy útil para visualizar señales sin nada externo.
También podemos usar este pin para realizar comunicaciones SPI, sería el SCK o linea de reloj en las comunicaciones SPI.

AREF - Este pin se usa para entregar al MCU una referencia superior del rango del conversor A/D del MCU. Normalmente tenemos esta referencia a 5V, lo que hace que al tener 1024 pasos (10 bits) de resolución la precisión del conversor es de: 5V/1024pasos=0,00488V, aprox. 5mV. Pero si estuvíeramos seguros de no tener en la entrada analógica nunca mas de, por ejemplo 1V, estaríamos desperdiciando resolución y precisión. Aquí entra en juego el pin AREF: si proporcionamos a este pin un voltaje de 1V conseguiremos que el conversor solo acepte la ventana desde 0V a 1V y la precisión de la conversión seria ahora de: 1V/1024pasos=0,000976V o lo que es lo mismo 0,97mV. Efectivamente hemos aumentado muchísimo la precisión de la conversión y será mas exacta.

Luego tenemos los dos conectores ICSP (In Circuit Serial Programming).
El situado al lado del MCU (imagen de la izquierda) para programarlo desde un programador externo, como vimos anteriormente, y el situado al lado del conector USB (imagen de la derecha) para programar el ATMega16U2. Programar este último normalmente no será necesario nunca y programar el MCU desde tiene sentido si nos deshacemos del bootloader.
Los seis pines que configuran el conector del MCU son:
RESET - Conectado al pin 1 del MCU, evidentemente lo resetea. Cuando recibe un nivel bajo reseta el MCU y lo deja en estado de espera para recibir un programa a través de la conexión serie. Es la misma conexión que el pin de RESET de la placa junto al IOREF y 3V3.

SCK- Conectado al pin 19 del MCU, lleva la señal de reloj al programador o periférico conectado. Es la misma conexión que el pin de I/O digital 13.

MISO - Conectado al pin 18 del MCU, lleva la señal de datos del programador o periférico a la entrada del MCU. Es la misma conexión que el pin de I/O digital 12. Este siempre es el pin que esta situado junto a la marca negra en la esquina del conector y sirve de referencia para localizar los demás pines.

GND - Conectado a la linea de tierra de la placa. Importante siempre que el programador, shield o periférico conectado aquí compartan tierra.

MOSI - Conectado al pin 17 del MCU, lleva la señal de datos desde el MCU al programador o periférico conectado. Es la misma conexión que el pin de I/O digital 11.

5V - Conectado a la linea de alimentación regulada de la placa Arduino.

Los seis pines del conector que atacan al ATMega16U2 están situados en la misma disposición y tienen las mismas funciones con la diferencia que van a los pines del microcontrolador ATMega16U2 para poder programarlo.
Ademas del conector ICSP para el ATMega16U2, tenemos otro conector de 4 pines que nos da acceso a cuatro pines de I/O del microcontrolador. Son los pines 18, 19, 20 y 21 que corresponden respectivamente a los puertos, PB4, PB5, PB6 y PB7.
También tenemos tres led en esa zona, como se ve en la imagen a la derecha. TX y RX están conectados al ATMega16U2 y nos informan de una comunicación activa entre el puerto USB de la placa arduino y el MCU principal. Se verán estos led parpadeando, por ejemplo, cuando estemos volcando un programa desde nuestro ordenador al Arduino UNO. También podremos ver parpadear el led TX cuando en nuestro programa hayamos programado una conexión con el monitor serie del IDE. El parpadeo indicara que el Arduino esta transmitiendo datos hacia el puerto USB para que puedan ser visionados en el monitor serie. El LED L esta conectado al pin I/O 13 para indicarnos su actividad.
También disponemos de un LED que nos indica la presencia de alimentación en la placa Arduino UNO, etiquetado como ON y un botón de reset para reiniciar la ejecución del programa y si tenemos el bootloader cargado, antes de la ejecución la carga de un programa nuevo, si esta disponible en el IDE del ordenador.

ESQUEMA

En este esquema que nos ofrecen los diseñadores del sistema, podemos ver toda la arquitectura electrónica del Arduino UNO. Muy útil para localizar posibles averías o si nos atrevemos a poder montar nuestra propia placa Arduino UNO por nuestros medios.

PROBEMOS EL ARDUINO UNO