Ceci est une ancienne révision du document !
Maquette de porte automatisée (Programmation PICAXE)
Nous allons utiliser la maquette de porte automatisée afin de tester différents fonctionnements possibles.
Compétence(s)
J’ai acquis la(les) compétence(s) si :
Je suis capable de modifier un algorithme de fonctionnement initial afin de répondre à un nouveau besoin
J'ai acquis les notions de variables, sous-programmes, temporisations/délais
Nous avons découvert la programmation des objets au travers d'activités simples les années précédentes. Nous allons aujourd'hui programmer un objet plus complexe avec plus de possibilité.
Programmation
Maquette : Nom = Porte ; Dossier maquette virtuelle = Maquette/Activité2
Microcontrôleur : PICAXE28X1
Moteur : Les commandes avancer, reculer et arrêter seront produites par les broches B.4 et B.5 suivant la table de vérité suivante du “Pont en H”.
| B.5 | B.4 | Commande | Description |
| 0 | 0 | Arrêt | Libre (Aucun effort appliqué sur le moteur |
| 0 | 1 | Ouvrir | SAM (rotation sens des aiguilles d'une montre) |
| 1 | 0 | Fermer | SIAM (rotation sens inverse des aiguilles d'une montre) |
| 1 | 1 | Arrêt | Bloqué (Un effort empêche la rotation du moteur) |
| Nom | Broche(s) | Fonction |
| P28X1 | – | Définir mes ordres en fonction des informations disponibles et du programme utilisé |
| Bouton fermer | C.0 | Demander la fermeture de la porte |
| Bouton ouvrir | C.1 | Demander l'ouverture de la porte |
| Bouton | C.4 | Demander une autres chose |
| Fin de course Fermé | C.2 | Indiquer que la porte est totalement fermée |
| Fin de course Ouvert | C.3 | Indiquer que la porte est totalement ouverte |
| Barrière infra rouge | C.5 | Indique une personne à proximité de la porte |
| Capteur de lumière | A.0 | Indique la luminosité ambiante (de 0 à 1023) |
| Voyant Vert | B.0 | Signale : Marche, Ouvert, Absence de danger … |
| Voyant Rouge | B.1 | Signale : Arrêt, Fermé, danger … |
| Buzzer | B.2 | Générer un signal audible |
| Contacteur ouverture | B.4 * | Commander le moteur dans le sens d'ouverture |
| Contacteur fermeture | B.5 * | Commander le moteur dans le sens de fermeture |
Acti 1 : Ouvrir/Fermer la porte avec les boutons
Une 1ère version du programme fonctionne de la manière suivante :
Le moteur doit être arrêté si la porte est entièrement ouverte ou entièrement fermée. L'information (“ouverte” ou “fermée” est fourni par les capteurs de fins de course.
La porte s'ouvre ou se ferme si j'appuie sur le bouton correspondant et qu'elle n'est pas déjà ouverte ou fermée. Les informations sont fournies par les boutons (et les capteurs de fin de course).
Soit l'algorithme ou l'organigramme suivant :
Des commentaires qui ne sont pas à traduire peuvent figurer entre crochet.
[INITIALISATION]
[Condition de sécurité au démarrage]
01 Mettre le moteur a l'arrêt
[BOUCLE PRINCIPALE]
02 Répéter indéfiniment
03 Si Porte fermée
04 Mettre le moteur à l'arrêt
05 Sinon
06 Si demande de fermeture
07 Démarrer la fermeture
08 Si Porte ouverte
09 Mettre le moteur à l'arrêt
10 Sinon
11 Si demande ouverture
12 Démarrer ouverture
.
Bien comprendre les 2 représentations (algorithme et organigramme).
Noter la description du fonctionnement et l'algorithme sur votre copie,
Traduire l'algorithme en programme sur l'ordinateur avec BLOCKLY en utilisant les 4 blocs ci contre,
Le tester et montrer le résultat (fonctionnement correct) au professeur à l'aide du simulateur de maquette.
Coller l'image du programme à coté de l'algorithme dans votre classeur.
Acti 2 : Amélioration du programme
Pour chaque problème, noter sur votre copie, le fonctionnement attendu, l'algorithme et coller l'image du programme.
Acti 2-1 : Utiliser des sous programme/fonction
Pour rendre le programme modulaire (faciliter les modifications ultérieures) nous allons utiliser 3 sous-programmes/procédures “OUVRIR”, “FERMER” et “ARRÊTER”. Nous allons aussi utiliser les voyants pour informer l'utilisateur (rouge ne pas passer et vert/jaune passer) ainsi qu'une temporisation de 3s entre l'allumage du voyant rouge et la fermeture de la porte.
Coups de pousse 1
Ci contre, blocs à utiliser en plus des précédents
Je crée les 3 sous-programmes/procédures demandés (Faire glisser le bloc Procédures/Sous-fonction et lui donner un nom)
Compléter les 3 sous-programmes/procédures (Placer dedans les blocs utiles)
Supprimer les blocs devenus inutiles du programme principal et les remplacer par les blocs Procédures/Appeler correspondants
Coups de pousse 2
Si une LED est allumée, l'autre est éteinte
A l'initialisation, le moteur est arrêté et la LED rouge allumée
La LED n'est verte que si la porte est complètement ouverte
Si on veut fermer la porte, il faut attendre 3s après avoir allumer LED rouge
Algorithme type
-- [PROG PRINCIPAL]
01 Allumer LED rouge (Éteindre verte)
02 PROC-ARRÊTER
03 Répéter indéfiniment
04 Si porte fermée
05 Allumer LED rouge (Éteindre verte)
06 Attendre 3s
07 PROC-ARRÊTER
08 Sinon
09 Si demande fermeture
10 PROC-FERMER
11 Si porte ouverte
12 PROC-ARRÊTER
13 Allumer LED verte (Éteindre rouge)
14 Sinon
15 Si demande ouverture
16 PROC-OUVRIR
-- [PROC : ARRÊTER]
01 Arrêter le moteur
-- [PROC : OUVRIR]
01 Moteur sens ouverture
-- [PROC : FERMER]
01 Moteur sens fermeture
Acti 2-2 : Utiliser une variable
Nous voulons que la barrière infra rouge provoque la réouverture de la porte si elle détecte une personne lors de la fermeture. (Il faut donc se rappeler que la porte est en train de se fermer et utiliser une variable pour cela. en effet, aucun capteur n'indique le sens du mouvement, seule la fin de celui-ci est détecté pat les fins de course.)
Coups de pousse
Blocs supplémentaires à utiliser ci-contre.
Je crée une variable ETAT qui prendra les valeurs : 0 Arrêté ; 1 S'ouvre ; 2 Se ferme.
Modifier le programme et les sous programmes pour tenir compte des différents états.
Ajouter dans le programme principal l'utilisation de la barrière infra rouge.
Algorithme type
-- [PROG PRINCIPAL]
01 Allumer LED rouge (Éteindre verte)
02 PROC-ARRÊTER
03 Répéter indéfiniment
04 Si porte fermée
05 Allumer LED rouge (Éteindre verte)
06 Attendre 3s
07 PROC-ARRÊTER
08 Sinon
09 Si demande fermeture
10 PROC-FERMER
11 Si porte ouverte
12 PROC-ARRÊTER
13 Allumer LED verte (Éteindre rouge)
14 Sinon
15 Si demande ouverture
16 PROC-OUVRIR
17 Si porte se ferme
18 Si barrière I/R active
19 PROC-OUVRIR
-- [PROC : ARRÊTER]
01 Arrêter le moteur
02 Variable ETAT = 0
-- [PROC : OUVRIR]
01 Moteur sens ouverture
02 Variable ETAT = 1
-- [PROC : FERMER]
01 Moteur sens fermeture
02 Variable ETAT = 2
Acti 2-3 : Créer une temporisation
Nous voulons que sans appui sur le bouton de fermeture la porte se referme seule au bout d'un temps défini (5s). Attention, il ne faut pas bloquer le programme pendant la temporisation et pouvoir conserver l'utilisation du bouton “Fermer”. On utilise donc un compteur.
Coup de pousse :
Coups de pousse
Bloc supplémentaire à utiliser ci-contre.
Je crée une variable TEMPO que j'initialise à 5000 ms (5s) lorsque je demande à ouvrir la porte
Si la porte est en position “Ouverte” et TEMPO ⇐ 0, je referme la porte comme si j'avais appuyé sur le bouton
Sinon j'attends 100 ms et je diminue TEMPO d'autant
Algorithme type
-- [PROG PRINCIPAL] -- [PROC : ARRÊTER]
01 Allumer LED rouge (Éteindre verte) 01 Arrêter le moteur
02 PROC-ARRÊTER 02 Variable ETAT = 0
03 Répéter indéfiniment
04 Si porte fermée -- [PROC : OUVRIR]
05 PROC-ARRÊTER 01 Moteur sens ouverture
06 Sinon 02 Variable ETAT = 1
07 Si demande fermeture 03 Variable TEMPO = 5000
08 PROC-FERMER
09 Si porte ouverte -- [PROC : FERMER]
10 PROC-ARRÊTER 01 Allumer LED rouge (Éteindre verte)
11 Allumer LED verte (Éteindre rouge) 02 Attendre 3s
12 Si variable TEMPO <=0 03 Moteur sens fermeture
13 PROC-FERMER 04 Variable ETAT = 2
14 Sinon
15 Attendre 100ms
16 Variable TEMPO = TEMPO - 100
17 Sinon
18 Si demande ouverture
19 PROC-OUVRIR
20 Si porte se ferme
21 Si barrière I/R active
22 PROC-OUVRIR