Esta placa se programa, por ejemplo, en lenguaje de programación C, aunque existen aplicaciones para programarla con bloques de forma muy similar al scratch o al app inventor. Mediante esta placa y con los sensores adecuados se pueden automatizar muchas tareas de domótica, como por ejemplo, abrir y cerrar las persianas de dia y de noche, controlar a distancia electrodomésticos como el horno, activar alarmas, web cam's.
El kit del que disponemos incluye también una placa protoboard para realizar mas fácilmente las conexiones, sensores como pulsadores, termostatos, foto-resistencias, etc.
Lenguaje de programación Arduino
La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el lenguaje de programación de alto nivel Processing que es similar a C++.
Funciones básicas y operadores
Arduino está basado en C y soporta todas las funciones del estándar C y algunas de C++.24 A continuación se muestra un resumen con la estructura y sintaxis 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 y 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
Variable
En cuanto al tratamiento de las variables también comparte un gran parecido con el lenguaje C.
Constantes
- 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 algebra de Boole, como en el caso de -200, -1 o 1. Si es cero, es "falso".
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
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 la palabra "Serial" aunque no necesitan ninguna declaración en la cabecera del programa. Por esto se consideran funciones base del lenguaje.25 Estas son las funciones para transmisión serial:
- 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 contactos de entrada/salida del microcontrolador de las placas Arduino.26 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 este 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
Los programas compilados con Arduino (salvo en las placas con CorteX M3) se enlazan contra AVR Libc24 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.27
Interrupciones
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
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
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.
Proyector que se pueden hacer con Arduino Uno
Un reloj despertador avanzado
Que ni Samsung ni Apple ni ninguna otra marca te diga cómo debe ser tu reloj avanzado. ¿Lo quieres en formato despertador? Pues dicho y hecho. Bueno, hecho todavía no. Te toca seguir el tutorial de Make para que en un fin de semana puedas acabar un proyecto donde los eventos de tu Google Calendar harán saltar los avisos y alarmas de un reloj que puedes personalizar como quieras.
Notificación de un nuevo correo
Aunque ya hay soluciones comerciales que lo hacen (la combinación de IF y las Philips HUE, por ejemplo), en esta selección se trata de hacérnos nosotros mismos un sistema que nos indique visual o sonoramente la llegada de un nuevo correo a nuestra cuenta en el ordenador.
Con la omnipresente placa Arduino, en este caso nos sirve la más básica, una conexión USB con el ordenador y dos pequeños programas (uno para comprobar el email entrante y otro para activar la notificación), conseguimos crear un sistema de aviso de nuevo email que puede componerse de un simple LED, un altavoz o lo que queramos.
No hay comentarios:
Publicar un comentario