Discrimination du sens d'une variation de tension

Bonsoir à tous,
Besoin d'un petit coup de main si possible.
Je mesure une tension entre 1 et 3.3V sur l'entrée analog 1.
Entre par exemple 2 et 2,5V je fais clignotter une led ;
MAIS que si la tension décroit de façon même irrégulière.
Donc en phase croissante la LED ne doit pas clignotter.

J'ai donc placé un compteur d'ittérations qui se remet à zéro à 100
Vu le reste du logiciel ça correspond à 3 secondes.
A chaque arrivée à 100 je stocke la tension courante en mémoire.
Le programme compare en permanence cette mémoire "vieille de 3 sec" avec la tension courante.
Si la tension croît la mémoire est toujours plus faible que le tension courante et on ne branche pas vers la LED.
Inversement si la tension décroit la valeur courante sera plus faible que la mémoire et l'on branche.

Eh ben ça ne marche pas snifff...
Si quelqu'un de passage a une autre approche plus efficace ou mieux connue je l'embrasse. XD

jp

Salut,

1) Mauvaise section

  1. On est pas devin, sans code on pourra pas t'aider

Dans le principe c'est pas ridicule. Mais pour la stabilité de l'application je ne me contenterais pas d'une seul échantillon mais de la moyenne sur une petite dizaine pour être certain de ne pas être perturbé par le bruit.

Pour t'affranchir des micro variations, tu peux introduire un "delta".
delta=0,2 //volt
void loop(){
lire U
si (U plus grand que old_U + delta){
éteindre();
si (U plus petit que old_U - delta){
allumer();
old_U = U
delay(500);
} // fin loop
éteindre(){
pin_led=LOW
}
alumer(){
pin_led=HIGH
}

Merci, je vais essayer ça.
Je n'ai pas joint le code car je pensais que le principe suffirait.
D'autre part c'est assez long car en pratique il s'agit de mesurer une T° d'huile (moteur Rotax ULM) et une T° Culasse.
La tension prélevée aux bornes des sondes évolue inversement à la tempé.
Donc pour travailler serainement j'ai inversé.
Pour être pleine echelle je me sers de la réf de tension 3.3V.
Au départ j'ai programmé pour l'huile un début de clignottement sur la LED concernée à partir de 100° puis la luminosité de la LED suit la température (PWM) pour passer à fixe à 110.
A la baisse de tempé (descente en altitude) la diode reclignote à une fréquence plus rapide et luminosité fixe de 80 à 70°.
Pour la tempé culasse juste les valeurs de consigne changent.
Les deux LEDs fonctionnent avec l'instruction "millis".
Si le code est nécessaire je peux le joindre mais n'étant pas habitué au forum je ne connais pas la procédure.
Merci pour vos réponses.

J'essaie de joindre mon fichier (encore un peu bordélique.

JCB_GRD_100314.ino (7.44 KB)

Bonsoir,

Carolyne:
Pour t'affranchir des micro variations, tu peux introduire un "delta".
delta=0,2 //volt
void loop(){
lire U
si (U plus grand que old_U + delta){
éteindre();
si (U plus petit que old_U - delta){
allumer();
old_U = U
delay(500);
} // fin loop
éteindre(){
pin_led=LOW
}
alumer(){
pin_led=HIGH
}

Alors Carolyne on perd les bonnes habitudes, tu as conseillé plusieurs fois aux utilisateurs d'utiliser le # pour les programmes.
:wink:

Alors Carolyne on perd les bonnes habitudes, tu as conseillé plusieurs fois aux utilisateurs d'utiliser le # pour les programmes.

Et....Mais c'est que ce n'est pas du code. :smiley: Faut laisser un peu de boulot. :grin:

jpjcb66:
Si le code est nécessaire je peux le joindre mais n'étant pas habitué au forum je ne connais pas la procédure.

Au dessus de la fenêtre d'édition du message il y a un bouton # qui place dans la fenêtre des balises
il suffit de coller ton code entre les balises.
Si le code est trop volumineux alors le mettre en pièce jointe comme tu viens de le faire.

Est-ce qu'un delta temps de 3s est suffisant pour avoir une variation notable de la température?
As-tu sorti les valeurs sur la liaison série pour vérifier ce qui ne va pas avec ton programme? Question idiote je n'avais pas encore vu ton code.

Un des problèmes est que les deux températures varient à des vitesses variables ; temps froid, ça met du temps à monter, radiateurs occlus ça peut monter rapidement ou redescendre très vite radiateurs ouverts.
J'ai essayé d'augmanter la durée du compteur mais rien n'est simple. Les sondes ne semblent pas parfaitement linéaires.
Le moyennage sur une rafale de relevés me semble une bonne idée. Je verrai ça demain.
Un autre problème est l'étroitesse de la plage de mesure. Au banc j'alimente mes deux entrées analogiques avec une alim de labo dont le potar de réglage n'est pas assez précis. Je n'ai pas encore trouvé les bonnes valeurs pour un pont diviseur adéquat.
Il faudrait que je puisse chuter les 3.3V sur un tour et je n'ai pas ce qu'il me faut en fonds de tiroirs.
Le chalenge semble pourtant simple à première vue.

Un des problèmes est que les deux températures varient à des vitesses variables

Tu peux par le code faire varier le delta temps en fonction du delta Th°; en mettant le temps en variable

Un autre problème est l'étroitesse de la plage de mesure.

.
Pour augmenter la plage, il n'y a guère que de doubler la sonde en série.

Je parlais de la plage au banc d'essais. Mon alim de labo couvre 0 à 30 V alors pour être précis au 1/100 ça ne va pas.
J'ai donc alimenté les entrées analog 1 & 2 à travers un pot Lin de 50K. Et là ça a mis en évidence la sensibilité des entrées de l'arduino. J'ai du ajouter une capa de 100n sur les deux entrées. Ca a résolu quelques problèmes dont celui de discriminer entre montée et descente de la tension d'entrée.
Je dois m'absenter, je remet donc à demain la suite des essais mais ça a l'air pas mal comme ça. J'ai un peu nettoyé le code aussi. :smiley: