Один раз мы уже реализовали проект термометра на основе датчика температуры DS18B20. Сегодня мы сделаем термометр на основе этого датчика другим способом, разберемся с DS18B20 и используем несколько дополнительных библиотек.
Мы сделаем LCD-термометр или, как вариант, Serial-термометр (напечатает данные о температуре на последовательном мониторе Arduino IDE) на основе микроконтроллера Ардуино и цифрового датчика DS18B20, макетов, перемычек. Таким образом, вы сможете измерять температуру воздуха, жидкости, например, воды и температуру земли.
Информация о сенсоре DS18B20
DS18B20 - это цифровой температурный датчик с интерфейсом 1-Wire от Maxim IC. На выходе мы получаем информацию в Цельсиях с точностью от 9 до 12 бит, от -55 до 125 (+/- 0,5). Каждый датчик имеет уникальный 64-разрядный серийный номер, что позволяет использовать огромное количество датчиков на одной шине данных.
Особенности:
- Для уникального интерфейса 1-Wire® требуется только один порт для связи.
- Каждое устройство имеет уникальный 64-битный последовательный код, хранящийся в ПЗУ.
- Многоточечная возможность упрощает использование распределенных температурных зондов.
- Не требует внешних компонентов.
- Может питаться от линии передачи данных.
- Диапазон мощности от 3,0 до 5,5 В.
- Измеряет температуру от -55°C до + 125°C (от -67 °F до + 257 °F) ± 0,5°C от -10°C до + 85°C.
- Разрешение термометра выбирается пользователем от 9 до 12 бит.
- Преобразует температуру в 12-битное цифровую переменную в 750 мс (макс.).
- Определяемые пользователем энергонезависимые (NV) настройки сигнализации.
- Команда поиска по тревоге идентифицирует и адресует устройства, температура которых находится за пределами запрограммированных пределов (состояние аварийной сигнализации).
- Применяется в термостатических устройствах, промышленных системах, потребительских товарах, термометрах или в любых термических чувствительных системах.
Комплектующие
Чтобы сделать термометр, вам понадобятся следующие детали:
- Плата Arduino (UNO, DUE, Micro и т.п.);
- Датчик DS18B20 (водонепроницаемый или нет);
- Резистор 4.7К (в некоторых магазинах продается датчик с резистором 4,7 тыс.);
- ЖК-дисплей 16x2 с шиной I2C;
- Макет;
- Перемычки.
Из программного обеспечения нужно иметь установленную Arduino IDE.
Библиотеки
Прежде чем вы начнете делать термометр, загрузите и распакуйте следующие библиотеки для Arduino в:
/Progam Files (x86)/Arduino/Libraries (по умолчанию):
- 1- Wire шина;
- Dallas Temperature (делает все вычисления и другие вещи);
- Liquid Crystal I2C.
Все библиотеки вы можете скачать по ссылкам выше или на нашем сайте в разделе Библиотеки.
Термометр через последовательный монитор
Чтобы отобразить данные на последовательном мониторе, подключите датчик DS18B20 к Arduino, используя перемычки и макет, и не забудьте подключить или припаять резистор 4.7k между контактом 2 и 3 датчика.
Затем скачайте, откройте и загрузите файл .ino, который называется - DS18B20_Serial, ниже.
Если все в порядке, вы должны увидеть измеренную температуру на серийном мониторе Arduino IDE.
#include <OneWire.h> #include <DallasTemperature.h> // Провод данных подключен к контакту 2 на Arduino #define ONE_WIRE_BUS 2 // Настройка oneWire для связи с любыми устройствами OneWire // (не только Maxim/Dallas температурные IC) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup(void) { // Старт серийного порта Serial.begin(9600); Serial.println("Dallas Temperature IC демо"); // Запуск библиотеки sensors.begin(); } void loop(void) { // запрашиваем sensor.requestTemperatures() для получения глобальной температуры // запрос всех устройств на шине Serial.print(" Запрашиваем температуру..."); sensors.requestTemperatures(); // Отправляем команды для получения температуры Serial.println("DONE"); Serial.print("Температура: "); Serial.print(sensors.getTempCByIndex(0)); // Почему "byIndex"? // У вас может быть несколько IC на одной шине. // 0 относится к первой IC delay(1000); }
Термометр с ЖК-дисплеем
Если вы не хотите измерять температуру через последовательный монитор, то этот шаг для вас.
Подключите ЖК-дисплей I2C к контактам UNO:
- A4 (SDA),
- A5 (SCL),
- к цифровому выходу 2.
Затем скачайте и загрузите файл .ino, который называется - DS18B20_I2C_LCD. Если все в порядке, вы увидите показания температуры на дисплее.
#include <OneWire.h> #include <DallasTemperature.h>// #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); #define ONE_WIRE_BUS 2 // Настройте oneWire для связи с любыми устройствами OneWire (а не только с микросхемами температуры Maxim / Dallas) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { lcd.init(); lcd.backlight(); sensors.begin(); } void loop() { sensors.requestTemperatures(); lcd.setCursor(0, 0); lcd.print(sensors.getTempCByIndex(0)); lcd.print(" *C"); delay(3000); }
На этом пока всё. Хороших вам проектов.
2 апреля 2021 в 17:43
Здравствуйте! полная ерунда творится с датчиками даллас 18В20, могу вас просить помочь разобраться? почему то даже на простblх примерах не работает