domingo, 28 de diciembre de 2014

Arduino-Radio RDA5807- RDS-LCD3310

Página principal


Arduino
Radio RDA5807 con RDS
LCD Nokia 3310

Este montaje es una radio hecha con el chip RDA5807 y con  la visualización en un LCD 3310.
La sintonía y el volumen se realizan mediante dos potenciometros, lo he querido así, aunque hubiese sido más fácil mediante tres pulsadores, pero eso es otro tema.
El chip RDA5807 también dispone de RDS, solo he implementado el nombre de la emisora, aunque se puede incluso ver la hora y otras muchas cosas, pero eso es otro tema.
Existen una librerías: Adafruit_GFX y  Adafruit_PCD8544 para manejar el LCD, pero tienen un problema, no funcionan con versión 1.0.5, que es la que tengo instalada, por lo que he utilizado otra forma. En la página oficial de arduino existe un ejemplo, http://playground.arduino.cc/Code/PCD8544 , el cual le he adaptado a mi programa.Como podemos observar en las características del LCD 3310, debe funcionar a 3.3V, y las salidas del arduino funcionan a 5V. He visto varios montajes utilizando resistencias, pero  en uno  decía que el LCD podía funcionar a 5V, pero el Led de iluminación solo se podía poner a 3.3V, y eso es lo que he hecho. A pesar de lo que dice el fabricante funciona a 5V, no se por cuanto tiempo.
El RDA5807 funciona entre 1.8 to 3.3 V , por lo cual la alimentación la tomo de 3.3V del arduino. El RDA5807 viene montado en un modulo RRD-102V2.0 que se puede adquirir por menos de 2€.
Hemos de pensar que el ATMega328 funciona perfectamente a 3V, por lo cual podemos alimentar todo el conjunto con baterías de 3V.


Esquema del circuito.


Montaje del circuito.

La sintonía y el volumen se realizan mediante dos potenciómetros.
Existen dos modos de sintonía que se varía en el programa mediante la línea  #define SINTONIA 1.
El potenciómetro  de sintonía debe ser de calidad en el modo de  SINTONIA 0.
// SINTONIA 0 Debes terner un potenciómetro muy fino para 205 valores. Guarda la frecuencia.
// SINTONIA 1 Ajuste preciso de frecuencia por tramos de potenciómetro. No guarda la frecuencia.

Hubiese sido bastante más barato y fácil hacer todo con 3 pulsadores, pero eso es otra historia.



Visualización del LCD.

En el LCD se pueden ver varios datos:
 Intensidad de la señal.
 Si la emisión es mono o stereo.
 El volumen que tenemos en el potenciómetro.
 Frecuencia de sintonía.
 Nombre de la emisora que se obtiene de la señal RDS.


Señal de RDS.

Para el tipo de grupo solo he utilizado el  0000=Información básica de sintonía.



PROGRAMA

Saludos.
Juan Galaz


Bibliografía:

http://arduino.vom-kuhberg.de/index.php
http://seta43.duckdns.org/ardura.html

RADIO DATA SYSTEM- RDS- Por: Aitzol Zuloaga Izaguirre.






miércoles, 17 de diciembre de 2014

Linux bt878 - modulo bttv

Página principal


Linux
bt878 - modulo bttv


En España donde vivo, la implantación de la televisión digital es completa. Los canales de televisión analógica ya no existen, por lo que las tarjetas de TV para ordenador basadas en el chip bt878 ya solo sirven para digitalizar algún vídeo a través de la entrada de vídeo compuesto o escuchar la radio FM.
El caso es que últimamente me han dado algunas tarjetas de este tipo, eso si, sin ningún tipo de CD con los drivers.
Después  de buscar en internet forma de instalar este tipo de tarjetas bajo linux he encontrado los siguiente:

http://www.taringa.net/posts/linux/18147182/Instalando-1-sintonizadora-de-TV-en-Linux.html

http://www.tldp.org/HOWTO/html_single/BTTV/
http://www.taringa.net/posts/linux/4137583/Televison-en-UBUNTU-cualquier-version.html

Para Debian 7 solo hay que modificar  según el tipo de tarjeta los siguiente archivos:

/etc/modules
/etc/modprobe.d/bttv.conf

