5.5. SENSORES CON S4A
En esta práctica vamos a
tratar
con sensores del tipo "Resistivo".
Como ya vimos anteriormente, para
transmitir adecuadamente la información del sensor se suele utilizar
un Divisor de Tensión. Aunque
ya se trató anteriormente, vamos a resumir la información:
EL DIVISOR DE
TENSIÓN (resumen)
|
Un divisor de tensión es un circuito
formado por una pila (o cualquier fuente de voltaje) y dos resistencias
en serie:
- El valor de la pila
(V) se divide entre las dos
resistencias
- La cantidad de
tensión que corresponde a cada resistencia es directamente proporcional
al valor de cada una
- El máximo voltaje
que
puede tener una resistencia es el valor de la pila V
- El mínimo valor del
voltaje para
una resistencia sería 0V
|
 |
Si consideramos que una
de las resistencias es un sensor que vamos a conectar a Arduino, hay
que considerar que el valor que se
encuentre en el PIN de entrada se mide respecto a un valor común para todos
los voltajes, que es GND. Por
tanto, siempre estaremos midiendo el voltaje en la resistencia de abajo.
|

|
Dado que el sensor que
utilicemos puede estar situado arriba o abajo, vamos a estudiar algunos
casos concretos para conocer el efecto que se obtiene
|
 |
El primer caso
particular es cuando R1 =
R2.
Si usamos la fórmula anterior, observamos que el voltaje intermedio es
justo la mitad del valor de la tensión de la pila
|

|
|
|
CONFIGURACIÓN
PULL-DOWN Y PULL-UP
|
Un
caso singular de divisor de tensión es cuando una de las
resistencias
es mucho más grande o significativamente más pequeña que la otra. El
ejemplo extremo sería el caso de un interruptor que sustituye a una de
las resistencias:
- Si el interruptor
está cerrado
equivale a una resistencia
muy pequeña, prácticamente cero:
- Si el interruptor
está abierto
equivale a una resistencia
muy alta,
teóricamente infinita.
Para resolver la fórmula de forma aproximada se
puede usar un valor
muy alto en lugar de infinito (por ejemplo 10000 ohmios), frente a un
valor mucho más pequeño como si fuera R (por ejemplo R= 10 ohmios).
Cuanto más grande hagamos uno frente al otro más nos acercaremos al
resultado de la fórmula.
|
Además,
puede darse dos posibilidades:
- Configuración PULL-DOWN:
Cuando en el divisor de tensión la resistencia se sitúa abajo,
conectada a la toma de tierra, quedando el interruptor arriba.
- Configuración PULL-UP:
En este caso, la resistencia
se sitúa arriba, conectada al positivo de la pila de alimentación. Por
tanto, el interruptor se conecta abajo.
|
INTERRUPTOR
ABIERTO USANDO UNA CONFIGURACIÓN PULL-DOWN
(Resistencia de
polarización abajo)

PULL DOWN: Cuando el Interruptor no
actúa (está abierto), la resistencia "Tira hacia abajo" de la salida,
Es decir, la pone a 0V
|
INTERRUPTOR
CERRADO USANDO UNA
CONFIGURACIÓN PULL-DOWN
(Resistencia de polarización abajo)

PULL-DOWN: Al actuar el interruptor,
fuerza la salida a nivel de Tensión alto (El valor de la pila, V)
|
INTERRUPTOR
ABIERTO USANDO UNA CONFIGURACIÓN PULL-UP
(Resistencia de
polarización arriba)

PULL-UP: Cuando
el Interruptor no actúa (está abierto), la resistencia "Tira hacia
arriba" de la
salida, Es decir, la pone a Nivel de Tensión alto (el valor de la pila,
V)
|
INTERRUPTOR
CERRADO USANDO UNA CONFIGURACIÓN PULL-UP
(Resistencia de
polarización arriba)
PULL-UP: Al actuar el interruptor,
fuerza la salida a 0V
|
- 5.5.A. SENSOR CON DOS
RESISTENCIAS y S4A.
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: |
- Recuerda los
pasos necesarios para usar
S4A:
- Abre el software de Arduino
- Carga el FIRMWARE y
transmítelo
a Arduino
- Abre S4A
- A continuación fíjate en la
lectura en el sensor Analógico 5 (Analog5). ¿Cuál es su valor? Puedes
fijar uno si pinchas dos veces sobre la orden correspondiente:

