Domanda:
Perché i valori del mio sensore di temperatura diventano incoerenti quando viene aggiunto hardware aggiuntivo alla scheda?
MICROexchange6
2016-08-22 03:55:33 UTC
view on stackexchange narkive permalink

Ho questo strano problema. Il mio sensore TMP 36 funziona bene quando è l'unica cosa collegata alla mia scheda Arduino Uno. Le misurazioni della tensione, e quindi la temperatura, sono accurate e coerenti. Tuttavia, quando collego uno schermo LCD a Uno e faccio in modo che un programma stampi le misurazioni del TMP sullo schermo, i valori diventano incoerenti e possono cambiare fino a 10 gradi F da una lettura all'altra. (Ho il sensore che effettua una misurazione ogni secondo.) Questo non accade quando lo schermo LCD non è collegato. Ho deciso di rimuovere connettori separati dallo schermo e vedere quando le misurazioni sono diventate nuovamente coerenti. Ho provato una volta e ho scoperto che un filo di terra che va alla connessione 5 sullo schermo ha fatto cambiare il valore quando l'ho inserito e rimosso ripetutamente da un pin di terra. I valori TPM stavano cambiando anche quando non c'era nient'altro collegato all'LCD (non era acceso) tranne il filo di terra. Non capisco come sia possibile e non so se si tratti di un problema hardware o software.

Ho ricablato lo schermo LCD iniziando con i fili del sensore, poi i fili di terra e poi i due Connessioni 5V, di cui una con resistenza da 220 ohm. L'ho fatto mentre il circuito era alimentato e ho osservato i valori per eventuali modifiche di grandi dimensioni. La prima modifica è avvenuta pochi secondi dopo aver cablato l'ultimo cavo da 5 V. Il sensore misurava 80 gradi F e poi 85 gradi F un secondo dopo. Poi è andato a 81 per alcuni secondi, poi a 87. I valori hanno continuato a cambiare, ma non tanto quanto le volte precedenti. A proposito, la temperatura nell'area in cui si trova Arduino è di circa 82 gradi F.

I valori TMP non cambiano di più di 3 gradi F quando l'LCD non è collegato allo schermo. Non capisco cosa potrebbe causare questo. Qualcun altro ha avuto questo problema prima o conosce la causa?

Ecco il layout.

  #include <LiquidCrystal.h>LiquidCrystal lcd (12,11,5,4,3,2); const int sensorPin = A5;
const float baselineTemp = 20.0; void setup () {Serial.begin (9600);} void loop () {int sensorVal = analogRead (sensorPin); Serial.print ("Valore sensore:"); Serial.print (sensorVal); tensione flottante = (sensorVal / 1024.0) * 5.0; Serial.print (", volt:"); Serial.print (tensione); Serial.print (", gradi C:"); temperatura del galleggiante = (tensione - .5) * 100; Serial.print (temperatura); Serial.print (", gradi F:"); float fahrenheit = (temperatura * 1,8 + 32); Serial.println (fahrenheit); ritardo (1000); lcd.begin (16,2); lcd.print (fahrenheit); lcd.print ("gradi F"); float averageTemp; if (temperature < baselineTemp) {lcd.setCursor (0,1); lcd.print ("Inferiore a temp. ambiente"); }}  
Potresti avere uno qualsiasi di diversi problemi: rumore elettrico, cedimento dell'alimentazione sotto carico in un circuito che non lo tiene in considerazione, o forse il consumo di energia del circuito (la maggior parte del quale finirà come calore) causando il riscaldamento dell'assieme a un po 'sopra l'ambiente. La tua domanda non è realmente risolvibile senza dettagli precisi della configurazione: schemi, numeri di parte ** e layout fisico **.
Puoi provare a mettere un diodo (come un LED) tra di loro? In questo modo eliminerai la possibilità che il display LCD possa essere alimentato nuovamente. Puoi anche dirci quale sensore di temperatura stai utilizzando? Ho fatto un progetto simile (con DS18B20) ma non ha causato letture divertenti ...
Ho aggiunto il mio codice per ogni evenienza, anche se dubito fortemente che abbia qualcosa a che fare con questo. Aggiungerò anche il layout.
Il layout è nel post.
Il tuo "layout" è quasi non interpretabile, ma prova a dare al sensore di temperatura i suoi cavi all'alimentatore in modo che non lo condivida con l'LCD, e aggiungi dei condensatori di bypass.
Cinque risposte:
Dmitri
2016-08-22 18:14:10 UTC
view on stackexchange narkive permalink

