J'essaie de construire un thermostat avec Arduino. Je veux l'alimenter à l'aide de la batterie / du chargeur de téléphone portable, ce qui rend la tension du système assez variable. Pour le moment, j'utilise Arduino Uno, mais une fois terminé, je le porterai sur Lilypad.
J'ai d'abord essayé d'utiliser le capteur de température TMP36 . Jusqu'à présent, ce fut un échec complet. Bien que le capteur lui-même semble être très stable, je ne peux pas trouver un moyen de mesurer avec précision sa tension.
L'utilisation de la référence 5v intégrée pour les capteurs analogiques ne fonctionne pas du tout - même alimenté par USB Arduino + 5V sont en fait + 4,8V (ce qui décale la température mesurée de quelques degrés). Lorsque la carte est alimentée par la batterie, la tension chute à environ 4 V et la température mesurée des fusées célestes. J'ai également essayé d'utiliser + 3,3 V de la carte comme référence. Il semble être plus stable lorsque la carte est alimentée par USB, mais sa tension diminue lors de l'utilisation de la batterie.
Existe-t-il un autre moyen de mesurer de manière fiable la tension de sortie du capteur?
Pour la deuxième étape, je prévois d'utiliser des thermistances. Je viens de commander deux de ces thermistances 20K .
D'après ce que je comprends, ceux-ci devraient être plus faciles à mesurer avec précision si je construis un diviseur de tension et utilise V_in comme tension de référence pour l'ADC.
Quelques questions à leur sujet:
- Est-il judicieux d'utiliser quelques diviseurs de tension avec différentes résistances fixes pour augmenter la précision?
- Je peux utiliser une broche programmable comme V_in et mesurer la température en utilisant quelques niveaux de tension différents. Bien que ce ne soit pas clair pour moi si cela augmentera réellement la précision.
Réponses:
Il semble que vous soyez conscient du problème avec le changement de tension de référence et si vous utilisez un appareil comme le TMP36 (fixe 10mV / degC), vous ne pouvez rien faire d'autre que d'utiliser une référence de tension à partir d'une puce pour stabiliser les choses.
Cependant, si vous utilisez un RTD ou une thermistance, le problème ne se posera pas. Votre ADC effectue une mesure ratiométrique - il compare l'entrée ADC à sa tension de référence MAIS, si vous alimentez le RTD ou la thermistance (via une résistance appropriée) à partir de la même tension de référence, cela n'affectera pas les lectures. Si la référence augmente de 10%, la tension dans l'ADC augmente également.
la source
Je pense que vous devriez envisager d'utiliser un capteur de température numérique comme DS18B20 / DS18S20 car cela ne dépend pas de la précision de votre ATmega ADC pour mesurer un signal anaolg, il utilise un protocole numérique à 1 fil pour signaler la température.
Reportez-vous aux didacticiels suivants
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino
la source
Votre mesure sera aussi bonne que la tension de référence pour l'ADC est bonne. Arduino utilise par défaut la tension d'alimentation comme tension de référence, mais dans votre cas, la bonne façon de le faire serait d'utiliser la broche Aref d'arduino. Vous devez obtenir une puce spéciale appelée "référence de tension" et la connecter à la broche Aref, puis définir ADC pour utiliser la référence externe dans le code Arduino (
analogReference(EXTERNAL)
)La tension de référence doit être sélectionnée pour que le swing complet de votre capteur de température s'adapte à la tension de référence. Le TMP36 produira ~ 1,5 V à 100 ° C, vous devrez donc utiliser une référence supérieure à 1,5 V pour mesurer la température jusqu'à 100 ° C. Vous souhaitez que votre référence se rapproche le plus possible de la tension maximale mesurée pour obtenir autant de résolution que possible.
Atmega328p possède deux références internes qui peuvent être utilisées sans aucun composant externe. L'un est 1,1V, un autre 2,56V. Leur précision est généralement un peu moins bonne que ce que vous obtiendriez en utilisant un composant dédié externe. Consultez la documentation Arduino pour la fiche de référence analogique et Atmega328p pour la précision de référence interne.
Si vous voulez vraiment obtenir des écrous avec différentes gammes, vous pouvez utiliser plusieurs références externes et les changer en utilisant un commutateur analogique comme 74hc4051. Ou vous pouvez basculer entre deux références internes.
Avec les thermistances, vous obtiendrez de meilleurs résultats si vous configurez une source de courant constant à la place en utilisant une résistance muette. D'un autre côté - une résistance muette alimentée par une référence de tension stable fonctionnerait bien.
Lors du choix d'une référence externe, assurez-vous que vous avez suffisamment de tension pour s'adapter à sa tension de chute lors de l'alimentation à partir des batteries et que les batteries sont déchargées. Vref + Vdropout <Vbat-min.
la source
Ne pas avoir une référence ADC stable est en fait le symptôme d'un autre problème dans votre circuit: vous ne fournissez pas une tension suffisamment élevée à la carte. Ceci est indiqué par la baisse de l'alimentation de 5 V à 4 V et la baisse de 3,3 V également.
Le régulateur de tension (MC33269D-5.0 IIRC) sur la carte Arduino a une tension de décrochage de ~ 1.0V, vous devez donc l'alimenter avec au moins 6V pour obtenir une sortie stable de 5V. Les piles AA commencent à 1,5-1,6 V et sont presque mortes à 1,1 V, vous devez donc alimenter la carte avec au moins 6 piles AA pour une sortie stable sur toute la durée de vie des piles.
Alimenté correctement, vous pouvez utiliser la référence ADC interne ou les lignes 5V ou 3,3V. Étant donné que le capteur de température varie d'environ 10 mV par degré Celcius, vous pouvez utiliser un diviseur de tension pour définir la tension de référence équivalente à la tension de sortie maximale attendue du capteur (par exemple pour 50 degrés C). Cela donnera une mesure plus précise.
Si vous souhaitez utiliser moins de 6 piles AA, essayez un convertisseur boost DC-DC, par exemple https://www.sparkfun.com/products/10968 . L'exemple lié prend 1V - 4V et fait 5V. La sortie serait alimentée directement dans la broche 5V de l'Arduino, contournant son régulateur.
Pour que la carte fonctionne plus longtemps sur piles, mettez le MCU en veille entre les lectures du capteur. La bibliothèque basse puissance rocketscream est idéale à cet effet. Mais il n'est vraiment utile que lorsque vous utilisez un régulateur / convertisseur DC-DC efficace car le régulateur Arduino standard utilise 10mA tout seul!
la source
Réponse à la question Existe-t-il un autre moyen de mesurer de manière fiable la tension de sortie du capteur?
L'ADC utilise la tension de référence pour la conversion de l'analogique au numérique. Donc, s'il y a un changement dans la tension de référence, les valeurs converties (c'est-à-dire la valeur numérique) changeront. La valeur numérique sera différente pour la même entrée analogique si la tension de référence change.
Une option simple consiste à utiliser la tension de référence interne à l'intérieur de l'Arduino (c'est-à-dire le contrôleur Atmega).
Voir le lien ci-dessous où un exemple de code est fourni pour utiliser l'ADC interne (nom de la fonction Arduino - analogReference (DEFAULT))
http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
Je pense que cela résoudra votre problème et il n'est pas nécessaire de passer aux thermistances.
la source