Soru:
Karta ek donanım eklendiğinde sıcaklık sensörü değerlerim neden tutarsız hale geliyor?
MICROexchange6
2016-08-22 03:55:33 UTC
view on stackexchange narkive permalink

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"); }}  
Birkaç sorundan herhangi birine sahip olabilirsiniz: elektrik gürültüsü, bunu hesaba katmayan bir devrede yük altında güç kaynağının sarkması veya belki de devrenin güç tüketimi (çoğu ısı olarak sonuçlanacak) tertibatın ısınmasına neden olur. ortamın biraz üzerinde. Kurulumunuzun kesin ayrıntıları (şemalar, parça numaraları ** ve fiziksel düzen **) olmadan sorunuz gerçekten yanıtlanamaz.
Aralarına bir Diyot (LED gibi) koymayı deneyebilir misiniz? Bu şekilde, LCD'nin geri besleniyor olma olasılığını ortadan kaldırırsınız. Bize hangi Sıcaklık sensörünü kullandığınızı da söyleyebilir misiniz? Benzer bir proje yaptım (DS18B20 ile) ama komik okumalara neden olmadı ......
Kodumu her ihtimale karşı ekledim, ancak bununla bir ilgisi olduğundan şüpheliyim. Düzeni de ekleyeceğim.
Düzen yazıdadır.
"Yerleşiminiz" neredeyse yorumlanamaz, ancak sıcaklık sensörüne güç kaynağına kendi uçlarını vermeyi deneyin, böylece LCD ile paylaşmasın ve bazı baypas kapasitörleri ekleyin.
Beş yanıtlar:
Dmitri
2016-08-22 18:14:10 UTC
view on stackexchange narkive permalink

Uno pinlerinden LCD için güç almayın. LCD gücünü ayrı güç kaynağına bağlayın.

+1, Faydalı öneri b / c TMP 36, analog bir sensördür ve güç kaynağı gürültüsü veya sarkması okumayı etkileyecektir. Neden arabaya dayalı olumsuz oy, @someone?
Olumsuz oy vermedim ama bu hiç de tam bir cevap değil. Bu, herhangi bir gerekçenin yazılı olmadığı genel bir tavsiyedir. LCD gücünün neden ayrı bir güç kaynağından gelmesi gerektiğini ve soruyla nasıl ilişkili olduğunu açıklamalıdır.
Jot
2017-01-26 00:38:01 UTC
view on stackexchange narkive permalink

TMP36 gibi bir analog sensör için, Arduino referans olarak 5V kullanır. 5V değişirse (ancak TMP36 voltajı aynı kalırsa), Arduino sıcaklığın değiştiğini düşünür. AnalogRead () tarafından döndürülen değer artar. 5V düşürüldüğünde sıcaklığın yükselmesinin nedeni budur.

TMP36 (dirençli) belirli bir voltaj verir. Bu, 'oranometrik' sensörlerden farklıdır, 5V'ye göre bir voltaj çıkarırlar ve 5V'deki değişikliklerin sonuç üzerinde hiçbir etkisi yoktur. Bir "oranlı" sensör, örneğin bir Wheatstone köprüsü veya dirençli bir LDR'dir.

TMP36 ile, gerçek voltajı okumak için iyi bir voltaj referansına ihtiyacınız vardır. Dahili voltaj referansı kullanılabilir. Belki fazladan bir voltaj bölücüye ihtiyaç vardır. Veya güç haznesi jakına bir güç kaynağı kullanın ve yerleşik voltaj regülatörünün referans olarak kullanılabilecek 5V'luk sabit bir voltaj oluşturmasına izin verin.

DS18B20 gibi dijital sıcaklık sensörleri kullanırken tüm bu sorunlar anında gitti.

5V asla AREF'e bağlanmamalıdır. Varsayılan olarak zaten dahili olarak VCC'ye bağlıdır ve dahili voltaj referansı seçildiğinde, AREF pini voltajı değiştirir. Bu durumda, AREF 5V'ye bağlandığında dahili bir kısayol oluşturulur. AREF'e 100nF eklemeye gerek yoktur, çünkü Arduino Uno zaten AREF ve GND'ye 100nF'ye sahiptir.

Bir devre tahtası kötü bağlantılara sahip olabilir. LCD'nin akımı aynı GND ve + 5V kablolarını kullandığından, TMP36'yı etkileyebilir. Chris Stratton tarafından daha önce belirtildiği gibi ayrı kablolar kullanmak daha iyidir. Gürültüyü azaltmak için bir dizi analogRead () değeri alabilir ve ortalamayı kullanabilirsiniz. Bir analog sıcaklık sensörü için birkaç örneğin ortalamasını almak yaygın bir uygulamadır.

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

+ 5v -> Aref (ve Aref -> bypass kapasitör -> Gnd) görmüyorum. Görünüşe göre güç kaynağı voltajını referans olarak kullanıyorsanız gereklidir.

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

Devrenizi 9V pil kullanarak çalıştırmayı deneyin. Ben de bu sorunu yaşadım ve ayrı bir güç kaynağı kullandığımda işe yaradı. Bilgisayarınızın USB'sinden kaynaklanan bir elektrik gürültüsü gibi görünüyor. Bilgisayardan güç almak istiyorsanız JRobert tarafından gönderilen yanıt gerekli olmalıdır.

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

Bu sorunu yaşadım ve sensöre 0,1 µF kapasitör yerleştirdim ve çok daha az gürültü elde ettim (gerçekten + - bir tıklama olan yarım dereceye kadar).



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...