Manual 12Blocks

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

     [email protected]

    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).