Avoir une information si une led s'allume

Bonjour,
Je travaille sur un projet visant à créer un banc de test, pour cela j'ai un servomoteur qui vient prendre deux positions A et B avec un interrupteur aimanté (capteur Reed).

Ma question est la suivante : est il possible en reliant ma LED à l'arduino de prendre l'information que la LED s'est allumée pour l'allumer de nouveau en fin de cycle comme témoin ?

Voici le schéma du montage


Les deux LEDs qui s'allument lors du passage de l'aimant sont en bas à droite du schéma

#include <Servo.h>

// crée l’objet pour contrôler le servomoteur
Servo monservo;  

// constantes ne change pas. Elles sont utilisées pour donner les pins:
const int BoutonDepart = 8; //le numéro de la pin du bouton départ
const int BoutonRAZ = 7; //le numéro de la pin du bouton RAZ
const int LedFin = 2; //le numéro de la pin de la Led fin de cycle

// les variables vont changées:
int etatBoutonDepart = 0;
int etatBoutonRAZ = 0;

void setup() {
  
  // initiliser la LED en tant que sortie
  pinMode(LedFin, OUTPUT);
  
  //initiliser les boutons en tant que entrer
  pinMode(BoutonDepart, INPUT);
  pinMode(BoutonRAZ, INPUT);
  
  //initialisation du servomoteur
  monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur
  monservo.write(80); // positionne le servomoteur à 0°
}

void loop() {
  
// lire l'état du bouton départ
  etatBoutonDepart = digitalRead(BoutonDepart);

  //Vérifier si le bouton est pressé, si oui, l'état du bouton est HIGH
  if (etatBoutonDepart == HIGH){
    
    monservo.write(120); // demande au servo de se déplacer à cette position
delay(2500); // attend 2000 ms entre changement de position
monservo.write(10); // demande au servo de se déplacer à cette position
  delay(2500); // attend 2000 ms entre changement de position
monservo.write(80); // demande au servo de se déplacer à cette position
delay(10); // attend 1000 ms entre changement de position

 digitalWrite(LedFin, HIGH); //Allumer la Led en fin de cycle
}
  {// lire l'état du bouton départ
  etatBoutonRAZ = digitalRead(BoutonRAZ);

  //Vérifier si le bouton est pressé, si oui, l'état du bouton est HIGH
  if (etatBoutonRAZ == HIGH){

 digitalWrite(LedFin, LOW);  
  }
}
}

Voici mon code j'espère qu'il est lisible

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Salut!

C'est pas très clair pour moi, par rapport à ce que je fais d'habitude avec mes LEDs et mon arduino.
En gros, tu demandes "à la fois" de lire la led, ce qu'on peut faire comme ça:

pinMode(Pin_Led,INPUT);
digitalRead(Pin_Led);

et piloter son état, ça sera cette fonction:

pinMode(Pin_Led,OUTPUT);
digitalWrite(Pin_Led, HIGH); //ou LOW pour éteindre.

là où je veux en venir, c'est que c'est 2 fonctions "antagoniste". Note qu'il n'y a aucun problème à basculer de l'un à l'autre au milieu de ton code (tant que tu précèdes par le pinMode qui va bien).
Par contre dans ma tête c'est le bazar par rapport à ton sujet. J'espère que tu arrivera à t'en débrouiller.

EDIT: voilà ce qui me taraude:
Imaginons que tu forces l'allumage de la Led avec ta carte. La led s'allume si le branchement est correct. Mais il est provoqué par la carte!
Si tu fais juste une bascule avec pinMode pour lire l'état de la Led, pour moi la carte va couper son alimentation et donc, l'état lu sera toujours zéro.
Un truc à dérouiller donc, entre qui alimentes la Led, et qui veut la lire.

En effet je force ma LED final à s'allumer a la fin du mouvement des servomoteurs

je pense que cela ne pose pas trop de problème, ta LED, va enlever un peu de tension, mais cela devrait rester dans les spécifications pour un état haut d'une broche digital de l'Arduino.
Si j'ai bien compris ce que tu demande et que ton capteur donne bien 5V lorsqu'il est activé par l'aimant.
Par contre cela veut dire qu'a la fin tu as une autre broche active, pour remettre de la tension sur ta LED ainsi que sur la sortie de ton capteur.
Mais ce que tu veux faire finalement, c'est que ton Arduino détecte si ton capteur est actif et allume une LED sur une autre broche en fonction de cet état et du cycle en cours.

Ce n'est vraiment pas clair et un schéma aurait éviter de perdre du temps en explications.
Comment est alimentée ta LED ?
A-t-elle une alimentation indépendante de la carte Arduino ?
Si c'est le cas est-elle câblée entre la masse et sa résistance de limitation de courant, elle même reliée au Vcc par l'intermédiaire d'un relai (?) ?
Ou est-ce l'inverse : résistance à la masse et diode entre résistance et Vcc par l'intermédiaire d'un relai (?) ?

Dans les deux cas il suffira de mesurer la tension entre la masse et le point commun et d'adapter la logique au cablâge réel.
La fonction analogRead() devrait faire le travail.

Remarque : pas facile de comprendre un schéma dans un roman de plusieurs lignes !
C'est pareil pour nous !
Fais un schéma sur papier, avec une règle pour tirer les traits (merci), et fais en scan, toutes les imprimantes ont maintenant cette fonction, ou une photo lisible.

Tant que l'on ne saura pas avec certitude comment la diode est alimentée, il sera difficile de donner un conseil qui tient la route.

Je suis un débutant en électronique, donc pas forcément facile d'exprimé mon besoin avec présicion comme si je travaillais dedans depuis des années bref le schéma à été ajouter dans le sujet.
Ma LED est alimenté par l'Arduino en 5v

c'est à dire ? un truc comme cela ?

en tournant l'électro-aimant ferme le circuit et la LED s'allume, c'est ça ?

et vous voudriez faire un programme qui vient se connecter quelque part sur ce circuit pour voir si la LED est allumée ou éteinte - c'est cela ?

C'est cela, la fermeture se fait par l'électro-aimant quand le servomoteur se place en position A puis en B, et je voudrais savoir si je peux enregistrer que ma LED s'allume (aimant fonctionnel ou non) pour pouvoir les allumées de nouveau à la fin du cycle.

est-ce qu'en vrai tu n'as pas la possibilité de lire l'état de l'aimant par la carte elle même?

Si c'est le cas, tu pourras lier à l'état lu n'importe quelle action dans ton code, allumer ta led (qui sera connecté à une autre pin que l'aimant) mais aussi envoyer un mail, ou régler le thermostat de la maison.

Je n'ai pas les idées claires sur ton projet, mais je pense que tu aurais avantage à séparer les fonctions de ton code, c'est à dire très grossièrement: un composant = une pin.

1 Like

si vous pouvez venir vous greffer avec un pulldown et la pin 2 en INPUT sur votre arduino

la pin 2 verra LOW quand la LED est éteinte et HIGH quand la LED est allumée

Bonjour J-M-L

Avec ce montage, @nat_bc ne pourra pas réallumer sa LED en fin de cycle.
La proposition de @GrandPete de traiter la LED et l'électroaimant par l'Arduino, le permet.

Cordialement
jpbbricole

Malheureusement impossible de sortir mes électro-aimants de la pièce, c'est pour cela que j'ai essayer une méthode avec deux LEDs qui servent uniquement à validé le passage du courant par l'électro-aimant quand ils se ferment.

A) Premièrement, il faut détecter.
Examen de ton schéma :
Soit P le point commun à la résistance 220 ohms et la diode.

  1. Quand l'électroaimant est fermé : le courant passe, la diode s'éclaire et une tension apparait à ses bornes. => pas de soucis particulier.
    La valeur de la tension va dépendre de la couleur de la diode.
    Valeurs moyenne :
    Rouge ~ 1,6 V
    Jaune ~ 1,8 V
    Vert ~ 2,2 V
    Bleu et blanc ~ 3 V

  2. Quand l'électroaimant est ouvert, la tension au point P sera théoriquement la masse, mais, pour la mesure, la diode sera en sens inverse, il ne circulera que le courant de fuite. Je crains que cette tension sera mal définie et inexploitable.

Solution :
Tu inverses diode et résistance.

  1. Quand l'électroaimant sera ouvert, cette fois la diode étant remplacée par la résistance la tension au point P sera bien définie et sera la masse.
  2. Quand l'électroaimant sera fermé, le courant passera et la tension au point P sera égale à :
    Vp = 5 V - Vdiode.

Je te propose (provisoirement) ce montage et de mesurer la tension au point P en utilisant une entrée analogique et la fonction analogRead().
Il faudra faire un test en définissant deux "fenêtres" :
Contact ouvert : tension entre 0 V et VL
Contact fermé : tension mesurée entre VH et Vcc.
Les valeurs de VH et VL sont à définir en fonction de la couleur de la diode utilisée.
image

B) Alumage de la diode en fin de cycle
Le montage précédent ne convient pas.

Je suis d'accord sur le principe de séparer la prise d'information de l'activation de la diode.
Pour forcer un allumage de la diode il serait possible d'utiliser une pin en sortie.
image
La diode s'allume quand Dx est à l'état haut.
Mais si Dx est "Hors service pour allumer la diode" c'est à dire à l'état bas quand le contact se fermera, il se produira un court-circuit dans l'étage de sortie du microcontrôleur. Il faudrait ajouter une diode shottky en protection => on va vers l'usine à gaz.

Montage définitif :
On détecte si le contact est ouvert ou fermé.
On utilise une E/S auxilliaire pour allumer la diode par programation.
En activant une entrée en mode pull-up, :

  • on travaille avec le même nombre de composants que dans le montage que tu proposais.
  • On n'utilise que des E/S numériques et ce sera le logiciel qui décidera de l'état de la diode.

image

S'il faut "garder des traces" ,un enregistrement sur carte SD est parfaitement faisable, les exemples sont faciles à trouver.

Je sérialisais les problèmes.

(et dans l'absolu en rebasculant la pin 2 en sortie on pourrait aussi allumer la LED avec une petite déperdition de courant dans la résistance de pullodwn)

Merci, j'ai essayer votre montage et le capteur me permet bien d'avoir l'information.
Mon problème venait de mon branchement purement électrique et non électronique ce qui à eu pour conséquence de me faire partir sur une fausse piste.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.