» »

Электросхемы в помощниках. Проекты Самодельный барометр на микроконтроллере

05.07.2023

По просьбам тех, кто собрал предыдущую конструкцию барометра на PIC 16F684 и датчике давления BMP180, публикуем статью (продолжение). Данное устройство позволяет отображать одновременно и температуру и давление. Для этого в конструкции был применен индикатор на базе микросхемы MAX7219 которая позволяет работать с матрицей 8Х7, применение данного индикатора позволило сократить число задействованных портов микропроцессора.

Датчик температуры применен самый распространенный — 18b20, который имеет трехвыводную конструкцию. DS18B20 (Programmable Resolution 1-Wire® Digital Thermometer). Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.

Схема устройства показана на рисунке 1.

Индикатор MAX7219 приобретался на Aliexpress. Но данный индикатор продается уже в готовом виде и вам остается только 5ю проводниками его подключить к запрограммированной плате.

Принципиальная схема индикатора показана на рисунке 2, внизу показано фото такого индикатора.

Внешний вид собранного устройства показан на фото ниже.

Отрицательные температуры отображаются, минус перед числом и градусы отображаются без десятых долей.

Скачать рисунок печатной платы, схему и прошивку.

Схема барометра для измерения атмосферного давления построена с использованием датчика давления MPXHG6115. Сам датчик обеспечивает на его выходе напряжение, пропорциональное давлению воздуха. Рабочий диапазон перекрывает атмосферное давление (90 - 110 кПа) на уровне моря. Минимальное рабочее давление воздуха датчика 15 кПа, что позволяет использовать его даже в горной области. Для этого, правда, нужно пересчитать резисторы на его плате. Для атмосферного давления в районе недалеко от уровня моря диапазон выходных напряжений датчика составляет 3.625 - 4.55 вольт. В аналоговой части схемы (затененная на схеме) на выходе формируется линейное напряжение диапазона 0 - 5 В, которое находится в нормальном диапазоне микроконтроллерного АЦП. Сопоставление выполняется с помощью двух ОУ. Левая (на схеме) обеспечивает оптимальное сопротивление нагрузки для датчика (51 кОм) и инвертирует опорноео напряжение около 2.5 В. Опорное напряжение получается с помощью делителя напряжения, состоящего из двух резисторов 11.5 к (точность 1%). Правая ОУ обеспечивает необходимое масштабирование напряжения и начальную установку в 0. Рекомендуем использовать сдвоенный OPA2374.

Технические характеристики

  • Диапазон измерений: 700 - 800 мм Рт.ст
  • Напряжение питания: 5 вольт
  • Ток потребления: 40 мА

Датчик масштабирования и аналоговый усилитель собран на небольшой печатной плате. Он подключается к основной плате с помощью 3-х проводов. Тест схема состоит из микроконтроллера и ЖК-модуль с интерфейсом, смонтированный на ее задней стороне. Интерфейсная карта устанавливает все связи с PIC, используя только два провода и его программное обеспечение реализует упрощенную версию стандартного интерфейса I2C. Программа контроллера PIC16F84 присваивает ее ввод пин-RC3 на вход АЦП. Он просто вычисляет давление в зависимости от входного напряжения в соответствии с формулой, преобразует его в двоично-десятичный код и выдает на экран.

Помню, когда совсем маленьким был, то мой дед никогда не слушал по радио прогноз погоды, он всегда смотрел на свой старенький стрелочный барометр, стрелок у него было как минимум две (точно не помню, ведь столько лет прошло), и никогда не ошибался!

Вот и я давно хотел у себя в хозяйстве иметь барометр, да все никак, то дорого, то не попадался, то еще какие-то препятствия. Но вот начал заниматься микроконтроллерами и стало возможным сделать барометр самому.
Поднакопил я в заначке от любимой жены деньжат и приобрел датчики, MPX4115AP(датчик давления) и HIH-4000-004(датчик влажности), почему именно эти? Да просто, потому что в интернете именно по ним есть много информации, да и в продаже они были, хотя и дорогие. Львиная доля стоимости всего устройства пришлась именно на них.
Оба датчика аналоговые, а это значит, что барометр должен представлять из себя двухвходовый вольтметр, с корректировкой показаний АЦП в мм.рт.ст. (миллиметры ртутного столба), и % (проценты влажности воздуха). Сам пересчет показаний АЦП в мм.рт.ст. , и % я добросовестно взял из статьи «Небольшая метеостанция своими руками» - http://www.avispro.com.ua/doc.php?id=1172

Но представленная в статье конструкция показалась мне избыточной, а мне хотелось сделать проще и обязательно на светодиодных индикаторах, так как они светятся и имеют большой размер, а значит, их будет хорошо видно издалека, и при любом освещении, да и ток потребляют они гораздо меньше чем подсветка ЖКИ.
Я применил индикатор ВА56-12SRWA(светодиодный семисегментный, 3 разряда ОА ), 2 штуки. Они сверхяркие, т.е. можно дополнительно снизить потребляемый ток.

