433 et rf24l01

Tout ce qui est en rapport avec le développement du protocole radio
sbrillard
Messages : 4
Inscription : 05 Janvier 2014, 12:48

433 et rf24l01

Messagepar sbrillard » 05 Janvier 2014, 13:18

Bonjour

Je suis un collègue de EricDele
Formation: ingénieur informatique, DUT Electronique (C'est loin)

Je viens écrire ici car j'ai un projet de mon coté de système d'alarme et j'ai un peu travailler sur un émetteur/récepteur le rf24l01.
J'ai laisser tomber quelques temps à cause de la fiabilité de ce composant (pas chère on en a pour son argent)
Puis en discutant avec eric, il m'a parler de votre projet, il m'a prêter une émetteur/récepteur 433 que j'ai tester ce weekend.
J'en profite pour vous faire mais remarque et mon retour d'expérience si petite soit t'elle.

D'abord la différence que je vois avec le rf24l01 et le 433 c'est l'antenne intégrer au rf24l01. Sans ajouter une antenne je reçois dans toute ma maison.
Mes test avec le 433 ce sont solder à une porté de moins d'un mettre avant de commencer à perdre des paquets !
Coté rf24l01 j'ai l’impression qu'on puisse pas faire son propre protocole comme vous envisager de la faire j'ai l'impression que l’électronique gère tout.
Pour ma part j'ai utiliser la librairie standard.
Mon retour d'expérience a été très négatif: composant très sensible (j'en ai grillé à la pelle), bcp de perte de paquet ou complètement faux même.
Tout semblait dépendre de son humeur d'un coup plus rien ne marche plus le lendemain cela va mieux etc...
Du coup j'ai lâché l'affaire en me disant que de toute façon le composant était pour moi une boite noir et que le la bibliothèque était trop obscure pour débuggé.

Maintenant le 433
Déjà premier avantage l’émetteur/récepteur me semble bcp plus bas niveau, du coup on peut développer son propre protocole comme vous fêtes.
Ce qui implique que le débogage est possible (sous réserve d’oscilloscope).
Dans mes test ma porté sans antenne était de 1 mètre, j'ai diminuer le bitrate mais c'était à peine mieux. Avez-vous tester sans antenne ?
J'ai pas l'impression que l'on peut réglé la puissance.
Connaissez-vous la consommation ?

Personnellement le 433 me semble assurer une maîtrise au niveau du composant (débogage) qui est largement supérieur au rf24l01 et ça ça n'a pas de prix.

Seb

Zescientist
Messages : 360
Inscription : 23 Juillet 2013, 16:38
Localisation : Arques

Re: 433 et rf24l01

Messagepar Zescientist » 05 Janvier 2014, 13:33

Salut,

Merci pour ton retour très intéressant.
En effet, l'avantage de ces modules c'est leur fonctionnement bas niveau. On en fait ce que l'on veut!

Personnellement, sans antenne, sur la v0.2 d'Ydle je travaillais à moins d'un mètre, 3/4m avec antenne. Par contre avec la v0.5, avec antenne je couvre ma maison (18m). Et en améliorant l'alimentation, 60m en extérieur.

Voilà.
El'Radioman

sbrillard
Messages : 4
Inscription : 05 Janvier 2014, 12:48

Re: 433 et rf24l01

Messagepar sbrillard » 05 Janvier 2014, 16:17

Quand tu dis améliorer l'alim tu entends quoi ? fournir plus de courant ?

Zescientist
Messages : 360
Inscription : 23 Juillet 2013, 16:38
Localisation : Arques

Re: 433 et rf24l01

Messagepar Zescientist » 05 Janvier 2014, 17:32

Plus de tension.

Le récepteur peut-être alimenté en 12v et l'émetteur en 9v (ou l'inverse j'ai un doute).
Une alimentation avec une tension stable permettra aussi un meilleur fonctionnement.
Concernant la consommation à 5v, c'est de l'ordre de quelques mA.
El'Radioman

malot38
Messages : 12
Inscription : 11 Novembre 2013, 02:27

Re: 433 et rf24l01

Messagepar malot38 » 15 Janvier 2014, 13:50

hello,

