在Arduino IDE中使用DS18B20、Nano开发板和OLED屏显示学号、姓名与温度

在Arduino IDE中使用DS18B20、Nano开发板和OLED屏显示学号、姓名与温度
 
一、引言
 
在电子制作与嵌入式开发中,实时获取环境数据并直观展示是常见需求。本文将详细介绍如何利用Arduino Nano开发板,结合DS18B20温度传感器与OLED显示屏,实现屏幕显示学号、姓名以及实时温度数据。通过这个项目,读者可以掌握传感器数据采集与OLED显示的基础应用,对Arduino开发有更深入的理解。
 
二、硬件准备
 
1. Arduino Nano开发板:作为整个系统的核心控制器,负责处理传感器数据并控制OLED屏显示。
 
2. DS18B20温度传感器:用于测量环境温度,具有高精度、单总线通信的特点。
 
3. OLED显示屏:这里选用常见的I2C接口的0.96寸OLED屏,用于显示学号、姓名和温度信息。
 
4. 杜邦线:若干,用于连接各个硬件模块。
 
5. 面包板(可选):方便硬件连接,使电路布局更整洁。
 
三、硬件连接
 
1. DS18B20与Arduino Nano连接
 
- VCC:连接到Arduino Nano的5V引脚,为传感器供电。
 
- DQ:连接到Arduino Nano的任意数字引脚,本文中连接到D2引脚,用于数据传输。
 
- GND:连接到Arduino Nano的GND引脚,提供接地。
 
2. OLED显示屏与Arduino Nano连接(I2C接口)
 
- VCC:连接到Arduino Nano的3.3V引脚(部分OLED屏也可接5V,根据具体规格而定)。
 
- GND:连接到Arduino Nano的GND引脚。
 
- SCL:连接到Arduino Nano的A5引脚。
 
- SDA:连接到Arduino Nano的A4引脚。
 
四、软件准备
 
1. 安装Arduino IDE:从Arduino官方网站(https://www.arduino.cc/)下载并安装适合你操作系统的Arduino IDE。
 
2. 安装必要的库
 
- OneWire库:用于与DS18B20温度传感器进行单总线通信。在Arduino IDE中,依次点击“项目”->“加载库”->“管理库”,在搜索框中输入“OneWire”,找到并安装由Paul Stoffregen开发的OneWire库。
 
- DallasTemperature库:基于OneWire库,用于简化DS18B20温度传感器的数据读取操作。同样在库管理器中搜索“DallasTemperature”并安装。
 
- Adafruit SSD1306库:用于控制OLED显示屏。在库管理器中搜索“Adafruit SSD1306”,安装由Adafruit开发的该库。
 
五、代码编写
 
打开Arduino IDE,新建一个项目,将以下代码复制到编辑区域:
 
cpp
  
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// 定义DS18B20连接的引脚
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// 定义OLED显示屏参数
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// 替换为你的学号和姓名
const char* studentID = "你的学号";
const char* studentName = "你的姓名";

void setup() {
  // 初始化串口通信
  Serial.begin(9600);
  
  // 初始化DS18B20传感器
  sensors.begin();
  
  // 初始化OLED显示屏
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("Initializing...");
  display.display();
  delay(2000);
}

void loop() {
  // 读取温度
  sensors.requestTemperatures();
  float temperature = sensors.getTempCByIndex(0);
  
  // 清空OLED显示屏
  display.clearDisplay();
  
  // 显示学号
  display.setCursor(0, 0);
  display.println("学号:");
  display.setCursor(40, 0);
  display.println(studentID);
  
  // 显示姓名
  display.setCursor(0, 10);
  display.println("姓名:");
  display.setCursor(40, 10);
  display.println(studentName);
  
  // 显示温度
  display.setCursor(0, 20);
  display.println("温度:");
  display.setCursor(40, 20);
  display.print(temperature);
  display.println(" ℃");
  
  // 更新OLED显示屏
  display.display();
  
  delay(1000);
}
 
 
请务必将代码中的 studentID 和 studentName 替换为你自己的学号和姓名。
 
六、代码解释
 
1. 头文件引入:通过 #include 指令引入所需的库文件,包括与DS18B20通信的 OneWire 和 DallasTemperature 库,以及控制OLED屏的 Adafruit_GFX 和 Adafruit_SSD1306 库。
 
2. 引脚定义与对象创建:定义DS18B20连接的引脚,并创建 OneWire 和 DallasTemperature 对象用于传感器操作;同时定义OLED显示屏的参数,并创建 Adafruit_SSD1306 对象用于控制显示屏。
 
3.  setup 函数:初始化串口通信、DS18B20传感器和OLED显示屏。在初始化OLED屏时,若失败则通过串口打印错误信息并进入死循环。
 
4.  loop 函数:在循环中,首先读取DS18B20传感器的温度数据,然后清空OLED显示屏,依次显示学号、姓名和温度信息,最后更新OLED显示屏并延时1秒,以便周期性地刷新显示内容。
 
七、上传与测试
 
1. 使用USB数据线将Arduino Nano开发板连接到电脑。
 
2. 在Arduino IDE中,选择正确的开发板型号(Arduino Nano)和对应的端口(在“工具”菜单中选择)。
 
3. 点击上传按钮,将代码上传到Arduino Nano开发板。
 
4. 上传完成后,观察OLED显示屏,应能看到显示的学号、姓名和实时温度数据。同时,也可以通过串口监视器查看调试信息(如果有)。
 
八、总结
 
通过本文的介绍,我们成功地利用Arduino Nano开发板、DS18B20温度传感器和OLED显示屏,实现了学号、姓名和温度数据的显示。这个项目涵盖了传感器数据采集、I2C通信以及OLED显示等Arduino开发中的重要知识点。读者可以在此基础上,进一步扩展功能,例如添加数据记录、报警等功能,探索更多有趣的电子制作项目。
 
希望本文对你的学习和实践有所帮助,如果你在操作过程中遇到任何问题,欢迎在评论区留言交流!

### 连接Arduino NanoSD8266温度传感器OLED显示屏 #### 硬件连接 硬件连接是实现功能的关键步骤。以下是具体的接线方法: - **Arduino NanoSD8266温度传感器** SD8266温度传感器通常通过I2C或模拟信号输出数据。如果使用I2C接口,需要将SD8266的SCLSDA分别连接到Arduino Nano的A5(SCL)A4(SDA)引脚[^3]。同时,确保VCC连接到5V或3.3V(根据传感器规格),GND连接到Nano的GND。 - **Arduino NanoOLED显示屏** OLED显示屏(SSD1306驱动)通过I2C接口连接。将OLED的VCC连接到Nano的5V,GND连接到Nano的GND,SDA连接到Nano的A4,SCL连接到Nano的A5[^3]。 #### 软件配置 在软件层面,需要安装相关的库文件以支持传感器显示屏的功能。 - **库文件安装** 在Arduino IDE中安装以下库: - OneWire库:用于DS18B20通信。 - DallasTemperature库:简化温度读取。 - Adafruit_SSD1306库Adafruit_GFX库:用于OLED显示屏驱动[^3]。 - **代码示例** 下面是一个完整的代码示例,展示如何读取SD8266温度传感器的数据,并在OLED显示屏显示学号姓名温度值。 ```cpp #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <OneWire.h> #include <DallasTemperature.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(2); // Pin 2 on Arduino Nano // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); void setup() { // Initialize the OLED display if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); // Start up the library sensors.begin(); } void loop() { // Request temperature measurement from DS18B20 sensor sensors.requestTemperatures(); float temperature = sensors.getTempCByIndex(0); // Clear the display buffer display.clearDisplay(); // Display student ID and name display.setCursor(0, 0); display.println("Student ID: 123456"); display.println("Name: Zhang San"); // Display temperature display.setCursor(0, 20); display.print("Temperature: "); display.print(temperature); display.println(" C"); // Show the updated display display.display(); delay(1000); // Update every second } ``` #### 注意事项 - 确保SD8266温度传感器的地址正确。如果传感器未被识别,可能需要检查接线或更换引脚[^3]。 - OLED显示屏的I2C地址可能是`0x3C`或`0x3D`,具体取决于硬件版本。如果默认地址无效,请使用扫描工具检测实际地址[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值