Датчик температуры DS18B20 и LCD дисплей
В этой статье, доработаю показанный ранее пример с датчиком DS18B20+, вывод температуры через последовательный монитор порта, является полезным, но мало практичным. В примере будем выводить температуру на LCD-дисплей работающий по протоколу I2C.
Датчик температуры DS18B20 и LCD дисплей
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► LCD-дисплей 1602A (2×16, 5V, Синий) x 1 шт.
► Интерфейсный модуль IIC, I2C, TWI для LCD x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Датчик температуры DS18b20+ x 1 шт.
► Резистор 4.7 кОм x 1 шт.
► Макетная плата MB-102 (Breadboard) x 1 шт.
Подключение:
Для вывода температуры на LCD дисплей с датчика DS18b20, будем использовать плату Arduino UNO. Собираем схему, которая показана ниже, для удобства дополнительно нарисовал таблицу подключения.
Таблица подключение
В примере используется три дополнительных библиотеки LiquidCrystal_I2C, DallasTempature и OneWire, необходимо скачать их и установить, без них скетч не заработает. Далее, скачиванием скетч и запускаем среду разработки IDE, если все правильно сделали, на дисплее отобразится температура.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/* Тестировалось на Arduino IDE 1.6.12 Дата тестирования 23.12.2016г. */ #include <Wire.h> // Подключаем библиотеку Wire #include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #define DS18B20 2 // Указываем, к какому выводу подключена DQ byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); void setup() { sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(2,0); // Устанавливаем курсор на 1 строку, ячейка 2 lcd.print("TEMP"); // Выводим текст lcd.setCursor(0,1); // Устанавливаем курсор на 2 строку, ячейка 2 lcd.print("www.robotchip.ru"); // Выводим текст } void loop() { lcd.createChar(1, simvol); // Создаем символ под номером 1 sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(7,0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(sensors.getTempCByIndex(0)); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); // Выводим текст } |
Описание команд, можно посмотреть в комментариях, в скетч добавлен символ градуса.
Ссылки
Скачать библиотеку DallasTemperature
Скачать библиотеку OneWire v.2.2
Скачать библиотеку LiquidCrystal_I2C
Документация к LCD1602A
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчик температуры DS18b20
LCD-дисплей 1602A
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчик температуры DS18b20
LCD-дисплей 1602A
Символ «градуса» можно не создавать. Он есть в синем дисплее.
Спасибо, да и правда есть такой символ.
lcd.write(223);
подскажите пожалуйста в чём проблема? скетч загрузил, подключил. на экране информация:
TEMP -127. C
http://www.rchip.ru
температура не изменяется. датчик DS18B20 модуль
На картинке вверху есть некоторая путаница по полярности подключения датчика. Ориентируйтесь строго на даташит DS18B20. Вчера собрал эту схему и пока не разобрался с распиновкой, тоже показывало -127.
Братцы, если есть возможность, помогите плиз в такой проблеме.
Решил я тут недавно слегка автоматизировать процесс самогоноварения.))) чем давно и плодотворно занимаюсь. точнее, не то чтобы автоматизировать, а обезопасить процесс в случае всяко-разных нештатных ситуаций. а именно: 1. отключение подачи воды на холодильник самогонного аппарата , 2. заполнение готовым продуктом «до верха» емкости, в которую он льется. имеется: Arduino UNO, реле, датчик температуры ds18b20, датчик уровня жидкости, жк-дисплей, аналогичный рассмотренному в примере выше. вопрос в следующем. поскольку я кодить давно разучился, да и кодил исключительно на машинах типа Искра-1256 (прошу не ржать!), подскажите, как прикрутить к коду приведенного примера: а.)управление на отключение нагрева перегонного куда (индукционная плита) посредством управляющего реле, выдача звукового сигнала, когда емкость с самогоном (ням-ням) заполнена доверху, т.е. датчик уровня жидкости отсигналил об этом.
Буду очень признателен, если поможете, добрые люди.))
Тоже хочу сделать подобное чудо.
+ хочу сделать полную автономку. т.е. регулировку температуры атоматом.
Ктож скоро казенку пить будет? Тоже варю-гоню. Ни как у меня компиляция не проходит. Библиотеки DallasTemperature и LiquidCrystal_I2C не видит.
Добрый день, проверьте расположение библиотек DallasTemperature и LiquidCrystal_I2C в каталоге C:\Users\ваш профиль\Documents\Arduino\libraries
Спасибо. Все проверил. Помогла переустановка программы. Сейчас пишет ошибка кампиляции для платы WAWCAT. Плату я уже удачно спалил. Сейчас заказал рекомендованую в теме. Но при выборе любой платы в программе ошибка не проходит.
Всё проверил. Сначала не работало, а потом понял, что на схеме резистор не в питание вставлен, а в землю 🙂
Спасибо за статью, очень помог!
Добрый день, только начал изучать программирование, будьте добры, скажите в какой среде разработки вы работаете?
По дизайну программы сориентироваться не получается
Здравствуйте, среда разработки Arduino IDE, скачать можно бесплатно с официального сайта arduino.cc
Спасибо, очень вам признателен за столь быстрый ответ =)
Сергей, можно ли с вами как-то связаться?
Или, возможно, в обсуждении к данной статье удастся решить следующих вопрос — при загрузке программы в Arduino Nano высвечивается следующая ошибка:
«avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x3a»
И так до десяти попыток, потом загрузка прерывается, значение после «resp=0x» часто меняется
Возможно вы знаете как это исправить? Все параметры и порты указал в IDE правильно, пробовал выставлять разные программаторы в инструментах, но результат один
Хочу прошить ARDUINO NANO V3 AVR ATM328P-20AU CH340
Разумеется, буду безумно вам признателен, если поможете решить мою проблему
Добрый день, пищите на почту или в вайбер, телефон на странице контакты.
Нашёл решение проблемы, оказалось, что для записи программы в клон Нано необходимо установить следующий Драйвер — CH341SER, без него Arduino IDE работает только с оригинальными платами =)
Здравствуйте, Сергей. Вы занимаетесь программированием на МК? Меня интересует схема 2-х канального термометра на МК. Я ищу любителя-программиста, с которым я бы смог воплотить в жизнь свою задумку. Немного расширить функционал термометра, использовать более крупный ЖК дисплей, добавить некоторые модуля. Если в принципе согласны, то можно пообщаться далее. А заодно скажите пожалуйста почту для общения и передачи файлов.
Здравствуйте, Александр.
Напишите мне на почту info@robotchip.ru
Здравствуйте, Сергей! Непонятно, получили ли вы от меня сообщение по поводу 2-х канального термометра на МК?Если получили и вас это не заинтересовало, отпишитесь пожалуйста, я тогда буду искать дальше.
Можно ли сделать этот проект с датчиком DHT11 и со всеми 16 контактами дисплея.
Можно
Подскажите пожалуйста как правильно выводить температуру без цифр после точки (целое значение без десятых)?
Здравствуйте, можно создать переменную с типом данных int
пример:
int temp = sensors.getTempCByIndex(0);
lcd.print(temp);
Спасибо! Все получилось 🙂
Здравствуйте! Может подскажете, ну или помочь. А можно ли во второй строке дисплея вывести адрес подключаемого датчика? Хочу собрать устройство для тестирования датчиков Dallas.
Добрый день! Только начал заниматься ардуино. Хотел сделать этот проект, но при проверке программы возникла ошибка:
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
Может кто-то подсказать как решить?