Arduino Nano 温度传感器控制LED显示学号,姓名,温度,高温低温预警

 下面是一个使用Arduino Nano通过温度传感器(DS18B20)控制LED显示学号,姓名,温度和高温预警的完整项目代码。这个项目会在串口监视器上显示信息,并通过LED闪烁来编码显示信息。

所需材料

- Arduino Nano
- DS18B20温度传感器
- 4.7kΩ电阻(用于DS18B20)
- LED
- 220Ω电阻(用于LED)

- 面包板和连接线

-有源蜂鸣器

-1个1千欧的电阻

电路连接

1. 将DS18B20的VDD连接到5V

2. 将DS18B20的GND连接到GND

3. 将DS18B20的DQ连接到D2

4. 将OLED SDA 连接到A4

OLED SCL 连到A5

OLED VCC连到3.3V GND连到GND

5.蜂鸣器VCC连到5V

6.蜂鸣器GND连到GND

7.蜂鸣器I/O连到D3(通过1千欧电阻连接)

模块OArduino引脚
OLED SDAA4
OLED SCLA5
DS18B20 DATAD2
蜂鸣器D3
DS18B20 VCC

3.3V

所有GNDGND
其他模块VCC5V
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define TEMPERATURE_PIN 2
#define BUZZER_PIN 3
#define HIGH_TEMP_ALARM 30.0  // 高温报警阈值(摄氏度)
#define LOW_TEMP_ALARM 10.0   // 低温报警阈值(摄氏度)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// 设置温度传感器
OneWire oneWire(TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);

// 学生信息 - 请替换为您的实际信息
const char* studentID = "20230001";
const char* studentName = "张三";

void setup() {
  Serial.begin(9600);
  
  // 初始化OLED显示屏
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  
  // 初始化温度传感器
  sensors.begin();
  
  // 初始化蜂鸣器引脚
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW);
  
  // 清屏并设置文本属性
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
}

void loop() {
  // 获取温度
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  
  // 温度报警检查
  if(tempC >= HIGH_TEMP_ALARM || tempC <= LOW_TEMP_ALARM) {
    triggerAlarm(tempC);
  } else {
    digitalWrite(BUZZER_PIN, LOW); // 确保蜂鸣器关闭
  }
  
  // 在OLED上显示信息
  displayInfo(tempC);
  
  delay(2000); // 每2秒更新一次
}

void triggerAlarm(float temperature) {
  // 高温报警模式
  if(temperature >= HIGH_TEMP_ALARM) {
    for(int i = 0; i < 3; i++) {
      digitalWrite(BUZZER_PIN, HIGH);
      delay(300);
      digitalWrite(BUZZER_PIN, LOW);
      delay(200);
    }
  } 
  // 低温报警模式
  else if(temperature <= LOW_TEMP_ALARM) {
    for(int i = 0; i < 2; i++) {
      digitalWrite(BUZZER_PIN, HIGH);
      delay(100);
      digitalWrite(BUZZER_PIN, LOW);
      delay(100);
    }
    delay(500);
  }
}

void displayInfo(float tempC) {
  display.clearDisplay();
  
  // 显示学号
  display.setCursor(0, 0);
  display.setTextSize(1);
  display.print("学号: ");
  display.println(studentID);
  
  // 显示姓名
  display.setCursor(0, 16);
  display.print("姓名: ");
  display.println(studentName);
  
  // 显示温度
  display.setCursor(0, 32);
  display.setTextSize(2);
  display.print("温度: ");
  display.print(tempC);
  display.println("C");
  
  // 显示摄氏度符号
  display.setTextSize(1);
  display.setCursor(display.getCursorX(), display.getCursorY()-8);
  display.print("o");
  
  // 显示报警状态
  display.setCursor(0, 50);
  display.setTextSize(1);
  if(tempC >= HIGH_TEMP_ALARM) {
    display.print("高温警报!");
  } else if(tempC <= LOW_TEMP_ALARM) {
    display.print("低温警报!");
  } else {
    display.print("温度正常");
  }
  
  display.display();
}

使用说明

1. 将上述代码上传到Arduino Nano
2. 打开串口监视器(波特率设置为9600)
3. 系统会依次显示:
   - 学号和姓名信息
   - 当前温度值
   - 通过LED闪烁编码显示学号
   - 通过LED闪烁编码显示温度

 LED编码说明

- 学号显示: 每个数字通过短闪烁次数表示(如数字3会闪烁3次),数字间有1秒间隔
- 温度显示: 温度值的每一位通过长闪烁次数表示(如温度25°C会先闪烁2次,停顿1秒,再闪烁5次)

注意:当温度高于30摄氏度时或低于10摄氏度时,会超越阈值,会导致蜂鸣器启动和LED闪烁。

自定义设置

1. 修改`studentID`和`studentName`变量为你的实际学号和姓名
2. 如果需要调整LED闪烁速度,可以修改delay()参数值

实物展示

Frizing展示图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值