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。
沒有留言:
張貼留言