S4A + Arduino
S4A + Arduino
S4A + Arduino
S4A
(Scratch) + Arduino
Utilizacin de S4A (Scratch) ms la tarjeta Arduino en un ambiente de programacin grfica orientado a la educacin
Ver. 1.0
ndice
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Objetivo de este trabajo. Una Introduccin general a S4A Salida Intermitente Salida intermitente con visualizacin de estado en pantalla Salida intermitente con visualizacin de estado en pantalla y control de frecuencia mediante un canal de entrada analgica. Gobierno de una salida mediante un pulsador Gobierno de salida con pulsador en pantalla: Pulsador virtual Gobierno de salida en modo biestable memoria Control de una salida mediante el teclado Contador Sencillo Contador Adelante/atrs Contador con puesta a cero Semforo Control de un motor Control de un servomotor (giro 180) Lectura de un canal analgico de entrada. Simulador de un Termstato Traspaso de un valor analgico de entrada a una salida analgica Gobierno de una salida analgica desde la pantalla del Escenario Gobierno de una salida analgica mediante el valor de la posicin x del ratn. Gobierno de una salida analgica mediante un bucle secuencial continuo Termmetro con leds y sensor LM35 Instalacin domtica
Enero de 2012 Versin de Documento: V1.0 Jos Manuel Ruiz Gutirrez [email protected] Blog de referencia: http://josemanuelruizgutierrez.blogspot.com/
2
1.
Con el presente trabajo prctico pretendo dar a conocer las posibilidades de la herramienta S4A en conjuncin con la tarjeta Open Hardware Arduino UNO. S4A es un entorno desarrollado a partir del prestigioso entorno Scratch desarrollado en el MIT Media Lab de muy amplia difusin en el mundo de la educacin. La intencin de este trabajo es facilitar a los profesores, estudiantes e interesados en la programacin grafica y en los entornos Open Hardware una primera iniciacin practica abordando la resolucin de sencillos ejemplos en los que se hace uso de la librera de objetos que se encargan de la comunicacin con Arduino. Es evidente que ya se terminaron aquellos entornos de programacin en los que haba que pelearse con una sintaxis de comandos en ocasiones diablica. En este caso S4A realiza esa tarea tediosa y permite al usuario dedicarse a la creacin y perfeccionamiento del algoritmo que resolver su problema. En este trabajo aporto una coleccin de ejemplos que permitirn al lector comprender las posibilidades de esta poderosa conjuncin Arduino + S4A y le animarn a continuar facilitndole el conocimiento de una de las plataformas Open Hardware ms interesantes y difundidas en el mundo. Poner en la comunidad internacional Arduino este trabajo es para m una satisfaccin porque con ello creo aportar un pequeo grano de arena al conocimiento y a su pblica y libre difusin a travs de herramientas pblicas y gratuitas. Agradezco sinceramente a todos cuantos, antes de mi, trabajaron en este campo y valoro sus aportaciones, especialmente a los creadores de S4A que han contribuido de una manera notoria a la difusin de Arduino como herramienta de aprendizaje.
2.
Citilab
Introduccin
Citilab pone a disposicin de la comunidad Arduino una aplicacin basada en Scratch para programar de manera grfica Arduino. La aplicacin se llama s4a (ficheros para descargar S4A y Firmware)
S4A es una modificacin de Scratch que proporciona una programacin sencilla de la plataforma abierta de hardware Arduino. Incluye nuevos bloques para controlar sensores y actuadores conectados a Arduino. Tambin hay una tabla que informa del estado de los sensores similar a la PicoBoard. Ha sido desarrollada para atraer a la gente al mundo de la programacin. Su objetivo es tambin proporcionar una interfaz de nivel alto para programadores de Arduino con funcionalidades como la interaccin de varias placas a travs de eventos de usuario.
Caractersticas
Los objetos de la librera Arduino ofrecen bloques para funcionalidades bsicas del microcontrolador, escrituras y lecturas tanto analgicas como digitales, adems de alguna de ms nivel.
4
Se pueden crear objetos Arduino a travs de 3 maneras distintas en el entorno de Scratch. Puedes elegir entre crear una nueva conexin o usar una ya existente. Esta caracterstica permite a los objetos virtuales Arduino funcionar de forma colaborativa usando la misma conexin (el objeto fsico). El objeto Arduino encontrar l mismo el puerto USB donde la placa est conectada. S4A interacta con Arduino enviando el estado de los actuadores y recibiendo el de los sensores cada 75 ms, por lo tanto el ancho de pulso ha de ser mayor que este perodo. Este intercambio de informacin se efecta usando el protocolo de la PicoBoard, el cual ya est implementado en un programa especfico (llamado firmware) en la placa. Encontrareis instrucciones de cmo cargarlo a travs del entorno Arduino. Funciona con las versiones Duemilanove/Diecimila y Uno, quizs tambin con otras pero no las hemos testeado an. Tambin se puede controlar una placa de manera inalmbrica si se aade un mdulo RF como por ejemplo XBee. Una caracterstica importante es que se puede crear un proyecto utilizando tantas placas como puertos USB haya disponibles. S4A es compatible con Scratch, se puede trabajar con proyectos Scratch y tambin con la PicoBoard. Sin embargo, no se pueden compartir proyectos ya que va en contra de los trminos de uso de Scratch. Por otra parte, la configuracin de entrada/salida an est siendo desarrollada, as que por ahora los componentes tienen que conectarse de una forma concreta. Dicha configuracin ofrece 6 entradas analgicas (pines analgicos), 2 entradas digitales (pines digitales 2 y 3), 3 salidas analgicas (pines digitales 5, 6 y 9), 3 salidas digitales (pines 10, 11 y 13) y 4 salidas especiales para conectar servomotores de rotacin continua Parallax (pines digitales 4, 7, 8 y 12).
5
Creadores: S4A ha sido desarrollado por Marina Conde, Vctor Casado, Joan Gell, Jos Garca y Jordi Delgado con la ayuda del Grupo de Programacin Smalltalk del Citilab. Para informar de errores o simplemente darnos sugerencias podis escribir a: [email protected].
Modo de instalacin.
1. Para instalar S4A +Arduino se debern seguir los siguientes pasos. 2. Primero instalar el software S4A una vez que se haya descargado del su lugar de origen. 3. Se deber instalar en la tarjeta Arduino el Firmware correspondiente que facilita la comunicacin con S4A. Esto se realiza cargando el fichero firmware en el IDE de Arduino y despus descargndolo sobre la tarjeta. 4. Finalmente se ejecuta S4A y de realiza el diseo haciendo uso de las libreras de bloques correspondientes una parte de las cuales se encarga de la lectura y escritura de datos en la tarjeta de acuerdo siempre con la configuracin que establezca el firmware. A continuacin se detallan estas configuraciones de E/S que no olvidemos que no se pueden modificar desde S4A. ENTRADAS/SALIDAS salidas digitales (pines digitales 10,11 y 13) salidas analgicas (pines digitales 5, 6 y 9) entradas analgicas (todos los pines analgicos de entrada) entradas digitales (pines digitales 2 y 3) servomotores RC (pines digitales 4, 7, 8 y 12)
3.
Salida intermitente
Nuestro primer ejercicio ser el encendido y apagado de un diodo led conectado en la salida PIN 13 de la Tarjeta Arduino. En la siguiente imagen se ve el grfico correspondiente a esta sencilla aplicacin. Se han utilizado dos funciones digital de la librera movimiento asociadas a la salida PIN 13 una en estado encendido y otra en estado apagado
Las temporizaciones se hacen con los bloques pensar de la librera apariencia a los que les hemos quitado el texto que muestran por defecto y en los que se ha colocado el valor del tiempo en segundos, se pueden realizar tambin con el bloque esperar segundos de la librera control En la pantalla escenario no se ha puesto ningn objeto, por lo que aparece la que muestra por defecto. El montaje de este primer ejemplo es muy sencillo y se muestra en la siguiente imagen.
4.
Si queremos que en la pantalla del escenario aparezca una imagen de un diodo led que simula encendido y apagado debemos crear con la herramienta disfraces del entorno dos imgenes una que llamados led_off y otra led_on que muestran el estado.
Despus en el programa lo que hacemos es utilizar el bloque de funcin cambiar el disfraz perteneciente a la librera apariencia que permite mostrar en el escenario una u otra imagen. Los bloques al presionar y por siempre pertenecen a la librera control En la siguiente figura se muestra el programa ya elaborado. La siguiente figura es el aspecto del escenario
Led_off
led_on
5.
Salida intermitente con visualizacin de estado en pantalla y control de frecuencia mediante un canal de entrada analgica.
El siguiente ejemplo nos muestra la forma de poder asociar una variable al valor de una entrada analgica Analog0 con el fin de poder variar el retardo en el encendido y apagado de una salida digital PIN 13. Comenzamos definiendo la variable frecuencia que mediante la funcin fijar frecuencia a valor del sensor Analog0 asociamos a ella el valor ledo del canal analgico. El tiempo de encendido lo fijamos a 0.1 segundos y en donde actuamos es en el tiempo de apagado. El tiempo de apagado los configuramos con la funcin esperar frecuencia/2000 segundos
Hemos recurrido a la opcin de mostrar en la pantalla escenario la imagen de un diodo led encendido y apagado con los disfraces led_off y led_on. Mostramos estas imgenes mediante la funcin cambiar el disfraz a led_on y cambiar el disfraz a led_off. Una vez activada la simulacin podemos observar como al modificar el valor del potencimetro vara el tiempo de apagado del led.
El valor ledo del canal Analog0 se divide por 2000 con el fin de reducir el rango de variacin del la variable frecuencia. En este caso podemos deducir que el valor de frecuencia seria: Frecuencia vara entre 0 y 0,512 seg. Analog0 vara entre 0 y 1024
10
6.
Queremos gobernar una salida digital PIN 13 mediante el accionamiento de una entrada digital PIN 2 a la que le hemos colocado un pulsador. El programa es muy sencillo. Mediante el bloque de sensor presionado averiguamos si el valor de la entrada es true o false y en funcin de este, mediante el bloque de funcin si si no perteneciente la librera control, conseguimos la funcin de gobierno deseada: Activar o desactivar la salida PIN 13
11
7.
En este caso lo que vamos a aadir a la versin anterior es la visualizacin en la pantalla escenario de un led y un pulsador, pero en este caso el pulsador ser virtual, es decir, que el diodo led de la salida PIN 13 se activar gobernado desde la pantalla del ordenador. Se trata de activar desde la pantalla escenario un botn para activar el PIN 13 y otro para desactivarlo. La activacin y desactivacin se lleva a cabo por la accin sobre dos objetos: led_off y led_on y la activacin propiamente dicha es la que se asocia al objeto Arduino1 que tiene tambin integrados los objetos led_on y led_off Cuando se presiona sobre el objeto botn_on se enva al mensaje on, orden enviar a todos que al recibirse en el script correspondiente al programa Arduino1 activa la salida PIN 13 mediante la orden digital 13 encendido Cuando se presiona sobre el objeto botn_off se enva al mensaje off, orden enviar a todos que al recibirse en el script correspondiente al programa Arduino1 desactiva la salida PIN 13 mediante la orden digital 13 apagado
En las figuras vemos los objetos del programa Arduino1 y el programa correspondiente.
12
Los programas puls_off y puls_on se muestran a continuacin junto a los disfraces de cada uno
La pantalla escenario de esta aplicacin es la que se muestra a continuacin, en ella vemos los objetos descritos anteriormente: led, puls_off y puls_on
13
8.
Ahora vamos a controlar la salida PIN 13 con un pulsador desde la tarjeta Arduino pero para el gobierno se podr hacer simplemente pulsando, actuando el sistema como un biestable (una pulsacin enciende, la siguiente pulsacin apaga y as sucesivamente). En la figura se muestra el algoritmo. En este caso, previamente se crean tres variables: led_on: indica el estado de la salida PIN 13 oldValue: Indica el estado anterior de la salida PIN 13 currentValue: Indica el estado actual de la salida PIN 13
El funcionamiento es el siguiente: Se fijan los valores ledOn y OldValue a false (cero) fijar ledOn false y fijar oldValue false Se lee el valor de la entrada Digital1 y se asocia a la variable currentValue Se pregunta si el valor currentValue es true y el OldValue es falso, si es as entonces se pregunta si el led est apagado ledOn=false y si es asi de activa la salida PIN13 digital 13 encendido y se fija el
14
valor de ledOn a true fijar ledOn true, si no , se apaga el led digital 13 apagado y se pasa pone el valor fijar ledOn false Finalmente se fija oldValue al mismo valor que currentValue fijar oldValue a currentValue
Este es el aspecto que presentara la pantalla escenario. Vemos que se muestran los valores de las variables currentValue, oldValue y ledOn. Este sera el montaje del circuito.
15
9.
Se trata de gobernar una salida (PIN 13) mediante el teclado con la letra a la activamos y con la letra s la desactivamos. El algoritmo es muy sencillo. Se han creado dos disfraces uno led_off y el otro led_on que se asociarn al estado de apagado y encendido de la salida. Se ha recurrido al bloque de funcin al presionar tecla que se activa cuando se detecta que una tecla del teclado se ha pulsado. Si se pulsa la tecla a la seal se activa PIN 13 =true Si se pulsa la tecla s la seal se desactiva PIN 13=false Al comienzo del programa para asegurarnos de que la salida esta apagada ponemos el disfraz de led apagado cambiar el disfraz a led_off
16
En el bucle principal del programa por siempre integremos un bucle cndicional s en el que la condicin que se testea es si la entrada digital PIN 2 ha sido activada sensor Digital2 presionado Si se cumple la condicin lo que se hace es incrementar en 1 el valor del contador fijar Cuenta a Cuenta+1 Se establece a continuacin un retardo de 0.5 seg. Con el fin de evitar que cuente ms de uno por el tiempo que este presionado aunque sea muy poco. pensar por 0.5 seg . Tambin se podra haber realizado el retardo con la funcin esperar segundos de la librera de Control En la siguiente imagen vemos el aspecto de la pantalla escenario
17
18
Se han colocado igualmente los retardos para evitar rebotes en la cuenta En la figura siguiente vemos el aspecto de la pantalla escenario.
19
20
De la misma manera que hemos hecho en el ejemplo anterior definimos la variable Cuenta que almacenar el valor de contador. Esta vez dispondremos de dos bucles tipo si uno para cada una de las dos operaciones contar y poner a cero Contar: Para el bucle contar testeamos el estado de la variable de entrada digital Digital2 PIN 2 y si se cumple que esta activada incrementamos el contador fijar Cuenta a Cuenta+1 Poner a cero: Con la entrada Digital3 ponemos a cero e valor Cuenta fijar Cuenta a 0
21
22
13. Semforo
En este ejemplo vamos a realizar un semforo. Utilizaremos las siguientes salidas Lmpara Roja Lmpara mbar Lmpara Verde PIN 13 PIN 11 PIN 10
Se han creado tres disfraces para representar los tres estados del semforo que se irn mostrando de acuerdo a la secuencia de encendido de las salidas: cambiar disfraz a Semforo_rojo cambiar disfraz a Semforo_ambar cambiar disfraz a Semforo_verde Los tiempos de espera se han definido mediante la funcin Pensar por 1 segundo
En la pantalla de escenario se ha colocado de fondo la imagen de un cruce de calles, lo cual le da cierto realismo a la aplicacin.
23
24
Se ha dispuesto que al iniciar el programa el motor se fuerce al estado apagado y eso se hace con la funcin motor apagado En la pantalla del escenario se ha escrito un texto explicativo.
25
26
sensor
La idea en esta aplicacin es que el ngulo de giro se obtenga a travs de una de la entradas analgicas de la tarjeta Arduino, en este caso lo haremos a travs de Analog0 valor sensor Analog0 este valor ledo lo asignamos a la variable
El algoritmo es muy sencillo. En primer lugar fijamos la posicin de reposo en 90 motor 8 ngulo 90. Seguidamente, dentro de un bucle de repeticin continua por siempre se fijan las variables a sus valores y para terminar se activa el motor con la variable ngulo motor 8 ngulo angulo En la pantalla escenario colocamos para su visualizacin los valores de las variables sensor y angulo.
27
28
A continuacin se muestra el aspecto de la pantalla Escenario en el que hemos colocado el valor de la variable Analog1 con un texto qu se ha colocado editando simplemente el fondo del escenario Lectura de un canal analgico Analog1=
29
30
Esa vez definiremos la variable analgica de entrada como value y la asignaremos al canal analgico Analog1 mediante la funcin fijar value valor del sensor analog1 Lo que proceder a continuacin es establecer un condicional compuesto si ,si no en el que se interrogue por el valor de value, establecindose que: si value <800 entonces salida digital PIN 13=true digital 13 encendido y en caso de no cumplirse la condicin PIN 13=false digital 13 apagado Se han establecido dos disfraces para representar la estufa encendida y apagada. El aspecto de la pantalla escenario es el siguiente.
31
32
Las instrucciones para fijar los valores son: fijar Analogica1 a valor del sensor Analog1 fijar Sal_Analogica1 a redondear Analogica1/(1024/255)
Es muy importante que se tenga en cuenta que en las salidas solo se puede sacar un valor entre 0 y 255, sin embargo, la entrada analgica ledo puede oscilar entre 0 y 1024. Para resolver este problema lo que hacemos es aplicar un factor de reduccin a la seal Analgica1 K=1024/255, por eso en la orden fijar para sacar el valor Sal_Analogica1 se utiliza este factor K y, adems, se redondea el valor porque Arduino no permite sacar por sus salidas analgicas un valor que tenga decimales, deben ser valores enteros En la pantalla escenario se muestra los dos valores tanto la lectura analgica como el valor de escritura en la salida. Se ha editado el fondo del escenario y se ha rotulado el texto en rojo que aparece.
33
34
El programa es tan sencillo como el que sigue. Basta que la funcin de salida de valores analgicos se alimente con el valor intensidad: analgico 5 valor intensidad
La pantalla escenario es la que se muestra a continuacin. Lo que hemos hecho es editar el fondo y poner el texto en rojo que aparece.
35
Bastar mover el cursor de la variable Intensidad para hacer que la intensidad del diodo led conectado al PIN 5 vare. El montaje sobre protoboard es el siguiente.
36
20. Gobierno de una salida analgica mediante el valor de la posicin x del ratn.
Con esta aplicacin vamos a descubrir otra manera de interaccin que facilita S4A con el mundo exterior. En el ejemplo veremos cmo es posible cambiar la intensidad de un led colocado en la salida analgica PIN 5 tomando en cuenta la posicin x del ratn sobre la pantalla escenario Definimos una variable a la que le ponemos el nombre de intensidad. Asociamos al valor de intensidad la posicin del ratn tomada de la funcin x del ratn . Se ha redondeado el valor porque la funcin analgica de salida recoge solo valores enteros comprendidos entre 0 y 255 tambin se ha utilizado la funcin abs que transforma el valor en valor absoluto
Bsicamente el algoritmo es muy sencillo. Se fija el valor de la intensidad fijar Intensidad a abs de redondear x del ratn Se enva el valor intensidad a la salida PIN 5 analgico 5 valor intensidad A continuacin se muestra la pantalla escenario.
37
38
Los bucles se han montado con la funcin repetir hasta que con la condicin de valores mximo y mnimo a alcanza en cada bucle intensidad >240 e intensidad<20.
39
Las funciones encargadas de incrementar y decrementar los valores de intensidad son: fijar intensidad a intensidad + 10 y fijar intensidad a intensidad - 10 El aspecto de la pantalla escenario es el que vemos a continuacin
40
Se han creado cuatro disfraces que permiten indicar en le pantalla escenario el estado real de las salidas, en la figura se pueden ver: Led_2, Led_3 y Led_4 el disfraz Led_1 se ha creado por si deseramos un cuarto rango en el que no se activase ninguna salida
41
42
A continuacin se muestra el esquema de montaje en en protoboard de esta aplicacin. Se ha tomado como sensor de temperatura un sensor de semiconductor LM35
43
El objeto Iluminacin tiene asociado un programa muy sencillo que se encarga de controlar los disfraces Lampara_off y Lmpara_on. Para ello, mediante un condicional si, si no testea la variable Lampara y si esta es 1 se pasa al disfraz lmpara_on Cambiar el disfraz lmpara_on Sensores analgicos de entrada: Canal Analo0 PIN 0 analgico para medir la luz Canal Analog1 PIN 1 analgico para medir la temperatura
44
Salidas digitales: PIN 13 salida de activacin de lmpara PIN 11 salida de activacin de lmpara PIN 10 salida de activacin de radiador
El objeto Calefaccin tiene asociado el programa que se encarga de controlar los disfraces radiador_off y radiador_on. Para ello, mediante un condicional si, si no testea la variable Radiador y si esta es 1 se pasa al disfraz radiador_on Cambiar el disfraz radoador_on
El programa principal perteneciente al objeto Arduino es el que se muestra en la siguiente figura. Dentro de un bucle de repeticin por siempre como todos los programas lo primero que se hace es fijar las variables a sus fuentes de dato:
45
fijar Temperatura a valor del sensor Analog1 fijar Luz a valor del sensor Analog0 Seguidamente se pasa a una funcin condicional tipo si, si no que se encargar de comprobar si el valor de la variable Luz es menor del valor de la variable Consigna_luz. Si se cumple la condicin eso significa que hay poca luz y debemos encender las lmparas: digital 13 encendido y digital 11 encendido
El siguiente bucle condicional tipo si, si no se encargar de comprobar si el valor de la variable Temperatura es menor del valor de la variable Consigna_temp. Si se cumple la condicin eso significa que hace frio y debemos encender el radiador:
46
47
Bibliografa y lugares para ampliar informacin. Lugar oficial de Citalb Projecte Scratch: http://seaside.citilab.eu/scratch?_s=z5Xdh5Rj6Kh_4n2y&_k=R4MLvyAjw85UXpk Lugar oficial de la plataforma Arduino: http://www.arduino.cc/es/Main/Software Pagina oficial de Scratch: http://scratch.mit.edu/ Documentacin variada y muy til EDUTEKA. http://www.eduteka.org/modulos.php?catx=9&idSubX=278#!modulo-Scratch
48