Mostrando entradas con la etiqueta 433MHz. Mostrar todas las entradas
Mostrando entradas con la etiqueta 433MHz. Mostrar todas las entradas

domingo, 17 de marzo de 2024

Coche remoto por Módulo 433MHz

Página principal

Coche remoto por
Módulo 433MHz


Continuando con mi anterior montaje, me dí cuenta que en algunas ocasiones cuando perdía contacto visual con el vehículo, también se perdía el contron.
Esto era normal al ser mediante IR, por lo que me puse a solucionarlo mediante módulos de RF de 433MHz.

Módulos RF



Emisor.



Receptor.

Al contrario que con los IR , la señal de RF llega bastante más lejos, traspasando paredes.
El utilizar RF , se producen interferencia entre los motores de los servos y la señal de RF, y lo mejor es utilizar diferente alimentación, pero eso sería estudio de otro artículo.
El mayor problema que he tenido, son las librerías.
Unas son incompatibles con otras, otras funcionan en algunas versiones de arduino y otras no.
Como ejemplo, la librería Servo es incompatible con la librería VirtualWire.
La solución es incluir las librerías modificadas que utilizo yo.

Programa Arduino.
Librerías utilizadas.

Video

En un artículo anterior había probado la cámara ESP-CAM , y se me ocurrió colocársela al vehículo para manejarlo a distancia.
Vuelve a ocurrir lo mismo con las interferencia de la alimentación, si la conecto directamente  a los 5V del arduino, algunas veces funciona y otras no.
Para eliminar problemas en las pruebas, la alimento mediante una Power-BANK.



Video cámara vehículo



Saludos.
Juan Galaz


Bibliografía:

14/05/2014 - Arduino - Reloj con medidor de temperatura y humedad externa.433MHz - MX-05V. arnote
07/05/2014 - Arduino - Receptor temperatura y humedad-433MHz-MX-05V.   ardurx
06/05/2014 - Arduino-Transmisor temperatura y humedad-433MHz-MX-FS-03V. ar433



 

lunes, 28 de noviembre de 2022

Arduino - Receptor comercial de temperatura

  Página principal

Arduino
Receptor comercial de temperatura

Después de antiguos montajes de receptores de temperatura comerciales, he decidido reescribir el código.
El mayor problema es que los sensores de humedad se estropean con el tiempo, y miden mal.
El circuito es parecido al ard433.html, aunque yo lo tengo realizado en circuito impreso.



Lo primero se estudian las hondas recibidas para ver la estructura de los datos.
Ya con cierta experiencia es fácil encontrar los bits que corresponde a cada dato de humedad, temperatura, y canal.
Lo difícil sin documentación, es encontrar la forma en que hace la comprobación de errores.









Para medir los tiempos de cada tipo de bit (0 - 1), utilizo la interrupción en el pin 2.


#define IN_READ 2

//---Interrupcion--------------

void InumPasos()
{
  time=micros();        
  diferencia=time-timeU;
  Adiferencia=diferencia>>7;
  estadoDato=1;
salto:
  timeU=time;
}
//-----------------------------

void setup()
{
pinMode(IN_READ, INPUT);
 .......
  attachInterrupt(digitalPinToInterrupt(IN_READ), InumPasos, RISING);
 ....... 
}



Espero que estudiando el código podáis realizar vuestros propios receptores.
 

PROGRAMA


Saludos.
Juan Galaz


Bibliografía:
ard433.html
termot.html
temt3.html

miércoles, 10 de octubre de 2018

Arduino Sensor de temperatura Modelo KNEISSEL 433MHz

Página principal

Arduino
Sensor de temperatura
Modelo KNEISSEL
433MHz
xsetaseta@gmail.com

Continuando con el proyecto de receptores de sensores comerciales externos , ahora nos toca el modelo KNEISSEL.


El programa se basa en el anterior, lo único que cada fabricante codifica los datos de forma diferente.
En este caso la onda de  datos mandados tienen este formato:

Como vemos los bit mandados son 24.
En este modelo se mandan los grados divididos, por una parte los decimales y por otro los grados.

El arduino transforma estas ondas en datos decimales que son mandados al PC por medio del interface  serie mediante el USB.
Datos transmitidos :   1,22,2,196,24
Datos:
  • 1-canal.
  • 2-grados.
  • 3-decimal.
  • 4-El primer byte mandado.
  • 5-bits recibidos, deberán siempre ser 24.


Realizado en Gambas (Visual Basic para Linux)

Dispongo de dos sensores y no he podido comprobar si realmente están bien programado la detección de canales.
Lo curioso es que no existe un conmutador para cambiar el número de canal.
Para este modelo solo he realizado el programa en Gambas.

PROGRAMA


Hasta pronto.
JUAN GALAZ

Bibliografía:

receptores de sensores comerciales externos
setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

domingo, 7 de octubre de 2018

Arduino Sensor de temperatura Modelo prinston 433MHz

Página principal

Arduino
Sensor de temperatura
Modelo prinston
433MHz
xsetaseta@gmail.com

Continuando con el proyecto de receptores de sensores comerciales externos , ahora nos toca el modelo prinston.


El programa se basa en el anterior, lo único que cada fabricante codifica los datos de forma diferente.
En este caso la onda de  datos mandados tienen este formato:

Como vemos los bit mandados son 36.
Los primeros 14 bit contienen codificación propia y estado de batería.
los siguientes 2 bit corresponden al canal,
La temperatura son los siguientes 12 bits,
Y el porcentaje de humedad utiliza 8 bits.

El arduino transforma estas ondas en datos decimales que son mandados al PC por medio del interface  serie mediante el USB.
Datos transmitidos :    Canal,02,Grados,00232,Humedad,024,Control,9003


Realizado en Gambas (Visual Basic para Linux)


Con las librerías wxwidgets en Windows y Linux.

PROGRAMA


Hasta pronto.
JUAN GALAZ

Bibliografía:

receptores de sensores comerciales externos
setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

martes, 17 de abril de 2018

Arduino - Receptor de sensores de temperatura comerciales 433MHz

Página principal

Arduino

Receptor de sensores de temperatura

comerciales 433MHz

xsetaseta@gmail.com

Había visto hace tiempo un artículo donde se exponía la posibilidad de escuchar los sensores de temperaturas comerciales de las estaciones meteorológicas. Yo tengo un par de estaciones de ese tipo, y como curiosidad descubrí que funcionaban en la misma frecuencia y eran compatibles. Para que funcionasen los dos sensores a la vez debía cambiar el canal en los sensores.



Por suerte las dos estaciones meteorológicas tenían el mismo tipo de sensor y eran compatibles.

Estos sensores funcionan en la frecuencia de 433.xxxMHz , si no es muy selectivo el receptor puede recibir señales en toda la banda.
Tengo dos tipos de receptores, el uno es mas sensible que otro, aunque un poco mas caro lo recomiendo.
En el mercado chino existen numerosos receptores, algunos funcionan a 351MHz, y otros están sintonizados mal.  En la parte de bibliografía pongo el enlace del que me ha funcionado bien (2€).


Recomiendo este por ser mas sensible.


Montado el circuito receptor y alimentado a 5V me puse a estudiar los datos recibidos.

Gráfica de datos recibidos.


Después un estudio interprete las señales de este modo, tuve suerte, acerté.


Estudiando los datos mandados y con bastante trabajo, pude determinar la estructura de los datos.

Los datos emitidos se repiten varias veces, de esta forma podemos asegurarnos que el valor es correcto, no se si tiene verificación vía CRCs.
He de reconocer que tuve suerte, no estaban codificados como en algunos emisores.
También he descubierto que los datos extras son el estado de la batería.


Circuito montado con su antena.


Detalle del circuito, he quitado componentes usados en el desarrollo.

Al usar la interrupción INT0 para decodificar la señal, he configurado el pin D2 como entrada y conectado la salida DATA del receptor al pin D2.

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Int433");
  pinMode(2, INPUT);
  pinMode(IN_READ, INPUT);

  cli();                // Disable INT
  EIMSK |= (1 << INT0);  // Enable external interrupt INT0
  EICRA |= (1 << ISC01); // Trigger INT0   en bajada
  sei();
}


El programa en el arduino se encarga de interpretar la señales y mandar los datos vía serie.
Int433
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,2,Grados,202,Extra,15
Canal,1,Grados,216,Extra,18
Canal,1,Grados,216,Extra,2
Canal,1,Grados,216,Extra,2
Canal,1,Grados,216,Extra,2
Canal,1,Grados,104,Extra,1
Canal,1,Grados,216,Extra,2
Canal,1,Grados,216,Extra,2
Canal,1,Grados,216,Extra,2
Canal,1,Grados,216,Extra,2
Datos recibidos vía serie

Para hacer un poco mas vistoso la visión de los datos, realicé en Gambas3 (Visual Basic Linux) un programa.


Las gráficas de la señales están realizadas mediante Osciloscopio Hantek6022BL y PulseView bajo Linux (Debian8_32bits).

PROGRAMAS

Hasta pronto.
JUAN GALAZ

Bibliografía:

setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

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

martes, 6 de mayo de 2014

Arduino-Transmisor temperatura y humedad 433MHz -mx-fs-03v

Página principal


Arduino
Transmisor temperatura y humedad
433MHz - mx-fs-03v
xsetaseta@gmail.com

Navegando por la red,http://www.hobbycomponents.com/, encontré un kit de transmisión y recepción para el arduino en la frecuencia de 433MHz.
Es sencillo de programar y se puede obtener por menos de 2€.
Dicho y hecho, lo pedí y en menos de 15 días lo tenía en casa.
El montaje lo he separado en dos artículos, transmisor y receptor, en este primer montaje voy a explicar como he hecho el transmisor.


