題:
當向板上添加其他硬件時,為什麼我的溫度傳感器值變得不一致?
MICROexchange6
2016-08-22 03:55:33 UTC
view on stackexchange narkive permalink

我有這個奇怪的問題。當TMP 36傳感器是唯一連接到Arduino Uno板的東西時,它可以正常工作。電壓測量值和溫度值是準確且一致的。但是,當我將LCD屏幕連接到Uno並讓程序將TMP的測量結果打印到屏幕上時,這些值將變得不一致,並且從一個讀數到另一個讀數的最大變化範圍為10華氏度。 (我讓傳感器每秒進行一次測量。)當未插入LCD屏幕時,不會發生這種情況。我決定從屏幕上卸下單獨的連接器,然後查看測量結果何時再次保持一致。我嘗試了一次,發現當我反復從接地引腳上插入和移除接地線時,連接到屏幕上連接5的接地線導致值改變。即使除接地線外,LCD上沒有其他任何連接(未打開),TPM值也在改變。我不知道這是怎麼可能的,也不知道這是硬件還是軟件問題。

我從傳感器線開始,然後是接地線,然後是兩根,重新連接了LCD屏幕。 5V連接,其中一個具有220 ohm電阻。我在電路通電時進行了此操作,並觀察了任何大的變化的值。第一次更改是在我為最後一條5V電線接線後幾秒鐘。傳感器測量的溫度為80華氏度,然後一秒鐘後為85華氏度。然後到達81幾秒鐘,然後是87。這些值繼續變化,但變化不大。順便說一下,Arduino所在區域的溫度約為82華氏度。

當LCD未連接至屏幕時,TMP值的變化不會超過3華氏度。我不明白是什麼原因造成的。有沒有其他人以前有這個問題,或者知道原因?

這裡是佈局

  #include <LiquidCrystal.h>LiquidCrystal lcd(12,11,5,4,3,2); const int sensorPin = A5;
const float基線Temp = 20.0; void setup(){Serial.begin(9600);} void loop(){int sensorVal = AnalogRead(sensorPin); Serial.print(“ Sensor value:”); Serial.print(sensorVal);浮動電壓=(sensorVal / 1024.0)* 5.0; Serial.print(“,volts:”); Serial.print(電壓); Serial.print(“,攝氏度:”);浮點溫度=(電壓-.5)* 100; Serial.print(溫度); Serial.print(“,度F:”);浮華氏溫度=(溫度* 1.8 + 32); Serial.println(fahrenheit);延遲(1000); lcd.begin(16,2); lcd.print(華氏度); lcd.print(“華氏度”); float averageTemp; if(溫度<基線溫度){lcd.setCursor(0,1); lcd.print(“低於室溫”); }}  
您可能會遇到以下幾個問題中的任何一個:電氣噪聲,電路中負載下的電源下垂(不能將其排除在外),或者電路的功耗(其中大部分最終將以熱量的形式)導致組件加熱。高於環境如果沒有確切的設置細節-原理圖,零件號,**和物理佈局**,您的問題就無法真正回答。
您可以嘗試在它們之間放置一個二極管(如LED)嗎?這樣一來,您就可以消除LCD可能回送的可能性。您還能告訴我們您使用的溫度傳感器嗎?我已經做了一個類似的項目(使用DS18B20),但是它並沒有引起有趣的閱讀……
我已經添加了我的代碼以防萬一,儘管我對此表示懷疑。我還將添加佈局。
佈局在後。
您的“佈局”幾乎無法解釋,但請嘗試將溫度傳感器自己的引線提供給電源,以使其與LCD不共享,並添加一些旁路電容器。
五 答案:
Dmitri
2016-08-22 18:14:10 UTC
view on stackexchange narkive permalink

請勿通過Uno引腳為LCD供電。將LCD電源連接到單獨的電源。

+1,有用的建議b / c TMP 36是一個模擬傳感器,電源噪聲或跌落會影響讀數。為何選擇旁白者@someone?
我沒有投票,但這根本不是一個完整的答案。這只是一般性建議,沒有寫任何理由。它應該解釋為什麼LCD電源應該來自單獨的電源,以及它與問題的關係。
Jot
2017-01-26 00:38:01 UTC
view on stackexchange narkive permalink

對於諸如TMP36的模擬傳感器,Arduino使用5V作為參考。如果5V變化(但TMP36電壓保持不變),則Arduino認為溫度已變化。 AnalogRead()返回的值增加。這就是為什麼降低5V時溫度似乎會升高的原因。

TMP36(帶電阻器)輸出一定的電壓。這與“比例”傳感器不同,它們輸出相對於5V的電壓,而更改為5V對結果沒有影響。 “比例”傳感器例如是惠斯通電橋或帶有電阻的LDR。

對於TMP36,您需要一個良好的電壓基準來讀取實際電壓。可以使用內部參考電壓。也許需要一個額外的分壓器。或使用電源給桶形插孔供電,並讓板載穩壓器產生5V的固定電壓,以作為參考。

在使用數字溫度傳感器(如DS18B20)時,所有這些問題都是

永遠不要將5V連接到AREF。默認情況下,它已經在內部連接到VCC,並且當選擇內部參考電壓時,AREF引腳會改變電壓。在這種情況下,當AREF連接到5V時會創建一個內部快捷方式。無需為AREF添加100nF,因為Arduino Uno已經為AREF和GND提供了100nF。

麵包板可能接觸不良。由於LCD的電流使用相同的GND和+ 5V導線,因此可能會對TMP36產生影響。最好使用克里斯·斯特拉頓已經提到的獨立電線。為了減少噪聲,您可以採用許多AnalogRead()值並使用平均值。對於模擬溫度傳感器,通常的做法是平均多個樣本。

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

我看不到+ 5v-> Aref(和Aref->旁路電容器-> Gnd)。必要時,如果您使用電源電壓作為參考,就像您看起來那樣。

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

嘗試使用9V電池為電路供電。我也遇到了這個問題,當我使用單獨的電源時,它可以正常工作。看來是計算機USB引起的電噪聲。如果您想通過計算機供電,則必須由JRobert發表答案。

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

我遇到了這個問題,在傳感器上放了一個0.1µF的電容器,噪聲大大降低了(降到半度之內,這實際上是一個±滴答聲)。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...