Go Down

Topic: ATmega328P et Attiny85 = Portée RF433 (Read 57 times) previous topic - next topic

Mayzz

Hello les makers !

Je suis en train de me faire un deck  avec un pi et je voudrais controller des télécommandes. Seul bémol les télécommandes type "Chacon" ne font que recevoir des ordres et ne communiquent pas leur statut.

Donc je suis en train de faire un module basé sur un Attiny85 avec un protocol très simple :

XXYYYYYYN

XX = Code émetteur
YYYYYYY = Code récepteur
N = Commande.

Pour les commandes :
0 = OFF
1 = ON
2 = STATUS
3 = RESET


La particularité de ce module c'est qu'il enverra un ACK à chaque demande. Donc à chaque fois que j'enverrais un ordre à la télécommande elle me confirmera qu'elle l'a bien exécuté.


J'ai utilisé la lib VirtualWire parce qu'elle permet d'envoyer directement des tableau de char / bytes.


Seulement je rencontre encore un problème de portée du signal. Le signal ne va pas à plus d'un mètre. Alors je sais ce que vous allez me dire: Jette tes modules à la poubelle, sauf que j'utilise l'émetteur pour commander mes prises chacon et il fonctionne à plus de 10m avec plusieurs murs en brique... Manifestement le problème vient soit de la réception, soit du code...


Voici les modules : https://fr.aliexpress.com/item/TZT-1-Set-2-pi-ces-433-MHZ-R-cepteur-metteur-Sans-Fil-Module-SYN115-SYN480R/32849777832.html?spm=a2g0s.9042311.0.0.27426c37dBhUSk


Je peux pas poster le code en entier, car il est trop long mais voici un extrait, avec juste l'accusé. Lorsqu'il reçoit le message de 9 caractère, il le renvoi à l'émetteur (écho). Ce code fonctionne mais le problème c'est la distance qui reste minable. J'ai essayé de modifier vw_setup à 500, 1000, 4000, 8000 mais ça ne change absolument rien. Une idée ? Ou peut être devrais-je utiliser une autre lib ?

Code: [Select]
void setup() {

  //Défini les modes pour les pins
  pinMode(PB4, OUTPUT); //LED VERTE
  pinMode(PB3, OUTPUT); //LED ROUGE
  pinMode(PB2, OUTPUT); //RELAY
  pinMode(PB1, OUTPUT); //RFTX
  pinMode(PB0, INPUT); //RFRX

     
  //Initialise la lib VirtualWire pour l'émission et la réception sur les pins de l'Attinty
  vw_set_tx_pin(PB1);
  vw_set_rx_pin(PB0);
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_rx_start();

}


void loop() {
  //Réception des données VirtualWire
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  if (vw_get_message(buf, &buflen)) {
    //On exige une taille de 9 bytes
    if (buflen == 9) {
      //On envoi un accusé de réception à l'émetteur (byte 50 = chr "2" ASCII).
      uint8_t msg[9] = {buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], 50};
      vw_send(msg, sizeof(msg));
      vw_wait_tx();
    }
  }
};



Go Up