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
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] -- [PROC : ARRÊTER]
01 Allumer LED rouge (Éteindre verte) 01 Arrêter le moteur
02 PROC-ARRÊTER
03 Répéter indéfiniment
04 Si porte fermée -- [PROC : OUVRIR]
05 PROC-ARRÊTER 01 Moteur sens ouverture
06 Sinon
07 Si demande fermeture -- [PROC : FERMER]
08 PROC-FERMER 01 Allumer LED rouge (Éteindre verte)
09 Si porte ouverte 02 Attendre 3s
10 PROC-ARRÊTER 03 Moteur sens fermeture
11 Allumer LED verte (Éteindre rouge)
12 Sinon
13 Si demande ouverture
14 PROC-OUVRIR
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.)
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] -- [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
08 PROC-FERMER -- [PROC : FERMER]
09 Si porte ouverte 01 Allumer LED rouge (Éteindre verte)
10 PROC-ARRÊTER 02 Attendre 3s
11 Allumer LED verte (Éteindre rouge) 03 Moteur sens fermeture
12 Sinon 04 Variable ETAT = 2
13 Si demande ouverture
14 PROC-OUVRIR
15 Si porte se ferme
16 Si barrière I/R active
17 PROC-OUVRIR
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 pour les essais). Attention, il ne faut pas bloquer le programme pendant la temporisation car on peut appuyer sur fermeture pour ne pas attendre.
Coup de pousse :
Je crée une variable TEMPO que j'initialise à 5000 ms (5s) lorsque la porte termine de s'ouvrir.
Si la porte est en position “Ouverte”, j'attends 100 ms et je diminue TEMPO d'autant.
Lorsque la TEMPO est ⇐ 0, je referme la porte comme si j'avais appuyé sur le bouton.