diff --git a/Arduino/ASTREOS.ino b/Arduino/ASTREOS.ino index 4aa6500489f60d2de07c12bf0342af1f4027e752..97ab737d8f688c0fe003ec22d99754a0b5d313a4 100644 --- a/Arduino/ASTREOS.ino +++ b/Arduino/ASTREOS.ino @@ -1,18 +1,23 @@ -/* - GaussPlot 27/12/2011 Arduining.com -Showing Gauss measured by the SS495B in the serial monitor. -(Miniature Radiometric Linear Hall Efect Sensor) -Sensor connected to Analog channel 0. +#include <Adafruit_MAX31865.h> -Translated and commented by Meurisse D. for the tutorial -http://wiki.mchobby.be/index.php?title=Senseur-Hall-SS495A - -*/ #define XRANGE 50 -#define PORT_HALL A0 +#define PORT_HALL0 A0 +#define PORT_HALL1 A1 +#define PORT_HALL2 A4 +#define PORT_HALL3 A5 +#define PORT_HALL4 A6 +#define PORT_HALL5 A7 #define PORT_FSR A2 +#define INTERVALLE 100 + +#define RREF 430.0 // Valeur de la resistance Rref. 430 pour PT100, 4300 pour PT1000 +#define RNOMINAL 100.0 // Resistance nominal 0-degrees-C du capteur, 100 pour PT100, 1000 pour PT1000 + -int x,gss ; +unsigned long temps_precedent ; +unsigned long temps_precedent_temperature ; + +int x,gss0, gss1, gss2, gss3, gss4, gss5 ; int fsrAnalogique ; // La lecture analogique depuis le pont diviseur FSR+Resistance. int fsrVoltage; // La lecture analogique convertie en tension @@ -20,25 +25,59 @@ unsigned long fsrResistance; // La tension convertie en resistance unsigned long fsrConductance; long fsrForce; // La resistance convertie en force (Newton) +Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13); // Amplificateur pour sonde PT100 +float temperature; + void setup(){ Serial.begin(9600); + temps_precedent = millis(); + + max.begin(MAX31865_2WIRE); + temperature = max.temperature(RNOMINAL, RREF); } void loop(){ - // lecture de la valeur analogique du Gaussmètre (entre 0 et 1024) pour une tension entre 0 et 5V - int aValue = analogRead(PORT_HALL); + // lecture de la valeur analogique du Gaussmètre (entre 0 et 1024) pour une tension entre 0 et 5V + int aValue0 = analogRead(PORT_HALL0); + int aValue1 = analogRead(PORT_HALL1); + int aValue2 = analogRead(PORT_HALL2); + int aValue3 = analogRead(PORT_HALL3); + int aValue4 = analogRead(PORT_HALL4); + int aValue5 = analogRead(PORT_HALL5); //Serial.print(aValue); // lecture de la valeur analogique du capteur de force (entre 0 et 1024) pour une tension entre 0 et 5V - int fsrAnalogique = analogRead(PORT_FSR); + //int fsrAnalogique = analogRead(PORT_FSR); - // transforme la valeur de 0 à 1024 vers 0 à 50 - x = map(aValue, 0, 1024, 0, XRANGE); + // transforme la valeur de 0 à 1024 vers 0 à 50 + //x = map(aValue, 0, 1024, 0, XRANGE); + //x2 = map(aValue2, 0, 1024, 0, XRANGE); // transforme la valeur lue en Gauss - gss = map(aValue, 102, 922, -640, 640); + gss0 = map(aValue0, 102, 922, -640, 640); + gss1 = map(aValue1, 102, 922, -640, 640); + gss2 = map(aValue2, 102, 922, -640, 640); + gss3 = map(aValue3, 102, 922, -640, 640); + gss4 = map(aValue4, 102, 922, -640, 640); + gss5 = map(aValue5, 102, 922, -640, 640); + + //uint16_t rtd = max.readRTD(); // Lecture de l'amplificateur + //Serial.print("RTD value: "); Serial.println(rtd); + //float ratio = rtd; + //ratio /= 32768; + /* La récuperation de la température étant plus longue, on ne le fait qu'une fois toutes les secondes. + * Ainsi la mise à jour des valeurs de gauss au lieu une fois toutes les 1/10 de seconde + * et au bout de 10 valeurs, il y aura un gap de 200 millisecondes + */ + if(millis()-temps_precedent_temperature >= INTERVALLE*10) { + temperature = max.temperature(RNOMINAL, RREF); // Temperature de la sonde PT100 + temps_precedent_temperature = millis(); + } + //Serial.print("Ratio = "); Serial.println(ratio,8); + //Serial.print("Resistance = "); Serial.println(RREF*ratio,8); + //Serial.print("Temperature = "); Serial.println(max.temperature(RNOMINAL, RREF)); - // ------ Affichage d'un bargraph sur le moniteur série ---- + // ------ Affichage d'un bargraph sur le moniteur série ---- /*Serial.print("|"); for (int i=0;i<x;i++){ if(i==XRANGE/2-1)Serial.print("|"); @@ -53,7 +92,11 @@ void loop(){ // ---------------------------------------------------------- // affiche la valeur en Gauss - Serial.println(gss); + if(millis()-temps_precedent >= INTERVALLE) { + Serial.print(gss0);Serial.print(";");Serial.print(gss1);Serial.print(";");Serial.print(gss2);Serial.print(";");Serial.print(gss3);Serial.print(";");Serial.print(gss4);Serial.print(";");Serial.print(gss5);Serial.print(";");Serial.println(temperature); + //Serial.println(millis()-temps_precedent); + temps_precedent = millis(); + } //Serial.println(" Gauss"); // lecture de la valeur analogique (entre 0 et 1023) pour une tension entre 0 et 5V (= 5000mV) @@ -64,8 +107,8 @@ void loop(){ if (fsrVoltage == 0) { Serial.println("Aucune pression"); } else { - // La tension = Vcc * R / (R + FSR) où R = 10K et Vcc = 5V - // d'où FSR = ((Vcc - V) * R) / V + // La tension = Vcc * R / (R + FSR) où R = 10K et Vcc = 5V + // d'où FSR = ((Vcc - V) * R) / V fsrResistance = 5000 - fsrVoltage; // fsrVoltage est en millivolts donc 5V = 5000mV fsrResistance *= 10000; // 10K resistance fsrResistance /= fsrVoltage; @@ -87,6 +130,5 @@ void loop(){ }*/ // attendre 1/10 de seconde - delay(200); + //delay(1); } -