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à !
Aide programmation Arduino - Projet de Terminale
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.