Skip to content

Contrôler l’ouverture de la porte du garage et du portail grâce à la télécommande

Auteurs

URCA

Ce tutoriel s’intéresse à la traduction d’un GRAFCET avec des actions simultanées dans le logiciel Scratch pour l’utilisation de Home I/O.

Objectif : contrôler l’ouverture de la porte du garage et du portail grâce à la télécommande

Afin de transcrire un Grafcet dans Scratch, il faut exploiter la fonction « envoyer un message ». En effet, c’est grâce à cette fonction que l’on va gérer les convergences et divergences du GRAFCET.

Dans ce tutoriel nous prendrons l’exemple de la commande de la porte du garage comme support. Le programme est le suivant :

Un appui sur le bouton 1 de la télécommande ouvre la porte du garage et le portail simultanément, après une temporisation de 5 secondes en position ouverte pour la porte du garage et 1 seconde pour le portail, chaque porte se referme. Une fois la porte et le portail refermés le cycle reprend au départ et attend un appui sur le bouton 1.

Le GRAFCET résultant de ce fonctionnement est, comme dans le tutoriel précédent, particulier du fait des étapes « Stopper ». En effet, la commande de la porte du garage dans Home I/O peut prendre les 3 état suivants : monter / descendre / stopper. Après chaque déplacement, si la porte n’est pas arrêtée, alors la tentera de continuer à monter/descendre.

Le GRAFCET résultant ce fonctionnement est le suivant :

Programmation :

Dans un premier temps, il est nécessaire de définir quand notre programme sera actif. Pour cela la manière la plus simple est d’activer notre programme dès que l’on appuie sur le drapeau vert au-dessus de l’interface graphique. Aussitôt on envoie le message « X1 » pour signifier que notre GRAFCET est actif.

On sélectionne donc le bloc « Quand – drapeau vert – est cliqué » dans la catégorie « Evènements » et le bloc « envoyer à tous X1 » (X1 étant un nouveau message créé à partir du menu déroulant du bloc de la catégorie « Evènement »).

Suite à la réception du message « X1 », il faut attendre la condition d’ouverture de la porte : le bouton 1 de la télécommande. La suite du GRAFCET (après la transition « bouton 1 ») étant une divergence en « ET », il faut créer un nouveau script et donc envoyer un deuxième message « X2 » qui permettra la coordination du programme.

Après avoir reçu le message « X2 », il faut simultanément exécuter les actions concernant la porte et le portail telles qu’elles sont décrites dans le cahier des charges (respectivement étapes 1 à 6 et 11 à 16). Pour cela, on crée deux scripts distincts dans lesquels on exécute linéairement les actions suivantes :

Porte du garage Portail
Ouverture de la porte du garage Ouverture du portail
Attente que la porte soit totalement ouverte (capteur) Attente que le portail soit totalement ouvert (capteur)
Arrêt de la porte Arrêt du portail
Temporisation de 5 secondes Temporisation de 1 seconde
Fermeture de la porte Fermeture du portai
Arrêt de la porte Arrêt du portail

On obtient les scripts suivants :

Les prochains blocs de ces scripts vont permettre de gérer la convergence. Dans un premier temps, il faut créer une variable que l’on considérera binaire. Données -> Créer une variable -> « X3_2 »

A la fin du script concernant le portail, on met cette variable à 1. C’est cette variable mise à 1 qui nous indiquera que le cycle concernant le portail est terminé. Pour la synchronisation du programme, avant de permettre le retour à l’étape « 0 », il faut vérifier dans le script concernant la porte du garage que la variable « X3_2 » soit à 1. Une fois cette condition vérifiée, il faut réinitialiser la variable pour le cycle prochain : « mettre X3_2 à 0 ». Enfin, on peut retourner à l’étape concernant l’attente d’un appui sur le bouton 1 en envoyant le message « X1 ».

On obtient les scripts suivants :

A présent, grâce à la variable « X3_2 », le programme est synchronisé. Le programme est donc fonctionnel.

Programme complet :

En généralisant ce principe d’envoi de message aux points de convergence et de divergence, il est possible de traduire tous les GRAFCET dans Scratch.