[TUTORIEL] Breakout RFM22. Envoi Température

Le forum de support des breakout de Snootlab

[TUTORIEL] Breakout RFM22. Envoi Température

Message non lude Florian » Mer 22 Juil 2015 10:43

Bonjour,

Aujourd'hui et à la suite du [TUTORIEL] Breakout RFM22. Jouons au PING-PONG!, nous allons envoyer une donnée variable.

rfm22-breakout-antenne-patch-433mhz-fr.jpg
rfm22-breakout-antenne-patch-433mhz-fr.jpg (45.9 Kio) Vu 916 fois

Dans le précédent tuto, nous avons simplement envoyé une donnée fixe (PING ou PONG) qui était pré-enregistrée dans le sketch. Cette fois-ci le tuto que nous allons réaliser va transmettre les données d'un capteur de température. Nous aurons donc une donnée qui change continuellement.
Pour rendre les choses plus interactives, on ajoutera des leds avec le module qui reçoit afin de savoir juste à l'oeil l'ordre de grandeur des températures captées et envoyées par le premier module RFM22.

RAPPEL:
Le RFM22 est un module bidirectionnel, c'est à dire qu'il peut à la fois émettre et recevoir une donnée. Ainsi avec plusieurs de ces modules, on peut les faire interagir et communiquer entre eux.

Datasheet du RFM22 disponible ici.

La librairie utilisée pour faire fonctionner ce produit a été développée par RadioHead, disponible ici.


EXEMPLE D'UTILISATION

Nous avons donc deux modules RFM22.
Le premier module est avec un capteur de température LM35DZ. Le module envoie tout simplement la température du capteur.
Le deuxième module est associé à trois leds(bleu-verte-rouge). Quand le module reçoit une température inférieure à 25°C, la led bleue s'allume. lorsque la température est comprise entre 25 et 35°C, le verte s'allume. Enfin quand il fait plus de 35°C, c'est la rouge.

- MATÉRIEL:


- SCHÉMA DU MONTAGE:

Montage transmission de température:
Transmission Temperature.png
Transmission Temperature.png (85.63 Kio) Vu 1199 fois

Montage réception de température:
Reception Temperature.png
Reception Temperature.png (84.78 Kio) Vu 1199 fois


Branchements:

Branchements communs aux deux montages.
    ==> Du module RFM22 au module RFM22:
    - La broche GPIO 0 à la broche TX ANT.
    - La broche GPIO 1 à la broche RX ANT.

    ATTENTION: si vous inversez ces branchements la portée de votre antenne sera à peine de quelques centimètres.

    ==> Du module RFM22 à la carte arduino Uno:
    - La broche 3.3V à la broche 3.3V.
    - Le GND au GND.
    - La broche SDO à la broche D12.
    - La broche NIRQ à la broche D2.

    ==> De la carte arduino Uno à la breadboard (pont diviseur):
    - Le GND au GND de chaque pont diviseur (soit à une patte de chaque résistance de valeur 3.3kOhms).
    - La broche D10 à une patte d'une résistance de valeur 1.8kOhms.
    - La broche D11 à une patte d'une résistance de valeur 1.8kOhms.
    - La broche D13 à une patte d'une résistance de valeur 1.8kOhms.

    ==> De la breadboard (pont diviseur) au module RFM22:
    - Du nœud des résistances 1.8 et 3.3kOhms (reliées à la broche D11) à la broche SDI.
    - Du nœud des résistances 1.8 et 3.3kOhms (reliées à la broche D13) à la broche SCLK.
    - Du nœud des résistances 1.5 et 3.3kOhms (reliées à la broche D10) à la broche NSEL.

Branchements concernant le montage transmission.
    ==> Du capteur de température LM35DZ à la carte Arduino Uno:
    - La pin VCC à la broche +5V.
    - La pin GND au GND
    - La pin Out(celle du milieu) à la broche A0.

Branchements concernant le montage réception.
    ==> Des leds à la carte Arduino Uno:
    - Les pins GND des leds au GND.
    - Les pins VCC des leds à une patte d'une résistance de 150 Ohms.
    - La patte libre de la résistance (liée à la led bleue) à la broche D5.
    - La patte libre de la résistance (liée à la led verte) à la broche D6.
    - La patte libre de la résistance (liée à la led rouge) à la broche D7.

Voilà pour la partie Hardware.

- CODE:
Sketch Transmission température:
Code: Tout sélectionner
/* Sketch Transmission Température */

//Librairies.
#include <SPI.h>    // Implantantion librairie SPI. Protocole de communication entre Arduino Uno et module RF22.
#include <RH_RF22.h>    // Implantation de la librairie RF22. Intègre les fonctions du modules RF22.

RH_RF22 rf22;    // Définition de la commande.

int Temperature;    // Stockage de la température. Valeur qui sera envoyée par le module RF22.

const char Capteur = A0;    // Affectation de la broche A0 à la variable Capteur.

