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"); }}