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) CT 4.2 Appliquer les principes élémentaires de l’algorithmique et du codage à la résolution d’un problème simple. CT 5.5 Modifier ou paramétrer le fonctionnement d’un objet communicant. 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é.

Logiciels pour la programmation PICAXE (Utilisables à la maison) PICAXE BLOCKLY : programmation des microcontrôleurs PICAXE Simulateur de maquette PICAXE : test des programmes

Programmation

Informations préalables

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 Fin de course porte fermée activé 04 Mettre le moteur à l'arrêt 05 Sinon 06 Si bouton fermer appuyé 07 Démarrer la fermeture 08 Si Fin de course porte ouverte activé 09 Mettre le moteur à l'arrêt 10 Sinon 11 Si bouton ouvrir appuyé 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. ATTENTION : 1 seul voyant est allumé à un instant donné.
Il faut donc déterminer à quel moment les allumer.

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 (fin de course ouvert) Si on veut fermer la porte (Bouton fermer), 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 PROC-ARRÊTER 06 Sinon 07 Si demande fermeture 08 PROC-FERMER 09 Si porte ouverte 10 PROC-ARRÊTER 11 Allumer LED verte (Éteindre rouge) 12 Sinon 13 Si demande ouverture 14 PROC-OUVRIR	-- [PROC : ARRÊTER] 01 Arrêter le moteur -- [PROC : OUVRIR] 01 Moteur sens ouverture -- [PROC : FERMER] 01 Allumer LED rouge (Éteindre verte) 02 Attendre 3s 03 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é par les fins de course.)
ATTENTION : Le capteur infrarouge est désactivé si une personne est présente.

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 qui remplace alors le bouton fermer.

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 PROC-ARRÊTER 06 Sinon 07 Si demande fermeture 08 PROC-FERMER 09 Si porte ouverte 10 PROC-ARRÊTER 11 Allumer LED verte (Éteindre rouge) 12 Sinon 13 Si demande ouverture 14 PROC-OUVRIR 14 Si porte se ferme 16 Si barrière I/R désactivé 17 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 Allumer LED rouge (Éteindre verte) 02 Attendre 3s 03 Moteur sens fermeture 04 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 utiliser le bouton “Fermer” à tout moment. 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] 01 Allumer LED rouge (Éteindre verte) 02 PROC-ARRÊTER 03 Répéter indéfiniment 04 Si porte fermée 05 PROC-ARRÊTER 06 Sinon 07 Si demande fermeture 08 PROC-FERMER 09 Si porte ouverte 10 PROC-ARRÊTER 11 Allumer LED verte (Éteindre rouge) 12 Si variable TEMPO <=0 13 PROC-FERMER 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 désactivée 22 PROC-OUVRIR	-- [PROC : ARRÊTER] 01 Arrêter le moteur 02 Variable ETAT = 0 -- [PROC : OUVRIR] 01 Moteur sens ouverture 02 Variable ETAT = 1 03 Variable TEMPO = 5000 -- [PROC : FERMER] 01 Allumer LED rouge (Éteindre verte) 02 Attendre 3s 03 Moteur sens fermeture 04 Variable ETAT = 2