Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide programmation Arduino - Projet de Terminale

    5 décembre 2018 à 15:50:10

    Bonjour à tous et à toutes,

    Je suis en Terminale S-SI et j'ai besoin de votre aide ! En effet, il est cette année dans mon devoir, et celui de mon groupe, de réaliser un projet que nous présenterons pour le bac aux alentours du mois d'avril.

    Je suis très intéressée par la programmation et aimerais poursuivre mes études dans ce domaine l'année prochaine, c'est pourquoi j'ai naturellement choisi de me consacrer à cette partie du projet. Cependant, je débute tout juste, et nous devons utiliser Arduino, j'essaie de m'appuyer sur tout ce que j'ai vu en cours, des livres, et sur internet, mais j'ai malheureusement l'impression de m'emmêler quelque peu les pinceaux...

    Description synthétique du projet :

    Nous avons choisi de réaliser une hotte mobile : nous devons pouvoir la déplacer dans diverses salles, c'est pourquoi "l'habitacle" de notre hotte sera fixé sur un petit chariot. Concernant la partie mécanique, nous avons choisi de faire coulisser la porte de notre hotte à l'aide de rails. Lors de manipulations impliquant la présence de produits chimiques plus ou moins dangereux, la hotte doit être capable de protéger l'utilisateur : elle doit se fermer en cas de danger, produire un avertissement visuel et sonore, et aspirer/ventiler l'intérieur de la hotte, avec un filtre bloquant le passage des gazs nocifs vers l'extérieur.

    De façon un peu plus précise, à l'allumage de la machine, la porte doit pouvoir se lever toute seule si le capteur de gaz considère l'air "sain", et une led verte doit s'allumer, sinon, la porte reste fermée, et, dans ce cas, s'allument une alarme et une led rouge.

    Dans la mesure où aucun gaz nocif n'est détecté au moment de l'allumage, la porte se mettra et restera en position haute le temps de faire les manipulations voulues sous la hotte. Dès qu'un danger est alors détecté, la porte se ferme, une alarme et une led rouge s'allument, faisant s'éteindre la led verte. La porte revient en position haute dès que tout danger est écarté.

    Pour le moment, elle doit disposer de plusieurs fonctionnalités/boutons : un pour stopper l'alarme, un autre pour allumer la machine, un pour éclairer l'intérieur de la hotte quand on le souhaite, et deux autres destinés à monter ou descendre la porte de façon "progressive", à notre guise. Et enfin, il doit y avoir un petit panneau lcd pour indiquer la qualité de l'air, le nom et le taux des gazs détectés...

    Voici ce que j'ai commencé à faire :

    int etat=0; // variable utilisée pour memoriser les etapes actives
    int initialisation = 2; //
    int boutonhaut = 1; // le numéro de la patte du bouton pour lever la porte
    int boutonbas = 5; // le numéro de la patte du bouton pour descendre la porte
    int lampe = 3; // le numéro de la patte de la lampe
    int boutonlampe = 6; // le numéro de la patte du bouton d'activation de la lampe
    int boutonallumage = 4; // le numéro de la patte du bouton d'allumage de la machine
    int ledv = 12; // le numéro de la patte de la led verte
    int ledr = 13; // le numéro de la patte de la led rouge
    int alarme = 14; // le numéro de la patte de l'alarme
    int boutonalarme = 15; // le numéro de la patte du bouton de désactivation de l'alarme
    int capteurgaz = 11; // le numéro de la patte du capteur de gaz
    int autohaut = 7; // la porte se lève automatiquement --> moteur
    int autobas = 8; // la porte descend automatiquement --> moteur
    
    boolean etat_init=false;
    boolean etat_boutonallumage=false; //variable pour regarder l'état du bouton d'allumage de la machine
    boolean etat_boutonhaut=false; //variable pour regarder l'état du bouton pour lever la porte
    boolean etat_boutonbas=false; //variable pour regarder l'état du bouton pour descendre la porte
    boolean etat_boutonalarme=false; //variable pour regarder l'état du bouton de désactivation de l'alarme
    boolean etat_boutonlampe=false; //variable pour regarder l'état du bouton de la lampe
    boolean etat_capteurgaz=false; //variable pour regarder l'état du capteur de gaz
    
    void setup() {
      // put your setup code here, to run once:
     pinMode(initialisation, INPUT);
     pinMode(boutonhaut, INPUT); //le bouton pour lever la porte est une entrée
     pinMode(boutonbas, INPUT); //le bouton pour descendre la porte est une entrée
     pinMode(boutonallumage, INPUT); //le bouton d'allumage de la machine est une entrée
     pinMode(boutonlampe, INPUT); //le bouton d'activation de la lampe est une entrée
     pinMode(boutonalarme, INPUT); //le bouton de désactivation de l'alarme est une entrée
     pinMode(capteurgaz, INPUT); // le capteur de gaz est une entrée
     pinMode(lampe, OUTPUT); //la lampe est une sortie
     pinMode(alarme, OUTPUT); //l'alarme est une sorie
     pinMode(ledv, OUTPUT); //la led verte est une sortie
     pinMode(ledr, OUTPUT); //la led rouge est une sortie
     pinMode(autohaut, OUTPUT); // levage automatique de la porte (sortie)
     pinMode(autobas, OUTPUT); // // descente automatique de la porte (sortie)
     
     }
    
    void loop() {
      // put your main code here, to run repeatedly:
    etat_init= digitalRead(initialisation);
    etat_boutonallumage= digitalRead(boutonallumage); //lecture de l'état du bouton d'allumage
    etat_boutonhaut= digitalRead(boutonhaut); //lecture de l'état du bouton pour lever la porte de la hotte
    etat_boutonbas= digitalRead(boutonbas); // lecture de l'état du bouton pour descendre la porte de la hotte
    etat_boutonalarme=digitalRead(boutonalarme); //lecture de l'état du bouton de désactivation de l'alarme
    etat_boutonalampe=digitalRead(boutonlampe); //lecture de l'état du bouton de l'activation de la lampe
    etat_capteurgaz=digitalRead(capteurgaz); //lecture de l'état du capteur de gaz
    if (etat_init==true)
    etat=0;
      
            switch(etat)
        {
        case(0) : //declaration de l'etape 0
            digitalWrite(lampe,LOW); // désactivation de la lampe
            digitalWrite(alarme,LOW); // désactivation de l'alarme
            digitalWrite(ledv, LOW); // desactivation de la led verte
            digitalWrite(ledr, LOW); // desactivation de la led rouge
            digitalWrite(autobas,LOW); // désactivation de levage automatique de la porte
            digitalWrite(autohaut,LOW); // désactivation de la descente automatique de la porte
    
    
            if(etat_boutonlampe== 1) // vérifier l'état du bouton de l'activation de la lampe
            {   
            lampe = 1;   //  activation de la lampe
            }
            else 
            {
            lampe = 0; // la lampe reste éteinte
           
            if(etat_capteurgaz== 0) // vérifier l'état de l'air avec le capteur de gaz
                etat = 1;   //  activation etape suivante
            break;
    
    
     
        case(1) : //étape 1
            digitalWrite(autohaut, HIGH);      // la hotte se lève
            digitalWrite(ledv, HIGH); // la led verte s'allume
            digitalWrite(ledr, LOW); //la led rouge s'éteint
            if(etat_boutonlampe== 1) // vérifier l'état du bouton de l'activation de la lampe
            {   
            lampe = 1;   //  activation de la lampe
            }
            else 
            {
            lampe = 0; // la lampe reste éteinte
           
            
            if(etat_capteurgaz== 0)
            {
            etat = 1; // rien ne change (on repasse/reste à l'étape 1)
            }
            else 
            {
            etat = 2; // on passe à l'étape 2
            break;
     
        case(2) : //étape 2
            digitalWrite(ledv, LOW); // la led verte s'éteint
            digitalWrite(ledr, HIGH); // activation de la led rouge
            digitalWrite(alarme, HIGH); // activation de l'alarme
            digitalWrite(autobas, HIGH); // la porte de la hotte se baisse automatiquement
    
           if(etat_boutonlampe== 1) // vérifier l'état du bouton de l'activation de la lampe
            {   
            lampe = 1;   //  activation de la lampe
            }
            else 
            {
            lampe = 0; // la lampe reste éteinte
            
            
           if(etat_capteurgaz== 0)
           {
            etat = 1; // rien ne change (on repasse/reste à l'étape 1)
           }
           else 
           {
           etat = 2; // on passe à l'étape 2
    
           
           if(etat_boutonalarme== 1)
           {
           alarme = 0; // l'alarme arrête de sonner
           }
           else 
           {
           alarme = 1; // l'alarme continue de sonner
            
           break;
     
          }
    }

    Pour ce qui est des deux premières lignes :

    int etat=0; // variable utilisée pour memoriser les etapes actives
    
    int initialisation = 2; //

    Je ne suis pas du tout sûre qu'elles soient utiles, mais elles apparaissaient généralement dans les TPs que nous avons fait en cours sauf que je ne comprends pas tout à fait leur but. Dois-je les retirer ?

    Je me demande également si je n'ai pas mis trop d'entrées/sorties, s'il ne faut pas ajouter quelque chose pour le moteur, si ce sont les bons qualificatifs, si la "forme" est bien respectée... j'ai peur de faire n'importe quoi finalement...

    Merci d'avance à ceux qui passeront par là ! :)

    • Partager sur Facebook
    • Partager sur Twitter

    Aide programmation Arduino - Projet de Terminale

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown