'Resolu ' mesure de courant et tension

68tjs:
Ce que j'aimerai que l'on retienne de ce que j'ai écrit c'est que les composants électroniques ne sont des trucs théoriques mais des êtres réels avec leur défauts. Les datasheet donnent le plus souvent des valeurs centrées qui sont le résultat d'une moyenne.

tout à fait OK

68tjs:
.............
Moralité : bien réfléchir avant d'annoncer des résultats avec des chiffres après la virgule.
................

Ajouter aussi pour compléter le tableau que la précision de ce genre de capteur de courant n'est pas non plus si grande que cela :

Par exemple une erreur de 2% pour le capteur à pleine échelle représente 20 unités sur le résultat de la conversion A/D sur 10 bits.

Serge .D

Capture.PNG

bonsoir,
je n ai toujours pas des solution a mon probleme il doit y avoir un probleme d 'ecriture dans le code non en rapport avec l ' equation ....
je suis dans le neant C tique....

Pascal17740:
bonsoir,
je n ai toujours pas des solution a mon probleme il doit y avoir un probleme d 'ecriture dans le code non en rapport avec l ' equation ....
je suis dans le neant C tique....

qu'avez vous fait pour débugger?

postez tout le code et dites nous ce que vous voyez comme valeur de analogRead dans votre fonction... avez vous fait le Serial print?

Je répète ma question :
Pourquoi tu fais un moyennage ?
Clairement, sauf justifications, je mets en doute la nécessité du moyennage

Est-ce un code que tu as trouvé tout fait ?

Pascal17740:
bonsoir,
je n ai toujours pas des solution a mon probleme il doit y avoir un probleme d 'ecriture dans le code non en rapport avec l ' equation ....
je suis dans le neant C tique....

Je propose dans un premier temps :

  • 1 Vérifier avec un multimètre numérique que la valeur de la tension sur la borne A0 est convenable.
  • 2 Mettre en commentaire le contenu actuel de la fonction test_courant() et dans cette fonction sortir par un Serial.print la valeur de analogRead(ANA0) en augmentant la durée du delay()

Serge .D

Et un lien vers le module ACS712 que tu as approvisionné cela pourrait être utile !
Note qu'il faut lire ton code pour trouver dans les commentaires le nom du module que tu utilise. Est-ce normal ?
Parce que tu réclame une solution mais tu ne donnes pas toutes les billes, pas très cohérent ça.

Lit donc le message épinglé :
Bienvenue sur le forum de la .......
et tu y trouvera toutes les indications que tu aurai du donner dès le départ.

Règle générale quand on fait du développement : "quand cela ne fonctionne pas on décompose le problème".
Indispensable : tu commences par tout décâbler. Si tu ne le fais pas et que tu as une connerie cachée dans le câblage tu ne la trouvera jamais (je parle d'expérience 40 ans de dev derrière moi) !

  1. Mesurer la valeur du Vcc qui alimente la carte arduino et le module.
  2. Relier avec un câblage correct le module ASC à une entrée analogique.
  3. Mesurer avec un voltmètre la tension en sortie du module, on doit avoir autour de 2,5V , il faut la valeur exacte.
  4. Faire SEULEMENT une série de mesure analogique et rien d'autre, pas de LCD ou autre machins.
  5. Afficher avec un Serial.print la réponse du convertisseur. Avec une tension de référence par défaut à Vcc tu devrais trouver autour de 500.
  6. Et bien évidement vérifier la cohérence entre la mesure au voltmètre et la mesure par la carte arduino

Si cela fonctionne tu peux passer à la suite et câbler les autres composants UN par UN et faire des tests simples à chaque fois.
Sinon il sera inutile d'aller plus loin tant que cette opération basique ne fonctionnera pas.

68tjs:
Je répète ma question :
Pourquoi tu fais un moyennage ?
Clairement, sauf justifications, je mets en doute la nécessité du moyennage

je vais peut être dire une co...rie mais ce module est fait pour de l'AC et du DC
donc le code n'est pas le même dans les deux cas :

  • en DC une mesure peut suffire
  • en AC c'est plus complexe, il faut intégrer sur une demi sinusoïde pour trouver la valeure efficace du courant d'ou la remarque de ChPr

ChPr:
Par ailleurs, votre formule décrit le comportement d'un intégrateur.

(ou rechercher la valeur max ...)
donc clairement

68tjs:
Est-ce un code que tu as trouvé tout fait ?

oui en ayant même loupé quelques lignes et pas vérifié sur quel circuit il est utilisé ...

68tjs:
Et un lien vers le module ACS712 que tu as approvisionné cela pourrait être utile !
Note qu'il faut lire ton code pour trouver dans les commentaires le nom du module que tu utilise. Est-ce normal ?
Parce que tu réclame une solution mais tu ne donnes pas toutes les billes, pas très cohérent ça.

Lit donc le message épinglé :
Bienvenue sur le forum de la .......
et tu y trouvera toutes les indications que tu aurai du donner dès le départ.

Règle générale quand on fait du développement : "quand cela ne fonctionne pas on décompose le problème".
Indispensable : tu commences par tout décâbler. Si tu ne le fais pas et que tu as une connerie cachée dans le câblage tu ne la trouvera jamais (je parle d'expérience 40 ans de dev derrière moi) !

  1. Mesurer la valeur du Vcc qui alimente la carte arduino et le module.
  2. Relier avec un câblage correct le module ASC à une entrée analogique.
  3. Mesurer avec un voltmètre la tension en sortie du module, on doit avoir autour de 2,5V , il faut la valeur exacte.
  4. Faire SEULEMENT une série de mesure analogique et rien d'autre, pas de LCD ou autre machins.
  5. Afficher avec un Serial.print la réponse du convertisseur. Avec une tension de référence par défaut à Vcc tu devrais trouver autour de 500.
  6. Et bien évidement vérifier la cohérence entre la mesure au voltmètre et la mesure par la carte arduino

Si cela fonctionne tu peux passer à la suite et câbler les autres composants UN par UN et faire des tests simples à chaque fois.
Sinon il sera inutile d'aller plus loin tant que cette opération basique ne fonctionnera pas.

Pour faire claire la reference du capteur est dans le peu de code mis des le premeire poste en gros une vingtaine de lignes , si je presise par plusieures fois, excuse moi du peu et de plus ecrit en rouge que la broche analogque a ete tester avec vcc , cela veut bien dir en direct donc le module acs debrancher , l alimentation de cinq volts est obtenu depuis une alimentation de 9 volts cabler sur la prise alim, pour les mesures de tension sur le detecteur sans le brancher sur la mega corespond bien +/- a 2.5 volt a vide , a savoir que la mesure attendue n"as pas besoin d'etre extremement precise c'est pour controler le courant de charge de ma baterie donc pas au mA pret.ensuite je placerais un second Acs 5 A pour controler la consommation du montage .Et je n ai jamais parler d'afficheur lcd faut pas confondre les posts... j ai aussi poster l ino complet dans le cas ou il y aurais une interaction inattendu qui bloque l affichage de la valeur du courant de charge.

Pouvez vous tester avec juste votre fonction les bonnes déclarations et un appel à votre fonction dans le setup, pas un code de 50k qu’on ne peut pas lire sur forum (suis sur mon mobile)?

isolez le problème

Pour faire clair il est préférable de faire des retours à la ligne pour aérer son texte et d'éviter l'écriture au km.
Quand on est demandeur il est préférable de ne pas décourager ceux qui peuvent aider et de leur faciliter la tâche.

Si je résume ce que j'ai compris:

  • coté module ACS c'est ok
  • coté entrée analogique c'est ko.

Il semblerait qu'il y ait soit une erreur de manip soit que le micro ait subit des outrages "involontaires".

Pour lever le doute :

  1. carte seule, au fait tu ne nous as pas encore dit de quelle carte arduino il s'agit -> tu ne dis pas tout !
    Tu raccordes le 3,3V sur A0.
  2. Tu fait un digitalRead(x) -> résultat cohérent ou pas ? --> on a le droit de la faire voir la partie info
  3. Tu fais un analogRead(x) -> résultat cohérent ou pas

et tu reproduis la manip sur les entrées A0 à A5. Au moins on saura si la carte arduino est intacte où si "elle a souffert".

Info :

  • Toutes les I/O ont une fonction principale et une ou plusieurs fonctions secondaires.
  • La fonction principale de toutes les I/O est d'être des I/O NUMERIQUES, même AO à A5.
  • Au démarage (après un reset ou à l'allumage de la carte) toutes les I/O sont sur leur fonction principale c'est à dire en mode digital (même AO à A5) et positionnées en entrée.
  • la fonction secondaire de A0 à A5 est d'être la mesure analogique.
    A4 et A5 ont une autre fonction secondaire qui est l'I2C.
  • Ce n'est que la fonction analogRead qui peut faire passer individuellement A0 ou A1, ou... ou A5 sur leur fonction secondaire la mesure analogique

PS
Ecoute ce qu'on te dit , JML dans le post précedent et moi dans le #22 : décompose ton programme en petit bout que tu teste un par un.
Toutes les personnes qui sont des développeurs professionnels en activité ou d'anciens développeurs en retraite te diront la même chose : il n'y a pas d'autre solutions.
Et moi j'ajoute que ce n'est pas la peine d'aligner les lignes de code tant le matériel et sa communication avec le micro n'est pas validé.

68tjs

la carte sur laquelle je televerse est une mega .Pour tester les broches Analogiques,
j ai pris ma fonction test_tension j ai affecter a tours de role sur les pin A0 a A2 cela marche ce qui dé-douane la partie hardware donc reste plus que le software a verfier . je m y attaque des ce week end. Par contre j ai pas de confirmation de la formule exacte de conversion on ne trove pas deux formules pareilles.

Je ne sais pas ou tu cherches la formule de conversion mais pour moi il n'y a qu'un seul endroit : c'est la datasheet du produit.
Si tu met dans le champ recherche de ton moteur de recherche favori, moi c'est Qwant.com, raz le bol de hégémonie de google et du vol de données personnelles, tu obtients une série de réponse.

J'élimine tout ce qui est adafruit, sparkfun et autre vendeurs de modules --> les datasheets qu'il fournissent ont toujours 5 à 10 versions de retard.

Je cherche un nom de fabricant (oui je sais je suis un ancien électronicien professionnel et c'est plus facile pour moi).
Dans le cas présent j'ai reconnu le nom d'Allegro et j'ai téléchargé.
Si tu n'en connais pas tu tâtonnes jusqu'à trouver celui du fabricant du produit.
Je trouve que cela vaut vraiment la peine de perdre un peu de temps pour avoir un document à jour.

Que peut-on déduire de la date sheet ?
Je précise que je n'ai encore jamais utilisé ce circuit.

Ce circuit utilise l'effet Haull, c'est à dire que le courant qui traverse le circuit intégré génère un champ magnétique et que ce champ magnétique va à son tour générer une tension. Il y a donc isolement électrique entre la partie puissance et la partie mesure.

Au repos le circuit délivre Vcc/2. Cela signifie que le circuit est prévu pour le continu et l'alternatif.
Cela veut dire aussi qu'en continu la tension évoluera de Vcc/2 à Vcc ou si tu connecte le fil du courant dans l'autre sens de Vcc/2 à 0 puisque le champ magnétique dépend du sens du courant.

De combien évolue la tension de sortie en fonction du courant. circuit en fonction du courant.
La datasheet est prévue pour 3 versions du circuit
x05B Imax = 5A sensibilité = 185 mV par ampère
x20A Imax = 20A sensibilité 100 mVpar ampère
x30A Imax = 30A sensibilité = 66 mV par ampère

Je n'arrive pas déterminer quelle version tu as : c'est écrit sur le boîtier du circuit intégré.
Imaginons que c'est la version 5A
La tension de sortie sera égale à la tension de repos plus la tension due à l'effet Haull soit
Vs = 2,5 + 0,185 * I (I en ampères)
et si jamais tu inverses le sens du courant dans le circuit intégré (je t'invite à le faire rien que pour ta curiosité naturelle) la formule devient :
Vs = 2,5 - 0,185*I

Moyennage ou pas.
C'est une question de bruit, rappelle toi j'ai recommandé de relier le capteur au micro avec une paire torsadée.
Perso j'ai sacrifié quelques mètres de câble ethernet rigide (mono brin) dont je récupère les paires.
Mais pour faire un essais tu peux torsader deux fils Dupont, ceux qui sont vendus pour les breadboards.
Avec de la nappe il y a aussi la possibilité d'utiliser 3 conducteurs:

  • le central est pour le signal
  • les deux extérieurs sont reliés à la masse aux deux extrémités.

Sur cette version de CI il n'y a qu'une seule bande passante 80 kHz mais il y a un filtre que l'on peut mettre en service.
Si ce filtre est en service sur ton module il y a un condensateur soudé entre la pin 6 du ASC712 et la masse.
Il y a moyen de faire quelque chose si tu sais un peu manier le fer à souder.

Mais fais déjà des tests et on en reparle après.

68 tjs :slight_smile:
j ai trouver l affichage par serial.print me donne bien 1023 du fait de vcc sur A0
le pb etait purement logiciel , il fallait juste ne pas oublier de faire l "appel de fonction dans le loop c 'est a dire
test_courant();
maintenant reste plus que la convertion... :frowning:
je n ai pas besoin de paires torsades si l acs a coté du mega ?
pour le reste je vais relir ton dernier post et appliquer .

le pb etait purement logiciel ,

C'est pour cela que c'est mieux d'avoir le code complet.

ça se serait vu dès le départ.

On a eu le temps de tergiverser sur plein de points...

Qu'en est t'il de la formule? je suis curieux de voir le résultat.

leptro
la tu tu te moque de moi!!!!! pour rester poli
le code complet etait dispo depuis le debut en piece jointe #4.......

C'est la deuxième fois que tu réponds agacé,
Ce qui est parfaitement vrai, sauf peut-être pour toi, c'est que dès le départ rien n'était clair.

Ce n'est pas un reproche mais une constatation.
Il faut bien débuter un jour donc ça on l'accepte même si on le fait remarquer dans l'intérêt des échanges.

Mais rappelle toi bien qu'en face de toi tu as des bénévolles qui répondent sur leur temps de loisir.
Il serait domage pour toi de les faire fuir par des réflexions un peu trop vives.

oups mille excuses.. Autant pour moi.

On lit tellement de messages sans fondement, incomplets.. et on doit à chaque fois deviner.
Et j'avoue que dans le flow d'info j'ai raté la pièce jointe.

Pascal17740:
leptro
la tu tu te moque de moi!!!!! pour rester poli
le code complet etait dispo depuis le debut en piece jointe #4.......

Poster en PJ un truc de 1600 lignes que l'on ne peut pas lire directement dans le forum n'incite pas les bénévoles que nous sommes tous à creuser. c'est aussi facile de rater la PJ.

Perso je lis le forum le plus souvent depuis mon smartphone, il m'est donc impossible de lire simplement votre code...

Le point - où la leçon à retenir - c'est que pour tester plutôt que de regarder le programme dans son ensemble, vous devez créer un code de 10 lignes pour affiner votre formule. Une fois que vous avez compris comment se comporte le module, alors vous intégrez cela dans votre grand code.

et quand ça ne marche pas, postez les 10 lignes ici. ce sera facile pour tout le monde de regarder et de vous aider...

je n ai l intention de faché ni de decouragé personne, mais il s averre que les 10 lignes de code presentes dans le post 1 n' on pas permis de detecter cette ommision , et dans mon cas le non affichache d une valeur meme erronnée , le pb etait l affichage d'une valeur et que tous le monde c 'est focalisé sur la formule, quelle soit fausse ou correcte il y aurais du avoir une valeur. Mea culpa j ai peut etres manquer de rigueur dans la diffusion des infos. desormais j ai bien la valeur des deux entrees analogiques que je vais exploiter une pour le courant de charge de la batterie (de voiture) avec un acs 20a et le courant de conso du projet domotique avec un acs 5a
reste plus qu a trouber les deux formules adequates.