Exercice : Remplissage d'une cuve

Simulateur

Cet exercice est à réaliser avec le simulateur en ligne Wokwi

On se propose de résoudre le problème suivant qui concerne le remplissage d'une cuve par deux pompes : il s'agit de ne pas faire déborder la cuve. De plus, la solution sera uniquement à base d'équations logiques (pas d'instruction de test comme if(...))

  • Les capteurs « h » e « b » sont à1 lorsqu'ils sont immergés et à 0 sinon,

  • lorsque le niveau est très bas (niveau inférieur à « b »), les deux pompes doivent fonctionner en même temps,

  • lorsque le niveau est moyen (niveau entre « b » et « h »), seule la pompe « P1 » fonctionne,

  • lorsque le niveau est trop haut (niveau supérieur à « h »), les deux pompes sont à l'arrêt.

  • les pompes ne peuvent fonctionner que lorsque le bouton poussoir est enfoncé

Question

Recherchez les équations logiques de commande des deux pompes P1 et P2 en fonction des deux capteurs et du bouton poussoir.

Simulation du fonctionnement

On se propose d'utiliser le montage suivant pour simuler le fonctionnement du remplissage de la cuve, les LED symbolisant les pompes :

Schéma de simulation de remplissage d'une cuveInformations[1]

Question

Il est demandé de réaliser le schéma ci-dessus sur le simulateur

Question

Proposez une solution logiciel que vous réaliserez et testerez.

Solution

Programme principal
1
#include "constantes.h"
2
bool capteurH,capteurB,boutonPoussoir;
3
bool pompe1,pompe2;
4
5
void setup(){
6
 pinMode(POMPE1, OUTPUT);
7
 pinMode(POMPE2, OUTPUT);
8
 pinMode(CAPTEURB, INPUT);
9
 pinMode(CAPTEURH, INPUT);
10
 pinMode(BOUTON_POUSSOIR, INPUT);
11
}
12
13
void loop(){
14
15
 //lire l'état des entrées
16
17
 capteurH = digitalRead(CAPTEURH);
18
 capteurB = digitalRead(CAPTEURB);
19
 boutonPoussoir = digitalRead(BOUTON_POUSSOIR);
20
21
 //Calcul des équations logiques
22
23
 pompe1 = boutonPoussoir & ~capteurH;
24
 pompe2 = boutonPoussoir & ~capteurB;
25
26
 //Partie opérative : commande pompes
27
28
 digitalWrite(POMPE1, pompe1);
29
 digitalWrite(POMPE2, pompe2);
30
}
31
32
fichier header
1
#define POMPE1 6
2
#define POMPE2 7
3
#define CAPTEURB 3
4
#define CAPTEURH 4
5
#define BOUTON_POUSSOIR 2