MÓDULO 5. SCRATCH FOR ARDUINO (S4A)
(Pincha en los enlaces para acceder al
canal de Youtube y ver
los
videos) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5.1 INTRODUCCIÓNAprenderemos a utilizar una variante de Scratch. el llamado "Scratch for Arduino" (Scratch para Arduino), abreviado S4A, para programar la placa de Arduino desde un entorno más intuitivo. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5.2 CÓMO INSTALAR S4A (SCRATCH FOR ARDUINO)
Este programa, desarrollado por el Citilab de Cornellá,
puede descargarse desde su página web (en inglés): http://s4a.cat/ (Existe
versión en castellano, a la que se puede acceder pinchando en las
siglas ES de la parte superior
derecha de la pantalla, sin embargo, en la versión en inglés, a día de
hoy, hay más información sobre la instalación). |
5.B.1 CONEXIÓN PARADA |
|
SENSOR
ESCOGIDO: |
VALOR
OBTENIDO |
Valor
del sensor (Analog0) |
|
¿sensor
Digital2 presionado? |
5.B.2 CONEXIÓN ACTIVA |
|
SENSOR
ESCOGIDO: |
VALOR
OBTENIDO |
Valor
del sensor (Analog0) |
|
¿sensor
Digital2 presionado? |
5.2.C.1. ESCRITURA DESDE S4A EN EL PIN 13 (PIN "L" - LOAD O DE CARGA) | |
Instrucciones: |
|
5.2.D. INTERMITENCIA EN EL PIN 13 |
|
Instrucciones: | Usa
las instrucciones anteriores, pero ahora crea un programa con S4A
que realice, de forma automática, una intermitencia en el LED "L", con
las condiciones siguientes:
|
5.2.E. INTERMITENCIA REPLICADA EN CIRCUITO EXTERNO
(PIN 13) |
|
Esquema: |
|
Proto-Board: |
|
Instrucciones: | Utiliza el mismo
programa anterior, pero conecta exteriormente un LED al PIN 13 de Arduino para comprobar su funcionamiento. Recuerda que necesitas
colocar en Serie una Resistencia de 220 Ohmios. |
5.2.G. APLICACIÓN DE S4A AL PROGRAMA DEL SEMÁFORO |
|
Esquema: |
|
Proto-Board: | |
Instrucciones: |
|
5.3.A. CONTROL DE UN SERVOMOTOR mediante S4A | |
Esquema: | |
Placa: | |
Instrucciones: | Recuerda los pasos necesarios para usar
S4A
|
SERVOMOTORES DE ROTACIÓN CONTINUA |
|
Se trata de Servomotores que se han
modificado (manualmente o de fábrica) para obtener una forma distinta
de funcionamiento:
|
|
SENTIDO DE ROTACIÓN
EFECTIVO: En un
servomotor comercial ¿Cómo se entiende el sentido de una rotación? Pues
depende del modelo, nos podemos encontrar una cosa y la contraria. Por
ejemplo, en el DS04-NFC que he probado, el sentido Horario se entiende
visto desde la posición del motor. Pero en el servomotor SG90 de 9g de
TOWER PRO es al revés. Por ello lo mejor es comprobarlo antes de hacer
el programa. |
|
Observamos aquí el punto
de vista del motor. En este ejemplo se ha representado el Sentido Horario en
color rojo y el Antihorario
en verde. |
Este es el punto de vista
de un observador externo. Los mismos sentidos anteriores, desde esta
perspectiva parecen "equivocados". Seguimos representando el sentido Horario en
rojo y el Antihorario
en verde. |
Sin
embargo, este criterio no siempre se respeta por el fabricante, por lo
que será mejor comprobarlo en cada
caso. |
5.3.E. CONTROL DE UN SERVOMOTOR DE ROTACIÓN
CONTINUA con S4A. |
|
Realiza
un programa que controle el movimiento de un motor conectado al PIN7.
Este motor lo llamaremos M1. Sus funciones han de ser las siguientes:
|
|
Esquema: | |
Placa: |
5.3.E. CONTROL DE UN ROBOT con DOS SERVOMOTORES DE
ROTACIÓN
CONTINUA con S4A. |
|
Toma
un nuevo Servomotor de rotación continua y conéctalo al PIN4. Para
mantener los dos motores conectados necesitarás usar una placa de
conexiones (Protoboard) que permita usar una toma común para los 5V y
otra para GND. Si no dispones de ruedas y un chasis de robot para montarlos, conviene que al menos coloques los motores en la posición que estarían colocados sobre el robot (ver modelo) para comprobar que los sentidos de giro son los correctos para conseguir los movimientos requeridos del robot:
|
|
Esquema: | |
Proto-Board: | |
Instrucciones: | Estudia bien los sentidos necesarios en cada motor y muestra el resultado cuando lo consigas. |
DRIVER DE MOTORES L298N |
|
Se trata de un circuito
impreso basado en el chip L298, que es muy
similar al L293D que ya estudiamos, pero con mayor potencia. Este chip está incorporado en un circuito que incluye otros componentes como diodos (para proteger el circuito de las corrientes inducidas por el motor), un regulador (para fijar la tensión al nivel que necesita el L298N) y condensadores para estabilizar las tensiones de alimentación utilizadas. Puede adquirirse aquí, y en esta página o en esta otra podemos encontrar instrucciones de uso. Este módulo se usa porque Arduino no tiene potencia suficiente para alimentar motores de DC de cierta nivel de consumo, pudiendo resetearse continuamente ("amorrarse") o incluso quemarse. Por ello, siempre usaremos una batería externa con motores DC. Dependiendo de la tensión que necesiten los motores, podremos adoptar dos configuraciones: |
|
Para motores que necesiten de 6V a 12V |
Para motores que usen de 12V a 35V |
L298N | L298N |
Para usar el L298N de esta
forma hay que:
|
|
Podría representarse el patillaje del L298N según el siguiente esquema: |
|
Como
vemos, el L298N tiene 4
entradas IN1, IN2, IN3 e
IN4, que corresponden respectivamente a sus 4 salidas OUT1, OUT2, OUT3 y OUT4. Estas salidas están agrupadas por pares, para poder utilizarlas en modo Push-Pull, como vimos en el caso del L293D Por otra parte tenemos las tomas ENABLE: ENA y ENB, que afectan a las parejas de salidas OUT1/OUT2 por parte de ENA y OUT/3/OUT4 por parte de ENB. Las tomas ENABLE deben estar activadas para que la señal enviada a cada entrada se transmita a la salida correspondiente. Una posibilidad es usar las tomas ENABLE para controlar la velocidad del motor por PWM (usando las salidas ~5, ~6 y ~9 que S4A puede controlar). Vimos un ejemplo de esto en el control de velocidad de Motores DC por PWM. Sin embargo, existe la posibilidad de mantener siempre activas las tomas ENABLE. Para ello hay unos Jumpers que dejaremos conectados en las tomas ENA y ENB para que por ellas siempre entren +5V. |
|
En definitiva, la configuración que utilizaremos en las prácticas con el L298N, salvo que se indique otra cosa, será la siguiente:
|
L298N |
5.4.A. CONTROL DE UN MOTOR DE CONTINUA (DC) con S4A y L298N. | |
Prototipo: | |
Instrucciones: | Monta el circuito
anterior y realiza el programa necesario en S4A para que el motor actúe
de la forma siguiente:
|
5.4.B. CONTROL DE UN ROBOT con 2 MOTORES DE CONTINUA (DC) usando L298N y S4A. | |
Se
trata de realizar un robot similar al modelo
que hicimos con servomotores, pero con Motores DC. Monta el circuito siguiente sobre un bastidor de un robot o, si no dispones de él, situa los motores en la posición en que estarían. Es importante para conocer realmente el efecto de cada motor en el movimiento del robot. También hay que tener en cuenta qué parte se considera la "cabeza" del robot y cuál es la "cola". Fíjate en que cada entrada activa su salida correspondiente. Cómo conectemos los motores influye también en el resultado final. Revisa el video si no lo tienes claro. En cualquier caso, es más fácil probarlo sobre los componentes reales. |
|
Prototipo: | |
Instrucciones: | Monta el circuito
anterior y realiza el programa necesario en S4A para que el motor actúe
de la forma siguiente:
|
5.5.A. SENSOR CON DOS RESISTENCIAS y S4A |
|||||||||||||||||||||||||||||
Vamos a realizar un montaje similar al del video anterior. Se trata de un divisor de tensión formado por dos resistencias iguales. | |||||||||||||||||||||||||||||
Esquema: | |||||||||||||||||||||||||||||
Placa-Board: | |||||||||||||||||||||||||||||
Instrucciones: |
|
5.5.B. SENSOR CON UN INTERRUPTOR Y UNA RESISTENCIA más S4A | |||||||||
Como en el video, se trata de un divisor de tensión en
el que se ha sustituído la resistencia superior por un par de cables (o
un interruptor), que abren o cierran el circuito |
|||||||||
Esquema: | |||||||||
Placa-Board: | |||||||||
Instrucciones 1: |
|
||||||||
Instrucciones 2: | Cambia la posición
del interruptor y observa lo que ocurre con la lectura del sensor:
|
5.5.C. SENSOR CON UN INTERRUPTOR de INCLINACIÓN (tilt switch) más S4A | |||||||||||||
Ahora vamos a usar un interruptor de
inclinación como sensor. Monta el circuito siguiente y realiza la
práctica propuesta. En este caso usamos el sensor Analógico 3. La resistencia en serie con el "TILT" es de 100K |
|||||||||||||
Esquema: | |||||||||||||
Placa-Board: | |||||||||||||
Instrucciones: |
|
5.5.D. SENSOR LDR más S4A | |||||||||||
Utilizaremos una LDR en el divisor de
tensión para ver su efecto. |
|||||||||||
Esquema: | |||||||||||
Instrucciones1: |
|
||||||||||
Placa-Board: | |||||||||||
Instrucciones2: |
|
Es necesario que el valor del potenciómetro sea al menos de 10K para que no consuma demasiada corriente de la pila de 5V (o de Arduino, si se conecta a su toma de 5V) |
5.5.E. POTENCIÓMETRO más S4A | |||||||||||
Esquema: | |||||||||||
Placa-Board: | |||||||||||
Instrucciones: |
|
5.5.F. MODIFICAR TAMAÑO MEDIANTE LDR más S4A | |
Esquema: |
|
Instrucciones: | Vamos a intentar repetir el ejemplo propuesto en el vídeo:
|
5.5.G. POSICIÓN DE UN SPRITE en función de un POTENCIÓMETRO más S4A | |
Esquema: | |
Placa-Board: | |
Instrucciones: |
|
5.5.H. MINI-PROYECTO: INSTRUMENTO MUSICAL SIMPLE. |
|
Esquema: | |
Instrucciones: |
|
5.6 INVITADO: 'ROBOT SIGUE-LÍNEAS USANDO S4A' CON DAVID
OTERO
Tras analizar el contenido del vídeo, vamos a
plantearnos los retos siguientes: |
EL
OPTOACOPLADOR CNY 70 |
|
Este dispositivo
está formado por dos componentes electrónicos con propiedades ópticas:
|
|
En el CNY70, el
diodo tiene dos patillas denominadas Ánodo (A) y Cátodo
(K). El transistor habitualmente tiene tres, pero como en este caso la
Base está formada por una superficie fotosensible, sólo tenemos
acceso a las patillas denominadas Colector (C) y Emisor (E). Como se ve
en la imagen, la posición del transistor está invertida. |
|
En el caso del CNY
70, cuando se aplica una tensión positiva entre el Ánodo (A) y el
cátodo (K) del diodo, éste emite luz infrarroja hacia fuera del
dispositivo. Al incidir sobre una superficie blanca, o de un color
suficientemente claro, la luz es reflejada, excitando a la base del
fototransistor y causando que éste se active, de modo que permita el
paso de corriente entre el colector (C) y el emisor (E). La cantidad de corriente que permite pasar el transistor va a depender de dos variables:
|
|
En definitiva, el CNY70 actúa como un interruptor que se cierra cuando detecta una superficie de color claro cerca y se abre en caso contrario. Es por este motivo por el que se ha escogido una configuración PULL-DOWN, acoplando la resistencia bajo el Emisor del transistor (en lugar de PULL-UP que sería con la resistencia por encima del Colector). Recordemos que el transistor hace la función de interruptor. | |
El
esquema de conexiones para el CNY70, para el circuito propuesto, sería
el siguiente: |
|
EL
CNY70 y la PLACA de PROTOTIPOS
|
|
El CNY70 se
presenta en un encapsulado con cuatro patillas. Como se ve en la página 5 de la hoja de características,
la distancia entre las mismas es la misma que hay entre cada dos
agujeros de la placa de prototipos, lo cual no permite que el
CNY70 se conecte a la placa de prototipos tal cual, ya que por
la construcción interna de dicha placa quedarían conectados entre sí
los terminales de dos en dos.
Tampoco puede ponerse en el espacio de separación entre las dos zonas
de agujeros, pues habría que abrir demasiado las patillas, con riesgo
de romperlas. |
NO
CONECTAR ASÍ EL CNY70: |
La manera correcta
de usar el CNY70 en una placa de prototipos es situándola girada 45º.
Para conseguirlo es necesario abrir ligeramente
las patillas para que alcancen los agujeros de la placa. |
FORMA CORRECTA DE CONECTAR EL CNY70: |
Dado
el diseño propuesto para el circuito, en esta disposición inclinada
tenemos una forma fácil de hacer las conexiones a las patillas, ya que
las patillas que necesitan una tensión de +5V están conectadas entre sí
gracias a la placa board. El resto se conectan a la resistencia
correspondiente, que va polarizada a masa (GND): Placa-Board:
|
5.6. PROYECTO:
'ROBOT SIGUE-LÍNEAS' CON S4A |
|
Programa para LECTURA del SENSOR CNY70: | Para
leer el valor que proporciona el Optoacoplador CNY70 podemos optar por
dos alternativas:
|
(5.6A) LECTURA DEL CNY MEDIANTE UNA ENTRADA DIGITAL |
|
Esquema: | Este montaje utiliza la entrada Digital3 para realizar la lectura del estado del CNY70 |
Montaje propuesto: | |
Programa: |
|
Mediante el anterior
programa comprobaremos cómo se realiza la lectura del CNY70 mediante
una entrada digital.
Si el sensor CNY70 detecta un color
blanco frente a él, se encenderá la salida Digital 13 (que corresponde
al LED "L" de la placa Arduino)
Observa en cada caso cómo varía el valor true/false de la entrada Digital3 en el lector de valores de la derecha. |
|
Instrucciones: |
|
(5.6B) LECTURA DEL CNY
MEDIANTE UNA ENTRADA ANALÓGICA
|
|
Esquema: | Ahora usamos la Entrada Analógica 0 para leer la información del CNY70 |
Montaje propuesto: | |
Programa: | El programa propuesto utiliza la lectura del Sensor Analógico 0. En este caso se obtiene un valor que, teóricamente, puede variar entre 0 y 1024. Puedes observar el valor de la lectura en el cuadro de sensores de la derecha. Vamos a considerar que:
En cualquier |
Instrucciones: |
|
Programa para control de MOTORES: | En
cuanto a las salidas, podemos optar por otras dos opciones:
|
(5.6C)
CONTROL DE UN SERVOMOTOR DE ROTACIÓN CONTINUA |
|
Montaje propuesto: | |
Programa: |
El PIN 8 (Digital)
es el escogido para el control del Servo.
|
Instrucciones: |
|
(5.6D) CONTROL DE UN MOTOR TIPO DC | |
Como
deseamos que el motor pueda girar en sentido Horario o Antihorario,
escogemos una configuración Push-Pull. Se trata de controlar 2 salidas Digitales, en este caso las salidas D11 y D10, de modo que:
|
|
Programa: |
|
Esquema con L293D:
|
|
Montaje con L293D: | |
Programa: |
|
Montaje con L298N: |
|
Instrucciones: |
|
5.6.E. MONTAR UN CIRCUITO CONTROLADO POR S4A CON DOS MOTORES DC. Para ello usa el programa anterior, añadiendo el control de un nuevo motor. Usaremos en los esquemas el integrado L293D, aunque la idea es fácilmente exportable al L298N. Necesitarás utilizar todas las salidas Digitales de S4A, es decir las números 10, 11, 12 y 13. | |
Esquema: |
|
Instrucciones: |
|
5.6.F.
AÑADIR UN CONTROL DE VELOCIDAD DE LOS MOTORES USANDO LA TOMA "ENABLE".
Aunque los motores dispongan de un reductor de velocidad mediante
engranajes, puede ser necesario reducir más la velocidad si queremos
que tengan mayor precisión en el seguimiento de las líneas. Para ello
se usará las tomas ENABLE que serán controladas mediante las salidas PWM
de Arduino, consiguiendo de esta forma modificar la cantidad de energía
que llega a los motores. Para ello se puede usar dos de las Salidas "Analógicas": ~5 y
~6 por ejemplo (son salidas Digitales realmente, pero variables
mediante PWM)
|
|
Esquema: |
|
ADVERTENCIA: |
Para usar las tomas
Enable en el L298N es necesario quitar los Jumpers
que las conectan a las tomas de 5V, por dos razones obvias:
|
Programa: |
Para el programa de control, ten en cuenta que en S4A un deslizador modifica el valor de una variable entre 0 y 100, en cambio los valores PWM pueden estar entre 0 y 255, pudiendo ser sólo números enteros. Por tanto habrá que hacer la correspondiente operación para pasar de un valor a otro. En el apartado siguiente tienes explicados los pasos necesarios y se muestra una imagen con los operadores sugeridos: |
Instrucciones: |
|
5.6.G.
INCORPORAR DOS SENSORES CNY70 PARA CONTROLAR EL MOVIMIENTO DEL ROBOT. En
lugar de usar el teclado para dirigir el movimiento del robot, haremos
que el robot se mueva automáticamente siguiendo una línea negra sobre
fondo blanco.
|
|
Esquema: |
|
Seguimiento de la línea: | Antes
de nada, es preciso definir cómo va a ser la línea que el robot tiene
que seguir, y a partir de ahí diseñar el funcionamiento el robot. En
teoría hay dos posibilidades:
Nuestro
circuito de pruebas:
Línea fina y sensores
separados:
Línea Gruesa y Sensores
Juntos:
|
Por tanto, según cuál de los sensores
se salga de línea negra (es
decir, que pise la línea blanca), se producirá un efecto en el motor. Usaremos dos
entradas digitales más, las tomas D2 y D3, para detectar que:
|
|
Instrucciones: |
|
5.6.H.
INCORPORAR UN INTERRUPTOR PARA QUE LOS MOTORES DEJEN DE FUNCIONAR.
En
lugar de usar la tecla "Espacio" para detener el movimiento de los
motores. Como no hay más entradas Digitales disponibles, usaremos una
entrada Analógica, la toma A0, para detectar que el interuptor está
cerrado. |
|
Esquema: |
|
Instrucciones: |
|
5.6.I. AÑADIR DOS
POTENCIÓMENTROS PARA REDUCIR LA VELOCIDAD.
Aunque los motores lleven una caja reductora, que les aporta potencia y
disminuye la velocidad, puede que ésta aún sea excesiva para que el
robor pueda seguir la línea con precisión. Por ello se ha incorporado
en el programa la posibilidad de actuar sobre las tomas Enable y
así reducir la velocidad de los motores. Sin embargo, para ello hemos
utilizado dos variables controladas mediante la pulsación del ratón
sobre un deslizador gráfico del S4A. Para reducir la dependencia del
robot del ordenador, vamos a realizar el control desde un dispositivo
electrónico situado en la placa que portará el robot. Por tanto, añadiremos
dos potenciómentros al circuito que, a través de Arduino, controlarán
el nivel de activación de los motores a través de las tomas Enable. La señal que producen los potenciómetros, al ser un valor variable, será leída por dos entradas analógicas: en el ejemplo siguiente, A4 y A5. |
|
Esquema: |
|
Instrucciones: |
Orientación del uso de un potenciómetro para controlar la "salida analógica ~5" |
5.6.J. HACER QUE LOS MOTORES SE
RALENTICEN CUANDO EL ROBOT GIRE.
Vamos a cambiar la idea que hemos aplicado hasta ahora. En lugar de
hacer que el robot gire invirtiendo el giro de uno de los dos motores,
vamos a hacer que cuando uno de
los sensores esté fuera de la zona deseada el motor correspondiente
ralentice su marcha. De esta forma tenemos varias ventajas:
|
|
Esquema: |
|
Instrucciones: |
|
5.6.K. APLICAR EL PROGRAMA QUE
RALENTIZA LOS GIROS AL L298N A MOTORES EN MODO DIRECTO. Se
trata de aplicar la idea anterior al L298N. Para realizarlo podemos
optar por dos configuraciones: En este ejercicio vamos a usar la configuración "Directa". La cual tiene las siguientes particularidades:
|
|
Montaje con L298N y motores conectados en
modo Directo: |
Vamos a usar el
siguiente circuito, en el que se observan las siguientes
particularidades:
(pulsa en la imagen para ampliar) |
Instrucciones: |
|
5.6.L. HACER QUE EL ROBOT SE
RALENTICE AL GIRAR, CON EL L298N, DEJANDO LA CONFIGURACIÓN PUSH-PULL. La idea
anterior puede aplicarse al L298N usando el montaje tipo Push-Pull, que
es el que se utilizó en el Ejercicio 5.4.B. Hay
que hacer las siguientes rectificaciones al programa al programa:
|
|
Montaje con L298N y motores conectados en
modo Push-Pull: |
(pulsa en la imagen para ampliar) Se conserva el modo Push-Pull del Ejercicio 5.4.B. pero ahora se usan las tomas Enable para controlar la velocidad de los motores. |
Instrucciones: |
|
5.7 FINALIZACIÓN: 'MONTAJE LIBRE'Con todo lo aprendido hasta ahora, trata de reproducir alguno de los programas anteriormente vistos u otro que hayas visto en algún libro o web, pero usando S4A.5.7. HAZLO DE NUEVO CON S4A:
|
MÁS SOFTWARE PARA ARDUINO
|
CONTROLADORES
DE ARDUINO Constantemente van apareciendo aplicaciones que permiten controlar placas de Arduino tanto en modo on-line como off-line. A continuación se muestran algunas:
SIMULADORES DE ARDUINO En este caso se trata de programas que simulan el funcionamiento de la placa Arduino sin necesidad de tener la placa físicamente conectada.
más información: sobre simuladores: ( http://ardutronica.bylinedu.es/home/arduino/simuladores ) |