Bonjour mril232
Merci de ta réponse
Oui la valeur 35 est bonne
Et concernant les led, je crois que tu n'a pas compris pourquoi je faisais ce programme. As tu lu mon premier post?
Merci
Arnaud
-----
Bonjour mril232
Merci de ta réponse
Oui la valeur 35 est bonne
Et concernant les led, je crois que tu n'a pas compris pourquoi je faisais ce programme. As tu lu mon premier post?
Merci
Arnaud
Oui je l'ai lu. je t'explique
Si le capteur1 capte un bateau il va changer de position donc il met le moteur en marche (sens 1) le moteur qui lève le pont, si le capteur2(avec capteur 1 =0) capte un bateau il change de position aussi et met le moteur en marche dans le sens inverse du premier pour remettre le pont à la situation initiale.
C'est ça non ?
Oui c'est ca.
En fait je veux faire un programme avec ces conditions:
Il y a deux capteurs.
Dès que le capteur 1 capte, la led doit rester allumer ( même si le capteur 1 ne capte plus) jusqu’à que le capteur 2 capte.
Mais nous avons vraiment énormément de mal à réaliser ce programme qui parait tout bête.En plus nous sommes désormais très pressé.
Le problème est le fait que la led doit rester allumer même si le capteur 1 ne capte plus
Arnaud
Bah oui c'est pour ça qu'il faut utiliser une led pour chaque capteur et une autre pour le moteur cela aidera à mieux comprendre le fonctionnement du pont et ça va t'aider à cibler la cause du problème que tu rencontres juste essaie cette solution tu perd rien de toute façon et montre moi le programme?
Re
il manquait une initialisation et des points virgules, mais cela devrait fonctionner si tes capteurs ne sont pas toujours au dessus ou au dessous de 35
JRCode:int sensor_0=0; int sensor_1=1; int LED=13; int monte=0; int descente=1; int ff = 0; void setup () { pinMode(sensor_0,INPUT); pinMode(sensor_1,INPUT); pinMode(LED,OUTPUT); ff = 0; } void loop() { monte=analogRead(sensor_0); descente=analogRead(sensor_1); if (monte > 35) { ff = 1; } else if (descente >35); { ff = 0; } if (ff = 1) { digitalWrite(LED,HIGH); } else { digitalWrite(LED,LOW); } }
l'électronique c'est pas du vaudou!
Ah oui d'accord merci
Je ne peux pas tester car je suis chez moi et le matériel est au lycée
Concernant les programme regarde dans tout mes post précédent j'ai mis les différents programme que j'ai fait et j'ai également testé ceux qui m'ont été proposé
Merci encore
Arnaud
Bonjour,
Je ne suis pas au lycée je ne peux donc pas tester
Je viens de faire un programme
Pensez vous que ça peut marcher. Voici le programme
Code:
Merci d'avance de toutes vos réponse. C'est très sympa de nous aiderCode:int LED = 13 ; int sensor_0 = 0 ; int sensor_1 = 1 ; void setup() { pinMode(LED,OUTPUT) ; pinMode(sensor_0,INPUT) ; pinMode(sensor_1,INPUT) ; } void loop() { if(analogRead(sensor_0) > 35 ) ( digitalWrite(LED,HIGH)) ; delay; { while (analogRead(sensor_1) < 35 ) ; } if(analogRead(sensor_0) > 35 ) ( digitalWrite(LED,HIGH)) ; }
Dernière modification par gienas ; 31/03/2015 à 22h29. Motif: balises code
Excusez moi pour le code je me suis trompé
Voici le code:
Code:int LED = 13 ; int sensor_0 = 0 ; int sensor_1 = 1 ; void setup() { pinMode(LED,OUTPUT) ; pinMode(sensor_0,INPUT) ; pinMode(sensor_1,INPUT) ; } void loop() { if(analogRead(sensor_0) > 35 ) ( digitalWrite(LED,HIGH)) ; delay; { while (analogRead(sensor_1) < 35 ) ; } if(analogRead(sensor_0) < 35 ) ( digitalWrite(LED,LOW)) ; }
Dernière modification par gienas ; 31/03/2015 à 22h30. Motif: balises code
D'accord merci beaucoup de votre aide jiherve.
Je testerai au lycée sachant que je n'ai pas de trou demain pour aller tester malheureusement. J'essayerai d'y aller jeudi ou vendredi au pire des cas.
Merci encore de votre aide.
Arnaud
à propos de 35 tu veux dire que c'est 35 cm j'imagine (si la distance entre le bateau et e capteur vaut 35 cm ) non ??
En fait c'est une tension renvoyer par le capteur suivant la distance qui le sépare de l'objet.
Cet tension est ensuite converti en bit ( 5V=1024 bit) et en bit cela nous donne 35.
C'est très dur à expliquer d'autant que je ne suis pas un expert dans le domaine .
Mais nous avons fait de nombreux test et la valeur 35 est bien la bonne.
Arnaud
Bonswaar,
Je suis très très très déçu ! Tu pourrais tester sur le site que j'ai donné, c'est une merveille, un Arduino Uno(ou autre), une breadboard avec des composants, une fenêtre de code et même une fenêtre terminal. En plus il faut juste donner une email et un mot de passe pour créer un compte. Juste un peu lent ... enfin ici. Run et tournes les potentiomètres avec la souris et c'est comme pour du vrai !
Je remets le lien http://123d.circuits.io/circuits/691...aud_30mars2015 vers mon circuit et le code çi-dessous
Code:// et ça ??? digitalWrite(LED, LOW); while (analogRead(sensor_0) < 35); // attend S_0 >=35 digitalWrite(LED, HIGH); while (analogRead(sensor_1) < 35); // attend S_1 >=35 digitalWrite(LED, LOW); while (analogRead(sensor_0) >= 35); // attend S_0 < 35 pour boucler
Un feedback sur l'accès au site et au circuit par un tiers serait apprécié.
Biname
Bonjour,
Malheureusement ni le programe de biname ni celui de jiherve ne marche
Pour le prog de biname lorsque le premier capteur capte la led ne s'allume pas entierement mais ne fait que de clignoter
Pour le prog jiherve la led reste toujours allumé
Merci de vos réponses
Arnaud
Bonjour
Pour le prog de biname ce n'est pas que ca clignote mais ca ne reste pas allumé, la led s'éteint directement
Arnaud
Bonjour,
Donc maintenant je deviens sceptique, vos capteurs fonctionnent ils bien ?
Remplaces les par deux potentiomètres connectés entre le VCC et la masse, les curseurs aux entrées de l'arduino.
Le bout de code que j'ai donné ne fonctionne que si le premier capteur 'voit' l'objet et qu'ensuite le second le détecte alors que le premier ne le 'voit' plus.
autrement :
JRCode:int sensor_0=0; int sensor_1=1; int LED=13; int monte=0; int descente=1; int ff = 0; void setup () { pinMode(sensor_0,INPUT); pinMode(sensor_1,INPUT); pinMode(LED,OUTPUT); ff = 0; } void loop() { monte=analogRead(sensor_0); descente=analogRead(sensor_1); if ((monte > 35) && (ff == 0)) { ff = 1; } else if ((descente >35) && (ff == 1)); { ff = 0; } if (ff = 1) { digitalWrite(LED,HIGH); } else { digitalWrite(LED,LOW); } }
l'électronique c'est pas du vaudou!
Je n'ai pas suivi toute la discussion, mais je vois qu'apparemment la led reste tout le temps allumée, normale dans le deuxième if il y a un opérateur d'affectation alors qu'il faudrait un opérateur de test, double le '='.
Hello,
Sur le site il fonctionne.
Il doit y avoir un pb
- de capteur
- de surcharge de l'alimentation et brève chute de tension
- ...
ou on a mal compris.
Nos codes sont pourtant assez simples à comprendre ! 5 lignes !
Biname
Bonjour à tous.
Suite au problème rencontrés nous avons décidé de simplifier le problème
Désormais notre objectif est de détecter un objet par le biais du capteur 0 et d’allumer la led pendant 10 seconde et ensuite d'éteindre la led, puis de rallumer la led pendant 10 seconde quand le capteur 1 détecte un objet
Merci de votre aide
Voici le programme :
Code:
Code:int sensor_0=0; int sensor_3=3; int LED=13; void setup () { pinMode(sensor_0,INPUT); pinMode(sensor_3,INPUT); pinMode(LED,OUTPUT); } void loop() { if (analogRead(sensor_0) > 35) { digitalWrite(LED,HIGH); delay(10000); } else digitalWrite(LED,LOW); if (analogRead(sensor_3) > 100) { digitalWrite(LED,HIGH); delay(10000); } else digitalWrite(LED,LOW); }
[B]ien entendu ce programme ne fonctionne pas, mais nous comprenons pas pourquoi.
Votre aide nous sera tres précieuse
Merci d'avance
Arnaud
Bonjour à tous
Les balises de code sont l'outil # de la barre d'outil.
Elles ont été introduites par les modérateurs à diverses reprises sans que tu réagisses.
Il n'y aura plus de prochaine fois!
Dernière modification par gienas ; 04/04/2015 à 11h12. Motif: Ajouté les balises de code pour la sixième fois!
Bonjour
On a l'impression que les capteurs ne capte pas tous pour les même valeurs.
Est-ce possible ?
Si oui comment y a t il une solution pour régler ce problème
Merci d'avance
Arnaud
Que donnent les valeurs brutes issues des capteurs ? Tu es sûr des seuils de détection ? Pas de bruit dans les relevés ?
Nous avons l'impression que lorsque on branche un capteur u plusieurs sur la carte arduino les valeurs de seuil de détection changent ( en fonction du nombre de capteurs branché sur l'arduino)
Ce n'est qu'une hypothèse mais nous avons remarquer ceci.
Merci
Arnaud
Bonjour
1) Ne pas multiplier les discussions sur un même sujet.
C'est interdit par la Charte du Forum, ça éparpille les réponses, et c'est mauvais pour l'efficacité de la discussion et la résolution du problème.
2) Pour la lisibilité, continuer à utiliser les balises CODE (bouton # de l'éditeur en mode avancé).
3) Les entrées analogiques utilisées sont A0 et A3, et non pas 0 et 3.
L'environnement a fait la correction quand tu as utilisé la fonction analogRead() parce qu'on ne peut pas lire d'entrées numériques avec cette fonction, mais le programme n'en reste pas moins incorrect.
À cause de ces confusions, les lignes « pinMode(sensor_0,INPUT); » et « pinMode(sensor_0,INPUT); » ont pour effet de définir le mode de fonctionnement des broches numériques 0 (RX) et 3 (D3) en entrée. Quoi qu'il en soit, les entrées analogiques le sont par défaut. Ces deux lignes peuvent donc être supprimées.
4) Les capteurs indiqués nécessitent quelques précautions d'emploi.
Il est déconseillé de les faire pointer vers la même zone sous peine qu'ils se perturbent mutuellement.
Il faut également éviter de les éblouir.
La surface captée doit être suffisamment réfléchissante aux infrarouge (pas noire), et suffisamment mate (pas un miroir).
Ces capteurs ne fournissent une information exploitable que dans une certaine plage de distance. La surface à capter ne doit être ni trop près ni trop loin. Les graphes de la datasheet suggèrent qu'il faut prévoir au moins 6 cm de distance (à 5 cm, la mesure est fausse).
5) Si malgré ces précautions la présence d'un capteur continue à influencer la mesure d'un autre capteur, alors il serait bon de vérifier le câblage, voire le bon fonctionnement des composants et circuits utilisés.
Pour tester les capteurs individuellement, il est possible d'utiliser l'exemple de croquis fourni "AnalogReadSerial" (Fichier/Exemple/01.Basic/AnalogReadSerial), afin de lire la valeur lue par la carte sur le moniteur série de l'IDE (Outils/Moniteur série).
Les valeurs lues devraient donner quelque chose comme :
- environ 640 pour une distance de 6 cm
- environ 480 pour une distance de 10 cm
- environ 280 pour une distance de 20 cm
- environ 150 pour une distance de 40 cm
- environ 80 pour une distance de 80 cm
...
Excusez moi pour les codes
Nous avons trouvé les même valeurs grâce à des test et à la documentation du capteur
Mais ces valeurs ne fonctionne pas avec ce programme nous ne comprenons pas
Merci d'avance
Arnaud
Voici notre code:
Code:int sensor_0=0; int sensor_3=3; int LED=13; int monte_1=0; int descente=3; void setup () { pinMode(sensor_0,INPUT); pinMode(sensor_3,INPUT); pinMode(LED,OUTPUT); } void loop() { monte_1=analogRead(sensor_0); descente=analogRead(sensor_3); digitalWrite(LED,LOW); if (monte_1 > 35) { digitalWrite(LED,HIGH); delay(10000); } if (descente > 35) { digitalWrite(LED,HIGH); delay(10000); } }
Mais pour ce programme la led reste allumé et elle s'éteint momentanément toute les 10 secondes alors qu'il n'y a aucun objet devant les capteurs à moins de 5 mètres
Mes remarques ne semblent pas avoir été prises en compte.
D'après mon point 3), le code aurait dû être modifié comme suit :
D'autre part, d'après mon post précédent, tu devrais te rendre compte que les seuils que tu utilises sont beaucoup trop faibles. Ces capteurs ne sont pas faits pour détecter un objet à plusieurs mètres.Code:int sensor_0=A0; // correction du numéro de pin int sensor_3=A3; // correction du numéro de pin int LED=13; int monte_1; // initialisation inutile int descente; // initialisation inutile void setup () { // ici, deux lignes supprimées // pinMode(LED,OUTPUT); } ...
Super ça marche !
Voici le programme:
On est super content !Code:int sensor_0=0; int sensor_3=3; int LED=13; int monte_1=0; int descente=3; void setup () { pinMode(sensor_0,INPUT); pinMode(sensor_3,INPUT); pinMode(LED,OUTPUT); } void loop() { monte_1=analogRead(sensor_0); descente=analogRead(sensor_3); digitalWrite(LED,LOW); if (monte_1 > 35) { digitalWrite(LED,HIGH); delay(10000); } if (descente > 250) { digitalWrite(LED,HIGH); delay(10000); } }
Cependant je ne comprend pa du tout pourquoi un capteur a la valeur 35 et un autre 250 !??
Merci de vos réponses
Arnaud
Est-il possible d'avoir le schéma électrique qui va avec le programme ?
De plus si ton objet passe devant le capteur 2 en moins de 10 secondes vous n'aurez jamais de lecture.
Il faut mettre en place un timer et mémoriser les états des capteur, pas mettre l'arduino en delay, surtout quand c'est si long (10.000 ms). Dans le style:
Il faut faire la même chose pour les 2 capteurs et mettre 2 leds,Code:if(montee_1 > 35) { delais_1 = 10000; entree_1 = millis(); digitalWrite(LED,HIGH); } // idem pour descente ... maintenant = millis(); // maintenant et toujours plus grand que delai_1 if( (maintenant - entree_1) > delai_1) { entree_1 =0; digitalWrite(LED,LOW); }
ou introduire une logique de gestion basée sur les variables entree_1 et entree_2 puisque l'on les met à 0 à la fin du temps.
et dans ce cas changer le delais_1 à la valeur du temps maximum de passage entre les 2 capteurs.Code:if ( (entree_1 > 0) && (entree_2 > 0) { entree_1 = 0; entree_2 = 0; digitalWrite(LED,LOW); }