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

沒大膽嘗試怎知不可,未堅持到底如何放棄!
轉載請註明出處