WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


transmission_433mhz

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
transmission_433mhz [2018/04/30 08:52]
88.164.131.165
transmission_433mhz [2018/05/01 16:21] (Version actuelle)
88.164.131.165 [Si4432]
Ligne 3: Ligne 3:
 ===== Module Arduino low cost ===== ===== Module Arduino low cost =====
  
 +{{:​arduino_433.jpg?​200|}}
 ===== Si4432 ===== ===== Si4432 =====
  
 +{{::​si4432_.jpg?​200|}}
  
 +==== Schema Arduino ====
 +
 +{{::​si4432_arduino.jpg?​direct}}
 +
 +[[https://​www.amazon.fr/​gp/​product/​B077P28RVW/​ref=oh_aui_detailpage_o04_s00?​ie=UTF8&​psc=1|Carte Arduino Uno 3.3V]]
 ==== Introduction ==== ==== Introduction ====
 Il s'agit d'un module RF paramétrable qui peut être utilisé pour différent types de protocoles de communication. ​ Il s'agit d'un module RF paramétrable qui peut être utilisé pour différent types de protocoles de communication. ​
Ligne 28: Ligne 34:
   * [[https://​www.amazon.fr/​gp/​product/​B077P28RVW/​|Carte Arduino 3.3V - 8Mhz]]   * [[https://​www.amazon.fr/​gp/​product/​B077P28RVW/​|Carte Arduino 3.3V - 8Mhz]]
    
 +===== Analyser et reproduire une trame 433Mhz =====
 +
 +==== Outil ====
 +J'​utilise un [[http://​www.nooelec.com/​store/​nesdr-smart.html|SDR NooElec NESDR SMArt]] qui fonctionne avec le logiciel [[https://​airspy.com|SDRSharp]] - [[https://​airspy.com/?​ddownload=3130|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
 +
 +{{::​zadigrtl2838.png?​400|}}
 +
 +==== Utilisation ====
 +
 +  * Démarrer SDRSharp
 +  * Dans source RTL-SDR (USB)
 +  * Dans configuration,​ sélectionner Generique RTL2832U OEM
 +
 +{{::​configsdrsharp.png?​600}}
 +
 +  * Cliquer sur le bouton play
 +
 +Exemple d'​appui sur le bouton de la télécommande de mon portail ​
 +
 +{{::​sdrsharp_433.jpg?​direct}}
 +
 +  * 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 ​
 +
 +{{:​sdrsharprecording.png?​200|}}
 +
 +SDRSharp va créer un fichier audio dans son répertoire : 
 +
 +{{::​sdrsharp_record_file.png?​direct}}
 +
 +Il est possible d'​ouvrir ce fichier avec [[https://​www.audacityteam.org/​|Audacity]] ou [[https://​fr.wavosaur.com/​|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 :
 +{{::​wavosaur_trames.png?​direct|}}
 +
 +Détail d'une trame :
 +{{::​wavosaur_trame.png?​direct|}}
 +
 +Décodage d'une trame OOK :
 +{{::​wavosaur_trame_binaire.png?​direct|}}
 +
 +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
 +
 +{{::​wavosaur_mesure_temps.png?​direct|}}
 +
 +===== 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'​
 +<code csharp>
 +unsigned int TimeHighLevelHigh = 1088;
 +unsigned int TimeLowLevelHigh = 272;
 +unsigned int TimeHighLevelLow = 408;
 +unsigned int TimeLowLevelLow = 952;
 +</​code>​
 +
 +<code csharp |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);​
 + }
 +}
 +
 +</​code>​
 +
 +<code csharp |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);​
 + }
 +}
 +</​code>​
 +
 +<code csharp |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
 +</​code>​
 +
 +Résultat sur la sortie de l'​Arduino : 
  
 +{{::​capture2.png?​direct|}}
  
transmission_433mhz.1525071142.txt.gz · Dernière modification: 2018/04/30 08:52 par 88.164.131.165