Go Down

Topic: Problème de transmission nRF24L01 (Read 2377 times) previous topic - next topic

kedoeweth

Bonjours à vous.

Je travaille actuellement sur un système de transmission radio d'une mesure de température faite depuis un arduino , vers un autre arduino qui affiche le résultat sur un LCD

jusqu'ici rien de très passionnant. La transmission fonctionne ( la distance de transmission est plutôt faible) mais je rencontre un autre soucis.

La transmission de donnée n'est pas continue, et bizarrement c'est lorsque je met les doigts à proximité des câbles que ça transmet ...

pour info je met les codes, c'est de la bidouille, avec des tentatives de "debug"

Alors j'aimerai savoir si c'est un problème Logiciel ? ou matériel ?

Merci pour vos futures lumières

PS : Materiel : nRF24L01 ( je ne sais pas si ce sont des +) adjonction d'un condo entre + et GND, capteur de temperature LM35 , afficheur LCD non I2C ( prevu pour liberer de la place ;) )



Code: [Select]
/* module de mesure et d'envoi */

#include <SPI.h>      // Pour la communication via le port SPI
#include <Mirf.h>     // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
 
void setup() {
  Serial.begin(9600);
   
  Mirf.cePin = 9; // Broche CE sur D9
  Mirf.csnPin = 10; // Broche CSN sur D10
  Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
  Mirf.init(); // Initialise la bibliothèque

  Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
  Mirf.payload = sizeof(float); // Taille d'un message (maximum 32 octets)
  Mirf.config(); // Sauvegarde la configuration dans le module radio

  Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission
  Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception
   
  Serial.println("Go !");
}
 
void loop() {
  int valeur_brute = analogRead(A0); // Mesure la tension du LM35 sur la broche A0
 
do {
 
 
   
  float temperature = valeur_brute * (5.0 / 1023.0 * 100.0); // Transforme la mesure (nombre entier) en température via un produit en croix
 
 
  Serial.println(temperature); // affichage de la mesure sur le port serie
   
  Mirf.send((byte *) &temperature); // On envoie le message
 
  delay(1000); //attends 1 s
 
     } while (valeur_brute < 1000); //(tentative de forçage de l'envoi logiciel)

}




Code: [Select]
/* Module de reception et d'affichage */

#include <SPI.h>      // Pour la communication via le port SPI
#include <Mirf.h>     // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
#include <LiquidCrystal.h> //Pour l'affichage LCD

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
  Serial.begin(9600);

  Mirf.cePin = 9; // Broche CE sur D9
  Mirf.csnPin = 10; // Broche CSN sur D10
  Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
  Mirf.init(); // Initialise la bibliothèque

  Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
  Mirf.payload = sizeof(float); // Taille d'un message (maximum 32 octets)
  Mirf.config(); // Sauvegarde la configuration dans le module radio

  Mirf.setTADDR((byte *) "nrf01"); // Adresse de transmission
  Mirf.setRADDR((byte *) "nrf02"); // Adresse de réception

  Serial.println("Go !");
 
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("nRF24L01+ Temp");
  delay(1000);
  lcd.clear();
  lcd.print("Connecting.....");
  lcd.clear();
  delay(1000); 
}

void loop() {
  float temperature;

  if(Mirf.dataReady()){
    Mirf.getData((byte *) &temperature); // Réception du paquet
    Serial.println(temperature); // Affiche le message
    Serial.println();

  lcd.setCursor(4, 0);
  lcd.print("Temp:");
  lcd.setCursor(10, 0);
  lcd.print(temperature);
  lcd.print("C");
     
  }
}

infobarquee

bonjour,
Quote
La transmission de donnée n'est pas continue, et bizarrement c'est lorsque je met les doigts à proximité des câbles que ça transmet .
hummmm
mets une photo du montage
tu n'as pas un fil en l'air?
AUCUNE AIDE PAR MP

Artouste

Bonjours à vous.

Je travaille actuellement sur un système de transmission radio d'une mesure de température faite depuis un arduino , vers un autre arduino qui affiche le résultat sur un LCD

jusqu'ici rien de très passionnant. La transmission fonctionne ( la distance de transmission est plutôt faible) mais je rencontre un autre soucis.

La transmission de donnée n'est pas continue, et bizarrement c'est lorsque je met les doigts à proximité des câbles que ça transmet ...

pour info je met les codes, c'est de la bidouille, avec des tentatives de "debug"

Alors j'aimerai savoir si c'est un problème Logiciel ? ou matériel ?

Merci pour vos futures lumières

PS : Materiel : nRF24L01 ( je ne sais pas si ce sont des +) adjonction d'un condo entre + et GND, capteur de temperature LM35 , afficheur LCD non I2C ( prevu pour liberer de la place ;) )
Bonsoir
[HUM] Faut pas mettre ses doigts ou autres appendices n'importe où sans d'abord  réfléchir au conséquences "possibles"
Ton LM35 est cablé "exactement' comment ? 8)


kedoeweth

je touche à rien c'est ça le plus drôle dans l'histoire, je met juste les doigts autour des "bornes", et je n'ai pas mis de condensateur sur le LM35


infobarquee

mets déjà un condo de 100nf entre 5v et gnd sur le lm35

torsade tes fils du nrf et teste
AUCUNE AIDE PAR MP

kedoeweth

oui je chope un 100 nano demain au taff, pour torsader, je fait une tresse avec tous les cables ? pas un par un

trimarco232

Bonjour,
Quote
torsade tes fils du nrf et teste
... la distance est vraiment faible :
- peu probable que la vraie cause provienne de là
- par ailleurs : difficile de torsader

en attendant d'aller plus loin, peux-tu, pour voire ce qui s'en suit ?
- éloigner les 2 montages
- si rien de neuf, permuter les 2 modules nrf


ChPr

Je me suis aperçu, avec d'autres modules, que lorsque l'émetteur et récepteur étaient trop proches l'un de l'autre, la réception ne se faisait plus. Certainement un problème de saturation au niveau du récepteur.

Peut-être est-ce votre cas.

Cordialement.

Pierre

Pourquoi faire simple alors qu'il est si facile de faire compliqué !

kedoeweth

Bonjour,
... la distance est vraiment faible :

en attendant d'aller plus loin, peux-tu, pour voire ce qui s'en suit ?
- éloigner les 2 montages
- si rien de neuf, permuter les 2 modules nrf

Je me suis aperçu, avec d'autres modules, que lorsque l'émetteur et récepteur étaient trop proches l'un de l'autre, la réception ne se faisait plus. Certainement un problème de saturation au niveau du récepteur.

Peut-être est-ce votre cas.

Cordialement.

Pierre


Bonjour

C'est halucinat je suis tombé sur une serie de nRF de #!*$ù la portée max est de quelque centimètres...

je les utiliserais avec mes élèves pour mettre en évidence les transmissions sans fil, mais c'est pas sérieux...

Pour les permutations, j'en ai 10 des modules, je les ai tous permuté, modifié avec sans condo etc , j'ai même changer les cartes puisque j'en ai 6... des arduino, elegoo, kuman etc, même l'originale me fait la même chose

j'ai refait une partie du programme juste pour enlever le LM35 ( au cas ou ) et simplement de faire un compteur d'implémentation qui change chaque seconde


Code: [Select]
void loop()
{
  for (int i=0; i <= 1000; i++)
    {
    Serial.println (i);
    Serial.println();
    Mirf.send((byte *) &i);
    delay(1000);
     }
}



Code: [Select]
void loop()
{
 int i;
 if(Mirf.dataReady())
    {
    Mirf.getData((byte *) &i); // Réception du paquet
    Serial.println(i); // Affiche le message
    Serial.println();

    lcd.setCursor(0, 0);
    lcd.print("valeur : ");
    lcd.setCursor(8, 0);
    lcd.print(i);
    }
}


j'ai aussi mis une alimentation externe 12V / 1500mA sans laisser l'usb sur la carte emetrice et la ...miracle

sa fait deja 5 fois que ça va a 1000 et que ça ne s'arrète pas, mais la porté est toujours faible


je vais essayer les deux avec des piles 9V ( l'interet est quand meme la portativité des systeme dans mon cas :smiley-twist:

je cours en acheter je vous dis ça après ;)

kedoeweth

je confirme donc, 7 heures que ça tourne... 1000 seconde par cycle depuis le dernier post ... et ça tourne encore

maintenant voir pour la distance..., j'ai bricolé un alim portable ... je me suis dis , peut etre que le port usb ne donne pas assez etc etc ....

bref, la distance .... j'ai quadruplé.... de 5 cm je suis passé a 20

grosse progression n'est il pas ?

trimarco232

Bonjour,
je lance donc un appel :
est-ce qu'une âme charitable peut envoyer 1 paire de nrf24l01+ éprouvés à kedoeweth pour qu'il puisse statuer concernant sur sa série de modules ?
(je lui enverrais bien les miens, mais ils ne sont pas testés et je n'ai plus d'arduino sous la main...)

trimarco232


kedoeweth

Bonjour,
je lance donc un appel :
est-ce qu'une âme charitable peut envoyer 1 paire de nrf24l01+ éprouvés à kedoeweth pour qu'il puisse statuer concernant sur sa série de modules ?
(je lui enverrais bien les miens, mais ils ne sont pas testés et je n'ai plus d'arduino sous la main...)
Salut,

 Merci de ta sollicitude, je continue à chercher dans les éventuelles librairie que je n 'ai pas encore explorée , peut être trouverais je une info sur la modification de la puissance d'émission

cedreatlas

Bonsoir kedoeweth
j'ai le même problème que toi, quand je touche les fils de la rf24, le sérial s'affole, quand je ne touche plus, il s'arrête, je me suis mêm rendu compte, que ma lampe "basse conso" ancien modele affolait le sérial, en l'éloignant, il s'arrête..j'ai une dizaine de nf24, toute même symptome!
As tu trouvé le pourquoi?

trimarco232

Bonjour,
et en arrêtant toutes les autres sources de 2.4GHz dans les parages, cela donne quoi ?

Go Up