Le module de puissance est connecté entre GND et PIN11.
Le capteur de niveau utilise l'entrée A0 et est alimenté entre GND et 5V.
Le système fonctionne en boucle ouverte.
Pour une perturbation donnée, on applique une tension de commande et on attend que le régime permanent soit établi. C'est long.
En répétant avec différentes commandes, on peut tracer la caractéristique statique du procédé : niveau statique = f(commande)
Sortie série
L’affichage de la sortie série peut se faire en utilisant le moniteur série de l’IDE arduino, accessible par CTRL+MAJ+M
Code à téléverser
/**
* caracteristique_statique.ino
* Ce sketch allume la pompe en continu selon la commande PWM à choisie
* Il affiche la hauteur d'eau dans le réservoir et la tension aux bornes de la pompe
*
* --> Caractéristique statique du procédé
* En atteignant le régime permanent pour plusieurs commandes PWM différentes,
* on peut tracer la hauteur statique en fonction de la tension aux bornes de la pompe c'est à dire en fonction du débit
*/
// 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
const byte PWM_COMMAND = 168; // Entre 80 (protection pompe) et 255 − Correspond à (PWM_COMMAND / 255) fraction du temps sur ON
// 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
// Commande de la pompe
analogWrite(PWM_PIN, PWM_COMMAND);
}
// 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
// Tension aux bornes de la pompe
float pumpVoltage = PWM_COMMAND / 255.0 * 12.0;
// Affichage des valeurs
Serial.print(hauteur, 0);
Serial.print('\t');
Serial.print(PWM_COMMAND, DEC);
Serial.print('\t');
Serial.println(pumpVoltage, 2);
// On attend cinq secondes − Le régime permanent est parfois long à atteindre
delay(5000);
}
// 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;
}