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

没大胆尝试怎知不可,未坚持到底如何放弃!
转载请注明出处