О том, как использовать значения атмосферного давления и влажности воздуха в предсказании погоды можно прочитать, например, здесь - http://www.meteopost.com/info/Pressure/

Вот такая в результате получилась схема:

Разводка платы такая:

На печатной плате общая шина - цифровая и аналоговая разделены.
Питание тоже разделено на аналоговое и цифровое, и подается через дроссели 25мкгн. на аналоговые цепи, а проводник в ферритовой трубочке на цифровые.

На входе АЦП конденсаторы по 0,33мкф на аналоговую землю, и резистор 750ом к датчикам. Это фильтры для снижения всевозможных помех на входы.

Выводы микроконтроллера AVCC и AREF зашунтированы керамическими конденсаторами по 0,1мкф, и еще по 10,0мкф танталовые (желтенькие со старых материнских плат).

Для того чтобы показания влажности воздуха были корректными, его необходимо вынести за пределы помещения (на улицу), и соединить с платой кабелем (лучше экранированным), и конечно защитить от прямого попадания осадков, ведь кристалл датчика совсем открытый. Датчик давления выносить за пределы платы совсем необязательно.

Эта программа, конечно не эталон, но как вариант для начинающих вполне сгодится
Безусловно, можно добавить гашение незначащего нуля в индикаторе влажности, это несложно, можно покопаться и что-то еще поправить, ведь совершенству нет предела.
Я предоставляю читателям полную свободу действий по улучшению кода.

Статья рассчитана на людей, которые любят что-то создавать своими руками, именно для души, и морального удовлетворения.

Замечание: Коммерческое использование материалов данной статьи запрещено!

Код написан в CodeWizardAVR V2.04.4a
Плата разведена в Sprint-Layout 5.0
Схема нарисована в Splan7.0.0.8_portable_rus

Температура
и давление окружающего воздуха оказывают большое влияние на самочувствие
человека. Их важно знать и в походе, и на даче, и дома. Предлагаемый компактный
прибор как нельзя лучше подходит для этого. Его можно использовать также для
приблизительной оценки высоты, например, при подъеме в горы. Уменьшение
давления на 1 мм ртутного столба соответствует увеличению высоты над уровнем
моря приблизи­тельно на 10 м.

Пределы
измерения и погрешность прибора
определяются в основном примененными в нем датчиками тем­пература -55…+125
°С, атмосферное давление 225. 825 мм ртутного столба Прибор питается
напряжением 9 В от гальванической батареи типа “Крона” или сетевого
адаптера Потребляемый ток - 30 мА (при выключенной под­светке ЖКИ). Размеры
корпуса - 118×72 28 мм. Работа прибора была проверена при температуре от -5 до
+25 С Погрешность измерения давле­ния не превысила 4 мм ртутного столба Схема
прибора изображена на рис. 1 причем собранный на отдель­ной плате модуль
измерения давления выделен штрихпунктирной линией.

Необходимые
для работы датчика так­товые импульсы частотой 32768 Гц выра­батывает кварцевый
генератор на эле­ментах микросхемы DD1 В принципе, эти импульсы мог бы
формировать и микро­контроллер DD2 с помощью одного из имеющихся в нем таймеров
Но это по­требовало бы усложнения программы.

Напряжение
3,6 В для питания датчи­ка В1 и микросхемы DD1 получено с помощью стабилитрона VD1
Резисторы R1 -R3 - нагрузочные для линий свя­зывающего датчик с микроконтролле­ром
интерфейса 1С и сигнала XCLR Печатная плата модуля измерения дав­ления показана
на рис. 2

Хотя
датчик HP03SB содержит и встроенный измеритель температуры, его показания
используются програм­мой микроконтроллера DD2 только для уточнения результатов
измерения дав­ления. На ЖКИ HG1 вместе со значени­ем давления выводятся
показания дру­гого датчика температуры - DS1624 (В2) Причина этого проста - он
точнее При необходимости датчик В2 можно сделать выносным и расположить там где
температура представляет наиболь­ший интерес. При установке в корпусе прибора
этот датчик следует вынести на боковую стенку, сделав в ней окно по его
размерам Иначе неизбежна ошибка на 1,5 ..1,8 ‘С, в чем я убедился на практике
Напряжение питания +5 В стабилизи­ровано микросхемой DA1 Подстроеч ным
резистором R8 устанавливают наи­лучшую контрастность изображения на ЖКИ Кнопкой
SB1 включают подсветку его табло. Остальные элементы необхо­димы для работы
микроконтроллера Элементы R7 R9 СЮ VD2 - цепь уста­новки микроконтроллера в
исходное состояние Кварцевый резонатор ZQ2 с конденсаторами С11.С12 - частотозадающая
цепь тактового генератора мик роконтроллера.

На
рис. 3 представлен чертеж ос­новной печатной платы прибора а на рис. 4 -
расположения деталей на ней В переходное отверстие показанное залитыми (плата
на рис. 2), необходимо вставить и пропаять с двух сторон прово­лочную
перемычку. Для микроконтрол­лера DD1 должна быть предусмотрена панель, так как
в процессе налаживания прибора эту микросхему придется из­влекать и вновь
устанавливать.