je confirme, si tu laisse l'alim du RPI ou autre (5V), tu peux voir à l'oscillo enormement de bruit dans la transmission ou la reception. En montant la tension d'alim à 9 ou 12V, on voit vraiment très bien que le signal devient clair et que la porté augmente considerablement.

Pour ma part, j'ai fait qq test dans le labo sans l'antenne, et j'avais une porté de 8 10m sans pb. j'ai pas fait le test en soudant l'antenne en +.

a+

sbrillard
Messages : 4
Inscription : 05 Janvier 2014, 12:48

Re: 433 et rf24l01

Messagepar sbrillard » 19 Janvier 2014, 16:54

Merci pour l'info

Voila j'ai travaillé tout le weekend pour réaliser un début de protocole. (je suis en alim 5v et l'emetteur et le récepteur sont à 10cm)
J'ai vraiment pas mal galéré mais j'ai pu obtenir un truc qui marche assez bien

Je vous partages mon expériences.

- Ne plus envoyé de signale pendant plus de 5ms et mon recepteur devient très sujet au bruit !!!
- Comme un idiot j'ai voulu codé au départ mes zero par "pas de signal" et mes 1 par "un signal": grave erreur
- au final :
1. j'envoie un signale de synchronisation (un signal carré de période 2ms)
2. mon récepteur compte les fronts (en vérifiant la période) juqu'a en avoir assez et attend un niveau haut plus long de 2ms (début des données utiles)
3. des lors je code mes 1 et 0 par une durée variable de mon niveau haut ( 800µs et 400µs ), même durée de niveau bas
4. une fois le nombre de bit attendu reçu j'affiche le nombre

Tout front en dehors de ces timing provoque le récepteur à rechercher une synchronisation

Voila j'espère que ca pourra vous aider

L'emmetteur:

Code : Tout sélectionner

void setup() {
  pinMode(10,OUTPUT);
}

void loop() {
  delay(3000);
  send_start ();
  ecrire_12 ();
  delay(100);
  send_start ();
  ecrire_9 ();
}


void ecrire_12 () {
  send_1(); 
  send_1();
  send_0();
  send_0();
}

void ecrire_9 () {
  send_1(); 
  send_0();
  send_0();
  send_1();
}


void send_start () {
  for ( int i=0; i< 10; i++ ) {
    digitalWrite(10, HIGH);
    delayMicroseconds(1000);
    digitalWrite(10, LOW);
    delayMicroseconds(1000);
  }
  digitalWrite(10, HIGH);
  delayMicroseconds(2000);
  digitalWrite(10, LOW);
  delayMicroseconds(1000);
}

void send_1 () {
  digitalWrite(10, HIGH);
  delayMicroseconds(800);
  digitalWrite(10, LOW);
  delayMicroseconds(400);
}

void send_0 () {
  digitalWrite(10, HIGH);
  delayMicroseconds(400);
  digitalWrite(10, LOW);
  delayMicroseconds(400);
}


Le recepteur:

Code : Tout sélectionner





volatile unsigned long lastTime;
volatile unsigned int last_level_time=0;
volatile unsigned int last_last_level_time=0;
volatile unsigned int count_synchro = 0;
volatile boolean start_search = 1;
volatile boolean first_bit = 1;
volatile unsigned int trame[] = { 0,0,0,0,0,0,0,0 };
volatile int trame_pos = -1;



void setup() {
  Serial.begin(9600);
  pinMode(2,INPUT);
  attachInterrupt(0, begin_receive, CHANGE );
  lastTime =  micros();
  trame_pos = 0;
}

void loop() {
  delay(1000);
}



