Dans le cadre de mon boulot, j'ai une partie d'un projet qui consiste à récupérer et afficher 5 valeurs de capteurs de distance par ultrason.
J'ai donc choisi d'utiliser une carte Arduino pour son prix, sa taille et ses performances au premier abord, qui correspondait à mes attentes. J’ai choisi une carte UNO Rev3.
Cependant, un petit problème survient, et c'est pourquoi je me tourne vers vous, Ô grands maîtres des sciences.
Je m'explique :
J'ai 5 capteurs de distance par ultrason, fournissant une tension comprise entre 0-10V avec un courant < 20mA pour une plage de mesure de 180mm.
Comme les entrées analogiques Arduino ne supporte que jusqu'à 5V, j'ai donc commencé par créer un pont diviseur de tension, avec des résistances de 1KOhm pour une tolérance de 0.10%.
Mais avec ceci, les valeurs lues par l'Arduino lorsque le capteur ne bougeait pas pouvaient osciller de 5mm. Ce qui est énorme car j'aimerai une tolérance de +/- 0.5mm au maximum.
Par la suite, j'ai donc fait une moyenne glissante dans le programme (sans pondération), mais cela ne m’a pas été grandement utile… (+/- 4mm).
Par conséquent, j’ai réalisé un détecteur d’enveloppe en sortie du pont diviseur (Résistances 1k et 2k, capa : j’en ai essayé plusieurs entre 10 et 100 µF), mais cela ne rentrait toujours pas dans ma tolérance voulue.
Alors je me suis dit que les entrées analogiques de l’Arduino n’étaient pas stable, mais si puisque j’ai connecté un générateur de tension stable (de compète il faut le dire ), et les bits ne bougeait absolument pas. (Les capteurs sont très stables également, je les ai même essayés sur un WAGO (entrée analogique sur 14 bits, aucun soucis au niveau de la stabilité).
En ce qui concerne un filtre PB, la fréquence du bruit serait trop compliquée à calculer, un service dans ma boîte pourrait éventuellement le faire, mais ça reviendrait cher pour nous, trop long dans le temps, et trop encombrant par la suite.
Et pour l’instant, j’ai fait un petit bidouillage dans le soft, de façon à commencer les mesures quand la pièce à mesurer est stable (appuie sur un bouton) et à n’accepter que des valeurs de +/- 1mm de la première valeur lue dans la moyenne glissante (lors de l’appuie sur le bouton). Cela correspond à ma tolérance recherchée, mais le temps de mesure est un peu plus long, et je ne suis absolument pas sûr de la répétabilité des mesures.
Je commence donc à être à cours d’idées… Si vous en avez, je suis preneur !!
Je vous remercie d'avance.
PS : Avec IE8 (Et oui, ordi de boulot) il y a un petit bug au niveau du défilement dans le carde d’écriture du sujet, la barre de défilement remonte toute seule, il est impossible de voir ce que l’on écrit si le texte dépasse la taille du cadre.
Effectivement tu commences à avoir épuiser pas mal d'idée XD
Une solution à moindre cout et facile à mettre en place pourrait être d'utiliser un ADC exterieur qui peut accepter des tensions de 0 à 10V comme ca pas besoin de diviser et tu peux mettre autant de capteurs à convertir que tu veux.
Ensuite une simple com' I2C pour aller lire le capteur voulu et hop ca marche ! (et tu auras aussi plus de choix sur la résolution de l'ADC que celle de 10 bits imposé sur l'Arduino)
(Pour ce qui est du bug il faudrait faire un retour de bug avec un bouton de signalement que je ne retrouve plus XD)
Pour répondre à thelme :
- Mes capteurs sont alimentés en 24V, et l'Arduino avec une pile 9V ou USB (5V)
- Les masses sont effectivement bien reliées.
- Les capas sont électrolytiques (je ne suis plus très sûr du terme, ce sont les cylindriques polarisées (les bleus ))
- Mes objets ne bougent uniquement lors de la mise en position, qui se fait manuellement. Les capteurs servent donc à les positionner exactement à l'endroit voulu.
Eskimon :
J'avais pensé effectivement d'utiliser un ADC extérieur, mais je ne savais pas que l'on pouvait le relier par une I2C (c'est pourquoi j'ai vite abandoné l'idée puisque le brancher sur les entrées numériques... sachant que j'ai un shield color lcd ). Mais le soucis c'est que celà risque d'être encombrant, et il faut que le système entier soit le plus petit possible.
Je vais tout de même me renseigner, on doit surement pouvoir en trouver des petits.
Merci du conseil !
Quand au bug, je vais donc tâcher de trouver ce fameux bouton
Pour faire du filtrage il faut prendre toutes les technologies de capacité SAUF du chimique
Citation : Rizov
Mes objets ne bougent uniquement lors de la mise en position, qui se fait manuellement. Les capteurs servent donc à les positionner exactement à l'endroit voulu.
Tu peux faire un filtre passe bas qui commence assez bas dans les fréquences sauf si les gens sont super méga rapide.
Le filtre passe bas serait trop compliqué à mettre en oeuvre, puisque le signal n'est pas sinusoidal et la fréquence de coupure peut changer à tous moments, c'est le bruit d'environ 100mV que j'aimerai lisser.
J'ai pu récupérer un module ADAM faisant office de CAN. J'essaye celà cette aprème.
Pour ce qui est d'utiliser un composant externe on trouve les max127, qui peuvent convertir jusqu'à 10V et ont 8 canaux de conversion avec 12 bits de résolution, le tout en com I2C (mais ca coute 25€...)
2^10 = 1024
180 mm / 1024 = 0.1758 mm
10V / 1024 = 0.009766 V = 9.766 mV
Prenons un bit de moins car 0.17 mm c'est beaucoup trop précis pour ce que tu veux et 10 mV c'est vraiment faible :
2^9 = 512
180 mm / 512 = 0.3516 mm
10V / 512 = 0.01953 = 19.53 mV
Un pas de 20 mV c'est pas énorme néanmoins il est possible de faire quelque chose, cela dépend de ton environnement et du placement des capteurs.
Si le circuit est placé dans un environnement bruité électriquement (machines-outils, appareils électriques de forte puissance, etc) ca risque de compliqué la tâche et il faudra blindé le montage. D'autre part si les capteurs sont éloigés du montage, il faudra peut-être envisager de mettre l'ADC (ou CAN en français) au plus près du capteur (donc 5 ADC) et de communiquer via un bus I²C ou SPI selon la technologie utilisée.
Au niveau du filtre passe bas, d'une part je doute que tu échantillonne tes capteurs au-delà du MHz ca ne sert pas à grand chose donc tu peux filtrer déjà au-dessus de 5 ou 10 MHz ca peut réduire le bruit électronique extérieur. Et si tu utilise un ADC regarde la bande passante, tu pourras mettre un filtre passe bas avec un fréquence de coupure un peu supérieur, ca permettra de filtrer le bruit en partie.
Après il faut penser à plein de détails :
- Essayer de faire un circuit imprimé maison pour l'ADC et son alim
- Alimenter l'ADC avec une tension propre (passer par un régulateur type 7805 voire une référence de tension, ne pas le brancher directement sur la pile ou l'USB)
- Si les capteurs sont reliés avec des cables, torsader le cable de données avec un cable de masse et faire la longueur la plus petite possible.
- Blinder le montage
- Choisir des composants de qualité.
Merci zeqL, je vais essayer tout ça, et je vous tiens au courant.
[Arduino] Entrée analogique
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !