I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
PRACTICAS CON ARDUINO: Nivel 1 1. INTROD INTRODUC UCCIÓ CIÓN N Arduino es una plataf orma de hardware libre, basada en un a placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica. Un microcontrolador es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida. El hardware de Arduino consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Consta de 13 “puertos” o conexiones digitales que pueden ser utilizados cono salidas o entradas (aunque es aconsejable no utilizar la 0 y la 1). Cuando son utilizadas como salidas darán un 0 o un 1, y por tanto, 0 voltios o 5 voltios. Con esta tensión podemos controlar dispositivos electrónicos que consuman poca energía, por ejemplo LED, un zumbador, o cualquier otro cuyo consumo sea inferior a 20 mA. Para controlar un motor, una lámpara, incluso un Relé, es necesario utilizar un transistor. También consta de 5 entradas analógicas que pueden recibir tensiones de 7 a 12 v, procedentes de cualquier sensor que proporcione información del exterior a nuestro Arduino: temperatura, luminosidad, humedad, velocidad, posición,… La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el popular lenguaje de programación de alto nivel Processing. Sin embargo, es posible utilizar otros lenguajes de programación y aplicaciones populares en 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, Pitón, Ruby, C, C++ (mediante libSerial o en Windows), 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), 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. Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador (por ejemplo: Macromedia 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. Al ser open-hardware, tanto su diseño como su distribución es libre. Es decir, puede utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia.
Tema Programación con Arcuino
J.A. González
1
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
2. PROGRAMACIÓN BÁSICA La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. Ambas funciones son necesarias para que el programa trabaje. Hay que ser muy cuidadoso y escribir los “comandos” exactamente, reSpetando mayúsculas y minúsculas y colocando “ ; “ al finalizar la línea de comando. La estructura básica es esta: En el setup, entre los corchetes { } tenemos que indicar
void setup() { estamentos; }
los datos de configuración del programa. Por ejemplo que “pin” o puerto vamos a utilizar, cuales son entradas y cuales salidas, cuales son las variables… El setup se ejecuta sólo una vez al comenzar el programa, mientras que lo que pongamos en el loop se va a repetir indefinidamente. La función bucle (loop) siguiente contiene el código que se ejecutara continuamente (lectura de entradas,
void loop() { estamentos; }
Tema Programación con Arcuino
activación de salidas, etc) Esta función es el núcleo de todos los programas de Arduino y la que realiza la mayor parte del trabajo.
J.A. González
2
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
PRÁCTICA 1. PROGRAMACIÓN BÁSICA: Activación de una salida digital. El LED conectado a la salida digital nº 12 parpadea. pinMode(patilla, modo). El modo puede ser INPUT (que es entrada) o OUTPUT (que es salida). digitalWrite(patilla,valor). Escribe en una patilla un valor HIGH (que es alto) o LOW. Dentro del setup (entre los corchetes), colocamos la orden
void setup()
pinMode. Con esta orden indicamos que la salida 12 será una
{
Salida.
pinMode(12, OUTPUT); }
Dentro del loop (entre los corchetes) digitalWrite
void loop() { digitalWrite(12, HIGH); delay(500); digitalWrite(12, LOW);
“escribe en la salida digital 12 un valor 1” Ojo!! Después de cada orden hay que escribir “
; “
delay Hace esperar al programa 500 milisegundos ( o sea 0,5 segundos) Repite la orden y escribe un valor 0 en el pin 12. Espera 0,1
delay(100);
segundo.
}
Repite el programa indefinidamente.
Una vez escrito el programa pulsamos el botón verificar, para detectar errores de escritura. Si no hay ninguno conectamos arduino al ordenador y pulsamos cargar para que lo ejecute.A los programas se les suele poner un texto que explica como funcionan. El próximo programa que realicemos lo tendrá. Pero hay que tener mucho cuidado y escribir el texto adecuadamente para que no de error.
Tema Programación con Arcuino
J.A. González
3
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
PRÁCTICA 2. PROGRAMACIÓN BÁSICA: Activación de una salida digital. Se encienden alternativamente 3 LED. Vamos a crear tres variables que asignaremos a cada una de las patillas donde hemos conectado los LED. Programa con las explicaciones iniciales que deben ir
/*
explicación
*/
Si queremos hacer alguna explicación en la linea de comando debe de ser después de // /* 02 Salidas Digitales Los tres led parpadean formando una secuencia Rojo, Amarillo y Verde. Instrucciones : Debemos utilizar el punto y coma " ; " al final de cada declaración separando los elementos del probrama. Con la orden int creamos una variable, por ejemplo la variable "rojo" y le asignamos un valor, por ejemplo valor "12". Si la variable queremos que esté disponible para todo el programa debe de crearse ANTES del setup(). También podemos crear variables que sólo afecten a una parte del programa. Es necesario escribir las ordenes correctamente. NO pinmode sino pinMode. Si está bien escrito aparece en color marrón. Conexiones: pin 12 : LED Rojo pin 11 : LED Amarillo pin 10 : LED Verde Crearemos las variables rojo, amarillo y verde y les asignaremos el número de pin. José Antonio González
*/ int rojo = 12; int amarillo = 11; int verde = 10;
// Crea una variable llamada "rojo" y le asigna un valor 13
void setup() { pinMode(rojo, OUTPUT); // Indica que la variable " rojo " es una salida de arduino, y por tanto el pin 13 es una salida. pinMode(amarillo, OUTPUT); pinMode(verde, OUTPUT); } void loop() { digitalWrite(rojo, HIGH); delay(500); digitalWrite(rojo, LOW);
// Escribe en la variable "rojo" un valor alto, un "1". // Espera 0,5 segundos // Escribe en la variable "rojo" un valor bajo, un "0".
digitalWrite(amarillo, HIGH); delay(500); digitalWrite(amarillo, LOW); digitalWrite(verde, HIGH); delay(500); digitalWrite(verde, LOW); }
Tema Programación con Arcuino
J.A. González
4
I.E.S. ZOCO (Córdoba)
Tema Programación con Arcuino
Departamento de Tecnología
J.A. González
5
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
PRÁCTICA 3. REGULACIÓN DE UN CRUCE DE SEMÁFOROS. Tenemos dos semáforos con una luz roja, otra amarilla y otra verde. Llamaremos rojo1, amarillo1 y verde1 a las luces de uno de los semáforos y rojo2, amarillo2 y verde2 a las luces del otro. Piensa la secuencia lógica de funcionamiento del sistema escríbela y posteriormente realiza el programa. Utiliza los siguientes pines, creando las variables correspondientes. pin 13 : LED Rojo1
pin 7 : LED Rojo2
pin 12 : LED Amarillo1
pin 6 : LED Amarillo2
pin 11 : LED Verde1
pin 5 : LED Verde2
PRÁCTICA 4. SOS CON ZUMBADOR. Se trata de un zumbador que en código morse (pitidos largos y cortos) emite una palabra, en nuestro caso SOS. En código morse la S se reproduce con 3 señales de corta duración y la O con tres señales de larga duración. El zumbador debe estar conectado al pin 13, los pitidos cortos tendrán una duración de 100 ms y los largos de 300 ms. Entre letra y letra debe pasar un tiempo de 300 ms y, entre SOS y SOS debe pasar un tiempo de 1000 ms.
PRÁCTICA 5. “EL COCHE FANTÁSTICO”. Se trata de encender y apagar 7 leds de forma secuencial. Los led van a estar conectados a los pines 5,6,7,8,9,10 y 11. En primer lugar los led se deben encender del 5 al11, dejando pasar 50 milisegundos, al finalizar deben comenzar a encenderse y apagarse del led 11 al 5. La secuencia debe repetirse indefinidamente. El efecto del programa es el de la serie de televisión “el coche fantástico”.
3. ENTRADAS DIGITALES Es muy importante saber como podemos introducir en arduino una señal digital ( 0 ó 1) en una de sus entradas. Esta señal puede proceder de un final de carrera, un sensor de luz, un pulsador,…En primer lugar debemos configurar el pin que vamos a utilizar como entrada en el programa pero es FUNDAMENTAL que la señal de entrada procedente del exterior sea de 5 voltios y tenga una resistencia de 10 KΩ conectada a tierra o 0 voltios. Así evitamos cortocircuitos. Ojo porque podemos quemar el microprocesador
El interruptor podría ser un pulsador, como en el próximo ejercicio o una puerta lógica, un sensor de luz con su transistor,… En esta práctica vamos a utilizar también la orden
if que nos permite que el programa haga una cosa u
otra en función de un dato o una entrada.
Tema Programación con Arcuino
J.A. González
6
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
4. ORDEN if (condicional) if es una función que se utiliza para probar si una determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima de un cierto número, y ejecutar una serie de operaciones que se escriben dentro de llaves, si es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves. El formato para if es el siguiente: if (x==HIGH) { pinWrite(10, LOW) } Si la variable x tiene un valor igual a HIGH o 5 voltios entonces pon en el pin 10 un 0. Otro ejemplo: If( digitalRead(10)==HIGH) { pinWrite(13, LOW) }
PRACTICA 5: SEMÁFORO CON PULSADOR. Realiza un semáforo con un pulsador de modo que hasta que no lo pongamos a 5 voltios (un 1) no se pondrá en marcha el programa. Ojo con la conexión del pulsador al pin 8.
/* 03 Semaforo simple. Con pulsador, de modo que cuando le demos un pulso, se pone en marcha el semáforo, hasta que no le demos otro no volverá a funcionar. ORDEN IF(SI Condicional) If (concicioon) "corchete" ejecutamos las instrucciones entre corchetes "corchete" Conexiones: pin 13 : LED Rojo pin 12 : LED Amarillo pin 11 : LED Verde pin 8 : Pulsador Crearemos las variables rojo, amarillo ,verde y pulsador y les asignaremos el número de pin. José Antonio González */
Tema Programación con Arcuino
J.A. González
7
I.E.S. ZOCO (Córdoba)
int rojo = 13;
Departamento de Tecnología
// Crea una variable llamada "rojo" y le asigna un valor 13
int amarillo = 12; int verde = 11; int pulsador = 8; void setup() { pinMode(rojo, OUTPUT);
// Indica que la variable " rojo " es una salida de arduino, y por tanto el pin 13 es una salida.
pinMode(amarillo, OUTPUT); pinMode(verde, OUTPUT); pinMode(pulsador, INPUT); } void loop() { if (digitalRead(pulsador) == HIGH) { digitalWrite(rojo, HIGH);
// Escribe en la variable "rojo" un valor alto, un "1".
delay(500);
// Espera 0,5 segundos
digitalWrite(rojo, LOW);
// Escribe en la variable "rojo" un valor bajo, un "0".
digitalWrite(amarillo, HIGH); delay(500); digitalWrite(amarillo, LOW);
digitalWrite(verde, HIGH); delay(500); digitalWrite(verde, LOW); } } En el ejemplo anterior se compara una variable con un valor, el cual puede ser una variable o constante. Si la comparación, o la condición entre paréntesis se cumple (es cierta), las declaraciones dentro de los corchetes se ejecutan. Si no es así, el programa salta sobre ellas y sigue.
Tema Programación con Arcuino
J.A. González
8
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
5. ORDEN if .....else (si….sino….) if… else viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es baja, usted escribiría que de esta manera: if (inputPin == HIGH) { instruccionesA; } else { instruccionesB; }
Else puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose
ejecutar a la vez. Es incluso posible tener un
número ilimitado de
estos condicionales. Recuerde sin embargo qué sólo un conjunto de declaraciones
se llevará a cabo dependiendo de la condición probada: if (inputPin < 500) { instruccionesA; } else if (inputPin >= 1000) { instruccionesB; { else { instruccionesC; }
PRACTICA 6: SEMÁFORO CON PULSADOR Y ORDEN if…else. Repite la progrmación anterior de modo que si se cierra el pulsador se pone en marcha la secuencia del control de semáforos. Si no pulsamos todos los led deben encenderse, permanecer unos instantes encendidos y luego apagarse.
Tema Programación con Arcuino
J.A. González
9
I.E.S. ZOCO (Córdoba)
Departamento de Tecnología
6. ORDEN for La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (;), vemos el ejemplo de su sintaxis: for (inicialización; condición; expresión) { Instrucciones; }
La inicialización de una variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Esta condición puede ser que una entrada esté activa, que un final de carrera esté pulsado,… Mientras que la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina. En la expresión podemos colocar un parámetro que determine cuantas veces va a repetirse el bucle.
Ej: En primer lugar se define la variable i y le da un valor 0. Siempre que i sea menor que 20 se repite todo lo que pongamos dentro de los corchetes { }. Cuando se han ejecutado las órdenes, se ejecuta la expresión “i++” que suma 1 al valor de i. Si el valor de i continua siendo menor de 20 se repite el proceso. Cuando i llega a valer 20 se para. for (int i=0; i<20; i++) { digitalWrite(13, HIGH); delay(250); digitalWrite(13, LOW); delay(250); } REPITE LA PRÁCTICA “ZUMBADOR SOS” UTILIZANDO LA ORDEN FOR Debes lograr que el zumbador suene 3 veces seguidas para producir la letra S, otras 3 para producir la letra O y otras tres la letra S.
Tema Programación con Arcuino
J.A. González
10