Taller Introducción a la Ingeniería Eléctrica
Microcontrolador Arduino y Comunicaciones
Instituto de Ingeniería Eléctrica
Taller 2: Introducción a la programación y a Arduino
20 de Marzo de 2023
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 1 / 30
Seguimos!!!
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 2 / 30
Esquema de la presentación
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 3 / 30
Recapitulando
¿Qué vimos la semana pasada?
Estuvimos trabajando con el Arduino, un microcontrolador que maneja
entradas analógicas y digitales y permite hacer muchas cosas a partir
de eso.
Hasta ahora nos focalizamos en el manejo de entradas digitales,
usando las salidas para prender y apagar leds (funciones: pinMode(),
digitalWrite() y digitalRead()).
Fuimos combinando el manejo de entradas para definir distintas
respuestas del micro. La idea de sensar el entorno y actuar en
consecuencia.
Comenzamos con control de flujo: sentencias if (ramificación).
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 4 / 30
Esquema de la presentación
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 5 / 30
Control de flujo
Sentencia “for”
Flujo de repetición sobre una cantidad de iteraciones conocida.
for ( inicializo variable de control ; condiciOn ; paso o
incremento ) {
cOdigo a repetir
}
Ejemplo:
for ( int i = 2; i <= 4; i ++) {
digitalWrite (i , HIGH ) ;
delay (1000) ;
digitalWrite (i , LOW ) ;
delay (1000) ;
}
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 6 / 30
Control de flujo
Sentencia “for”
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 7 / 30
Ejercicio clase
Ejercicio 1
Modificar el código del Ejercicio 3 de deberes del Taller 1 para lograr el
mismo objetivo pero usando la sentencia "for".
Nota: Se pueden cambiar los pines de los leds o recordar sobre definición de
vectores para facilitar.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 8 / 30
Control de flujo
Sentencia "while”
while ( condicion ) {
// instrucciones a repetir .
// siempre asegurarse que la condiciOn cambiarA de valor
, para no quedar " atrapado " dentro del while .
}
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 9 / 30
Esquema de la presentación
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 10 / 30
Entradas Analógicas del Arduino
Manejo de pines de entrada analógicos (serán las señales provenientes de
algunos sensores).
Los pines analógicos (A0 a A5) sólo sirven para leer señales, no para
escribir.
El Arduino tiene un convertidor Analógico/Digital (ADC), de 10 bits:
recibe señales continuas entre 0 y 5V y retorna enteros entre 0 y 1023.
Si la señal analógica está en 0V al momento de la lectura, el valor
almacenado será el 0; si está a 5V será 1023. Para todos los valores de
voltaje intermedios se ajustará al nivel entero correspondiente.
Para leer el valor en un pin analógico, se debe usar la función
analogRead(pin):
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 11 / 30
Entradas Analógicas del Arduino
int dato ; // variable que va a almacenar lo que se lee del
pin
int pin = 0; // pin A0 de entrada analogica
void setup () {
// no es necesario inicializar nada
}
void loop () {
dato = analogRead ( pin ) ; // dato es un entero entre 0 y 1023
}
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 12 / 30
Ejercicio clase
Ejercicio 2
Ejercicio - Entradas analógicas
Determinar qué valor entero corresponde a una tensión de entrada de 3,5
volts en un pin de entrada analógica.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 13 / 30
Esquema de la presentación
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 14 / 30
Salidas PWM del Arduino
Las salidas digitales rotuladas como PWM pueden imponer no solo 0V
o 5V sino también 256 valores entre 0V y 5V.
Para esto se utiliza la función analogWrite(pinNumber, valor); donde
pinNumber es el número del pin de salida del Arduino y valor es un
número entre 0 y 255.
Si el valor es 0, impondrá 0V, si es 255 impondrá 5V y en otros casos,
los valores intermedios correspondientes.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 15 / 30
Ejercicio Clase
Ejercicio 3
Ejercicio - Salidas PWM
Determinar el valor a poner en un pin de salida PWM para tener una
tensión de 3,5 volts.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 16 / 30
Ejemplo
Código
En el siguiente código se lee el valor de una entrada analógica y se saca ese
valor a través de una salida PWM.
int pwmPin = 9; // pin de salida que soporta PWM
int analogPin = A0 ; // pin de entrada analogica .
int val = 0; // variable para almacenar el valor leido y a
escribir
float volt = 0; // variable para almacenar el voltaje leido
en la entrada
void setup () {
pinMode ( pwmPin , OUTPUT ) ; // inicializa el pin como salida
}
void loop () {
val = analogRead ( analogPin ) ; // lee la entrada analogica
volt =(5.0 * val ) / 1023; // calcula el voltaje leido
val = 255 * ( volt / 5) ;
// calcula el valor a sacar que corresponde al voltaje leido
analogWrite ( pwmPin , val ) ; // saca el valor correspondiente
}
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 17 / 30
Esquema de la presentación
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 18 / 30
Potenciómetro
Divisor resistivo
Para simular entradas analógicas de diversos niveles, usaremos un
Potenciómetro.
Su funcionamiento se basa en lo que se denomina el Divisor Resistivo: la
misma corriente circula por ambas resistencias, por lo que la tensión total
de alimentación "se reparte” entre ambas resistencias.
(a) Potenciómetro (b) Divisor Resistivo
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 19 / 30
Ejercicio clase
Ejercicio 4
Ejercicio - Divisor Resistivo
¿Si la tensión de alimentación es 5V, cuál es el voltaje en el punto
intermedio entre las resistencias, es decir, el valor de entrada A0 (V2 en la
figura)?
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 20 / 30
Potenciómetro
Divisor resistivo
Supuestos:
Denotemos por V la tensión de alimentación (5V), V1 la caída en R1
y V2 la caída en R2 (tensión de entrada en A0).
La corriente por ambas resistencias es la misma (idealmente, el
Arduino no consume corriente, sólo sensa la tensión).
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 21 / 30
Potenciómetro
Divisor resistivo
Denotemos por V la tensión de alimentación (5V), V1 la caida en R1
y V2 la caida en R2 (tensión de entrada en A0).
La corriente por ambas resistencias es la misma (idealmente, el
arduino no consume corriente, sólo sensa la tensión).
V
V1 = R1 .I V2 = R2 .I V = V1 +V2 = (R1 +R2 ).I ⇒I =
R1 + R2
R1 R2
V1 = V . V2 = V .
R1 + R2 R1 + R2
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 22 / 30
Ejercicio clase
Ejercicio 5
Ejercicio - Bucles y manejo de entradas analógicas / salidas PWM
Armar un proyecto con el siguiente hardware y preparar un código para que
al ir variando la posición del potenciómetro se vaya variando la intensidad
lumínica del led. Dando lugar a un ”Efecto Dimmer".
Nota: repasar código de ejemplo presente en esta clase.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 23 / 30
Esquema de la presentación
1 Recapitulando
2 Control de flujo
Ejercicio 1 - Clase
3 Entradas analógicas
Ejercicio 2 - Clase
4 Salidas con PWM
Ejercicio 3 - Clase
5 Materiales
Ejercicio 4 - Clase
Ejercicio 5 - Clase
6 EJERCICIOS para la próxima clase
Ejercicio 1
Ejercicio 2
Ejercicio 3
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 24 / 30
Ejercicios para la próxima clase
Ejercicio 1
Ejercicio 1
Modificar el secuenciado de 3 leds del Taller 1 (Ejercicio 2 de deberes), de
forma de poder controlar con un potenciómetro la frecuencia de la
secuencia.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 25 / 30
Ejercicios para la próxima clase
Ejercicio 2
Ejercicio 2
1 Utilizando otro potenciómetro, agregar el efecto dimmer al
secuenciador de 3 leds del Ejercicio 1 de deberes de este taller.
2 Utilizando una de las secuencias de bucle vistas, incrementar
progresivamente y de manera automática el brillo de los leds mientras
la entrada pin7 este en HIGH. En caso contrario disminuir el brillo en
forma progresiva (misma cadencia que al aumentar) hasta el estado de
inicio y mantenerlo fijo hasta que pin7 vuelva a estar en HIGH.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 26 / 30
Ejercicio para hacer durante la próxima clase:
Ejercicio 3
Se trabajará con un display de 7 segmentos con punto, como el de las
figuras.
[Link]
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 27 / 30
Ejercicio para hacer durante la próxima clase:
Ejercicio 3
El objetivo general es, a partir del proyecto ”TR2021taller1Ej3TD”
brindado por los docentes a través de Tinkercad, completar el hardware y el
software para preparar la realimentación visual de una cuenta regresiva de 9
segundos.
En particular, si un botón (a conectarse a un pin libre a elección) es
pulsado, la cuenta regresiva deberá comenzar (desde el 9). Si el botón deja
de pulsarse antes de terminar dicha cuenta regresiva (antes de llegar al 0),
se deberá detener y dejar la cuenta lista para empezar nuevamente desde el
9. Quedando así preparada para que si se presiona el botón de nuevo, la
cuenta regresiva empezará desde el principio nuevamente.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 28 / 30
Ejercicio para hacer durante la próxima clase:
Ejercicio 3
Se pide:
1 Mapear el estado de cada uno de los segmentos a los pines para cada
número (como ejemplo, ver primera línea del código brindado).
2 Interpretar las líneas de ejemplo dentro de la sentencia for presente en
la función void loop(). En particular, investigar sobre el concepto de
enmascarar, sobre la operación de corrimiento («) y repasar el
operador lógico AND (&). Se anima a hacer uso del monitor Serial
para ver como van cambiando los bytes luego de cada operación.
3 Realizar un diagrama de flujo que represente la solución del objetivo
general. Habrá una tarea en EVA para la entrega del mismo. Se
recomienda la siguiente plataforma para la preparación de diagramas
([Link] –> ”FlowChart").
4 Comenzar a completar el código. Primero, completar lo básico para
mostrar el 0. Luego, agregar otro número.
5 Agregar el botón al sistema.
6 Terminar de completar el código, basándose en el diagrama de flujo
para alcanzar el objetivo general del ejercicio.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 29 / 30
Resumen para la próxima clase:
1 Si no se terminaron los ejercicios para hacer en este taller, terminarlos.
2 Tener funcionando el Ejercicio 1 y el 2 de deberes para compartir en la
siguiente clase. Leer la letra y comenzar con el Ejercicio 3 que
terminaremos durante la próxima clase.
3 Haber leído y comprendido el Ejercicio 3 en el cual se trabajará
durante la siguiente clase.
4 Por dudas utilizar el Foro de consultas. Recordar clase de consulta
Jueves a la tarde.
5 Queda disponible un cuestionario sobre esta clase, que deberá ser
completado en el sitio EVA. Lo deberá hacer cada estudiante
individualmente!!
6 Se recomienda continuar con la lectura de la documentación sugerida
en la sección de Introducción en el sitio de EVA. En particular, leer
sobre funciones.
IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 20 de Marzo de 2023 30 / 30