Professional Documents
Culture Documents
GUA Y EJERCICIOS
Jos Manuel Ruiz Gutirrez
V.1.0 Junio 2015
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.
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.
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:
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.
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.
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
10
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.
11
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
12
13
14
15
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
17
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
19
PIN6
PIN9
PIN10
PIN11
A or B
A and B
A and B and C
20
21
22
23
24
4. Libreras
25
26
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.
y wait
para comentar las instrucciones 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
28
quedando la
29
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
30
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
Nota: si colocamos de nombre a la variable "t" nos dar un error dado que este
carcter debe estar reservado para el programa
32
33
34
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
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
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
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
39
41
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
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:
43
44
45
46
Estado PIN11
A2 >= 40
A2 >= 60
A2 >= 75
47
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
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
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
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
51
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.
52
53
54
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
3000
90
3000
180
3000
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
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).