Arduino
Arduino
Arduino
de sus entradas analgicas y digitales, puede controlar luces, motores y otros actuadores. El microcontrolador en
la placa Arduino se programa mediante el lenguaje de
programacin 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 mencin honorca en
la categora de Comunidades Digital en el Prix Ars Electrnica de 2006.[6][7][8]
0.1 Historia
Desde octubre de 2012, Arduino se usa tambin con microcontroladoras CortexM3 de ARM de 32 bits,[5] que
coexistirn con las ms limitadas, pero tambin econmicas 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 mayora 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.
2
GNU/Linux. Las primeras 300 unidades se las dieron a
los alumnos del Instituto IVRAE, con el n de que las
probaran y empezaran a disear sus primeros prototipos.
0.2
Productos
Arduino Leonardo
Arduino Due
Arduino Yn
Arduino ISP
0.3 Aplicaciones
El mdulo Arduino ha sido usado como base en diversas
aplicaciones electrnicas:
3.1
Esquema de conexiones
1.1
Entradas y salidas
3
Isadora (Interactividad audiovisual en tiempo real)
Instant Reality (X3D)
Java
Liberlab (software de medicin y experimentacin)
Mathematica
Matlab
MaxMSP: Entorno grco de programacin para
aplicaciones musicales, de audio y multimedia
Minibloq: Entorno grco de programacin, corre
tambin en las computadoras OLPC
Perl
Php
Especicaciones
Processing
Pure Data
Python
Ruby
Scratch for Arduino (S4A): Entorno grco de programacin, modicacin del entorno para nios
Scratch, del MIT
3DVIA Virtools: aplicaciones interactivas y de Arduino est basado en C y soporta todas las funciones
del estndar C y algunas de C++.[22] A continuacin se
tiempo real.
muestra un resumen con la estructura y sintaxis del len Adobe Director
guaje Arduino:
BlitzMax (con acceso restringido)
C
Delimitadores:;, {}
C#
Comentarios: //, /* */
Operadores aritmticos: +, -, *, /, %
Gambas
Asignacin: =
Utilidades
sizeof()
Operadores compuestos:
E/S digital
Incremento y decremento de variables: ++, - Asignacin y operacin: +=, -=, *=, /=, &=, |=
3.1.2
Estructuras de control
Variables
pinMode(pin, modo)
digitalWrite(pin, valor)
int digitalRead(pin)
E/S analgica
analogReference(tipo)
int analogRead(pin)
analogWrite(pin, valor)
delayMicroseconds(microsegundos)
true (verdadero): Seal cuya denicin es ms amplia que la de false. Cualquier nmero entero diferente de cero es verdadero, segn el lgebra de Matemticas
Boole, como en el caso de 200, 1 o 1. Si es cero,
min(x, y), max(x, y), abs(x), constrain(x, a, b),
es falso.
map(valor, fromLow, fromHigh, toLow, toHigh),
pow(base, exponente), sqrt(x)
Tipos de datos
void, boolean, char, unsigned char, byte, int, un- Trigonometra
signed int, word, long, unsigned long, oat, double,
string, array.
sin(rad), cos(rad), tan(rad)
Conversin entre tipos Estas funciones reciben como Nmeros aleatorios
argumento una variable de cualquier tipo y devuelven una
variable convertida en el tipo deseado.
randomSeed(semilla), long random(mx), long random(mn, mx)
char(), byte(), int(), word(), long(), oat()
Bits y Bytes
Cualicadores y mbito de las variables
static, volatile, const
3.2
AVR Libc
Interrupciones externas
attachInterrupt(interrupcin, funcin, modo)
detachInterrupt(interrupcin)
Interrupciones
interrupts(), noInterrupts()
Comunicacin por puerto serie Las funciones de
manejo del puerto serie deben ir precedidas de la palabra
Serial aunque no necesitan ninguna declaracin en la
cabecera del programa. Por esto se consideran funciones
base del lenguaje.[23] Estas son las funciones para transmisin serial:
begin(), available(), read(), ush(), print(), println(), La mayora del lenguaje de programacin Arduino est escrita con constantes y funciones de AVR y ciertas
write()
funcionalidades slo se pueden obtener haciendo uso de
AVR.[25]
3.1.5 Manipulacin de puertos
Los registros de puertos permiten la manipulacin a 3.2.1 Interrupciones
ms bajo nivel y de forma ms rpida de los contactos de entrada/salida del microcontrolador de las pla- Las seales de interrupcin son las siguientes:
cas Arduino.[24] Los contactos elctricos de las placas
Arduino estn repartidos entre los registros B(0-7), C
cli(): desactiva las interrupciones globales
(analgicos) y D(8-13). Mediante estas variables ser observado y modicado su estado:
sei(): activa las interrupciones
DDR[B/C/D]: Data Direction Register (o direccin
del registro de datos) del puerto B, C D. Es una
Esto afectar al temporizador y a la comunicacin serial.
variable de Lectura/Escritura que sirve para especiLa funcin delayMicroseconds() desactiva las interrupcar cuales contactos sern usados como entrada y
ciones cuando se ejecuta.
salida.
PORT[B/C/D]: Data Register (o registro de datos)
del puerto B, C D. Es una variable de Lectu- 3.2.2 Temporizadores
ra/Escritura.
La funcin delayMicroseconds() crea el menor retardo
PIN[B/C/D]: Input Pins Register (o registro de pines
posible del lenguaje Arduino que ronda los 2s. Para rede entrada) del puerto B, C D. Variable de slo
tardos ms pequeos se debe utilizar la llamada de enlectura.
samblador 'nop' (no operacin). Cada sentencia 'nop' se
ejecutar en un ciclo de mquina (16 MHz) de aproximaPor ejemplo, para especicar los contactos 9 a 13 como
damente 62,5ns.
salidas y el 8 como entrada (puesto que el puerto D usa
los pines de la placa Arduino 8 al 13 digitales) bastara
utilizar la siguiente asignacin:
3.2.3 Manipulacin de puertos
DDRD = B11111110;
Como se ha podido comprobar, el conocimiento del len- La manipulacin de puertos con cdigo AVR es ms rguaje C, permite la programacin en Arduino debido a la pida que utilizar la funcin digitalWrite() de Arduino.
similitud entre ste y el lenguaje nativo del proyecto, lo
que implica el aprendizaje de algunas funciones especcas de que dispone el lenguaje del proyecto para manejar 3.2.4 Establecer Bits en variables
los diferentes parmetros. Se pueden construir aplicaciones de cierta complejidad sin necesidad de muchos con- cbi y sbi son mecanismos estndar (AVR) para establecer
o limpiar bits en PORT y otras variables.
ceptos previos.
3.3
BIBLIOTECAS EN ARDUINO
motas o como cliente. Se permiten hasta cuatro conexiones simultneas.[30] Los comandos usados son los siguienLa sintaxis del lenguaje de programacin Arduino es una tes:
versin simplicada de C/C++ y tiene algunas diferencias
respecto de Processing.[26][27] Debido a que Arduino es Servidor: Server(), begin(), available(), write(),
t basado en C/C++ mientras que Processing se basa en
print(), println()
Java, existen varias diferencias en cuanto a la sintaxis de
Cliente: Client(), connected(), connect(), write(),
ambos lenguajes y el modo en que se programa:
print(), println(), available(), read(), ush(), stop()
3.3.1
Arreglos
3.3.2
Impresin de cadenas
4.4 Firmata
3.4
Es una biblioteca de comunicacin con aplicaciones inEjemplo sencillo de programacin en formticas utilizando el protocolo estndar del puerto
serie.[31]
Arduino
Bibliotecas en Arduino
4.5 LiquidCrystal
Control de LCDs con chipset Hitachi HD44780 o
compatibles.[32] La biblioteca soporta los modos de 4 y
8 bits.
4.6 Servo
Biblioteca para el control de servo motores.[33] A partir
de la versin 0017 de Arduino la biblioteca soporta hasta
12 motores en la mayora de las placas Arduino y 48 en
la Arduino Mega. Estos son los comandos usados:
attach(), write(), writeMicroseconds(), read(), attached(), detach()
4.7 SoftwareSerial
Comunicacin serie en contactos digitales.[34] Por defecLas bibliotecas estndar que ofrece Arduino son las to Arduino incluye comunicacin slo en los contactos
0 y 1 pero gracias a esta biblioteca puede realizarse esta
siguientes:[28]
comunicacin con los restantes.
4.1
Serial
4.2
EEPROM
4.8 Stepper
Control de motores paso a paso unipolares o bipolares.[35]
Stepper(steps, pin1, pin2), Stepper(steps, pin1,
pin2, pin3, pin4), setSpeed(rpm), step(steps)
4.3
Ethernet
4.9 Wire
Envo y recepcin de datos sobre una red de dispositivos
o sensores mediante Two Wire Interface (TWI/I2C).[36]
7
diversas bibliotecas desarrolladas por diversos colabora- Ejemplo de parpadeo de LED
dores que permiten realizar muchas tareas.
/* Blink Turns on an LED on for one second, then o
for one second, repeatedly. This example code is in the
public domain. */ // Pin 13 has an LED connected on
4.10 Creacin de bibliotecas
most Arduino boards. // give it a name: int led = 13;
Los usuarios de Arduino tienen la posibilidad de escribir // the setup routine runs once when you press reset:
sus propias bibliotecas.[37] Ello permite disponer de c- void setup() { // initialize the digital pin as an output.
digo que puede reutilizarse en otros proyectos, mantener pinMode(led, OUTPUT); } // the loop routine runs over
el cdigo fuente principal separado de las bibliotecas y la and over again forever: void loop() { digitalWrite(led,
organizacin de los programas construidos es ms clara. HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second digitalWrite(led,
LOW); // turn the LED o by making the voltage LOW
delay(1000); // wait for a second }
4.10.1 Ejemplo de biblioteca
El siguiente ejemplo permite el envo de caracteres me- Ejemplo de lectura de Potenciometro
diante el cdigo Morse:
/* ReadAnalogVoltage Reads an analog input on pin 0,
Se crea el archivo Morse.h que incluye la denicin de la converts it to voltage, and prints the result to the serial
clase Morse que tiene 3 funciones: un constructor (Mor- monitor. Attach the center pin of a potentiometer to
se()), una funcin para enviar 1 punto (dot()) y una fun- pin A0, and the outside pins to +5V and ground. This
cin para enviar una raya (dash()). La variable _pin per- example code is in the public domain. */ // the setup
mite indicar el contacto a usar.
routine runs once when you press reset: void setup() { //
/* Morse.h - Biblioteca para el envo de Cdigo Morse. initialize serial communication at 9600 bits per second:
Creado por David A. Mellis, el 2 de noviembre de 2007. Serial.begin(9600); } // the loop routine runs over and
Liberado al dominio pblico. */ # ifndef Morse_h # over again forever: void loop() { // read the input on
dene Morse_h # include WProgram.h class Morse { analog pin 0: int sensorValue = analogRead(A0); //
public: Morse(int pin); void dot(); void dash(); private: Convert the analog reading (which goes from 0 - 1023)
to a voltage (0 - 5V): oat voltage = sensorValue *
int _pin; }; # endif
(5.0 / 1023.0); // print out the value you read: Serial.println(voltage); }
Debe ser creado el archivo Morse.cpp con el cdigo, es
decir con la implementacin de los mtodos declarados:
/* Morse.cpp - Biblioteca para el envo de Cdigo
Morse. Creado por David A. Mellis, el 2 de noviembre 6 Instalacin en diferentes
de 2007. Liberado al dominio pblico. */ # include
nos
WProgram.h # include Morse.h Morse::Morse(int
pin) { pinMode(pin, OUTPUT); _pin = pin; } void
Morse::dot() { digitalWrite(_pin, HIGH); delay(250); 6.1 Windows
digitalWrite(_pin, LOW); delay(250); } void Morse::dash() { digitalWrite(_pin, HIGH); delay(1000); Los pasos a seguir son los siguientes:
digitalWrite(_pin, LOW); delay(250); }
La biblioteca creada as puede ser usada mediante el comando #include. Si se desea enviar una peticin de auxilio SOS por el contacto 13 bastara 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();
Ejemplos de Cdigo
entor-
Descargar las versiones ms 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 congurar el puerto USB donde est conectada la placa.
6.2 GNU/Linux
Para instalar Arduino en un sistema GNU/Linux necesiLa pgina de Arduino cuenta con una serie de ejemplos tamos los siguientes programas para resolver las depenpara comenzar a entender su funcionamiento, con com- dencias:
ponentes base tales como Pantallas, LEDs, Potenciome Sun java runtime, jre.
tros, etc.
9 MINIBLOQ
7 Equipo de desarrollo
El ncleo del equipo de desarrollo de Arduino est formado por Massimo Banzi, David Cuartielles, Tom Igoe,
Gianluca Martino, David Mellis y Nicholas Zambetti.
8 Pduino
Patch Pduino.
Pduino nace de la fusin de los proyectos Pure Data y Arduino. Ambos proyectos de fuente abierta permiten trabajar con interfaz grca. Cargando el rmware de Pure
Data (PD) a la placa Arduino se puede acceder a ella mediante el lenguaje de programacin grco.
9 Minibloq
9
cutarse de manera independiente de la computadora.
El modo directo permite modicar los programas y ver
los cambios producidos de manera inmediata en el comportamiento del robot, lo cual facilita la programacin,
sobre todo al usuario inexperto. Asimismo, permite ver
constantemente los valores de los sensores y utilizar el
robot, por ejemplo, como para adquirir datos.
Combinacin de una computadora de bajo costo OLPC, el software Minibloq y una placa Arduino.
nibloq es de uso libre y sus fuentes tambin estn disponibles gratuitamente. Una caracterstica importante, es que
puede correr tambin en la computadora porttil OLPC,
mediante el software Wine.
11 Vase tambin
BASIC Stamp
Impresin 3D
Gumstix
10
Physical Etoys
Minibloq
MiniPC
OOPIC
PICAXE
Raspberry Pi
Physical Etoys
Robot
X10
12 Referencias
Proyecto de un semforo realizado con Arduino y Physical Etoys.
Physical Etoys es una extensin libre y gratuita que permite que diversos dispositivos electrnicos como Lego
NXT, las placas Arduino, Sphero, Kinect, Joystick Wiimote, entre otros, puedan ser programados fcilmente y
que interacten entre s gracias a su sistema de bloques.
En el caso de Arduino, Physical Etoys ofrece dos modos
de programacin:
1. El modo directo, en el cual los programas se ejecutan en la computadora del usuario y las rdenes se
transmiten inmediatamente a travs del puerto serie.
2. El modo compilado, en el cual los programas se
traducen a C++ y se bajan a la placa, para luego eje-
10
14 ENLACES DE EXTERNOS
13 Bibliografa
Oxer, Jonathan; Blemings, Hugh (28 de diciembre
de 2009). Practical Arduino: Cool Projects for Open
Source Hardware (1 edicin). Apress. p. 500. ISBN
1430224770.
Noble, Joshua (15 de julio de 2009). Programming
Interactivity: A Designers Guide to Processing, Arduino, and openFramework (1 edicin). O'Reilly
Media. p. 768. ISBN 0596154143.
Banzi, Massimo (24 de marzo de 2009). Getting
Started with Arduino (1 edicin). Make Books. p.
128. ISBN 0596155514.
14 Enlaces de externos
(blog en ingls)
[26] Arduino/Processing
Language
Comparison.
http://www.arduino.cc'' (en ingls). Consultado el 22
de diciembre de 2013.
[27] Language
Reference(API)/Processing
2+.
http://processing.org/'' (en ingls). Consultado el 22
de diciembre de 2013."
11
Biicode: Aplicacin para gestionar libreras y proyectos de Arduino
Entorno grco de programacin para Arduino
Winkhel: cmo un proyecto Arduino puede convertirse en un producto real (en espaol)
Scada para Arduino
S-Remote Control: Aplicacin Android para controlar Arduino por UDP o TCP
Ejemplo de uso de Arduino y Gambas: Grca de
datos de sensores
12
15
15
15.1
Arduino Fuente: http://es.wikipedia.org/wiki/Arduino?oldid=79643310 Colaboradores: 4lex, Sabbut, Tony Rotondas, Ramjar, Interloper, Chobot, BOT-Superzerocool, Museo8bits, GermanX, The Photographer, Jago84, CEM-bot, Chuo, Montgomery, JoaquinFerrero,
JAnDbot, CommonsDelinker, Biasoli, Cinevoro, VolkovBot, Synthebot, Shooke, Muro Bot, Nabegando1990, Loveless, Leonaro, Drinibot, BOTarate, Yonseca, Javierito92, Kikobot, Botelln, Leonpolanco, Alecs.bot, LordT, Alexbot, Darkicebot, Clunhair, UA31, AVBOT,
LucienBOT, Arjuno3, Luckas-bot, MystBot, Disenyo, DanielrocaES, Ral Milla, SuperBraulio13, Xqbot, Jkbw, Brunonar, Frammm, Macucal, JaadesA, Botarel, AstaBOTh15, Joebigwheel, Hprmedina, Jcdy, Halfdrag, Kizar, Omerta-ve, Thomas-pluralvonglas, PatruBOT,
Rononito, Julian dasilva, EmausBot, Savh, ZroBot, SUPUL SINAC, Grillitus, JackieBot, Minirobots, ChuispastonBot, WikitanvirBot,
Diamondland, Dr Doofenshmirtz, Ruos, Jmdoren, KLBot2, Loureda, Yomalospelos, Arthur 'Two Sheds Jackson, MetroBot, Invadibot, Turoart, Johnbot, Elvisor, Laure f o, Enrique Pichardo, Angelo9507, Angeldefuego22, Makecat-bot, Jsbsan, Sebastiangabrielblanco,
RichoM, Chemaper, Addbot, Arkantos13, Arkantos1997, Lagoset, Hithwen, Jernimo lvarez, Mario Zuiga Carrillo y Annimos: 108
15.2
Images
Archivo:Arduino316.jpg Fuente: http://upload.wikimedia.org/wikipedia/commons/6/6c/Arduino316.jpg Licencia: CC BY-SA 3.0 Colaboradores: http://www.arduino.cc/ Artista original: Nicholas Zambetti
Archivo:Arduino_Uno_-_R3.jpg Fuente: http://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg Licencia: CC
BY 2.0 Colaboradores: Arduino Uno - R3 Artista original: SparkFun Electronics from Boulder, USA
Archivo:Arduino_dani2.png Fuente: http://upload.wikimedia.org/wikipedia/commons/7/7a/Arduino_dani2.png Licencia: GPL Colaboradores: Screenshot by DanielrocaES Artista original: Arduino developers. Code sample by Hans-Christoph Steiner.
Archivo:Arduino_windows.JPG Fuente: http://upload.wikimedia.org/wikipedia/commons/7/75/Arduino_windows.JPG Licencia: GPL
Colaboradores: Screenshot by DanielrocaES Artista original: Arduino developers
Archivo:Blink.jpg Fuente: http://upload.wikimedia.org/wikipedia/commons/e/eb/Blink.jpg Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Julian dasilva
Archivo:Gambas_arduino_sensores_grfica.png Fuente: http://upload.wikimedia.org/wikipedia/commons/9/98/Gambas_arduino_
sensores_gr%C3%A1fica.png Licencia: CC BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Jsbsan
Archivo:P1040870.JPG Fuente: http://upload.wikimedia.org/wikipedia/commons/9/96/P1040870.JPG Licencia: GFDL Colaboradores:
Trabajo propio Artista original: Julian dasilva
Archivo:Pduino.png Fuente: http://upload.wikimedia.org/wikipedia/commons/6/6a/Pduino.png Licencia: GPL Colaboradores: Screenshot by DanielrocaES Artista original: Arduino developers.
Archivo:Semaforo_PE.png Fuente: http://upload.wikimedia.org/wikipedia/commons/5/56/Semaforo_PE.png Licencia: CC BY-SA 3.0
Colaboradores: Trabajo propio Artista original: Sebastiangabrielblanco
15.3
Content license