Chevroletavtoliga - Автомобильный портал

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

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

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

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

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

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

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

Данная конструкция была разработана по просьбе моего друга - любителя автомобильных путешествий и offroad. Им (другу и сотоварищам) в походах уж очень хочется знать в какую сторону и с какой скоростью меняется атмосферное давление, дабы попытаться понять, что будет с погодой. Он выбрал недорогой индикатор ME-GLCD128x64 представленный на фото:

Устройство собрано на двусторонней ПП, изготовленной методом ЛУТ:


Микроконтроллер был выбран ATMega32 в дип корпусе по причинам: он у меня был, найти другое применение такому большому корпусу (DIP40) я не смог, т.к. в последнее время делаю практически все на SMD.

Датчик давления фирмы HopeRF - HP03M, общающийся с МК по протоколу TWI. Датчики температуры DS18S20 фирмы Maxim.

Часы реального времени были выбраны на микросхеме M41T81 по причинам: наличие коррекции времени и наличие Timekeeper - позволяющего читать текущее время без потерь тактов основного счетчика.

В качестве источника питания решено использовать автомобильный адаптер USB - он выдает 5В при токе до 0.5А. В связи с тем, что при старте двигателя "провалы" в бортовой сети авто довольно большие, то была необходима схема аварийной записи текущих значений в eeprom. Для этого используется развязка питания МК и остальной схемы. Питание МК поддерживается конденсатором 1000 мкф, которого, как показали испытания, достаточно (более чем в два раза) для того, что-бы МК успел записать 6 байт текущих значений датчиков в eeprom. Контроль наличия питания и цепь сброса МК обеспечивают два супервизора питания. Первый следит за напряжением на входе схемы и при пропадании питания выдает лог.0 на int0, тем самым запуская процедуру сохранения. Второй обеспечивает "жесткий" сброс самого МК при понижении его питания - для исключения повреждения eeprom.

В обычном режиме данные записываются в eeprom каждые полчаса. Всего хранятся значения за 2-е суток. Текущее время, полученное с m41t81 преобразуется в кол-во секунд от 2000 года, и на основе этого значения вычисляется текущий адрес для записи (один из 96). После несложных вычислений можно увидеть, что ресурс eeprom выработается приблизительно за 540 лет (каждая ячейка перезаписывается раз в 2-е суток) или при ежеминутном выключении питания за 18 лет. Получасовые данные - это средние значения давления, температуры по каждому датчику, время в секундах (кратное 96) и контрольная сумма CRC16. При старте данные читаются из eeprom и проверяется контрольная сумма каждого блока, если сумма не верна - данные игнорируются. Так-же данные игнорируются если дата их записи превышает 2-е суток (нам такие старые данные не нужны). Аналогично считается и контрольная сумма основных настроек, и если она не верна - считаем, что это первый запуск программы и выставляем все значения по дефолту.


В верхнем левом углу текущее давление в мм.рт.ст и после стрелочки - изменение давления за последние 3 часа. Ниже показания двух датчиков температуры и max/min значения за прошедшие 24 часа. Совсем внизу график изменения давления. (провал в графике - специально на эти полчаса устройство было выключено - следовательно данных нет и показывать нечего)

Меню настроек:


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

Все настройки выполняются тремя кнопками Enter,+,- Для входа в меню настроек необходимо удерживать + и - более секунды.

В основном режиме кнопки + и - не работают и потому сделаны скрытыми. Кнопка Enter переключает яркость экрана с макс. на мин. и наоборот. При длительном удержании подсветка экрана полностью отключается.

Собственно схема устройства:


В архиве: Прошивка, схема, плата, плата в diptrace. Плюс набор различных цифр и символов с сишными кодами.

PS: проект будет развиваться, т.к. впереди еще зимние испытания на морозоустойчивость:)


Файлы:
Бонус: много цифирок с "C"шными массивами
Прошивка, исходники, схема, плата


Описание часов.

Возникла необходимость обновить будильник в спальне. Для переделки использовались китайские часы VST-716. Из недостатков, присущих им: мерцание индикатора; цвет индикатора в моей модели был раздражающий красный; для ночи яркость индикатора слишком, для дня недостаточная; и самое главное, хотя и предусмотрена работа от батареек, но это только работа часов, чтобы не сбились, индикатор и будильник не работают. Ну и еще - скучные.

При вскрытии выяснил, что динамическая индикация идет с частотой сети (отсюда мерцания). Индикатор "урезанный", то есть в неиспользуемых сегментах светодиоды отсутствуют. Коммутация для динамики мягко говоря странная и заложена конструкцией индикатора. Пришел к выводу, что кроме корпуса и кнопок (после переделки) и использовать ничего не получится. Поэтому решил кардинально все переделать.

1. Функции.

1.1. Часы, формат отображения времени 24-х часовый, часы:минуты.

1.2. Цифровая коррекция точности. Возможна ежесуточная коррекция ±25 сек. Установленное значение в 1 час 0 минут 30 сек будет прибавлено/вычтено из текущего времени.

1.3. Будильник. В заданное время (установка п. 2.2.1) в течении одной минуты раздаются короткие двойные сигналы. Отключить звук досрочно можно нажатием на кнопку ALARM . Когда работа будильника разрешена (переключатель сзади часов в положении On ), при отображении времени в младшем разряде индицируется точка. Если индикатор был отключен, то при срабатывании будильника включается автоматическая регулировка яркости.

1.4. Термометр. Диапазон измеряемой температуры -55,0 ÷ 125,0 о С. Если температура выше +99,9 или ниже -9,9 о С десятые доли градуса не отображаются. В случае ошибки в работе датчика на индикатор выводятся прочерки.

1.5. Барометр. Измерение атмосферного давления в мм рт. ст.

1.6. Индикация. Поочередная, смена индикации анимированная. Время индикации устанавливается в настройках п.2.2.3. Нажатием на кнопку MINUS производится ручной выбор выводимой информации. Нажатие на кнопку SET переводит часы в режим автоматической смены информации.

1.7. Использование энергонезависимой памяти микроконтроллера для сохранения настроек при отключении питания.

1.8. Ручная или автоматическая регулировка яркости индикатора в зависимости от освещенности.

Выбор режима яркости производится в основном режиме кнопкой PLUS по кругу: индикатор отключен - автоматическая регулировка яркости - ручной режим регулировки яркости.

Пределы регулировки яркости в автоматическом режиме и уровень яркости в ручном режиме задаются в настройках п. 2.2.4.

1.9. Работа от автономного источника питания (две батарейки “AAA”).

2. Настройка.

2.1. При включении питания часы в основном режиме.

2.2. Нажатием на кнопку MENU производится вход в режим настроек и выбор группы параметров для установки. В пределах группы выбор параметра для установки производится кнопкой SET . По-очереди доступны для установки:

2.2.1. Группа ALAr :

Минуты срабатывания будильника;

Часы срабатывания будильника.

2.2.2. Группа CLOC :

Секунды (обнуляются при нажатии на кнопки PLUS или MINUS );

Величина коррекции. В старшем разряде символ "с ".

2.2.3. Группа diSP :

Время индикации текущего времени. В старших разрядах символы "tc ". Диапазон установки 0÷99 сек. Если установлен 0, то время отображаться не будет;

Время индикации температуры. В старших разрядах символы "tt ". Диапазон установки 0÷99 сек. Если установлен 0, то температура отображаться не будет;

Время индикации давления. В старших разрядах символы "tP ". Диапазон установки 0÷99 сек. Если установлен 0, то давление отображаться не будет;

Выбор скорости анимации. В старшем разряде символ "P ". Диапазон установки 0÷99. Одна единица соответствует примерно 2 мсек, чем выше величина, тем медленнее идет анимация.

2.2.4. Группа LiGH :

Минимальный порог яркости для автоматического режима. В старших разрядах символы "L_ ".

Максимальный порог яркости для автоматического режима. В старших разрядах символы "".

Уровень яркости в ручном режиме. В старших разрядах символы "L- ".

2.3. Устанавливаемый параметр мигает.

2.4. Удержанием кнопок PLUS /MINUS производится ускоренная установка параметра.

2.5. Через ~10 сек от последнего нажатия на кнопки часы перейдут в основной режим работы, а новые параметры запишутся в энергонезависимую память.

3. Работа от автономного источника питания.

3.1 При отсутствии основного питания часы продолжают свою работу, если установлены батарейки.

3.2 При питании от батареек индикация отключается, будильник остается в работе.

3.3 При срабатывании будильника в течении минуты раздаются двойные звуковые сигналы, мигает индикатор с отображением времени. Отключение звука производится нажатием на кнопку ALARM или переключателем сзади часов в положение Off .

3.4 Кратковременно (~4 сек) включить индикацию можно нажав на кнопку ALARM . В этом режиме доступны просмотр и установка параметров.

3.5 При работе от батареек измерение температуры и давления не производится.

3.6 Яркость индикатора устанавливается в ручной режим.

4. Примечания.

1. Для минимального и максимального порогов яркости диапазон установки 0 ÷ 99, но программой вводятся ограничения: минимальный не может быть больше либо равным максимальному и наоборот.

2. При установке параметров яркости информация на индикаторе отображается с выбранной величиной яркости, кроме случая, когда часы работают от батареек.

3. Необходимо соизмерять скорость анимации и время отображения информации. Если выбрана медленная анимация и малое время отображения, то может оказаться, что информация не успевает полностью обновиться до очередной смены.

5. Особенности схемы.

1. Если предполагается использовать функцию автоматической регулировки яркости индикатора, то вместо RV1 устанавливается фоторезистор. А значение резистора R17 следует подобрать для получения нужной чувствительности системы.

2. Датчик температуры может работать и по 2-х проводной схеме подключения. Если планируется измерять температуру в помещении, где установлены часы, то датчик все равно следует выносить за корпус часов.

3. Пищалка BUZ1 должна быть со встроенным генератором. В зависимости от тока потребления, возможно, придется установить усилитель (транзисторный ключ).

4. Индикатор - 4 одноразрядных 0.8" SM610806B/8, общий анод, синий. Яркости более, чем достаточно.

5. При прошивке МК следует установить FUSE для работы от внутреннего тактового генератора частотой 8 МГц. Пример установки FUSE для программы CVAVR на скриншоте.

6. Датчик давления GY-65.

7. В проекте (это по сути уже схема) не показаны выводы питания микросхем.

8. Питаются часы от внешнего источника стабилизированного напряжения +5V, ток потребления около 30 мА. В моем случае используется зарядное устройство от мобильного телефона. Резервное питание - два элемента "AAA".

В архиве набор файлов: прошивка, проект в Proteus для симуляции, два файла Proteus, по которым строились печатки, описание, фото внешнего вида. Печатные платы в статью не выкладываю, так как при разработке допустил ряд ошибок и пришлось вносить некоторые изменения уже на плате. Кроме того, плата сделана именно под этот корпус. Если кому надо - пишите, выложу в форме. По случаю сфотографирую и внутреннее устройство часов.

Для обсуждения создана в форуме.

David W. Bray

Дано описание конструкции версии 2.0 электронного барометра с интерфейсом 1-Wire, отличающегося от популярной версии 1.1а удвоенной точностью измерений.

Как и в схеме версии 1.1а, в этой разработке используется интегральный датчик давления MPX4115 фирмы Motorola. Аналого-цифровое преобразование выполняется микросхемой DS2438 с интерфейсом 1-Wire. Помимо этих схем использован один операционный усилитель, два стабилизатора напряжения, два диода, светодиод и несколько резисторов и конденсаторов. Заметим, что изначальное предназначение микросхемы DS2438 - монитор заряда аккумуляторов.

Предысторию разработки версии 2.0 можно найти в статье http://davidbray.org/onewire/barometer.html .

Печатная плата

Как и для предыдущей версии 1.1а, одностороннюю печатную плату для барометра версии 2.0 разработал Jim Jennings. Печатная плата для версии 2.0 более универсальна, на ней можно собрать и схему барометра версии 1.1а.

Некоторые тонкости

В этой схеме требуется еще один дополнительный источник питания, который отсутствовал в версии 1.1а, поскольку для питания датчика давления MPX4115 требуется ток порядка 7 мА, а это больше того, что можно взять с линии интерфейса 1-Wire.

Схема обеспечивает разрешение (точность измерения давления) около 0.00417 inHg (0.1059 мм рт. столба или 0.0139 кПа) в диапазоне измерений атмосферного давления от 31.0 до 28.0 inHg (от 787.4 до 711.2 мм рт. ст. или от 105.0 до 95.0 кПа). Еще большую точность измерения можно обеспечить, сократив диапазон измеряемых значений атмосферного давления.

Принципиальная схема

На этой схеме не показан разъем. Полная схема дана .

Описание принципиальной схемы

Датчик давления MPX4115 выдает напряжение в пределах от 4.25 до 3.79 В при измерении давления на уровне моря и, примерно, от 2.77 В до 2.45 В на высоте 10000 футов (3048 м). Это превышает рабочий диапазон входных напряжений операционного усилителя LM358N, при питании его от источника 5 В. Дело в том, что выходной сигнал датчика давления отсчитывается, фактически, относительно его шины питания, а не относительно «земли», как было бы намного удобнее.

К счастью, АЦП микросхемы DS2438 может обрабатывать сигналы до 10 В, поэтому, при питании ОУ напряжением 10 В, сигналы датчика MPX4115 будут хорошо согласованы с диапазоном входных сигналов DS2438.

Сигнал с выхода датчика давления MPX4115 через RC-фильтр поступает на вход операционного усилителя U1B с коэффициентом усиления около 4. На второй вход усилителя подается регулируемое напряжение, которое суммируясь с выходным напряжением датчика давления, обеспечивает смещение уровня для согласования со входом АЦП.

Усиление и смещение регулируются 10-оборотными подстроечными резисторами. R3 устанавливает усиление U1A, а R4 управляет смещением.

Обратите внимание, что выход датчика давления соединен с резистором R1 через съемную перемычку. Это сделано для того, чтобы можно было откалибровать сигнал MPX4115 по внешнему источнику напряжения.

Продолжение читайте

Похожие публикации