В предыдущем уроке мы рассмотрели подключения датчика температуры и влажности DHT11 к Arduino. И выяснили что данный датчик не очень точный. Чем же его можно заменить? Одним из распространенных датчиков для измерения температуры являться DS18B20. Рассмотрим в данном уроке варианты подключения датчика, пару примеров программного решения.
Характеристики датчика DS18B20:
Датчик выпускается в открытом корпусе в виде транзистора для измерения температуры воздуха.
Можно купить
датчик в виде
модуля DS18B20.
Распаренный на плате.
Также датчик
DS18B20
продеться в закрытом корпусе для
измерения температуры жидкости.
Для урока нам понадобиться:
Подключаем датчик DS18B20 к Arduino NANO вот по такой схеме.
Подключение датчика DS18B20 к Arduino UNO будет вот таким.
Для написания программы нам понадобиться библиотека OneWire.
Данную библиотеку можно установить из менеджера библиотек или скачать отсюда.
Код ниже будет выводить показание температуры в монитор порта каждую секунду.
<code>#include <OneWire.h> OneWire ds(2); void setup() { Serial.begin(9600); } void loop() { byte i; byte data[12]; byte addr[8]; float celsius; // поиск датчика if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // измерение температуры delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); // начало чтения измеренной температуры //показания температуры из внутренней памяти датчика for ( i = 0; i < 9; i++) { data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; // датчик может быть настроен на разную точность, выясняем её byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс // преобразование показаний в градусы Цельсия celsius = (float)raw / 16.0; Serial.print("t="); Serial.println(celsius); } </code>
Но данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature. Данная библиотека ставиться поверх OneWire. Т.е. для ее роботы должна быть установлена библиотека OneWire.
С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.
Мы рассмотрим более простотой пример.
<code>#include <OneWire.h> #include <DallasTemperature.h> // контакт 2 на Arduino: #define ONE_WIRE_BUS 2 // создаем экземпляр класса OneWire, чтобы с его помощью // общаться с однопроводным устройством OneWire oneWire(ONE_WIRE_BUS); // передаем объект oneWire объекту sensors: DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); // запускаем библиотеку: sensors.begin(); } void loop(void){ // вызываем функцию sensors.requestTemperatures(), // которая приказывает всем устройствам, подключенным к шине sensors.requestTemperatures(); Serial.print("Celsius temperature: "); // в Цельсиях: Serial.print(sensors.getTempCByIndex(0)); Serial.print(" - Fahrenheit temperature: "); // в Фаренгейтах: Serial.println(sensors.getTempFByIndex(0)); delay(1000); } </code>
В данном примере температура выводиться 1 раз в секунду. И при этом выводится температура в Цельсиях и фарингитах.
Как видите данный пример намного меньше и более понятен для новичка.
На одну шину можно подключить до 127 датчиков вот по такой схеме.
С библиотекой DallasTemperature идут примеры которые позволяют получать данные с датчиков при током подключении.
Больше фото тут: Фото для урока 10. Подключаем DS18B20 к Arduino
Предыдущий урок: Урок 9 - Подключаем датчик температуры и влажности DHT11 к Arduino
Понравилась статья? Поделитесь ею с друзьями:
Файлы для скачивания
![]() |
скачать библиотеку OneWire.zip | 21 Kb | 1878 | Скачать |
![]() |
скачать библиотеку DallasTemperature.zip | 32 Kb | 1910 | Скачать |
Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 16 июня , 2019
Читайте также
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.