martes, 31 de marzo de 2020

Reloj. Cronómetro

El siguiente programa implementa un reloj muy básico de horas y minutos. Para poder visualizarlas juntas en el display de cuatro dígitos, multiplicaremos las horas por cien y le sumaremos los minutos:
                 horas*100 + minutos
Ejemplo: 16 horas y 35 minutos
                  16*100   +   35  
                   1600      +   35 = 1635




Ahora vamos a hacer un cronómetro que mida las centésimas de segundo transcurridas desde que accionamos el pulsador 1 hasta que presionamos el pulsador 3 para detenerlo. 

También podríamos usar un único pulsador para iniciarlo y detenerlo. En ese caso, hay que modificar el valor de la variable "cronometro" cada vez que lo presionemos, si valía 0 la ponemos en 1 y si estaba en 1 la ponemos en 0:

En los programas anteriores hemos utilizado la instrucción "espera" para contar el tiempo, 60 segundos en el reloj y 0.01 segundos en el cronómetro. Esta instrucción detiene por completo el funcionamiento del programa; si el tiempo es pequeño, como en el cronómetro, puede que no genere mayores problemas, pero si es grande (en el reloj se detiene durante 1 minuto) impedirá que se pueda atender el funcionamiento de otros dispositivos, por ejemplo, unos pulsadores para que podamos ponerlo en hora en cualquier momento. Para evitar que el programa se mantenga sin hacer nada durante tanto tiempo podemos usar los bloques "temporizador" y "reiniciar temporizador" del apartado sensores.

"Temporizador" es una especie de variable en la que se va almacenando el tiempo transcurrido desde que se inicia el programa o desde que la reiniciamos. Utilizando estos bloques el programa del reloj quedaría de la siguiente manera:

De esta forma el programa no se detiene nunca y podríamos incluir la atención a otros dispositivos (ejercicio 2).


Ejercicios propuestos:

1.- Realizar un cronómetro similar al anterior en el que se visualicen los minutos y segundos transcurridos.

2.- Hacer un reloj que se pueda poner en hora con los pulsadores.




El potenciómetro                                                         ⇒  Conectar un servo. Parking




lunes, 30 de marzo de 2020

El potenciómetro.

Hasta el momento hemos trabajado con magnitudes digitales o binarias; es decir, que sólo pueden tener dos estados: 0-1, encendido-apagado, presionado-liberado, cierto-falso. El potenciómetro multivuelta que incluye el Shield suministra, al pin A0 de Arduino, un voltaje comprendido entre 0 y 5 voltios, que podemos modificar girando su cursor y pasar por todos los valores posibles. Se trata de una magnitud analógica que será digitalizada por Arduino y transformada en un número entero entre 0 y 1023.

Para utilizar el potenciómetro tenemos el bloque:
Nos devuelve un número entero comprendido entre 0 (0 voltios) y 1023 (5 voltios).

El siguiente programa muestra en el display el número enviado por el potenciómetro:




Ahora vamos a hacer que los diodos 2 y 3 permanezcan encendidos si la lectura del potenciómetro está comprendida entre 400 y 600, quedando apagados en caso contrario:





Ejercicios propuestos:

1.- Realizar un programa que encienda el LED 4 cuando la lectura del potenciómetro sea mayor de 400 y, además, el LED 3 si supera 500.

2.- Ahora tenemos que encender los LEDs 3 y 4 si la lectura está comprendida entre 500 y 600. Además, añadimos los LEDs 1 y 2 entre 600 y 700 y, finalmente, hacemos sonar el zumbador si se superan los 700.


Pulsadores (II). Variables                                                          ⇒  Reloj. Cronómetro




sábado, 21 de marzo de 2020

Pulsadores (II). Variables.

El bloque "pulsador PRESIONADO" detecta la activación del pulsador durante todo el tiempo que tenemos el dedo sobre él. Sin embargo, hay ocasiones en que sólo necesitamos detectar el primer momento en el que lo accionamos y no el resto del tiempo hasta su liberación, eso lo podemos hacer con la opción "pulsador  PULSADO". 

Vamos a encender y apagar un LED con un único pulsador de manera que, si está apagado, al pulsar se encienda y, si está encendido, se apague, para ello usaremos "pulsador PULSADO" y "led VOLTEADO":



En el siguiente programa iremos incrementando el número que se muestra en el display (inicialmente cero) cada vez que accionemos un pulsador, teniendo en cuenta que cuando sea mayor de 20 tenemos que volver a cero.

Para ello vamos a utilizar una variable, se trata de un "sitio" donde podemos guardar datos y acceder a ellos, o modificarlos, cuando deseemos. En la siguiente imagen se muestran los pasos para crearla:

Ahora dispondremos de unos bloques para dar un valor a la variable e ir modificándolo cuando deseemos. Hay que tener en cuenta que el bloque "cambia ....... por" es, en realidad, "incrementa ..... en"

En definitiva el programa es el siguiente:





Ejercicios propuestos:

1.- Modificar y ampliar el programa anterior para utilizar dos pulsadores, uno para incrementar (cambiar numero por 1) y otro para decrementar (cambiar numero por -1). El numero del display no debe ser mayor (>) que 20 ni menor (<) que 0.

2.- Ahora queremos ir encendiendo de uno en uno los diodos LEDs cada vez que accionemos un pulsador.

El display de 7 segmentos                                                 ⇒  El potenciómetro




miércoles, 18 de marzo de 2020

El display de 7 segmentos

Se trata de un display de cuatro dígitos en el que, principalmente, podemos visualizar números, aunque también podemos ver algunas letras y símbolos.

Para mostrar números directamente contamos con la instrucción:
Si queremos actuar sobre cada uno de los segmentos de manera individual tenemos que indicar el número del display (4,3,2,1) y un código binario que indica con ceros y unos los segmentos que deben estar encendidos (1) y apagados (0). En la figura adjunta podemos apreciar el nombre de los segmentos, su orden y los números binarios correspondientes a las letras de la palabra "hoLA". 

   a b c d e f g p
h  0 0 1 0 1 1 1 0
o  0 0 1 1 1 0 1 0
L  0 0 0 1 1 1 0 0
A  1 1 1 0 1 1 1 0

En definitiva, la instrucción es la siguiente:
Con estos otros bloques podemos controlar el punto de los visualizadores de manera independiente y apagar o encender todo el display:

En el siguiente programa se visualiza el número 5 durante 1 segundo y la palabra hola durante 2 segundos:


Ahora vamos a ir encendiendo y apagando de uno en uno los segmentos exteriores del display, dándole la vuelta completa:



Ejercicios propuestos:

1.- Escribir un programa que haga aparecer en el display los números del 0 al 5 a intervalos de un segundo.

2.- Utilizar las instrucciones "muestra código 7segmentos" y "espera" para hacer un movimiento de luces en el display.

Pulsadores. La instrucción si.                                    ⇒  Pulsadores(II). Variables




lunes, 16 de marzo de 2020

Pulsadores. La instrucción si

El shield multifunción dispone de tres pulsadores: S1, S2 y S3. Para usarlos tenemos que detectar si están presionados o liberados y, en función de ello, realizar una acción u otra, esto lo haremos con las siguientes instrucciones:

Con el siguiente programa encendemos el LED 1 al presionar el pulsador y lo apagamos al liberarlo:


Modificando ligeramente el programa anterior haremos que el LED se encienda al presionar el pulsador 1 y se apague al presionar el pulsador 2:




Ejercicios propuestos:

1.- Escribir un programa para que al presionar el pulsador 1 se encienda el LED 4, al presionar el pulsador 2 suene el  zumbador y al presionar el pulsador 3 se apague el LED y finalice el sonido.

2.- Ahora haremos que los diodos 1 y 2 se enciendan al mantener presionado el pulsador 1 y se apaguen al liberarlo. Además, los diodos 3 y 4 se encenderán al presionar el pulsador 2 y se apagarán al presionar el pulsador 3.


El zumbador                                                        ⇒  El display de 7 segmentos





domingo, 15 de marzo de 2020

El zumbador

Para controlar el zumbador que lleva incorporado el shield multifunción disponemos de tres instrucciones:

El programa adjunto hace que el zumbador emita las notas do, re y mi durante medio segundo cada una. Después permanece dos segundos en silencio:



Vamos a modificarlo para que suenen las mismas notas, pero dando unos pitidos cortos (de 0.1 segundos):





Ejercicios propuestos:

1.- Realizar un programa que haga parpadear un LED y, a la vez, emita dos pitidos cortos.

2.- Conseguir que suene la escala musical completa en el zumbador.

3.- Ampliar el programa del semáforo de la entrada anterior de manera que el zumbador emita unos pitidos cortos para avisar que el tiempo de paso de los peatones se está acabando.


Los diodos LEDs                                                 ⇒  Pulsadores. La instrucción si




sábado, 14 de marzo de 2020

Los diodos LEDs

El shield multifunción cuenta con cuatro diodos LEDs, D1, D2, D3 y D4. Para encender, apagar o cambiar el estado de cualquiera de ellos contamos con el siguiente bloque:


Podemos seleccionar el número del LED (1, 2, 3, 4) y su estado: encendido, apagado o volteado (si está apagado se enciende y si está encendido se apaga).

Todos nuestros programas se iniciarán con el evento "cuando Arduino Uno se inicia":

Generalmente, irá seguido del bloque "para siempre", se trata de un bucle que repite permanentemente las instrucciones que pongamos en su interior:
También tendremos que hacer temporizaciones. Con ellas podemos detener la  ejecución del programa durante un determinado tiempo. Para ello, dentro de los bloques de control contamos con la instrucción:

El siguiente programa va encendiendo los LEDs de uno en uno a intervalos de 1 segundo. Después se apagan todos durante 2 segundos y vuelve a iniciarse el ciclo.




Ejercicios propuestos:

1.- Hacer un programa que provoque el parpadeo alternativo de los LEDs 1-2 y los LEDs 3-4. Es decir, se encienden los LEDs 1 y 2 mientras que los LEDs 3 y 4 permanecen apagados durante medio segundo, posteriormente, se apagan los LEDs 1 y 2 y se encienden los LEDs 3 y 4 durante medio segundo. El ciclo se repite permanentemente.

2.- Ahora tenemos que conseguir un movimiento rápido de sube-baja con un único LED encendido.

3.- Programar un semáforo para coches. El LED D1 sería el rojo, el D2 el ambar y el D3 el verde. Posteriormente, se podría ampliar el programa usando el LED D4 para los peatones, encendido no se puede pasar y apagado si, incluso se puede hacer parpadear para avisar que el tiempo de paso se agota antes de ponerse en rojo. Aunque no es imprescindible, podríamos usar el bloque "repite" para facilitar el parpadeo:


Las instrucciones que pongamos en su interior se repetirán el número de veces indicado.


Arduino + Shiel multifunción                                                                  ⇒ El zumbador



martes, 10 de marzo de 2020

Arduino + Shield multifunción

Arduino es una pequeña tarjeta programable capaz de hacer unas cosas u otras dependiendo de los programas que nosotros carguemos en su memoria. Se conecta al puerto USB del ordenador y mediante un lenguaje propio se escriben los programas y se suben a la placa. Una vez programada no necesita seguir unida al ordenador, se puede desconectar de él y funcionar de manera autónoma (siempre que la alimentemos con una fuente o batería adecuada).

Arduino cuenta con una serie de pines en los que podemos conectar y controlar elementos externos; luces, motores, sensores, etc:

14 pines digitales (numerados de 0 a 13) que se programan individualmente como entrada o salida y  suministran o leen un voltaje alto (próximo a 5v, HIGH) o bajo (próximo a 0v, LOW). Además, en los pines 3, 5, 6, 9, 10 y 11 se puede obtener una señal analógica (PWM) con una precisión de 8 bit.

6 entradas analógicas (numeradas de 0 a 5) que permiten leer un voltaje comprendido entre 0 y 5v con una resolución de 10 bit (suministran un número entre 0 y 1023). Si se desea, también podemos programarlos como entradas/salidas digitales, en ese caso, se nombran como pines 15,...19.


En lugar de usar una protoboard para cablear y añadir  elementos externos, vamos a utilizar un Shield multifunción (k5864195); se trata de una placa que se pincha directamente sobre Arduino y pone a nuestra disposición cuatro diodos LEDs, tres pulsadores, un potenciómetro, un zumbador y un display de 7 segmentos de cuatro dígitos, además, quedan libres varios pines en los que podemos conectar directamente otros dispositivos, por ejemplo: un sensor de temperatura, micro servos, sensores de ultrasonidos, de infrarrojos (sigue línea) e incluso un circuito bluetooth.


Un aliciente adicional para usarlas es su bajo coste, actualmente, se pueden encontrar por un precio inferior a 10 euros (las dos) en ElectroHobby.

Hemos optado inicialmente por un lenguaje de programación visual, mBlock V5.2.0, se trata del lenguaje Scrach adaptado para trabajar con robots y diversas placas tipo Arduino. En el siguiente enlace encontramos las distintas opciones de descarga y la posibilidad de trabajar sin instalación utilizando la versión web:
 

Si optamos por la programación vía web tenemos que instalar mLink (se encuentra en el mismo enlace anterior un poco más abajo) y ejecutarlo antes de abrir la página web.

Sea cual sea la opción elegida, en la pestaña "Dispositivos" hay que quitar el que sale por defecto y añadir Arduino Uno. Además, hemos creado una extensión específica, denominada "multifuncion", que tenemos que incluir una vez que hayamos añadido el dispositivo Arduino Uno . En la imagen adjunta se marcan estos procesos y se pueden ver parte de los bloques de la extensión, serán los que utilizaremos en nuestros programas junto con algunas instrucciones de control del lenguaje.


A continuación podemos ver un primer programa que hace parpadear el LED 1 a intervalos de un segundo. Conectamos la placa Arduino (con el shield) utilizando el cable USB y pinchamos en conectar; en la ventana que se abre seleccionamos "mostrar todos los dispositivos conectables", normalmente aparecerá un puerto COM que será el de nuestra placa. Si todo es correcto el botón Conectar cambiará por Subir y pinchando en él comenzará la carga del programa en la memoria de Arduino, una vez finalizada el LED 1 debe parpadear.



En las entradas posteriores iremos utilizando los diferentes elementos del shield multifunción y los bloques para programarlos.