void begin_receive() {
  int level;
  unsigned long time;
  unsigned long deltaTime;
 
  // calcul du temps depuis le dernier changement d'etat
  time = micros();
  deltaTime = time - lastTime;
  last_last_level_time = last_level_time;
  last_level_time = deltaTime;
  lastTime = time;
 


  // On recupere le niveau
  level = digitalRead(2);
 
  // La que pour prendre la durée du niveau bas
  if ( level == 1 ) {
    return;
  }
 
  // Recherche synchro
  if ( start_search ) {
    if ( level == 0 && last_level_time >= 950 && last_level_time < 1050 && last_last_level_time >= 950 && last_last_level_time < 1050 ) {
      count_synchro++;
      return;
    }
    else if ( level == 0 && count_synchro > 5 && last_level_time >= 1900 && last_level_time < 2100 ) {
      Serial.println("start");
      count_synchro = 0;
      start_search = false;
      trame_pos = 0;
      return;
    }   
    else {
      count_synchro = 0;
    }
  }
 
  // On est synchro
  else {

    if ( first_bit && level == 0 && last_level_time >= 380 && last_level_time < 420 && last_last_level_time >= 950 && last_last_level_time < 1050 ) {
      trame[trame_pos++] = 0;
      first_bit = false;
    }
    else if ( first_bit && level == 0 && last_level_time >= 760 && last_level_time < 840 && last_last_level_time >= 950 && last_last_level_time < 1050 ) {
      trame[trame_pos++] = 1;
      first_bit = false;
    }   
    else if ( level == 0 && last_level_time >= 380 && last_level_time < 420 && last_last_level_time >= 380 && last_last_level_time < 420 ) {
      trame[trame_pos++] = 0;
      first_bit = false;
    }
    else if ( level == 0 && last_level_time >= 760 && last_level_time < 840 && last_last_level_time >= 380 && last_last_level_time < 420 ) {
      trame[trame_pos++] = 1;
    }
    else {
      start_search = true;
      first_bit = true;
      return;
    }
   
    if ( trame_pos == 4 ) {
      Serial.print(trame[0]);
      Serial.print(trame[1]);
      Serial.print(trame[2]);
      Serial.println(trame[3]);
    }
     
  }
 
}


sbrillard
Messages : 4
Inscription : 05 Janvier 2014, 12:48

Re: 433 et rf24l01

Messagepar sbrillard » 19 Janvier 2014, 16:55

Ha dernier petit détails : sans l'oscillo j'y serais vraiment pas arriver
car quand ca marche pas ca aide de voir la gueule de ses signeaux d'entrée et de sortie !

filoucaenais14
Messages : 65
Inscription : 19 Mars 2014, 17:10

Re: 433 et rf24l01

Messagepar filoucaenais14 » 27 Mars 2014, 15:14

Zescientist a écrit :Plus de tension.

Le récepteur peut-être alimenté en 12v et l'émetteur en 9v (ou l'inverse j'ai un doute).
Une alimentation avec une tension stable permettra aussi un meilleur fonctionnement.
Concernant la consommation à 5v, c'est de l'ordre de quelques mA.



j'ai un doute, vous vous alimentez en 12V le récepteur et 9V l’émetteur du master !
deja que dans le wiki l'alimentation se fait sur le 5V.
mais les pins du raspberry n'accepte que du 3V3 max

Zescientist
Messages : 360
Inscription : 23 Juillet 2013, 16:38
Localisation : Arques

Re: 433 et rf24l01

Messagepar Zescientist » 27 Mars 2014, 15:46

Salut Filoucaenais,

Les modules sont capables de travailler sur une plage de tension, dont voici les caractéristiques :
Récepteur :
Working voltage: 5V-9V DC quiescent current: 4mA
Émetteur :
Operating Voltage :3.5-12V


(c'était bien l'inverse de ce que j'avais dis!!!)

Actuellement, comme partout sur internet, on alimente en 5v, ce qui n'est pas terrible pour le raspberry comme tu l'indiques, bien que le système soit protégé au niveau du courant.
Pour faire dans la perfection, il serait nécessaire d'utiliser un "level shifter" avec d'un côté le 3.3V du rpi et de l'autre, du 9V par exemple.
Dans tous les cas, pour jouer avec différentes tensions, il est nécessaire de protéger le raspberry, que ce soit par transistors, optocoupleurs ou autres.

Le système I2C qui arrive avec la v0.6 permettra de protéger le rpi tout en apportant d'autres optimisations (portée et consommation CPU principalement).
El'Radioman

filoucaenais14
Messages : 65
Inscription : 19 Mars 2014, 17:10

Re: 433 et rf24l01

Messagepar filoucaenais14 » 27 Mars 2014, 21:42

mince moi qui voulait faire des essaies
je vais attendre un peu


Revenir vers « Protocole radio »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités

cron