AVCB Tema2 BloquesI IOs Digitales
AVCB Tema2 BloquesI IOs Digitales
AVCB Tema2 BloquesI IOs Digitales
TEMA 2
Lenguaje de Bloques I. I/Os digitales.
Curso 20VA77IN015
1.1. Introducción 1
1.2. Escudos 1
1.3. Sensores 6
1.4. Actuadores 11
1.6. Accesorios 17
2. Lenguaje de bloques I 28
2.1. Introducción 28
3. Ejercicios a entregar 47
4. Ejercicio voluntario 47
1.1 INTRODUCCIÓN
1.2 ESCUDOS
Se entiende por escudos (Shield) una serie de tarjetas electrónicas que se acoplan o “pinchan” encima
del Arduino y que se conecta directamente a sus entradas/salidas, la instalación es por lo tanto muy cómoda, al
no requerir de cableado. Básicamente existen de dos tipos, uno que sencillamente facilita el montaje o
cableado, y otro que extiende las capacidades.
Este escudo añade un interface de red por cable al Arduino, por lo tanto es ideal para aplicaciones de
domótica, podemos crear un servidor web en el propio Arduino, y controlar mediante un navegador web las
entradas/salidas. Seguidamente una pequeña web capaz de encender y apagar una salida del Arduino.
• Voltaje de operación: 5v DC
• Basado en el W5100 Wiznet, compatible con librerías originales
• Velocidad Ethernet: 10/100 Mbps
• Tipo de conector: RJ45
• Compatibles con Arduino UNO, MEGA, Leonardo
• Soporta en Hardware los protocolos TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet
• Incluye leds de estado: TX, RX, Full/Half duplex, Collision, Link, Speed
• Incluye Slot para tarjeta micro SD
Este escudo facilita enormemente el cableado cuando hay muchos sensores, por ejemplo, a la hora de montar
un coche robot. El motivo es que la placa Arduino tiene pocas tomas de corriente para alimentar los sensores, y
si tenemos muchos tendremos serios problemas para alimentarlos todos con la corriente continua. Sin
embargo, usando este escudo, cada I/O del Arduino tendrá su propio conector de tres pins numerados por las
letras SGV, S es la señal del sensor, G es la masa o negativo, y V es la corriente de alimentación positiva.
• 6 entradas analógicas
• Interfaz I2C
• Interfaz para 14 servos
• Interfaz del módulo bluetooth
• Interfaz APC220 wireless
• Interfaz RS232
• Interfaz módulo tarjeta SD
• Interfaz de comunicación APC220 inalámbrica módulo de RF
• Interfaces 12864 LCD serie y paralelo
• Interfaz sensor de ultrasonidos
» ProtoShield.
Se trata de una placa para facilitar el montaje y cableado de prácticas de laboratorio, es decir, que no se suele
usar para un montaje final de un proyecto. Lleva incorporado encima una pequeña protoboard.
Se trata de una tarjeta de expansión, que sería útil como controlador para máquinas fresadoras tipo CNC,
impresoras 3D, cortadoras laser etc.
Se trata de un escudo tipo gamepad de videojuegos, además añade otras funcionalidades extra.
NOTA: Hemos visto los escudos más importantes o utilizados, aunque tenemos disponibles otros que no vamos
a describir, pero cuya nomenclatura y/o utilidad se menciona seguidamente para que el lector pueda investigar
sobre ellos:
1.3 SENSORES
Existen muchos sistemas de percepción preparados para conectar a las entradas del Arduino, y usarlos
en nuestros proyectos, veamos los sensores más empleados.
Se trata de un sensor de distancia, la medida la hace emitiendo un sonido ultrasónico y midiendo lo que tarda
en regresar.
• Alimentación: 3.3 - 5V DC
• Salida OUT nivel 0 / 1
En robótica educativa, es bastante habitual, hacer un coche robot que tenga que seguir una línea, o bien que
no se salga de un círculo. Para tal fin tenemos este sensor, que normalmente se sitúa debajo del robot.
Este sensor utiliza un sensor capacitivo que devuelve una señal digital con la medición. A diferencia del DHT11,
es capaz de medir valores negativos de temperatura y como resolución puede medir hasta décimas de grado.
Se trata de un fotodiodo que hace las veces de receptor o sensor de infrarrojos (IR), funciona a 38 Khz,
normalmente para usar con un mando a distancia.
Se trata detector de sonido, no es más que un micrófono con un pequeño amplificador que permite medir
sonido. Se puede usar en juguetería, sonómetro, sistemas de alarma etc.
Aporta un giroscopio y un acelerómetro. Gracias a sus características es un chip muy utilizado en smartphones
y tablets. Este módulo cuenta con un regulador de voltaje para trabajar entre 3v y 5v.
• Alimentación: 3V-5V.
• Corriente de operación: 5mA.
• Comunicación: I2C.
• Convertidor analógico-digital de 16 bits en todos los ejes.
• Escalas del giroscopio: ±250, ±500, ±1000 y ±2000 ° / seg (dps) (programables por el usuario).
• Escalas del acelerómetro: ±2g, ±4g, ±8g y ±16g (programables por el usuario).
• Dimensiones: 20mm. x 215mm. x 2mm.
• Modelo: GY-BMP280-3.3
• Chip: BMP280.
• Voltaje de alimentación: 3,3v.
• Bajo consumo de energía: 4 μA
• Rango de presión: 300-1100 hPa
• Interfaz de comunicación: I2C o SPI
• Medición: Presión barométrica y altitud
Se trata de un simple pulsador o conmutador accionado mecánicamente por palanca, ideal para detectar un
final de recorrido, útil para brazos mecánicos, impresoras 3d etc.
Se trata de un pequeño detector de presencia por infrarrojos, es el típicamente usado para las alarmas, lleva
incorporada una lente de Fresnel, que le aporta un rango de detección de 7 metros y un ángulo operativo de
120º.
Se pueden utilizar para una gran variedad de aplicaciones como controladores de motores, lectura de código
magnético, detección de metales ferrosos, sensor de corriente, sensor de posición y detección de campos
magnéticos. Existe un modelo más sencillo, el KY-003.
1.4 ACTUADORES
Existen muchos mecanismos de acción preparados para conectar a las salidas del Arduino y usarlos en
nuestros proyectos, veamos los actuadores más empleados.
Suele llevar dentro el mismo motor DC del punto anterior, pero está acoplado a una reductora 48:1 para
poderlo usar como tracción de un coche robot o similares, la reductora de es de plástico. Requiere interface.
Se trata de un motor servo como el anterior, pero de mayor tamaño y potencia. Otro modelo similar, muy
empleado y de mayor calidad, es el de la marca Futaba modelo S3003.
Este tipo de motores soportan velocidades medias, pero con control total paso a paso y permiten rotaciones
completas. La ventaja es que podemos pararlo con altísima precisión, por lo que es ideal para robots,
movimiento de ejes de una impresora 3D etc. Este motor requiere de controlador o driver, normalmente se usa
la placa ULN2003 (ver interfaces).
• Fases motor: 4
• Frecuencia: 100 Hz
• Voltaje de funcionamiento: 5V
• Corriente de funcionamiento: 200mA
• Potencia Máxima: 20W
• Resistencia del devanado: 70 ohm
• Ángulo por paso: 5,625º
• Pasos por vuelta: 64
• Torque: 0,3 Kgr/cm
• Velocidad: 1900 rpm
• Temperatura de funcionamiento: -45ºC a +125ºC
• Longitud del cable motor: 19cm
• Diámetro bloque motor: 28mm
• Dimensiones motor: 42mm x 32mm x 30mm
• Diámetro: 12mm
• Voltaje de entrada: 3,3v a 5v DC
• Corriente Máxima: <30mA
• Frecuencia: 2000Hz
• Intensidad de sonido: 85dB a 10cm
• Temperatura de funcionamiento: -40ºC a +85º
Los interfaces de entrada y/o salida son placas electrónicas que adaptan las señales eléctricas que van a entrar
o salir por las entradas/salidas del propio Arduino. Su uso es obligado en muchos casos, imaginar que
deseamos encender la calefacción mediante un Arduino, la salida del Arduino solamente aporta 5 voltios (ó
3,3), pero el AACC funciona a 220 voltios, deberemos intercalar un interface (como un relé, tríac, etc.). Lo
mismo ocurre si por ejemplo, deseamos saber si en un enchufe hay corriente, no podemos conectarlo
directamente a una entrada del Arduino, necesitaremos un interface (como un optoacoplador etc.). Los
interfaces de entrada están relacionados con los sensores y los interfaces de salida lo están con los actuadores.
Se trata de un interface de salida, en la práctica no es más que un conmutador controlado por tensión, es decir,
el Arduino le entrega 5V/3,3V y luego al activarse el conmutador puede controlar cualquier cosa,
independientemente de su tensión de funcionamiento.
• Canal: 1
• Tensión de Alimentación: 5V
• Corriente de Salida: 10A
• Corriente de activación por relé: 15mA~20mA
• LED indicador
• Dimensiones: 30x 54mm
Existen otros modelos: RL06 (Dos relés o canales), RL07 con cuatro relés, RL08 con ocho y RL09 dieciséis relés.
Los anteriores relés son electromecánicos, tienen la ventaja de ser muy robustos eléctricamente y permiten el
paso de cualquier tipo de señal y corriente en la salida, pero las desventajas del desgaste, de hacer ruido y de
ser lentos. En ocasiones si necesitamos más velocidad podemos usar un módulo de relé de estado sólido,
además al ser electrónico, no tiene partes móviles, ni hace ruido.
Se trata de un controlador para dos motores DC de baja potencia o uno paso a paso de cuatro hilos. Usado para
mover independientemente hacia adelante o hacia atrás dos motores.
Se trata del controlador de motores DC más empleado, y funciona por doble puente H. Permite accionar hacia
adelante o hacia atrás dos motores independientes (o uno paso a paso). Normalmente se usa para los motores
de tracción, es más potente que el anterior al usar el chip de potencia L298.
Como accesorios entendemos pequeños dispositivos externos que amplían las capacidades del Arduino.
Deberemos escogerlos según la funcionalidad de nuestro proyecto. Muchos de estos dispositivos se conectan
al bus I2C para su control. También podemos añadir en este punto cajas, cables, boards o similares.
El módulo transceptor (transmisión / recepción) permite conexiones inalámbricas bluetooth como maestro o
esclavo, funciona de forma transparente como si realizáramos una conexión serie RS-232 TTL con cable.
Chipset CSR BC417. Este modelo puede ser tanto maestro como esclavo (con button maestro/esclavo).
Pequeña placa que nos proporciona un display de cuatro dígitos y siete segmentos.
Con el Arduino podemos usar delay como pausa para gestionar el tiempo, pero no disponemos de reloj para
poder programar acciones en horas concretas, para ello disponemos de este módulo, requiere de pila, y
además dispone memoria Eeprom. Se controla mediante el bus I2C.
• Basado en DS3231
• EEPROM AT24C32 (32K)
• Interfaz I2C
• Indicador LED de trabajo
También existen los modelos RTC DS1302 o RTC DS1307 más sencillos:
Se emplea como intermediario entre el Arduino y los LED WS2812 de tipo 5050.
» WS2812B, Tira de 8 LED RGB, tipo 5050 (Existen en forma de tira, matriz y círculo).
Existen otras versiones con más matrices 8x8 juntas, concretamente cuatro. Estos packs están preparados para
serializar más módulos uno tras otro, que permite mostrar mensajes largos:
• Voltaje: 3,3V / 5V
• Pinouts:
• CLK - Encoder A output
• DT - Encoder B output
• GND - Ground / 0V
• SW - 'Select' switch (activado cuando el eje se presiona en la parte superior)
• Círculo de pulso: 20
• Separación pins: 2,54mm
• Material: encoder metálico + placa de PCB
Permite transmitir y recibir datos a 433 Mhz (una de las frecuencias típica de los mandos a distancia), incluso se
puede usar para comunicar dos Arduino, estos módulos van por separado uno para TX y otro para RX. También
existe de 315 Mhz.
• Alimentación: 3V~12V
• Intensidad de trabajo: max=40mA (a 12V), min=9mA (a 3V)
• Modulación AM ASK /OOK
• Filtro SAW
• Frecuencia de trabajo: 315MHz-433.92MHz,
• Potencia de transmisión: 25mW (315MHz at 12V)
• Rango: 20 a 200 metros (diferentes tensiones pueden dar diferentes resultados)
• Velocidad de transferencia: 4 kB / S
• Dimensiones: 19 x 19 x 7 mm
Se usa mucho como llave por radiofrecuencia de cercanía. Suele venir con un llavero.
Tenemos disponibles diferentes tipos de teclados en forma de matriz, que nos permitirán introducir datos.
Muchas veces necesitamos alimentar dispositivos de 3,3 VDC desde los 5 VDC del Arduino.
Es para alimentar el Arduino (y sus accesorios) empleando el enchufe de la red eléctrica. Las características
pueden ser muy variadas, con respecto a la potencia los más usados son los de 1A, 2A, o de 3A, el conector es
de tipo tubular.
Debido a que el Arduino es una tarjeta electrónica que viene sin caja, es posible crear cortocircuitos mientras
trabajamos con él. Por lo tanto, la caja aporta seguridad para el mismo.
Son para realizar las conexiones “pinchando” sin soldadura, necesitaremos tanto macho-macho, como macho-
hembra, como hembra-hembra, además de deferentes longitudes.
NOTA: Hemos visto los sensores, actuadores y accesorios más importantes, pero tenemos disponibles otros
que no vamos a describir, cuya nomenclatura y/o funcionalidad se menciona seguidamente para que el lector
pueda investigar sobre ellos:
Existen muchos kits de desarrollo, que son unas cajas con un set de sensores y actuadores (o coches robot
etc.), ideales para hacer prácticas de laboratorio, salen más baratos y lo tenemos todo ordenado.
Tienes en Moodle un test online sobre los conocimientos adquiridos en este tema hasta aquí, es muy
fácil ya que salen preguntas del tipo ¿Cuál de los siguientes no es un modelo de Arduino?, además tienes dos
intentos. Mira el calendario de activación.
2.1 INTRODUCCIÓN
Dentro de la plataforma Tinkercad, podemos observar que en la pestaña CÓDIGO existen seis tipos de
instrucciones diferenciadas por seis colores diferentes. Vamos a comenzar con las azules conocidas también
como Salida.
Seguidamente se explican en orden descendente las cinco instrucciones de este tipo que vamos a ver
en este tema, dejando las otras tres para el tema 3.
» La instrucción “definir LED integrado en [ALTA|BAJA]”, se emplea para encender (ALTA) o apagar (BAJA) el
led que tiene siempre el Arduino integrado y conectado a la patilla 13 (conocido también como build-in led),
cabe recordar que en electrónica digital una señal ALTA equivale a un 1 lógico (es decir corriente máxima), y
BAJA equivale a un 0 lógico (es decir corriente mínima). Esta instrucción configura de manera implícita, es decir
automáticamente, la patilla 13 como salida.
» La instrucción “definir pasador [0-14|A0-A5] en [ALTA|BAJA]”, se emplea para encender o apagar cualquiera
de las salidas del Arduino. Esta instrucción configura de manera implícita, como salida, la patilla que se
seleccione en la misma. Cabe señalar, que nos permite escoger el rango A0-A5 también, ya que las seis
entradas analógicas (desde A0 hasta A5) admiten ser usadas como salidas digitales, pero recuerda que el
Arduino no dispone de salidas analógicas, en analógico solamente se pueden emplear como entradas.
» La instrucción “reproducir altavoz en el pasador [0-14|A0-A5] con tono [tono] durante [seg]”, hace sonar un
altavoz conectado a la salida escogida, con el tono deseado (rango del tono [1-12239]), durante los segundos
escogidos.
El tono y el tiempo se escriben a mano (o mediante una variable cuyo uso veremos más adelante).
» La instrucción “desactivar el altavoz en pasador [0-14|A0-A5]”, apaga el sonido del altavoz que esté
conectado en el pin o patilla escogida. Se emplea para parar un sonido activado con la instrucción anterior
antes de que expire el tiempo programado. Vemos seguidamente un ejemplo. Probadlo con el Tinkercad.
» En la parte inferior derecha de Tinkercad tenemos disponible el Monitor en serie, se hace visible o invisible
mediante la pestaña marcada en amarillo. La instrucción “imprimir en monitor serie [texto], nueva línea
[con|sin]”, imprime (visualiza) en dicho Monitor en serie el texto escrito en texto, y detrás imprime un carácter
de final de línea si escogemos con y no imprime ninguno extra si escogemos sin, este carácter lo usaremos en
sin cuando deseemos imprimir varias cosas distintas en la misma línea. El texto de escribe a mano (o mediante
una variable que veremos más adelante). Vemos el resultado de ejecutarla tres veces.
Vamos ahora a comentar las instrucciones naranja conocidas también como Control, explicando en
orden descendente las cinco que vamos a ver en este tema, dejando la última para el tema 3.
» La instrucción “esperar [tiempo] [segundos|milisegundos]”, se emplea para una pausa o delay, se configura
según el tiempo y unidad, el tiempo se pone a mano, cabe destacar que esta instrucción para o detiene el flujo
de su programa. El tiempo se pone a mano o mediante una variable.
» La instrucción “repetir [numero] veces”, se emplea como bucle, ya que permite repetir la ejecución de las
instrucciones que tenga dentro el número de veces escogido.
» La instrucción “repetir [mientras|hasta] <condición>”, es otro bucle pero más complejo, se emplea para
repetir la ejecución de las instrucciones interna mientras o hasta que se cumpla una condición que se pone
dentro de su rombo <>, las condiciones se encuentran dentro de las instrucciones verdes o Matemáticas (ya
que nos hace falta pongo ahora una instrucción verde, que ampliaremos más adelante).
Como se aprecia en la anterior imagen de la derecha, ese código imprimiría el texto indefinidamente, una vez
cada segundo, ya que la condición <1 = 1> se cumple siempre. Evidentemente aquí normalmente pondremos
condiciones similares a “si la variable i es mayor que 5”, veremos más adelante las variables.
» La instrucción “si <condición> entonces”, es una instrucción que nos brinda el poder de decisión, permite
ejecutar las instrucciones que tiene dentro solamente si se cumple la condición.
Como se aprecia en la anterior imagen de la derecha, ese código nunca encenderá la salida 2, ya que 1 nunca
va a ser distinto de 1. Evidentemente aquí normalmente pondremos condiciones similares a “si la distancia a la
pared es menor que 25 cm”, o del tipo “si la variable i vale 5”, o del tipo “si la entrada 3 esta activada”,
veremos más adelante las variables y las entradas.
» La instrucción “si <condición> entonces Intrucciones1, si no Intrucciones2”, nos brinda un poder de decisión
más complejo, permite ejecutar las instrucciones escritas en el bloque Instrucciones1 si se cumple la condición
y se ejecutaran las del bloque Intrucciones2 en caso contrario.
Como se aprecia en la anterior imagen de la derecha, como 1 nunca va a ser mayor que 1, el led integrado se
apagará siempre que se ejecute ese programa.
En el menú rosa o Variables, no veremos instrucciones, únicamente divisaremos el botón “Crear variable”. Si
pulsamos en dicho botón, nos permitirá crear una, en este la llamo contador.
Como se aprecia en la anterior imagen de más a la derecha, se ha creado la propia variable llamada contador, y
dos instrucciones nuevas, definir y cambiar.
» La instrucción “definir [variable] en [valor]”, escribe en la variable el valor deseado (el nombre tiene que ser
creado previamente, el valor deseado se escribe a mano). Ejemplo para escribir un 0.
» La instrucción “cambiar [variable] por [valor]”, suma a la variable el valor es escrito, en el siguiente ejemplo
incrementa el valor de la variable en 1.
Como se puede apreciar acepta otras opciones, como renombrar la variable o borrarla.
La duda que surge ahora es como hacer cálculos con la variable, la respuesta la tenemos en las Matemáticas o
menú verde, cuyas instrucciones se usan mucho combinadas con las variables.
Gracias a este menú, entre otras cosas, tenemos la posibilidad de realizar comparaciones relacionales (ya lo
hemos usado antes comparando 1 con 1), además de poder realizar diversos tipos de cálculos matemáticos,
tanto aritméticos como lógicos. Las opciones de este menú nunca se usan solas, se insertan dentro de una
instrucción a modo de rompecabezas. Vamos a ver ahora las dos primeras y la última dejando el resto para el
tema 3.
» La primera opción disponible es para realizar los cálculos aritméticos básicos, fíjate que es un óvalo alargado,
ya que siempre se usa dentro de alguna instrucción con un hueco de esa forma. Admite escribir dentro
variables o valores a piñón fijo.
» La última opción disponible “[ALTA|BAJA]” sencillamente es un operando para poder comparar con valor 1 o
0 lógico. Lo usaremos más adelante junto con el menú púrpura (Entrada).
Las salidas digitales solamente pueden tener dos valores, o un valor alto (1 lógico), o bajo (0 lógico).
Por lo tanto, se emplean mucho para activar (encender) o desactivar (apagar) cualquier elemento.
Vamos a explicar cómo activar salidas digitales mediante una práctica guiada, de esta forma,
aprendemos practicando. En Tinkerkad, crea nuevo proyecto, llámalo Práctica_2_1, pon un Arduino.
Visualiza los componentes Básico, sitúa un led amarillo encima de la patilla 13, llámalo LED1, pon una
resistencia de 250 ohmios (Ω) y llámala R1, conéctala entre la patilla 13 y el positivo del led (ánodo +, es la
patilla recta), pon un cable negro desde el GND del Arduino al negativo del LED (cátodo -, es la patilla curva).
Recuerda que los led tienen polaridad y no funcionan si se conectan al revés, y que la resistencia se inserta para
que no se estropeen, ya que el Arduino les entrega 5V y los led de ese tamaño y color funcionan sobre 1,6V.
Visualiza el código en modo Bloques, simula, deberías tener el siguiente código y el led debería parpadear.
Esto ya se vio en el tema 1, valga ahora como repaso, y para usarlo como base he ir ampliando
conocimientos. Fíjate que el Arduino está funcionando sin pila, esto es debido a que está alimentado ya por el
USB, si observas al simular se conecta el cable USB, y al parar la simulación se desconecta el cable físicamente.
Ahora con clic derecho sobre el bloque, duplícalo e insértalo debajo. En ese segundo bloque cambia el
3 por “16”, añade al final un “esperar 2 segundos”, cambia los tiempos a 200 milisegundos. Simula.
El led debería parpadear tres veces lentamente y luego dieciséis rápidamente, repitiendo el ciclo sin parar.
Añade dos instrucciones “imprimir en monitor en serie” como se ve seguidamente, una que imprima
“Velocidad lenta: ” y la otra “Velocidad rápida: ” (deja un espacio tras los :, no pongas tildes ya que no se
imprimen bien). Al simular verás como en el Monitor en serie se va mostrando el paso del programa por cada
velocidad.
Una forma de conseguirlo es mediante el uso combinado de las condiciones (en el menú verde) y de
las variables (con el menú rosa).
Arrastra ahora un “repetir [mientras] <condición>” de manera que “coja” o envuelva todas las
instrucciones que tenemos.
Añade un segundo “repetir [mientras] <condición>” de manera que “coja” o envuelva de nuevo todas
las instrucciones que tenemos, incluido el bucle anterior.
Desde el menú rosa, crea una variable y llámala contador, añade como primera línea un “definir
[contador] en [1]”. Seguidamente desde el menú verde, pon una comparación de 1 = 1 en la condición del
primer bucle.
De nuevo desde el menú verde, arrastra otra comparación, esta vez en el segundo bucle, cambia el
mientras por hasta y cambia la comparación a >
Para continuar, desde el menú rosa, pon un ”cambiar [contador] por [valor]” al final del todo, pero
dentro del segundo bucle, que incremente el contador en 1 como se ve seguidamente.
Simula. Ahora el ciclo debería funcionar tres veces únicamente y parar. Fíjate en el Monitor en serie.
Explicación:
» Luego vienen dos bucles anidados, el primero (el mientras), se ejecutará sin salirse nunca ya que compara si
1=1, eso se hace para que nunca se salga del él, es lo que se conoce como bucle infinito, y gracias a ello nunca
se ejecutarán de nuevo las líneas anteriores, por lo tanto, en estas primeras líneas normalmente se ponen las
instrucciones que configuran el programa correspondiente al arrancar.
» El segundo bucle (en hasta), tiene dentro otros dos bucles, el que repite hasta 3 para la velocidad lenta, y el
que repite hasta 16 para la rápida, antes de cada uno de ellos se imprime el mensaje de velocidad y la variable
contador, la velocidad se pone en modo sin para que no imprima un salto de línea y así el valor de la variable se
imprime en la misma línea.
» Una vez que el contador es mayor que 3 el segundo bucle (el hasta) termina y ya no se ejecuta más, por lo
que se imprime “Terminado” cada tres segundos.
Reto voluntario: Crea al principio del programa dos variables, una llamada tLargo con valor 1, y otra llamada
tCorto con valor 200. En todos los esperar que estén a 1 segundo, arrastra la variable tLargo al lugar de 1, y en
los esperar que estén a 200 arrastra en su lugar tCorto. De esta manera, tendremos la ventaja de poder
cambiar los dos tiempos de forma centralizada desde el comienzo del programa.
2.3.2 PRÁCTICA_2_2 SEMIGUIADA (Display 7 segmentos con buzzer) (A entregar la segunda parte)
Vamos a seguir trabajando con las salidas digitales, concretamente nos interesa poder
activar/desactivar varias a la vez, para ello, vamos a ver el display de siete segmentos. Este tipo de dispositivo
no son más que siete diodos led dentro de la misma pastilla, para ahorrar en conexiones, siempre tiene una
patilla común que puede ser positivo común (ánodo común) o negativo común (cátodo común), además,
existen modelos con un octavo led que vale para representar un punto. Estudiemos como están conectados
internamente los leds en ambos casos (el led de arriba se numera como a, y va rotando hacia la derecha).
Por ejemplo, en el caso de usar uno con positivo común, las siete salidas deberían tener los siguientes
valores (en el dibujo de la izquierda los dos * son la patilla común y están unidas, el DP es el punto), fíjate como
al ser ánodo común para encender los leds hay que mandarle un 0. El cátodo común sería totalmente al revés.
Entra a Tinkerkad, ve a Circuits, crea un nuevo proyecto y llámalo Práctica_2_2, inserta un Arduino,
llámale Arduino UNO. Pon la visualización de Componentes en Todos, y sitúa encima de las salidas [1-7] el
Display (Tinkercad lo llama Visualizador), ponle de nombre Display3 y escógelo como Cátodo común (negativo
común).
Recordad que con los leds hay que tener en cuenta la polaridad (conexión + y -), y necesitan de una
resistencia en serie si se alimentan a más de 2V, por lo tanto, vamos a poner siete resistencias de 220 ohmios
entre el Arduino y el display, llámalas de derecha a izquierda R_A, R_B y así consecutivamente, las
conectaremos directamente a las salidas [1-7], siendo R_A la que se conecta a la salida 1 y corresponde a la
letra A del display. Termina de conectar los otros extremos de las resistencias al display, fíjate en la imagen
como al acercar el cable a los terminales del display nos dice su letra correspondiente.
Una vez completados los siete cables nos faltara el común, recuerda que hemos configurado el display
como cátodo común, por lo que hay que conectarlo al negativo o GND del Arduino. Como es negativo una vez
puesto cámbialo a color negro.
Conecta ahora las patillas izquierdas tanto del buzzer como de la bombilla al mismo GND, con sendos
cables negros. Y la patilla que queda libre del buzzer la conectaremos a la salida 9, y la de la lámpara a la 10.
Ahora vamos al Código en modo Bloques. Ponemos el siguiente programa y simulamos. ¿Qué ha
ocurrido?
Usando como base el mini programa anterior crea este nuevo, la columna de la izquierda visualiza el
cero ya que enciende todos los leds menos el G, además, le da un 1 lógico al buzzer para que suene (patilla 9) y
un 0 lógico a la lámpara para apagarla (patilla 10), las otras dos columnas es fácil adivinarlo. Tienes que hacer
un solo programa uniendo en una columna las tres siguientes consecutivamente, aprovecha que puedes
“duplicar” código para crear la segunda y la tercera parte, con la primera como base, luego júntalas.
Simula. Verás un contador de 0 a 2 en el display, cuando pone cero avisa que va a comenzar la cuenta
mediante un zumbido (enciende el audio del ordenador), y cuando llega al final de la cuenta se enciende la luz.
Ejercicio a entregar: Tienes que ampliar esta práctica para entregarla, con los siguientes puntos.
a) Usando las partes que necesites de la práctica 2.3.2, haz que la cuenta de 0 a 2 solo la haga una vez y pare.
Es decir, crea la variable contador y los dos bucles. Como estamos en programación se admiten otros
algoritmos.
b) Amplia para que ahora la cuenta vaya desde 0 a 9 cada segundo, la bombilla ahora se encenderá al llegar a 9,
y el zumbador sonará con el 1 (no con el 0), así indicará que la cuenta ha comenzado.
c) Haz que el paso del 0 al 1 sea a los 5 segundos, el resto seguirá a 1 segundo.
Las entradas digitales, al igual que las salidas, solamente pueden tener dos valores, o un valor alto H (1
lógico), o bajo L (0 lógico). Por lo tanto, no podemos conectar sensores analógicos a estas entradas. Se usan
mucho para conectar pulsadores/interruptores/conmutadores, sensores con dos estados de salida como el de
presencia, finales de carrera etc. Vamos a necesitar una introducción al menú púrpura o de Entrada.
En el menú púrpura o Entrada, tenemos siete instrucciones de entre las cuales requerimos la primera
en este apartado, el resto las dejaremos para el tema 3.
» La opción “leer pasador digital [0-1 A0-A5]”, se emplea para consultar si una entrada digital está a nivel alto
o lógico. Al igual que ocurría con las entradas admite usar la numeración de las entradas analógicas.
Esta opción NO se puede usar sola, necesita de una instrucción que la contenga a modo de
rompecabezas. Seguidamente observamos cómo se usa dentro de una instrucción SI. Como se puede apreciar
requiere de una comparación con ALTA o BAJA. En este ejemplo si la entrada 2 está a nivel alto se imprime el
mensaje.
Vamos a explicar cómo leer y operar con las entradas digitales, mediante una práctica guiada, de esta
forma, aprendemos practicando. Entra a Tinkerkad, ve a Circuits, crea un nuevo proyecto y llámalo
Práctica_2_3, inserta un Arduino y crea el circuito y el programa de la siguiente imagen.
Con respecto al circuito hemos empleado dos Componentes Básico, una resistencia de 2200 ohmios y
un pulsador de circuito impreso. La conexión de la resistencia es pull-down, está conectada entre la entrada (la
Con respecto al programa se ha empleado una instrucción de tipo SI/SI NO, la cual nos brinda poder de
decisión, en este caso imprime un mensaje en caso de que la entrada tenga un 1 lógico y otro en el caso
contrario, además si es nivel alto enciende el led build-in de la patilla 13.
Fíjate en el Monitor en serie lo que hace al simular, en caso de no pulsar se imprime L, y si pulsas se
imprime H todo el rato que esté pulsado (además de encender el led 13 interno).
RETO voluntario: Ten en cuenta que el pulsador es sustituible por cualquier otro elemento o sensor que tenga
salida digital, y el circuito funcionaría exactamente igual. Si quieres, prueba por tu cuenta a cambiarlo, y
simular por ejemplo por un “Interruptor deslizante” (se trata de un conmutador cuya patilla común es la
central, por lo que debes usar el pin central y el de cualquier lado), o con un “Sensor de inclinación”.
Seguidamente tienes disponible como extra un corto video de una práctica similar, pero montada en protoboard.
URL: https://www.youtube.com/watch?v=PC15jBx2UxI&list=PLV6cmKvnKRs5geApVORPW79U6s3wpa0Ht&index=5
Vamos ahora a combinar el uso de sentencias condicionales con las entradas y salidas digitales, de
manera que las mismas salidas actúen de manera diferente si detectamos señal en una entrada u otra, esto lo
haremos mediante otra práctica guiada. Entra a Tinkerkad, ve a Circuits, crea un nuevo proyecto y llámalo
Práctica_2_4, inserta un Arduino y crea el circuito y el programa de la siguiente imagen.
Con respecto al programa ahora ya no es necesario juntar los dos bloques en una misma columna, ya que los
vamos a usar como dos programas concurrentes, por lo tanto, hay que dejarlo tal cual está en la imagen. Lo
que hace el programa es que si pulsamos el pulsador conectado a la entrada 12 los leds se van encendiendo de
derecha a izquierda y al contrario si se pulsa el 10, si se deja de pulsar cualquier pulsador se paga todo debido
al código puesto en la parte del SI NO.
Duplica la práctica anterior y llámala Práctica_2_5. Recuerda que el display tiene que quedarse como
cátodo común.
Deja los pulsadores con sus resistencias tal cual sin tocar. Pero borra los tres leds con sus resistencias.
Inserta un display de 7 segmentos en las salidas [1-7] con sus resistencias. Recuerda, la patilla 1 al A, la 2 al B y
así sucesivamente hasta G. El código quedará en dos columnas como en la práctica anterior, modifícalo como
sigue.
Haz que al pulsar el pulsador de la izquierda se ponga el display a 5, y sin soltarlo, descuente hasta 0 cada
segundo, quedándose en 0 parado tres segundos, reiniciando el ciclo si no se suelta el pulsador, si se suelta el
pulsador de borra todo.
Vamos a seguir trabajando con las entradas y salidas digitales, concretamente vamos a crear una
sencilla alarma, para ello requeriremos del sensor de presencia o PIR (tipo HC-SR501), cuya señal es digital, o
detecta o no detecta, no obstante, los reales poseen una resistencia variable para ajustar su sensibilidad.
Crea en Tinkerkad Circuits y crea el siguiente circuito, llámalo Práctica_2_6. Desde Componentes Todos,
inserta un Arduino, un Interruptor deslizante, una Resistencia de 5 kΩ, un Piezo (Buzzer), una Bombilla y un
Sensor PIR.
Al simular, no debería hacer nada si no activamos el interruptor deslizante, aunque lea el sensor PIR. Si esta el
interruptor encendido, y detecta el sensor PIR, sonará la alarma (enciende el altavoz del PC para escucharla) y
se encenderá la luz durante 12 segundos.
Para simular hay que tener claro que los sensores PIR no están detectando todo el rato, aunque estuviera una
persona delante de él, el sujeto tiene que moverse ya que realmente detecta el movimiento de calor, en el
simulador, cuando detecta se enciende en rojo un instante dando señal al mismo tiempo, y luego deja de dar
señal, es decir, da un pulso cada vez que detecta movimiento, haced clic en la bolita azul para que detecte de
nuevo. Por eso el programan necesita el “esperar”, para que siga sonando cuando deje de leer el PIR.
Ejercicio a entregar: Una casa normalmente tiene varios sensores, por lo tanto, tienes que ampliar esta
práctica para entregarla, con los siguientes puntos.
a) Sin tocar nada del circuito actual, añade un segundo sensor PIR y conéctalo a la entrada 4, la alimentación
pónsela en paralelo al otro sensor PIR. En cuanto al programa, deseamos que de igual que lea uno o el otro, el
efecto tiene que ser el mismo, sonar la alarma y brillar la luz un tiempo. Es muy fácil, y se hace evidente que
tendrás que usar un operador “OR”, si “lee uno” o “lee otro”.
RETO voluntario: ¿Serías capaz de poner por tu cuenta un tercer sensor PIR?
Crea una práctica nueva y llámala Práctica_2_7, déjala vacía. Tinkercad tiene predefinido unos
proyectos de prueba, destinados al autoaprendizaje, es lo que se conoce como Starters, están en
Componentes, dentro de ellos, existe un apartado para Arduino. Extrae al tablero el proyecto Varios tonos.
Se pide añadir dos Buzzers con sus respectivas resistencias a las patillas 4 y 5, y ampliar el programa con otros
dos tonos a tu gusto.
Trabajar con variables es muy importante, aunque a veces, se puede complicar en exceso. Por eso es
bueno practicar con ellas, te propongo aquí un reto voluntario.
Duplica la práctica 2.5 y guárdala como Práctica_2_8. Elimina el segundo pulsador y su resistencia. Conecta el
punto del display, cableando la patilla DP del display con la salida 0 del Arduino.
Debes conseguir que al comenzar la simulación aparezca en la pantalla le letra L. (con el punto encendido), y
luego mediante una variable contador, si pulsas tres veces el pulsador que aparezca la letra H (sin el punto).
Tienes que entregar las prácticas 2.2 (con la segunda parte completada), la 2.5, la 2.6 y la 2.7 (con la
segunda parte completada, el reto es voluntario), para ello, tienes que conseguir un enlace de cada una para
compartir (repasa el tema 1 si no recuerdas como se comparte).
Puedes escribir directamente los dos enlaces en la entrega de la práctica, y/o añadirlos en un archivo de texto,
que tenga el nombre “Apellido_Nombre_Practicas2.txt/pdf/doc/docx/odt”.
4) EJERCICIO VOLUNTARIO
Como actividad extra no obligatoria, puedes entregar la práctica 2.8, para ello tienes que conseguir un
enlace para compartir (repasa el tema 1 si no recuerdas como se comparte).
Puedes escribir directamente el enlace en la entrega de la práctica junto a las otras, y/o añadirlo al archivo de
texto de las prácticas obligatorias, que tenga el nombre “Apellido_Nombre_Practicas2.txt/pdf/doc/docx/odt”.
NOTA: No borréis vuestras prácticas del Tinkercad, y dejadlas con sus respectivos nombres, algunas podrían
hacer falta en los temas 4 y 5, programación en C.