Los programas que se pueden utilizar fácilmente son:
    gnomeradio    
    tvtime



/etc/modules loop
smsdvb
lp
bttv
bt878
dvb_core
dst
dvb-bt8xx
/etc/modprobe.d/bttv.conf
options bttv card=36 tuner=1,5





/etc/modules loop
smsdvb
lp
bttv
bt878
dvb_core
dst
dvb-bt8xx
/etc/modprobe.d/bttv.conf options bttv card=120 pll=1 radio=1 automute=0 tuner=5





Saludos
Juan Galaz



lunes, 15 de diciembre de 2014

Arduino. Radio RDA5807. Control RS232. Programación en Gambas y SDL.

Página principal


Arduino
Radio RDA5807
Control RS232
Programación en Gambas y SDL.


Este artículo es una continuación de otro articulo ardura.html , en este caso utilizamos el chip RDA5807.
El chip RDA5807 es un receptor de radio FM en un solo chip, solo utiliza un cristal de cuarzo de 32768 Hz para que funcione.
Para su control utilizamos el interface I2C, con el cual manejamos todas sus funciones. Los pins A4 (SDA) y A5(SCL) del arduino son los utilizados para el control I2C y se alimenta mediante los 3.3V del propio arduino.
La salida de audio se debería filtrar para eliminar las altas frecuencia, pero en mi caso no lo he hecho para simplificar el circuito.
El RDA5807 tiene bastante compatibilidad con  el TEA5767, pero con muchas mas funciones, como RDS, volumen, etc.
Existen tre direcciones para el bus I2C:
  RDA5807_adrs=0x10;       // I2C-Address RDA Chip for sequential  Access
  RDA5807_adrr=0x11;       // I2C-Address RDA Chip for random      Access
  RDA5807_adrt=0x60;       // I2C-Address RDA Chip for TEA5767like Access
En este primer artículo he adaptado el programa arduino para que funcione con los programa que realice en SDL para windows y linux, y en gambas para linux.
En la parte de arduino solo he modificado el volumen inicial del chip, y de esta forma ya funciona los programas en la parte del PC.
En el programa de gambas he puesto un a barra de volumen, solo eso.

Chip RDA5807


Montaje.


Circuito realizado.


Programa en gambas con la barra  de volumen.


El antiguo programa en SDL funcionando.

PROGRAMAS

Saludos
Juan Galaz



Bibliografía:

http://arduino.vom-kuhberg.de/index.php
http://seta43.duckdns.org/ardura.html

miércoles, 10 de diciembre de 2014

Arduino AD9850 DDS(Direct Digital Synthesizer) Generador señal para banda de 40m



Arduino
AD9850
DDS(Direct Digital Synthesizer)
Generador señal para banda de 40m
xsetaseta@gmail.com

Para la banda de 40m me pidió Marcelo Urra, un radioaficionado de Chile, un oscilador.
He usado el integrado AD9850, y para la visualización el LCD 3310, que llevaban los modelos de Nokia.
Este montaje es una mezcla de dos montaje arnok.htmlad9850.html.
Existen 13 menus del 0 al 12, para seleccionar las escalas de frecuencias desde 6.850KHz al 7.500KHz, y un potenciómetro para variar la frecuencia en pasos de 1KHz.






PROGRAMA ARDUINO.



Un saludo.
Juan Galaz

viernes, 28 de noviembre de 2014

Cables sin apantallamiento.

Cables sin apantallamiento.

Se llama cable apantallado o blindado a un tipo de cable recubierto por una malla o un tubo metálico, que actúa de jaula de Faraday para evitar el acople de ruidos y otras interferencias, tanto del entorno hacia el cable, como del cable al entorno.

No se debe confundir el cable apantallado con el cable coaxial, ya que este último es una línea de transmisión caracterizada por su impedancia característica, constante de propagación, etc; mientras que el cable apantallado no lo es.

El problema es que en algunos casos no existe cable apantallado  ni  cable coaxial cuando debería existir, para que la señal llegue lejos y sin interferencia.

Aún me acuerdo en la época de ordenador spectrum, cuando en la pantalla del televisor se veían los caracteres mal y con ciertas rayas. Cuando por casualidad un día utilice un cable hecho por mi, para unir el ordenador y la televisión, la imagen apareció nítida y sin interferencias.
¿Que clase de cable podía producir estas interferencias?
Con una tijera descubrí el misterio,  el cable que debía ser  cable coaxial, resulto ser un fiasco,  la malla que debía existir solo era unos 6 cables juntos, por lo cual se producían muchas interferencias en la señal.

Desde entonces suelo mirar los cables que vienen con los aparatos, y en muchos casos son muy malos,  no llevan apantallamiento.

Los cables USB deberían llevar apantallamiento, pero la mayoría de los teclados y ratones no la lleva. En este caso no producen ningún efecto, funcionan perfectamente. Pero me he encontrado con cámaras Web que funcionan bien a resoluciones bajas, pero a resoluciones altas no funcionan con cables malos.
Cable USB



Los cables de audio y vídeo son otro caso bastante habitual. Los cables que vienen con muchos aparatos no suelen llevar apantallamiento, por lo cual la señal de vídeo suele estar con bastantes interferencias y falta de nitidez que se puede ver en la pantalla. En el caso del audio suele producirse zumbidos de fondo en el sonido, que se hace especialmente audible en escenas con mucho silencio.
Cable de audio y vídeo

Esto mismo pasa en los cables de euroconectores y en cables de algunos monitores.

La falta de apantallamiento es una constante en todo tipo de cables, el ahorro de costes en su fabricación  es es principal motivo. Por lo cual recomiendo que vigilen el tipo de cables que utilizan al conectar los aparatos..

Un saludo.
Juan Galaz

Bibliografía:

http://es.wikipedia.org/wiki/Cable_apantallado
http://es.wikipedia.org/wiki/Cable_coaxial

miércoles, 26 de noviembre de 2014

Arduino-Android Buetooth hc05 Manejando un coche. Velocidad variable en motores.

Página principal

Arduino-Android
Bluetooth
hc05
Manejando un coche.
Velocidad variable en motores.

xsetaseta@gmail.com

En mi anterior montaje autofelipe.html podia manejar el coche mediante mi teléfono android, pero poco interactivo mediante simples botones. El control era algo complicado si no mirabas la pantalla, pero si mirabas la pantalla perdías de vista al coche.
Este nuevo montaje utiliza una parte de la ventana del móvil a modo de joystick, ahora si es bastante interactivo.
También he modificado el circuito para que los motores puedan tener distinta velocidad de giro.


Conexionado del L293D


Esquema de todo el conjunto.

Para el control mediante el ordenador he hecho un programa en Gambas (Basic ).

Programa en Gambas.


Para el programa en android he utilizado un interprete de basic  en su modo trial  BASIC4Android.

Programa en android.



PROGRAMAS. Se encuentran todos los ficheros, arduino, gambas, android.
Dentro del archivo comprimido existen dos ficheros apk (instaladores android) ,uno es para pantallas pequeñas 3.5" y otro para 4". Para otro tipo de pantallas mas grandes creo que funcione el de 480x480, pero eso no lo he probado.

Video de su funcionamiento.



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

domingo, 16 de noviembre de 2014

Arduino-Android Buetooth hc05 Manejando un coche.

Página principal


Arduino-Android
Buetooth
hc05
Manejando un coche.

xsetaseta@gmail.com

Después de el anterior montaje Encender 4 leds mediante bluetooth, manejar un coche tele-dirigido no debía ser muy difícil.
Para manejar los dos motores he utilizado el integrado L293D, que ya tiene diodos de protección internamente.


Conexionado del L293D


Esquema de todo el conjunto.

Como se puede observar falta la alimentación a los motores.
En un principio tenía dos alimentaciones por separado, para el arduino y para los motores.
Para el diseño utilizo dos alimentaciones, una del USB para el arduino y otra de las baterias para los motores.
Lo que no podemos es alimentar a los motores mediante la tensión de 5V que sale del arduino, podemos estropear algo.
Cuando todo está probado, alimento al arduino mediante las baterías de los motores, directamente al pin 5V del arduino.
La alimentación para los motores se aplica al pin 8 del L293D.



Imagenes del conjunto montado.

