Вывод с DS18B20 на LCD дисплей
Задача
- Вывести показания с датчика температуры DS18B20 на LCD дисплей 1602
- Усложнить задачу, вывести изменение температуры с момента перезагрузки
- Вывести температуру с двух датчиков и разницу между ними
Базовые уроки
Подключение
- Дисплей подключается к питанию и шине I2C
- Датчик подключается на любой цифровой пин
- Можно подключить несколько датчиков на один пин
Библиотеки
Программа 1
Для начала просто выведем температуру с датчика на дисплей.
Программа 2
Теперь будем выводить такую строку: “температура с момента запуска программы” -> “текущая температура”. Может быть полезным для исследования изменения температуры. Нам нужно завести переменную для хранения первого значения, назовём её prevT . При запуске программы запросим температуру с датчика, подождём, запишем результат в переменную и будем выводить на дисплей как в предыдущем примере:
Также можно вывести время, прошедшее с момента запуска программы, например в формате часы:секунды.
- У нас есть функция millis() , которая возвращает время работы программы в миллисекундах.
- millis() / 1000 даст нам секунды, запишем в переменную sec .
- Чтобы получить количество секунд в пределах одной минуты, разделим секунды на 60: sec / 60
- Чтобы получить количество минут из общего количества секунд – нужно выполнить операцию остаток от деления, опять же на 60: sec % 60
- Чтобы выводить значения с ведущим нулём (например 03 вместо 3), сделаем простое условие: if (минуты
- Обернём вывод времени в функцию для лучшей читаемости кода
Программа 3
Следующая задача – опросить два термометра и вывести их текущие показания и разность.
- Для начала прошьём пример address_read из библиотеки microDS18B20
- Поочерёдно подключим два датчика, увидим их адреса и скопируем в блокнот
Далее аналогично примеру one_pin_many_sensors записываем полученные адреса в массивы и создаём два датчика. Дальнейшая работа ведётся с двумя датчиками:
Домашнее задание
- Избавиться от delay() , использовать асинхронную конструкцию с millis()
- Выводить на дисплей сообщение, если температура выше заданного “порога”
- Подключить два датчика без адресации (на разные пины)
Полезный пример?
25 Комментариев
Простой проект. Более того, мой первый. Чуть не наложил себе в руки из-за того что сделал всё чётко по инструкции, но на экране ничего не отображалось. Не буду описывать свои ухищрения, дело оказалось в настроечной крутилке позади экрана. Подкрутил и всё высветилось.
Именно поэтому в самом начале статьи дана ссылка на базовый урок по дисплею
Да мне ж быстрее-быстрее начать хотелось)
б….. Ты мой герой. Чуть не прослезился. Спасибо родной.
Мужики, значиться так. С Библиотекой microDS18B20 не хочет работать. Показывает температуру 0 градусов. С onewire (примеры) все хорошо. Причем месяц назад собирал, все работало. Подскажите, где косячу. Единственное что поменялось из условий – ядро и другой пк. Поставил gyvercor. Гугл говорит ставь резистор если 0, понятное дело ставил. Мультиметром тыкался все ок, напруга наваливает, все проходит и все контачит. Библа не отрабатывает.
попробуй на стандартном ядре, вдруг гуверкор слишком быстрый. Микродс18б20 актуальной версии работает отлично, даже на есп8266
microDS18B20 не работает на GyverCore!
починили, нужно обновить ядро и библу
плохой контакт с подтягивающим резистором (у меня тоже такое было)
на уно не работает пробовал перезагружать
поэтому паять надо
Алекс, почему в 1 примере 2 значения?
потому что первое запрос температуры а второе получение
Спасибо за подробный урок! Все сработало вместе с деталями из GyverKit PRO. Единственное, было бы классно для совсем новичков поизучать основы электрических законов. Что такое эти подтягивающие резисторы, почему они располагаются в схеме. Может быть добавлять в уроки принципиальную схему? Или ссылку на какой-то пакет с симуляцией электро деталей?
базовые уроки по электронике будут. А резисторы – требование из документации к датчику =)
Не понимаю в чём проблема. Упираюсь в это..
Скетч использует 5978 байт (19%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 272 байт (13%) динамической памяти, оставляя 1776 байт для локальных переменных. Максимум: 2048 байт.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xad
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xad
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
Неверная библиотека найдена в D:\Arduino\libraries\firmware: нет заголовочных файлов (.h), найденных в D:\Arduino\libraries\firmware
Неверная библиотека найдена в D:\Arduino\libraries\libraries: нет заголовочных файлов (.h), найденных в D:\Arduino\libraries\libraries
Неверная библиотека найдена в D:\Arduino\libraries\schemes: нет заголовочных файлов (.h), найденных в D:\Arduino\libraries\schemes
Неверная библиотека найдена в C:\Users\holod\OneDrive\Документы\Arduino\libraries\firmware: нет заголовочных файлов (.h), найденных в C:\Users\holod\OneDrive\Документы\Arduino\libraries\firmware
Неверная библиотека найдена в C:\Users\holod\OneDrive\Документы\Arduino\libraries\libraries: нет заголовочных файлов (.h), найденных в C:\Users\holod\OneDrive\Документы\Arduino\libraries\libraries
Неверная библиотека найдена в C:\Users\holod\OneDrive\Документы\Arduino\libraries\schemes: нет заголовочных файлов (.h), найденных в C:\Users\holod\OneDrive\Документы\Arduino\libraries\schemes
библиотеку переустанови и проверь точка запятые поставлены везде
У меня такая штука была, при чём на одних картинках было нормально, на других сбой синхронизации (так вроде это называется, где-то нагуглил). Помогло заменой загрузчика на “Old Bootloader”
Alex помоги прикрутить датчик без i2c. СПАСИБО.
Как к этому скетчу прикрутить HC-SR04 чтоб работали в паре
В примере 1 и 2 выводит температуру 2.00 вместо 20.00 или 24.00 в чем проблема?
Разобрался сам, надо использовать библиотеку вместо
Считывание показаний датчиков с помощью Arduino
Легкость, с которой Arduino может получить значения с датчиков, является одной из особенностей, которая делает эти платы такими полезными.
Датчики – это устройства, которые преобразуют физические величины, например, яркость света или температуру, в электрическую величину. Например, термопара выдает напряжение, пропорциональное её температуре. Существует множество различных датчиков:
- датчик освещенности;
- датчик движения;
- датчик температуры;
- датчик магнитного поля;
- датчик силы тяжести;
- датчик влажности;
- датчик вибрации;
- датчик давления;
- датчик электрических полей;
- звуковой датчик;
- датчик положения.
Эти датчики используются в тысячах различных применений, включая промышленность, машины, космонавтику, автомобили, медицину и робототехнику.
Эксперимент 1: датчик расстояния
В этом эксперименте мы будем использовать датчик расстояния Sharp GP2Y0A21YK для управления яркостью светодиода.
Инфракрасный (IR) датчик SHARP
Необходимые комплектующие
- 1 x Arduino Mega2560;
- 1 x макетная плата;
- 1 x светодиод;
- 5 x перемычка;
- 1 x резистор 470 Ом;
- 1 X датчик расстояния Sharp GP2Y0A21YK.
Схема соединений
Датчик расстояния Sharp может обнаруживать объекты на расстояниях от 10 до 80 см. Он излучает импульс инфракрасного света, а затем определяет угол, на котором отражается этот свет. Чем дальше объект, тем ниже выходное напряжение. Если датчик не принимает отраженный свет, то напряжение на его выходе составит 0 В. Если объект находится на расстоянии 10 см или ближе, выходное напряжение будет равно 5 В (в этом эксперименте мы подаем на датчик напряжение питания 5 В).
Выход датчика подключается к аналоговому входу Arduino. Аналого-цифровой преобразователь (ADC) Arduino затем преобразует это напряжение в значение от 0 до 1023. Затем это значение преобразуется в значение от 0 до 255, и это число используется для установки коэффициента заполнения сигнала на широтно-модулированном (ШИМ) выходе, который управляет яркостью светодиода. В результате, чем ближе объект к датчику расстояния, тем ярче светит светодиод.
Видео
Эксперимент 2: датчик температуры
В этом эксперименте Arduino будет измерять температуру с помощью микросхемы датчика LM35. LM35 – это низковольтная микросхема, которая требует питания постоянным напряжением от +4 до +20 вольт. Это идеально, потому что мы можем подключить датчик к выводу +5V на плате Arduino. LM35 имеет всего 3 вывода: два для питания и один для аналогового выхода. Выходной вывод представляет собой аналоговый выход, напряжение на котором линейно пропорционально температуре в градусах Цельсия. Выходной сигнал находится в диапазоне от 0 до 1,5 вольта. Выходное напряжение 9 В соответствует температуре 0°C, и при каждом повышении температуры на один градус оно увеличивается на 10 мВ. Чтобы преобразовать выходное напряжение в температуру, вам необходимо просто разделить выходное напряжение в мВ на 10. Например, если выходное напряжение равно 315 мВ (0,315 В), температура равна 31,5°C.
Назначение выводов микросхемы LM35
Необходимые комплектующие
- 1 x датчик температуры LM35;
- 2 x светодиод;
- 1 x коробок спичек;
- 2 X резистор 470 Ом;
- 1 x Arduino Mega2560;
- 1 x макетная плата;
- 10 x перемычка.
Схема соединений
Выходной вывод LM35 (вывод 2) подключен к выводу A0 Arduino. Код использует функцию analogRead() для преобразования выходного напряжения в число между 0 и 1023. Умножение этого числа на 0.48828125 преобразует его в градусы Цельсия, которые и отображаются в мониторе последовательного порта.
Видео
Как вести мониторинг температуры процессора, видеокарты, диска в режиме реального времени (т.е. видеть датчики с показателями в системном трее)
Я приобрел новый ноутбук и заметил, что он временами начинает сильно шуметь и становится горячим. Как можно не просто посмотреть температуру, а отслеживать ее в режиме реального времени (чтобы можно было увидеть датчики температуры в системном трее, рядом с часами). То есть, чтобы свернуть любую игру по кнопке Windows и тут же увидеть температуру. Можно ли так?
Конечно, можно. Что касается того, что ноутбук шумит и греется — то наверняка это происходит во время запуска различных игр (кодировании видео, работе с графикой и пр.). Кстати, возможно вам поможет также статья, касающаяся высокой температуры и перегрева устройства — https://ocomp.info/greetsya-noutbuk.html
Теперь ближе к теме.
Примерно вот такое окно мы выведем на панель задач || в качестве примера
Отслеживание и мониторинг температуры в режиме реального времени
Вариант 1: HWiNFO64
Окно с информацией о ЦП (HWiNFO64)
Отличная бесплатная утилита для просмотра характеристик компьютера (единственный минус: в ней достаточно много различных показателей, который могут «запутать» начинающих пользователей).
Чем примечательная утилита HWiNFO64 — в ее арсенале есть целый раздел «Sensors» , в котором представлены многие показатели нагрузок и данные с датчиков, которые можно мониторить в режиме реального времени.
Покажу на примере их настройку.
Итак, после запуска программы — откройте меню «Sensors» . 👇
HWiNFO64 — смотрим показания сенсоров
Далее перед вами предстанет большая таблица с различными показателями: температурой, вольтажом, загрузкой ЦП, ОЗУ, таймингом и т.д. Показываются не только текущие значения (см. колонку Current), но и максимальные, минимальные, и средние (Average).
Чтобы вынести нужные показатели в трей — откройте настройки (см. скрин ниже). 👇
Настройки — HWiNFO64 / Кликабельно
Далее перейдите в раздел «System Tray» и выберите нужный показатель (просто выделите эту строчку), поставьте галочку «Show in Tray» (показать в трее).
В своем примере я вынес показатель «CPU (Tcti/Tdie)» —т.е. текущий показатель температуры процессора. Разумеется, вынести можно сразу 5÷10 показателей датчиков в трей.
Выносим нужные показания в трей
Ниже на скрине показано, как будут выглядеть эти датчики (вполне наглядно и удобно 👀). 👇
Температура, загрузка ЦП, ОЗУ и пр. показатели — HWiNFO64
Если вам утилита HWiNFO64 показалась запутанной, рекомендую обратить на AIDA64 (это аналогичное приложение, но не такое нагруженное и на русском языке. ).
Видео-инструкция
Вариант 2: AIDA64
Одна из самых известных утилит для просмотра характеристик компьютера. Что касается температуры — то для ее просмотра достаточно открыть вкладку «Компьютер/Датчики» . См. скрин ниже. 👇
AIDA64 — просмотр температуры (вкладка датчики)
Чтобы вынести нужные датчики в трей: откройте настройки программы, затем перейдите в раздел «Значки датчиков» и отметьте галочками те из них, которые нужны. После сохранения настроек — в трее появятся показания датчиков (пример приведен на скрине ниже). 👇
Датчики с нужными показателями выносятся в трей — AIDA64 / Кликабельно
Если вы хотите, чтобы AIDA64 загружалась автоматически при включении компьютера — то в разделе настроек «Общие» поставьте галочку напротив пункта «Загружать AIDA64 при старте Windows» (таким образом, после включения ПК — вы сразу же сможете мониторить за показаниями температуры).
AIDA64 — загружать утилиту при старте Windows
Вариант 3: что касается игр
Для мониторинга за температурой видеокарты и процессора непосредственно в играх — есть одна замечательная утилита FPS Monitor (аналог: PlayClaw 6).
FPS Monitor
Температура ЦП и видеокарты — утилита FPS Monitor
С помощью этой утилиты можно определить нагрузку на каждое ядро процессора, видеокарту, ОЗУ, сеть. Кроме того, она показывает температуры видеокарты (GPU) и ЦП (CPU) в режиме реального времени. Пример ее работы можете увидеть на фото выше/ниже.
FPS Monitor отлично помогает диагностировать причину тормозов в играх — достаточно посмотреть, на загрузку основных компонентов (кстати, утилита также подсвечивает красным те компоненты, которые уже загружены на 80-100%).
Макс. нагрузка на ядро ЦП
Диагностика. Как узнать из-за чего тормозит игра: из-за процессора, видеокарты или ОЗУ — https://ocomp.info/tormozit-igra-diagnostika.html
Дополнения, как всегда, приветствуются.