下面是一个使用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 SDA | A4 |
| OLED SCL | A5 |
| DS18B20 DATA | D2 |
| 蜂鸣器 | D3 |
| DS18B20 VCC |
3.3V |
| 所有GND | GND |
| 其他模块VCC | 5V |
#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展示图



被折叠的 条评论
为什么被折叠?