Para el control mediante el ordenador he hecho un programa en Gambas (Basic ).

Programa en Gambas.

Para el programa en android he utilizado un interprete de basic  en su modo trial  BASIC4Android.

Programa en android.

PROGRAMAS. Se encuentran todos los ficheros, arduino, gambas, android.



Video de su funcionamiento.



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

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

domingo, 1 de junio de 2014

Arduino Emisor temperatura/humedad , receptor en PC, gráfica con gambas.

Página principal


Arduino
Emisor temperatura y humedad externa.
Receptor en PC con gráfica
433MHz - mx-05V

433MHz - mx-fs-03v
xsetaseta@gmail.com

En este montaje he realizado un emisor de temperatura y humedad. Se transmiten los datos y se recibe en un receptor colocado en el puerto usb de un ordenador.
En el ordenador se visualizan los datos de temperatura y humedad a través de un programa que monitoriza los datos y los representa en una gráfica.
Para emisor o transmisor he creado una placa de circuito impreso que se puede utilizar para los dos cometidos, cambiando el programa del Atmega328.
Para emisor se utiliza los conectores de AM2302 y el transmisor FS-03V, y se alimenta a través de 3 pilas de 1.5V. Los datos se transmiten cada 1.3 segundos o cada 67 segundos, dependiendo si existe o no existe el puente S1 pin (1- 4). El otro puente lo he dejado sin servicio, pero está pensado para identificar el canal.
En el lado del receptor se utilizan los conectores del MX-JS-05V, y está alimentado a través del conversor serie a usb que se conecta al ordenador.
El formato de transmisión es el siguiente:
H2440 T-680 222 91
Donde la humedad sería 24.40%, la temperatura -6.80ºC, el canal en este caso 222, y un numero secuencial del 0 al 99.
No existe comprobación del canal, por lo que algunas veces se puede mezclar con señales de otros emisores, es muy fácil hacerlo, pero se lo dejo a otros hacerlo.
Se pueden utilizar tanto ATMEGA8-ATMEGA88-ATMEGA328, da igual, el que sea mas económico, el código no supera los 8k. En mi caso he utilizado en el receptor un ATMEGA8, y en el emisor un ATMEGA328, son los que tenía a mano.



Esquema del circuito.


PCB


Montaje del receptor.



Montaje del emisor.

Programa del emisor y receptor.



Gráfica realizada con programa de basic Gambas 3.1.1
El emisor está dentro del congelador y el receptor pinchado en un puerto del ordenador a 10m de distancia.


Programa en gambas

Como yo utilizo mayormente linux, he programado el programa de monitorización de temperatura en basic de Gambas 3.1.1  .
Es bastante fácil realizar el programa en Visual Basic o cualquier otro basic.
Recordar que debéis tener permisos para usar los puertos serie, se hace añadiendo el usuario al grupo  dialout .
Si solo queréis ver si funciona, abrir el monitor de serie  del arduino.


Hasta pronto.
JUAN GALAZ

Bibliografía:
 http://playground.arduino.cc/Main/DS1302
 http://playground.arduino.cc/Code/PCD8544
 http://www.microsyl.com/index.php/2010/03/24/nokia-lcd-library/
http://forum.hobbycomponents.com/viewtopic.php?f=39&t=1324
http://seta43.duckdns.org/ardurab.html
http://playground.arduino.cc/Main/DHTLib
http://www.pjrc.com/teensy/td_libs_VirtualWire.html

martes, 13 de mayo de 2014

Arduino Reloj con medidor de temperatura y humedad externa. 433MHz - MX-05V

Página principal


Arduino
Reloj con medidor de temperatura y humedad externa.
433MHz - MX-05V

xsetaseta@gmail.com

Con los dos montajes anteriores, ya podemos montar un reloj con visualizador de temperatura y humedad externa.
Reloj con Nokia 3310 . http://seta43.duckdns.org/arnok.html
Receptor temperatura y humedad.   http://seta43.duckdns.org/ardurx.html


Esquema del circuito y su simulación


Montaje del circuito en placa Board.