Остановимся
на некоторых особен­ностях датчика HP03SB. общий вид и га­баритные размеры
показаны на рис. 5 Для определения давления необходимо предварительно прочитать
из памя­ти установленного в приборе экземпля­ра этого датчика двухбайтные
значения коэффициентов С,-С- и однобайтные значения параметров A-D. Все они ин­дивидуальны
для данного экземпляра.

Результаты
измерения представляют собой два двухбайтных числа- D1 - дав­ление D2 -
температура. Прочитав их из памяти
датчика программа должна вычислить вспомогательные значения

Более
подробные сведения о датчике HP03SB имеются в . Однако необ­ходимо отметить
что там указаны невер­но адреса внутренней памяти датчика, по которым хранятся
его индивидуаль­ные константы. Следует пользоваться теми адресами что приведены
в В приборе можно применить и другие дат­чики серии НРОЗ Некоторые из них
име­ют меньшую точность, другие отлича­ются конструктивным оформлением.

Работа
программы начинается с ини­циализации портов микроконтроллера и ЖКИ Успешную
инициализацию под­тверждает вывод на табло надписи “TER- MOBAR” (буква
Н пропущена). Затем инициализируется датчик давления, счи состояние регистра
статуса модуля TW1 микроконтроллера не проверяется.

Для
чтения коэффициентов и пара­метров датчика предназначена специ­альная программа
ReadCC, которую необходимо загрузить в программную память микроконтроллера полностью собранного
прибора (с подключенным модулем измерения давления), вклю­чить его и через
несколько секунд выключить. После этого нужно извлечь микроконтроллер и с
помощью про­грамматора прочитать содержимое его EEPROM. В нем по адресам,
указанным в табл. 1, находятся значения индиви­дуальных коэффициентов и парамет­ров
датчика. Далее необходимо открыть файл рабочей про­граммы баро­метра-термо­метра
BARO-2 asm, найти в нем фрагмент, приведенный в табл. 2, и ис­править значе­ния
объявлен­ных там конс­тант в соответ­ствии с прочи­танными из EEPROM Пара­метр D
в про­грамме не ис­пользуется

Теперь
про­грамма готова к работе с уста­новленным в прибор экзем­пляром датчика
Остается от­транслировать ее с помощью AVR Studio и загрузить полу­ченный НЕХ- файл
в микро­контроллер Уч­тите, что анало­гичный файл, приложенный к статье, рассчи­тан
на работу с датчиком, имев­шимся у автора Если загрузить его в микрокон­троллер
при­бор с другим эк­земпляром дат­чика давления будет работать но давать неточ­ные
показания

В
разработке использованы фрагменты программ из и . Подпро­граммы преоб­разования
чи­сел из шестнадцатеричного формата в дво­ично-десяти­чный перерабо­таны с
учетом разрядности чисел. Подпро­граммы пере­множения и де­ления двух­байтных
чисел, предназначен­ные для микро­контроллеров семейства MCS-51, пере­ведены на
язык ассемблера AVRASM Мень­ше всего под­верглась изме­нениям подпрограмма
управления ЖКИ, учтены лишь особенности индикатора MT-10S1 а для ввода и вывода
сигналов использо­ваны другие порты микроконтроллера.

Очередной проект продвинутого показометра, включающий в себя измерение температуры, атмосферного давления, влажности воздуха и отсчет времени с календарем. В общем в него включены все мои наработки по работе с датчиками за все время увлечения микроконтроллерами, да и все накупленное добро нужно куда-то применить:) В итоге должен получится усовершенствованный логгер температуры , первую версию которого я забросил. Ну это позже, а сейчас приведу описание этой платы и тестовый код для проверки работоспособности напичканных туда датчиков и микросхем.

Сердцем схемы служит микроконтроллер ATMega64 фирмы Atmel, работающий от внешнего кварца на 16 МГц. Отсчитыванием времени занимается микросхема часов реального времени DS1307 , я уже имел с ней дело и поэтому пошел по проверенному пути.

Для измерения температруы и влажности применен датчик DHT11 , хоть и китай чистейшей воды, но показания выдает вполне удовлетворительные. У меня в заначке лежит еще SHT21 , но тогда повторяемость схемы сильно упадет, потому как достaть его сложней и по стоимости он выйдет как вся схема в сборе.

Все элементы (за исключением двух резисторов) находятся на верхнем слое, на нижнем разведены дороги которые не уместились на верху. Интересного там мало поэтому фото не привожу.

Чтобы иметь возможность напрямую подключать утсройство к компьютеру (к примеру, для того чтобы скинуть накопленные данные) на плате установлен преобразователь USB-UART на микросхеме FT232RL . Так же через этот преобразователь можно загружать в микроконтроллер прошивку, если предварительно зашить в микроконтроллер загрузчик (Bootloader). Как это сделать я писал ранее .

Для подключения внешних датчиков, навсякий случай предусмотрены выводы с портов PA0-PA3. А также выведены контакты SPI-интерфейса, на случай если захочется подключить