You are on page 1of 58

12Blocks + ARDUINO

GUA Y EJERCICIOS
Jos Manuel Ruiz Gutirrez
V.1.0 Junio 2015

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

INDICE
1. Introduccin
2. Instalacin
3. Ejercicios.
3.1. Ejercicio 1: Descripcin de la interfaz 12Blocks
3.2. Ejercicio 2: Enviar "Hello World" para Simulado Terminal
3.3. Ejercicio 3: Matemticas
3.4. Ejercicio 4: Repetir
3.5. Ejercicio 5: Variables
3.6. Ejercicio 6: Funcin When
3.7. Ejercicio 7: Bloques Condicionales
3.8. Ejercicio 8: Bloque Switch
3.9. Ejercicio 9: Funciones lgicas bsicas.
3.10.
Ejercicio 10: Lectura y trazado de una seal analgica
3.11.
Ejercicio 11: Salida analgica PWM
3.12.
Ejercicio 12: Manejo del Terminal.
4. Libreras
5. Prcticas
5.1. Intermitente
5.2. Intermitente con variacin de tiempo
5.3. Monoestables
5.4. Activacin de una salida en modo biestable (bajada y Subida)
5.5. Contadores
5.6. Generador de impulsos de duracin variable
5.7. Regulador de Intensidad luminosa
5.8. Sistema Combinacional
5.9. Medida de luz con activacin de salida
5.10.
Medida de luz y deteccin de niveles
5.11.
Secuenciador
5.12.
Semforo
5.13.
Zumbador
5.14.
Control de servo
5.15.
Codificador 4/2.

Jos Manuel Ruiz Gutirrez


Junio 2015. Ver:1
Este trabajo est bajo licencia Creative Commons Attribution 3.0 Unported License)
2

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

1. Introduccin.
Programacin con 12Blocks
12Blocks es un entorno intuitivo y potente para la programacin de microcontroladores
populares y robots. Es un lenguaje visual que hace que la programacin sea tan simple como
arrastrar y soltar. Cientos de bloques soportan sus libreras, desde la lectura de sensores
hasta la generacin de sonidos, siendo tambin muy fcil importar bibliotecas de cdigo para
crear nuevos bloques.
12Blocks ofrece interesantes herramientas de depuracin grfica y tutoriales guiados para
que programadores principiantes y expertos puedan realizar sus aplicaciones con xito.
12Blocks es ideal para el uso en el aula, estudiantes, aficionados y profesionales que quieren
construir rpida y fcilmente proyectos electrnicos.
Con 12Blocks podemos realizar con facilidad:
Crear programas uniendo bloques.
Ejecutar programas en muchos dispositivos diferentes.
Cambiar los parmetros del programa, mientras que este se ejecuta en la
tarjeta gobernando sensores, perifricos, actuadores y dispositivos.
Integrar su proyecto con las aplicaciones de PC como Excel y MathLab .

12Blocks es fcil y divertido, lo suficiente para ser utilizado por un nio de 5 aos, pero es
extensible y lo suficientemente potente como para ser utilizado por profesionales.

Agradecimiento: Agradezco la ayuda y la elaboracin que me ha prestado en este


trabajo el creador de 12Blocks Hanno Sander.
Profesor: Jos Manuel Ruiz Gutirrez
j.m.r.gutierrez@gmail.com
http://josemanuelruizgutierrez.blogspot.com.es/

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

2. Instalacin.
Se descargar 12Blocks desde aqu: http://12blocks.com/download
Se depondr de versiones instalables para Windows, Mac OSX y Linux. Siga las
indicaciones e instrucciones y se podr instalar el software sin problemas.

Ayuda adicional
Estas son algunas de las formas de obtener ayuda cuando la necesita:

12Blocks Ayuda Referencia: haga clic en "Ayuda> Referencia" en 12Blocks


para obtener ayuda sobre el programa y los bloques individuales.
Videos: http://12blocks.com/videos proporciona una lista de los videos.
Foros: http://onerobot.org/forums/ para obtener ayuda de la comunidad en
lnea Sistema de Aprendizaje en Lnea: http://onerobot.org/ols/ utilizar
12Blocks en el aula o para aprender a travs de actividades en lnea.
Pngase en contacto con nosotros directamente aqu:
http://onerobot.org/about/

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3. Ejercicios
3.1. Ejercicio 1: Descripcin de la interfaz 12Blocks
Al iniciar 12Blocks aparecer una pantalla como la de la figura en la que en primer lugar
debemos elegir un dispositivo mediante la seleccin con la oren "Selector Tarjeta" . Si lo
deseamos podemos aadir una categora nueva que no aparezca en las que se presentan por
defecto seleccionando "Custom Configuration" .
Si el dispositivo aparece en la pantalla. Por defecto aparece la opcion de trabajo "New" que
al pulsar en ella se inicializa el entorno en la configuracin seleccionada. En la figura hemos
marcado Arduino Uno.

Una vez seleccionada la tarjeta con la que vamos a trabajar aparece la pantalla de trabajo que
se muestra en la figura siguiente.
La idea ser ir arrastrando y colocando los bloque que aparecen en la parte lateral izquierda
de la pantalla y soltndolas en el rea de trabajo.

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.2. Ejercicio 2: Enviar "Hello World" para Simulado


Terminal.
En este ejercicio comenzar 12Blocks, establecido en el modo de simulador y construiremos
un programa para enviar "Hola Mundo" a la terminal.
Iniciar 12Blocks y utilizar la pantalla de Inicio para seleccionar una actividad de "Nuevo"
para su dispositivo.
Veremos una hoja de trabajo en blanco. Hacemos clic en el selector de modo en la esquina
superior derecha para cambiar el modo.
Cambiar el modo a simulador. Esta forma de trabajo permite la ejecucin del programa sn
conexin a ninguna tarjeta. Recuerde cambiar este modo de nuevo a dispositivos para
ejecutar cdigo en su dispositivo.
En la siguiente imagen vemos como aparece una ventana sobre la que seleccionamos el
modo "Simulator".

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Los programas, en general, deben comenzar con un bloque de inicio "Star". recuerde que
todos los bloques cuya forma superior es triangular son bloques que pueden ser colocados en
el inicio de la aplicacin.
Comenzaremos el programa arrastrando el bloque de inicio "Start" a la hoja de trabajo
sacndolo del grupo de libreras "Control". (Mueve el ratn sobre el bloque "Start" en la
librera "Control" , mantenga pulsado el botn izquierdo del ratn, mover el ratn de nuevo
a la hoja de clculo y suelte el botn del ratn).
Su programa en la hoja de trabajo debe tener este aspecto:

Ahora, es necesario agregar un bloque que enviar el texto al terminal. El bloque de texto de
envo est en la seccin "interface" de la biblioteca. Arrastre el bloque de envo de texto
unindolo al de inicio en la hoja de trabajo. Su programa debe tener este aspecto:

Para ver el texto, tiene que arrastrar un bloque "terminal" en la hoja de trabajo. Haga clic
en Run en la barra de herramientas para ejecutar su programa.

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.3. Ejercicio 3: Matemticas.


Podemos utilizar el "Terminal" para mostrar el resultado de clculos de matemticas
simples:

Tambin puede realizar clculos ms complejos:

Observe que en 12Blocks puede escribir frmulas en regiones amarillas que aceptan
nmeros. Estas frmulas se pueden utilizar los siguientes operadores:
Operator

Meaning

Example

Addition

1+1=2

Multiplication

2*3=6

Division

10/5=2

(...)

Group together

20/(10*2)=1

Modulo (remainder)

5 % 2=1

Algunos dispositivos admiten operadores adicionales que pueden ser utilizados


Otro ejemplo de clculo matemtico
(Funcin calculo_matematico.12b)

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Este programa genera un numero aleatorio de 0 a 10 y de el calcula el cuadrado y tambin


enva el valor a una funcin externa llamada "calcSumUpTo" que recoge el valor en la
variable local de la funcin "f"

10

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.4. Ejercicio 4: Repetir


Estudiemos en este ejercicio las posibilidades inclusin de bucles en nuestros programas.
Estas son las posibilidades de bucles.

Frecuentemente querrs repetir una accin. En 12Blocks esto se hace con uno de los bloques
de repeticin se encuentran en la librera de "control". El siguiente programa enva la
palabra "hi" a los terminales 10 veces antes de enviar "bye". Observe cmo el bloque que
enva "hi" est dentro de la
bloque de repeticin.

A continuacin vemos el uso de la condicin de repeticin estableciendo un rango de valores


entre los que salta con un determinado valor de pasos. Aqu el valor de la variable "n" se
enva a la terminal. Se imprimen los valores pares.

11

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Esta sera la variante de recorrido de mayor a menor en el bucle. Vase que step=-2
El bloque repeat until permite la ejecucin de instrucciones mientras que no se alcance la
condicin

La misma aplicacin pero con valores descendientes.

12

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Seguidamente vemos un ejemplo en el que se generarn 10 impulsos en el PIN11 cuando se


detecte un valor "1" en el PIN4. (Fichero generador_10Impulsos.12b)

13

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.5. Ejercicio 5: Variables.


Las variables se crean para el almacenamiento de datos. Por ejemplo, en el siguiente
programa el valor 42 se almacena en la variable llamada x y posteriormente es enviado al
terminal:

Las variables son tiles por varias razones:


Podemos dar nombres descriptivos a los nmeros para hacer los programas ms
fciles de entender.
La misma variable puede ser utilizado muchas veces, por lo que es nuestro programa
ms fcil de cambiar.
Las variables hacer nuestros programas flexibles, ya que pueden tomar diferentes
valores.
En el siguiente programa vamos a utilizar la variable "sum" que acumular la suma de los
valores de 1 a 10 en saltos de 1, es decir el programa suma los diez primeros nmeros y
asocia el resultado a la variable "sum"

Tambin se puede utilizar variables en las frmulas:


Area=Base*Altura

14

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.6. Ejercicio 6: Funcin When


Veamos a continuacin algunos ejemplos que utilizan el potente bloque de funcin "when".
En el primer caso vemos como el bloque "when" testea el estado del PIN4 y si este vale 1 se
ejecuta el encendido y apagado del PIN6. En el otro caso si el valor del PIN7 es 1 se
enciende y apaga el PIN10.
La funcin viene a ser un especie de condicional pero que puede estar desligado de la
funcin" run" y se pueden utilizar varios bloques con distintas condiciones
(Fichero Bloque_when.12b)

Flash con la funcin When


En este ejemplo vemos la utilizacin de dos bloques "when" que se llama uno al otro
mediante la variable "a". Cuando a=1 se activa un bloque y cuando a=0 se activa el otro, de
esta manera se consigue el flash. esta funcin puede servir para generar una seal de reloj
(Fichero Bloque_WHEN_Flash.12b)

15

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.7. Ejercicio 7: Bloques Condicionales


Este tipo de bloques es muy importante a la hora de implementar aplicaciones de control con
Arduino. Su funcin bsica es testear una "condicin" que podemos establecer y en funcin
del resultado de esta comprobacin se ejecutar un conjunto de operaciones.
Condicional Simple
Este es la estructura mas sencilla. Se plantea una condicin y una secuencia de acciones.
(Fichero condional_simple.12b)
En el caso se testea el estado de la entrada digital PIN4 y si esta vale "1" se pone la salida
PIN6 en modo intermitente mediante el bloque "toggle pin". El tiempo de espera entre
encendido y apagado se recoge en la entrada A0 (Pin analgico cuyo valor cambia de 0 a
1023)

Condicional doble.
Es posible aadir al bloque "if" estados de ejecucin cuando no se cumpla la condicin (es el
caso de la opcin "else" en los condicionales clsicos), para ello basta pulsar en el signo "+"
del bloque para que aparezca un nuevo estamento. (Fichero condional_doble.12b)

En este caso pondremos en la parte "else" los bloques que pongan a "0" el PIN11 y en modo
intermitente el PIN10.
En este caso si ponemos a "1" el PIN4 se enciende y apaga la salida PIN10 y se apaga la
salida PIN11 y si no (cuando el valor en el PIN4 es 0" se apaga la salida PIN10 y se pone
en intermitencia la salida PIN11.
16

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

17

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.8. Ejercicio 8: Bloque Switch


Este bloque es muy potente y permite la inclusin en nuestro programa de "seleccin" de
acciones en funcin del estado de una variable, algo as como la opcin "menu" de un
programa. Su estructura esta constituida por una serie de opciones en funcin del valor de
una variable. (Fichero contador_con_Bloque_Switch.12b)

En el ejemplo se testea el valor de "x" y en funcin de este se activan unas salidas digitales.
Se establece un contador que incremente la variable x y se pone a cero (para realizar ciclos)
cuando el valor es igual a 4. Se establece un retardo para percibir el encendido y apagado de
las salidas. El ejemplo muestra los cdigos de un contador binario de 2 bits.
Valor de x

PIN9

PIN6

18

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

19

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.9. Ejercicio 9: Funciones lgicas bsicas.


En ocasiones es preciso testear el estado de una combinacin de valores digitales asociados a
una serie de pines de entrada Para esto se recurre a un bloque de funcin condicional "if" en
cuya parte de condicin se escribe la ecuacin lgica utilizando las partculas "and" y "or"
para las funciones correspondientes. (Fichero funciones_logicas_basicas.12b)
Se han definido tres variables de entrada: A=PIN4, B=PIN7 y C=PIN8 y los pines de salida
digital PIN), PIN9 y PIN10 que responden a la combinacin de otras tantas funciones
lgicas.
En la tabla se muestran las funciones.
A

PIN6

PIN9

PIN10

PIN11

A or B

A and B

A and B and C

A(negada) and B and C

20

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

21

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.10. Ejercicio 10: Lectura y trazado de una seal analgica


En ete ejemplo leeremos la seal analgica de entrada A0 y la asociaremos a una variable
que llamaremos "x". Hacemos un retardo para no colapsar la lectura y utilizaremos los
bloques auxiliares de visualizacin: "value viewer" y "graph". (Fichero
lectura_trazado_seal_analogica.12b).

A continuacin se muestra el programa

22

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.11. Ejercicio 11: Salida analgica PWM


Para gobernar una salida en forma de seal PWM (analgica) se recurre a la funcin
"analog out..". En este ejercicio se establece un bucle de repeticin que hace variar una
variable llamada "n" entre el valor 0 y 255 (rango para las seal PWM) con un retardo en
el barrido del valor de 50ms. El valor "n" se entrega en el bloque de salida y de ese modo
conseguimos que el led conectado en el PIN9 se active en modo encendido, variando la
intensidad de la luz. (Fichero salidaPWM.12b)

23

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

3.12. Ejercicio 12: Manejo del Terminal.


En este ejercicio se trata de enviar al bloque terminal una serie de valores, textos, nmeros y
valor de variables. (Fichero terminal.12b)
Las funciones usadas son:
Enva una cadena de texto (string)

Enva comandos variados a la escritura en el terminal

Cambia color de la letra.


Sita el cursor de escritura en la posicin indicada

Enva el valor de una variable al terminal

24

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

4. Libreras

25

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

26

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5. PRACTICAS
5.1. Intermitente
Se trata de activar en modo intermitente una salida de Arduino. (Fichero blink2.12b)
La salida que queremos gobernar ser el PIN6 y el tiempo entre encendido y apagado ser
de 1 seg.
Se utilizarn dos tipos de bloques: toggle pin
Se han utilizado bloques de tipo
estos bloques no afectan al cdigo.

El programa comienza con el bloque


bloque

y wait
para comentar las instrucciones del programa,

start y el programa se incluye dentro de un

repeat que es el bucle del programa

La instruccin toggle pin se encara de activar y desactivar una salida digital con el intervalo
que le pongamos en el bloque wait

27

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Blink con impresin de valor en terminal.


En este ejemplo se ha implementado una funcin Blink pero se ha aadido una variable
que cuenta el numero de encendidos y apagados a la que llamamos "x". El valor de esta
variable los imprimiremos por el "Terminal". (Fichero blink3_con variable-x.12b)

Blink utilizando una funcin.


Este ejemplo implementa una funcin Blink a la que se invoca desde el programa principal
(funcin "blink"). La funcin se invoca pasando a la vez dos parmetros de entrada a que es
el nmero de terminal y t que es el tiempo de encendido y apagado. (Fichero
blink5_funcin_Blink.12b)

28

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.2. Intermitente con variacin de tiempo


Una vez que hemos realizado la prctica anterior, vamos a continuar con las seales
analgicas. Esta vez la propuesta consiste en realizar un Intermitente pero con el tiempo
variable. Se trata de que el valor de temporizacin se recoja de una entrada analgica,
pongamos de la entrada A0. (Fichero blink4_tiempo_variable_A0.12b)
en esta caso lo que cambiamos es que en lugar de poner un numero constante en el bloque
wait pondremos el valor que obtenemos al leer el canal A0
instruccin de la forma siguiente.

quedando la

Esta sera la aplicacin.

29

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.3. Monoestables
Con esta prctica, que consta de dos versiones, queremos probar la emulacin de un
Monoestable, es decir realizar la temporizacin de la activacin o desactivacin de una
salida digital durante un tiempo que podemos establecer.
Vamos a trabajar con los pines siguientes:
PIN 4 Entrada digital
PIN 6 Salida digital
Veremos los siguientes casos...
Monoestable activado por flaco de subida.
(Fichero monoestable_flanco_subida.12b)

Se trata de testear el estado de un PIN digital definido como entrada haciendo que el
cambio sea activo en el flanco de subida (cuando pasa de 0 a 1).
Lo que hacemos es utilizar un bloque condicional que estar pendiente en todo

momento de testear si el PIN 4 se activa (Pasa de 0 a 1)


. Si se
cumple la condicin, lo que hacemos es activar la salida PIN 6 durante un tiempo
(2000 ms) pasando luego al estado estable de reposo ("0").
La salid PIN6 se activa y desactiva con los bloques de funcin siguientes:

30

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Activado por flanco de bajada


(Fichero monoestable_flanco_bajada.12b)
En el caso de querer realizar la activacin de la salida en modo monoestable con
flanco de subida (paso de 1 a 0), lo que haremos ser testear el valor del PIN 4, pero
teniendo en cuenta que en reposo debe estar pulsado ("1") y al soltar temporalmente
es cuando se activar el monoestable. Observa el bloque "no" que niega el valor del
estado ledo del PIN.

La idea en esta caso es testear el valor "0" de la entrada PIN4 para lo cual se debe
colocar como condicin en el bloque "if"

31

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Monoestable de tiempo variable.


(Fichero monoestable_flanco_subida_tiempo_variable_canal_A0.12b)
La propuesta que hacemos a continuacin es hacer que el tiempo de activacin del
monoestable sea consignada mediante la entrada analgica A0. En este caso creamos
una variable "tiempo" que se asocia al canal analgico A0. Posteriormente en el
bloque "wait [ms]" colocamos de valor la variable "tiempo"

Nota: si colocamos de nombre a la variable "t" nos dar un error dado que este
carcter debe estar reservado para el programa

32

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

33

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.4. Activacin de una salida en modo biestable


Se trata de realizar el gobierno de una salida PIN6 con una entrada PIN4 de tal manera que
este sea en modo biestable. Al pulsar, cambia el estado de la salida. (Fichero biestable.12b)
Con esta actividad vamos a abordar el tema de la emulacin de un biestable de tal manera
que podamos gobernar una salida digital PIN6 mediante el estado de una entrada digital
PIN4. Veremos dos casos: en el primer caso, cuando la activacin de la salida se realiza
mediante un flanco de subida de la entrada -PIN4 pasa de "0" a "1"-, y en el segundo caso,
cuando la activacin se lleva a cabo mediante un flanco de bajada -PIN4 pasa de "1" a "0"Por flanco de subida
En este montaje se define una variable que llamamos por ejemplo "estado", que
almacenar el estado del biestable y que ser cambiada de estado siempre que
detectemos que la entrada digital PIN4 pase a valor "1" (flanco de subida). Vemos
que hay un condicional para el test de la entrada y dentro otro condicional doble que
testear el valor de la variable estado, cambindola a "0" si est en "1" y en caso
contrario la cambiar a "1". A la vez cambiar el valor que enva al PIN digital de
salida PIN6. Se coloca el final una Espera de 200 ms para evitar los rebotes en la
manipulacin del botn de entrada de PIN4.

34

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Flanco de bajada.
Este es el montaje similar al anterior pero en este caso la activacin es por flanco de bajada.
(Fichero biestable_Flanco_bajada.12b)

35

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

BIESTABLE TIPO RS
En este caso se implemanta un biestable tipo RS en el que los pines de activacion son: PIN4
(set) y PIN7 (reset) siendo la alidas los pines PIN6 (Q) y PIN9 (Q negada).
(Fichero biestable_RS.12b)

36

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.5. Contadores
Vamos a contar impulsos con Arduino. (Fichero contador1.12b)
Habilitaremos el PIN4 como entrada de impulsos de tal manera que una variable se ver
incrementada cada vez que pulsemos un botn colocado en este pin.
Queremos tambin que cada vez que se produzca una pulsacin en el PIN de entrada PIN4,
se active temporalmente (200 ms.) una salida PIN6 para indicar de manera luminosa que el
impulso que ha entrado.
Definimos la variable "i" que almacena el numero de impulso recogidos. Pero es importante
que esta variable se defina como global, no local. Al definirla, la ponemos en "0". Se testea
el valor del PIN4 de entrada de impulsos y, si est en "1", se incremente la variable "i".

37

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

A continuacin se muestra una imagen que permite ver como se monitoriza el valor de la
variable de cuenta "i":
Contador con puesta a cero
(Fichero contador_reset.12b)
Ahora vamos implementar la posibilidad de poner a "0" el contador con el PIN digital de
entrada PIN7. Lo que haremos es poner i=0 cuando se detecta que el estado del PIN7 es "1".

38

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Activacin de una salida cuando el contador llega a un valor.


(Fichero contador10.12b)
En este ejemplo se trata de que la salida digital PIN11 se active durante 3 seg. cuando el
valor de la variable de cuenta "i" alcanza 11; es decir, contamos 10 empezando por 1 (no
contamos el 0, por eso designamos la variable i con el valor de inicio i=1).

39

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.6. Generador de impulsos de duracin variable.


Con esta aplicacin vamos utilizar dos conceptos nuevos en la programacin: La utilizacin
de una funcin a la que llamaremos "Pulsos" . (Fichero generador_pulsos.12b)

Se trata de testear el estado de la entrada digital PIN4 y en caso de activarse queremos


generar 4 impulsos en el pin de salida PIN6. La duracin de estos impulsos se podr ajustar
mediante el valor de entrada analgica del canal A0.

En el "Programa Principal (loop)" se define la variable tiempo "tiempo" que asociamos al


valor ledo en el canal analgico de entrada A0. Seguidamente se lee el estado de la variable
de entrada digital PIN4. Si el valor de PIN4=1 entonces se ejecuta la funcin "Pulsos".
La funcin "Pulsos" se encarga de generar un numero de pulsos (4)
40

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.7. Regulador de Intensidad luminosa.


En este ejemplo se va a implementar un sencillo regulador de Intensidad Luminosa en un
PIN digital configurada como PWM (salida analgica) PIN6. (Fichero regulador_luz.12b)

Se trata de enviar un valor "Intensidad" al pin, haciendo uso de la instruccin "Escribir en


PIN digital... el valor analgico..."
Se utilizarn dos pulsadores conectados a otras tantas entradas de seal digitales.
PIN4 Aumenta Intensidad
PIN7 Disminuye Intensidad

41

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

En el programa hay dos bloques condicionales tipo "Si.. ejecutar" "que testean el estado de
los pulsadores conectados en los pines PIN4 y PIN7. Si se cumple la condicin de estos
bloques condicionales se incrementa (PIN4) o se decrementa (PIN7) el valor de la variable
"Intensidad". Si se supera el valor de 255, la variable no debe pasar de este valor. Para ello
se pone un bucle de condicin que se encarga de esta acotacin de nivel mximo. Se coloca
otro condicional para detectar valores por debajo de 0 en cuyo caso se bloque el valor de
Intensidad a 0
Se ha dispuesto tambin la opcin de imprimir el valor de la variable Intensidad por el
puerto USB.
A continuacin se muestra la ventana de monitorizacin del valor de la Intensidad.

42

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.8. Sistema Combinacional.


Los miembros de un jurado en un programa musical son: 3 Vocales (A,B,C) y un Juez (D) Cada uno
de ellos dispone de un interruptor para emitir su voto (SI PASA=Interruptor cerrado, NO
PASA=Interruptor abierto). Mediante una lmpara (Z) se emite el veredicto (PASA=encendida, NO
PASA=apagada) para pasar a la siguiente fase del concurso. La condicin para que el concursante
pase es: "El concursante pasar a la siguiente fase si obtiene 3 o ms votos "SI", y en caso de que
sean dos los votos SI emitidos, si uno de ellos es del Juez, tambin pasa el concursante". (Fichero

ciruito_combinacional.12b)
La siguiente imagen muestra la ecuacin y el circuito que nosotros implementaremos en
Arduino de acuerdo a las siguientes designaciones de pines:

Pulsadores de Entrada: A=PIN4, B=PIN7, C=PIN8, D=PIN12

Lmpara de salida: L=PIN6

43

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

El programa bsicamente empieza por la definicin de las variables A,B,C,D y L. La


funcin es la parte de condicin del bloque condicional "Si..". Las funciones lgicas que se
utilizan son las que figuran en la librera "Lgica".
Estas se pueden encadenar de la forma que queramos. En la siguiente figura se muestra la
forma de crear la funcin L:

Si la funcin devuelve "1", entonces se cumple la condicin y se activa la salida L que es el


PIN6. Si no se cumple se desactiva la salida PIN6.

44

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.9. Medida de Luz con activacin de salida.


Vamos a realizar una aplicacin (Fichero medida_luz1.12b) en la que leeremos el valor de
un canal analgico A0 de la tarjeta Arduino, en el que tenemos conectada una LDR. Lo
mostraremos a travs del puerto USB en la pantalla de monitorizacin y adems
gobernaremos una salida digital en funcin del valor ledo, de tal manera que:
Si A0>500 Entonces Salida PIN6=1
El proceso es el siguiente:

Definimos la variable hacindolo con la opcin de "Variable Local" y la asociamos a


la lectura del PIN analgico A0.

Seguidamente imprimimos el valor de la variable, delante de la cual ponemos el


texto "Luz=" unido a la variable, con la ayuda del bloque "crear texto con.."

Seguidamente situamos el condicional "Si.. ejecutar...de lo contrario" en el que


establecemos como condicin: Si A0>500 Entonces Salida PIN6=1.

En caso de cumplirse la condicin, activamos el PIN digital 6 (estado ALTO); en


caso contrario, desactivamos el PIN digital 6 (estado BAJO).

Este sera el algoritmo:

45

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Mapeado del valor LUZ


En este caso lo que queremos es que el valor ledo en A0, en lugar de darse en el margen 01023, se d en el margen 0-100; es decir, queremos "mapear el valor". Para ello, lo que
hacemos es utilizar la funcin "Mapear". En esta caso la condicin para la activacin de la
salida PIN6 se debe cambiar a: Si A0>50. Entonces Salida PIN6=1. (Fichero
medida_luz_mapeado.12b)

46

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.10. Medida de luz y deteccin de niveles.


Con este ejemplo vamos a realizar la medida de la cantidad de luz a travs de un sensor que
colocaremos en el canal analgico A2 realizando hasta tres comparaciones con la
instruccin IF, de tal manera que podamos detectar tres niveles de iluminacin. (Fichero
medida_luz_3_niveles.12b)
Nos vamos a basar en el ejemplo anterior y slo debemos incluir tres condicionales, uno
para cada nivel. Pensemos que ahora la condicin debe ser ">=" y esto requiere modificar el
bloque de comparacin.
Fijaremos el escalado de la seal leda entre 0 y 100. Tambin pondremos en el puerto serie
el valor ledo. Estas son las condiciones de funcionamiento.
Condicin

Estado PIN9 Estado PIN10

Estado PIN11

A2 >= 40

A2 >= 60

A2 >= 75

47

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.11. Secuenciador
En esta prctica vamos a realizar secuenciadores.
Un secuenciador es un circuito que activa y desactiva salidas de un modo secuencial
estableciendo un tiempo entre una secuencia y la siguiente o saltando de una a la otra cuando
se ordena mediante un pulsador de entrada. (Fichero secuenciador1.12b)
Secuenciador1
Vamos a realizar un primer ejemplo en el que la secuencia que deseamos realizar ser con 4
salidas digitales: PIN6, PIN9, PIN10, PIN11.
Con el PIN4 actuando de entrada activaremos la secuencia mediante un condicional "Si".
Creamos una variable que llamamos "t" que representa el tiempo entre cada estado de la
secuencia y le daremos un valor t=200, lo que significa que cada 0.2 seg. cambia el estado.
Los estados se disearn de acuerdo a la tabla siguiente:
Estado PIN6 PIN9 PIN10 PIN11
A0

A1

A2

A3

A4

Tiempo entre estados t=200ms.

Cada cdigo de secuencia se va a integrar en una funcin, de tal manera que estableceremos
las cinco funciones: a0, a1, a2, a3 y a4.
a0=0000, a1=1000, a2=0100, a3=0010, a4=0001

Ejemplo de la funcin "a0" y "a4"


48

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Estas funciones sern invocadas desde el programa principal ejecutndose con un tiempo de
retardo "t".
El proceso consistir en la ejecucin en secuencia (una detrs de la otra) de estas funciones
cuando el valor del PIN6 sea "1". Entre funcin y funcin se establecer un retardo de
tiempo "Esperar t"

Secuenciador2
(Fichero secuenciador2.12b)
Ahora, lo que queremos aadir es la posibilidad de poner a cero la secuencia, ya que una vez
terminada se queda siempre en el estado a4.
Para ello utilizaremos el PIN7 que actuar como entrada (conectado a un botn). Si el valor
de la entrada PIN7 es "1" se pasar al estado a0=0000 (las cuatro salidas en "0".)
Este sera el programa:

49

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Secuenciador3
(Fichero secuenciador3.12b)
Lo que deseamos ahora es avanzar la secuencia de modo manual (sin tiempo "t") cada vez
que pulsemos el pulsador conectado en el PIN4, y que adems pongamos a cero con el
pulsador conectado al PIN7.
En este caso creamos una variable llamada "estado" que indicar en qu numero de
secuencia nos encontramos. Esta variable se ver incrementada cada vez que pulsemos en el
botn del PIN4, y si se supera el valor 4 se pondr a cero. Se ha colocado un retardo para
evitar los rebotes en el pulsador.
Con el PIN7 ponemos a "cero" el sistema dejando la combinacin de salida en a0=0000.

50

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Seguidamente se colocarn condicionales que se activarn en funcin del valor de la


variable "estado.
Se colocaran hasta 5 condicionales "si" uno para cada estado (desde 0 a 4).

51

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.12. Semforo.
En este ejemplo mostramos la posibilidad de realizar un semforo. (Fichero semforo1.12b)
Las salidas sern las siguientes: PIN11=rojo, PIN10=mbar y PIN9=verde.
Los tiempos ente estados sern: rojoon=700 ms, ambaron=500 ms, verdeon=700 ms.
Se dispondr de un botn en el pin digital PIN4 que, si mantenemos pulsado, ejecutar la
secuencia normal del semforo; y si soltamos, se pondr en modo intermitente del mbar.

Otra forma de realizar el semforo.


Una modificacin del montaje anterior podra ser que la activacin de la secuencia normal se
lleve a cabo con un interruptor colocado en el PIN4, de tal manea que si este eta en valor "1"
se ejecute la secuencia normal y si est en "0" se ponga en mbar intermitente.
(Fichero semforo2.12b)

52

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Semforo con mbar intermitente


Esta es una variacin sobre el ejemplo anterior en la que se ha implementado la opcin de
quedar el semforo en modo intermitente. Para que se quede la lmpara "mbar" en
intermitente se debe cumplir que el PIN4 = 0.
(Fichero semforo3.12b)

53

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

54

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.13. Zumbador.
Activacin de sonido.
(Fichero sonido1.12b)
En este montaje se trata de leer el valor de una entrada digital PIN4 y, en funcin del valor
ledo, activar o no el Altavoz. Es la funcin Zumbador de la librera "zum bloqs" que
deber emitir un tono "DO" con una duracin de 1seg.

55

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.14. Control de Servo


Realizaremos unos sencillos montajes en los que gobernaremos un servo. (Fichero
servo1.12b)

Gobierno de un servo angular.


En este caso deseamos posicionar el eje de un servo en un rango angular de 0 a 180
Deseamos conectar el servo en el PIN3 y queremos que ejecute la siguiente secuencia
angular:
Posicin Angulo Tiempo
1

3000

90

3000

180

3000

Gobierno de un servo angular mediante una entrada analgica.


(Fichero servo2.12b)
Vamos a gobernar el servo angular mediante una entrada analgica, canal A0 de Arduino.
Esta seal se asocia a la variable "Control", que es la que gobernar la posicin del servo.
Imprimiremos la variable para verla.
56

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

Como el valor mximo de la seal de gobierno "Control" ser 100, se debe realizar el
mapeado de la seal recogida en el PIN A0 de 0-1023 a 0-100 mediante el bloque de funcin
"Mapear"

57

12Blocks + Arduino. Gua y Ejercicios

Jos Manuel Ruiz Gutirrez

5.15. Codificador 4/2.


Este montaje que propongo sirve para emular el comportamiento de un codificador de 4
entradas a 2 salidas binarias. (Fichero codificador4-2.12b)
Se seleccionan los pines PIN4, PIN7, PIN8 y PIN12 como entradas y los pines PIN6 y
PIN9 como salidas. Se trata de implementar la siguiente tabla de verdad:

La implementacin es muy sencilla: se definen las variables de entrada y salida para cada
uno de los pines y a continuacin se establecen tantas funciones condicionales "Si" como
cdigos tenemos que sacar (4 cdigos); y para cada una se activan o desactivan los pines de
salida (S0 y S1).

Jos Manuel Ruiz Gutirrez


Junio 2015. Ver:1
Este trabajo est bajo licencia Creative Commons Attribution 3.0 Unported License)
58

You might also like