En este montaje no he tenido en cuenta el consumo del circuito, si se quiere reducir deberíamos  sacar el micro de la placa arduino, y hacer alguna modificación del programa.
Como no quiero que utilicen este trabajo para presentarlo como propio, no he ajustado mucho el programa, dejo al que quiera que lo mejore a su gusto.
Se puede mejorar mucho, detección de falta de señal, temperaturas máximas y mínimas, alarmas, detección de identificación del transmisor, etc...
En el transmisor se puede aumentar  la potencia, alimentando el emisor con una tensión mayor en el modulo transmisor mediante dobladores de tensión.
También se puede eliminar el cristal y los condensadores en el transmisor, al utilizar el oscilador interno de 8 MHz.

PROGRAMA

Hasta pronto.
JUAN GALAZ

Bibliografía:
 http://playground.arduino.cc/Main/DS1302
 http://playground.arduino.cc/Code/PCD8544
 http://www.microsyl.com/index.php/2010/03/24/nokia-lcd-library/
http://forum.hobbycomponents.com/viewtopic.php?f=39&t=1324
http://seta43.duckdns.org/ardurab.html
http://playground.arduino.cc/Main/DHTLib
http://www.pjrc.com/teensy/td_libs_VirtualWire.html



miércoles, 7 de mayo de 2014

Arduino-Receptor temperatura y humedad 433MHz - MX-05V

Página principal


Arduino
Receptor temperatura y humedad
433MHz - MX-05V

xsetaseta@gmail.com

Esta es la segunda parte del montaje en el arduino para transmitir temperatura y humedad mediante radio en la frecuencia de 433MHz.


Circuito receptor MX-05V.



Esquema MX-05V.



Conexión en el arduino.

Programa
//-------------
// SETA43
// 07/05/2014
//-------------
//
//Receptor
//

#include <VirtualWire.h>
const int RX_DIO_Pin = 2;


 float h,humedad,temperatura;
 int dato1,dato2;
 byte indice;

void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
/* Initialises the DIO pin used to receive data from the Rx module */
vw_set_rx_pin(RX_DIO_Pin);
/* Receive at 2000 bits per second */
vw_setup(2000);
/* Enable the receiver */
vw_rx_start();
}

/* Main program */
void loop()
{
uint8_t Buffer_Size = 2;
unsigned int Data;
int Data1;
uint8_t RxBuffer[Buffer_Size];


if (vw_get_message(RxBuffer, &Buffer_Size)) // Non-blocking
  {
    digitalWrite(13, HIGH);
    Data = RxBuffer[0] << 8 | RxBuffer[1];
    h=Data; h=h/100;
    if(h==333.33)
        {
         indice=0;
         Serial.print("Humedad: ");
         Serial.print(humedad);
         Serial.print(" % ");
         Serial.print("Temperatura: ");
         Serial.print(temperatura);
         Serial.print(" C ");
         Serial.print(dato1);
         Serial.print(" ");
         Serial.println(dato2);
        }
      else
        {
          indice++;
          if(indice==1) humedad=h;
          if(indice==2)
             {
               if (Data>=35000)
                {
                  Data1=Data-65536;
                  h=Data1;
                }
                else
                {
                 h=Data; 
                }                
              h=h/100;   temperatura=h; 
             }
          if(indice==3) dato1=Data;
          if(indice==4) dato2=Data;
        }
    digitalWrite(13, LOW);
  }
}


En el programa se reciben 5 datos.
El primero es 33333, es un numero de sincronización de la recepción.
El segundo es la humedad, multiplicada por 100, esto es para que sean enteros de 2 bytes.
El tercero es la temperatura, multiplicada por 100, esto es para que sean enteros de 2 bytes.
El cuarto es 222, este numero se lo he puesto a modo de seguridad. Debido a que puede recibir señales de múltiplos transmisores, se debe identificar con un numero de identificación único. Para simplificar el programa, no he utilizado la identificación por numero.
El quito es un numero consecutivo del 0 al 100.



Salida del puerto serie.



Hasta pronto.
JUAN GALAZ

Bibliografía:
http://forum.hobbycomponents.com/viewtopic.php?f=39&t=1324
http://seta43.duckdns.org/ardurab.html
http://playground.arduino.cc/Main/DHTLib
http://www.pjrc.com/teensy/td_libs_VirtualWire.html