WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


transmission_433mhz

Transmission 433Mhz

Module Arduino low cost

Si4432

Schema Arduino

Introduction

Il s'agit d'un module RF paramétrable qui peut être utilisé pour différent types de protocoles de communication.

Avantages :

  • Fréquence paramétrable (240Mhz à 930Mhz)
  • Émetteur et récepteur
  • Puissance d'émission paramétrable (~1km de portée à puissance max)
  • Librairie Arduino
  • Modulation paramétrable FSK, GFSK, OOK, ASK
  • Gestion de certains protocoles directement en interne (Envoi des données à transmettre et le chip gère le format des trames) ou possibilité d'utiliser une entrée DATA qui modulera le signal radio (Possibilité de faire ses trames avec les timings qu'on souhaite)

Inconvénients :

  • Fonctionne en 3.3V
  • Pas de 1.27mm sur le module

Achat

Analyser et reproduire une trame 433Mhz

Outil

J'utilise un SDR NooElec NESDR SMArt qui fonctionne avec le logiciel SDRSharp - Téléchargement

Installation

  • Télécharger SDRSharp
  • Lancer install-rtlsdr.bat
  • Lancer Zadig.exe
  • Dans Options : Cocher List All Devices et Décocher Ignore Hubs or composite Parents
  • Sélectionner RTL2838UHIR vérifier USB ID 0BDA 2838
  • Sélectionner WinUSB
  • Cliquer sur Reinstall Driver

Utilisation

  • Démarrer SDRSharp
  • Dans source RTL-SDR (USB)
  • Dans configuration, sélectionner Generique RTL2832U OEM

  • Cliquer sur le bouton play

Exemple d'appui sur le bouton de la télécommande de mon portail

sdrsharp_433.jpg

  • Enregistrement des données transmises par la télécommande

Dans le menu Recording cliquer sur le bouton record puis appuyer sur le bouton de votre télécommande. SDRSharp

SDRSharp va créer un fichier audio dans son répertoire :

Il est possible d'ouvrir ce fichier avec Audacity ou Wavosaur que je préfère et qui permet de facilement mesurer les temps des différents états de la trame.

  • Ouvrir le fichier avec Wavosaur

Trames reçues :

Détail d'une trame :

Décodage d'une trame OOK :

Mesure des temps :

Sélectionner la partie de trame à mesurer puis faire un clic droit et propriétés. Wavosaur indique que la fréquence échantillonnage est de 2 400 000 Hz et que 3253 échantillons sont sélectionnés. La période est donc de 1/2400000*3253 = 1.355ms

Reproduction du code

Une fois que le code lu, vous pouvez utiliser le code ci dessous pour le revoyer facilement vers un transmetteur 433Mhz.

Indiquer les temps en micro seconde à l'état haut et l'état bas quand un bit est à '1' ou '0'

unsigned int TimeHighLevelHigh = 1088;
unsigned int TimeLowLevelHigh = 272;
unsigned int TimeHighLevelLow = 408;
unsigned int TimeLowLevelLow = 952;
|main.ino
#include "RfManager.h"
 
RfManager rfManager = RfManager();
 
unsigned char code[] = { 1,0,1,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0}; //Code bouton
 
void setup() {
 
	rfManager.setTransmitPin(4);
}
 
void loop() {
 
	if (digitalRead(6) == 0)
	{
		rfManager.send(code, sizeof(code));
		//Attend 10 ms
		delay(10);
	}
}
|RfManager.cpp
#include "RfManager.h"
 
unsigned char TransmitPin = 0;
 
unsigned int TimeHighLevelHigh = 1088;
unsigned int TimeLowLevelHigh = 272;
unsigned int TimeHighLevelLow = 408;
unsigned int TimeLowLevelLow = 952;
 
RfManager::RfManager() {
 
}
 
void RfManager::send(unsigned char* code, unsigned int length)
{
	for (int i = 0; i <length; i++) {
		if (code[i] == 1)
			transmit(1);
		else
			transmit(0);
	}
}
 
void RfManager::setTransmitPin(unsigned char pin)
{
	TransmitPin = pin;
	pinMode(TransmitPin, OUTPUT);
}
 
void RfManager::transmit(unsigned char bit) {
 
	if (bit == 1)
	{
		digitalWrite(TransmitPin, 1);
		delayMicroseconds(TimeHighLevelHigh);
		digitalWrite(TransmitPin, 0);
		delayMicroseconds(TimeLowLevelHigh);
	}
	else
	{
		digitalWrite(TransmitPin, 1);
		delayMicroseconds(TimeHighLevelLow);
		digitalWrite(TransmitPin, 0);
		delayMicroseconds(TimeLowLevelLow);
	}
}
|RfManager.h
#ifndef _RfManager_h
#define _RfManager_h
 
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#endif
 
#include <stdint.h>
 
class RfManager {
 
public:
	RfManager();
	void send(unsigned char* code, unsigned int length);
	void setTransmitPin(unsigned char pin);
 
private:
	void transmit(unsigned char bit);
};
 
#endif

Résultat sur la sortie de l'Arduino :

transmission_433mhz.txt · Dernière modification: 2018/05/01 16:21 par 88.164.131.165