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

Prochaine révision
Révision précédente
transmission_433mhz [2018/04/30 08:37]
88.164.131.165 créée
transmission_433mhz [2018/05/01 16:21] (Version actuelle)
88.164.131.165 [Si4432]
Ligne 1: Ligne 1:
-Transmission 433Mhz+====== ​Transmission 433Mhz ​====== 
 + 
 +===== Module Arduino low cost ===== 
 + 
 +{{:​arduino_433.jpg?​200|}} 
 +===== 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 ==== 
 +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 ==== 
 +  * [[https://​www.amazon.fr/​WINGONEER-SI4432-470MHz-communication-%C3%A9metteur-r%C3%A9cepteur/​dp/​B06XWWJVSJ/​|Amazon]] - Prix ~8€ 
 +  * [[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.1525070270.txt.gz · Dernière modification: 2018/04/30 08:37 par 88.164.131.165