1. 程式人生 > 實用技巧 >Arduion學習(三)驅動溫度感測器

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);                           //報警停止
        }
}

沒大膽嘗試怎知不可,未堅持到底如何放棄!