/**
* regulation_tor1.ino
* Ce sketch allume ou non la pompe selon que la hauteur d'eau atteint ou non un seuil donné
* Il affiche la date t, la hauteur d'eau et la valeur de la commande PWM
*
* --> Évolution des grandeurs pertinentes en fonction du temps
*/
// 1. Déclarations des constantes et variables globales
// Capteur de pression
const byte PRESSURE_SENSOR_PIN = A0; // Capteur Pin1 A0, Pin2 GND et Pin3 5 V.
// La hauteur est obtenue grâce à une relation affine hauteur (mm) = a × tension (V) + b
const float PENTE = 225.6; // Coefficient directeur a (mm/V) – Déterminé séparément
const float OFFSET = -30.50; // Ordonnée à l’origine b (mm) – Déterminé séparément
float hauteur = 0.0; // Variable globale car conception des sketches par blocs
// Module de puissance
const byte PWM_PIN = 11; // Module de puissance entre GND et PIN11
// Gestion du temps pour affichage
unsigned long startTime;
// Régulation TOR
int commande_pwm = 0; // PWM envoyée à la pompe (0 ou 255) – Variable globale nécessaire pour l’hystérésis du TOR deux seuils
// Seuils de régulation TOR (mm)
const float SEUIL_UNIQUE = 60.0; // Pour TOR un seuil
// 2. Setup − Exécuté une seule fois
void setup() {
// Fixe la vitesse de communication entre arduino et le PC
Serial.begin(9600);
// Configuration du module de puissance
TCCR2B = (TCCR2B & 0b11111000) | 0x07; // Fréquence PWM = 30 Hz
pinMode(PWM_PIN, OUTPUT); // Broche PWM_PIN parametrée en sortie
// Origine des dates
startTime = millis();
}
// 3. Loop − Variables recréées à chaque boucle
void loop() {
// Détermination de la hauteur
int pressureSensorRawValue = averageAnalogRead(PRESSURE_SENSOR_PIN, 30); // Moyenne de 30 valeurs entre 0 et 1023
float pressureSensorVoltage = pressureSensorRawValue * 5.0 / 1023.0; // Valeur de la tension en volts
hauteur = PENTE * pressureSensorVoltage + OFFSET; // Calcul de la hauteur d’eau dans le réservoir
// Date courante
float date = (millis() - startTime) / 1000.0;
// Commande TOR 1 seuil
if (hauteur > SEUIL_UNIQUE) {
commande_pwm = 0;
} else {
commande_pwm = 255;
}
analogWrite(PWM_PIN, commande_pwm);
// Affichage des valeurs
Serial.print(date);
Serial.print('\t');
Serial.print(hauteur, 0);
Serial.print('\t');
Serial.println(commande_pwm, DEC);
// On attend une seconde
delay(1000);
}
// 4. Fonctions − Variables locales
/* Cette fonction effectue une moyenne sur les sampleCount
valeurs renvoyées par analogRead(pin) */
int averageAnalogRead(byte pin, byte sampleCount) {
long sum = 0;
for(byte i = 0; i < sampleCount; i++){
sum = sum + analogRead(pin);
}
return sum / sampleCount;
}