Регулятор температуры на AT90S2313 и DS1621
Существовал у меня электрический обогреватель, но термостат был неисправен. Поэтому очередной задачей для меня стала разработка терморегулятора, тем более, что я хотел давно проверить датчики температуры Dallas.
Таким образом, я разработал это небольшое устройство, которое может контролировать температуру и управлять нагревателем.
В основе устройства лежат микроконтроллер AT90S2313 и цифровой датчик DS1621. Температура отображается на двойной 7-сегментном индикаторе. Две кнопки используются для настройки параметров. Реле рассчитано на большой ток нагревательного элемента.
Индикаторы используются с общим катодом. Сегменты обоих индикаторов соединены между собой, а управление осуществляется с помощью динамической индикации
Обратите внимание, что десятичные точки индикаторов также используются. Более подробно об этом позже
Питание осуществляется переменным напряжением 9В, снимаемым со вторичной (или двух вторичных) обмотки трансформатора. Далее напряжение выпрямляется с помощью диодного моста В1 и сглаживается на конденсаторе С2. Выпрямленное и сглаженное напряжение поступает на вход линейного стабилизатора 5В. Выпрямленное напряжение также является источником питания для выходного реле К1.
Связь микроконтроллера 2313 с цифровым датчиком Dallas DS1621 осуществляется с помощью последовательного интерфейса I2C. Это 2-проводная двунаправленная шина со скоростью до 400 кбит / с.
До 8 датчиков DS1621 могут быть подключены к одной шине I2C.
На самом деле, DS1621 имеет термостатный выход, который можно запрограммировать на определенную температуру, но он не используется в данном приложении.
Реле потребляет ток около 40-50 мА и управляется стандартным транзистором NPN.
Две кнопки используются для установки температуры, при которой реле должно включаться. В существующей программе для управления обогревателем реле включено когда измеренная температура
Как правило, дисплей показывает измеренную температуру. Левую десятичную точку, можно включить или выключить, для того чтобы убедиться что устройство исправно. Правая десятичная точка показывает состояние реле, включено оно или нет.
Короткое нажатие на любую из кнопок вверх или вниз, покажет заданную температуру в течение 1 секунды. Если удерживаются клавиши, то заданная температура будет увеличиваться или уменьшаться соответственно.
Нажатие обеих клавиш одновременно дает доступ к двум параметрам:
Первый параметр — это гистерезиса (в этом режиме индицируется средний сегмент левого индикатора, а на правом отображается значение параметра), который определяет точки переключения реле.
Это позволит избежать дребезжаний реле.
Второй параметр — это скважность управления индикаторами ( в этом режиме светиться нижний сегмент в левом индикаторе, а в правом отображается значение параметра) Этот параметр позволяет определять яркость свечения индикаторов. Оба этих параметра хранятся в EEPROM
Оба этих параметра хранятся в EEPROM.
Способ 2: чтение датчика DS18B20 по адресу
Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, чтобы отличать их друг от друга. В этом методе мы найдем этот адрес для соответствующей маркировки каждого датчика. Затем этот адрес можно использовать для считывания каждого датчика в отдельности.
Поиск адресов датчиков DS18B20s на шине
Следующий скетч обнаруживает все DS18B20, присутствующие на шине, и печатает их адреса на 1-Wire в монитор последовательного порта.
Вы можете подключать только один датчик за раз, чтобы определить его адрес (или последовательно добавлять по одному новому датчику, чтобы вы могли идентифицировать каждый из них по его адресу). Затем вы можете пометить каждый датчик.
Теперь откройте монитор последовательного порта. Вы должны получить что-то подобное:
Рисунок 6 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине
Скопируйте все адреса, так как они нам понадобятся в следующем скетче.
Чтение показаний датчиков DS18B20 по адресу
Следующий скетч считывает температуру датчиков DS18B20 по их адресам. Прежде чем приступить к загрузке скетча, вам нужно изменить адреса датчиков DS18B20 на те, которые вы определили в предыдущем скетче.
Вывод вышеприведенного эскиза выглядит так
Рисунок 7 – Вывод показаний нескольких датчиков DS18B20 методом адреса
Объяснение кода
Как обычно, скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .
Далее мы вводим адреса, которые были найдены ранее для каждого датчика температуры. В нашем случае имеем следующее.
Во фрагменте настройки мы инициализируем библиотеку путем вызова функции и инициализируем последовательную связь с ПК.
В цикле мы просто посылаем команду всем датчикам для преобразования температуры, используя функцию .
Затем, чтобы напечатать температуру датчика, мы вызываем пользовательскую функцию , для которой передается в качестве параметра.
Вышеприведенная функция просто вызывает библиотечные функции для отображения температуры в градусах Цельсия и для отображения температуры в градусах Фаренгейта.
Замена датчика
Чтобы начать ремонт датчика охлаждающей жидкости, нужно определить его расположение. Чаще всего он установлен возле термостата или радиатора, в некоторых случаях бортовой компьютер использует показания с обоих датчиков или одного из них, в зависимости от марки авто и его модели. Например, так датчик расположен в Рено, Шевроле, Ситроен, Шкода, Чери, КИА, Субару Импреза.
Есть несколько способов, которые помогут узнать, что датчик нужно поменять. Если у Вас рабочие все остальные системы в авто, то на приборной панели о неисправности сообщит при помощи светового сигнала. Если в автомобиле компьютерное управление, то определить проблему можно будет при помощи расшифровки комбинации на мониторе.
Фото — датчик температуры на приборной панели
Зависимо от года выпуска машины, а также её марки, многие автолюбители отмечают возрастание затрат топлива у двигателя. Но при этом нужно понимать, что дизель так не определишь (УАЗ, ПАЗ и прочие). Если у Вас механика, а не компьютерная система управления, то вот сигналы того, что нужно купить новый датчик температуры охлаждающей жидкости:
- Автомобиль стал потреблять топлива больше, чем обычно;
- Когда машина заводится, и двигатель достигает своей максимальной температуры, он глохнет;
- Появились проблемы с запуском;
- Из трубы глушителя выходит черный дым.
Рассмотрим, как осуществляется замена датчика температуры охлаждающей жидкости типа G62 на автомобиле Kia Sportage с двигателем объемом 2 литра. Аналогичная инструкция также пригодится при ремонте Acura, BMW, Buick, Chevrolet, Ford, Toyota, Volkswagen, Ваз 2110/2112 инжектор, Рено Гранд Сценик и прочих.
- Чтобы добраться к датчику, Вам нужно снять воздуховод, который охлаждает корпус воздушного фильтра и присоединяется к радиатору при помощи двух болтовых соединений и шланга подачи воздуха. Открутите болты и снимите хомут, аккуратно достаньте всю систему. Отключите от датчика электрические провода, чтобы корректно провести замеры сопротивления. Установите мультиметр на режим омметра и задайте значение в 1000 Ом. Подключите контакты устройства к положительному и отрицательному контактам. Нормальное сопротивление должно быть в пределах 2700 Ом при выключенном моторе. Для проверки датчика при включенном движке, нужно убрать тестер подальше от вращающихся частей авто;
Фото — проверка датчика мультиметром
- Убедившись, что датчику температуры необходим ремонт, нужно отсоединить его от двигателя. Чтобы продолжить снятие, Вы должны предварительно слить антифризную жидкость из радиатора при помощи сливного клапана. После проверить еще раз радиатор и контакты датчика и открутить регулирующий болт как на фото;
Фото — снятие датчика
- Сборка производится в обратной форме. Нужно помнить, что практически основная характеристика датчика температуры охлаждающей жидкости – это материал шайбы. Если шайба медная, то резьбу сигнализатора не нужно обрабатывать герметиком, в противном случае обязательно смажьте устройство.
Фото — медный температурный датчик
Совет от автолюбителей на форумах: если по какой-то причине Вы не можете сразу при поломке понять датчик температуры охлаждающей жидкости, то вместо него можно подключить дополнительный (такое подключение может по показателям температуры немного отличаться от основного).
Проверка датчика температуры является несложной процедурой, с которой может справиться даже начинающий автолюбитель. Датчик температуры охлаждающей жидкости (сокращенно — ДТОЖ) представляет собой термистор, то есть, резистор, изменяющий значение своего внутреннего сопротивления в соответствии с температурой, куда помещен его исполнительный элемент. Чаще всего для этого используют мультиметр (другое название — тестер, «цэшка»), который в состоянии измерять значение электрического сопротивления в цепи.
Библиотека OneWire для работы с DS18B20
DS18B20 использует для обмена информацией с ардуино протокол 1-Wire, для которого уже написана отличная библиотека. Можно и нужно использовать ее, чтобы не реализовывать все функции вручную. Скачать OneWire можно здесь. Для установки библиотеки скачайте архив, распакуйте в папку library вашего каталога Arduino. Подключается библиотека с помощью команды #include <OneWire.h>
Основные команды библиотеки OneWire:
- search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
- reset_search() – производится поиск на первом приборе.
- reset() – выполнение сброса шины перед тем, как связаться с устройством.
- select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
- write(byte) – производится запись байта информации на устройство.
- write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
- read() – чтение байта информации с устройства.
- crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.
Важно правильно настроить режим питания в скетче. Для паразитного питания в строке 65 нужно записать ds.write(0x44, 1);
Для внешнего питания в строке 65 должно быть записано ds.write(0x44).
Write позволяет передать команду на термодатчик. Основные команды, подаваемые в виде битов:
- 0x44 – измерить температуру, записать полученное значение в SRAM.
- 0x4E – запись 3 байта в третий, четвертый и пятый байты SRAM.
- 0xBE – последовательное считывание 9 байт SRAM.
- 0х48 – копирование третьего и четвертого байтов SRAM в EEPROM.
- 0xB8 – копирование информации из EEPROM в третий и четвертый байты SRAM.
- 0xB4 – возвращает тип питания (0 – паразитное, 1 – внешнее).
Заказать ТК
Приборы контроля параметров ВХР (водно-химического режима)
Для обеспечения бесперебойной и надежной работы установок в энергетической отрасли, трубопроводов, турбин, оборудования ядерных реакторов необходим контроль водно-химического режима. Большинство (примерно 50%) неисправностей, аварий и износов оборудования электроэнергетики случаются по причине недостаточного (около 20% от общего объема) автоматического контроля над параметрами водно-химического режима.
Название «Измерительные приборы параметров ВХР » объединяет в себе целый ряд приборов, таких как рH-метр, иономер, кондуктомер, солемер, концентратомер, нитратомер, оксиметр. Семейство приборов, контролирующее водно-химический режим, позволяет ощутимо снизить поломки и существенно повысить ресурс оборудования на производственных объектах электроэнергетики и теплоснабжения. Периодический контроль водно-химического режима необходим и в котельных, для предотвращения шламовых образований и накипи.
Измерительные приборы параметров ВХР имеют конкретную специализацию и могут в зависимости от нее выполнять различные функции, к которым относятся: непрерывный контроль над значениями удельной электропроводности, показателями удельного солесодержания. Содержание в жидкости кислорода, натрия и показатель рН также контролируются измерительными приборами параметров ВХР. Все приборы осуществляющие мониторинг водно-химического режима выполнены с учетом агрессивных сред использования.
Во время измерения и контроля параметров водно-химического режима есть возможность осуществить ввод данных, которые поступают с датчиков для отображения при помощи компьютерной техники в таблицах и графиках. Измерительные приборы параметров ВХР имеют предварительную и аварийную системы сигнализации, которые включаются, когда водно-химический режим соответствующим образом нарушается. Вся информация полученная во время контроля водно-химического режима может сохраняться в течении всей истории контроля, что позволяет совершить полноценный анализ ВХР за любой период.
Описание
В зависимости от конструкции микросхема-датчик температуры Dallas DS18B20 для контроля заданных параметров доступна в 3 формах:
- ТО-92;
- SO (150 mm);
- µSOP.
Расшифруем, где какой вывод микросхемы, и как правильно ее подключить.
Основные особенности и характеристики датчика температуры DS18B20:
- низкий уровень U питания от линии (3–5,5 В);
- высокоэффективная работа с помощью протокола 1-Wire;
- уникальный идентификационный 64-битный код, записываемый в независимую ROM-память устройства для работы большего количества устройств с помощью одной линии связи, что позволяет получать точное положение датчика, температурный режим которого находится выше или ниже запрограммированного уровня;
- широкий диапазон температурных измерений: –55°..+125°С с точностью 0,5°С в диапазоне –10°..+85°С;
- встроенный АЦП позволяет запрограммировать DS18B20 в диапазоне 9–12 разрядов, что позволяет снизить время измерений до 750 мс;
- удобное подключение микросхемы DS18B20 Raspberry Pi;
- для программирования термодатчика достаточно его подключить к любому устройству, работающему под управлением архитектур Arduino, ARM, PIC или AVR.
Принцип работы
Датчик температуры DS1621 для измерения использует принцип нестабильности частоты колебаний при изменении температуры. Для этого в ее состав входят два генератора. Первый имеет высокую температурную стабильность. Его частота соответствует температуре –55 градусов и практически не подвержена изменениям. Частота работы второго генератора, наоборот, изменяется пропорционально температуре. Специальные счетчики импульсов производят подсчет за одинаковый временной интервал и на основе разности, вычисляют значение температуры. Это значение в 9-разрядном двоичном коде доступно пользователю Данные разбиваются на старший и младший байты. Если достаточно целое значение температуры, то можно пользоваться только старшим байтом. Младший байт имеет только один информационный бит LSB, обеспечивающий дискретность 0.5 градуса. Остальные биты младшего байта всегда равны 0.
Описание датчика DS18B20 для Arduino
DS18B20 – это цифровой температурный датчик, обладающий множеством полезных функций. По сути, DS18B20 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.
Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.
Где купить датчик
Влагозащищенный датчик температуры DS18B20 с длиной провода 1 м от надежного магазина | Комплект из 10 микросхем DS18B20 TO92 | Модуль DS18B20 для удобного подключения к Ардуино от Keyestudio |
Беспроводной модуль DS18B20 на ESP8266 ESP-01 ESP-01S для проектов умного дома | Шилд датчика DS18B20 для платы D1 MINI – беспроводная передача данных | Датчик DS18B20 с модулем для подключения к Ардуино |
Особенности цифрового датчика DS18B20
Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
Датчик питается напряжением от 3,3В до 5В.
Можно программно задать максимальную разрешающую способность до 0,0625С, наибольшее разрешение 12 бит.
Присутствует функция тревожного сигнала.
Каждое устройство обладает своим уникальным серийным кодом.
Не требуются дополнительные внешние элементы.
Можно подключить сразу до 127 датчиков к одной линии связи.
Информация передается по протоколу 1-Wire.
Для присоединения к микроконтроллеру нужны только 3 провода.
Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода
Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.
Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.
Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.
Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.
Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.
Описание работы с датчиком температуры DS18B20
DS18B20 — цифровой термометр с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии, так и работать в группе. Все процессы на шине управляются центральным микропроцессором.
Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения.
Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20 установленных на одной шине. Такой принцип позволяет использовать один микропроцессор, чтобы контролировать множество датчиков DS18B20. распределенных по большому участку. Приложения, которые могут извлечь выгоду из этой особенности, включают системы контроля температуры в зданиях, и оборудовании или машинах, а так же контроль и управление температурными процессами.
Принцип работы
Датчик температуры
DS
1621 для измерения использует принцип нестабильности частоты колебаний при изменении температуры. Для этого в ее состав входят два генератора. Первый имеет высокую температурную стабильность. Его частота соответствует температуре –55 градусов и практически не подвержена изменениям. Частота работы второго генератора, наоборот, изменяется пропорционально температуре. Специальные счетчики импульсов производят подсчет за одинаковый временной интервал и на основе разности, вычисляют значение температуры. Это значение в 9-разрядном двоичном коде доступно пользователю Данные разбиваются на старший и младший байты. Если достаточно целое значение температуры, то можно пользоваться только старшим байтом. Младший байт имеет только один информационный бит LSB
, обеспечивающий дискретность 0.5 градуса. Остальные биты младшего байта всегда равны 0.
Микросхема DS
1621 имеет несколько режимов работы. Настройка и отслеживание этих режимов производится с помощью регистра состояний. Имеются следующие доступные биты:
DONE
– флаг окончания преобразования.Устанавливается по завершении преобразования.
THF
– флаг «высокая температура». Устанавливается при превышении порога TH
. Сбрасывается программно или отключением питания.
TLF
— флаг «низкая температура». Устанавливается при температуре меньшей, чем значение порога TL
. Сбрасывается программно или отключением питания.
NVB
– флаг записи данных в энергонезависимую память. Установленный флаг свидетельствует о незавершенности записи. Время записи ячейки составляет ориентировочно 10 мс.
POL
– полярность выхода Tout
. Высокое значение соответствует прямой полярности, низкое – обратной. Бит энергонезависим.
ISHOT
– управление циклом измерений. При высоком логическом уровне измерение выполняется однократно. Данный режим используется в энергосберегающих системах. Низкий логический уровень бита, разрешает выполнение преобразования в непрерывном режиме. Бит энергонезависим.
Работа с DS1621
Команды обмена
Обмен данными с DS1621 производится по стандартному протоколу I2C. Микросхема участвует в нем в качестве slave-устройства. Slave-адрес DS1621 имеет вид 1001ххх, где ххх – состояние линий А0-А2 микросхемы. Для работы с DS1621 используются следующие команды:
22h – «Останов преобразования» — команда производит завершение работы схемы преобразования температуры. Дополнительных данных для работы не требуется.
AAh – «Чтение температуры» — Результатом работы команды являются два байта данных, содержащих значение измеренной температуры.
A1h – «Установка TH» — команда установки верхнего порога срабатывания термостата. После данной команды требуется передача двух байтов значения порога.
A2h — «Установка TL» — команда установки нижнего порога срабатывания термостата. После данной команды требуется передача двух байтов значения порога.
A8h – «чтение температурного счетчика». Команда работает только на чтение и позволяет считать данные счетчика, частота работы которого зависит от температуры.
A9h — «чтение стабильного счетчика». Команда работает только на чтение и позволяет считать данные счетчика, частота работы которого не зависит от температуры.
AСh – «Регистр конфигурации». В зависимости от состояния бита R/W производится запись или чтение регистра конфигурации. Формат используемых данных – байт.
EEh – «Старт счетчика» — команда начала измерения температуры. Дополнительных данных не требуется.
Повышение точности измерений
Датчик температуры DS1621 допускает повышение точности измерения. Для этого пользователю доступны значения счетчиков стабильного N и температурнозависимого N генератора. Зная измеренное значение температуры Tи значения счетчиков можно воспользоваться формулой:
T=T – 0.25 + (N-N)/N
Также желательна калибровка датчика с определением необходимых поправок. Учет этих поправок должен производиться в контроллере.
Режим термостата
Микросхема DS1621 может работать в режиме термостата. Для этого имеется выход Tout, устанавливаемый в зависимости от значения температуры. Пороги включения и выключения выхода задаются значениями в регистрах TH и TL. Полярность выхода устанавливается битом POL регистра конфигурации.
Примеры работы для Arduino
Один датчик
Рассмотрим простой пример — подключения одного датчика.
Сенсор подключается к управляющей плате через один сигнальный пин.
При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.
Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.
При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.
Код программы
Выведем температуру сенсора в Serial-порт.
- simple.ino
-
// библиотека для работы с протоколом 1-Wire #include <OneWire.h> // библиотека для работы с датчиком DS18B20 #include <DallasTemperature.h> // сигнальный провод датчика #define ONE_WIRE_BUS 5 // создаём объект для работы с библиотекой OneWire OneWire oneWire(ONE_WIRE_BUS); // создадим объект для работы с библиотекой DallasTemperature DallasTemperature sensor(&oneWire); void setup(){ // инициализируем работу Serial-порта Serial.begin(9600); // начинаем работу с датчиком sensor.begin(); // устанавливаем разрешение датчика от 9 до 12 бит sensor.setResolution(12); } void loop(){ // переменная для хранения температуры float temperature; // отправляем запрос на измерение температуры sensor.requestTemperatures(); // считываем данные из регистра датчика temperature = sensor.getTempCByIndex(); // выводим температуру в Serial-порт Serial.print("Temp C: "); Serial.println(temperature); // ждём одну секунду delay(1000); }
Серия датчиков
Каждый сенсор DS18B20 хранит в своей памяти уникальный номер, такое решение позволяет подключить несколько датчиков к одному пину.
Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.
Код программы
Просканируем все устройства на шине и выведем температуру каждого сенсора отдельно в Serial-порт.
- multipleSensors.ino
-
// библиотека для работы с протоколом 1-Wire #include <OneWire.h> // библиотека для работы с датчиком DS18B20 #include <DallasTemperature.h> // сигнальный провод датчика #define ONE_WIRE_BUS 5 // создаём объект для работы с библиотекой OneWire OneWire oneWire(ONE_WIRE_BUS); // создадим объект для работы с библиотекой DallasTemperature DallasTemperature sensors(&oneWire); // создаём указатель массив для хранения адресов датчиков DeviceAddress *sensorsUnique; // количество датчиков на шине int countSensors; // функция вывода адреса датчика void printAddress(DeviceAddress deviceAddress){ for (uint8_t i = ; i < 8; i++){ if (deviceAddressi < 16) Serial.print("0"); Serial.print(deviceAddressi, HEX); } } void setup(){ // инициализируем работу Serial-порта Serial.begin(9600); // ожидаем открытия Serial-порта while(!Serial); // начинаем работу с датчиком sensors.begin(); // выполняем поиск устройств на шине countSensors = sensors.getDeviceCount(); Serial.print("Found sensors: "); Serial.println(countSensors); // выделяем память в динамическом массиве под количество обнаруженных сенсоров sensorsUnique = new DeviceAddresscountSensors; // определяем в каком режиме питания подключены сенсоры if (sensors.isParasitePowerMode()) { Serial.println("Mode power is Parasite"); } else { Serial.println("Mode power is Normal"); } // делаем запрос на получение адресов датчиков for (int i = ; i < countSensors; i++) { sensors.getAddress(sensorsUniquei, i); } // выводим полученные адреса for (int i = ; i < countSensors; i++) { Serial.print("Device "); Serial.print(i); Serial.print(" Address: "); printAddress(sensorsUniquei); Serial.println(); } Serial.println(); // устанавливаем разрешение всех датчиков в 12 бит for (int i = ; i < countSensors; i++) { sensors.setResolution(sensorsUniquei, 12); } } void loop(){ // переменная для хранения температуры float temperature10; // отправляем запрос на измерение температуры всех сенсоров sensors.requestTemperatures(); // считываем данные из регистра каждого датчика по очереди for (int i = ; i < countSensors; i++) { temperaturei = sensors.getTempCByIndex(i); } // выводим температуру в Serial-порт по каждому датчику for (int i = ; i < countSensors; i++) { Serial.print("Device "); Serial.print(i); Serial.print(" Temp C: "); Serial.print(temperaturei); Serial.println(); } Serial.println(); // ждём одну секунду delay(1000); }
Основные функциональные способности датчика DS18B20
Термодатчик DS18B20 имеет в своем функционале сразу несколько важнейших команд:
- Навык преобразования температур. (Данная способность может поместить температуру в двух-байтный блок оперативной памяти, после чего датчик переходит в состояние низкого потребления. В этом состоянии DS18B20 считывает код данных и определяет режим состояния процесса);
- Команда записи памяти. (Она дает возможность сохранить три байта данных в оперативной памяти DS18B20. При это, следует уточнить, что ведущий прибор перебрасывает информацию с наименьшего бита);
- Способность чтения памяти. (Применяется для прочтения оперативной памяти памяти прибора. Сброс данных осуществляется с самых наименьших битов или байтов, при этом, в случае необходимости, эта команда способна прекратить сброс данных);
- Команда копирования памяти. (Она помогает скопировать все данные внутренней памяти устройства в блок EEPROM, что приводит к осуществлению в дальнейшем питательной способности системы);
- Способность перезагрузки EEPROM. (Дает возможность регистрам передохнуть, перезагружая все значения на блоках. Кроме того, только после перезагрузки DS18B20 происходит процесс прочтения оперативной памяти памяти прибора и сообщается о ее состоянии).
Как подключить LCD экран от кассового аппарата ЭКР-2102 к Ардуино
Как-то просматривая объявления на OLX, я наткнулся на распродажу старой электроники по очень низким ценам, в итоге было куплено три кассовых аппарата и один модем (на разбор с целью пополнения запасов). Цена вопроса 1500 тенге — примерно 250 рублей.
Разобрав это добро я стал обладателем трех ЖК дисплеев и трех чековых принтеров.
Как подключить дисплей к Ардуино? На плате ЖК дисплея было обнаружено несколько надписей. 5104219-01, 251 12, 251-Т2. Использована микросхема Holtek HT1621B, datasheet был скачан и изучен. К сожалению, тип используемого ЖКИ так и не был опознан.
Прозвонив тестером выводы (6 выводов) я определил их назначение:
1) Data 2) WR 3) CS 4) неизвестно* 5) Gnd 6) Vdd (+5 v) * — подключены резисторы, конденсаторы, поскольку мне нужно было, я и не разбирался глубоко.
Я использовал готовые процедуры для работы с портами HT1621 из Ардуино.
Микросхема HT1621 128 ячеек для ЖКИ, которые организованы следующим образом 32×4 bits, в памяти это 16 байт. В моем ЖКИ были подключены выводы Com0, Com1, Com2 и все сегменты 0-31.
Для определения какой адрес и какой бит отвечает за какой сегмент была написана простая программа, которая перебирает все адреса и все биты. Результаты были записаны в электронную таблицу для последующего анализа. Вот так выглядит заполненная таблица.
Теперь стало ясно, как управлять дисплеем. Так, например, чтобы включить сегменты B и C в первой позиции (самая левая) нужно изменить биты D5 и D6 на 1 по адресу 0x05, остальные биты должны быть оставлены без изменений, поскольку они повлияют на другие позиции.
Если обратить внимание на таблицу, можно увидеть, что для отображения какой — либо цифры нужно поменять несколько битов в нескольких байтах. Эту задачу я решил следующим образом
Были подготовлены несколько таблиц:
b7SegDsp(10 байт) Эта таблица кодирует какие сегменты должны включаться для отображения числа.Первый байт — это кодирование числа 0, последний байт кодирует 9. Старшие семь бит D7-D1 кодируют сегменты A-G, младший D0 — не используется, я его установил в 0, кроме того, это экономит одну операцию битового сдвига влево — я использую маску 0x80 для проверки бита.
HT1621_Screen(16 байт) просто видеопамять, все 16 байтов. Вначале рендерится все в память, а затем все копируется в HT1621.
Ниже код, который выполняет рендеринг в HT1621_Screen, который потом просто выводится в память микросхемы для отображения.
Источник