Arduion學習(三)驅動溫度感測器
一、實驗目的:
1、將溫度值列印顯示在串列埠監視器
1、將溫度值列印顯示在串列埠,不同溫度段顯示不同的燈光,並在溫度過高或過低時利用蜂鳴器報警。
二、實驗準備:
1、查閱相關資料,瞭解本次實驗所用到的引腳、介面的相關知識。
DS18B20引腳定義:
(1)DQ為數字訊號輸入/輸出端;
(2)GND為電源地;
(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
2、準備Arduion板(本次實驗所用到的型號為mega2560)、溫度感測器DS18B20、杜邦公母線、三色發光二極體、無源蜂鳴器
三、實驗操作:
(一)1.0版本
1、將溫度感測器的DQ引腳用杜邦線與Arduion板上的數字IO介面2相連,VDD和GND引腳分別與Arduion上的5V、GND介面相連。
2、將Arduion連上主機,開啟IDE,在工具選項卡中設定對應的開發板(本次選擇mega2560)和一個埠
3、驗證程式碼並上傳程式碼至Arduion
(二)2.0版本
1、將溫度感測器的DQ引腳用杜邦線與Arduion板上的數字IO介面2相連,VDD和GND引腳分別與Arduion上的5V、GND介面相連。
2、將三色發光二極體的R、G、B引腳用杜邦線分別與Arduion板上的數字IO介面11、12、13相連,GND引腳連線Arduion上的GND介面。
3、將無源蜂鳴器的I/O引腳用杜邦線與Arduion板上的數字IO介面7相連,VDD和GND引腳分別與Arduion上的5V、GND介面相連。
4、將Arduion連上主機,開啟IDE,在工具選項卡中設定對應的開發板(本次選擇mega2560)和一個埠
5、驗證程式碼並上傳程式碼至Arduion
四、以下為我本次實驗的執行程式碼:
1.0版本:
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // 定義DS18B20資料口連線arduino的 2 腳 OneWire oneWire(ONE_WIRE_BUS); // 初始連線在單總線上的單匯流排裝置 DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); // 設定串列埠通訊波特率 sensors.begin(); // 初始庫 } void loop(void) { sensors.requestTemperatures(); // 傳送命令獲取溫度 Serial.print("溫度值:"); //串列埠監視器列印溫度值 Serial.print(sensors.getTempCByIndex(0)); Serial.println("℃"); delay(10); }
溫度感測器Plus程式碼:
2.0版本
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // 定義DS18B20資料口連線arduino的 2 腳 OneWire oneWire(ONE_WIRE_BUS); // 初始連線在單總線上的單匯流排裝置 DallasTemperature sensors(&oneWire); int buzzer=7; int redled = 11; int greenled =12; int blueled = 13; void setup() { Serial.begin(9600); // 設定串列埠通訊波特率 sensors.begin(); // 初始庫 pinMode(buzzer, OUTPUT); //設定數字IO腳模式,OUTPUT為輸出 pinMode(redled, OUTPUT); pinMode(greenled, OUTPUT); pinMode(blueled, OUTPUT); } void loop(void) { sensors.requestTemperatures(); //傳送命令獲取溫度 Serial.print("溫度值:"); //串列埠列印"溫度值:" Serial.print(sensors.getTempCByIndex(0)); //串列埠列印溫度 Serial.println("℃"); //串列埠列印攝氏度 delay(10); //等待10毫秒以觀察資料 float temp = sensors.getTempCByIndex(0); //指定溫度為一個浮點數資料型別 if(temp>=15.0) //如果溫度大於15攝氏度,進入for迴圈 { if(temp>=34.0) { int i=2000; digitalWrite(redled, HIGH); //紅燈亮起,溫度過高報警 tone(buzzer,i); //在四號埠輸出頻率 delay(1000); //該頻率維持1000毫秒 digitalWrite(redled, LOW); //紅燈熄滅,報警結束 noTone(7); //報警停止 }else { digitalWrite(greenled, HIGH); //綠燈亮起 delay(1000); //等待1000毫秒 digitalWrite(greenled, LOW); //綠燈熄滅 delay(1000); //等待1000毫秒 } }else{ int i=1000; digitalWrite(blueled, HIGH); //藍燈亮起,溫度過低報警 tone(buzzer,i); //在四號埠輸出頻率 delay(1000); //該頻率維持1000毫秒 digitalWrite(blueled, LOW); //藍燈熄滅,報警結束 noTone(7); //報警停止 } }
沒大膽嘗試怎知不可,未堅持到底如何放棄!