// Différentes variables nécessaire pour la détermination de la température. Elles concernent le capteur.
float ValeurCapteur;
char PleineEchelle = 5;
int Resolution = 1024;
float Pas = 0.01;

void setup()
{
  pinMode(Capteur, INPUT);    // Configure la broche A0 en entrée.
 
  Serial.begin(9600);    // Initialisation de la vitesse de la liaison série.
  Serial.println("Sketch Temperature");
 
  if (!rf22.init()) // Vérification que le modem soit correctement initialisé.
  {
    Serial.println("Echec de l'initialisation modem!");
  }
  else
  {
    Serial.println("Succes de l'initialisation modem!");
  }
}

void loop()
{
  ValeurCapteur = analogRead(Capteur);    // Stockage de la valeur numérique de la broche A0 dans ValeurCapteur.
  Temperature = (((ValeurCapteur*PleineEchelle)/Resolution)/Pas);    // Calcul de la température d'après cette valeur numérique.
  Serial.println(Temperature);    // Affichage de la température dans le moniteur série.
 
  rf22.send((uint8_t*)&Temperature, sizeof(Temperature));    // Envoi de la température.
 
  delay(400);
}


Sketch Réception température:
Code: Tout sélectionner
/* Skecth Réception Température */

//Librairies.
#include <SPI.h>    // Implantation librairie SPI. Protocole de communication entre Arduino Uno et module RF22.
#include <RH_RF22.h>    // Implantation de la librairie RF22. Intègre les fonctions du modules RF22.

RH_RF22 rf22;    // Définition de la commande.

uint8_t buf[RH_RF22_MAX_MESSAGE_LEN];    // Variables qui vont permettre de
uint8_t len = sizeof(buf);               // décrypter les données reçues.

char* Valeur;    // Variable de stockage contenant ce qui est dans le buffer.

int Temperature;    // Variable contenant la température.

// Attribution des pins aux broches.
int LedBleu = 5;
int LedVerte = 6;
int LedRouge = 7;

void setup()
{
  Serial.begin(9600);    // Initialisation de la vitesse de la liaison série.
  Serial.println("Sketch Reception Temperature.");
 
  // Configuration des leds en sortie.
  pinMode(LedBleu, OUTPUT);
  pinMode(LedVerte, OUTPUT);
  pinMode(LedRouge, OUTPUT);

  if (!rf22.init())    // Vérification que le modem soit correctement initialisé.
  {
    Serial.println("Echec de l'initialisation modem!");
  }
  else
  {
    Serial.println("Succes de l'initialisation modem!");
  }
}

void loop()

  if (rf22.recv(buf, &len))    // Réception d'une donnée sous la forme ASCII.
  {
    Valeur = ((char*)buf);    // Stockage de cette donnée dans la variable Valeur.
    sscanf(Valeur, "%s", &Temperature);    // Conversion de la valeur ASCII en décimal.
    Serial.println(Temperature);    // Affichage de la température.
   
    if(Temperature < 25)    // Si température strictement inférieure à 25°C.
    {
      digitalWrite(LedBleu, HIGH);
      digitalWrite(LedVerte, LOW);    // On allume la Led Bleue.
      digitalWrite(LedRouge, LOW);
    }
    else if(Temperature > 35)    // Autrement si température strictement supérieure à 35°C.
    {
      digitalWrite(LedBleu, LOW);
      digitalWrite(LedVerte, LOW);    // On allume la Led Rouge.
      digitalWrite(LedRouge, HIGH);
    }
    else    // Autrement (entre 25 et 35°C).
    {
      digitalWrite(LedBleu, LOW);
      digitalWrite(LedVerte, HIGH);    // On allume la Led Verte.
      digitalWrite(LedRouge, LOW);
    }
  } 
}


Une fois les montages correctement réalisés et les deux sketchs dispatchés chacun dans un Arduino Uno, vous devriez obtenir les choses suivantes.

Réponse moniteur série Transmission:
MoniteurSérieTransmission.png
MoniteurSérieTransmission.png (31.13 Kio) Vu 1199 fois

Réponse moniteur série Réception:
MoniteurSérieRéception.png
MoniteurSérieRéception.png (37.15 Kio) Vu 1199 fois


Normalement si tout fonctionne correctement l'arduino avec le module récepteur doit avoir une des trois leds allumées.
La bleue si la température est strictement inférieure à 25°C.
La verte si la température est comprise entre 25 et 35°C.
La rouge si la température est strictement supérieure à 35°C.

Voilà pour ce tutoriel. A vous maintenant de remplacer le capteur de température par un autre afin de réaliser vos propres projets. Et n'hésitez pas à les poster dans la rubrique "Vos idées, vos projets" de notre forum.

Seule l'imagination peut vous stopper dans vos projets.
Florian
 
Messages: 75
Inscription: Mer 24 Juil 2013 17:36

Retourner vers Breakout de Snootlab

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron