Photo de 'Arrêt d'urgence sur une carte arduino'

Arrêt d'urgence sur une carte arduino

Par Victor SUEUR le 08/05/2019

Que votre arduino commande une CNC, une imprimante 3D, un robot, ou tout autre composants mobile ou de puissance, vous pouvez désirer installer un arrêt d'urgence, comme ça, en cas de problème, vous gardez le contrôle.

Qu'est ce qu'une interruption de programme?

Une carte arduino, comme n'importe quel microcontrôleur programmé en langage séquentiel, exécute ses instructions les unes après les autres. Mais comment faire quand on souhaite exécuter une action à l'instant ou une broche change d'état? On met des tests partout? Non! On dit à l'arduino, au début du programme, de quitter ce qu'elle fait et d’exécuter une fonction. Mais comment on fait ça? Ici, on verra comment mettre en place un arrêt d'urgence. Cependant, si vous souhaitez faire autre chose, il vous suffit de changer le contenu de la boucle Arret_urgence, décrite plus bas (et éventuellement de la renommer)

Comment mettre en place un arrêt d'urgence au niveau hardware?

La mise en place au niveau hardware est très simple: Nous allons faire un montage permettant l'utilisation d'une résistance de pull-up interne (Vu dans l'article "Astuce - Les résistances de tirage (Pull-up et Pull-down)"). Nous allons voir comment faire avec un bouton poussoir normalement ouvert (les plus répandus) et avec un bouton poussoir normalement fermé, mais le montage et le logiciel fonctionneront de la même manière avec un switch.

Câblage, général

Pour faire un arrêt d'urgence logiciel fiable, nous allons utiliser les broches d'interruptions: voici un tableau des broches d'interruptions de chaque cartes:

Carte Broches
Uno, Nano, Mini D2, D3
Mega, mega2560, mega ADK D2, D3, D18, D19, D20, D21
Micro, Leonardo D0, D1, D2, D3,D 7
Zero Tous, sauf D4
MKR D0, D1, D4, D5, D6, D7, D8, D9, A1, A2
Due Tous

Vous devez donc choisir une des broches interrupt de ce tableau, qui correspond à votre carte.

Câblage:

Schéma de câblage d'un bouton poussoir Ce schéma est indépendant du type (NO ou NC) de votre bouton)

Programmation:

L'aspect programmation de cette fonction est légèrement plus complexe qu'un interrupteur classique:

Pour les boutons NO:

const int PIN_BOUTON = // le pin que vous utilisez

void setup(){
    pinMode(PIN_BOUTON, INPUT_PULLUP); //Déclaration de la broche en entrée avec pullup 
    attachInterrupt(digitalPinToInterrupt(PIN_BOUTON), Arret_urgence(), FALLING); //Créer l'interruption à partir de la broche PIN_BOUTON, lancer la fonction Arret_urgence() quand on détecte un passage de HIGH à LOW sur la broche PIN_BOUTON
}
void loop(){
     //votre programme
}
void Arret_urgence(){
    //Les actions à exécuter pour tout arrêter
    while(1){} //Blocage définitif du programme
}

Pour les boutons NC:

const int PIN_BOUTON = // le pin que vous utilisez

void setup(){
    pinMode(PIN_BOUTON, INPUT_PULLUP); //Déclaration de la broche en entrée avec pullup 
    attachInterrupt(digitalPinToInterrupt(PIN_BOUTON), Arret_urgence(), RISING); //Créer l'interruption à partir de la broche PIN_BOUTON, lancer la fonction Arret_urgence() quand on détecte un passage de LOW à HIGH sur la broche PIN_BOUTON
}
void loop(){
     //votre programme
}
void Arret_urgence(){
    //Les actions à executer pour tout arreter
    while(1){} //Blocage définitif du programme
}

Amélioration:

En cas de plantage complet de l'arduino, je vous recommande d'ajouter un interrupteur sur l'alimentation, qui ne sera actionné qu'en cas d'échec de la procédure d’arrêt d'urgence logiciel.

Rédaction: V.S.


Commentaires

Les commmentaires ne sont pas actifs