Arduino - Clase 3
Arduino - Clase 3
ARDUINO
CLASE 3
RAMÓN A. ORIS
VICENTE FRANCHINO
¡BIENVENIDOS!
Estimados Alumnos, les doy la bienvenida a la tercera instancia virtual de este trayecto de
formación, espero que sea un espacio de aprendizaje e interacción conjunta, en el cual podamos
aprender nuevas herramientas que nos ayuden a mejorar nuestra práctica cotidiana en el ámbito
laboral fortaleciendo además los conocimientos para el desarrollo productivo. ¡Adelante!
OBJETIVOS DE LA CLASE
1 ARDUINO – CLASE 1
ÍNDICE
2 ARDUINO – CLASE 1
ESTRUCTURA DE UN PROGRAMA
Funciones
Una función es un bloque de código con un nombre y un conjunto de estamentos que son
ejecutados cuando se llama a dicha función. Las funciones de usuario se crean para realizar
tareas repetitivas reduciendo de esa manera el tamaño del programa.
Las funciones están asociadas a un tipo de valor "type", este es el valor que devolverá la
función una vez termine su ejecución.
Ejemplo de función:
3 ARDUINO – CLASE 1
Para hacer uso de la función anterior, tan solo habrá que llamarla desde cualquier parte
del programa. Esta llamada a la función se realiza de la siguiente manera:
void loop()
{
int i =2;
int j =3;
int k;
k = multiplicar (i, j); //llama a la función multiplicar pasándole los
//parámetros “i” y ''j"
}
En Arduino los programas pueden estar compuestos por infinidad de funciones, pero
existe una estructura básica que deben de cumplir todos los programas. Esta estructura básica,
está formada por dos funciones totalmente necesarias para la ejecución del programa, la función
setup() y loop(), las cuales vimos en las dos primeros clases.
La función setup() es la primera función que se ejecuta en nuestro programa,
ejecutándose sólo una vez, y se utiliza para configurar la comunicación con nuestro equipo,
inicializar los pines de nuestra tarjeta de Arduino e inicialización de las variables.
La función loop() se ejecuta repetidamente después de la función setup(). Dentro de la
misma vamos a introducir el programa que queremos ejecutar dentro de la placa de Arduino.
4 ARDUINO – CLASE 1
Llaves {}
funcion ()
{
Estamentos o instrucciones;
}
Punto y coma “; “
El punto y coma ";" se utiliza para definir el final de una instrucción y separarla de la
siguiente. Si no colocamos punto y coma, el programa va a interpretar mal las instrucciones y se
va a producir un error de compilación.
El error más común a la hora de programar suele ser olvidar poner punto y coma al final
de la instrucción.
Los bloques de comentarios son áreas de texto que nos ayudan a describir o comentar un
programa, estos bloques serán ignorados a la hora de compilar el programa en nuestro Arduino.
/*
El bloque de comentario ayuda
al programador a describir el programa
*/
Se pueden introducir todas las líneas de texto que se deseen siempre que se encuentren
entre los caracteres /* ... */.
5 ARDUINO – CLASE 1
Se recomienda el uso de bloques de comentarios siempre que se pueda, ya que ayudan
a la comprensión del programa a personas ajenas al mismo, además, estos comentarios no van
a ocupar espacio de programa, ya que son ignorados a la hora de compilar.
Línea de comentarios //
La línea de comentarios tiene la misma función que los bloques de comentarios, la única
diferencia es que las líneas de comentarios suelen usarse para comentar instrucciones ya que
solo afectan a una línea.
6 ARDUINO – CLASE 1
VARIABLES
Las variables son elementos donde se almacenan valores numéricos que serán usados
por el programa. Como su nombre indica, las variables van a cambiar de valor con la evolución
del programa y nos van a permitir crear la lógica del programa en función de estos cambios.
Una variable debe ser declarada y opcionalmente asignarle un valor antes de ser usada
por el programa, si no hemos declarado la variable o lo hemos hecho con posterioridad a su uso
va a dar un error al compilar el programa.
Es recomendable asignarle un valor inicial a las variables para no tener un valor
indeterminado que pudiera ocasionar algún error a la hora de la ejecución del programa.
Cuando se asignen nombres a las variables, se deben de usar nombres que identifiquen
claramente a dichas variables, para ello se usan nombres como "pulsador", "led", "entrada_1" ....
esto va a ayudar a hacer un código legible y fácil de entender
Utilización de variables
Las variables pueden ser declaradas en diferentes lugares del programa, en función del
lugar donde sean declaradas, las variables van a ser de tipo global o local, determinando esto
el ámbito de aplicación o la capacidad de ciertas partes del programa para hacer uso de estas.
Una variable global es aquella que puede ser vista y utilizada por cualquier función y
estamento de un programa. Las variables globales se declaran al comienzo del programa, antes
de la función setup().
Una variable local es aquella que se define dentro de una función o como parte de un
bucle. Solo será visible y podrá utilizarse dentro de la función o bucle donde es declarada.
La existencia de variables globales y locales, permite el uso de variables con el mismo
nombre en partes diferentes del programa, estas variables podrán almacenar valores distintos
sin que se produzca ningún conflicto, ya que a las variables locales solo tendrán acceso las
funciones donde se declaren dichas variables.
Ejemplo de variables globales y locales:
7 ARDUINO – CLASE 1
int led = 10; //"led" es una variable global visible para cualquier función
void setup()
{
pinMode (led, OUTPUT); //establece el pin "led" como salida
}
void loop()
{
float valor; //"valor" es una variable local solo visible dentro de "loop"
for {int i=0; i<20; i++) //"i" es una variable local usada por el buclefor
{
digitalWrite (led, HIGH); //uso de la variable global "led"
}
}
Tipos de variable
A la hora de usar una variable dentro del programa debemos de pararnos a pensar que
información o qué tipo de operaciones vamos a aplicar a estas variables y en función de esto
asignarle un tipo u otro. Debemos de asegurarnos que el tipo de variable que estemos usando
tiene rango suficiente para almacenar los datos sin llegar a ser desproporcionada, ya que usar
variables grandes va a consumir más recursos de memoria.
8 ARDUINO – CLASE 1
CONSTANTES
La diferencia fundamental entre una variable y una constante es que la constante va a ser
un valor de solo lectura que no va a poder ser modificado con la evolución del programa.
Si queremos definir una constante, podemos hacerlo de manera muy similar a como
definíamos las variables, tan solo hay que indicar al programa que se trata de un valor "no
modificable", para ello hay que añadir antes del "tipo" la palabra "const", que va a hacer que la
variable sea de solo lectura.
const float pi= 3.1415; //crea una constante de tipo ''float" y le asigna el valor 3.1415
Es posible crear constantes usando #define, esta sentencia va a nombrar las constantes
antes de ser compiladas por Arduino. Las constantes creadas de esta manera no van a ocupar
memoria de programa, ya que el compilador va a remplazar estas constantes con el valor definido
en el momento de compilar.
#define pi 3.1415 //crea una constante usando #define a lo que le asigna el valor 3.1415
Hay que tener cuidado a la hora de usar #define, ya que la sintaxis es diferente, no hay
que poner el operador de asignación "=" ni cerrar sentencia con el punto y coma ";".
Usar #define puede ser problemático, ya que si existe en cualquier parte del programa
alguna constante o variable con el mismo nombre que tengamos asignado en #define, el
programa lo va a sustituir con el valor que tengamos asignado a esta constante, por ello se debe
tener cuidado a la hora de asignar constantes con #define y no crear constantes muy genéricas
cómo #define x 10,ya que "x" es muy común usarlo como variable dentro de alguna función o
bucle.
9 ARDUINO – CLASE 1
OPERADORES
Los operadores son los elementos con los que vamos a transformar las variables del
programa, hacer comparaciones, contar un número determinado de eventos. Los operadores se
pueden considerar como uno de los elementos más importantes junto con las estructuras de
control. Dentro de los operadores, podemos encontrarlos de varios tipos.
Operadores aritméticos
Los operadores aritméticos son operadores que nos van a permitir realizar operaciones
básicas como sumar, restar, dividir o multiplicar.
Hay que tener en cuenta el tipo de variable que estamos usando a la hora de realizar
operaciones, ya que si vamos a efectuar una operación que da como resultado un numero con
decimales y hemos definido estas variables como int (entero), el resultado no va a mostrar la
parte decimal (10 / 3 va a devolver 3 en lugar de 3.33).
Asignaciones compuestas
Las asignaciones compuestas combinan una operación aritmética con una variable
asignada. Estas asignaciones son usadas comúnmente en bucles.
10 ARDUINO – CLASE 1
Operadores de comparación
x == y; //x es igual a y
x != y; //x es distinto de y
x < y; //x es menor que y
x > y; //x es mayor que y
x <= y; //x es menor o igual que y
x >= y; // x es mayor o igual que y
Operadores Booleanos
Son operadores lógicos que se usan para comparar 2 o más expresiones y que no
devuelven un valor, sino que dan un estado de "verdadero" (si se cumple la expresión) o "falso"
(si no se cumple). Existen 3 operadores lógicos, AND "&&", OR "||" y NOT "!".
11 ARDUINO – CLASE 1
ESTRUCTURAS DE CONTROL
Dentro de las estructuras de control se engloban todos los estamentos que sirven para
guiar al programa en una u en otra dirección en función de si se cumplen o no las condiciones
que le marquemos al programa. Dentro de estas estructuras podemos encontrar condicionales,
bucles o elementos de control de flujo.
Condicionales
Los condicionales son elementos que chequean un estado o condición y si esta condición
se cumple se pasa a ejecutar las sentencias englobadas dentro de la condición.
if (si...)
if... else funciona de igual forma que if, pero añade la posibilidad de que la condición no
se cumpla, pasando a ejecutar
if (y != 10) // Si "y" es distinto de 10 ejecuta las instrucciones
las instrucciones encerradas
{
dentro de else.
ejecuta instrucciones;
Este condicional puede
}
ir precedido de otras
else //si no, ejecuta esta instrucción
estructuras condicionales del
{
mismo tipo, anidando unas
ejecuta instrucciones;
dentro de otras y haciendo que
}
sean mutuamente excluyentes.
12 ARDUINO – CLASE 1
if (valor< 100) // Si valor es menor que 100 ejecuta la instrucción
{
ejecuta instrucciones;
}
else if (valor >=500) // Si valor es mayor o igual que 500 ejecuta la instrucción
{
ejecuta instrucciones;
}
else //si no se cumplen las condiciones anteriores, ejecuta esta instrucción
{
ejecuta instrucciones;
}
Bucles
Los bucles son elementos que hacen que el programa entre en un ciclo de repetición
mientras se cumplan las condiciones del bucle.
for
El bucle for se usa para repetir un bloque de sentencias un número determinado de veces.
Cada vez que se terminan de ejecutar las sentencias encerradas dentro del bucle, se comprobará
la condición inicial, repitiéndose el buche mientras se cumpla dicha condición.
El buche for está formado por 3 partes, la inicialización, la condición del bucle y una
expresión (la expresión no es necesaria o puede ponerse dentro de las sentencias del bucle).
Ejemplo de bucle for:
13 ARDUINO – CLASE 1
for (int x=0: x<10; x++) //declara la variable x y la inicializa a 0, comprueba la
//condición (x<10}, incrementa x en 1
{
digitalWrite (13, HIGH); //envía un 1 al pin 13
delay {500); //espera 500ms
digitalWrite (13, LOW); //envía un O al pin 13
delay (500); //espera 500ms
}
while
while (sensor< 150) //ejecuta el bucle mientras "sensor" sea menor a 150
{
ejecuta instrucciones;
}
do ... while
El bucle do ... while funciona de la misma manera que while, con la única diferencia de
que va a ejecutar al menos 1 vez el bucle, ya que la condición del mismo se comprueba al final.
do
{
sensor= analogRead (1); //asigna a "sensor" el valor de la entrada analógica 1
} while (sensor< 150) //repite el bucle mientras "sensor" sea menor que 150
14 ARDUINO – CLASE 1
ENTRADAS Y SALIDAS E/S
Arduino es una plataforma de desarrollo Hardware que cuenta con pines E/S para
comunicarse con el exterior. Estos pines E/S tienen características especiales que los hacen
propicios para una u otra tarea en función del tipo de pin. Estas E/S pueden englobarse en 3
tipos básicos, E/S analógicas, E/S digitales y E/S para la comunicación serie. Existen también
pines de propósito especiales como salidas de reloj u osciladores y pines de alimentación con
los que podemos suministrar diferentes tensiones a placas externas
Antes de empezar a trabajar con Arduino, deben de ser configurados los pines de la placa
que vayan a ser usados, asignándolos como entradas o como salidas. En ningún caso un mismo
pin podrá hacer de entrada y de salida al mismo tiempo.
La configuración de los pines se hará dentro de la función setup(), estableciendo el modo
de trabajo del pin como entrada o como salida.
La instrucción que se utiliza para realizar la configuración de los pines es pinMode, donde
habrá que asignarle el pin que queremos configurar y si queremos que actúe como entrada
(INPUT) o como salida (OUTPUT).
void setup()
{
pinMode (10, OUTPUT); //configura el pin 10 como salida
}
15 ARDUINO – CLASE 1
Los pines de Arduino están configurados por defecto como entradas, por lo que no es
necesario indicarles el modo de trabajo si vamos a trabajar con ellos como entradas.
La razón de tener los pines configurados por defecto como entradas, es que las entradas
se encuentran en un estado de alta impedancia, lo que va a evitar en muchos casos que dañemos
la placa al realizar una mala conexión. Si establecemos un pin como salida y por error entra
corriente por dicho pin lo más seguro es que dañemos el microcontrolador de manera irreversible.
Los pines que tengamos configurados como salida (OUTPUT) van a suministrar una
corriente máxima de 40mA por separado, sin que la corriente total de las salidas pueda superar
los 200mA. Esta corriente es suficiente para hacer brillar un led, pero insuficiente para activar
elementos de mayor potencia.
E/S Digitales
Los pines asignados a E/S digitales, son pines que trabajan con dos estados HIGH (alto)
o LOW (BAJO). Según el modelo de Arduino que estemos usando, va a tomar el estado HIGH
(alto) como 5v o como 3.3v, el estado LOW (bajo) está asociado a un nivel de voltaje 0.
Al hacer una lectura digital, vamos a leer el valor de un pin almacenando el resultado como
HIGH (alto o 1) o como LOW (bajo o 0).
valor= digitalRead (pin); //la variable "valor" toma el estado asociado al pin
Podemos especificar el pin asignándole directamente la numeración del pin digital que
queremos leer o con una variable o constante previamente definida.
16 ARDUINO – CLASE 1
Escritura de salidas digitales (digitalWrite)
Cuando hacemos una escritura digital vamos a mandar al pin definido previamente como
salida el valor HIGH o LOW. El valor HIGH se va a traducir (en función del tipo de Arduino) por
una señal de 5 o 3.3 voltios.
void setup()
{
pinMode(ledPin, OUTPUT); // Se declara el LED como salida
pinMode(inPin, INPUT); // Se declara el Switch como entrada
}
void loop()
{
If (digitalRead(inPin) == HIGH) // Comprueba si la entrada está en HIGH
{
digitalWrite(ledPin, HIGH); // prende el LED
delay(1000); // pausa por un segundo
digitalWrite(ledPin, LOW); // apaga el LED
delay(1000); // pausa por un segundo
}
}
17 ARDUINO – CLASE 1
DIAGRAMA DE FLUJO
18 ARDUINO – CLASE 1
Simbología de un diagrama de flujo
Los principales símbolos convencionales que se emplean en los diagramas de flujo son
los siguientes:
19 ARDUINO – CLASE 1
Diagrama de flujo para reproducir un DVD:
20 ARDUINO – CLASE 1
PRÁCTICA Nº 1: PARPADEO DE UN LED
Materiales
- Protoboard.
- Arduino.
- Cables de conexión.
- 1 LED.
- 1 resistencia de 220 Ω.
Objetivo
Montaje
21 ARDUINO – CLASE 1
Programa y Diagrama de Flujo
/*
Parpadeo: Enciende un LED un segundo, entonces se apaga
1 segundo y así sucesivamente. El LED está conectado al
Pin 3 y lleva en serie una resistencia de protección cuyo valor
podrá estar entre 120 Ω y 220 Ω.
*/
int ledPin = 3; // LED conectado a pin 3
void setup()
{
pinMode(ledPin, OUTPUT);
// inicializa el pin 3 como salida
}
// ahora hacemos un bucle
void loop()
{
digitalWrite(ledPin, HIGH); // enciende el LED
delay(1000); // espera un segundo
digitalWrite(ledPin, LOW); // apaga el LED
delay(1000); // espera un segundo
}
22 ARDUINO – CLASE 1
PRÁCTICA N° 2: SEMÁFORO SIMPLE
Materiales
1 Arduino UNO
1 Protoboard
4 Cables para conexión
3 LEDs
3 Resistencias de 220Ω (rojo-rojo-marrón)
Objetivo
Esquema eléctrico
V = 5V - 2.1V = 2.9V
I = 20mA
V=IxR;R=V/I
23 ARDUINO – CLASE 1
Programa
En primer lugar, se configuran los pines digitales 11, 12 y 13 en modo salida (OUTPUT).
Esta configuración se establece en la función setup(), ya que solamente se ejecuta una vez.
Además, se ha creado la inicialización de los pines a un valor bajo (LOW).
Al ejecutar el código se deberán establecer los pines digitales a un valor bajo para
inicializar así los LEDs. A continuación, se procede a activar y desactivar los diferentes pines
simulando el funcionamiento del semáforo.
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
void loop()
{
digitalWrite(13, LOW);
digitalWrite(11, HIGH);
delay(5000);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
delay(1000);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(5000);
}
24 ARDUINO – CLASE 1
PRÁCTICA Nº 3: CONTROL DE UN LED CON PULSADOR
Materiales
- Protoboard.
- Arduino.
- Cables de conexión.
- 1 LED.
- 1 Pulsador.
- 2 resistencias (220 Ω y 1 KΩ).
Objetivo
Montaje
25 ARDUINO – CLASE 1
Programa y Diagrama de Flujo
int pulsador=8;
int led=1;
int val=0;
void setup()
{
pinMode(pulsador,INPUT);
pinMode(led,OUTPUT);
}
void loop()
{
val=digitalRead(pulsador);
if(val==HIGH)
{
digitalWrite(led,HIGH);
}
else
{
digitalWrite(led,LOW);
}
}
26 ARDUINO – CLASE 1
PULSADORES
Para aprovechar las entradas digitales para leer el estado de un interruptor o pulsador con
Arduino necesitaremos realizar correctamente un montaje específico y la
ayuda de dos nuevas amigas las resistencias de Pull Down y Pull Up. Aunque
ambos casos son muy similares, el montaje y el tipo de resistencia a usar
dependerá de si queremos que al accionar el pulsador o interruptor leamos un
valor LOW o HIGH.
Para entender el funcionamiento de ambos montajes vamos a presentar el razonamiento
lógico por el cual se llega al mismo, para lo cual utilizaremos dos montajes incorrectos que nos
ayudarán a entender el papel de cada elemento en el montaje definitivo.
Por tanto, empezamos con el primer intento de realizar una lectura del estado del pulsador.
Nuestra primera idea para leer un pulsador podría ser conectar directamente un PIN digital
de Arduino a un valor de tensión de referencia, ya sea este 0V o 5V. Al cerrar el pulsador la
tensión en el PIN sería el valor de referencia (0V o 5V depende del montaje) y podríamos realizar
la lectura como en cualquier entrada digital.
¿Cuál es el problema? Bueno, esto funcionará cuando el interruptor está cerrado. Pero,
¿qué pasa cuando el interruptor está abierto? En este caso estamos dejando el PIN totalmente
desconectado de cualquier tensión, algo que denominaremos estado de alta impedancia.
¿Qué valor registra un autómata si realizamos la medición en estado de alta impedancia?
Pues depende de varios factores, como la construcción interna del autómata o el último estado
al que haya estado conectado. Pero, en resumen, la entrada está en un estado indeterminado,
27 ARDUINO – CLASE 1
es decir, que puede asumir cualquier valor. Por tanto, es necesario evitar esta situación en
nuestros diseños.
¿Cómo podemos resolver este estado de indeterminación? Bueno, esto nos lleva
directamente a nuestro segundo intento.
28 ARDUINO – CLASE 1
El montaje tampoco funcionaría porque estaríamos conectando el PIN simultáneamente a
0V y 5V, por lo que tendríamos nuevamente una indeterminación, y la medición real dependería
de la resistencia de los conductores a ambos niveles de tensión.
Las resistencias de Pull-Down y Pull-Up se conectan entre el PIN digital y una de las
tensiones de referencia (0V o 5V) y "fuerzan" (de ahí su nombre) el valor de la tensión a LOW o
HIGH, respectivamente.
La resistencia de Pull-Up fuerza HIGH cuando el pulsador está abierto. Cuando está
cerrado el PIN se pone a LOW, la intensidad que circula se ve limitada por esta resistencia
La resistencia de Pull-Down fuerza LOW cuando el pulsador está abierto. Cuando está cerrado
el PIN se pone a HIGH, y la intensidad que circula se ve limitada por esta resistencia
Así es como quedaría el montaje final en vista esquemática (la conexión de puede realizar
en empleando cualquiera de los PIN digital) y, a continuación, el cableado en una placa de
prototipos.
.
29 ARDUINO – CLASE 1
Por último, la lectura del estado del PIN se realiza normalmente podemos utilizar el
siguiente ejemplo:
30 ARDUINO – CLASE 1
const int inputPin = 2;
int value = 0;
void setup() {
Serial.begin(9600);
pinMode(inputPin, INPUT);
}
void loop(){
value = digitalRead(inputPin); //lectura digital de pin
//mandar mensaje a puerto serie en función del valor leído
if (value == HIGH) {
Serial.println("Encendido");
}
else {
Serial.println("Apagado");
}
delay(1000);
}
Arduino dispone de resistencias de Pull Up internas de 30k pero no suelen ser usadas por
dos motivos. Tienen poca autoridad (valor de resistencia demasiado alto).
Si la configuramos incorrectamente desde el programa, podemos generar un cortocircuto,
por lo que es preferible conectara físicamente para verificar que no nos la hemos dejado.
31 ARDUINO – CLASE 1
PRÁCTICA N° 4: El AUTO FANTÁSTICO
• Arduino.
• 6 LED-s.
• 6 resistencias de 220 Ohmios.
• Una protoboard.
• Cables para realizar las conexiones
32 ARDUINO – CLASE 1
Diagramas de flujo y códigos
Ejemplo 1
33 ARDUINO – CLASE 1
void setup()
{
pinMode(pin2, OUTPUT); // Configuración de los PIN-es como salida
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
}
void loop()
{
digitalWrite(pin2, HIGH); // Enciende y apaga secuencialmente LED-s
delay(timer);
digitalWrite(pin2, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin7, HIGH);
delay(timer);
digitalWrite(pin7, LOW);
34 ARDUINO – CLASE 1
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
}
35 ARDUINO – CLASE 1
Ejemplo 2
/* En este caso las luces se encenderán y apagarán todas en un sentido y luego, acabada la
secuencia en sentido contrario. */
36 ARDUINO – CLASE 1
void setup()
{
for (count=0;count<6;count++)
{ // Configuramos todos los PIN-es
pinMode(pinArray[count], OUTPUT);
}
}
void loop()
{ // Enciende y apaga secuencialmente los LED-s
for (count=0;count<6;count++)
{ // utilizando la secuencia de control for(;;)
digitalWrite(pinArray[count], HIGH); // Recorrido de ida
delay(timer);
digitalWrite(pinArray[count], LOW);
delay(timer);
}
for (count=5;count>=0;count--)
{
digitalWrite(pinArray[count], HIGH); // Recorrido de vuelta
delay(timer);
digitalWrite(pinArray[count], LOW);
delay(timer);
}
}
37 ARDUINO – CLASE 1
Ejemplo 3
// En este caso el efecto que se crea es una estela visual muy vistosa.
38 ARDUINO – CLASE 1
void setup()
{
for (count=0;count<6;count++)
{ // Configuramos todas los PIN-es de golpe
pinMode(pinArray[count], OUTPUT);
}
}
void loop()
{
for (count=0;count<5;count++)
{ // Enciende los LED creando una estela visual
digitalWrite(pinArray[count], HIGH);
delay(timer);
digitalWrite(pinArray[count + 1], HIGH);
delay(timer);
digitalWrite(pinArray[count], LOW);
delay(timer*2);
}
for (count=5;count>0;count--)
{
digitalWrite(pinArray[count], HIGH);
delay(timer);
digitalWrite(pinArray[count - 1], HIGH);
delay(timer);
digitalWrite(pinArray[count], LOW);
delay(timer*2);
}
}
.
39 ARDUINO – CLASE 1
PRÁCTICA N° 5: SECUENCIAS DE LUCES CON LEDS Y PULSADOR
Materiales
- ARDUINO.
- 8 leds de cualquier color.
- 10 Resistencias de 220ohms para los leds
- 2 pulsadores.
- 1 Protoboard.
- Cables de conexión.
Objetivo
La secuencia de leds va a encender hacia la derecha y cuando pulse el pulsador del PIN
11, la secuencia de leds cambia de dirección hacia la izquierda, y si pulsa el pulsador del PIN 10,
la secuencia de leds nuevamente cambia de dirección hacia la derecha.
Montaje
40 ARDUINO – CLASE 1
Programa
41 ARDUINO – CLASE 1
if(i>led3){
digitalWrite(i-3,LOW); //Apaga el LED
}
delay(vel); //Retardo (Espera el valor de vel)
//Lee los dos pulsadores
if(digitalRead(Pizq)){
valor=1;i=led8+3; //Cambia el valor y sale del FOR
}
if(digitalRead(Pder)){
valor=0;i=led8+3; //Cambia el valor y sale del FOR
}
}
}
//Si "valor" es uno gire a la IZQUIERDA
if(valor==1){
//Enciende los LED de Izquierda a Derecha
for(i=led8;i>=led1-3;i--){
if(i>=led1){
digitalWrite(i,HIGH); //Enciende el LED
}
if(i<led6){
digitalWrite(i+3,LOW); //Apaga el LED
}
delay(vel); //Retardo (Espera el valor de vel)
//Lee los dos pulsadores
if(digitalRead(Pizq)){
valor=1;i=led1-3; //Cambia el valor y sale del FOR
}
if(digitalRead(Pder)){
valor=0;i=led1-3; //Cambia el valor y sale del FOR
}
}
}
}
42 ARDUINO – CLASE 1
PRÁCTICA N° 6: SENSOR PIR
El otro elemento restante para que todo funcione es la óptica del sensor. Básicamente
es una cúpula de plástico formada por lentes de fresnel, que divide el espacio en zonas, y enfoca
la radiación infrarroja a cada uno de los campos del PIR.
De esta manera, cada uno de los sensores capta un promedio de la radiación infrarroja
del entorno. Cuando un objeto entra en el rango del sensor, alguna de las zonas marcadas por
la óptica recibirá una cantidad distinta de radiación, que será captado por uno de los campos del
sensor PIR, disparando la alarma.
43 ARDUINO – CLASE 1
ESQUEMA ELÉCTRICO
Este es el esquema de patillaje de un sensor PIR.
44 ARDUINO – CLASE 1
El esquema eléctrico que necesitamos es el siguiente.
Esquema montaje
Mientras que el montaje en una protoboard sería el siguiente.
45 ARDUINO – CLASE 1
Ejemplo de código
El código necesario para realizar la lectura es simple. Simplemente leemos la salida del
PIR, y hacemos parpadear el LED mientras la señal esté activa.
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
}
void loop()
{
int value= digitalRead(PIRPin);
if (value == HIGH)
{
digitalWrite(LEDPin, HIGH);
delay(50);
digitalWrite(LEDPin, LOW);
delay(50);
}
else
{
digitalWrite(LEDPin, LOW);
}
}
Si quisiéramos ejecutar una acción una única vez al detectar movimiento, en lugar de todo
el tiempo que la señal este activa, usaríamos el siguiente código:
46 ARDUINO – CLASE 1
const int LEDPin = 13; // pin para el LED
const int PIRPin = 2; // pin de entrada (for PIR sensor)
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
Serial.begin(9600);
}
void loop()
{
val = digitalRead(PIRPin);
if (val == HIGH) //si está activado
{
digitalWrite(LEDPin, HIGH); //LED ON
if (pirState == LOW) //si previamente estaba apagado
{
Serial.println("Sensor activado");
pirState = HIGH;
}
}
else //si esta desactivado
{
digitalWrite(LEDPin, LOW); // LED OFF
if (pirState == HIGH) //si previamente estaba encendido
{
Serial.println("Sensor parado");
pirState = LOW;
}
}
}
47 ARDUINO – CLASE 1
Bibliografía
ALiverti, P. (2017). Electrónica para Makers. Barcelona: Marcombo.
Peña Millahual, C. (2017). Arduino. De cero a experto. Ciudad Autónoma de Buenos Aires: Six Ediciones.
48 ARDUINO – CLASE 1