ASTREOS_SMP.ino 3.7 KB
Newer Older
hichbra's avatar
hichbra committed
1 2
#define PORT_HALL A0
#define PORT_FSR A2
3 4
#define PORT_TEMP A1
#define INTERVALLE 1000
hichbra's avatar
hichbra committed
5

6 7 8
unsigned long temps_precedent ;

//--------------------------------------------------
hichbra's avatar
fix  
hichbra committed
9 10
int hallAnalogique ; // La lecture analogique du gaussmetre
int gauss; // Valeur convertie en gauss
hichbra's avatar
hichbra committed
11 12 13 14 15 16

// -------------------------------------------------
int fsrAnalogique ; // La lecture analogique depuis le pont diviseur FSR+Resistance.
int fsrVoltage; // La lecture analogique convertie en tension
unsigned long fsrResistance; // La tension convertie en resistance
unsigned long fsrConductance;
hichbra's avatar
fix  
hichbra committed
17
long newton; // La resistance convertie en force (Newton)
18

hichbra's avatar
hichbra committed
19
//--------------------------------------------------
20 21 22
int tempAnalogique ; // La lecture analogique du capteur de temperature
float tempVoltage ; // La lecture analogique convertie en tension
float temperature ; // Temperature
hichbra's avatar
hichbra committed
23 24 25

void setup(){
  Serial.begin(9600);
26
  temps_precedent = millis();
hichbra's avatar
hichbra committed
27 28 29 30 31 32
}   

void loop(){
  // ---------------------------------- Lecture et calcul du champ magnétique ---------------------------------------- 
  
  // lecture de la valeur analogique (entre 0 et 1024) pour une tension entre 0 et 5V
hichbra's avatar
hichbra committed
33
  hallAnalogique = analogRead(PORT_HALL);
hichbra's avatar
hichbra committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

  // transforme la valeur lue en Gauss
  // les valeurs évoluant entre 102 et 922 sont transformées en valeur évoluant entre -640 et 640
  // valeur à -640 pour 0.5V / 640 pour 4.5V
  gauss = map(hallAnalogique, 102, 922, -640, 640);
  
  // ------------------------------------- Lecture et calcul de la Force ----------------------------------------------
  // lecture de la valeur analogique du capteur de force (entre 0 et 1024) pour une tension entre 0 et 5V
  fsrAnalogique = analogRead(PORT_FSR);

  // lecture de la valeur analogique (entre 0 et 1023) pour une tension entre 0 et 5V (= 5000mV)
  fsrVoltage = map(fsrAnalogique, 0, 1023, 0, 5000);

  //Serial.print("Lecture de la tension en mV = "); Serial.println(fsrVoltage);
  if (fsrVoltage == 0) {
49
    //Serial.println("Aucune pression");
hichbra's avatar
hichbra committed
50
    newton = 0 ;
hichbra's avatar
hichbra committed
51 52 53 54 55 56 57 58
  } else {
    // 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;
    //Serial.print("FSR resistance en ohms = "); Serial.println(fsrResistance);
   
hichbra's avatar
hichbra committed
59
    fsrConductance = 1000000; // on mesure en micro-siemens 
hichbra's avatar
hichbra committed
60
    fsrConductance /= fsrResistance;
hichbra's avatar
hichbra committed
61
    //Serial.print("Conductance en micro-siemens : "); Serial.println(fsrConductance);
hichbra's avatar
hichbra committed
62 63
   
    // Approximation de la force en Newton
hichbra's avatar
fix  
hichbra committed
64
    newton = fsrConductance / 80;
hichbra's avatar
hichbra committed
65 66 67
    //Serial.print("Force en Newtons: "); Serial.println(fsrForce);  
  }

68 69 70 71 72
  // ------------------------------------- Lecture et calcul de la Température ----------------------------------------------
  tempAnalogique = analogRead(PORT_TEMP);
  tempVoltage = (tempAnalogique/1024.0)*5.0;
  temperature = (tempVoltage - 0.5)*100;

hichbra's avatar
hichbra committed
73
  // ------------------------------------- Affichage des résultats ----------------------------------------------
74 75 76 77 78
  if(millis()-temps_precedent >= INTERVALLE) {
    Serial.println("---------------------------------------------------");
    
    // Affiche la valeur en Gauss
    Serial.print("=> champ magnétique = "); Serial.print(gauss); Serial.println(" Gauss");
hichbra's avatar
hichbra committed
79
  
80 81 82 83 84
    // Affiche la valeur du capteur de force (Tension/Newton)
    Serial.print("=> Force Analogique = "); Serial.print(fsrAnalogique); Serial.print(" || Force en Newtons: "); Serial.println(newton); 
  
    // Affiche la Température
    Serial.print("=> Temperature Analogique = "); Serial.print(tempAnalogique); Serial.print(" || Temperature : "); Serial.println(temperature); 
hichbra's avatar
hichbra committed
85

86 87 88 89
    temps_precedent = millis();
  }
  
  delay(50);
hichbra's avatar
hichbra committed
90 91
}