ARDUINO ¿QUÉ ES ARDUINO? Arduino es una herramienta herramienta para hacer que los ordenadores ordenadores puedan puedan sentir y controlar el mundo físico a través de tu ordenador personal. Es una plataforma de desarrollo de computación física (physical computing) de código abierto, basada en una placa con un sencillo microcontrolador y un entorno de desarrollo para crear software (programas) para la placa. Puedes usar Arduino para crear objetos interactivos, leyendo datos de una gran variedad de interruptores y sensores y controlar multitud de tipos de luces, motores y otros actuadores físicos. Los proyecto de Arduino pueden ser autónomos o comunicarse con un programa (software) que se ejecute en tu ordenador (ej. Flash, Processing, MaxMSP). La placa puedes montarla mont arla tú mismo mism o o comprarla ya lista para par a usar, y el software softwar e de desarrollo es abierto y lo puedes descargar gratis. El lenguaje de programación de Arduino es una implementación de Wiring, una plataforma de computación física parecida, que a su vez se basa en Processing, un entorno de programación multimedia.
Requerimiento 1. 2. 3. 4. 5. 6. 7. 8. 9.
Conseguir una placa Arduino y el cable USB Descargar el ambiente de desarrollo Arduino Instalar los drivers USB Conectar la tarjeta Arduino Conectar un LED Ejecturar el ambiente de desarrollo Arduino Cargar el programa en la tarjeta Mirar como pestañea el LED Aprender a usar Arduino Arduino
CARACTERÍSTICAS Arduino UNO La Arduino Uno posee:
14 entrada/salida digitales, de los cuales 6 pueden se usados como salidas PWM Posee 6 entradas analógicas Los pin 0 y 1 pueden funcionar como RX y TX serial. Un oscilador de crystal de 16 MHz Conector USB Un jack de poder Una conector ICSP Botón de Reset
La Arduino UNO posee todo lo que se necesita para manejar el controlador, simplemente se conecta a un computador por medio del cable USB o se puede alimentar utilizando una batería o un adaptador AC-DC. Si se conecta por USB, la alimentación externa no es necesaria.
Algunas características son:
Microcontroller ATmega328 Operating Voltage 5V Input Voltage (recommended) 7-12 V Input Voltage (limits) 6-20 V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 32 KB (of which 0.5 KB used by bootloader) SRAM 2 KB EEPROM 1 KB Clock Speed 16 MHz
Las Entradas analógicas son de 10 bits, por lo que entregan valores entre 0 y 1023. El rango de voltage está dado entre 0 y 5 volts, pero utilizando el pin AREF disponible, este rengo se puede variar a algún otro deseado.
Arduino Mega 2560 La placa Arduino Mega 2560 posee:
54 entrada/salida digitales, de los cuales 14 pueden se usados como salidas PWM Posee 16 entradas analógicas Posee 4 puertos seriales por Hardware (UART) Un oscilador de crystal de 16 MHz Conector USB Un jack de poder Una conector ICSP Botón de Reset
Algunas características son:
Microcontroller ATmega2560 Operating Voltage 5V Input Voltage (recommended) 7-12 V Input Voltage (limits) 6-20 V Digital I/O Pins 54 (of which 14 provide PWM output) Analog Input Pins 16 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 256 KB (of which 8 KB used by bootloader) SRAM 8 KB EEPROM 4 KB Clock Speed 16 MHz
ELEMENTOS QUE COMPONEN ARDUINO Los elementos necesarios para que arduino funcione son los siguientes dividido en dos secciones:
Hardware:
Placa arduino (serie/usb). Cable de comunicaciones (serie/usb). Fuente de alimentación (opcional). Pc / portátil + adaptador serie-usb (opcional).
Software:
Entorno de desarrollo. Drivers usb (opcional).
INFORMACIÓN ASOCIADA AL FUNCIONAMIENTO DE ARDUINO
Lenguaje de programación Arduino La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el popular lenguaje de programación de alto nivelProcessing. Sin embargo, es posible utilizar otros lenguajes de programación y aplicaciones populares en 9
Arduino. Algunos ejemplos son:
Java
Flash (mediante ActionScript)
Processing
Pure Data
MaxMSP (entorno gráfico de programación para aplicaciones musicales, de audio y multimedia)
VVVV (síntesis de vídeo en tiempo real)
Adobe Director
Python
Ruby
C
C++ (mediante libSerial o en Windows)
C#
Cocoa/Objective-C (para Mac OS X)
Linux TTY (terminales de Linux)
3DVIA Virtools (aplicaciones interactivas y de tiempo real)
SuperCollider (síntesis de audio en tiempo real)
Instant Reality (X3D)
Liberlab (software de medición y experimentación)
BlitzMax (con acceso restringido)
Squeak (implementación libre de Smalltalk)
Mathematica
Matlab
Minibloq (Entorno gráfico de programación, corre también en OLPC)
Isadora (Interactividad audiovisual en tiempo real)
Perl
Physical Etoys (Entorno gráfico de programación usado para proyectos de robótica educativa)
Scratch for Arduino (S4A) (entorno gráfico de programación, modificación del entorno para niños Scratch, del MIT)
Visual Basic .NET
VBScript
Gambas
Php
Esto es posible debido a que Arduino se comunica mediante la transmisión de datos en formato serie que es algo que la mayoría de los lenguajes anteriormente citados soportan. 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. Es bastante interesante tener la posibilidad de interactuar Arduino mediante esta gran variedad de sistemas y lenguajes puesto que dependiendo de cuales sean las necesidades del problema que vamos a resolver podremos aprovecharnos de la gran compatibilidad de comunicación que ofrece.
Funciones básicas y operadores 10
Arduino está basado en C y soporta todas l as funciones del estándar C y algunas de C++. A continuación se muestra un resumen con todas la estructura del lenguaje Arduino:
Sintaxis Básica
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/decremento de variables: ++, --
Asignación y operación: +=, -=, *=, /=, &=, |=
Estructuras de control
Condicionales: if, if...else, switch case
Bucles: for, while, do... while
Bifurcaciones y saltos: break, continue, return, goto
Variables En cuanto al tratamiento de las variables también comparte un gran parecido con el lenguaje C.
Constantes
HIGH / LOW: niveles alto y bajo en pines. Los niveles altos son aquellos de 3 voltios o más.
INPUT / OUTPUT: entrada o salida
true / false
Tipos de datos
void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float, double, string, array
Conversión entre tipos 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
static, volatile, const
Utilidades
sizeof()
Funciones Básicas En cuanto a las funciones básicas del lenguaje nos encontramos con las siguientes:
E/S Digital
pinMode(pin, modo)
digitalWrite(pin, valor)
int digitalRead(pin)
E/S Analógica
analogReference(tipo)
int analogRead(pin)
analogWrite(pin, valor)
E/S Avanzada
shiftOut(dataPin, clockPin, bitOrder, valor)
unsigned long pulseIn(pin, valor)
Tiempo
unsigned long millis()
unsigned long micros()
delay(ms)
delayMicroseconds(microsegundos)
Matemáticas
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
sin(rad), cos(rad), tan(rad)
Números aleatorios
randomSeed(semilla), long random(máx), long random(mín, máx)
Bits y Bytes
lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit()
Interrupciones externas
attachInterrupt(interrupción, función, modo)
detachInterrupt(interrupción)
Interrupciones
interrupts(), noInterrupts()
Comunicación por puerto serie Las funciones de manejo del puerto serie deben ir precedidas de "Serial." aunque no necesitan ninguna declaración en la cabecera del programa. Por esto se consideran funciones base del lenguaje .
11
begin(), available(), read(), flush(), print(), println(), write()
Manipulación de puertos Los registros de puertos permiten la manipulación a más bajo nivel y de forma más rápida de los pines de E/S del microcontrolador de las placas Arduino.
12
Los pines de las placas Arduino están repartidos entre los registros B(0-7), C
(analógicos) y D(8-13). Mediante las siguientes variables podemos ver y modificar su estado:
DDR[B/C/D]: Data Direction Register (o dirección del registro de datos) del puerto B, C ó D. Sirve para especificar que pines queremos usar como de entrada y cuales de salida. Variable de Lectura/Escritura.
PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C ó D. 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 que queremos utilizar los pines 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, si conocemos el lenguaje C, no tendremos dificultades para programar en Arduino puesto que se parecen enormemente. Tan sólo debemos aprender algunas funciones específicas de que dispone el lenguaje para manejar los diferentes parámetros de Arduino. Se pueden construir aplicaciones de cierta complejidad sin necesidad de muchos conceptos previos.
A.V.R. Libc Los programas compilados con Arduino (salvo en las placas con CorteX M3) se enlazan contra AVR Lib c
10
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.
13
Interrupciones Para desactivar las interrupciones:
cli(); // desactiva las interrupciones globales
Para activarlas: sei(); // activa las interrupciones Esto afectará al temporizador y a la comunicación serie. La función delayMicroseconds() desactiva las interrupciones cuando se ejecuta.
Temporizadores 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): unos 62.5ns. Se haría de la siguiente manera:
__asm__("nop\n\t");
Manipulación de puertos 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 cbi y sbi son mecanismos estándar (AVR) para establecer o limpiar bits en PORT y otras variables. Será necesario utilizar las siguientes cabeceras para poder utilizarlos:
# ifndef cbi # define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) # endif # ifndef sbi # define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) # endif Para utilizarlas hay que pasarles como argumento la variable PORT y un pin para establecerlo o limpiarlo.
Diferencias con Processing La sintaxis del lenguaje de programación Arduino es una versión simplificada de C/C++ y tiene algunas diferencias respecto de Processing. Ya desde el punto de que Arduino esta basado en C/C++ mientras que Processing se basa en Java. En cuanto a la sintaxis de ambos lenguajes y el modo en que se programan existen también varias diferencias:
Arrays Arduino
Processing
int bar[8];
int[] bar = new int[8];
bar[0] = 1;
bar[0] = 1; int foo[] = { 0, 1, 2 };
int foo[] = { 0, 1, 2 };
o bien int[] foo = { 0, 1, 2 };
Impresión de cadenas Arduino
Processing
Serial.println("hello world");
println("hello world");
int i = 5;
int i = 5;
Serial.println(i);
println(i);
int i = 5; Serial.print("i = ");
int i = 5;
Serial.print(i);
println("i = " + i);
Serial.println(); Las diferencias son escasas por lo que alguien que conozca bien Processing tendrá muy pocos problemas a la hora de programar en Arduino.
TE AMO KEISY