Hoy vamos a testear un pequeño Joystick e implementarlo a un proyecto de manipulación en SCRATCH S4A, tu podras implementar este Joystick en cualquier otro proyecto bajo el mismo fundamento de código.


MATERIALES

1 Tarjeta Arduino (Uno, Nano o Mega)
1 Joystick KEYES_SJOYS
1 Protoboard
1 Juego de cables M-M



DESCRIPCIÓN

Joystick KEYES.- Es un modulo de control en 2D, compatible con Arduino. Nos permite tener un dato analógico en los ejes X e Y, esto a través de la manipulación de una palanca que se encuentra conectada físicamente a un preset produciendo un divisor de voltaje al realizar los desplazamientos en la palanca.

El Joystick tiene una posición por default que es el centro y existen desplazamientos tanto para el eje X e Y, en cada movimiento el dispositivo envía una variación de voltaje, permitiéndonos con esto poder identificar la posición exacta del joystick a través de la interpretación del voltaje en los puertos analógicos del Arduino.



RECONOCIENDO PATRONES DEL JOYSTICK

Como primer paso, realizaremos un monitoreo del joystick a tráves del Monitor Serial del software de Arduino, para ello realizaremos la conexión del siguiente circuito.

Pines del Joystick



Circuito Joystick + Arduino





Código de Lectura del Joystick

Escribiremos un código que nos permita leer el comportamiento del Joystick, para ello usaremos el puerto serial de la tarjeta arduino e imprimiremos los datos en el Monitor Serial del Software.


/**********************************************/*
int ejeX; //definimos las variables ejex y ejey
int ejeY;
void setup()
{
 Serial.begin(9600);   //iniciamos comunicacion serial a 9600Baudios
}
void loop()
{
  ejeX = analogRead(A0);  //leemos el puerto analogico A0 y lo cargamos a ejex
  ejeY = analogRead(A1);
  Serial.print("Posicion X = ");  //imprimir texto en monitor serial
  Serial.print(ejeX);             //imprimir dato de variable
  Serial.print(" Posicion Y = ");
  Serial.println(ejeY);
  delay(500);                     //Retardo de Lectura e Impresion
}
/**********************************************/*

Una vez compilado y enviado a la tarjeta Arduino, abrimos el monitor serial del programa y veremos que esta imprimiendo información, tenemos que manipular el Joystick para recibir o modificar los datos de la ventana del monitor serial.

Para mi caso, la información presentada fue la siguiente:

Eje x    Centro=516; Izquierda= 0; Derecha=1023;
Eje y    Centro=516; Arriba=0; Abajo=1023;





Pin SW del Joystick

El Joystick cuenta con la opción de un botón selector asignado al pin SW, la salida de este puerto esta controlado por un push-button, por lo que hay que configurarlo en modo PULL-UP. Para esto tendremos que agregar una resistencia de 10K conectado al puerto SW, como se muestra a continuación.





SCRATCH-S4A

Para dar aplicación a esta interfaz usaremos un software que se llama Scratch-S4A desarrollado por el MIT, esto servirá para dar a conocer a los usuarios de este blog que podemos manipular hardware y aplicarlo al software. Por el momento esto sera un paso a paso, ya que posteriormente creare una entrada especial para este novedoso software.

Scratch-S4A es una software que fue creado para crear una interrelación entre Arduino y Scratch, para ello se modifico la plataforma de SCRATCH creando el S4A que permite poder desarrollar software o herramientas interactivas a través de la manipulación de bloques gráficos identificados por acción y color, es un software muy intuitivo y a nivel educativo ofrece grandes ventajas y características.

Por hoy desarrollaremos un pequeño software que nos permitirá mediante el Joystick manipular un objeto en pantalla. Para esto debemos seguir todos los puntos que se describen a continuación.

PASO1.- Instalación de S4A

Necesitamos descargar el Software, aunque es software libre sigue siendo rebuscado, tu solo ubícate en la sección de descargas de la pagina http://s4a.cat, ahí podrás encontrar la versión adecuada para tu sistema operativo. Una vez descargado a instalarlo y espera los siguientes pasos.

PASO2.- Cargar el Firmware

Para que S4A pueda reconocer tu tarjeta Arduino, primero debes cargar un pequeño firmware a tu tarjeta Arduino UNO o NANO, por el momento solo funciona con estas dos versiones.

Descargar Firmware

Abre este archivo con el software de Arduino versión 0022, tiene que ser esta versión para que no te arroje errores, si no la tienes descargala:

Descargar Arduino V.0022

Ahora si abre el firmware y envialo a tu tarjeta Arduino, no debe marcar ningún error.

PASO3.- Abrir S4A

Si todo salio bien en el Paso2, llego el momento de probar que S4A detecte tu tarjeta Arduino. Abre el software S4A // aparecerá una ventanita que dice "Buscando placa" espera hasta que el mensaje desaparezca.




Cuando S4A detecta tu tarjeta Arduino, automáticamente desaparecerá el mensaje y S4A empezara a leer los puertos de tu tarjeta mostrándote en pantalla el contenido de cada lectura.



Empezamos arrastrando objetos a nuestra sección de diseño hasta armar la siguientes estructura:



Si recordamos el código para detectar los movimientos de los ejes x e y, fueron conectados a los puertos analógicos (ejex-A0-Analog0  y ejey-A1-Analog1), por lo que al meterlos dentro de un if-si podemos compararlo con los datos medidos (0-izquierda-arriba  y  1023-derecha-abajo).

