Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Besoin d'aide: créer une sonde de température radio

Wed Jul 31, 2013 8:13 pm

Bonsoir tout le monde,

Après m'être un peu familiarisé avec la Arduino, la atmega 328 et leurs utilisations avec la RPI j'aimerai réaliser une sonde de température radio avec un kit 433 Mhz et une sonde TMP36. J'avais vu que Idleman avait fait un beau petit tuto à propos de ça ( repris ici http://www.manuel-esteban.com/homepi-te ... spberrypi/ ) mais le problème c'est que lui il utilise une sonde de température numérique alors que la TMP36 est analogique.
En conséquence il faudrait donc adapter le code de la atmega pour transformer la valeur analogique de la sonde en numérique puis après envoyer ça par radio. De plus je fais fonctionner mon atmega avec le quartz interne de 8 Mhz (j'ai flasher son bootloader).
J'aurai donc besoin de votre aide pour adapter le code à injecter dans la atmega pour lire la TMP36 et l'envoyer par radio sur la RPI.


Merci d'avance,

François.

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Wed Jul 31, 2013 8:31 pm

Tututu.
C'est mon tuto, pas celui d'idleman, non mais oh ! :D
Rah, il me pique toute ma gloire. :x
Enfin ravi de voir que mon tuto puisse servir.

A mon avis, il suffit de prendre mon code et de remplacer la partie lecture de la température du DS18B20, pour lire le TMP36

Tu peux te servir de ce code là par exemple.
Très facile à mettre en place.
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 6:46 am

Ho autant pour moi, désolé :D Alors là je peux dire merci à tuto alors, c'est du beau boulot ;)

A ok, je remplace tout simplement le code de la DS18B20 par celui de la TMP36 et hop c'est bon. J'avais pensé faire ça mais mais le fait qu'une sonde est numérique tandis que l'autre est analogique m'a fait longuement hésité. Je vais essayer ça dans la journée :)

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 6:55 am

Normalement aucun problème oui.
Tu appliques les branchements du lien que j'ai filé, et tu utilises le code qui s'y trouve.
Au final, en analogique, c'est plus simple.

Si tu as le moindre problème, n'hésite pas.
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 1:53 pm

Bon voilà j'ai déjà fais le câblage de tout ça, dis moi si c'est bon :)

Image
(Clique droit -> Afficher l'image)

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 2:09 pm

Pour le récepteur ça à l'air bon.
Pour le node, tu fais le montage directement sur une puce atmega ?
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 2:15 pm

Yep, j'ai flasher le bootloader d'une atmega 328P (une autre que celle de la Uno) qui permet de la faire fonctionner avec le quartz interne de 8 Mhz (voir là => http://www.raspberrypi.org/phpBB3/viewt ... 88#p394088) Sinon, si il faut vraiment j'ai un quartz de 16 Mhz.

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 2:27 pm

Ok, à première vue, en regardant le schéma de l'atméga, ça m'a l'air okay.

Yapuka :D
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 3:09 pm

Bon maintenant le code, le plus marrant :D

Je vais d'abord commencer par la atmega. Je démarre de ce code là => http://chroniques-lunaires.com/rsc/arti ... etteur.ino que je vais retravaille.
J'avais un code qui m'affichait la température de la TMP36 via la Arduino et qui me le transmettait sur le port série:

Code: Select all

//Variable de la broche pour le TMP36
int sensorPin = 0; //la broche analogique sur laquelle le sortie VOut du TMP36 est raccordé
// Résolution est de 10 mV / degrée centigrade avec une offset de 500 mV 
// pour permettre la lecture de température négative

/*
 * setup() - cette fonction est exécutée un fois au démarrage d'Arduino.
 * Nous initialisons la connexion série avec l'ordinateur.
 */
void setup()
{
    Serial.begin(9600); //Démarrer la connexion série avec l'ordinateur
    // Pour voir le résultat, ouvrez le moniteur série d'Arduino IDE
}

void loop() // Constamment exécute et ré-exécuté
{
    // acquisition de la tension lue sur le senseur de température
    int reading = analogRead(sensorPin);
    // convertir cette lecture en tension, utilisez 3.3 pour un Arduino 3.3v
    float voltage = reading * 5;
    voltage /= 1024.0;
    // Afficher la tension
    Serial.print(voltage); Serial.println(" volts");
    // Maintenant, afficher la température
    float temperatureC = (voltage - 0.5) * 100 ; //convertie de 10mv par degrés avec un décalage (offset) de 500 mV
    //En degrés ((volatge - 500mV) fois 100)
    Serial.print(temperatureC); Serial.println(" degres C");
    // Maintenant, convertir en degrés Fahrenheight
    float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
    Serial.print(temperatureF); Serial.println(" degres F");
    delay(1000); //attendre une seconde
}
Je dois changer quelque chose ? Je suppose que oui car ici il n'y aura plus rien avec le port série.

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 3:48 pm

Tu peux laisser les affichages Serial.println pour suivre les résultats.
Tu modifie la fonction getTemperature pour y mettre le relevé de température.

Puis tu modifies :

Code: Select all

    temp = temp * 100;
    int tempInt = (int) temp;
    Serial.println(tempInt);
    transmit(true, tempInt);
Et hop elle est transmise.
C'est assez trivial en fait.
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 4:29 pm

Oui j'avoue ça a l'air moins compliqué que ce que je pensais :) Désolé mais je débute en codage C++ et en électronique.

Alors voilà le code que j'ai refais => http://www.flightspace.powa.fr/Electron ... _Radio.ino J'ai donc remplacé la partie de la sonde avec celle de la TMP36 et la fonction getTemperature. C'est bien ça ?

ToOnS
Posts: 492
Joined: Sat Mar 23, 2013 10:29 am

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 5:54 pm

Salut , le VCC de l'emetteur est sur GND , j'imagine que c'est une erreur sur le schema , pin reset de l'atmega "flottant" , ca marche quand meme ?
Dans le code y'a 2 void loop , je pense que celle du haut est en trop

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 6:22 pm

Salut :)

