Libro



CURSO DE ARDUINO 4

Seguimos conociendo las posibilidades de la placa de Arduino.  Recuerda que puedes acceder a la web deArduino a través de la dirección: www.arduino.cc
Para realizar las prácticas con Arduino necesitamos el material electrónico que se  describe en la siguiente LISTA DE MATERIALES.
Muchas webs ofrecen circuitos y programas para experimentar con Arduino. Una de ellas, de la que hemos obtenido información es: www.fritzing.org siendo muy recomendable el programa libre Fritzing, que puede descargarse desde su web y que hemos utilizado para los diseños de circuitos con placa de prototipos. Este programa permite diseñar circuitos mediante placa de prototipos, obteniendo a la vez su esquema y pudiendo usar el diseño para crear una placa PCB (placa de circuito impreso) que puede fabricarse a partir del modelo resultante, e incluso encargarse a la web de Fritzing para que ellos lo fabriquen (previo pago en este caso, claro). También es muy interesante el KIT Fritzing basado en Arduino, pues contiene casi todo el material que se necesita para las prácticas propuestas.
Como en todos los capítulos, la idea del curso y los archivos de video han sido obtenidos de www.miriadax.net, de un curso de Xnergic-TecnoCampusMataró (TCM) dirigido y presentado por Marco Antonio Rodríguez, al cual agradecemos calurosamente su esfuerzo.

Scratch for Arduino (S4A)

SCRATCH
Se recomienda ver todos los videos en PANTALLA COMPLETA y usar unos AURICULARES. Los videos imprescindibles para realizar el curso se marcan con una tabla con fondo Naranja. Los ejercicios aparecen en color Verde.

MÓDULO 5. SCRATCH FOR ARDUINO (S4A)

(Pincha en los enlaces para acceder al canal de Youtube y ver los videos)

5.1 INTRODUCCIÓN
Aprenderemos 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).
En ese mismo lugar podemos encontrar información de cómo instalarlo, diversos circuitos de ejemplo y el enlace al programa necesario y este manual de S4A (en español) que explica la instalación y muestra muchos ejemplos.

S4A tiene predefinidas las siguientes ENTRADAS/SALIDAS especializándolas en algunos casos para elementos concretos. Esta configuración está aún desarrollándose, de modo que puede variar de una versión a otra de S4A:
  • SALIDAS DIGITALES:  Pines digitales 10, 11, 12  y 13
  • SALIDAS ANALÓGICAS:  Pines "digitales" ~5, ~6 y ~9 (son salidas PWM realmente)
  • SALIDAS PARA SERVOMOTORES DE ROTACIÓN CONTINUA:  Pines "digitales" 4, 7 y 8
  • SALIDAS PARA SERVOMOTORES "Normales":  Pines "digitales" 4, 7 y 8
  • ENTRADAS ANALÓGICAS (Sensores Analógicos):  Todos los Pines Analógicos A0, A1, A2, A3, A4, A5
  • ENTRADAS DIGITALES (Sensores Digitales):  Pines digitales 2 y 3
Antes de nada asegúrate de tener la última versión que funcione en tu sistema. En el caso de WindowsXP está comprobado el funcionamiento de los enlaces siguientes. Archivos actualizados para descargar Scratch for Arduino, Drivers y Firmware:
Para instalar S4A es necesario seguir los siguientes pasos:
  1. Descargar S4A de la página oficial (por ejemplo, este enlace para Windows)
  2. Hay que tener descargado e instalado el programa de Arduino (Ya lo tenemos, pero siempre es bueno comprobar si hay nueva versión: software Arduino)
  3. Es recomendable instalar Drivers para usar Arduino en Windows, incluso si Arduino ya nos funcionaba, pues en ocasiones es necesario para que funcione S4A. Puedes descargarlos en la página de S4A: Drivers de Arduino para Windows. Hay que descomprimir la carpeta y ejecutar la versión adecuada a nuestro Windows.
  4. Ahora hay que abrir el archivo con el Firmware , que es un programa que hay que transferir a la placa de Arduino. Procede así:
    • Accede al Firmware. Se abrirá una nueva ventana con un programa en modo texto.
    • Copia el texto y abre el software de Arduino
    • Borra el texto que está escrito y pega en su lugar el programa con el Firmware. Guarda el resultado en una carpeta para tenerlo a mano siempre
    • Conecta la placa de Arduino al puerto correspondiente. Comprueba que está correctamente conectada.
    • Verifica el FIRMWARE: y, si es correcto:
    • Cárgalo en ARDUINO:
  5. Ahora puedes abrir por fin S4A
Una vez realizado el proceso, S4A debe detectar la placa y empezar a mostrar cómo varían los sensores, que son activados automáticamente.
Ventana derecha:



En la parte izquierda de la ventana aparecen los comandos principales, que incluyen las órdenes relacionadas directamente con las Entradas y Salidas de la placa:
Ventana Principal:

5.2. INSTALACIÓN Y PUESTA EN MARCHA DE S4A (Ejercicios):
  • 5.2.A. COMPROBACIÓN DE ENTRADAS Y SALIDAS. Conecta la placa de Arduino y abre S4A. Comprueba los PINES que corresponden a las distintas Entradas y Salidas, desplegando el cuadro de diálogo de cada una, como aparece en la imagen anterior. Si no coincide con lo anterior, realiza una nueva tabla.
      • SALIDAS DIGITALES:  Pines...
      • SALIDAS ANALÓGICAS:  Pines...
      • SALIDAS PARA SERVOMOTORES DE ROTACIÓN CONTINUA:  Pines...
      • SALIDAS PARA SERVOMOTORES "Normales":  Pines...
      • ENTRADAS ANALÓGICAS (Sensores Analógicos):  Pines...
      • ENTRADAS DIGITALES (Sensores Digitales):  Pines...

  • 5.2.B. PARAR Y REANUDAR CONEXIÓN. Comprueba qué ocurre al utilizar estas órdenes siguiendo estos pasos:
    • Haz doble click en "Parar conexión"  y observa qué ocurre en la ventana de la derecha de S4A.
      • En este estado, haz doble click en las órdenes "Valor del Sensor" y"¿Sensor presionado?" para ver qué ocurre. Anota el valor que obtienes, por ejemplo:

5.B.1 CONEXIÓN PARADA
SENSOR ESCOGIDO:
VALOR OBTENIDO
Valor del sensor (Analog0)

¿sensor Digital2 presionado?



    • Ahora haz doble click en "reanudar conexión"  y vuelve a comprobar el estado de los sensores en la ventana de la derecha.
      • Vuelve a comprobar el estado de los sensores, usando las órdenes anteriores. ¿Qué valor obtienes en cada caso?
5.B.2 CONEXIÓN ACTIVA
SENSOR ESCOGIDO:
VALOR OBTENIDO
Valor del sensor (Analog0)

¿sensor Digital2 presionado?




  • 5.2.C. ESCRITURA EN EL LED "L" (DE "LOAD" O CARGA)
      • Vamos a comprobar la comunicación con la placa a través de S4A. Para ello activa y desactiva el LED "L" asociado al PIN Digital 13.

5.2.C.1. ESCRITURA DESDE S4A EN EL PIN 13 (PIN "L" - LOAD O DE CARGA)
Instrucciones:
  1. Carga el FIRMWARE en Arduino.
  2. Abre S4A
  3. Sitúa las siguientes órdenes en la ventana de Programas y haz doble click para ver su efecto.
  4. El resultado debe observarse en el LED "L" de Arduino, que corresponde al PIN Digital 13.



  • 5.2.D. INTERMITENCIA EN EL LED "L"
      • Vamos a realizar un programa completo en S4A que consiste en una secuencia intermitente.

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:
  1. La intermitencia se iniciará al presionar la Tecla Espacio.
  2. Se repetirá 10 veces.
  3. El LED estará encendido durante 1/2 segundo
  4. Después se apagará durante otro 1/2 segundo
  5. El ciclo se repetirá 10 veces, acabando en estado "Apagado"


  • 5.2.E. INTERMITENCIA EN EL PIN 13
      • Con este circuito, comprobamos que la señal en el LED "L" es la misma que se transmite al PIN 13.
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.F. APLICACIÓN DE S4A AL PROGRAMA DEL S.O.S EN MORSE (ver práctica SOS anterior)
    • Vamos a utilizar el mismo circuito, pero añadiendo una característica más. Se trata de reproducir una señal de S.O.S. en código Morse:  ... _ _ _ ... de la forma siguiente:
      • Además del programa anterior, que ocurría al pulsar la Tecla espacio, vas a añadir al programa anterior otra opción:
      • La intermitencia se iniciará al presionar la Tecla 1 (el número 1 del teclado), con la siguiente secuencia:
        1. El LED parpadeará 3 veces con ráfagas Cortas
        2. A continuación habrá una pausa
        3. El LED parpadeará 3 veces pero con ráfagas Largas
        4. Nueva pausa
        5. El LED volverá a parpadear 3 veces con ráfagas Cortas


  • 5.2.G. APLICACIÓN DE S4A AL PROGRAMA DEL SEMÁFORO (ver práctica SEMÁFORO anterior)
    • Usando un montaje similar al SEMÁFORO de una práctica anterior, vamos a reproducir su funcionamiento mediante S4A.
5.2.G. APLICACIÓN DE S4A AL PROGRAMA DEL SEMÁFORO
 Esquema:

Proto-Board:
Instrucciones:
  • Crea en S4A un nuevo programa que realice la secuencia típica de un semáforo:
    1.  La secuencia se iniciará al pulsar "La bandera Verde"
    2. Comienza el LED Verde encendido durante 3 segundos (luego se apaga).
    3. A continuación parpadea 5 veces el LED amarillo (termina apagándose).
    4. El LED rojo se enciende otros 3 segundos (luego se apaga)
    5. Se repite indefinidamente la secuencia
  • PREGUNTA: ¿Por qué no podemos usar los mismos PINES que utilizábamos en la práctica anterior?






5.3 MANEJO DE SERVOMOTORES CON S4A. ROBOT CON SERVOMOTORES
Vamos a realizar varias prácticas que utilicen las posibilidades de control de Servomotores del programa S4A.
    • 5.3.A. CONTROL DE UN SERVOMOTOR a través de S4A. Realizaremos un programa igual que el del video, para hacer que un servomotor cambie de 0º a 180º:
    • Al pulsar la Tecla Espacio, el servomotor se posicionará en
    • Pasado un segundo volverá a 180º
    • El servomotor se conectará al PIN8 de Arduino (recuerda que sólo se pueden usar algunos pines para manejar Servomotores "normales", en nuestro caso, 4, 7 u 8)
    • Antes de realizar el montaje del servomotor, recuerda el patillaje de los distintos modelos

5.3.A. CONTROL DE UN SERVOMOTOR mediante S4A
Esquema:
Placa:
Instrucciones: Recuerda los pasos necesarios para usar S4A
  1. Abre el software de Arduino
  2. Carga el FIRMWARE y transmítelo a Arduino
  3. Abre S4A y crea el programa necesario


    • 5.3.B. MODIFICACIONES en el programa del Servo. Cambia el programa para incluir más posiciones del servomotor:
      • Además del uso anterior de la Tecla Espacio (posición 0º y, tras un segundo, posición 180º), crea las órdenes para que el servomotor se posicione en las siguientes orientaciones:
        • Tecla 0: posición 0º
        • Tecla 1: posición 45º
        • Tecla 2: posición 90º
        • Tecla 3: posición 135º
        • Tecla 4: posición 180º

    • 5.3.C. USO DE INCREMENTOS y VARIABLES en el programa del Servo. Se trata de añadir al programa la posibilidad que aparece en el Video (minuto 2) para conseguir lo siguiente:
        • Al apretar la Flecha Derecha -> el Motor se posiciona 5º más a la derecha
        • Al apretar la Flecha Izquierda -> el Motor se posiciona 5º más a la izquierda
        • Para ello hay que definir una variable (ángulo). OJO: no te fijes en el programa del VIDEO, comprueba por tí mismo si añadir 5º al ángulo hace que el servo se posicione más a la derecha o a la izquierda

    • 5.3.D. AMPLIACIÓN: Uso de la VARIABLE ANGULO en TODOS LOS PROGRAMAS. Modifica el programa para que la variable "Angulo" se utilice en todos los casos, de modo que, una vez ubicado el motor en una posición (con las teclas Espacio, 0, 1, 2, 3 y 4) se pueda, a continuación, situar más a la derecha o la izquierda utilizando las flechas.



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:
  • En esta modalidad, el servomotor no puede posicionarse en un ángulo concreto.
  • A cambio, puede dar vueltas completas.
  • Sus posibilidades de funcionamiento son 3:
    • Parado
    • Rotación en sentido Horario (el de las agujas del reloj)
    • Rotación en sentido Antihorario (al revés que las agujas del reloj)
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.


ROBOT MODELO
Para la práctica se utiliza un robot gobernado por dos Servomotores M1 y M2.
Para mantener la estabilidad y poder girar con facilidad, se sitúa una rueda loca en posición delantera
.

En el modelo se indican los sentidos de giro. Según el criterio del punto de vista del motor la flecha roja indica el sentido Horario y la verde el Antihorario.

Con los motores montados uno frente al otro, hay que estudiar los sentidos de giro necesarios para que el robot haga las cinco operaciones básicas:

MOVIMIENTOS DEL ROBOT:
Con este criterio, para conseguir...


 
(1) Que el robot AVANCE:
  • el motor M1 debe girar en sentido Horario y
  • M2 en modo Antihorario

(2) para que el robot RETROCEDA:
  • M1 debe girar en modo Antihorario y
  • M2 en modo Horario


(3) El GIRO a la IZQUIERDA se consigue con:
  • M1 en modo Antihorario y
  • M2 también en Antihorario
(También se podría hacer con M1 parado, pero sería un giro más amplio y, por tanto, menos preciso)




(4) El GIRO a la DERECHA se logra con:
  • M1 en modo Horario y
  • M2 asímismo en modo Horario
(Igualmente se podría hacer con M2 parado, pero sería un giro más amplio y menos preciso)



(5) Finalmente, para que el ROBOT se PARE, los dos motores deben estar parados.


    • 5.3.E. CONTROL DE UN SERVOMOTOR DE ROTACIÓN CONTINUA con S4A.
Observa el Video (minuto 3'50'') y vamos a crear, paso por paso, un programa similar. Comenzaremos controlando un sólo motor

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:
  • Al pulsar la flecha derecha, M1 girará en sentido Horario.
  • Pulsando la flecha izquierda, M1 girará en sentido Antihorario
  • Pulsando la tecla Espacio, M1 se parará
Esquema:
Placa:


    • 5.3.E. CONTROL DE UN ROBOT CON SERVOMOTORES con S4A.
Continúa observando el Video (minuto 3'50''). Sin embargo, el control del Robot va a ser algo distinto, al del video. Vamos a añadir otro motor (M2)

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:
MOVIMIENTOS (ver guía)
  • Al pulsar la flecha Arriba, M1 y M2 conseguirán que el robot AVANCE
  • Pulsando la flecha Abajo, M1 y M2 conseguirán que el robot RETROCEDA
  • Al pulsar la flecha Derecha, M1 y M2 conseguirán que el robot GIRE A LA DERECHA
  • Al pulsar la flecha Izquierda, M1 y M2 conseguirán que el robot GIRE A LA IZQUIERDA
  • Pulsando la tecla Espacio,el robot se parará
Esquema:
Proto-Board:
Instrucciones: Estudia bien los sentidos necesarios en cada motor y muestra el resultado cuando lo consigas.


5.4. MOTORES DE CONTINUA (DC) CON S4A. ROBOT CON MOTORES DC
    • 5.4.A. CONTROL DE UN MOTOR DE CONTINUA (DC) con S4A.
Ahora realizaremos una práctica similar a la anterior, pero utilizando motores de continua (DC).
Como vimos anteriormente, para poder usar un motor DC en Arduino. es necesario utilizar un circuito accesorio, como el L293D, ya que Arduino no es capaz de proporcionar la corriente que necesita el motor. Este circuito tiene una configuración llamada "En Puente", "en H" o "Modo Push-Pull" que permite controlar el giro de un motor.
Si embargo, en esta ocasión usaremos el modelo L298 o L298N, que es como un L293D pero de mayor potencia. Pero utilizaremos este chip incorporado a un Driver de motores.


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:
  • Mantener conectado el "Jumper" del regulador de tensión de 5V, que es el que alimenta al circuito L298N.
  • Conectar la pila, que hará funcionar los motores, entre los bornes +12 (positivo) y GND (Negativo). Su valor no tiene que ser 12V, ese es el límite. Esta tensión se aplica al regulador de tensión siempre que el Jumper esté conectado.
  • NUNCA conectar nada a la toma de +5V. En todo caso puede usarse como salida, pues es la tensión que proporciona el regulador de tensión.
  • La toma GND debe conectarse a cualquiera de los pin GND de Arduino

En este caso hay que hacer lo siguiente:
  • Desconectar el Jumper para desactivar el regulador de tensión.
  • Conectar la pila igualmente entre el positivo (+12 o más voltios) y negativo (GND).
  • Hay que proporcionar 5V para que funcione el L298N, para ello hay que conectar la salida de Arduino llamada "5V" a la toma de +5V de la placa
  • La toma GND debe conectarse a cualquiera de los pin GND de Arduino
Podría representarse el patillaje del L298N según el siguiente esquema:Esquema L298N
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:
  • El Jumper del regulador conectado.
  • Los Jumpers de ENABLE (ENA y ENB) conectados.
  • Usando una pila de entre 6V y 12V (conectada entre +12 y GND)
  • Conectando el GND de Arduino al GND de la placa L298N.
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:
  • Al pulsar la Tecla "d", el Motor girará en sentido Horario.
  • Pulsando la Tecla "a", el Motor girará en sentido Antihorario
  • Pulsando la tecla Espacio, el Motor se parará


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 correspondienteCó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:
  • Al pulsar la Tecla "w", MotorA y MotorB conseguirán que el robot AVANCE
  • Pulsando la Tecla "s", MotorA y MotorB conseguirán que el robot RETROCEDA
  • Al pulsar la Tecla "d", MotorA y MotorB conseguirán que el robot GIRE A LA DERECHA
  • Al pulsar la Tecla "a", MotorA y MotorB conseguirán que el robot GIRE A LA IZQUIERDA
  • Pulsando la tecla Espacio,el robot se parará


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.
Optoacoplador CNY70
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.

foto CNY 70
CNY70 EN 3D
CNY70
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:
  1. 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.
  2. 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)

Funcionamiento del CNY70
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. circuito con CNY70
El esquema de conexiones para el CNY70, para el circuito propuesto, sería el siguiente:
Conexiones CNY70


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.
CNY conectado a la placa
NO CONECTAR ASÍ EL CNY70:
CNY  recta en la placa Board

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.
CNY70 patillas abiertasCNY70 Foto colocada girada

FORMA CORRECTA DE CONECTAR EL CNY70:

CNY insertada girada

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:Circuito con Arduino, CNY y 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:
  1. Hacer una lectura mediante un PIN digital: El resultado será un nivel HIGH (alto) o LOW (bajo)
  2. 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: CNY70 con Arduino y Entrada Digital 3
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: CNY70 con Arduino y Entrada Analógica 0
Ahora usamos la Entrada Analógica 0 para leer la información del CNY70
Montaje propuesto: CNY+Arduino entrada Analógica
Programa: S4A usando CNY70 y entrada Analog0
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:
  1. Usar servomotores de rotación continua.
  2. 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:
Control de Servomotor de Rotación Continua con S4A
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:
Programa Push-Pull S4A
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:
MotorDC Push-Pull+ L293D esquema
Montaje con L293D: Motor DC + L293D
Programa:
Programa Push-Pull S4A
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:
L293D con Arduino
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:
L293D con Arduino usando 2 Enables
ADVERTENCIA:
Jumpers fuera de tomas ENABLE

¡¡CUIDADO!!
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:S4A EnableA -6 -pasos previos
    1. Crea una variable que servirá para modificar el valor de una toma Enable (por ejemplo EnableA)
    2. Muestra la variable EnableA en la pantalla y visualízala en modo "deslizador", para poder variar su valor desde la pantalla de S4A.
    3. 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
    4. 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.
    5. Como las tomas PWM sólo admiten valores enteros, añade una función que "redondee" el valor anterior.
    6. 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:
L293D con Arduino, 2 Enables y 2 CNY70
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:Línea Fina


  • 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:Línea Gruesa



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:
L293D con Arduino, 2 Enables, 2 CNY70 y Switch
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:
L293D con Arduino, 2 Enables, 2 CNY70 y Switch
Instrucciones:
  • Monta el circuito de arriba,carga el Firmware de S4A y ábrelo.
  • Modifica el programa de S4A anterior, de la forma siguiente:
    1. Elimina las variables EnableA y EnableB.
    2. 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.
    3. 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.
    4. Repite la operación con la entrada analógica A4 y la salida ~6.
Orientación Pot-Enable
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:
L293D con Arduino, 2 Enables, 2 Motores Directa y Switch
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:
    1. Los motores se activarán desde el principio, permaneciendo así salvo que se cierre el interruptor.
    2. Si se cierra el interruptor, los motores se pararán.
    3. 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).
L293D con Arduino, 2 Enables, 2 CNY70 y Switch
(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:
  1. Los motores estarán activados permanentemente, configurando su giro de forma que el robot avance continuamente.
  2. Si se cierra el interruptor, los motores se pararán.
  3. 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.
  4. Las tomas Enable se pondrán a 0 cuando el interruptor esté abierto.
Montaje con L298N y motores conectados en modo Push-Pull:
L293D con Arduino, 2 Enables, 2 CNY70 y Switch
(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.


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:
  • 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:
  • 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.
  • TinkercadTINKERCAD ( 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 )




arriba

libro