Exercice : Exp : Ecluse

Une écluse est un ouvrage d'art hydraulique implanté dans un canal ou un cours d'eau pour le rendre navigable et permettre aux bateaux de franchir des dénivellations.

• L'écluse possède un côté amont (grande hauteur d'eau) et un côté aval (petite hauteur d'eau) et un sas permettant de monter ou descendre les bateaux.

• Elle possède une porte côté bief amont (Pam) et une côté aval (Pav).

• La détection de position de la porte amont est obtenue par des détecteurs mécaniques porteAmO (Porte ouverte) et porteAmF (Porte fermée). Pour la porte aval : porteAvO et porteAvF

• Les portes de l'écluse sont munies de vannes (Vam et Vav), qui permettent de laisser passer l'eau afin de mettre l'écluse à niveau.

• Le pilotage des portes comme des vannes s'obtient en ouverture si la variable est égale à 1, et 0 pour la fermeture.

• Le niveau haut ou bas d'eau est mesuré par un capteur de pression (niveau haut : niv > 2050 et niveau haut : niv < 125).

• Les portes sont également équipées de feux (Fam & Fav) pouvant être vert ou rouge (0 = rouge, 1=vert), pour autoriser ou non le passage du bateau.

• Si un bateau arrive du bief aval, il peut rentrer dans le sas si le feu est vert. Lorsqu‘il est arrimé dans le sas, , l'éclusier donne l'ordre de monter (depart). Il faut alors :

  • Fermer la porte aval,

  • Remplir l'écluse,

  • Ouvrir la porte amont. Le bateau arrive dans le bief amont, l'éclusier déclare le sas libre

• Si un bateau arrive du bief amont, il peut rentrer dans le sas si le feu est vert. Lorsqu‘il est arrimé dans le sas, , l'éclusier donne l'ordre de descendre (depart). Il faut alors :

  • Fermer la porte amont,

  • Vider l'écluse,

  • Ouvrir la porte aval. Le bateau arrive dans le Bief aval, l'éclusier déclare le sas libre

• Pendant la manœuvre de l'écluse les feux sont rouges

1. CONFIGURATION DU CONTRÔLEUR

Pour que le programme fonctionne, nous avons besoin de déclarer la bibliothèque de prise en charge des entrées/sorties (from machine import Pin) ainsi que celle de gestion des temporisations (from time import sleep)

Les variables seront affectées aux broches comme l'indique le tableau suivant :

Information provenant du système ou de l'homme

Ordre de pilotage du système

Broche

Variable

Broche

Variable

D32

depart

D23

Pam

Adc6 (d34)

niv

D22

Pav

D25

porteAvO

D19 =rouge D18 = Vert

Fav

D26

porteAvF

D5=rouge D4=Vert

Fam

D27

porteAmO

D12

Vam

D14

porteAmF

D15

Vav

D35

libre

Question

A) Déclarer les entrées libre et départ comme des entrées logiques (sur D35 & D32) et niv comme entrée analogique (ADC6 sur D34)

Question

B) Déclarer les entrées/sorties nécessaires au programme de remplissage

Question

C) Compléter la déclaration d'entrées/sorties pour la vidange si nécessaire

2. PROGRAMMATION DES FONCTIONS VIDANGE REMPLISSAGE

Question

A) Proposez un programme permettant de tester l'état de remplissage du sas

Indice

Pour rappel

Indice

Pour commencer

1
#  1A
2
from machine import ADC, Pin
3
from time import sleep
4
5
niv = ADC(Pin(34))
6
#  1B
7
#  déclaration nécessaire au programme de remplissage
8
Pav = Pin(23, Pin.OUT)
9
Pam = Pin(22, Pin.OUT)
10
Vam = Pin(12, Pin.OUT)
11
porteAvF = Pin(26, Pin.IN, Pin.PULL_UP)
12
porteAmO = Pin(27, Pin.IN, Pin.PULL_UP)
13
14
while True:
15
    #init sorties
16
    print("go !")
17
    Pav.on()
18
    Pam.off()
19
    Vam.off()
20
    sleep(2)
21
22
    while (not porteAvF.value()):
23
        Pav.off()
24
        print("Fermer porte Aval")
25
        sleep(1)
26

Question

B) Proposez un programme permettant de tester l'état de vidange du sas

Indice

Structure presque identique...

3. PROGRAMMATION DE LA STRUCTURE GLOBALE

Question

A) A partir du graphe d'état, et en utilisant des boucles jusqu'à ce que, faire afficher les états sans activer pour l'instant de sorties, nous utiliserons 2 fonctions (à saisir) pour « simuler » les actions de remplissage et vidange du sas

Indice

1
# Fonctions permettant de visualisation ("simulation") du remplissage ou vidange
2
def Remplissage():
3
Signal.off()
4
# Signal n'est pas déclaré : ligne de code à rajouter dans la déclaration des variables d'entrées
5
# Signal = Pin(2, Pin.OUT)
6
sleep(1)
7
Signal.on()
8
sleep(2)
9
def Vidange():
10
Signal.on()
11
sleep(1)
12
Signal.off()
13
sleep(0.5)
14

Indice

Début de programme à compléter

1
#  début du programme : Solution avec boucle "faire jusqu'à ce que"
2
while True : #  boucle infinie
3
    print("état initial")
4
    while True: # boucle "faire jusqu'à ce que"
5
        if((départ.value() == 0) and (niv.read() < 300)):
6
            break  # boucle "faire jusqu'à ce que"
7
        print("Etat 'Attente niveau bas'")
8
        print("niv = ", niv.read())
9
        print("départ", départ.value())
10
        sleep(1)
11

4. PROGRAMMATION DE LA GESTION DES FEUX (BONUS)

Pour activer les feux, une variable Fam ou Fav est utilisée, appellant une inversion des pilotages des sorties.

Rappel :

D19 =rouge D18 = Vert

Fav=0 : c'est D19 qui est pilotée,

Fav=1 : c'est D18 qui est pilotée

D5=rouge D4=Vert

Pour Fam même raisonnement

Question

Proposer 2 fonctions qui permettraient de gérer l'allumage et l'extinction des feux amont et aval rouge et vert