- Ve cambiando la resistencia de abajo (R2)
por otros valores de los que dispongas y completa una tabla como la
siguiente:
5.5.A.R2 SENSOR CON
DOS
RESISTENCIAS y S4A
|
Valor
de R2
|
Medida
en Analog5
|
100K
|
|
22K
|
|
10K
|
512
|
1K
|
|
220
|
|
- Ahora cambia la
resistencia de arriba (R1)
y realiza una tabla similar:
5.5.A.R1 SENSOR CON
DOS
RESISTENCIAS y S4A
|
Valor
de R1
|
Medida
en Analog5
|
100K
|
|
22K
|
|
10K
|
512
|
1K
|
|
220
|
|
- ¿Qué tendencia
observas en cada tabla?
|
- 5.5.B. SENSOR CON UN INTERRUPTOR
Y UNA
RESISTENCIA más S4A.
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: |
- Abre y Cierra el interruptor
mientras te fijas en la
lectura en el sensor Analógico 5 (Analog5). ¿Cuál es su valor?
- Completa la tabla con tus
resultados:
5.5.B.1 SENSOR CON
DOS
RESISTENCIAS y S4A
|
INTERRUPTOR ARRIBA
|
Lectura
en Analog5 |
Interruptor
ABIERTO
|
|
Interruptor
CERRADO |
|
|
Instrucciones
2: |
Cambia la posición
del interruptor y observa lo que ocurre con la lectura del sensor:

5.5.B.2 SENSOR CON
DOS
RESISTENCIAS y S4A
|
INTERRUPTOR ABAJO
|
Lectura
en Analog5 |
Interruptor
ABIERTO
|
|
Interruptor
CERRADO |
|
|
- 5.5.C. SENSOR CON UN INTERRUPTOR
de INCLINACIÓN (tilt switch) más S4A.
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: |
- Observa la lectura del sensor Analógico3 en la ventana derecha de
S4A.

- Inclina ahora la placa-board
con el interruptor TILT y
observa cuándo cambia la lectura.
- Completa la tabla siguiente con
los datos. ¿En qué caso crees que el TILT está cerrado?
5.5.C SENSOR TILT y
S4A
|
POSICIÓN
|
LECTURA
EN Analog3
|
¿Interruptor CERRADO?
|
HORIZONTAL
|
|
|
INCLINADO
|
|
|
|
LDR
(LDR = Light Dependent Resistor = Resistencia Dependiente
de la Luz)
|
También denominada Fotorresistencia, es una resistencia
cuyo valor varía según la luz
que recibe.
|

|
Podemos encontrar
varios símbolos relativos a una LDR.
La variación de la resistencia
de una LDR se produce de forma INVERSA,
es decir:
- A mayor luminosidad, menor resistencia:
LUZ R
- A menor luminosidad, mayor resistencia:
LUZ R
|

|
- 5.5.D. SENSOR LDR más S4A.
5.5.D. SENSOR
LDR más S4A |
Utilizaremos una LDR en el divisor de
tensión para ver su efecto.
|
Esquema: |

|
Instrucciones1: |
- Antes de montar el circuito con Arduino, trata de
completar la tabla siguiente, según tus conocimientos de cómo actúa la
LDR y del funcionamiento del divisor de tensión:
5.5.D.1 SENSOR LDR y
S4A |
ILUMINACIÓN
|
Voltaje
en R2
(Valor de V en Analog3)
|
MUCHA
|
¿ALTO
/ BAJO?
|
POCA
|
¿ALTO
/ BAJO? |
|
Placa-Board: |

|
Instrucciones2: |
- Anota las siguientes lecturas
del sensor Analógico3
en S4A para distintas condiciones de iluminación. Como en este caso, la
lectura resulta poco estable, es mejor utilizar la orden "valor del sensor", para obtener una
magnitud que podamos leer.

5.5.D SENSOR LDR y S4A |
ILUMINACIÓN
|
LECTURA
EN Analog3
|
LUZ
DIRECTA DEL SOL O BOMBILLA
|
|
EN
EL INTERIOR DE UNA HABITACIÓN SIN ILUMINACIÓN |
|
TAPADA
COMPLETAMENTE CON LA MANO (SIN TOCAR LA LDR) |
|
- ¿Coinciden tus previsiones con
los datos obtenidos?
|
POTENCIÓMETRO Y
RESISTENCIA VARIABLE
|
Son resistencias que
pueden variarse manualmente de valor. Existen varios símbolos para el
potenciómetro. Aunque los más recomendables son los dos de arriba, como
ya se explicará.
Podemos encontrar potenciómetros
de distinta construcción y tamaño. Los más habituales son los rotativos
pero existen los lineales:

|

|
Internamente,
un potenciómetro está formado por un elemento resistivo sobre el que se
mueve un cursor. La resistencia que hay entre uno de los extremos y el
cursor, se puede variar manualmente.
|

|
Hay cierta confusión
con los símbolos y función del potenciómetro y la resistencia variable.
En realidad, una resistencia variable es un potenciómetro en el que se
usan sólo dos terminales:
- A - Uno de
los extremos y
- B - El
cursor.
- C - El otro
extremo no se usa
|

|
Por tanto, un
potenciómetro y una resistencia variable son lo mismo, pero usado de
distinta forma:
- En el uso como potenciómetro,
interesa la función de divisor de tensión,
por lo que se conservan los tres terminales
- Si sólo queremos tener una resistencia
variable, podemos anular el tercer
terminal, de alguna de las formas siguientes:
- La patilla se deja al aire,
- Se conecta con el cursor, quedando entonces anulado el último tramo de resistencia,
pues se hace un cortocircuito entre ambas patillas.
|

|
RESISTENCIA
VARIABLE
Por esta razón es más recomendable usar como símbolos de la resistencia
variable
los siguientes, teniendo en cuenta que, aunque en el circuito se suele
dibujar de la primera forma, su conexión real es otra, como se ve en la
imagen:
|

|
- 5.5.E. POTENCIÓMETRO más
S4A.
- Utilizaremos un
potenciómetro como único elemento, formando un divisor de tensión. De este modo, en
las posiciones extremas del cursor podemos conseguir que:
- R1
sea cero y R2 el máximo (en cuyo caso V2
= 5V)
- R1
sea el máximo y R2 cero (en cuyo caso V2
= 0V)
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: |
- Gira el potenciómetro y observa
la lectura del sensor Analógico5
en la ventana derecha de S4A.
- Completa la siguiente tabla con
algunos valores:
5.5.E POTENCIÓMETRO
mas S4A |
POSICIÓN
|
LECTURA
EN Analog5
|
GIRADO
TOTALMENTE EN SENTIDO HORARIO
|
|
EN
UN PUNTO INTERMEDIO |
|
GIRADO
TOTALMENTE EN SENTIDO ANTIHORARIO
|
|
|
- 5.5.F. MODIFICAR TAMAÑO DE
IMAGEN usando una LDR, con ARDUINO más S4A. En
esta práctica vamos a
utilizar el circuito con sensor LDR (práctica 5.5.D)
para conseguir que una imagen en la pantalla de S4A se modifique de
tamaño, igual que en el vídeo propuesto. En todos los casos el circuito
consistirá en un Divisor de Tensión que se aplicará a ARDUINO de la forma ya explicada:
5.5.F.
MODIFICAR TAMAÑO MEDIANTE LDR más S4A |
Esquema:
|

|
Instrucciones: |
Vamos a intentar repetir
el ejemplo propuesto en el vídeo:
- Prepara el Firmware de S4A y transfiérelo a la placa de
Arduino. Después abre S4A.
- Realiza el circuito propuesto arriba, sustituyendo
una de las resistencias por alguno de los elementos estudiados: Interruptor, LDR, o potenciómetro.
- Actúa sobre dicho elemento para ver en S4A cómo varía
el valor en la entrada analógica escogida.
- Siguiendo las instrucciones a partir del minuto 3 del
vídeo: Crea una variable y asígnale un valor proporcional al que
llega por dicha entrada analógica.
- Añade un nuevo personaje y crea un programa que
cambie su tamaño en función de la información recibida por el sensor.
Varía la proporción de modo que se note la diferencia de tamaño al
variar la incidencia de la luz en la LDR.
|
- 5.5.G. MODIFICAR POSICIÓN DE UN PERSONAJE (SPRITE)
MEDIANTE UN POTENCIÓMETRO: EL PERSONAJE SUBE Y BAJA. Ahora trata de conseguir que un nuevo personaje
cambie su posición vertical al girar un
potenciómetro.
5.5.G. POSICIÓN
DE UN SPRITE en función de un POTENCIÓMETRO más S4A
|
Esquema: |

|
Placa-Board: |

|
Instrucciones: |
- Monta el circuito y conecta S4A
(previa carga del Firmware, si no lo habías
hecho ya)
- Comprueba en S4A que la lectura
de la entrada escogida cambia de valor entre 0 y 1024.
- Usa una variable para guardar el dato
de esta lectura. Debes realizar los ajustes necesarios en la variable
para que su resultado sea un
valor entre -180 y 180 (las coordenadas de la pantalla de
Scratch)
- Escoge un nuevo personaje
(sprite) y haz que varíe su posición vertical, en función de la
variable escogida, que a su vez, depende del cambio producido en un
potenciómetro.
- Mejora
el programa, haciendo que otros objetos se desplacen por detrás,
pareciendo de este modo que el personaje vuela. Para ayudarte a
completar el reto usa este tutorial.
|
- 5.5.H. MINI-PROYECTO:
INSTRUMENTO MUSICAL SIMPLE. En
esta práctica Utilizando
los conceptos aprendidos, construye un instrumento digital, de modo que
al activar alguno de los pulsadores suene un sonido distinto. Usa al
menos 3 pulsadores.
5.5.H. MINI-PROYECTO: INSTRUMENTO MUSICAL SIMPLE.
|
Esquema: |

|
Instrucciones: |
- Monta el circuito y conecta S4A
(carga el Firmware previamente)
- Comprueba en S4A las lecturas
en las entradas
escogidas. Todas ellas cambiarán entre 0 y 1024 si se activa el
pulsador correspondiente.
- Crea un programa en el que, se reproduzca un sonido si alguna de
dichas entradas es activada (por ejemplo, si su valor es > 50).
- A cada tecla se le asignará un sonido
distinto (nota musical o instrumento).
|
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:
- Entender cómo funciona un sensor del tipo
"optoacoplador", que es el que se usa para detectar el cambio de color
de la línea.
- Emplear
la información del sensor para producir un cambio en el giro de un
motor (ya sea un servomotor de rotación continua o un motor DC)
- Utiñizar lo anterior para conseguir que un robot siga
una línea de color negro trazada sobre una superficie blanca, o más
clara.
EL
OPTOACOPLADOR CNY 70
|
Este dispositivo
está formado por dos componentes electrónicos con propiedades ópticas:
- EMISOR:
es un diodo que, cuando está activado, emite luz infrarroja, no visible
por el ojo humano.
- RECEPTOR:
es un fototransistor. Este elemento se comporta como un transistor,
permitiendo en mayor o menor grado el paso de corriente desde el
colector hasta el emisor, dependiendo de la LUZ que incide en su base.
Es decir, es un transistor que es activado por la LUZ, no por la
corriente de BASE.
|

|
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:
- El color de la superficie reflectante: Cuanto
más clara sea, más luz se reflejará y, por tanto, mayor será el valor
de la corriente que deja pasar el transistor, que se traduce en mayor
voltaje a la entrada de Arduino.
- La distancia a la superficie reflectante. Según
las hojas de características del
CNY70, el valor de esta distancia debe
situarse entre 0 y 5mm, siendo óptimo mientras sea menor de 0,5mm.
En
el circuito propuesto, el valor de 10K indicado para la resistencia
del PULL-DOWN permite que el CNY 70 funcione sin problemas y con
precisión a una
distancia de la superficie de entre 5 y 7mm (0,5 cm a 0,7cm)
|

|
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:
- Hacer una lectura mediante un PIN digital: El
resultado será un nivel HIGH (alto) o LOW (bajo)
- Leer el valor mediante una entrada analógica:
Obtendremos un valor entre 0 y 1024.
A continuación vamos a estudiar cómo serian los programas en cada caso:
|
(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: |
- Monta el circuito y
conecta S4A (carga el Firmware previamente)
- Copia el
programa y comprueba su funcionamiento:
- Acerca
una tarjeta al CNY70 que tenga una zona blanca y otra negra.
- Comprueba
la diferencia al pasar de la zona blanca a la negra
- Prueba
con varias distancias de la tarjeta al CNY70
- ¿Qué
ocurre si no se pone ninguna tarjeta frente al CNY70?
- ¿Y si se
enfoca una luz directa al CNY70?
|
|
(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:
- Si la lectura
es superior al valor 500,
consideraremos que la luz recibida es suficientemente clara (color
claro). Esta circunstancia la indicamos haciendo que se encienda el LED
"L" (que está internamente conectado al PIN 13).
- Si la lectura
es inferior a 500,
entonces interpretaremos que la luz reflejada no es lo bastante clara
(color oscuro). En este caso, lo ponemos de manifiesto apagando el LED
"L" (correspondiente al estado del PIN 13)
Este valor límite de 500 habrá que
adaptarlo a las condiciones reales
de luz, distancia a la superficie reflectora, color de las bandas que
tiene que seguir el robot, características reflectoras... En
definitiva, ajustarlo de forma experimental.
En cualquier
|
Instrucciones: |
- Monta el circuito y
conecta S4A (carga el Firmware previamente)
- Copia el
programa y comprueba su funcionamiento:
- Usa una
con una zona blanca y otra negra y pásala a unos 5mm del CNY70
- Comprueba
la diferencia al pasar de la zona blanca a la negra:
- ¿Qué
valor se obtiene si el CNY70 está frente a la zona Negra?
- ¿Y qué
valor se lee si es la zona Blanca la que pasa delante del CNY70?
- Experimenta
con varias distancias de la tarjeta al CNY70:
- Si se
quita la tarjeta ¿Qué lectura se obtiene?
- ¿Es
más preciso el resultado con la tarjeta cerca o lejos?
|
Programa
para control de MOTORES: |
En
cuanto a las salidas, podemos optar por otras dos opciones:
- Usar servomotores de rotación continua.
- o utilizar motores DC
En cada caso el programa sería
diferente. |
|
|
|
(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: |
- Monta el circuito, carga
el Firmware y después abre S4A
- Comprueba
el funcionamiento del programa.
|
|
|
|
|
|
(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:
- Para el sentido Horario
está activa una salida (Push) y la otra desactivada.
- Para el sentido Antihorario
la primera salida está inactiva y la otra está activa (Pull).
- Se añade un tercer caso para detener el motor,
lo que se consigue con ambas salidas paradas.
Para el montaje podemos optar por un integrado L293D
o por una placa de control de motores tipo L298N
|
Programa: |
El programa en S4A es exactamente igual para ambos montajes, tanto si
se usa el integrado L293D como si se utiliza la placa L298N: |
Esquema con L293D:
|

|
Montaje
con L293D: |

|
Programa: |
El programa en S4A es exactamente igual para ambos montajes,
tanto si
se usa el integrado L293D, como en el caso recién analizado, como si se
utiliza la placa L298N, tal como aparece en el montaje siguiente: |
Montaje con L298N:
|
 |
Instrucciones: |
- Monta uno de los dos
circuitos (o ambos) y conecta S4A (carga el Firmware previamente)
- Comprueba
el funcionamiento del programa.
|
5.6. INVITADO: 'ROBOT SIGUE-LÍNEAS USANDO S4A' CON DAVID OTERO.
(Ejercicios):
- Vamos a tratar de reproducir
el programa del video. Para ello vamos a dividir el problema en varias
fases:
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: |
- Monta el circuito
indicado, carga el Firmware de S4A y ábrelo.
- Realiza
un programa que controle, mediante el teclado, el sentido de giro de
los dos motores DC. Recuerda lo que se dijo más arriba sobre los movimientos del
Robot y trata de
reproducirlos, de modo que el robot:
- Avance
(Ambos motores giran haciendo avanzar al Robot)
- Gire a la derecha
(el motor derecho cambia de sentido)
- Gire a la izquierda
(el motor izquierdo cambia de sentido)
- Añade una
instrucción para poder parar ambos
motores mediante la tecla "Espacio".
|
|
|
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:
- Si no se quitan no se puede conectar nada
en la patilla ENABLE (que es la más cercana al borde)
- Si se dejan conectadas a la toma de 5V, el
motor funcionará
siempre al máximo, resultando igual que si se escogiera un valor de 255
para la toma ENABLE.
|
|
 
|
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: |
- Monta el circuito
indicado, carga el Firmware de S4A y ábrelo.
- Al programa anterior, añádele una nueva
función para poder controlar las
tomas Enable del L293D o el L298N. Para ello te sugiero lo
siguiente:

- Crea una variable que servirá para
modificar el valor de una toma Enable (por ejemplo EnableA)
- Muestra la variable EnableA en la pantalla
y visualízala en modo "deslizador", para poder variar su valor desde la pantalla de S4A.
- Ahora
crea una instrucción en la que
se aplique continuamente un valor
dado a la "salida analógica ~5" (realmente es digital PWM). Usa, por ejemplo, el máximo valor posible:
255
- Haz que
este valor, en lugar de ser una
cantidad fija, sea el resultado de operar con la variable EnableA,
de modo que conviertas esta variable,
cuyo rango varía de 0 a 100, en otro
valor de rango 0 a 255.
- Como las
tomas PWM sólo admiten valores enteros,
añade una función que "redondee"
el valor anterior.
- Repite los pasos anteriores para la otra
toma Enable (EnableB), que será controlada por la "salida analógica ~6
"
(digital
PWM en realidad).
|
|
|
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:
- Que la línea sea más delgada que la
distancia entre los sensores. En este
caso, los sensores quedan fuera de la línea y en el estado de avance
normal deben estar sobre fondo blanco. Este va a ser nuestro caso,
pues el circuito se realizará con cinta aislante, cuyo grosor no llega
a 2cm (~19mm), sobre un fondo blanco (aunque lo contrario, línea blanca sobre
fondo negro, también es posible). Cada CNY70 mide unos 7mm de ancho,
por lo que la línea del fondo lo abarcaría completo.
Nuestro
circuito de pruebas:
Línea fina y sensores
separados:
- Que la línea sea más gruesa que el
conjunto de los dos sensores.
En la posición de avance normal, ambos sensores estarán sobre la línea
negra. En este caso, la línea tendría que ser de unos 3cm de grueso, lo
que obliga a situar los sensores muy juntos:
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:
- El sensor está sobre fondo blanco (por
tanto, el CNY recibe un reflejo de luz)
- El sensor está sobre fondo negro (Y en
ese caso, el CNY no recibe el reflejo de luz)
En cada caso, según cuál de los
sensores se salga hacia el fondo blanco, se producirá un efecto en el
motor correspondiente. |
Instrucciones: |
- Monta el circuito
indicado, carga el Firmware de S4A y ábrelo.
- Cambia el
programa anterior para que, dependiendo de lo que cada sensor CNY70
detecte, se produzca un Avance, un Giro a la derecha,
o un Giro a
la izquierda del robot, según las indicaciones del apartado
anterior.
- Se puede
añadir que ambos
motores se paren si los dos sensores están fuera de la línea
(sobre fondo blanco, por tanto)
|
|
|
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: |
- Monta el circuito
indicado, como se observa, se ha colocado el interruptor con
una resistencia en modo Pull-down,
es decir, que "Tira hacia abajo" cuando el interruptor no está
actuando. En otras palabras, que pone A0 a un nivel bajo si el
interruptor está abierto.
- carga el Firmware en S4A.
- Abre el
programa para S4A
anterior y cambia la opción de que los motores se paren al pulsar la
tecla "Espacio", haciendo en su lugar que se paren cuando se
el interruptor esté cerrado (que será cuando se detecte un nivel
alto en A0).
|
|
|
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: |
- Monta el circuito
de arriba,carga el Firmware de S4A y ábrelo.
- Modifica
el programa de S4A
anterior, de la forma siguiente:
- Elimina las variables EnableA y EnableB.
- Modifica
la instrucción en la que se
aplicaba un valor
dado a las "salidas analógicas ~5 y ~6" quitando
todo lo referido a EnableA y EnableB.
- Las entradas analógicas A4 y A5, a las
que se conectan los potenciómetros, pueden variar entre 0 y 1023, en cambio el
rango de las "salidas analógicas ~5 y ~6"
varía de 0 a 255 (al ser PWM). Por tanto, habrá que ajustar esta divergencia mediante
una operación
que convierta cada entrada analógica (rango 0-1023) en una señal
"analógica PWM" (rango 0-255 en números enteros). En la imagen
tienes una orientación de las operaciones
necesarias con la entrada analógica A5 y la salida ~5.
- Repite la operación
con la entrada analógica A4 y la salida ~6.
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:
- Conseguimos que el robot disminuya su
velocidad de giro, con lo que se gana precisión.
- Evitamos que la ralentización dependa
de unos potenciómetros, que no podemos modificar sobre la marcha.
- Simplificamos
el circuito, ya que como los motores no van a invertir su sentido, ya
no hace falta que tengan configuración Push-Pull. (Esto sirve
particularmente para el circuito con L293D aunque, como ya veremos, en
el L298N puede mantenerse las conexiones Push-Pull pues resulta más
fácil el conexionado).
Como
se ve en el circuito siguiente, los cambios son:
- Hemos
aplicado las salidas
de los CNY70 a las entradas Analógicas A4 y A5, en
las que antes iban los potenciómetros.
- Además, se ha usado sólo las salidas
Digitales D11 y D12 de Arduino para controlar los motores, ya
que éstos se conectan en configuración "Directa".
|
Esquema:
|
|
Instrucciones: |
- Monta el circuito
de arriba,carga el Firmware de S4A y ábrelo.
- La lógica
del programa es muy similar al caso anterior, pero recuerda tener en
cuenta:
- Los motores se activarán desde el
principio, permaneciendo así salvo que se cierre el interruptor.
- Si se cierra el interruptor, los motores se
pararán.
- Las entradas analógicas A4 y A5, a las
que se conectan los CNY70, pueden variar
entre 0 y 1023, en cambio las "salidas
analógicas ~5 y ~6"
varían de 0 a 255 (al ser PWM). De nuevo debes incluir una operación que
convierta cada entrada analógica (rango 0-1023) en una señal "analógica
PWM" (rango 0-255 en números enteros).
|
|
|
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:
- Conectar los motores en modo "Directo".
- o mantener la configuración "Push-Pull".
En este ejercicio vamos a usar la
configuración "Directa".
La cual tiene las siguientes particularidades:
- Aunque en teoría parecería que nos
ahorramos cables, tenemos que conectar las 4 tomas de los motores
(IN1, IN2, IN3 e IN4),
ya sea a una salida de Arduino o a masa.
- Por tanto necesitamos disponer de hasta
4 tomas de tierra, contando tres del L298N y la del circuito de las
CNY70. Recordemos que Arduino tiene sólo tres tomas de tierra.
- Debes quitar los Jumpers de las tomas
Enable para que se pueda realizar el control de la velocidad mediante
ellas.
|
Montaje con L298N y motores conectados en
modo Directo:
|
Vamos a usar el
siguiente circuito, en el que se observan las siguientes
particularidades:
- El circuito es
similar el anterior para el L293D pero aplicado al L298N.
- Como se observa, dos
de las tomas para motor se conectan a GND.
- Fíjate que las entradas Analógicas usadas no son
las mismas que antes:
- Se conecta los CNY70 a las entradas analógicas A3 y
A4.
- El interruptor está
conectado con una resistenca Pull-Down a la entrada analógica A5, de
modo que:
- cuando el interruptor está abierto, la señal
aplicada en A5 es de nivel bajo (0).
- Si el interruptor está cerrado, la señal
que detecta la entrada A5 tiene el nivel más alto (1023).

(pulsa en la
imagen para ampliar)
|
Instrucciones: |
- Monta el circuito
propuesto,carga el Firmware de S4A y ábrelo.
- Modifica el programa de S4A
diseñado en el ejercicio 5.6.J anterior en función de las entradas y
salidas utilizadas y comprueba su funcionamiento.
- Añade una
opción al programa para que ambos
motores se detengan cuando el interruptor esté desactivado:
- Si
la entrada analógica A5 detecta un valor bajo (< 500 por ejemplo),
se desactivará los motores aplicando un "0" en las tomas Enable.
Recuerda que las tomas Enable están controladas por las "salidas analógicas ~5 y ~6".
|
|
|
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:
- Los motores estarán activados
permanentemente, configurando su giro de forma que el robot
avance continuamente.
- Si
se cierra el interruptor, los motores se pararán.
- Las entradas
analógicas A3 y A4, a las que se conectan los CNY70, controlarán la
activación de los motores, mediante las tomas EnableA y EnableB.
Esta activación será proporcional
a la señal proporcionada por los CNY70, como en los dos casos
anteriores.
- Las tomas Enable se pondrán a 0 cuando el
interruptor esté abierto.
|
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: |
- Monta
el circuito
indicado,carga el Firmware de S4A y abre este
programa.
- Modifica el programa del ejercicio
anterior para conseguir lo siguiente:
- Los
motores, aunque estén conectados en Push-Pull, no van a cambiar su
sentido. Por tanto, configura
las salidas Digitales correspondientes (10, 11, 12 y 13) para que el
robot avance siempre.
- Los
sensores CNY70, a través de las entradas Analógicas A3 y A4 son las que
van a influir en la velocidad de los motores en el momento en que el
robot se salga de la línea. Antes de nada debes tener claro, según el
grosor de la línea, la posición
de los CNY70. Recuerda las instrucciones de seguimiento de la línea. Cuando tengas claro
la situación de los CNY70 que vas a usar, debes modificar el programa
para que:
- Cuando uno de los sensores detecte que
el robot se sale del camino trazado, el motor correspondiente debe
disminuir su velocidad para que el robot gire en el sentido correcto
y se sitúe de nuevo en la posición correcta.
- Cada
sensor produce una señal analógica que Arduino lee en la entrada
correspondiente (A3 o A4), con un valor de 0 a 1023.
- Las
salidas "salidas analógicas PWM" ~5 y ~6 que se van a aplicar a las tomas
Enable varían entre 0 y 255.
- Por
tanto, debes hacer una operación
matemática para trasladar la lectura de cada toma Analógica A3/A4 a la
salida ~5 / ~6
correspondiente.
- Añade una
opción en el programa para que los
motores se detengan al desactivar el interruptor:
- Cuando la entrada analógica A5
detecte un valor bajo, se desactivará ambos motores mediante las tomas
Enable. Recuerda que las "salidas
analógicas ~5 y ~6"
controlan a las tomas Enable.
|
|
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:
- Escoge alguno de los ejercicios
del módulo anterior (Curso de Arduino del 1 al 3)
- Realiza el montaje.
- En lugar de realizar el
programa con el IDE de Arduino, carga el firmware de S4A
y transfiérelo a la placa Arduino.
- Crea el programa necesario con
S4A.
- Comprueba que el funcionamiento
es el deseado. En caso contrario, realiza los cambios o ajustes
necesarios.
|
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:
mBLOCK (http://www.mblock.cc/) este programa, inicialmente concebido
para controlar el robot de makeblock, es muy útil para controlar la placa
Arduino, en la que se basa makeblock. Su gran ventaja es que utiliza la misma
base de Scratch, siendo compatible con el mismo (ya sea la versión 2 o la 3), con lo cual resulta familiar a quien
conozca este programa pero, al contrario de lo que ocurre con
Scratch for Arduino (S4A), permite transferir
el programa a la placa, pudiendo así hacerla funcionar desconectada del
ordenador. Gratuito.
VISUALINO
(http://www.visualino.net/)
es una aplicación que permite programar por bloques, generándose
automáticamente el código correspondiente para subirlo a la placa de
Arduino. Su gran aportación es el aprendizaje de los fundamentos de la
programación, ya que los bloques se amoldan exactamente a la forma en
que se usa el código del IDE de Arduino. El paralelismo
entre los bloques y el código es total. Además de esto, también tiene predefinidos
ciertos bloques (para el uso de LEDs, servomotores, sensores de
ultrasonidos, LDR...) que pueden usarse
para facilitar la programación. Gratuito.
ARDUINOBLOCKS (http://www.arduinoblocks.com/web/) : Un programa creado por Juan José López Almendros. Una opción fantástica si nuestro ordenador tiene aceso a internet y
soporta los plugins necesarios. El programa cuenta con multitud de tipos de sensores y
actuadores, con una representación visual similar a Visualino pero con
iconos que ayudan a identificar fácilmente el componente.
Al ser online, frecuentemente ofrece nuevos recursos y mejoras, lo que
puede ser un inconveniente en un sistema operativo antiguo (como
Windows XP), ya que al no estar actualizado, puede ser incapaz de
hacerlo funcionar. El trabajo es
fundamentalmente por bloques, pero también permite visualizar el código
resultante.
De este modo, aunque
los plugins para conectar la placa no funcionan en Windows XP puede
usarse el programa copiando el código resultante en el IDE de Arduino. Además, en los sistemas operativos que funciona correctamente, puede formarse grupos de
clase, enviar trabajos y buscar proyectos de otros usuarios, debiendo
estar registrado para poder realizar estas funciones. Hay que descargar
el programa ArduinoBlocks_connector_4
(que funciona desde Windows XP) para poder conectar nuestra placa. La
versión proporcionada es para Windows, pero existe versión para MacOS,
Ubuntu y RaspberryPi. Gratuito. Muy recomendable. Además hay mucho material en la web sobre ArduinoBlocks:
- La propia
web de ArduinoBlocks proporciona recursos variados en forma de libros
(PDF) genéricos sobre la programación de Arduino con ArduinoBlocks:
- La tienda de INNOVADIDACTIC ofrece otros libros en PDF sobre placas o robots que ellos venden que pueden resultar interesantes:
- Un recurso importante es la web de DIDACTRÓNICA,
que incluye cursillos online con explicaciones y vídeos:
- ARDUINO CREATE ( https://create.arduino.cc/editor
) es una versión del Arduino IDE pero pensado para ser usado on-line.
Para utilizarlo debe descargarse un driver que permite controlar la
placa conectada al ordenador. Gratuito.
- BITBLOQ ( http://bitbloq.bq.com/
) es un programa creado por la empresa española BQ que permite manejar
placas del tipo Arduino. Se puede programar de forma gráfica con
bloques similares a los de scratch. Se necesita tener instalado un
driver llamado Web2Board para
controlar la placa, lo cual se indica en el momento de
querer transferir el programa a dicha placa. Puede usarse on-line o
descargarse para ser usado off-line. Muy bueno. Gratuito.
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.
TINKERCAD ( https://www.tinkercad.com/
) en principio se
trata de un programa de diseño 3D on-line pero que tiene una opción
denominada "Circuits" que nos lleva al apartado de diseño de
circuitos eléctricos y electrónicos que pueden ser simulados en el
mismo programa. Incorpora entre sus componentes placas board de diverso
tamaño y una
placa de Arduino
que se puede programar
y simular mediante código o usando bloques de instrucciones como
en Scratch o S4A. En este caso no sólo
es un simulador sino que puede
incluso cargarse el programa en la placa de Arduino si la
conectamos. Permite una visualización realista de los componentes y de
las conexiones en la placa board de forma similar
a la que presenta Fritzing. Requiere hacerse una cuenta de usuario. Hay que iniciar sesión para acceder
al diseño tanto de objetos 3D como de circuitos. Muy bueno.
Gratuito. NOTA:
Tinkercad tiene problemas con equipos antiguos con Windows XP a causa
de que navegadores o tarjetas de video anbtiguas no tienen activada la
opción de WebGL. En algunos casos es posible solucionarlo. En este enlace tienes algunas posibles soluciones.
- VIRTUALBREADBOARD ( http://www.virtualbreadboard.com/
)
es un programa off-line (hay que descargarlo) que ocupa poco espacio y
permite simular placas de Arduino de forma gráfica fácilmente. El
inconveniente es que no es gratuito: De pago.
- SIMULIDE
( http://simulide.blogspot.com.es/
)
este software off-line que permite simular circuitos electrónicos
incluido Arduino. Está aún en desarrollo, de modo que actualmente no
cuenta con una consola para escribir el programa y hay que cargarlo
aparte desde el IDE de Arduino. Igualmente, necesita un driver para
detectar la placa. Con el tiempo se supone que mejorarán sus
características. Gratuito.
- UNOARDUSIM ( https://www.sites.google.com/site/unoardusim/ )
este programa off-line puede simular la placa Arduino UNO. Su
interfaz no es muy amigable ya que no se ve el circuito montado sino
que tenemos una variedad muy limitada de componentes que asignamos
numéricamente a las entradas/salidas de Arduino. Está aún en
desarrollo. Gratuito.
más información: sobre simuladores: ( http://ardutronica.bylinedu.es/home/arduino/simuladores
) |
|