Acquisition de données - Arduino

Bonjour,

je débute un peu dans le monde d'arduino et il se trouve que j'ai un projet à faire avec. Ce projet consiste à acquérir des données de capteurs (Phmètre, Electrodes, Débit-mètre), de les manipuler et agir en conséquences.

Mon problème :

Lorsque je m'occupe de brancher la arduino avec les capteurs, je reçois 5V de tension constante lorsque l'un d'eux est en marche. Est-il possible que la tension renvoyée par le capteur soit supérieur à celle implémentée par la arduino (5V) ?

Je suis bloqué dessus depuis un bon mois et rien à faire, je ne trouve pas la solution. La mesure effectuée avec un voltmètre me donne 2,60V correspondent à la tension que renvoie un débit-mètre lorsqu'il effectue sa mesure.

Mon branchement est simple :
-5V à l'alimentation du capteur avec le fil rouge du capteur
-le ground arduino avec le fil noir du capteur
-et le fil jaune de données sur A0 (porte analogique).

Mon code :

int Debit;
float tension4;
int SensorDebitValue;
SensorDebitValue = analogRead(A0);
tension4 = map(SensorDebitValue, 0, 1023, 0, 5000);
tension4 = tension4 / 1000;
Debit = (((SensorDebitValue) * 5) / 1024);
Serial.print("Votre tension sur le debitmetre est de ");
Serial.println(tension4);
Serial.println();

Valeur renvoyée :

Votre tension sur le debitmetre est de 5.00 (ou 5 si je mets Debit à la place de tension 4).

Auriez-vous, s'il vous plait un indice à me donner ?

Imprimez dans la loop ce que vous lisez dans SensorDebitValue

Il me sort 1023 sans que le capteur soit stimulé.

Et A0 est branché sur quoi? Est-ce les grounds des 2 systèmes sont reliés ?

hello
une ref pour le débitmètre? un lien ?

Débit-mètre : Capteur de débit YFS201 - Débitmètres | GO TRONIC

Photo du montage : (Je l'ai essayé aussi sur une platine d'essai.)

Oui mais si vous « stimulez » le capteur - ça change ?

ton capteur te renvoie des tops il n'a rien à voir avec de l'analogique.

tu vas devoir regarder les interruptions pour compter les tops pendant un temps donné et en déduire un débit.

edit: en complément

Ce capteur de débit est constitué d'un rotor et d'un capteur à effet hall. Lorsque l'eau passe dans le capteur, la rotation du rotor génère des impulsions en fonction du débit. La fréquence de sortie varie en fonction de la vitesse du rotor. Convient pour de l'eau uniquement.

Brochage:

  • noir: masse
  • rouge: +5 à +24 Vcc
  • jaune: signal

Alimentation: 5 à 24 Vcc
Consommation: 15 mA (sous 5 Vcc)
Plage de mesure: 1 à 30 l/min
Pression maxi: 1,2 Mpa
Précision: +/- 3% (entre 1 et 10 l/min)
Formule de conversion: débit (en l/min) = fréquence (en Hz) / 7,5
Dimensions: 63 x 36 x 35 mm
Température d'utilisation: 0 à 80°C
Diamètre du filet: 1/2''
Poids: 43 g

Oui, cela change, ça varie de 4 à 1024 pour SensorDebitValue.

Et c'est ce que je me suis dit aussi concernant les tops mais comment calculer sans oscillo' la période d'un échelon ?

avec les interruptions, tu comptes les tops et lorsque tu en as compté 10 par exemple, connaissant le temps qu'il a fallu pour compter 10 impulsions, tu peux calculer la fréquence.

pour connaitre le temps d'acquisition de 10 tops, tu mémorises le temps au début de l’acquisition, lorsque tu as 10 tops, tu relèves le temps et tu fais une soustraction temps de fin - temps de début

et le fabricant te dit: Formule de conversion: débit (en l/min) = fréquence (en Hz) / 7,5

J'ai tenté avec ce code

int tops =0;
int SensorDebitValue;
while(tops<10)
{
SensorDebitValue = digitalRead(10);
if (SensorDebitValue==1)
{
tops=tops+1;
}
}

Serial.println("Fait !");
Serial.println();

J'ai tenté avec ça, le "Fait !" n'apparaît toujours pas après 30 secondes... (Même problème avec 5 tops)

plutot avec un truc dans ce genre (non testé)

const byte phm = 2;//entrée interruptible
volatile byte top =0;
unsigned long deb=0;
unsigned long fin =0;
void setup() {
Serial.begin(115200);  
pinMode(phm, INPUT);
attachInterrupt(0, isr_Phm, RISING);

}

void loop() {
  if (top==1) {deb=millis();}
  if (top==10){fin=millis();Serial.print("10 top en : ");Serial.print(fin-deb);Serial.println(" ms");top=0;}
}


void isr_Phm()
{top++;}

error: 'isr_Phm' was not declared in this scope

const byte phm = 2;//entrée interruptible

pinMode(phm, INPUT);

attachInterrupt(0, isr_Phm, RISING);

compare les 3 phm : arduino fait une différence entre phm et Phm, ils suffit de mettre une majuscule aux 2 premiers

const byte Phm = 2;//entrée interruptible

pinMode(Phm, INPUT);

attachInterrupt(0, isr_Phm, RISING);

je reconnais que c'est pas évident de comprendre que isr_Phm est une "interrupt service routine" qui a comme variable Phm et pas "phm", on met Phm ou phm partout mais on ne melange pas les 2 :slight_smile:

ne jamais utiliser 2 variables avec le meme nom dont la différence ne tient qu'à une majuscule, meme si vous écrivez un croquis avec 2 variables différentes

Jules2101:
error: 'isr_Phm' was not declared in this scope

Bonjour,

Le programme de dfgh se compile sans problème

Vérifies que tu as bien copié le programme en entier.
Si vraiment tu es sur que le programme est correct, essaie l'ajouter la déclaration void isr_Phm(); avant le setup. Il m'est arrivé que l'ide ne voie pas des fonctions définies après l'appel.