lunes, 29 de septiembre de 2014

Arduino-Android-Buetooth-hc05. Encender 4 leds mediante bluetooth

Página principal


Arduino-Android
Buetooth - hc05
Encender 4 leds mediante bluetooth


xsetaseta@gmail.com

El utilizar el móvil para actuar sobre un circuito siempre me resulto tentador.
Ahora con los teléfonos android es relativamente fácil.
Para mi primera aplicación en android he utilizado el lenguaje basic, por su facilidad de uso y su curva de aprendizaje pequeña.
Como interprete de basic he utilizado una versión comercial en su modo trial  BASIC4Android.


Esquema del circuito.


Circuito montado.





Módulo HC05
.


La comunicación entre el dispositivo android y el arduino se hace mediante el módulos Bluetooth  HC05.
Es un simple modulo que emplea la comunicación serie (Tx/Rx), en nuestro caso utilizaremos un puerto serie por sofware mediante los pins 2 y 3 del arduino.
En mi caso utilizo otra versión mas antigua del módulo HC05 que esta preprogramado a una velocidad de 38400 y con la contraseña 1234. En el módulo original HC05 viene a una velocidad de 9600, esto es lo que debéis cambiar en el programa arduino.
Programa arduino
#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins

//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(2,3); //2 RX, 3TX.

char entrada[100]="LedFelipe";
int contador;
boolean stringComplete = true; 

void setup()
{
  pinMode(13, OUTPUT);
  for(contador=4;contador<=13;contador++)  pinMode(contador, OUTPUT);
  BT.begin(38400); //Velocidad del puerto del módulo Bluetooth
  //BT.begin(9600); //Velocidad del puerto del módulo Bluetooth para el modelo normal HC05
  Serial.begin(9600); //Abrimos la comunicación serie con el PC y establecemos velocidad
  digitalWrite(13, LOW);
}
 
void loop() {
 
  if(Serial.available())
  {
     BT.write(Serial.read());
  }
 
  while (BT.available())
  {
    char inChar = (char)BT.read();
    entrada[contador]=inChar; 
    if (inChar == '\n')
        {
          stringComplete = true;
          entrada[contador]=0;
        }
    contador++;
    /*
    Serial.print(contador);
    Serial.print("-");
    Serial.print(inChar,DEC);
    Serial.print("-");
    */
  }
 
  if (stringComplete)
    {   
    if(!strcmp(entrada,"0Dig13")){digitalWrite(13, LOW);  goto salto0;}
    if(!strcmp(entrada,"1Dig13")){digitalWrite(13, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig12")){digitalWrite(12, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig12")){digitalWrite(12, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig11")){digitalWrite(11, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig11")){digitalWrite(11, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig10")){digitalWrite(10, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig10")){digitalWrite(10, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig9")){digitalWrite(9, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig9")){digitalWrite(9, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig8")){digitalWrite(8, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig8")){digitalWrite(8, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig7")){digitalWrite(7, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig7")){digitalWrite(7, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig6")){digitalWrite(6, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig6")){digitalWrite(6, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig5")){digitalWrite(5, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig5")){digitalWrite(5, HIGH); goto salto0;}
   
    if(!strcmp(entrada,"0Dig4")){digitalWrite(4, LOW); goto salto0;}
    if(!strcmp(entrada,"1Dig4")){digitalWrite(4, HIGH); goto salto0;}
   
    BT.print(" Error->");
    Serial.print(" Error->");
    goto salto1;
salto0:       
    BT.print(" OK->");
    Serial.print(" OK->");
salto1:   
    BT.println(entrada);
    Serial.println(entrada);
    contador=0;
    stringComplete = false;
  }
}

El programa arduino funciona de la siguiente forma:
Escucha el puerto serie que proviene del modulo bluetooth. Cuando detecta una orden como 1Dig13 la procesa y enciende el led colocado en la salida Digital 13. Si la orden es errónea devuelve un error al dispositivo android.

En la parte del android el programa está realizado en basic, se llama LedFelipe.
El funcionamiento es el siguiente:
Al abrir el programa debemos conectarnos a un dispositivo bluetooth  que ya debemos tener asociado previamente.
En nuestro caso es OBDII, que es el modulo bluetooth conectado al arduino.
Veremos que si se conecta correctamente nos aparecerá la palabra conectado y se quedara fijo el led del módulo HC05.
Ahora espera que se mande una orden, se puede escribir o pulsando alguno de los botones escribe la orden.
Pulsando el boton Send mandamos la orden, que el arduino procesará devolviendo OK o Error .
El programa basic es bastante sencillo por lo cual no merece  mucha explicación, para el que quiera revisarlo o cambiarlo adjunto los archivos.

Programa LedFelipe



Vídeo de su funcionamiento.



FICHEROS

Saludos.
JUAN GALAZ

Bibliografía:

http://diymakers.es/arduino-bluetooth/
http://english.cxem.net/arduino/arduino4.php
http://www.instructables.com/id/Andruino-A-Simple-2-Way-Bluetooth-based-Android-C/step1/How-to-use-ArduDroid/
http://www.instructables.com/id/Cheap-2-Way-Bluetooth-Connection-Between-Arduino-a/?ALLSTEPS
http://mcuoneclipse.com/2013/06/19/using-the-hc-06-bluetooth-module/
http://www.basic4ppc.com/
http://www.extremadura-web.es/Blog/2012/10/29/comunicacion-bluetooth-serie-arduino-y-basic4android/
http://iesromerovargas.es/recursos/elec/sol/basic4android.htm

martes, 23 de septiembre de 2014

Arduino AD9850 DDS - Versión 2

Arduino
AD9850
DDS(Direct Digital Synthesizer)
Generador señal desde 1Hz a 40MHz
xsetaseta@gmail.com

Versión 2.  23/09/2014
Después de 1 año del montaje me mandaron algunos correos de que no les funcionaba el circuito.
Les pregunte que placa de arduino utilizaban, y me dijeron que era la placa leonardo, algunos me mandaron imagenes de sus montajes.
Después de comprar la placa y montar el circuito, efectivamente no funcionaba.
Buscando el motivo por el cual funcionaba perfectamente en Arduino_Diecimila y no funcionaba en Arduino_Leonardo encontré el motivo.
Para utilizar los pin A0 y A1 como entradas digitales se hacía referencia a los pin 14 y 15, pero ahora con las nuevas versiones del compilador se deben utilizar A0 y A1.
Por lo que he cambiado lo siguiente:

//Arduino_Diecimila
//#define e1Pin 14
//#define e2Pin 15

por

//Arduino_Leonardo
#define e1Pin A0
#define e2Pin A1

 y ya funciona perfectamente.

Programa Arduino modificado.



lunes, 7 de julio de 2014

Reloj con wxwidgets.

Reloj con wxwidgets.
Un simple reloj.


Programas ejecutables y fuentes.


Un saludo.
Juan Galaz

Calculadora con wxwidgets.

Calculadora con wxwidgets.
El título lo dice todo, no hay mas que decir. Es simple y sencilla, nada del otro mundo, para hacer practicas con la librería wxwidgets.
Existen 3 modelos , con
Code::Blocks para windows y linux, y uno hecho mediante makefile para ambas plataformas.



Programas ejecutables y fuentes.
DLL necesarias para Windows.


Un saludo.
Juan Galaz

lunes, 23 de junio de 2014

Interface con librería wxWidgets para monitor temperatura/humedad

En mi anterior circuito

http://seta43.blogspot.com.es/2014/06/arduino-emisor-temperaturahumedad.html

había realizado el programa de  monitorización en lenguaje Basic mediante el entorno de programación Gambas. Pero claro no todo el mundo tiene Linux para instalar gambas, la vida real es así. Buscando una librería que fuese multiplataforma, elegí la librería wxWidgets. Está bastante bien documentada, en ingles claro, y funciona bastante bien.

En mi primera incursión en la librería wxWidgets , he realizado el monitor para el circuito.
Ha sido duro la programación, pero mereció la pena.
Al ser multiplataforma se recompila todo en Linux o Windows sin retocar ni una sola línea de código, salvo modificar el archivo define.h  y  poner:

    #define YesWindows 0
o
    #define YesWindows 1

Programa Linux-Windows - Librería wxWidgets 

 Linux


 Windows



Un saludo.
Juan Galaz

miércoles, 18 de junio de 2014

Máquina tragaperras en SDLBASIC

Página principal


Máquina tragaperras
SDLBASIC


Hace muchos años, era la época del ordenador Amiga, había programado una máquina tragaperras  en Basic, había utilizado el programa Amos.
El programa Amos era un entorno de desarrollo para juegos que se programaba en Basic, era muy bueno y fácil de programar.
El tiempo ha pasado y he rehecho el programa de tragaperras y lo he programado en SDLBASIC.
El SDLBASIC es un entorno para programar en Basic  y que está en la mayoría de las distribuciones Linux y Windows,  por lo que da mucho juego.
Los programas hechos en Linux funcionan perfectamente en Windows sin ningún retoque en el código.
La pena del SDLBASIC es que está abandonado, aunque existe bastante documentación.
El otro día lo recopile desde el código fuente, por lo que el que quiera puede seguir con su desarrollo.

El programa de tragaperras está diseñado para que no existan ganancias, incluso se puede ver las estadísticas de la caja pulsando la tecla p.
Se encuentra hecho en baja resolución 320x200, un día de estos lo hago en una resolución mayor para que sea mas vistoso.



Programa SDLBASIC



Larga vida al Basic



Un saludo.
SETA43