2016年1月20日 星期三

Arduino DS18S20 + Nokia 5110 溫度計

Arduino  DS18S20 + Nokia 5110 溫度計

   DS18S20是一個數位化的溫度感測器不僅感測溫度還把溫度轉換為數位信號DS18 xx系列最大的特點就是One-Wire(單線傳輸),下指令與資料傳輸都只靠一條線DS18 XX 系列每個IC都有一個唯一的序號可在同一條線上接多個DS18 xx  IC。

  DS18S20Datasheet
https://datasheets.maximintegrated.com/en/ds/DS18S20.pdf

  單線傳輸的資料庫在
https://github.com/PaulStoffregen/OneWire

 DS18 xx 資料庫在這
 https://github.com/milesburton/Arduino-Temperature-Control-Library

這兩個資料庫都是在Github 都直接按旁邊Download ZIP 這樣一次就能下載整個目錄


下載後解壓縮放在 C:\Program Files (x86)\Arduino\libraries

開啟Arduino 填入以下程式碼


/*

這是用 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)

單線傳輸 One-Ware驅動是在這
https://github.com/PaulStoffregen/OneWire
DS18x20 驅動在這這
https://github.com/milesburton/Arduino-Temperature-Control-Library
*/

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

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10    //  DS18S20輸入腳接在Arduino Pin 10
OneWire oneWire(ONE_WIRE_BUS); //啟動單線程式庫
DallasTemperature sensors(&oneWire); //啟動DS18S20程式庫

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);             //設定串列監視埠

  sensors.begin();        // 初始化DS18S20

}

void loop(void)

{

sensors.requestTemperatures();               // DS18S20開始轉換

    Serial.print(sensors.getTempCByIndex(0));    // 串列埠列印重DS18S20取得的資料
    Serial.println(" C");                        // 列印字元 " C " 後換行
    
    display.clearDisplay();                                      // 清除LCD內容
    display.print(sensors.getTempCByIndex(0));                                 // 顯示測到的溫度 度C
    display.println("C");                                        // 顯示字串 "C" 然後換行
    
    Serial.print(DallasTemperature::toFahrenheit(sensors.getTempCByIndex(0)));   //串列埠列印 (度 C 轉換為度 F )
    Serial.println(" F");                                                           // 列印字元 " F " 後換行

     display.print(DallasTemperature::toFahrenheit(sensors.getTempCByIndex(0)));      // 顯示測到的溫度 度F
     display.println("F");                                        // 顯示字串 "F" 然後換行
     display.display();
    
    delay(1000);

}

//

選好版子後上傳序列埠監視視窗就會每1秒輸出一次目前溫度


LCD 也會每秒更新一次溫度

     DS18 S 20 第一腳是GND第3腳是5V第三腳跟第2腳間要接一個4.7K,第二腳是資料輸出要接到Arduino        Pin 10




沒有留言:

張貼留言