Oui c'est bien une erreur de schéma sur mon montage c'est bien mis. Ben si je me rappelle bien, quand j'avais fais mon montage pour voir si la atmega avait bien été flasher (voir dans le post adéquat), je n'avais pas relié la pin reset.

Pour le code ça je préfère que Yaug regarde car ça je ne sais pas trop.

ToOnS
Posts: 492
Joined: Sat Mar 23, 2013 10:29 am

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 8:48 pm

Comme tu veux mais tu devras attendre au moins demain qu'il rentre de l'aperoPI , de toute facon c'est sur et certain que ca va pas , 2 fois loop , 2 fois setup , voltage pas declaré , getTemperature non plus , essai juste de le compiler (meme de le televerser dans l'arduino nu sans la sonde , pas besoin) tu veras ca compilera meme pas

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 8:52 pm

Ha en disant que je préfère que Yaug regarde c'est vis à vis de moi hein car moi je m'y connais pas ! Si tu sais m'aider pas de soucis ;)

ToOnS
Posts: 492
Joined: Sat Mar 23, 2013 10:29 am

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 9:50 pm

essai ca , ca envoie "valeur" qui est la valeur analogique lue (ca evite les virgules et les nombres negatifs car "valeur" est toujours entre 0 et 1023 mais coté RPI faudra transformer comme avec le second code) :
avec ce schema (le quartz en moins):
Image
qui vien d'ici http://blog.idleman.fr/?p=2263 les 3/4 du code aussi a part suppression des valeurs negatives et le code de la lecture de la sonde qui devra etre sur analog 0 (au passage il a mis reset sur VCC via une resistance pour pouvoir reset l'atmega via l'arduino mais sinon c'est sur VCC en direct mais sur la video y'a pas donc tu as raison c'est pas obligatoire)

Code: Select all

/*
  Mesure de la température à l'aide d'un TMP36
 
 Le montage:
  
 Senseur de température:
 * TMP36 Analog Output - Pin A0 (analogique)
 
la partie transmission vien a 90% de http://blog.idleman.fr/?p=2263 
 
*/


int tempSensorPin = 0; // Pin analogique pour lecture de la tension de sortie du TMP36 (Vout).
                       // Resolution: 10 mV / degree celsius avec une offset de 500 mv.

//L'emetteur radio 433 mhz est branché au pin 9 de l'atmega
#define TRANSMITTER_PIN 9

float alimentation = 3.3; // remplacer par 5 si alimenter en 5V

int valeur = 0; //valeur analogique lue

//Tableaud de stockage du signal binaire a  envoyer
bool bit2[10]={};

void setup(){
      Serial.begin(9600); //Démarrer la connexion série avec l'ordinateur
    // Pour voir le résultat, ouvrez le moniteur série d'Arduino IDE
}

void loop(){
  float temp = lectureTemp();
  Serial.println(temp);
  itob(valeur, 9); // transformation de "valeur" en 9 bits (max 1024)
  //Envois du signal radio comprenant la temperature (on l'envois 5 fois parce qu'on est pas des trompettes :p, et on veux etre sur que ca recoit bien)
  int i=0;
  for(i=0; i<5;i++)
  {
    transmit();
    delayMicroseconds(666);   
  }
  //delais de 5sc avant le prochain envois
  delay(5000);
}

//Description:
//  Lecture de la température sur la pin A0
//
//Returns:
//  La température en degré Celcius.
//
float lectureTemp(){
 // Lecture de la valeur sur l'entrée analogique
 // Retourne une valeur entre 0->1024 pour 0->5v
  valeur = analogRead(tempSensorPin);  

 // Converti la lecture en tension
 float tension = valeur * alimentation;
 tension /= 1024.0; 
 
 // Convertir la tension (mv) en temperature
 float temperature = ((tension * 1000) - 500) / 10;
 
 return temperature;
}

//Fonction de tansmission radio
void transmit()
{
 
  // On envois 2 impulsions 1->0 avec un certain delais afin de signaler le depart du signal( verrou de depart)
  //Initialisation radio a  1
  digitalWrite(TRANSMITTER_PIN, HIGH);
  delayMicroseconds(275);     
  //Verrou 1
  digitalWrite(TRANSMITTER_PIN, LOW);
  delayMicroseconds(9900);     
  digitalWrite(TRANSMITTER_PIN, HIGH); 
  //Pause entre les verrous  
  delayMicroseconds(275);     
  //Verrou 2
  digitalWrite(TRANSMITTER_PIN, LOW);    
  delayMicroseconds(2675);
  // End on a high
  digitalWrite(TRANSMITTER_PIN, HIGH);
 
 //On envois les 8 bits stockes dans le tableau bit2
 int i;
 for(i=0; i<8;i++)
 {
    sendPair(bit2[i]);
 }
}

//Fonction d'envois d'un bit pure (0 ou 1) 
void sendBit(boolean b) {
  if (b) {
    digitalWrite(TRANSMITTER_PIN, HIGH);
    delayMicroseconds(310);   //275 orinally, but tweaked.
    digitalWrite(TRANSMITTER_PIN, LOW);
    delayMicroseconds(2500);  //1225 orinally, but tweaked.
  }
  else {
    digitalWrite(TRANSMITTER_PIN, HIGH);
    delayMicroseconds(310);   //275 orinally, but tweaked.
    digitalWrite(TRANSMITTER_PIN, LOW);
    delayMicroseconds(1000);   //275 orinally, but tweaked.
  }
}
 
//Fonction d'envois d'un bit codé en manchester (0 = 01 et 1 = 10) 
void sendPair(boolean b) {
  if(b)
  {
    sendBit(true);
    sendBit(false);
  }
  else
  {
  sendBit(false);
  sendBit(true);
  }
}

//fonction de conversion d'un nombre decimal "integer" en binaire sur "length" bits et stockage dans le tableau bit2
void itob(unsigned long integer, int length)
{  
  //needs bit2[length]
  // Convert long device code into binary (stores in global bit2 array.)
 for (int i=0; i<length; i++){
   if ((integer / power2(length-1-i))==1){
     integer-=power2(length-1-i);
     bit2[i]=1;
   }
   else bit2[i]=0;
 }
}
//Calcule 2^"power"
unsigned long power2(int power){    
 unsigned long integer=1;          
 for (int i=0; i<power; i++){      
   integer*=2;
 }
 return integer;
}
coté RPI pour transformer "valeur" en temperature (alimentation = 3.3 ou 5 , ca depend avec quoi est alimenté l'atmega) :

Code: Select all

 // Converti la lecture en tension
 float tension = valeur * alimentation;
 tension /= 1024.0; 
 
 // Convertir la tension (mv) en temperature
 float temperature = ((tension * 1000) - 500) / 10;

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Thu Aug 01, 2013 10:53 pm

Effectivement, j'étais à l'aPIro, donc pas de maintenance :D
Si demain t'as encore besoin, demande.

Et merci à toons au passage :D
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Fri Aug 02, 2013 7:58 pm

Pas de soucis Yaug ;)

Sinon Toons j'ai pas très bien compris pourquoi tu m'as remis ce schéma là, si je me trompe pas c'est bien un branchement qui permet de programmer la atmega sur la breadboard ? Je peux pas mettre directement mon atmega flashée sur la arduino pour la programmer ?

ToOnS
Posts: 492
Joined: Sat Mar 23, 2013 10:29 am

Re: Besoin d'aide: créer une sonde de température radio

Fri Aug 02, 2013 8:46 pm

moi non plus je comprend pas pourquoi j'avais mis ce schema (j'ai du bloquer sur le reset) , c'est celui la : Image
avec la sonde sur analog 0 et sans le quartz

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Fri Aug 02, 2013 9:12 pm

A ok pour le schéma, ça ma rassure car je ne comprenais rien :D

Donc alors pour montage, le schéma de idleman je l'avais déjà respecté et j'arrive à ça => http://www.flightspace.powa.fr/Electron ... _Radio.jpg

ToOnS
Posts: 492
Joined: Sat Mar 23, 2013 10:29 am

Re: Besoin d'aide: créer une sonde de température radio

Fri Aug 02, 2013 9:19 pm

c'est ca si le cable bleu est bien sur analog 0 (ou au autre analog mais que le code est en consequence) , j'ai la flemme de charger le PDF pour verifier (et que VCC de l'emetteur est pas sur GND , j'insiste encore avec ca car dans 2 mois on reverra le circuit ailleur avec VCC sur GND et "ca marche pas , pourtant j'ai tout essayé")

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Fri Aug 02, 2013 9:45 pm

Oui c'est bien ça, je viens de re-checker une dernière fois tout est bon :) Je m'attaque à programmer la atmega demain matin alors.

User avatar
Yaug
Posts: 126
Joined: Thu Jan 03, 2013 1:52 pm
Location: France, Moselle
Contact: Website

Re: Besoin d'aide: créer une sonde de température radio

Sat Aug 03, 2013 5:58 am

Merci Toons :)

Et n'hésite pas si tu as des questions sur le code.
Organisateur d'aPiro : http://forum.raspfr.org/viewtopic.php?id=6
Domotique DIY : http://ydle.fr
Communauté française : http://forum.raspfr.org/
RaspberryGeek / http://manuel-esteban.com

Franboy01
Posts: 76
Joined: Mon Jul 16, 2012 5:50 pm

Re: Besoin d'aide: créer une sonde de température radio

Sat Aug 03, 2013 7:45 am

Oui merci Toons ! :)

Alors déjà un petite question, j'ai uploadé le code sur la atmega, la seule variable que j'ai remplacé c'est le "float alimentation = 5; // remplacer par 5 si alimenter en 5V" qui était sur 3. Le seul soucis quand je branche une led sur le data de l'émetteur elle ne s'allume pas. Je pensais qu'elle allait s'allumer pour chaque transmission.

ToOnS
Posts: 492
Joined: Sat Mar 23, 2013 10:29 am

Re: Besoin d'aide: créer une sonde de température radio

Sat Aug 03, 2013 9:42 am

hum ... je vien de me rendre compte que dans le code le pin de transmission est le 9 et que sur le schema c'est le 15 , pourtant les 2 viennent du meme endroit (ca m'apprendra a avoir la flemme de charger le PDF) , essais en branchant la led sur 9 ou en changeant le code :
//L'emetteur radio 433 mhz est branché au pin 15 de l'atmega
#define TRANSMITTER_PIN 15

aussi "valeur" est sur 9 bits mais "transmit" en envoie que 8 (mais bon ca doit clignoter quand meme) :

Code: Select all

...
itob(valeur, 9); // transformation de "valeur" en 9 bits (max 1024)
...
//On envois les 8 bits stockes dans le tableau bit2
 int i;
 for(i=0; i<8;i++)
 {
    sendPair(bit2[i]);
 }
}

Return to “Français”