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 ?
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);
}
}
}
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.
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 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.
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.
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.
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
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.
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.
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.
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.
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.
S'il faut "garder des traces" ,un enregistrement sur carte SD est parfaitement faisable, les exemples sont faciles à trouver.
(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.