Alors,
Il y a plusieurs soucis.
Problème n°1
Tout d'abord ton alimentation de type chargeur de portable, sache que n'importe quel régulateur a besoin d'une charge minimum pour réguler correctement et donc, dans ton cas, pour fournir une tension de +5V bien lisse.
- Soit ton chargeur a déjà à l'intérieur une résistance prévu a cet effet, c'est à dire que si rien n'est branché au chargeur alors la résistance interne fait qu'un courant sera quand même tiré et en sortie il y aura un +5V lissé
- Soit le chargeur n'a rien de prévu à l'intérieur et il régulera bien, +5V lissé, que si une charge est branché dessus.
Si on est dans le cas numéro 2 et que la seule charge est le TMP36 mais qui ne consomme quasiment rien, 50 µA, alors le +5V peut très bien faire du yoyo.
Essai n°1 Mettre une résistance de 220 ou 330 ou 470 entre le +5V et le GND du chargeur pour créer un courant de quelques dizaines de mA et faire ce que Auteur propose puis regarder si le +5V est plus stable.
***************************************
Problème n°2
Lorsque je lis la doc du TMP36 je vois des choses intéressantes et notamment l'amplitude de la tension de sortie de ce capteur.
La tension de sortie du capteur est de 0.3V @ -25°C
La tension de sortie du capteur est de 1.2V @ +70°C
Ceci peut t'aider a adapter la pleine échelle de ton ADC de 10 bits (pouvant donc aller de 0...1023). Pour rappel l'ADC du ATMEGA328P peut être référencé de plusieurs manières : par rapport a son alimentation (+5V), par rapport a une référence interne (1.1V) ou par rapport a une référence externe d'une valeur de ton choix. Le choix de la référence de l'ADC a un impact direct sur la résolution de celui-ci.
Si par exemple, l'ADC est référencé a Vref = Vcc de l'Arduino donc +5V alors un bit vaut 0.0048V mais si il est référencé à Vref = au 1.1V interne au micro alors un bit vaut 0.0010V. On a donc augmenté "la précision".
La valeur en décimal dans l'ADC se traduit finalement par
Lorsqu'on y regarde de prés et par rapport a ton application il est fort peu probable que tu sois hors d'une plage de température comprise entre -25°C et +70°C et donc de tension comprise entre 0.3V et 1.2V. Donc référencer l'ADC à 1.1V est l'idéal car on exploite au maximum les 10 bits de l'ADC, c'est à dire que lorsque l'ADC vaut 0b1111111111 alors la valeur lue est 1.1V soit +70°C. Dans la pratique on pourrait être tenté de réduire encore plus la référence pour des capteurs qui délivrent de petits signaux mais en faisant ça il ne faut pas perdre de vu qu'on dégrade le Rapport Signal Bruit.
Le bruit ayant une certaine amplitude si on baisse la référence trop fortement alors elle s'approche de la valeur du bruit ambiant et on ne peut plus rien exploiter, sans compter que l'ADC a des défauts aussi.
Bref... La bonne solution est souvent d'amplifier le signal du capteur pour le faire entrer dans la pleine échelle de l'ADC.
Essai n°2 Penser a adapter la pleine échelle à la pleine échelle du capteur. @Auteur, je ne programme pas avec Arduino, peux tu confirmer que cette syntaxe est correct ? Merci à toi
1 2 3 4 5 6 7
| void setup()
{
// Set Analog reference to Internal 1.1Volts
analogReference(INTERNAL);
...
...
} |
***************************************
Problème n°3
Ton design est la pire des solutions en réalité
Faire transiter dans 100m de fil un signal de quelques centaines de mV, qui varie de 10mV par °C et sans charge (presque pas de courant) est complètement suicidaire. Ton fil est une vraie antenne et elle va ramasser tous les perturbations et tout le bruit avoisinant et cela va se mélanger au signal utile. Il existe des bus de terrain pour les cas de capteurs déportés comme le tien et le signal est numérisé à la source puis envoyé vers le micro (bus CAN des voitures, ModBus sur du RS485 etc... sont des bus de terrain pouvant fonctionner jusqu'à 1km de distance tout en restant robuste)
Dans la datasheet du TMP36, il y a un exemple pour ton cas de figure, inspire t'en :
La résistance de 750 Ohms a deux effets, elle va créer un courant de 1mA lorsque l'ADC va lire le capteur et elle fera un filtre RC (passe bas) où le C est la capacité de ton câble.
Essai n°3 Prendre un câble blindé avec au moins 3 conducteurs dedans), charger le signal avec la résistance de 750 Ohms, mettre un condo de découplage aux bornes du capteur (au plus proche) et laisser tomber l'alimentation +5V avec le chargeur. Prend le +5V de ton Arduino est amène le 100m plus loin pour alimenter le capteur.
Le blindage du câble Relié à une masse métallique (pas au GND de Arduino !!!!)
Conducteur 1 du câble +5V de Arduino
Conducteur 2 du câble GND de Arduino
Conducteur 3 du câble Signal issu du capteur
Les éventuels conducteurs libres du câble GND de Arduino (jamais en l'air !!!!)
Essai 2 + Essai 3 devrait régler ton problème.
A+
Partager