Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[经验] 【Arduino】108种传感器系列实验(39)---18B20温度传感器模块

[复制链接]
 楼主| 发表于 2022-4-20 16:06 | 显示全部楼层
程序九:1602LCD屏实时显示摄氏温度与华氏温度值
(1)实验接线示意图(这例18B20接D6)

5.10-31.jpg

 楼主| 发表于 2022-4-20 16:07 | 显示全部楼层
2Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.    程序九:1602LCD屏实时显示摄氏温度与华氏温度值
  4. */

  5. #include <OneWire.h>//导入相关库
  6. #include <DallasTemperature.h>
  7. #include <LiquidCrystal_I2C.h>

  8. const int SENSOR_PIN = 6; // Arduino 引脚连接到 18B20 传感器的 DQ 引脚
  9. OneWire oneWire(SENSOR_PIN);         // 设置一个 oneWire 实例
  10. DallasTemperature sensors(&oneWire); // 将 oneWire 传递给 DallasTemperature 库
  11. LiquidCrystal_I2C lcd(0x27, 16, 2);  // I2C地址0x27,16列2行
  12. float tempCelsius;    // 摄氏温度
  13. float tempFahrenheit; // 华氏温度

  14. void setup(){
  15.   sensors.begin();    //初始化传感器
  16.   lcd.init();         //初始化液晶屏
  17.   lcd.backlight();    // 打开背光
  18. }

  19. void loop(){
  20.   sensors.requestTemperatures();             // 发送命令获取温度
  21.   tempCelsius = sensors.getTempCByIndex(0);  // 读取摄氏温度
  22.   tempFahrenheit = tempCelsius * 9 / 5 + 32; // 将摄氏度转换为华氏度

  23.   lcd.clear();
  24.   lcd.setCursor(0, 0);       // 从第一行开始打印
  25.   lcd.print(tempCelsius);    // 打印摄氏温度
  26.   lcd.print((char)223);      //打印°字符
  27.   lcd.print("C");
  28.   lcd.setCursor(0, 1);       // 从第二行开始打印
  29.   lcd.print(tempFahrenheit); // 打印华氏温度
  30.   lcd.print((char)223);      //打印°字符
  31.   lcd.print("F");

  32.   delay(500);
  33. }
复制代码


 楼主| 发表于 2022-4-20 16:08 | 显示全部楼层
实验场景图

5.10-32.jpg

 楼主| 发表于 2022-4-20 16:08 | 显示全部楼层
5.10-33.jpg
 楼主| 发表于 2022-4-20 16:09 | 显示全部楼层
程序十:从多个 DS18B20 传感器获取温度
1)实验接线示意图

5.10-34.jpg

 楼主| 发表于 2022-4-20 16:10 | 显示全部楼层
2)Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.    程序十:从多个 DS18B20 传感器获取温度
  4. */

  5. #include <OneWire.h>//导入驱动库
  6. #include <DallasTemperature.h>

  7. // 数据线插入 Arduino 上的端口D4
  8. #define ONE_WIRE_BUS 4
  9. // 设置一个 oneWire 实例以与任何 OneWire 设备
  10. //进行通信(不仅仅是 Maxim/Dallas 温度 IC)
  11. OneWire oneWire(ONE_WIRE_BUS);

  12. // 将我们的 oneWire 引用传递给达拉斯温度。
  13. DallasTemperature sensors(&oneWire);

  14. int numberOfDevices; //找到的温度设备数量
  15. // 我们将使用这个变量来存储找到的设备地址
  16. DeviceAddress tempDeviceAddress;

  17. void setup(void) {
  18.   // 启动串口
  19.   Serial.begin(9600);

  20.   // 启动库
  21.   sensors.begin();

  22.   /// 获取网络上的设备数量
  23.   numberOfDevices = sensors.getDeviceCount();

  24.   // 定位总线上的设备
  25.   Serial.print("Locating devices...");
  26.   Serial.print("Found ");
  27.   Serial.print(numberOfDevices, DEC);
  28.   Serial.println(" devices.");

  29.   // 循环遍历每个设备,打印出地址
  30.   for (int i = 0; i < numberOfDevices; i++) {
  31.     //在线路中搜索地址
  32.     if (sensors.getAddress(tempDeviceAddress, i)) {
  33.       Serial.print("Found device ");
  34.       Serial.print(i, DEC);
  35.       Serial.print(" with address: ");
  36.       printAddress(tempDeviceAddress);
  37.       Serial.println();
  38.     } else {
  39.       Serial.print("Found ghost device at ");
  40.       Serial.print(i, DEC);
  41.       Serial.print(" but could not detect address. Check power and cabling");
  42.     }
  43.   }
  44. }

  45. void loop(void) {
  46.   sensors.requestTemperatures(); // 发送命令获取温度
  47.   //循环遍历每个设备,打印出温度数据
  48.   for (int i = 0; i < numberOfDevices; i++) {
  49.     //在线路中搜索地址
  50.     if (sensors.getAddress(tempDeviceAddress, i)) {

  51.       // 输出设备ID
  52.       Serial.print("Temperature for device: ");
  53.       Serial.println(i, DEC);

  54.       // 打印数据
  55.       float tempC = sensors.getTempC(tempDeviceAddress);
  56.       Serial.print("Temp C: ");
  57.       Serial.print(tempC);
  58.       Serial.print(" Temp F: ");
  59.       // 将 摄氏温度转换为华氏温度
  60.       Serial.println(DallasTemperature::toFahrenheit(tempC));
  61.     }
  62.   }
  63.   delay(5000);
  64. }

  65. // 打印设备地址的函数
  66. void printAddress(DeviceAddress deviceAddress) {
  67.   for (uint8_t i = 0; i < 8; i++) {
  68.     if (deviceAddress[i] < 16) Serial.print("0");
  69.     Serial.print(deviceAddress[i], HEX);
  70.   }
  71. }
复制代码


 楼主| 发表于 2022-4-20 16:10 | 显示全部楼层
实验串口返回情况(发现3个设备,显示不同温度

5.10-35.jpg

 楼主| 发表于 2022-4-20 16:11 | 显示全部楼层
实验场景图

5.10-36.jpg

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-7 01:12 , Processed in 0.081871 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表