Bende bu tuhaf sorun var. TMP 36 sensörüm, Arduino Uno kartıma bağlı tek şey olduğunda iyi çalışıyor. Gerilim ölçümleri ve dolayısıyla sıcaklık doğru ve tutarlıdır. Ancak, Uno'ya bir LCD ekran bağladığımda ve bir programın TMP'nin ölçümlerini ekrana yazdırmasını sağladığımda, değerler tutarsız hale geliyor ve bir okumadan diğerine 10 derece F'ye kadar değişebilir. (Sensörün saniyede bir ölçüm yapmasını sağlıyorum.) Bu, LCD ekran takılı olmadığında gerçekleşmiyor. Ekrandan ayrı konektörleri çıkarmaya ve ölçümlerin tekrar tutarlı hale geldiğinde görmeye karar verdim. Bunu bir kez denedim ve ekrandaki 5. bağlantıya giden bir topraklama kablosunun tekrar tekrar takıp bir toprak piminden çıkardığımda değerin değişmesine neden olduğunu gördüm. TPM değerleri, topraklama kablosu dışında LCD'ye bağlı başka bir şey olmadığında (açık değildi) bile değişiyordu. Bunun nasıl mümkün olduğunu anlamıyorum ve bunun bir donanım mı yoksa yazılım sorunu mu olduğunu bilmiyorum.
LCD ekranı sensör kablolarıyla, ardından topraklama kablolarıyla ve ardından iki Biri 220 ohm dirence sahip olan 5V bağlantılar. Bunu devre enerjiliyken yaptım ve herhangi bir büyük değişiklik için değerleri izledim. İlk değişiklik, son 5V kabloyu bağladıktan birkaç saniye sonra oldu. Sensör bir saniye sonra 80 derece F ve ardından 85 derece F ölçtü. Daha sonra birkaç saniye 81'e, ardından 87'ye çıktı. Değerler değişmeye devam etti, ancak önceki zamanlardaki kadar değil. Bu arada, Arduino'nun bulunduğu alandaki sıcaklık yaklaşık 82 derece F'dir.
TMP değerleri, LCD ekrana bağlı olmadığında 3 derece F'den fazla değişmez. Buna neyin sebep olabileceğini anlamıyorum. Daha önce başka biri bu sorunu yaşadı mı veya nedenini bilen var mı?
İşte düzen.
#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 döngü () {int sensorVal = analogRead (sensorPin); Seri.print ("Sensör değeri:"); Seri baskı (sensorVal); şamandıra voltajı = (sensorVal / 1024.0) * 5.0; Seri.print (", volt:"); Seri baskı (voltaj); Seri.print (", derece C:"); şamandıra sıcaklığı = (voltaj - .5) * 100; Seri baskı (sıcaklık); Seri.print (", derece F:"); yüzer fahrenhayt = (sıcaklık * 1.8 + 32); Serial.println (fahrenhayt); gecikme (1000); lcd.begin (16,2); lcd.print (fahrenhayt); lcd.print ("derece F"); float averageTemp; eğer (sıcaklık < baselineTemp) {lcd.setCursor (0,1); lcd.print ("Oda sıcaklığının altında"); }}