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 bouton est branché entre GND et PIN2.
Une LED rouge en série avec une résistance de 1 kΩ est branchée entre GND et PIN5.
Le moniteur série affiche le niveau d'eau. Le bouton permet de remplir le réservoir.
On peut relever l'état de la LED en fonction du niveau. Au remplissage ; à la vidange.
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
/**
* alarme_tor2.ino
* Ce sketch allume ou éteint une LED rouge selon la position de
* la hauteur d'eau entre deux seuils donnés. Il présente donc un hystérésis.
* Le bouton permet de remplir le réservoir en allumant la pompe lorsqu'on appuie dessus
* La hauteur d'eau dans le réservoir est affichée
*
* --> Caractéristique de transfert de la chaîne de mesure
*/
// 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
// Bouton
const byte BUTTON_PIN = 2; // Bouton entre GND et PIN2
// LED
const byte RED_LED_PIN = 5; // LED rouge + 1kΩ entre GND et PIN5
// Seuils d’alertes (mm)
const float SEUIL_HAUT = 70.0; // Pour TOR deux seuils
const float SEUIL_BAS = 50.0; // Pour TOR deux seuils
// 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
// Configuration du bouton
pinMode(BUTTON_PIN, INPUT_PULLUP); // Évite une valeur indéterminée lorsque le bouton n’est pas pressé (Force à la valeur 5 V - HIGH)
// Configuration des LED
pinMode(RED_LED_PIN, OUTPUT);
}
// 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
// Le bouton commande la pompe lorsqu’on appuie dessus
bool buttonPressed = (digitalRead(BUTTON_PIN) == LOW); // Vaut TRUE lorsque le bouton est pressé (0 V - LOW)
if (buttonPressed) {
analogWrite(PWM_PIN, 255); // PWM au max
} else {
analogWrite(PWM_PIN, 0); // PWM éteint
}
// Gestion des LED − TOR deux seuils
if (hauteur >= SEUIL_HAUT) {
digitalWrite(RED_LED_PIN, LOW);
}
if (hauteur <= SEUIL_BAS) {
digitalWrite(RED_LED_PIN, HIGH);
}
// Affichage de la hauteur
Serial.println(hauteur, 0);
// On attend une demi seconde
delay(500); // Augmenter le delay diminue la réactivité du bouton
}
// 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;
}