2016年1月7日 星期四

Arduino + LM35 溫度計 Nokia 5110 LCD 顯示

Arduino + LM35 溫度計 Nokia 5110 LCD 顯示 

         LM35 是類比溫度感測IC,使用5V電源 溫度每增加 1度C輸出增加 10mV,在25度C時輸出是250mV,是一個很方便的感溫零件.
      Arduino ADC是10位元,也就是會把電壓分時1024等份,而這1024等份怎麼分就是用基準電壓在分,Arduino 在沒指定的狀況下基準是5V,所以每位元電表的電壓是5/1024=0.00488V,LM35每度是0.01V 所以LM35經Arduino轉換後能得到的解析度約為0.5度,如果基準電壓降為2.5V那Arduino轉換後解析度會是0.25度C,但是Arduino並無2.5V的電源,所以就用Aeduino上有的3.3V做為基準,3.3V為基準能得到的解析度為 3.3/1024=0.00322V約為0.33度C.

  這回一樣是用 Noika 5510 LCD 做演示.

程式碼


/*

這是用 Adafruit LCD 驅動程式是在 Adafruit 下載
https://www.adafruit.com/products/338
雖然是 BSD License 還是呼籲多買 Adafruit 的產品
Adafruit 老闆是美女喔!!

LCD 腳位定義

pin 7 - Serial clock out (SCLK)
pin 6 - Serial data out (DIN)
pin 5 - Data/Command select (D/C)
pin 4 - LCD chip select (CS)
pin 3 - LCD reset (RST)


*/

#include "Adafruit_GFX.h"                                           //LCM 定義程式!!這三個要擺一起!!!
#include "Adafruit_PCD8544.h"
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);        //LCD 的腳位定義

#define aref_voltage 3.3                //指定基準電壓
int tempPin = 0;                        //指定LM35輸入到Arduino的腳位                             
int tempReading;      
void setup(void) {

  display.begin();                 //這是 Adafruit_PCD8544  Library 定義的
  display.setContrast(60);         //LCD 對比
  delay(1000);
  display.clearDisplay();             // 清除LCD內容
  display.setTextSize(2);            // 設定LCD自形大小
  display.setTextColor(BLACK);        //定義LCD顏色顏色

  Serial.begin(9600);   
  analogReference(EXTERNAL);                
}
void loop(void) {
  tempReading = analogRead(tempPin);           //讀電LM35輸出壓值
   float voltage = tempReading * aref_voltage;  //基準電壓與ADC後的值轉換
   voltage /= 1024.0; 
    float temperatureC = voltage  * 100 ;  // 把電壓轉成溫度,每10mV 1度
                                              
    Serial.print(temperatureC); Serial.println(" degrees C");     //串列埠輸出溫度C
    display.clearDisplay();                                      // 清除LCD內容
    display.print(temperatureC);                                 // 顯示測到的溫度 度C
    display.println("C");                                        // 顯示字串 "C" 然後換行
  
     float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;      //將度C轉成度F
     Serial.print(temperatureF); Serial.println(" degrees F");      //串列埠輸出溫度C
     display.print(temperatureF);                                 // 顯示測到的溫度 度F
     display.println("F");                                        // 顯示字串 "F" 然後換行
     display.display();
     
  delay(1000);
}


上傳後 串列埠也會有輸出




沒有留言:

張貼留言