Kit transmisor
Esquema del transmisor


Esquema del montaje en la placa arduino.


Esquema del montaje en el ATMEGA328.

Para poder medir el consumo del circuito por partes y quitar el consumo de los componentes de la placa arduino, he sacado el Atmega en un modulo board. También he añadido un conversor USM->rs232 para poder programar el microcontrolador.


Montaje del circuito.

Para entender este circuito conviene ver mis dos anteriores artículos:
Reduciendo consumo.Parte 2. Reloj - DS1302. ardurab
Reduciendo consumo.Parte 1. Reloj - DS1302. arduraa

El consumo total del circuito quitado el adaptador usb-to-TTL es de 0.08 mA a 4.2V.
Cuando transmite el circuito consume 15mA ,el tiempo de transmisión dura aproximadamente 1 segundo.
Mediante un interruptor podemos indicarle al circuito que transmita cada  1 segundo o cada 60 segundos.
Una pila AA pude tener una capacidad entre 1100mAh(Zinc–carbono)
y 2900mAh (NiMH).
Si hacemos cálculos con un consumo de 15mA cada 60 segundos, con una pila de 1100mAh , tendremos para aproximadamente 4400 horas, 183 días.
Si utilizaríamos pilas alcalinas con poca autodescarga y cambiaríamos el programa para que transmitiera cada mas tiempo, duraría años el circuito transmitiendo.


Todo esto es bastante teórico, las baterías se autodescargan con el tiempo.

Programa
//-------------
// SETA43
// 06/05/2014
//-------------

#include <avr/io.h>
#include <avr/interrupt.h>

#include <avr/sleep.h>

#include <Wire.h>
#include <VirtualWire.h>
#include "DHT.h"

#define DHTPIN 3     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

unsigned int ih,it;
int sensorValue1, sensorValue2;

DHT dht(DHTPIN, DHTTYPE);

const int TX_DIO_Pin = 2;

int z,contador;

void setup() {
  
  pinMode(13, OUTPUT);
  pinMode(12, INPUT);

  vw_set_tx_pin(TX_DIO_Pin);
  vw_set_ptt_inverted(true);
  vw_setup(2000);

  Serial.begin(9600);
  Serial.println("DHTxx test!");
 
  dht.begin();
  
  watchdogOn(); // Turn on the watch dog timer.
  //Desactiva conversor A/D
  ADCSRA = ADCSRA & B01111111;
  ACSR = B10000000;
 
  contador=0;
}

void loop() {
 unsigned int Data;
 byte TxBuffer[2];
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();


  if (isnan(t) || isnan(h))
    {
    Serial.println("Failed to read from DHT");
    }
  else
    {
    
    ih=h*100;
    it=t*100;
 
    sensorValue1=222;
    sensorValue2=contador;
    
    digitalWrite(13, HIGH);
    
    TxBuffer[0] = 33333 >> 8;
    TxBuffer[1] = 33333;
    vw_send((byte *)TxBuffer, 2);
    vw_wait_tx();
    
    TxBuffer[0] = ih >> 8;
    TxBuffer[1] = ih;
    vw_send((byte *)TxBuffer, 2);
    vw_wait_tx();
    
    TxBuffer[0] = it >> 8;
    TxBuffer[1] = it;
    vw_send((byte *)TxBuffer, 2);
    vw_wait_tx();
    
    TxBuffer[0] = sensorValue1 >> 8;
    TxBuffer[1] = sensorValue1;
    vw_send((byte *)TxBuffer, 2);
    vw_wait_tx();
    
    TxBuffer[0] = sensorValue2 >> 8;
    TxBuffer[1] = sensorValue2;
    vw_send((byte *)TxBuffer, 2);
    vw_wait_tx();
        
    Serial.print(ih); Serial.print(" %  ");
    Serial.print(it); Serial.print(" C  ");
    Serial.println(contador);  
    
    delay(500);
    digitalWrite(13, LOW);
    
    for(z=0;z<60 && HIGH==digitalRead(12) ;z++)goToSleep();
    contador++;
    if(contador>100) contador=0;
    delay(100);

    digitalWrite(13, HIGH);

    }
  
}

void goToSleep()   
{    
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set sleep mode.
  sleep_enable(); // Enable sleep mode.
  sleep_mode(); // Enter sleep mode.
  sleep_disable(); // Disable sleep mode after waking.                     
}

void watchdogOn()
{
  //Fuente http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/
  // Clear the reset flag, the WDRF bit (bit 3) of MCUSR.
  MCUSR = MCUSR & B11110111;
  WDTCSR = WDTCSR | B00011000;
  //WDTCSR = B00000101; //0.5S
  WDTCSR = B00000110; //1S
  //WDTCSR = B00100001; //8S

  // Enable the watchdog timer interupt.
  WDTCSR = WDTCSR | B01000000;
  MCUSR = MCUSR & B11110111;
}


ISR(WDT_vect)
{
  //No hace nada
  
}



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