Por lo tanto cuando VRx cambie de centro a izquierda o del centro a la derecha el robot se moverá 10 pasos positivos o negativos sobre el eje x.

Cuando VRy cambie de centro a arriba o del centro a abajo, el robot se moverá 10 pasos positivos o negativos sobre el eje y.

En la sección de disfraces cree dos imágenes llamados custome1 y custome2, que son las imágenes que cambiaran cuando presione el botón SW del Joystick que para S4A se llama sensor Digital2, conectado al port2 digital de Arduino.

custome1

custome2


Dejo el programa, para que lo monten y prueben:

Joystick_S4A

VÍDEO: https://www.youtube.com/watch?v=hkFOu2WMv-c









Este proyecto nos permitirá controlar dispositivos conectados a la tarjeta Arduino a través de una interfaz infrarroja y usando el control de la televisión podremos encender las luces, ventiladores, o lo que se te ocurra.

MATERIALES

1 Tarjeta Arduino (Uno, Nano o Mega)
1 Detector Infrarrojo TSOP4838
1 Capacitor de 47uF
1 Control Remoto IR
4 Leds

DESCRIPCIÓN

Arduino.- Tarjeta de control programable que nos permitirá moldear nuestro proyecto para cada una de nuestras necesidades, para este caso solo usaremos cuatro salidas y una entrada digital, en el esquema de conexión podremos ver que pines o puertos usaremos, recordemos que podemos usar cualquier puerto de la tarjeta siempre y cuando sea digital.

TSOP4838.- Es un receptor infrarrojo de 38 kHz, nos permitirá recivir las señales del control remoto, para ello pueden usar controles de TV, DVD u otros de la marca Sony, Samsung, LG o Universales.



ESQUEMA DE CONEXIÓN


Como se puede ver en el diagrama estamos usando el PIN2 para recibir la información generada por el receptor IR.


BÚSQUEDA DE CÓDIGOS DEL CONTROL REMOTO

Como primer paso tenemos que obtener los códigos generados por los controles, abrimos un nuevo Scketch en el Software de Arduino y escribimos el siguiente código:

/******************************************/*
#include <IRremote.h>
int ReceptorIR = 2;
IRrecv irrecv(ReceptorIR);
decode_results Codigo;

void setup()
    {
    Serial.begin(9600);
    irrecv.enableIRIn();
    }
void loop()
   {
    if (irrecv.decode(&Codigo))
        {
        Serial.print("0x");
        Serial.println(Codigo.value, HEX);
        delay(50);
        irrecv.resume();
        }
   }
/******************************************/*

Para que el compilador pueda correr sin problemas este código, debes tener instalada la librería IRremote, una vez descargada debes descomprimirla y pegar todo el contenido dentro de la carpeta libreries de Arduino. 

Cuando el compilador no emita ningún error en el código, sera enviado a la tarjeta Arduino y deberás abrir el Monitor Serial que contiene el compilador, presionas un botón de tu control remoto y podrás ver en el Monitor Serial el código hexadecimal que genera el botón al ser presionado. 



En el monitor serial aparecieron los códigos al presionar los botones 1(0xFD609F), 2(0xFD906F) y 3(0xFD807F).

Por el momento usaremos el control y al receptor infrarrojo como interfaz de usuario, manipularemos el encendido  de unos leds conectados a los puertos digitales de nuestra tarjeta Arduino.



Como pueden ver en el diagrama anterior los ánodos (+) de los leds están conectados a los pines 8, 9 y 10 en los puertos digitales y los cátodos (-).



Ahora crearemos un código en el compilador de Arduino que nos permita encender y apagar los leds desde el control remoto, claro usando los códigos que adquirimos en el programa anterior.

Considerando que el control remoto es un menú de opciones diseñaremos el código del programa usando Switch-Case.


/*********************************************************/*
#include <IRremote.h>
int ReceptorIR = 2;
int Led1=8;
int Led2=9;
int Led3=10;
IRrecv irrecv(ReceptorIR);
decode_results Codigos;

void setup() 
{
    Serial.begin(9600);
    irrecv.enableIRIn();
    pinMode(Led1,OUTPUT);
    pinMode(Led2,OUTPUT);
    pinMode(Led3,OUTPUT);   
}
void loop() 
{
    if (irrecv.decode(&Codigos)) 
    {
       switch (Codigos.value)
       {
            case 0xFD609F: //codigo boton1
            digitalWrite(Led1, HIGH);//Encender Led1                   
            break;

            case 0xFD906F: //codigo boton2
            digitalWrite(Led2, HIGH);//Encender Led2                   
            break;
            
            case 0xFD807F: //codigo boton3
            digitalWrite(Led3, HIGH);//Encender Led3                   
            break;
            
            case 0xFD902F: //codigo boton4
            digitalWrite(Led1, LOW);//Apagar Led1                   
            break;

            case 0xFD912F: //codigo boton5
            digitalWrite(Led2, LOW);//Apagar Led2
            break;            
            
            case 0xFD805F: //codigo boton6
            digitalWrite(Led3, LOW);//Apagar Led3                   
            break;
       }
    irrecv.resume();
   }

}

/***********************************************************/*

Si siguieron los pasos de este tutorial, ahorita deben estar probando el encendido de sus leds e imaginando donde lo aplicaran, en la siguiente entrada publicare como utilizar estas salidas digitales para activar focos, ventiladores o cualquier otro elemento de mayor potencia.




+