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):

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;