B3 T6 Arduino
B3 T6 Arduino
y Rojas
TEMA 6: ARDUINO
Ejemplo de programa
void setup() {
pinMode(pin, OUTPUT); // Establece 'pin' como salida
}
void loop() {
digitalWrite(pin, HIGH); // Activa 'pin'
delay(1000); // Pausa un segundo
digitalWrite(pin, LOW); // Desactiva 'pin'
delay(1000);
}
void setup(){……}
pinMode(13,OUTPUT);
void loop(){…instrucciones…}
Instrucciones
digitalWrite(13, HIGH); //
encender el LED ...
Sintaxis básica
Símbolos Descripción Ejemplo
; Se usa para finalizar una declaración. int a=13;
{} Una apertura de llaves siempre debe de ir void setup(){
seguida por una llave de cierre. // Instrucciones que se ejecutarán una vez
Se utilizan en varias construcciones }
diferentes e indican el principio y el fin de
una estructura.
// Líneas de comentarios. Se utilizan par dar // Una sola línea de comentario
/*…..*/ información del programa. Las líneas de /*Si la instrucción ocupa más de una línea
comentarios son ignoradas por el puedes utilizar esta sintaxis*/
compilador.
Otros Descripción Ejemplo
#define Reemplazará el nombre definido por el #define led_verde 3 // define la variable
valor asignado. Se suele usar para led verde conectada al pin número 3. En
configurar pines. este caso no existe el punto y coma
final de una instrucción
#include Se utiliza para incluir librerías fuera de su #include <Servo.h> // incluye una librería
sketch. específica para manejar servos. En este
caso no existe el punto y coma final
de una instrucción.
Pulsamos el botón
Una vez verificado, procedemos a cargarlo en la memoria de Arduino para que lo ejecute:
Cargar :
Si no sucede algún fallo en la comunicación aparcerá:
Cada vez que pulsemos el botón “reset” de la placa, Arduino comenzará a ejecutar el programa cargado.
Si el LED asociado a la salida digital 13 parpadea, entonces es que hemos instalado correctamente el
software de Arduino y el driver necesario.
3. INSTRUCCIONES BÁSICAS PARA ENTRADAS/SALIDAS DIGITALES
DO – D13: Disponemos de 14 pines digitales, que pueden actuar como entradas o salidas. Para
ello lo primero que hay que hacer es declarar el pin en cuestión como entrada o como salida. Además el
pin 0 y el 1 se utilizan para comunicación serie (se verá más adelante) y los pins que tienen marcado una
onda se pueden utilizar como salidas PWM.
Cuando se configuran como entradas digitales nos permitirán leer informaciones de tipo Sí/No: P.ej. Si los
interruptores son pulsados o No.
Cuando se configuran como salidas digitales nos permiten activar o desactivar lo que hayamos conectado
en ellas.
En el lenguaje de Arduino, se utilizan una serie de instrucciones básicas para interactuar con las E/S
digitales:
pinMode(pin, INPUT); // Declara el pin como entrada (lo podría haber declarado salida, y
cualquier pin de los mencionados)
Ejemplo:
pinMode (7, OUTPUT); // Declara el pin 7 como salida.
digitalWrite(pin,valor);// Escritura en un pin, donde valor = HIGH o LOW
Ejemplo:
digitalWrite (7, HIGH); // Enciende lo que haya conectado en el pin 7
analogRead(pin) Lectura del pin analógico: pin puede ser A0, A1, A2, A3, A4, A5.
¡Hay que incluir la letra A!
Ejemplo:
sensorValue=analogRead(A1);// En este caso asigno a la variable sensorValue el valor que
leo del pin A1
5. DECLARACIÓN DE VARIABLES Y CONSTANTES
En la tabla siguiente se puede ver un programa sin declarar variables y el mismo con declaración de
variables. Si quisiésemos que parpadeara otro LED, y cambiar la frecuencia de parpadeo, debemos
cambiar 5 valores. Si el programa fuese más largo, casi seguro que nos olvidaríamos algún cambio, dando
lugar a errores.
Para evitar ese problema, en programación se utiliza la declaración de variables.
Una variable es un valor que Arduino puede almacenar en su memoria y que, además de utilizarse, puede
modificarse en el transcurso del programa.
La línea de código declara que usaremos una variable llamada led de tipo entera (int)
int led=13; / / Declaramos la variable led y le asignamos el pin 13. No olvides el punto y coma. La
doble barra sirve para comentarios.
int retardo= 1000; // Declaramos una variable retardo y le asignamos el valor 1000.
Como ya hemos visto dependiendo del lugar donde declaremos una variable, ésta tendrá validez en todo el
programa o solamente en una parte de él.
Si declaramos una variable antes del bucle principal (void loop()), esta variable podrá utilizarse y será
reconocida en todo el programa. Recibe el nombre de variable global.
Si declaramos una variable en el interior de una estructura if, while, etc, solo tendrá vigencia dentro de
esa estructura. Recibe el nombre de variable local.
6. VARIABLES Y DATOS
Los datos que maneja Arduino pueden ser variables o constantes. En ambos casos, debe declararse el tipo
de dato que usará dicha variable o constante, con el fin de reservar la cantidad adecuada de memoria:
long Número mayor que int long numero=1000 // puede almacenar hasta 4 bytes
float Almacena un número decimal float decimal =42.6; // el separador decimal es el punto
String Almacena una frase o conjunto de String frase=”Hola mundo”; // Se escribe entre comillas normales
caracteres
Nota importante: la memoria de Arduino es un bien escaso, y cada variable declarada ocupa un
espacio según el tipo al que pertenezca. Por tanto no debemos desperdiciar espacio declarando
una varible como float cuando un tipo int es suficiente.
Operadores
Aritméticos Descripción Comparación Descripción
= Operador de asignación == Igual que
+/- Suma/Resta != Distinto a
++ Incremento < Menor que
x ++ Lo mismo que x = x <= Menor o igual que
+ 1.
-- Decremento > Mayor que
x -- Lo mismo que x = x - >= Mayor o igual que
1
Lógicos Descripción Ejemplo
&& AND. La salida proporciona un if (x>5 &&<10) { }
1 lógico (TRUE) solo cuando las // Realizará lo que pongamos entre las llaves si x es mayor que 5 y
dos sentencias son ciertas. menor que 10
|| OR. La salida proporciona un 1 if (x>5 || y<10){ }
lógico (TRUE) cuando una u // Realizará lo que pongamos entre las llaves si x es mayor que 5 o
otra sentencia es cierta. y menor que 10
! NOT. La salida proporciona un If (X ! 0) { }
1 lógico (TRUE) cuando la // Realizará lo que pongamos entre las llaves si x es distinto de
entrada esta a 0 (FALSE) y cero
viceversa.
FUNCIONES
Tiempo Descripción Ejemplo
delay (ms); Paraliza el programa durante el delay(500); // Esperamos 500 ms(0.5 segundos)
tiempo indicado. Se expresa en
milisegundos.
millis(); Devuelve el número de start_crono=millis(); // Mide el tiempo y lo guarda en la
milisegundos transcurridos variable start_crono
desde que se conectó Arduino.
delayMicroseconds(); Paraliza el programa durante el delayMicroseconds(2); // Esperamos 2 microsegundos
tiempo indicado. Se expresa en
microsegundos.
Otras Descripción Ejemplo
min(x,y); Devuelve el mínimo y el
max(x,y); máximo respectivamente de
entre dos parámetros.
map(variable, valMin, Distribuye el rango de valores map(ldr,0,1023,50,5000); // Distribuye el rango de valores
valMax, minDes, leídos entre el rango deseado. leídos (0-1023), entre el rango de valores deseado (50-5000)
maxDes);
random(max); Genera un valor aleatorio. random(100); // Genera un número aleatorio menor de 100
random(min,max); random(50,100); // genera un número aleatorio entre 50 y 100
LIBRERÍAS
Servo Funciones Descripción Ejemplo
#include<Servo.h> Instancia.attach(pin) Declara la salida del servo myservo.attach(4);
Instancia.write(ángulo) Posiciona el eje del servo myservo.write (90)
en el ángulo indicado en
grados.
Instancia.read() Devuelve un ángulo entre myservo.read();
0º y 180º.
Pantallas LCD Funciones Descripción Ejemplo
#include<LiquidCrystal.h> Instancia.begin(columnas, Inicializa la pantalla lcd.begin(16,2);
filas);
Instancia.home(); Envía el cursor al inicio de lcd.home();
la pantalla, posición(0,0)
Instancia.print(valor); Muestra por pantalla lcd.print(“Temperatura”);
Instancia.setCursor(x,y); Coloca el cursosr en las lcd.setCursor(0,1); //
coordenadas indicadas Movemos el cursor a la
posición 0 de la línea 1
9. PUERTO SERIE
Speed puede valer: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.
La velocidad típica para comunicación con el ordenador es de 9600
Para visualizar los datos que transitan por el puerto serie, el IDE de Arduino dispone de dos herramientas:
Menú Herramientas Monitor Serial (Visualización de los valores recibidos).
Serial.read(); //Lee o captura un byte (un carácter) desde el puerto serie. Devuelve -1 si no
hay ningún carácter en el puerto serie.
Serial.available(); // Devuelve el número de caracteres disponibles para leer desde el puerto
serie.
if
Se utiliza en conjunción con un operador de comparación(== igual, != distinto, < menor, > mayor).Si
se cumple una condición se ejecutarán las instrucciones.
if (nombre == 5)
{
//instrucciones a ejecutar
}
if / else
Se utiliza en conjunción con un operador de comparación.
Tras comprobar si se cumple una condición permite hacer una cosa u otra.
Permite agrupar múltiples comprobaciones.
if (a < b)
{
//instrucciones a ejecutar
}
else
{
//Si no se cumple instrucciones a ejecutar código 2
}
while
Se utiliza para repetir un bloque de instrucciones hasta que se cumpla una condición. Por ejemplo, que
alguien pulse un botón.
while(boton==0)
{
// instrucciones a repetir
}
for
Se utiliza para repetir instrucciones un número determinado de veces. Se inicializa una variable, se
comprueba una condición y ejecuta un bloque, luego se comprueba nuevamente la condición y así
sucesivamente hasta que la condición ya no sea válida.
int a = 0;
while (a < 10)
{
código
a++
}
Switch …case
Se utiliza para comparar el valor de una variable en diferentes casos.
Cuando el valor de la variable coincide con el valor de uno de los casos, se ejecutará lo que haya
dentro de este.
En la Figura: Diagrama eléctrico de conexión del potenciómetro, observamos que el valor máximo
B3_Tema 6 Arduino Pág 9
Control y Robótica. IES Cardenal S. y Rojas
12.2. INFRARROJOS
12.3. TEMPERATURA
Para obtener la temperatura a partir de la lectura de la entrada analógica solo hay que considerar:
El convertidor A/D nos va a dar en la salida valores entre 0 y 1023 que se corresponderán
con 0 V y 5 V.
Según la figura, cada 0,01 V se corresponde con 1 ºC.
La expresión resultante para saber la temperatura será: