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