Non prendere l'alimentazione per l'LCD dai pin Uno. Collega l'alimentazione LCD a una fonte di alimentazione separata.

+1, Suggerimento utile b / c TMP 36 è un sensore analogico e il rumore o l'abbassamento dell'alimentazione influirebbe sulla lettura. Perché il voto negativo drive-by, @someone?
Non ho downvote ma questa non è affatto una risposta completa. È solo un consiglio generale senza alcun ragionamento scritto. Dovrebbe spiegare perché l'alimentazione dell'LCD dovrebbe provenire da una fonte di alimentazione separata e come si collega alla domanda.
Jot
2017-01-26 00:38:01 UTC
view on stackexchange narkive permalink

Per un sensore analogico come il TMP36, Arduino utilizza i 5V come riferimento. Se i 5V cambiano (ma la tensione del TMP36 rimane la stessa), l'Arduino pensa che la temperatura sia cambiata. Il valore restituito da analogRead () aumenta. Ecco perché la temperatura sembra aumentare se si abbassano i 5V.

Il TMP36 (con resistenza) emette una certa tensione. Questo è diverso dai sensori "raziometrici", emettono una tensione relativa a 5V e le modifiche a 5V non hanno alcun effetto sul risultato. Un sensore "raziometrico" è ad esempio un ponte di Wheatstone o un LDR con resistenza.

Con il TMP36, è necessario un buon riferimento di tensione per leggere la tensione effettiva. È possibile utilizzare il riferimento di tensione interno. Forse è necessario un partitore di tensione aggiuntivo. Oppure usa un alimentatore al jack power barrel e lascia che il regolatore di tensione integrato crei una tensione fissa di 5V che può essere utilizzata come riferimento.

Quando si utilizzano sensori di temperatura digitali, come il DS18B20, tutti questi problemi andato istantaneamente.

Il 5V non dovrebbe mai essere collegato all'AREF. Di default è già collegato internamente a VCC e quando viene selezionato il riferimento di tensione interno, il pin AREF cambia la tensione. In tal caso, viene creato un collegamento interno quando AREF è collegato a 5V. Non è necessario aggiungere 100nF ad AREF, poiché Arduino Uno ha già 100nF ad AREF e GND.

Una breadboard può avere cattivi contatti. Poiché la corrente dell'LCD utilizza gli stessi fili GND e + 5V, può influire sul TMP36. È meglio usare fili separati come già accennato da Chris Stratton. Per ridurre il rumore potresti prendere un numero di valori analogRead () e usare la media. Per un sensore di temperatura analogico è pratica comune calcolare la media di un numero di campioni.

JRobert
2016-08-28 17:08:36 UTC
view on stackexchange narkive permalink

Non vedo + 5v -> Aref (e Aref -> condensatore di bypass -> Gnd). Necessario, se stai usando la tensione di alimentazione come riferimento, come sembra.

RV2017
2017-02-13 21:17:00 UTC
view on stackexchange narkive permalink

Prova ad alimentare il circuito utilizzando una batteria da 9 V. Ho anche avuto questo problema e ha funzionato quando ho usato un alimentatore separato. Sembra essere un rumore elettrico causato dall'USB del computer. La risposta pubblicata da JRobert dovrebbe essere necessaria se vuoi alimentare il computer.

STEVE FINCH
2018-08-11 00:11:49 UTC
view on stackexchange narkive permalink

Ho riscontrato questo problema e ho inserito un condensatore da 0,1 µF sul sensore e il rumore è stato notevolmente ridotto (fino a mezzo grado, che in realtà è + - un tick).



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...