Arduino

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Arduino
Arduino Uno - R3.jpg
"Arduino Uno" Revisión 3
Tipo Placa computadora (microcontrolador de placa simple)
Página web www.arduino.cc
Placa Arduino RS232[1]

Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.[2] [3]

El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida.[4] Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque que es ejecutado en la placa.[4]

Desde octubre de 2012, Arduino se usa también con microcontroladoras CortexM3 de ARM de 32 bits,[5] que coexistirán con las más limitadas, pero también económicas AVR de 8 bits. ARM y AVR no son plataformas compatibles a nivel binario, pero se pueden programar con el mismo IDE de Arduino y hacerse programas que compilen sin cambios en las dos plataformas. Eso sí, las microcontroladoras CortexM3 usan 3,3V, a diferencia de la mayoría de las placas con AVR que generalmente usan 5V. Sin embargo ya anteriormente se lanzaron placas Arduino con Atmel AVR a 3,3V como la Arduino Fio y existen compatibles de Arduino Nano y Pro como Meduino en que se puede conmutar el voltaje.

Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.

Arduino puede tomar información del entorno a través de sus entradas analógicas y digitales, y controlar luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un computador.

El proyecto Arduino recibió una mención honorífica en la categoría de Comunidades Digital en el Prix Ars Electrónica de 2006.[6] [7] [8]

Historia[editar]

Arduino se inició en el año 2005 como un proyecto para estudiantes en el Instituto IVREA, en Ivrea (Italia). En ese tiempo, los estudiantes usaban el microcontrolador BASIC Stamp, cuyo coste era de 100 dólares estadounidenses, lo que se consideraba demasiado costoso para ellos. Por aquella época, uno de los fundadores de Arduino, Massimo Banzi, daba clases en Ivrea.[9]

El nombre del proyecto viene del nombre del Bar di Re Arduino (Bar del Rey Arduino) donde Massimo Banzi pasaba algunas horas. En su creación, contribuyó el estudiante colombiano Hernando Barragán, quien desarrolló la tarjeta electrónica Wiring, el lenguaje de programación y la plataforma de desarrollo.[10] Una vez concluida dicha plataforma, los investigadores trabajaron para hacerlo más ligero, más económico y disponible para la comunidad de código abierto (hardware y código abierto). El instituto finalmente cerró sus puertas, así que los investigadores, entre ellos el español David Cuartielles, promovieron la idea.[9] Banzi afirmaría años más tarde, que el proyecto nunca surgió como una idea de negocio, sino como una necesidad de subsistir ante el inminente cierre del Instituto de diseño Interactivo IVREA. Es decir, que al crear un producto de hardware abierto, éste no podría ser embargado.

Posteriormente, Google colaboró en el desarrollo del Kit Android ADK (Accesory Development Kit), una placa Arduino capaz de comunicarse directamente con teléfonos móviles inteligentes bajo el sistema operativo Android para que el teléfono controle luces, motores y sensores conectados de Arduino.[11] [12]

Para la producción en serie de la primera versión se tomó en cuenta que el coste no fuera mayor de 30 euros, que fuera ensamblado en una placa de color azul, debía ser Plug and Play y que trabajara con todas las plataformas informáticas tales como MacOSX, Windows y GNU/Linux. Las primeras 300 unidades se las dieron a los alumnos del Instituto IVRAE, con el fin de que las probaran y empezaran a diseñar sus primeros prototipos.

En el año 2005, se incorporó al equipo el profesor Tom Igoe,[10] que había trabajado en computación física, después de que se enterara del mismo a través de Internet. Él ofreció su apoyo para desarrollar el proyecto a gran escala y hacer los contactos para distribuir las tarjetas en territorio estadounidense. En la feria Maker Fair de 2011 se presentó la primera placa Arduino 32 bit para trabajar tareas más pesadas.[13]

Aplicaciones[editar]

El módulo Arduino ha sido usado como base en diversas aplicaciones electrónicas:

  • Xoscillo: Osciloscopio de código abierto.[14]
  • Equipo científico para investigaciones.[15]
  • Arduinome: Un dispositivo controlador MIDI.[16]
  • OBDuino: un económetro que usa una interfaz de diagnóstico a bordo que se halla en los automóviles modernos.
  • Humane Reader: dispositivo electrónico de bajo coste con salida de señal de TV que puede manejar una biblioteca de 5000 títulos en una tarjeta microSD.[17]
  • The Humane PC: equipo que usa un módulo Arduino para emular un computador personal, con un monitor de televisión y un teclado para computadora.[18]
  • Ardupilot: software y hardware de aeronaves no tripuladas.
  • ArduinoPhone: un teléfono móvil construido sobre un módulo Arduino.[19] [20]

Esquema de conexiones[editar]

Entradas y salidas[editar]

Poniendo de ejemplo al módulo Diecimila, éste consta de 14 entradas digitales configurables como entradas y/o salidas que operan a 5 voltios. Cada contacto puede proporcionar o recibir como máximo 40 mA. Los contactos 3, 5, 6, 8, 10 y 11 pueden proporcionar una salida PWM (Pulse Width Modulation). Si se conecta cualquier cosa a los contactos 0 y 1, eso interferirá con la comunicación USB. Diecimila también tiene 6 entradas analógicas que proporcionan una resolución de 10 bits. Por defecto, aceptan de 0 hasta 5 voltios, aunque es posible cambiar el nivel más alto, utilizando el contacto Aref y algún código de bajo nivel.

Especificaciones[editar]

Las especificaciones de los distintos modelos de placas Arduino se resumen en la siguiente tabla:

Modelo

Microcontrolador

Voltaje de entrada

Voltaje del sistema

Frecuencia de Reloj

Digital I/O

Entradas Analógicas

PWM

UART

Memoria Flash

Cargador

Interfaz de Programación

Arduino Due

AT91SAM3X8E

5-12V

3,3V

84MHz

54*

12

12

4

512Kb

Due

Nativa USB

Arduino Leonardo

ATmega32U4

7-12V

5V

16MHz

20*

12

7

1

32Kb

Leonardo

Nativa USB

Arduino Uno - R3

ATmega328

7-12V

5V

16MHz

14

6

6

1

32Kb

Optiboot

USB via ATMega16U2

RedBoard

ATmega328

7-15V

5V

16MHz

14

6

6

1

32Kb

Optiboot

USB via FTDI

Arduino Uno SMD (descontinuado)

ATmega328

7-12V

5V

16MHz

14

6

6

1

32Kb

Optiboot

USB via ATMega8U2

Arduino Uno (descontinuado)

ATmega328

7-12V

5V

16MHz

14

6

6

1

32Kb

Optiboot

USB via ATMega8U2

Arduino Duemilanove (descontinuado)

ATmega328

7-12V

5V

16MHz

14

6

6

1

32Kb

AtmegaBOOT

USB via FTDI

Arduino Bluetooth (descontinuado)

ATmega328

1,2-5,5V

5V

16MHz

14

6

6

1

32Kb

AtmegaBOOT

Serial Bluetooth

Arduino Pro 3.3V/8MHz

ATmega328

3,35 -12V

3,3V

8MHz

14

6

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

Arduino Pro 5V/16MHz

ATmega328

5 - 12V

5V

16MHz

14

6

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

Ethernet Pro (descontinuado)

ATmega328

7-12V

5V

16MHz

14

6

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

Arduino Mega 2560 R3

ATmega2560

7-12V

5V

16MHz

54

16

14

4

256Kb

STK500v2

USB via ATMega16U2

Arduino Mega 2560 (descontinuado)

ATmega2560

7-12V

5V

16MHz

54

16

14

4

256Kb

STK500v2

USB via ATMega8U2

Arduino Mega (descontinuado)

ATmega1280

7-12V

5V

16MHz

54

16

14

4

128Kb

STK500v2

USB via FTDI

Mega Pro 3.3V

ATmega2560

3,3-12V

3,3V

8MHz

54

16

14

4

256Kb

STK500v2

Cabecera compatible con FTDI

Mega Pro 5V

ATmega2560

5-12V

5V

16MHz

54

16

14

4

256Kb

STK500v2

Cabecera compatible con FTDI

Arduino Mini 04 (descontinuado)

ATmega328

7-9V

5V

16MHz

14

6

8

1

32Kb

AtmegaBOOT

Cabecera Serial

Arduino Mini 05

ATmega328

7-9V

5V

16MHz

14

6

8

1

32Kb

AtmegaBOOT

Cabecera Serial

Arduino Pro Mini 3.3V/8MHz

ATmega328

3,35-12V

3,3V

8MHz

14

6

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

Arduino Pro Mini 5V/16MHz

ATmega328

5 - 12V

5V

16MHz

14

6

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

Arduino Fio

ATmega328P

3,35-12V

3,3V

8MHz

14

8

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI o Inalámbrica via XBee1

Mega Pro Mini 3.3V

ATmega2560

3,3-12V

3,3V

8MHz

54

16

14

4

256Kb

STK500v2

Cabecera compatible con FTDI

Pro Micro 5V/16MHz

ATmega32U4

5-12V

5V

16MHz

12

4

5

1

32Kb

DiskLoader

Nativa USB

Pro Micro 3.3V/8MHz

ATmega32U4

3,35-12V

3,3V

8MHz

12

4

5

1

32Kb

DiskLoader

Nativa USB

LilyPad Arduino 328 Main Board

ATmega328

2,7-5,5V

3,3V

8MHz

14

6

6

1

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

LilyPad Arduino Simple Board

ATmega328

2,7-5,5V

3,3V

8MHz

9

4

5

02

32Kb

AtmegaBOOT

Cabecera compatible con FTDI

Los modelos Arduino Diecimila, Arduino Duemilanove y Arduino Mega están basados en los microcontroladores ATmega168, ATmega328 y ATmega1280

ATmega168 ATmega328 ATmega1280
Voltaje operativo 5 V 5 V 5 V
Voltaje de entrada recomendado 7-12 V 7-12 V 7-12 V
Voltaje de entrada límite 6-20 V 6-20 V 6-20 V
Contactos de entrada y salida digital 14 (6 proporcionan PWM) 14 (6 proporcionan PWM) 54 (14 proporcionan PWM)
Contactos de entrada analógica 6 6 16
Intensidad de corriente 40 mA 40 mA 40 mA
Memoria Flash 16KB (2KB reservados para el bootloader) 32KB (2KB reservados para el bootloader) 128KB (4KB reservados para el bootloader)
SRAM 1 KB 2 KB 8 KB
EEPROM 512 bytes 1 KB 4 KB
Frecuencia de reloj 16 MHz 16 MHz 16 MHz

Lenguaje de programación Arduino[editar]

La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el lenguaje de programación de alto nivel Processing. Sin embargo, es posible utilizar otros lenguajes de programación y aplicaciones populares en Arduino,[21] debido a que Arduino usa la transmisión serial de datos soportada por la mayoría de los lenguajes mencionados. Para los que no soportan el formato serie de forma nativa, es posible utilizar software intermediario que traduzca los mensajes enviados por ambas partes para permitir una comunicación fluida. Algunos ejemplos son:

Funciones básicas y operadores[editar]

Arduino está basado en C y soporta todas las funciones del estándar C y algunas de C++.[22] A continuación se muestra un resumen con la estructura y sintaxis del lenguaje Arduino:

Sintaxis Básica[editar]

  • Delimitadores:;, {}
  • Comentarios: //, /* */
  • Cabeceras: #define, #include
  • Operadores aritméticos: +, -, *, /, %
  • Asignación: =
  • Operadores de comparación: ==, !=, <, >, <=, >=
  • Operadores Booleanos: &&, ||, !
  • Operadores de acceso a punteros: *, &
  • Operadores de bits: &, |, ^, ~, <<, >>
  • Operadores compuestos:
    • Incremento y decremento de variables: ++, --
    • Asignación y operación: +=, -=, *=, /=, &=, |=

Estructuras de control[editar]

  • Condicionales: if, if...else, switch case
  • Bucles: for, while, do... while
  • Bifurcaciones y saltos: break, continue, return, goto

Variables[editar]

En cuanto al tratamiento de las variables también comparte un gran parecido con el lenguaje C.

Constantes[editar]
  • HIGH/LOW: representan los niveles alto y bajo de las señales de entrada y salida. Los niveles altos son aquellos de 3 voltios o más.
  • INPUT/OUTPUT: entrada o salida.
  • false (falso): Señal que representa al cero lógico. A diferencia de las señales HIGH/LOW, su nombre se escribe en letra minúscula.
  • true (verdadero): Señal cuya definición es más amplia que la de false. Cualquier número entero diferente de cero es "verdadero", según el álgebra de Boole, como en el caso de -200, -1 o 1. Si es cero, es "falso".
Tipos de datos[editar]
  • void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float, double, string, array.
Conversión entre tipos[editar]

Estas funciones reciben como argumento una variable de cualquier tipo y devuelven una variable convertida en el tipo deseado.

  • char(), byte(), int(), word(), long(), float()
Cualificadores y ámbito de las variables[editar]
  • static, volatile, const
Utilidades[editar]
  • sizeof()

Funciones Básicas[editar]

E/S Digital[editar]
  • pinMode(pin, modo)
  • digitalWrite(pin, valor)
  • int digitalRead(pin)
E/S Analógica[editar]
  • analogReference(tipo)
  • int analogRead(pin)
  • analogWrite(pin, valor)
E/S Avanzada[editar]
  • shiftOut(dataPin, clockPin, bitOrder, valor)
  • unsigned long pulseIn(pin, valor)
Tiempo[editar]
  • unsigned long millis()
  • unsigned long micros()
  • delay(ms)
  • delayMicroseconds(microsegundos)
Matemáticas[editar]
  • min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow, fromHigh, toLow, toHigh), pow(base, exponente), sqrt(x)
Trigonometría[editar]
  • sin(rad), cos(rad), tan(rad)
Números aleatorios[editar]
  • randomSeed(semilla), long random(máx), long random(mín, máx)
Bits y Bytes[editar]
  • lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit()
Interrupciones externas[editar]
  • attachInterrupt(interrupción, función, modo)
  • detachInterrupt(interrupción)
Interrupciones[editar]
  • interrupts(), noInterrupts()
Comunicación por puerto serie[editar]

Las funciones de manejo del puerto serie deben ir precedidas de la palabra "Serial" aunque no necesitan ninguna declaración en la cabecera del programa. Por esto se consideran funciones base del lenguaje.[23] Estas son las funciones para transmisión serial:

  • begin(), available(), read(), flush(), print(), println(), write()

Manipulación de puertos[editar]

Los registros de puertos permiten la manipulación a más bajo nivel y de forma más rápida de los contactos de entrada/salida del microcontrolador de las placas Arduino.[24] Los contactos eléctricos de las placas Arduino están repartidos entre los registros B(0-7), C (analógicos) y D(8-13). Mediante estas variables ser observado y modificado su estado:

  • DDR[B/C/D]: Data Direction Register (o dirección del registro de datos) del puerto B, C ó D. Es una variable de Lectura/Escritura que sirve para especificar cuales contactos serán usados como entrada y salida.
  • PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C ó D. Es una variable de Lectura/Escritura.
  • PIN[B/C/D]: Input Pins Register (o registro de pines de entrada) del puerto B, C ó D. Variable de sólo lectura.

Por ejemplo, para especificar los contactos 9 a 13 como salidas y el 8 como entrada (puesto que el puerto D usa los pines de la placa Arduino 8 al 13 digitales) bastaría utilizar la siguiente asignación:

 DDRD = B11111110;

Como se ha podido comprobar, el conocimiento del lenguaje C, permite la programación en Arduino debido a la similitud entre éste y el lenguaje nativo del proyecto, lo que implica el aprendizaje de algunas funciones específicas de que dispone el lenguaje del proyecto para manejar los diferentes parámetros. Se pueden construir aplicaciones de cierta complejidad sin necesidad de muchos conceptos previos.

AVR Libc[editar]

Los programas compilados con Arduino (salvo en las placas con CorteX M3) se enlazan contra AVR Libc[22] por lo que tienen acceso a algunas de sus funciones. AVR Libc es un proyecto de software libre con el objetivo de proporcionar una biblioteca C de alta calidad para utilizarse con el compilador GCC sobre microcontroladores Atmel AVR. Se compone de 3 partes:

  • avr-binutils
  • avr-gcc
  • avr-libc

La mayoría del lenguaje de programación Arduino está escrita con constantes y funciones de AVR y ciertas funcionalidades sólo se pueden obtener haciendo uso de AVR.[25]

Interrupciones[editar]

Las señales de interrupción son las siguientes:

  • cli(): desactiva las interrupciones globales
  • sei(): activa las interrupciones

Esto afectará al temporizador y a la comunicación serial. La función delayMicroseconds() desactiva las interrupciones cuando se ejecuta.

Temporizadores[editar]

La función delayMicroseconds() crea el menor retardo posible del lenguaje Arduino que ronda los 2μs. Para retardos más pequeños se debe utilizar la llamada de ensamblador 'nop' (no operación). Cada sentencia 'nop' se ejecutará en un ciclo de máquina (16 MHz) de aproximadamente 62,5ns.

Manipulación de puertos[editar]

La manipulación de puertos con código AVR es más rápida que utilizar la función digitalWrite() de Arduino.

Establecer Bits en variables[editar]

cbi y sbi son mecanismos estándar (AVR) para establecer o limpiar bits en PORT y otras variables.

Diferencias con Processing[editar]

La sintaxis del lenguaje de programación Arduino es una versión simplificada de C/C++ y tiene algunas diferencias respecto de Processing.[26] [27] Debido a que Arduino está basado en C/C++ mientras que Processing se basa en Java, existen varias diferencias en cuanto a la sintaxis de ambos lenguajes y el modo en que se programa:

Arreglos[editar]

Arduino Processing
int bar[8];
bar[0] = 1;
int[] bar = new int[8];
bar[0] = 1;
int foo[] = { 0, 1, 2 }; int foo[] = { 0, 1, 2 };
o bien
int[] foo = { 0, 1, 2 };

Impresión de cadenas[editar]

Arduino Processing
Serial.println("hello world"); println("hello world");
int i = 5;
Serial.println(i);
int i = 5;
println(i);
int i = 5;
Serial.print("i = ");
Serial.print(i);
Serial.println();
int i="5;"
println("i =" + i);

Ejemplo sencillo de programación en Arduino[editar]

El primer paso antes de comprobar que la instalación es correcta y empezar a trabajar con Arduino, es usar ejemplos prácticos que vienen disponibles con el dispositivo. Se recomienda abrir el ejemplo “led_blink” el cual crea una intermitencia por segundo en un led conectado en el pin 13. El código necesario es el siguiente:

# define LED_PIN 13
void setup () {
 // Activado del contacto 13 para salida digital
 pinMode (LED_PIN, OUTPUT);
}
// Bucle infinito
void loop () {
 // Encendido del diodo LED enviando una señal alta
 digitalWrite (LED_PIN, HIGH);
 // Tiempo de espera de 1 segundo (1000 ms)
 delay (1000);
 // Apagado del diodo LED enviando una señal baja.
 digitalWrite (LED_PIN, LOW);
 // Tiempo de espera de 1 segundo
 delay (1000);
}

Bibliotecas en Arduino[editar]

Las bibliotecas estándar que ofrece Arduino son las siguientes:[28]

Serial[editar]

Lectura y escritura por el puerto serie.

EEPROM[editar]

Lectura y escritura en el almacenamiento permanente.[29]

  • read(), write()

Ethernet[editar]

Conexión a Internet mediante “Arduino Ethernet Shield“. Puede funcionar como servidor que acepta peticiones remotas o como cliente. Se permiten hasta cuatro conexiones simultáneas.[30] Los comandos usados son los siguientes:

  • Servidor: Server(), begin(), available(), write(), print(), println()
  • Cliente: Client(), connected(), connect(), write(), print(), println(), available(), read(), flush(), stop()

Firmata[editar]

Es una biblioteca de comunicación con aplicaciones informáticas utilizando el protocolo estándar del puerto serie.[31]

LiquidCrystal[editar]

Control de LCDs con chipset Hitachi HD44780 o compatibles.[32] La biblioteca soporta los modos de 4 y 8 bits.

Servo[editar]

Biblioteca para el control de servo motores.[33] A partir de la versión 0017 de Arduino la biblioteca soporta hasta 12 motores en la mayoría de las placas Arduino y 48 en la Arduino Mega. Estos son los comandos usados:

  • attach(), write(), writeMicroseconds(), read(), attached(), detach()

SoftwareSerial[editar]

Comunicación serie en contactos digitales.[34] Por defecto Arduino incluye comunicación sólo en los contactos 0 y 1 pero gracias a esta biblioteca puede realizarse esta comunicación con los restantes.

Stepper[editar]

Control de motores paso a paso unipolares o bipolares.[35]

  • Stepper(steps, pin1, pin2), Stepper(steps, pin1, pin2, pin3, pin4), setSpeed(rpm), step(steps)

Wire[editar]

Envío y recepción de datos sobre una red de dispositivos o sensores mediante Two Wire Interface (TWI/I2C).[36]

Las bibliotecas Matrix y Sprite de Wiring son totalmente compatibles con Arduino y sirven para manejo de matrices de diodos LED. También se ofrece información sobre diversas bibliotecas desarrolladas por diversos colaboradores que permiten realizar muchas tareas.

Creación de bibliotecas[editar]

Los usuarios de Arduino tienen la posibilidad de escribir sus propias bibliotecas.[37] Ello permite disponer de código que puede reutilizarse en otros proyectos, mantener el código fuente principal separado de las bibliotecas y la organización de los programas construidos es más clara.

Ejemplo de biblioteca[editar]

El siguiente ejemplo permite el envío de caracteres mediante el código Morse:

Se crea el archivo Morse.h que incluye la definición de la clase Morse que tiene 3 funciones: un constructor (Morse()), una función para enviar 1 punto (dot()) y una función para enviar una raya (dash()). La variable _pin permite indicar el contacto a usar.

/*
  Morse.h - Biblioteca para el envío de Código Morse.
  Creado por David A. Mellis, el 2 de noviembre de 2007.
  Liberado al dominio público.
*/
 
# ifndef Morse_h
# define Morse_h
 
# include "WProgram.h"
 
class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};
 
# endif

Debe ser creado el archivo Morse.cpp con el código, es decir con la implementación de los métodos declarados:

/*
  Morse.cpp - Biblioteca para el envío de Código Morse.
  Creado por David A. Mellis, el 2 de noviembre de 2007.
  Liberado al dominio público.
*/
 
# include "WProgram.h"
# include "Morse.h"
 
Morse::Morse(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}
 
void Morse::dot()
{
  digitalWrite(_pin, HIGH);
  delay(250);
  digitalWrite(_pin, LOW);
  delay(250);
}
 
void Morse::dash()
{
  digitalWrite(_pin, HIGH);
  delay(1000);
  digitalWrite(_pin, LOW);
  delay(250);
}

La biblioteca creada así puede ser usada mediante el comando #include. Si se desea enviar una petición de auxilio SOS por el contacto 13 bastaría con llamar a Morse(13) y ejecutar la siguiente secuencia:

 morse.dot(); morse.dot(); morse.dot();
 morse.dash(); morse.dash(); morse.dash();
 morse.dot(); morse.dot(); morse.dot();

Instalación en diferentes entornos[editar]

Windows[editar]

Los pasos a seguir son los siguientes:

Interfaz del entorno de desarrollo Arduino en el Sistema Operativo Windows.
  • Descargar las versiones más reciente de Java Runtime Enviroment (J2RE) y del IDE Arduino.
  • Instalar los controladores FTDI USB, con la placa Arduino conectada.
  • Ejecutar el IDE Arduino para abrir la interfaz y configurar el puerto USB donde está conectada la placa.

GNU/Linux[editar]

Interfaz del entorno de desarrollo Arduino S.O. GNU/Linux.

Para instalar Arduino en un sistema GNU/Linux necesitamos los siguientes programas para resolver las dependencias:

  • Sun java runtime, jre.
  • avr-gcc, compilador para la familia de microcontroladores avr de atmel.
  • avr-libc, libc del compilador avr-gcc.

En algunas distribuciones conviene desinstalar, si no es necesario, el programa "brltty" que permite el acceso al terminal a personas invidentes. Para concluir, se descarga el framework de Arduino, se descomprime y ejecuta.

Equipo de desarrollo[editar]

El núcleo del equipo de desarrollo de Arduino está formado por Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, David Mellis y Nicholas Zambetti.

Pduino[editar]

Patch Pduino.

Pduino nace de la fusión de los proyectos Pure Data y Arduino. Ambos proyectos de fuente abierta permiten trabajar con interfaz gráfica. Cargando el firmware de Pure Data (PD) a la placa Arduino se puede acceder a ella mediante el lenguaje de programación gráfico.

Minibloq[editar]

Pantalla de Minibloq.
Combinación de una computadora de bajo costo OLPC, el software Minibloq y una placa Arduino.

Minibloq es un entorno gráfico de programación que puede generar código nativo de Arduino y escribirlo directamente en la memoria flash de la placa. Tiene un modo que permite visualizar el código generado, el cual también puede ser copiado y pegado en el Arduino-IDE, para los usuarios que intentan hacer el pasaje de una herramienta gráfica a la programación en sintaxis C/C++. Minibloq es de uso libre y sus fuentes también están disponibles gratuitamente. Una característica importante, es que puede correr también en la computadora portátil OLPC, mediante el software Wine.

Physical Etoys[editar]

Proyecto de un semáforo realizado con Arduino y Physical Etoys.

Physical Etoys es una extensión libre y gratuita que permite que diversos dispositivos electrónicos como Lego NXT, las placas Arduino, Sphero, Kinect, Joystick Wiimote, entre otros, puedan ser programados fácilmente y que interactúen entre sí gracias a su sistema de bloques.

En el caso de Arduino, Physical Etoys ofrece dos modos de programación:

  1. El modo "directo", en el cual los programas se ejecutan en la computadora del usuario y las órdenes se transmiten inmediatamente a través del puerto serie.
  2. El modo "compilado", en el cual los programas se traducen a C++ y se bajan a la placa, para luego ejecutarse de manera independiente de la computadora.

El modo "directo" permite modificar los programas y ver los cambios producidos de manera inmediata en el comportamiento del robot, lo cual facilita la programación, sobre todo al usuario inexperto. Asimismo, permite ver constantemente los valores de los sensores y utilizar el robot, por ejemplo, como para adquirir datos.

El modo "compilado", por su parte, elimina el retardo que introduce la comunicación con la computadora, lo cual lo hace preferible para el desarrollo de tareas autónomas, en las cuales la velocidad de respuesta del robot debe ser óptima.

Véase también[editar]

Referencias[editar]

  1. Placa Arduino Serial
  2. «Interview with Casey Reas and Ben Fry».
  3. [1]
  4. a b «Project homepage».
  5. «Arduino Due is finally here».
  6. http://www.aec.at/en/prix/honorary2006.asp
  7. «Ars Electrónica Archiv» (en alemán). Consultado el 18 de febrero de 2009.
  8. «Ars Electronica Archiv / ANERKENNUNG» (en alemán). Consultado el 18 de febrero de 2009.
  9. a b David Kushner (26 Oct 2011). The Making of Arduino. http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino. 
  10. a b «Algo de Historia para comenzar». Consultado el 22 de diciembre de 2013.
  11. «Google presenta ADK, interfaz basada en Arduino para Android». BricoGeek.com. 12 de mayo de 2011. Consultado el 22 de diciembre de 2013. 
  12. «Accessory Development Kit 2012 Guide» (en inglés). Consultado el 22 de diciembre de 2013.
  13. Terrence O'Brien (19 de septiembre de 2011). «Arduino brings the (new) goods to Maker Faire New York, welcomes ARM into the fold» (en inglés). Consultado el 22 de diciembre de 2013.
  14. «Xoscillo: A software oscilloscope that acquires data using an Arduino or a parallax.» (en inglés). Consultado el 22 de diciembre de 2013.
  15. Joshua M. Pearce (14 de septiembre de 2012). «Building Research Equipment with Free, Open-Source Hardware» (en inglés) págs. 3. Washington, EE.UU.: American Association for the Advancement of Scienc. doi:10.1126/science.1228183. Consultado el 22 de diciembre de 2013.
  16. Peter Kirn (20 de agosto de 2008). «Aug 20 2008 Arduinome: An Arduino-Based Monome Clone, Behind the Scenes» (en inglés). Consultado el 22 de diciembre de 2013.
  17. «Humane Reader» (en inglés). Consultado el 22 de diciembre de 2013.
  18. «The Humane PC» (en inglés). Consultado el 22 de diciembre de 2013.
  19. «ArduinoPhone» (en inglés). Consultado el 22 de diciembre de 2013.
  20. Esteban Zamorano (28 de noviembre de 2013). «Construye tu propio celular por USD$200 gracias a Arduino». Consultado el 22 de diciembre de 2013.
  21. «Interfacing with Other Software» (en inglés). http://arduino.cc. Consultado el 22 de diciembre de 2013.
  22. a b «Language Reference» (en inglés). http://arduino.cc. Consultado el 22 de diciembre de 2013.
  23. «Serial» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  24. «Port Registers» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  25. «AVR Code» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  26. «Arduino/Processing Language Comparison» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  27. «Language Reference(API)/Processing 2+» (en inglés). http://processing.org/. Consultado el 22 de diciembre de 2013."
  28. «Arduino - Libraries» (en inglés). http://arduino.cc/. Consultado el 22 de diciembre de 2013.
  29. «EEPROM Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  30. «Ethernet Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  31. «Firmata Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  32. «LiquidCrystal Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  33. «Servo Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  34. «SoftwareSerial Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  35. «Stepper Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  36. «Wire Library» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.
  37. «Writing a Library for Arduino» (en inglés). http://www.arduino.cc. Consultado el 22 de diciembre de 2013.

Bibliografía[editar]

Enlaces de externos[editar]

Gráfica de datos de sensores conectados a Arduino, programado en Gambas