Arduion學習(三)驅動溫度感測器
一、實驗目的:
1、將溫度值列印顯示在串口監視器
2、將溫度值列印顯示在串口,不同溫度段顯示不同的燈光,並在溫度過高或過低時利用蜂鳴器報警。(溫度>=34℃為過高,15~34℃為正常,<=34℃為過低)。
二、實驗準備:
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); //報警停止
}
}
沒大膽嘗試怎知不可,未堅持到底如何放棄!
轉載請註明出處