Surveillance de l'état de plusieurs phares

Bonjour/Bonsoir

Je suis actuellement en classe de terminal STI2D, J’ai un projet et ma tâche consiste à vérifier l’état des phares.
Je m’explique, je dois vérifier si un phare est HS ou non, si un des 4 phares (ou plusieurs) est grillé, alors je dois prévenir l’utilisateur avec une led et un buzzer que l’un des phares est mort.
Mon programme fonctionne très bien avec un phare comme 4, mais j’utilise beaucoup trop de broche analogique, je me demandais si il n’était donc pas possible de n’utiliser que une broche analogique pour gérer l’état des 4 phares sans monopoliser toute la place.

voici donc mon programme pour les 4 phares:
#define etat_phare_1 A0
#define etat_phare_2 A1
#define etat_phare_3 A2
#define etat_phare_4 A3
#define led_1 7
#define led_2 6
#define led_3 5
#define led_4 4
#define buzzer 8
int etat_1 = 0;
int etat_2 = 0;
int etat_3 = 0;
int etat_4 = 0;

void setup()
{

Serial.begin(9600);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(etat_phare_1, INPUT);
pinMode(etat_phare_2, INPUT);
pinMode(etat_phare_3, INPUT);
pinMode(etat_phare_4, INPUT);

}

void loop()
{
etat_1 = analogRead(etat_phare_1);
etat_2 = analogRead(etat_phare_2);
etat_3 = analogRead(etat_phare_3);
etat_4 = analogRead(etat_phare_4);

if (etat_1 > 0 ) //si etat = 0
{
digitalWrite(led_1,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
}
else
{
digitalWrite(led_1,HIGH); //Allumer la led
digitalWrite(buzzer,HIGH);//Allumer le buzzer
delay(100);//Attendre deux secondes
digitalWrite(led_1,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
delay(100);
}

if (etat_2 > 0 ) //si etat = 0
{
digitalWrite(led_2,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
}
else
{
digitalWrite(led_2,HIGH); //Allumer la led
digitalWrite(buzzer,HIGH);//Allumer le buzzer
delay(100);//Attendre deux secondes
digitalWrite(led_2,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
delay(100);
}

if (etat_3 > 0 ) //si etat = 0
{
digitalWrite(led_3,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
//lcd.setCursor(0, 0);
}
else
{
digitalWrite(led_3,HIGH); //Allumer la led
digitalWrite(buzzer,HIGH);//Allumer le buzzer
delay(100);//Attendre deux secondes
digitalWrite(led_3,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
delay(100);
}

if (etat_4 > 0 ) //si etat = 0
{
digitalWrite(led_4,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
//lcd.setCursor(0, 0);
}
else
{
digitalWrite(led_4,HIGH); //Allumer la led
digitalWrite(buzzer,HIGH);//Allumer le buzzer
delay(100);//Attendre deux secondes
digitalWrite(led_4,LOW); //Eteindre la led
digitalWrite(buzzer,LOW);//Eteindre le buzzer
delay(100);
}

Merci a vous pour votre aide

PS: j'ai glisser la capture d'écran de mon montage via protéus en dessus pour ceux qui ont besoin

Chaque voie analogique est reliée à un diviseur de tension (donne à peu près zero si on n'essaye pas d'allumer le phare par l'interrupteur du haut; le poussoir a peut être une fonction; si on essaye d'allumer le phare et qu'il est grillé; donne à peu prés 5v, même si on appyue sur le poussoir du bas; s'il n'est pas grillé, un appui sur le poussoir du bas donnera à peu près zero).
J'ai mis plein d'apeu près, car selon la consommation et la résistance des fils, vous n'aurez pas forcément zero -> votre test est trop strict.
Si j'avais envie de jouer sur les mots (vous vous plaignez de consommer trop de voies analogiques; en bonne logique, des voies logiques vous garantissent une immunité au bruit et aux aleas du cablage, et vous en avez tout plein de 9 à 13, disons), je dirais que votre problème est résolu...

Bonjour

  1. CODE ce forum à des règles pour la publication du code
    En les suivant le code sera lu par un plus grand nombre de personnnes et la probabilité de réponses augmentera

  2. IMAGES
    pour les nombreux visiteurs 'smartphone' mais pas que.... les images jointes ne sont pas vues

Insérer l'image dans le message de la manière suivante :
-copier l'adresse de l'image jointe (oui il faut d'abord la joindre)
-ré-éditer le message et cliquer sur l'icône 'Insert an Image' pyuis coller l'adresse d el'image jointe
-sauvegarder

Comme les gens sont paresseux , tant les lecteurs que les écrivains de codes, cous auriez interet à avoir deux tableaux, l'un contenant les numéros des pattes à scruter, l'autre contenant les numeros des pattes a LEDs à allumer si besoin, et à explorer vos phares au moyen d'une boucle....
Avantage: si on (vos; vos lecteurs) détecte une horreur, vous n'aurez pas à la repercuter plusieurs fois -ce qui est une façon de tourner en bourrique-

Mon programme fonctionne très bien avec un phare comme 4, mais j'utilise beaucoup trop de broche analogique, je me demandais si il n'était donc pas possible de n'utiliser que une broche analogique pour gérer l'état des 4 phares sans monopoliser toute la place.

Un multipelxeur analogique permettrait de n'utiliser qu'une seule entrée analogique
I faudrait donc ajouter un composant et utiliser 2 sorties numériques pour la sélection d'une entrée parmi 4.
Donc : gain d'une E/S mais ajout d'u circuit intégré

Bon, mais comment phynancer le multiplexeur analogique?
au vu du schema, il y 4 cellules avec pour chacune :
une batterie
un interrupteur de mise en marche
un phare
un poussoir
un diviseur de tension qui ramène la sortie, si le phare marche, à 0 v; s’il ne marche pas, elle est à ca 5v, sous moyenne impedance (thevenin)

En mutualisant les batteries (chères), les interrupteurs de mise en marche (un devrait suffire: faut il embêter les testeurs avec tout plein de boutons?), on doit arriver à phynancer un cd 405x

Mais il y a peut être moyen d’écraser encore plus les prix, grâce à Resistor ladder - Wikipedia

Si on arrive à faire un réseau de resistances R2R de l’ordre de 100 kO, à simuler les tensions en sortie (proteus doit savoir le faire: il ne fait pas que des beaux dessins) et à lier par un fil la sortie du réseau à une voie analogique de l’Arduino (qui a une impédance d’entrée gigantesque; on doit pouvoir la trouver, ainsi que la capacité d’entrée, dans la datasheet, sinon c’est la fin du monde civilisé), on n’utilise qu’une voie analogique … et pas de voie logique du tout.

Les précautions de programmation sont a priori les suivantes:
il faut faire 16 tests (ça fait 16 intervalles) , et ne jamais faire de tests d’égalité (les résistances vieillissent, s’empoussièrent, ont de la condensation (seul proteus a des resistances parfaites, mais il ne les vend pas prêtes à souder) ; les batteries s’usent… ça fait bien 16 précautions, d’où mon pluriel.

Bonjour,

Je m'explique, je dois vérifier si un phare est HS ou non

Vous l'avez bien dit, un phare est soit HS ou pas.

C'est binaire.

Mon programme fonctionne très bien avec un phare comme 4, mais j'utilise beaucoup trop de broche analogique

Pourquoi utiliser le convertisseur analogique numérique pour savoir si un phare est HS ou pas ?

Un comparateur de tension analogique est lui aussi capable de réaliser cette fonction, sans lignes de codes.

L'utilisateur va être emmerdé, ses phares vont à peine éclairer en condition normale puis quand il va les tester ils vont s'éclairer à pleine puissance... (je vous laisse trouver la raison).

Si ce système est implémenté dans un vrai véhicule votre Arduino va être HS au premier coup de clé (je vous laisse trouver la raison).