Upload
betetatajo
View
231
Download
0
Embed Size (px)
Citation preview
8/18/2019 Manual 12Blocks
1/58
12Blocks + ARDUINO
GUÍA Y EJERCICIOS
José Manuel Ruiz GutiérrezV.1.0 Junio 2015
8/18/2019 Manual 12Blocks
2/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
2
INDICE
1. Introducción
2. Instalación3. Ejercicios.3.1. Ejercicio 1: Descripción de la interfaz 12Blocks3.2. Ejercicio 2: Enviar "Hello World" para Simulado Terminal3.3. Ejercicio 3: Matemáticas3.4. Ejercicio 4: Repetir3.5. Ejercicio 5: Variables3.6. Ejercicio 6: Función When3.7. Ejercicio 7: Bloques Condicionales
3.8. Ejercicio 8: Bloque Switch3.9. Ejercicio 9: Funciones lógicas básicas.3.10. Ejercicio 10: Lectura y trazado de una señal analógica3.11. Ejercicio 11: Salida analógica PWM3.12. Ejercicio 12: Manejo del Terminal.
4. Librerías5. Prácticas
5.1. Intermitente5.2. Intermitente con variación de tiempo5.3. Monoestables5.4. Activación de una salida en modo biestable (bajada y Subida)5.5. Contadores5.6. Generador de impulsos de duración variable5.7. Regulador de Intensidad luminosa5.8. Sistema Combinacional5.9. Medida de luz con activación de salida5.10. Medida de luz y detección de niveles5.11. Secuenciador5.12. Semáforo
5.13. Zumbador5.14. Control de servo5.15. Codificador 4/2.
José Manuel Ruiz GutiérrezJunio 2015. Ver:1
Este trabajo está bajo licencia Creative Commons Attribution 3.0 Unported License)
8/18/2019 Manual 12Blocks
3/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
3
1. Introducción.
Programación con 12Blocks
12Blocks es un entorno intuitivo y potente para la programación de microcontroladorespopulares y robots. Es un lenguaje visual que hace que la programación sea tan simple comoarrastrar y soltar. Cientos de bloques soportan sus librerías, desde la lectura de sensoreshasta la generación de sonidos, siendo también muy fácil importar bibliotecas de código paracrear nuevos bloques.
12Blocks ofrece interesantes herramientas de depuración gráfica y tutoriales guiados paraque programadores principiantes y expertos puedan realizar sus aplicaciones con éxito.
12Blocks es ideal para el uso en el aula, estudiantes, aficionados y profesionales que quierenconstruir rápida y fácilmente proyectos electrónicos.
Con 12Blocks podemos realizar con facilidad:
• Crear programas uniendo bloques.
• Ejecutar programas en muchos dispositivos diferentes.
• Cambiar los parámetros del programa, mientras que este se ejecuta en la
tarjeta gobernando sensores, periféricos, actuadores y dispositivos.
• Integrar su proyecto con las aplicaciones de PC como Excel y MathLab .
12Blocks es fácil y divertido, lo suficiente para ser utilizado por un niño de 5 años, pero esextensible y lo suficientemente potente como para ser utilizado por profesionales.
Agradecimiento: Agradezco la ayuda y la elaboración que me ha prestado en estetrabajo el creador de 12Blocks Hanno Sander .
Profesor: José Manuel Ruiz Gutiérrez
http://josemanuelruizgutierrez.blogspot.com.es/
8/18/2019 Manual 12Blocks
4/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
4
2. Instalación.
Se descargará 12Blocks desde aquí: http://12blocks.com/download
Se depondrá de versiones instalables para Windows, Mac OSX y Linux. Siga lasindicaciones 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 12Blockspara 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 enlínea Sistema de Aprendizaje en Línea: http://onerobot.org/ols/ utilizar12Blocks en el aula o para aprender a través de actividades en línea.
• Póngase en contacto con nosotros directamente aquí:http://onerobot.org/about/
8/18/2019 Manual 12Blocks
5/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
5
3. Ejercicios
3.1. Ejercicio 1: Descripción de la interfaz 12Blocks
Al iniciar 12Blocks aparecerá una pantalla como la de la figura en la que en primer lugardebemos elegir un dispositivo mediante la selección con la oren "Selector Tarjeta" . Si lodeseamos podemos añadir una categoría nueva que no aparezca en las que se presentan pordefecto seleccionando "Custom Configuration" .
Si el dispositivo aparece en la pantalla. Por defecto aparece la opcion de trabajo "New" queal pulsar en ella se inicializa el entorno en la configuración seleccionada. En la figura hemosmarcado Arduino Uno.
Una vez seleccionada la tarjeta con la que vamos a trabajar aparece la pantalla de trabajo quese muestra en la figura siguiente.
La idea será ir arrastrando y colocando los bloque que aparecen en la parte lateral izquierdade la pantalla y soltándolas en el área de trabajo.
8/18/2019 Manual 12Blocks
6/58
8/18/2019 Manual 12Blocks
7/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
7
3.2. Ejercicio 2: Enviar "Hello World" para SimuladoTerminal.
En este ejercicio comenzará 12Blocks, establecido en el modo de simulador y construiremosun 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 esquinasuperior derecha para cambiar el modo.
Cambiar el modo a simulador. Esta forma de trabajo permite la ejecución del programa sn
conexión a ninguna tarjeta. Recuerde cambiar este modo de nuevo a dispositivos paraejecutar código en su dispositivo.
En la siguiente imagen vemos como aparece una ventana sobre la que seleccionamos elmodo "Simulator".
8/18/2019 Manual 12Blocks
8/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
8
Los programas, en general, deben comenzar con un bloque de inicio "Star". recuerde quetodos los bloques cuya forma superior es triangular son bloques que pueden ser colocados enel inicio de la aplicación.
Comenzaremos el programa arrastrando el bloque de inicio "Start" a la hoja de trabajosacándolo del grupo de librerías "Control". (Mueve el ratón sobre el bloque "Start" en lalibrería "Control" , mantenga pulsado el botón izquierdo del ratón, mover el ratón de nuevoa la hoja de cálculo y suelte el botón del ratón).
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 deenvío está en la sección "interface" de la biblioteca. Arrastre el bloque de envío de textouniéndolo 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 clicen Run en la barra de herramientas para ejecutar su programa.
8/18/2019 Manual 12Blocks
9/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
9
3.3. Ejercicio 3: Matemáticas.
Podemos utilizar el "Terminal" para mostrar el resultado de cálculos de matemáticas
simples:
También puede realizar cálculos más complejos:
Observe que en 12Blocks puede escribir fórmulas en regiones amarillas que aceptannúmeros. Estas fórmulas 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 cálculo matemático
(Función calculo_matematico.12b)
8/18/2019 Manual 12Blocks
10/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
10
Este programa genera un numero aleatorio de 0 a 10 y de el calcula el cuadrado y tambiénenvía el valor a una función externa llamada "calcSumUpTo" que recoge el valor en lavariable local de la función "f "
8/18/2019 Manual 12Blocks
11/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
11
3.4. Ejercicio 4: Repetir
Estudiemos en este ejercicio las posibilidades inclusión de bucles en nuestros programas.
Estas son las posibilidades de bucles.
Frecuentemente querrás repetir una acción. En 12Blocks esto se hace con uno de los bloquesde repetición se encuentran en la librería de "control". El siguiente programa envía lapalabra "hi" a los terminales 10 veces antes de enviar "bye". Observe cómo el bloque queenvía "hi" está dentro de labloque de repetición.
A continuación vemos el uso de la condición de repetición estableciendo un rango de valoresentre los que salta con un determinado valor de pasos. Aquí el valor de la variable "n" seenvía a la terminal. Se imprimen los valores pares.
8/18/2019 Manual 12Blocks
12/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
12
Esta sería la variante de recorrido de mayor a menor en el bucle. Véase que step=-2
El bloque repeat until permite la ejecución de instrucciones mientras que no se alcance lacondición
La misma aplicación pero con valores descendientes.
8/18/2019 Manual 12Blocks
13/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
13
Seguidamente vemos un ejemplo en el que se generarán 10 impulsos en el PIN11 cuando sedetecte un valor "1" en el PIN4. (Fichero generador_10Impulsos.12b)
8/18/2019 Manual 12Blocks
14/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
14
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 alterminal:
Las variables son útiles por varias razones:
• Podemos dar nombres descriptivos a los números para hacer los programas másfáciles de entender.
• La misma variable puede ser utilizado muchas veces, por lo que es nuestro programamás fácil de cambiar.
• Las variables hacer nuestros programas flexibles, ya que pueden tomar diferentesvalores.
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 números yasocia el resultado a la variable "sum"
También se puede utilizar variables en las fórmulas:
Area=Base*Altura
8/18/2019 Manual 12Blocks
15/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
15
3.6. Ejercicio 6: Función When
Veamos a continuación algunos ejemplos que utilizan el potente bloque de función "when".
En el primer caso vemos como el bloque "when" testea el estado del PIN4 y si este vale 1 seejecuta el encendido y apagado del PIN6. En el otro caso si el valor del PIN7 es 1 seenciende y apaga el PIN10.
La función viene a ser un especie de condicional pero que puede estar desligado de lafunción" run" y se pueden utilizar varios bloques con distintas condiciones
(Fichero Bloque_when.12b)
Flash con la función When
En este ejemplo vemos la utilización de dos bloques "when" que se llama uno al otromediante la variable "a". Cuando a=1 se activa un bloque y cuando a=0 se activa el otro, deesta manera se consigue el flash. esta función puede servir para generar una señal de reloj
(Fichero Bloque_WHEN_Flash.12b)
8/18/2019 Manual 12Blocks
16/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
16
3.7. Ejercicio 7: Bloques Condicionales
Este tipo de bloques es muy importante a la hora de implementar aplicaciones de control con
Arduino. Su función básica es testear una "condición" que podemos establecer y en funcióndel resultado de esta comprobación se ejecutar un conjunto de operaciones.
Condicional Simple
Este es la estructura mas sencilla. Se plantea una condición 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 salidaPIN6 en modo intermitente mediante el bloque "toggle pin". El tiempo de espera entreencendido y apagado se recoge en la entrada A0 (Pin analógico cuyo valor cambia de 0 a
1023)
Condicional doble.
Es posible añadir al bloque "if " estados de ejecución cuando no se cumpla la condición (es elcaso de la opción "else" en los condicionales clásicos), 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 modointermitente el PIN10.
En este caso si ponemos a "1" el PIN4 se enciende y apaga la salida PIN10 y se apaga lasalida 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.
8/18/2019 Manual 12Blocks
17/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
17
8/18/2019 Manual 12Blocks
18/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
18
3.8. Ejercicio 8: Bloque Switch
Este bloque es muy potente y permite la inclusión en nuestro programa de "selección" de
acciones en función del estado de una variable, algo así como la opción "menu" de unprograma. Su estructura esta constituida por una serie de opciones en función del valor deuna variable. (Fichero contador_con_Bloque_Switch.12b)
En el ejemplo se testea el valor de "x" y en función 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 delas salidas. El ejemplo muestra los códigos de un contador binario de 2 bits.
Valor de x PIN9 PIN6
0 0 0
1 0 1
2 1 0
3 1 1
8/18/2019 Manual 12Blocks
19/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
19
8/18/2019 Manual 12Blocks
20/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
20
3.9. Ejercicio 9: Funciones lógicas básicas.
En ocasiones es preciso testear el estado de una combinación de valores digitales asociados a
una serie de pines de entrada Para esto se recurre a un bloque de función condicional "if " encuya parte de condición se escribe la ecuación lógica utilizando las partículas "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 salidadigital PIN), PIN9 y PIN10 que responden a la combinación de otras tantas funcioneslógicas.
En la tabla se muestran las funciones.
A B C PIN6
A or B
PIN9
A and B
PIN10
A and B and C
PIN11
A(negada) and B and C
0 0 0 0 0 0 0
0 0 1 0 0 0 0
0 1 0 1 0 0 0
0 1 1 1 0 0 1
1 0 0 1 0 0 01 0 1 1 0 0 0
1 1 0 1 1 0 0
1 1 1 1 1 1 0
8/18/2019 Manual 12Blocks
21/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
21
8/18/2019 Manual 12Blocks
22/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
22
3.10. Ejercicio 10: Lectura y trazado de una señal analógica
En ete ejemplo leeremos la señal analógica de entrada A0 y la asociaremos a una variable
que llamaremos "x". Hacemos un retardo para no colapsar la lectura y utilizaremos losbloques auxiliares de visualización: "value viewer" y "graph". (Ficherolectura_trazado_señal_analogica.12b ).
A continuación se muestra el programa
8/18/2019 Manual 12Blocks
23/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
23
3.11. Ejercicio 11: Salida analógica PWM
Para gobernar una salida en forma de señal PWM (analógica) se recurre a la función
"analog out..". En este ejercicio se establece un bucle de repetición que hace variar unavariable llamada "n" entre el valor 0 y 255 (rango para las señal PWM) con un retardo enel barrido del valor de 50ms. El valor "n" se entrega en el bloque de salida y de ese modoconseguimos que el led conectado en el PIN9 se active en modo encendido, variando laintensidad de la luz. (Fichero salidaPWM.12b)
8/18/2019 Manual 12Blocks
24/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
24
3.12. Ejercicio 12: Manejo del Terminal.
En este ejercicio se trata de enviar al bloque terminal una serie de valores, textos, números y
valor de variables. (Fichero terminal.12b)Las funciones usadas son:
Envía una cadena de texto (string)
Envía comandos variados a la escritura en el terminal
Cambia color de la letra.
Sitúa el cursor de escritura en la posición indicada
Envía el valor de una variable al terminal
8/18/2019 Manual 12Blocks
25/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
25
4. Librerías
8/18/2019 Manual 12Blocks
26/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
26
8/18/2019 Manual 12Blocks
27/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
27
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 utilizarán dos tipos de bloques: toggle pin y wait
Se han utilizado bloques de tipo para comentar las instrucciones del programa,
estos bloques no afectan al código.
El programa comienza con el bloque start y el programa se incluye dentro de un
bloque repeat que es el bucle del programa
La instrucción toggle pin se encara de activar y desactivar una salida digital con el intervaloque le pongamos en el bloque wait
8/18/2019 Manual 12Blocks
28/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
28
Blink con impresión de valor en terminal.
En este ejemplo se ha implementado una función Blink pero se ha añadido una variableque 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 función.
Este ejemplo implementa una función Blink a la que se invoca desde el programa principal(función "blink"). La función se invoca pasando a la vez dos parámetros de entrada a que esel número de terminal y t que es el tiempo de encendido y apagado. (Ficheroblink5_función_Blink.12b)
8/18/2019 Manual 12Blocks
29/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
29
5.2. Intermitente con variación de tiempo
Una vez que hemos realizado la práctica anterior, vamos a continuar con las señales
analógicas. Esta vez la propuesta consiste en realizar un “Intermitente” pero con el tiempovariable. Se trata de que el valor de temporización se recoja de una entrada analógica,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 quedando lainstrucción de la forma siguiente.
Esta sería la aplicación.
8/18/2019 Manual 12Blocks
30/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
30
5.3. Monoestables
Con esta práctica, que consta de dos versiones, queremos probar la emulación de un
Monoestable, es decir realizar la temporización de la activación o desactivación de unasalida 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 elcambio 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 condición, 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 función siguientes:
8/18/2019 Manual 12Blocks
31/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
31
Activado por flanco de bajada
(Fichero monoestable_flanco_bajada.12b)
En el caso de querer realizar la activación de la salida en modo monoestable conflanco de subida (paso de 1 a 0), lo que haremos será testear el valor del PIN 4, peroteniendo en cuenta que en reposo debe estar pulsado ("1") y al soltar temporalmentees cuando se activará el monoestable. Observa el bloque "no" que niega el valor delestado leído del PIN.
La idea en esta caso es testear el valor "0" de la entrada PIN4 para lo cual se debe
colocar como condición en el bloque "if "
8/18/2019 Manual 12Blocks
32/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
32
Monoestable de tiempo variable.
(Fichero monoestable_flanco_subida_tiempo_variable_canal_A0.12b)
La propuesta que hacemos a continuación es hacer que el tiempo de activación delmonoestable sea consignada mediante la entrada analógica A0. En este caso creamosuna variable "tiempo" que se asocia al canal analógico A0. Posteriormente en elbloque "wait [ms]" colocamos de valor la variable "tiempo"
Nota: si colocamos de nombre a la variable "t" nos dará un error dado que estecarácter debe estar reservado para el programa
8/18/2019 Manual 12Blocks
33/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
33
8/18/2019 Manual 12Blocks
34/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
34
5.4. Activación 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 emulación de un biestable de tal maneraque podamos gobernar una salida digital PIN6 mediante el estado de una entrada digitalPIN4. Veremos dos casos: en el primer caso, cuando la activación de la salida se realizamediante un flanco de subida de la entrada -PIN4 pasa de "0" a "1"-, y en el segundo caso,cuando la activación 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 quedetectemos que la entrada digital PIN4 pase a valor "1" (flanco de subida). Vemosque hay un condicional para el test de la entrada y dentro otro condicional doble quetesteará el valor de la variable estado, cambiándola a "0" si está en "1" y en casocontrario la cambiará a "1". A la vez cambiará el valor que envía al PIN digital desalida PIN6. Se coloca el final una Espera de 200 ms para evitar los rebotes en lamanipulación del botón de entrada de PIN4.
8/18/2019 Manual 12Blocks
35/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
35
Flanco de bajada.
Este es el montaje similar al anterior pero en este caso la activación es por flanco de bajada.(Fichero biestable_Flanco_bajada.12b)
8/18/2019 Manual 12Blocks
36/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
36
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)
8/18/2019 Manual 12Blocks
37/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
37
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 botón colocado en este pin.
Queremos también que cada vez que se produzca una pulsación en el PIN de entrada PIN4,se active temporalmente (200 ms.) una salida PIN6 para indicar de manera luminosa que elimpulso que ha entrado.
Definimos la variable "i" que almacena el numero de impulso recogidos. Pero es importanteque esta variable se defina como global, no local. Al definirla, la ponemos en "0". Se testeael valor del PIN4 de entrada de impulsos y, si está en "1", se incremente la variable "i".
8/18/2019 Manual 12Blocks
38/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
38
A continuación se muestra una imagen que permite ver como se monitoriza el valor de lavariable 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 deentrada PIN7. Lo que haremos es poner i=0 cuando se detecta que el estado del PIN7 es "1".
8/18/2019 Manual 12Blocks
39/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
39
Activación 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 elvalor de la variable de cuenta "i" alcanza 11; es decir, contamos 10 empezando por 1 (nocontamos el 0, por eso designamos la variable i con el valor de inicio i=1).
8/18/2019 Manual 12Blocks
40/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
40
5.6. Generador de impulsos de duración variable.
Con esta aplicación vamos utilizar dos conceptos nuevos en la programación: La utilización
de una función 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 queremosgenerar 4 impulsos en el pin de salida PIN6. La duración de estos impulsos se podrá ajustarmediante el valor de entrada analógica del canal A0.
En el "Programa Principal (loop)" se define la variable tiempo "tiempo" que asociamos alvalor leído en el canal analógico de entrada A0. Seguidamente se lee el estado de la variablede entrada digital PIN4. Si el valor de PIN4=1 entonces se ejecuta la función "Pulsos".
La función "Pulsos" se encarga de generar un numero de pulsos (4)
8/18/2019 Manual 12Blocks
41/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
41
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 analógica) PIN6. (Fichero regulador_luz.12b)
Se trata de enviar un valor "Intensidad" al pin, haciendo uso de la instrucción "Escribir enPIN digital... el valor analógico..."
Se utilizarán dos pulsadores conectados a otras tantas entradas de señal digitales.
PIN4 Aumenta Intensidad
PIN7 Disminuye Intensidad
8/18/2019 Manual 12Blocks
42/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
42
En el programa hay dos bloques condicionales tipo "Si.. ejecutar" "que testean el estado delos pulsadores conectados en los pines PIN4 y PIN7. Si se cumple la condición de estosbloques 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 ellose pone un bucle de condición que se encarga de esta acotación de nivel máximo. Se colocaotro condicional para detectar valores por debajo de 0 en cuyo caso se bloque el valor deIntensidad a 0
Se ha dispuesto también la opción de imprimir el valor de la variable Intensidad por elpuerto USB.
A continuación se muestra la ventana de monitorización del valor de la Intensidad.
8/18/2019 Manual 12Blocks
43/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
43
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 lámpara (Z) se emite el veredicto (PASA=encendida, NO
PASA=apagada) para pasar a la siguiente fase del concurso. La condición para que el concursante
pase es: "El concursante pasará a la siguiente fase si obtiene 3 o más votos "SI", y en caso de que
sean dos los votos SI emitidos, si uno de ellos es del Juez, también pasa el concursante". (Ficherociruito_combinacional.12b)
La siguiente imagen muestra la ecuación y el circuito que nosotros implementaremos enArduino de acuerdo a las siguientes designaciones de pines:
• Pulsadores de Entrada: A=PIN4, B=PIN7, C=PIN8, D=PIN12
• Lámpara de salida: L=PIN6
8/18/2019 Manual 12Blocks
44/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
44
El programa básicamente empieza por la definición de las variables A,B,C,D y L. La
función es la parte de condición del bloque condicional "Si..". Las funciones lógicas que seutilizan son las que figuran en la librería "Lógica".
Estas se pueden encadenar de la forma que queramos. En la siguiente figura se muestra laforma de crear la función L:
Si la función devuelve "1", entonces se cumple la condición y se activa la salida L que es elPIN6. Si no se cumple se desactiva la salida PIN6.
8/18/2019 Manual 12Blocks
45/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
45
5.9. Medida de Luz con activación de salida.
Vamos a realizar una aplicación (Fichero medida_luz1.12b) en la que leeremos el valor de
un canal analógico A0 de la tarjeta Arduino, en el que tenemos conectada una LDR. Lomostraremos a través del puerto USB en la pantalla de monitorización y ademásgobernaremos una salida digital en función del valor leído, de tal manera que:
Si A0>500 Entonces Salida PIN6=1
El proceso es el siguiente:
• Definimos la variable haciéndolo con la opción de "Variable Local" y la asociamos ala lectura del PIN analógico A0.
•
Seguidamente imprimimos el valor de la variable, delante de la cual ponemos eltexto "Luz=" unido a la variable, con la ayuda del bloque "crear texto con.."
• Seguidamente situamos el condicional "Si.. ejecutar...de lo contrario" en el queestablecemos como condición: Si A0>500 Entonces Salida PIN6=1.
• En caso de cumplirse la condición, activamos el PIN digital 6 (estado ALTO); encaso contrario, desactivamos el PIN digital 6 (estado BAJO).
Este sería el algoritmo:
8/18/2019 Manual 12Blocks
46/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
46
Mapeado del valor LUZ
En este caso lo que queremos es que el valor leído en A0, en lugar de darse en el margen 0-1023, se dé en el margen 0-100; es decir, queremos "mapear el valor". Para ello, lo que
hacemos es utilizar la función "Mapear". En esta caso la condición para la activación de lasalida PIN6 se debe cambiar a: Si A0>50. Entonces Salida PIN6=1. (Ficheromedida_luz_mapeado.12b)
8/18/2019 Manual 12Blocks
47/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
47
5.10. Medida de luz y detección de niveles.
Con este ejemplo vamos a realizar la medida de la cantidad de luz a través de un sensor que
colocaremos en el canal analógico A2 realizando hasta tres comparaciones con lainstrucción IF, de tal manera que podamos detectar tres niveles de iluminación. (Ficheromedida_luz_3_niveles.12b)
Nos vamos a basar en el ejemplo anterior y sólo debemos incluir tres condicionales, unopara cada nivel. Pensemos que ahora la condición debe ser ">=" y esto requiere modificar elbloque de comparación.
Fijaremos el escalado de la señal leída entre 0 y 100. También pondremos en el puerto serieel valor leído. Estas son las condiciones de funcionamiento.
Condición Estado PIN9 Estado PIN10 Estado PIN11
A2 >= 40 1 0 0
A2 >= 60 1 1 0
A2 >= 75 1 1 1
8/18/2019 Manual 12Blocks
48/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
48
5.11. Secuenciador
En esta práctica vamos a realizar secuenciadores.
Un secuenciador es un circuito que activa y desactiva salidas de un modo secuencialestableciendo un tiempo entre una secuencia y la siguiente o saltando de una a la otra cuandose 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 4salidas 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 lasecuencia y le daremos un valor t=200, lo que significa que cada 0.2 seg. cambia el estado.
Los estados se diseñarán de acuerdo a la tabla siguiente:
Estado PIN6 PIN9 PIN10 PIN11
A0 0 0 0 0
A1 1 0 0 0
A2 0 1 0 0A3 0 0 1 0
A4 0 0 0 1
Tiempo entre estados t=200ms.
Cada código de secuencia se va a integrar en una función, de tal manera que estableceremoslas cinco funciones: a0, a1, a2, a3 y a4.
a0=0000, a1=1000, a2=0100, a3=0010, a4=0001
Ejemplo de la función "a0" y "a4"
8/18/2019 Manual 12Blocks
49/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
49
Estas funciones serán invocadas desde el programa principal ejecutándose con un tiempo deretardo "t".
El proceso consistirá en la ejecución en secuencia (una detrás de la otra) de estas funciones
cuando el valor del PIN6 sea "1". Entre función y función se establecerá un retardo detiempo "Esperar t"
Secuenciador2
(Fichero secuenciador2.12b)
Ahora, lo que queremos añadir 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 botón). Si el valorde la entrada PIN7 es "1" se pasará al estado a0=0000 (las cuatro salidas en "0".)
Este sería el programa:
8/18/2019 Manual 12Blocks
50/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
50
Secuenciador3
(Fichero secuenciador3.12b)
Lo que deseamos ahora es avanzar la secuencia de modo manual (sin tiempo "t") cada vezque pulsemos el pulsador conectado en el PIN4, y que además pongamos a cero con elpulsador 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 elbotón del PIN4, y si se supera el valor 4 se pondrá a cero. Se ha colocado un retardo paraevitar los rebotes en el pulsador.
Con el PIN7 ponemos a "cero" el sistema dejando la combinación de salida en a0=0000.
8/18/2019 Manual 12Blocks
51/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
51
Seguidamente se colocarán condicionales que se activarán en función del valor de lavariable "estado”.
Se colocaran hasta 5 condicionales "si" uno para cada estado (desde 0 a 4).
8/18/2019 Manual 12Blocks
52/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
52
5.12. Semáforo.
En este ejemplo mostramos la posibilidad de realizar un semáforo. (Fichero semáforo1.12b)
Las salidas serán las siguientes: PIN11=rojo, PIN10=ámbar y PIN9=verde.
Los tiempos ente estados serán: rojoon=700 ms, ambaron=500 ms, verdeon=700 ms.
Se dispondrá de un botón en el pin digital PIN4 que, si mantenemos pulsado, ejecutará lasecuencia normal del semáforo; y si soltamos, se pondrá en modo intermitente del ámbar.
Otra forma de realizar el semáforo.
Una modificación del montaje anterior podría ser que la activación de la secuencia normal selleve 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 semáforo2.12b)
8/18/2019 Manual 12Blocks
53/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
53
Semáforo con ámbar intermitente
Esta es una variación sobre el ejemplo anterior en la que se ha implementado la opción dequedar el semáforo en modo intermitente. Para que se quede la lámpara "ámbar" enintermitente se debe cumplir que el PIN4 = 0.
(Fichero semáforo3.12b)
8/18/2019 Manual 12Blocks
54/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
54
8/18/2019 Manual 12Blocks
55/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
55
5.13. Zumbador.
Activación de sonido.
(Fichero sonido1.12b)
En este montaje se trata de leer el valor de una entrada digital PIN4 y, en función del valorleído, activar o no el “Altavoz”. Es la función Zumbador de la librería "zum bloqs" quedeberá emitir un tono "DO" con una duración de 1seg.
8/18/2019 Manual 12Blocks
56/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
56
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 secuenciaangular:
Posición Angulo Tiempo
1 0 3000
2 90 3000
3 180 3000
Gobierno de un servo angular mediante una entrada analógica.
(Fichero servo2.12b)
Vamos a gobernar el servo angular mediante una entrada analógica, canal A0 de Arduino.Esta señal se asocia a la variable "Control", que es la que gobernará la posición del servo.Imprimiremos la variable para verla.
8/18/2019 Manual 12Blocks
57/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
57
Como el valor máximo de la señal de gobierno "Control" será 100, se debe realizar elmapeado de la señal recogida en el PIN A0 de 0-1023 a 0-100 mediante el bloque de función"Mapear"
8/18/2019 Manual 12Blocks
58/58
12Blocks + Arduino. Guía y Ejercicios José Manuel Ruiz Gutiérrez
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 yPIN9 como salidas. Se trata de implementar la siguiente tabla de verdad:
La implementación es muy sencilla: se definen las variables de entrada y salida para cadauno de los pines y a continuación se establecen tantas funciones condicionales "Si" comocódigos tenemos que sacar (4 códigos); y para cada una se activan o desactivan los pines desalida (S0 y S1).