Curso Arduino
Curso Arduino
E NERO 2018
I NTRODUCCIÓN
Introducción
Introducción
Las tarjetas Arduino son capaz de leer entradas de
señales analógicas y digitales desde diferentes sensores
y convertirlo en una salida tal que activa un actuador,
encienda o apague un led, se conecte a la nube o
cualquier otra acción.
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
M ICROCONTROLADOR AT91SAM3X8E
Introducción
Introducción
5. Reset externo.
6. Fuente de voltaje de salida de 3.3 V.
7. Fuente de voltaje de salida de 5 V.
8. Pines de tierra (GND).
9. Este pin puede ser usado para alimentar la tarjeta Arduino
desde uns fuente externa.
10. La tarjeta Arduino incluye 6 entradas analógicas de A0 hasta
A5, Estos pines pueden leer la señal desde un sensor
analógico y convertir estas señales a digitales las cuales
pueden ser leídas por el microprocesador.
D R . A NTONIO N AVARRETE G UZMÁN I NTRODUCCIÓN AL A RDUINO E NERO 2018 15/117
D ESCRIPCIÓN DE LA TARJETA A RDUINO
Introducción
Introducción
Introducción
http://arduino.cc/en/Main/Software
Introducción
El siguiente ejemplo hará que el LED (pin 13)integrado a
la tarjeta Arduino uno, prenda y apaga cada segundo.
Introducción
Introducción
Introducción
Introducción
array.
Este tipo de datos en realidad no existe como tal. Lo que
existen son arrays de variables de tipo “boolean”, arrays
de variables de tipo “int”, arrays de variables de tipo
“float”, etc. En definitiva: arrays de variables de cualquier
tipo de los mencionados hasta ahora.
Un array (también llamado “vector”) es una colección de
variables de un tipo concreto que tienen todas el mismo y
único nombre, pero que pueden distinguirse entre sí por
un número a modo de índice.
Los arrays sirven para ganar claridad y simplicidad en el
código, además de facilitar la programación.
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Serial.print()
Envía a través del canal serie un dato (especificado como
parámetro) desde el microcontrolador hacia el exterior.
Ese dato puede ser de cualquier tipo: carácter, cadena,
número entero, número decimal (por defecto de dos
decimales), etc. Si el dato se especifica explícitamente
(en vez de a través de una variable), hay que recordar
que los caracteres se han de escribir entre comillas
simples y las cadenas entre comillas dobles.
Serial.println()
Hace exactamente lo mismo que Serial.print(), pero
además, añade automáticamente al final de los datos
enviados dos caracteres extra: el de retorno de carro
(código ASCII no 13) y el de nueva línea (código ASCII no
10). La consecuencia es que al final de la ejecución de
Serial.println() se efectúa un salto de línea. Tiene los
mismos parámetros y los mismos valores de retorno que
Serial.print()
Introducción
char cadena[]=”hola”;
byte bytesDevueltos;
void setup(){
Serial.begin(9600);
bytesDevueltos=Serial.write(cadena);
Serial.println(bytesDevueltos);
}
void loop() {
}
Introducción
Introducción
Introducción
Introducción
byte byteRecibido = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
byteRecibido = Serial.read();
Serial.write(”Byte recibido: ”);
Serial.write(byteRecibido);
}
}
Introducción
Introducción
boolean encontrado;
void setup() {
Serial.begin(9600);
}
void loop() {
encontrado=Serial.find(”Hola”);
if (encontrado == true) {
Serial.println(”Encontrado”);
}
}
Serial.readBytes()
Lee del buffer de entrada (eliminándolos de allí) la
cantidad de bytes especificada como segundo parámetro
(o bien, si no llegan suficientes bytes, hasta que se haya
superado el tiempo especificado por
Serial.setTimeout()) . En cualquier caso, los bytes
leídos se almacenan en un array –de tipo “char[]”–
especificado como primer parámetro. Esta instrucción
devuelve el número de bytes leídos del buffer (por lo que
un valor 0 significa que no se encontraron datos válidos)
Serial.setTimeout()
Tiene un parámetro (de tipo “long”) que sirve para
establecer el número de milisegundos máximo que las
instrucciones Serial.readBytesUntil() y
Serial.readBytes() esperarán a la llegada de datos
al buffer de entrada serie. Si alguna de estas dos
instrucciones no recibe ningún dato y se supera ese
tiempo, el sketch continuará su ejecución en la línea
siguiente. El tiempo de espera por defecto es de 1000
milisegundos. Esta instrucción se suele escribir en “void
setup ()”. No tiene valor de retorno.
Introducción
char a[10];
const int timeout=1000;
void setup() {
Serial.begin(9600);
Serial.setTimeout(timeout);
}
void loop() {
Serial.println(”Escribe un carácter”);
int b = Serial.readBytes(a, 10);
Serial.print(”bytes leídos:\t”);
Serial.println(b);
delay(1000);
}
Serial.parseInt()
Lee del buffer de entrada (eliminándolos de allí) todos los datos
hasta que se encuentre con un número entero. Su valor de
retorno –de tipo “long”– será entonces ese número entero
encontrado. Cuando detecte el primer carácter posterior no
válido, dejará de leer (y por tanto, no seguirá eliminando datos
del buffer). Esta instrucción no tiene parámetros.
micros():
Devuelve el número de microsegundos (µs) desde que la placa
Arduino empezó a ejecutar el sketch actual. Este número –de
tipo “unsigned long”– se reseteará a cero aproximadamente
después de 70 minutos. Esta instrucción tiene una resolución
de 4 µs (es decir, que el valor retornado es siempre un múltiplo
de cuatro).
D R . A NTONIO N AVARRETE G UZMÁN I NTRODUCCIÓN AL A RDUINO E NERO 2018 60/117
INSTRUCCIONES DE GESTIÓN DEL
TIEMPO
Introducción Estas instrucciones no pertenecen a ningún objeto, así
que se escriben directamente:
delay():
Pausa el sketch durante la cantidad de milisegundos
especificados como parámetro ?de tipo ?unsigned long??. No
tiene valor de retorno.
delayMicroseconds():
Pausa el sketch durante la cantidad de microsegundos
especificados como parámetro –de tipo “unsigned long”– .
Actualmente el máximo valor que se puede utilizar con
precisión es de 16383. Para esperas mayores que esta, se
recomienda usar la instrucción delay(). El mínimo valor que se
puede utilizar con precisión es de 3 µs. No tiene valor de
retorno.
Introducción
El valor mínimo del rango inicial (0) se mapea al valor mínimo del rango final
(200), el valor 25 (una cuarta parte del rango inicial) se mapea al valor 250
(una cuarta parte del rango final) y que un valor fuera del rango inicial (500)
se mapea proporcionalmente a otro valor fuera del rango final (1200).
D R . A NTONIO N AVARRETE G UZMÁN I NTRODUCCIÓN AL A RDUINO E NERO 2018 64/117
Introducción
Introducción
Un número pseudoaleatorio no es estrictamente un número
aleatorio según la definición matemática rigurosa, pero para
nuestros propósitos el nivel de aleatoriedad que alcanzan las
siguientes funciones será más que suficiente:
randomSeed(). Inicializa el generador de números
pseudoaleatorios. Se suele ejecutar en la sección “setup()”
para poder utilizar a partir de entoncesnúmeros
pseudoaleatorios en nuestro sketch. Esta instrucción tiene un
parámetro de tipo “int” o “long” llamado “semilla” que indica el
valor a partir del cual empezará la secuencia de números.
Semillas iguales generan secuencias iguales, así que
interesará en múltiples ejecuciones de randomSeed()
utilizar valores diferentes de semilla para aumentar la
aleatoriedad. También nos puede interesar a veces lo
contrario: fijar la semilla para que la secuencia de números
aleatorios se repita exactamente. No tiene ningún valor de
retorno.
Introducción
void setup() {
Serial.begin(9600);
randomSeed(100);
}
void loop(){
Serial.println(random(1,30));
delay(1000);
}
Introducción
Algunos de los operadores aritméticos, funcionan tanto
para números enteros como decimales y son los
siguientes:
Operadores aritméticos
+ Operador suma
− Operador resta
∗ Operador multiplicación
/ Operador división
% Operador módulo
Operadores lógicos
& AND
|| OR
! NOT
D R . A NTONIO N AVARRETE G UZMÁN I NTRODUCCIÓN AL A RDUINO E NERO 2018 74/117
if y if/else
Introducción if (condición) {
//Instrucciones -una o más- que se
ejecutan si la condición es cierta
} else if (otra condición) {
/*Instrucciones -una o más- que se
ejecutan si la condición del anterior “if”
es falsa pero la actual es cierta */
} else if (otra condición) {
/*Instrucciones -una o más- que se
ejecutan si la condición del anterior ?if?
es falsa pero la actual es cierta */
} else {
//Instrucción(es) que se ejecutan si todas
las condiciones anteriores eran falsas
}
Introducción
Introducción while
Ejemplo 19:
do (condición) {
//Instrucciones que se repetirán mientras
la condición sea cierta -“true”,1-
} while ( condición)
D R . A NTONIO N AVARRETE G UZMÁN I NTRODUCCIÓN AL A RDUINO E NERO 2018 79/117
for
Introducción
Operadores compuestos
x++ Incremento
x– Decremento
x+=3 x=x+3
x-=3 x=x-3
x*=3 x=x*3
x/=3 x=x/3
Ejemplo 20:
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
El circuito constará de tres LEDs estos se irán
encendiendo y apagando de forma secuencial, y cuando
el LED del medio se encienda, el jugador debe apretar en
un pulsador. Si acierta, se mostrará un mensaje por el
“Monitor Serie” y la velocidad de la secuencia de
iluminación de los LEDs aumentará (y también lo hará por
tanto la dificultad).
En nuestro sketch los LEDs están conectados a los pines
digitales 5, 6 y 7, y el pulsador al pin 8. El tiempo inicial
entre encendido y encendido de los LEDs es 200 ms,
pero si el jugador acierta, este tiempo disminuirá en 20
ms, hasta llegar a un tiempo entre encendidos de 10 ms,
momento en el cual se volverá al tiempo inicial de 200 ms.
Introducción
Introducción
analogWrite(): Envía un valor de tipo “byte”
(especificado como segundo parámetro) que representa
una señal PWM, a un pin digital configurado como
OUTPUT (especificado como primer parámetro). En la
placa Arduino UNO son los pines 3, 5, 6, 9, 10 y 11 ( ∼ ).
Cada vez que se ejecute esta función se regenerará la
señal.
Una señal PWM es una señal digital cuadrada que simula ser una
señal analógica. El valor simulado de la señal analógica dependerá de
la duración que tenga el pulso digital.
Si el segundo parámetro de esta función vale 0, el pulso no dura nada
(no hay señal) y por tanto su valor analógico “simulado” será 0V.
Si vale 255 (resolución de 8 bits), el pulso dura todo el período de la
señal (señal continua) y su valor analógico “simulado” será el máximo
de la placa (5 V).
D R . A NTONIO N AVARRETE G UZMÁN I NTRODUCCIÓN AL A RDUINO E NERO 2018 100/117
Ejemplo 31
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Introducción
Los sensores de luz, tal como su nombre indica, son
sensores que permiten detectar la presencia de luz en el
entorno. A veces se les llama “celdas CdS” (sulfuro de
cadmio) o “fotorresistores” y LDRs (del inglés “Light
Dependent Resistor”), ya que básicamente se componen
de una resistencia que cambia su valor dependiendo de
la cantidad de luz que esté incidiendo sobre su superficie.
Concretamente, reducen su resistencia a medida que
reciben más intensidad de luz.
Vmed × 1023
Vconvertido = .
5
Sustituyendo en la fórmula de Vmed , y despejamos RLDR , se
obtiene:
Rpull × 1023
RLDR = ( ) − Rpull .
Vconvertido
Obtenemos el valor actual de la resistencia del fotorresistor a
partir del voltaje digitalizado obtenido por la placa Arduino.
Introducción
Introducción