Приставка к компьютеру — термометр и гигрометр на микроконтроллере Atmega8. Схема
На протяжении тысячелетий люди пытались предсказать погоду. В настоящее время становятся все более популярными метеорологические станции, позволяющие спрогнозировать погоду на следующий день.
Неотъемлемой функцией даже самой простой метеостанции является измерение температуры и влажности. Эти параметры также очень важны и в других ситуациях, например, при хранении продуктов питания.
Схема, приведенная в данной статье, представляет собой USB приставку к компьютеру, позволяющая измерять температуру и влажность воздуха.
Измерение температуры происходит в диапазоне от -40 до 80°C с разрешением 0,1°C и точностью 0,2°C. Влажность измеряется в диапазоне от 0 до 100% с разрешением 0,1% и точностью 2%.
Устройство собрано на миниатюрной печатной плате с преобладанием элементов поверхностного монтажа (SMD), благодаря чему оно может быть использовано как адаптер для ноутбука или настольного компьютера.
Ниже представлена принципиальная схема термометра/гигрометра. Основа устройства — микроконтроллер ATmega8, работающий от внешнего кварцевого резонатора с частотой 7,3728 МГц. Такая тактовая частота позволяет полностью избежать ошибок передачи данных по UART.
Для измерения температуры и влажности использован цифровой датчик DHT22, обеспечивающий измерение температуры в диапазоне -40 … + 80°C с разрешением 0,1°C и погрешностью 0,2° C и влажности в диапазоне 0 … 100% с разрешением 0,1% и погрешностью 2%.
Отображение измеренных данных выводиться через USB на компьютер. Для упрощения связи используется виртуальный RS232 порт. Поскольку питание адаптера осуществляется от USB, в схему введена фильтрация с помощью индуктивности L1 и конденсатора C5.
Держатель для платы
Материал: АБС + металл, размер зажима печатной платы (max): 20X14 см…
Ниже показана печатная плата. На плату устанавливается микроконтроллер ATmega8-16AU в корпусе TQFP32 и микросхема FT232RL в корпусе SSOP28, монтаж которой требует некоторого навыка.
[info] Микроконтроллер ATmega8Микросхема FT232
Датчик DHT22
Термометр-гигрометр
[/info]
Все линии, необходимые для программирования микроконтроллера, выведены на разъем XS1, благодаря чему отпадает необходимость программировать микроконтроллер перед пайкой.
Фьюзы микроконтроллера: High Byte: 0xD9, Low Byte: 0xFD.
После подключения устройства к компьютеру оно будет определено как адаптер USB / RS232. Чтобы изменить имя устройства по умолчанию, измените его и сохраните в EEPROM чипа FT232. Для этого можно воспользоваться утилитой «FT prog».
После установки и запуска утилиты «FT prog» выберите «Devices» — «Scan and Parse». Будет отображено содержимое памяти FT232, модель используемой системы и некоторые другие детали.
В «Device Tree» разверните вкладку «USB String cluster service» и в поле «Product Description» введите новое имя устройства, например, «Термометр с гигрометром USB».
После установки соответствующего имени, необходимо запрограммировать EEPROM. Для этого выберите «Devices» — «Program». В появившемся окне нажмите кнопку «Program». Теперь каждый раз при подключении адаптера он будет распознан как «Термометр с гигрометром USB»
При первом включении программы нужно зайти в настройки, щелкнув правой кнопкой мыши на окно программы и определить порт, к которому подключена приставка и настроить отображения информации в системном трее. Тут так же есть возможность отключить отображение информации или выбрать периодичность ее показа.
После настройки следует нажать кнопку «Сохранить параметры», а затем щелкнуть значок USB-порта. При последующих запусках программа сама откроет порт по умолчанию и будет работать с предыдущими настройками.
Скачать файлы (99,6 KiB, скачано: 710)
Все своими руками Электронный гигрометр для инкубатора
Опубликовал admin | Дата 1 ноября, 2014После того, как я закончил процесс освоения датчиков влажности DHT-11, жду посылки с датчиком DHT-22, более точного. Но чтобы не терять время зря, решил сделать реальную конструкцию для измерения влажности в инкубаторе.
Схема устройства показана на рисунке 1. Основой всей схемы являются микроконтроллер PIC16F628 и датчик для измерения температуры и влажности DHT-11. Данные по температуре от этого датчика я решил не использовать, так как они имеют очень большой разброс от реальных ее значений.
Числовое значение влажности в процентном отношении выводятся на трехразрядный, светодиодный семисегментный индикатор с общим катодом. Левый и средний разряды используются для вывода показаний влажности, а на правый разряд выводится латинская буква «Н». Humidity – влажность. Общение датчика с контроллером происходит по однопроводной шине. Резистор R1 является подтягивающим, т.е. служит для поддержания шины в единичном состоянии, когда контроллер и датчик находятся в ждущих режимах. Для упрощения программы, для передачи команд в датчик и принятия данных от него, используются два вывода порта А. Вывод RA5 контроллера, всегда сконфигурирован на прием, а RA4, имеющий выход с открытым стоком сконфигурирован на выдачу команд. Таким образом, в программе отпадает необходимость постоянно переключать банки и менять конфигурацию выводов микроконтроллера во время общения его сдатчиком.
Питается схема от микросхемного стабилизатора КР142ЕН5А. Ток потребления всей схемы во многом зависит от величины гасящих резисторов R2… R8. На схеме указан номинал в 330 Ом, но я всегда использую их с номиналом 510 Ом, на мой взгляд, яркости, для считывания информации, вполне достаточно. Для индикации включения устройства в схему введен светодиод HL1 и гасящий резистор R9. В последнее время, индикаторные светодиоды я стал заменять цветными, сверхъяркими. По сравнению с обычными светодиодами, при одинаковой яркости, они потребляют намного меньший ток. Надо заметить, что процесс считывания информации с датчика имеет разные временные границы, а учитывая, что индикаторы работают в динамическом режиме, оказалось совместить по времени эти два процесса задачей не простой. Поэтому на индикаторе наблюдаются чуть заметные подмаргивания.
—
Скачать “Электронный гигрометр для инкубатора” Elektronnyi-gigrometr-dly-inkubatota.rar – Загружено 1273 раза – 19 КБ
Скачать еще одну версию рисунка печатной платы для этого устройства можно здесь.
Обсудить эту статью на — форуме «Радиоэлектроника, вопросы и ответы».
Просмотров:18 264
Простой цифровой термометр/гигрометр на AM2302 (DHT22), ATtiny13 и MAX7219 / Хабр
Цифровой датчик температуры и влажности AM2302 (DHT22) достаточно популярен в сегменте DIY, так как при невысокой стоимости (если рассматривать реплики, сделанные в Китае) он обеспечивает неплохую точность измерений и весьма прост в подключении (три провода, включая питание). Однако, большинство примеров использования этого датчика рассчитаны на Arduino и написаны на языке программирования С/С++. Это прекрасно подойдет, если вы хотите ознакомиться с функционалом датчика или «по-быстрому» прикрутить термометр к уже существующему устройству. Но если же вы хотите собрать именно термометр/гигрометр и только его, использование целой платы Arduino (или просто большого МК с парой десятков выводов) вполне справедливо может показаться излишним.
В данной статье пойдет речь о простом термометре/гигрометре (далее – просто термометре), выполненном на одном из самых «маленьких» микроконтроллеров — ATtiny13 с весьма скромными характеристиками – 1Кб программной памяти, 64 байтами ОЗУ и 5-ю (6-ю, если отключить вывод сброса) интерфейсными выводами. В статье предполагается, что читатель уже немного знаком с микроконтроллерами AVR и их программированием, но статья, в основном, ориентирована на новичков в этой области. Кстати, о языке программирования – программа термометра полностью написана на ассемблере.
Итак, начнем. Для отображения информации о температуре и влажности был выбран 8-разрядный 7-сегментный светодиодный индикатор, позволяющий отображать оба параметра сразу без необходимости переключения между ними. Такой индикатор имеет 16 выводов (8 сегментов + 8 разрядов), что явно «не под силу» небольшому контроллеру ATtiny13. К счастью, фирма Maxim выпускает микросхему MAX7219, специально предназначенную для таких случаев – внутри микросхемы содержится весь функционал динамической индикации на 8 разрядов плюс последовательный интерфейс, совместимый с SPI. Таким образом, с этой микросхемой весь наш индикатор можно подключить к МК с помощью всего трех проводов (не считая землю и питание). Вот это уже вполне подходит для контроллера с 5-ю интерфейсными выводами. К слову, стоимость одного комплекта из индикатора, микросхемы и печатной платы в сборе составила всего $1.3 на aliexpress.
В качестве датчика температуры и влажности используется, как было сказано выше, AM2302. Он подключается к МК с помощью только одного провода. Таким образом, из имеющихся в наличии 5-ти интерфейсных выводов МК используются только 4, и на оставшийся 5-й можно «повесить» какую-либо дополнительную функцию. Также, если у вас в наличии есть HVSP-программатор, можно отключить вывод сброса и использовать его как 6-й интерфейсный вывод, но это несколько затруднит обновление прошивки МК.
Итак, вся схема термометра представлена на рисунке ниже:
Поскольку все интерфейсы для работы с внешними устройствами МК реализованы программно, то выбор выводов (пинов), к которым подключается тот или иной сигнал – чисто произвольный и сделан, скорее всего, по принципу «куда было удобнее вставить этот проводок на макетной плате». Так что смело можно выбирать и другие выводы, надо будет только в коде поправить их номер. Единственное ограничение – не стоит подключать датчик температуры к одному из выводов, используемых для программирования МК через SPI – это может создать конфликт, т.к. выходы двух устройств окажутся соединенными вместе, что недопустимо с электрической точки зрения.
Теперь, когда с подключением датчика и индикатора все ясно, приступаем к написанию непосредственно кода. И тут нас ожидает новый «вызов» — ATtiny13 не имеет на борту никаких последовательных интерфейсов, т.е. всю их логику придется реализовывать программно. К счастью, реализация SPI для MAX7219 не составляет особого труда, т.к. протокол синхронный, микросхема работает на частоте до 10Мгц, да и интерфейс в нашей схеме работает только на вывод. А вот общение с АМ2302 будет более сложной задачей, потому что он подключается только одним проводом, данные по которому передаются в обе стороны и скорость передачи полностью определяется самим датчиком. Тут следует сказать, что большинство библиотек для работы с АМ2302 идут по «простому пути» — запрещают прерывания и считывают всю информацию с датчика одним вызовом функции. Это простое и надежное решение, но оно вряд ли подойдет, если на МК возложены какие-либо другие функции реального времени (например, динамическая индикация или непрерывный анализ данных из других источников), потому как весь цикл чтения информации о температуре и влажности занимает от 4-х до 6-ти миллисекунд (в зависимости от передаваемых данных). Не смотря на то, что в данном термометре никаких других функций реального времени нет, было принято решение написать универсальный код, который бы считывал информацию с датчика «в фоновом режиме», т.е. на прерываниях.
Для максимального упрощения схемы ATtiny13 тактируется от встроенного RC-генератора, выдающего около 9.6Мгц. Это позволяет, вызывая прерывание каждые 128 тактов процессора, получить частоту опроса АМ2302 75КГц или 13.33 микросекунды между соседними опросами. По спецификации АМ2302 минимальная длительность импульса на его выходе составляет 26 микросекунд, что практически в два раза превышает интервал опроса и гарантирует стабильное чтение данных. Конечно, 128 тактов между двумя прерываниями не очень-то много для реализации алгоритма опроса, но AVR выполняет большинство команд за 1 такт, поэтому написать работающую программу при таких условиях вполне возможно, еще и останется время для выполнения основной программы.
АМ2302 по спецификации можно опрашивать не чаще, чем один раз в две секунды. Однако практика показывает, что он вполне способен отдавать результат и чаще – до нескольких раз в секунду, при условии, что после включения питания ему дадут 1-2 секунды (по спецификации – 2) на инициализацию. В данном термометре датчик опрашивается один раз в секунду, однако интервал опроса легко изменить на любое другое значение.
К сожалению, АМ2302 (возможно, тут сказывается его китайское происхождение) имеет достаточно большую погрешность результата – два последовательных запроса температуры могут вернуть разницу в 0.5 или даже более градусов, поэтому было решено программно усреднять данные последних 8-ми измерений, чтобы показания термометра не прыгали.
Теперь перейдем непосредственно к коду. Исходный asm и результирующий hex-файл размещен в приложении в конце статьи, здесь же я поясню основные моменты. Будет удобно открыть исходный код программы в другом окне и смотреть туда в процессе чтения статьи.
В начале программы идет два важных определения:
#define SKIPNEXT1W (PC + 2)
#define DS(var) Y + var - _dataStart
Первое позволяет осуществлять условный переход через следующую команду размером 16бит (1 слово, большинство команд AVR), т.е. пропускать ее без введения дополнительной метки, например:
inc R16
cpi R16, 5
brne SKIPNEXT1W
dec R16
...
Второе позволяет обращаться к первым 64-м байтам оперативной памяти МК с помощью 16-битных команд. Здесь расскажу подробнее – обычно для чтения или записи в ОЗУ МК применяются команды lds/sts, которые занимают 2 слова (32 бита) и выполняются за 2 такта. Они позволяют адресовать до 64Кб (без расширений) ОЗУ. К сожалению, размер в 32 бита (4 байта) – это уже весьма много для МК с объемом программной памяти всего 1Кб. Поэтому, для экономии программной памяти в регистр Y МК при старте помещается адрес начала ОЗУ (0x60 для ATtiny13), больше в процессе работы программы этот регистр никто не меняет, а доступ к первым 64 байтам ОЗУ выполняется с помощью косвенной адресации со смещением по регистру Y, например:
ldd R16, Y + 6
Команды ldd/std также выполняются за 2 такта, но занимают только 16 бит (2 байта), т.е. по сравнению с командами lds/sts такой вид адресации позволяет экономить половину объема программной памяти. Для того, чтобы не высчитывать в каждой команде смещение какой-либо переменной вручную, в самом начале сегмента данных ставится метка _dataStart:
.dseg
_dataStart:
...
testVar: .byte 1
А в команде используется макрос DS (сокращение от Data Segment):
ldd R16, DS (testVar)
Компилятор преобразует это в строку:
ldd R16, Y + testVar - _dataStart
Автоматически высчитывая нужное смещение. Следует отметить, что такой вид адресации ограничен возможностями самой команды ldd, а это первые 64 байта относительно базового регистра. Но, в случае с ATtiny13, которая имеет как раз 64 байта ОЗУ на борту, он позволяет адресовать всю память. Тем не менее, в других МК, имеющих больший объем ОЗУ, также возможно применять данный способ, размещая наиболее часто адресуемые переменные в первых 64-х байтах сегмента данных. Расплата за такой способ адресации – регистр Y (два 8-битных регистра R28 и R29), значение которого нельзя менять ни в какой точке программы.
Далее в программе определяются номера битов порта В (именно битов внутри байта, не физических выводов микросхемы), к которым подключены внешние устройства. Поскольку все протоколы взаимодействия с устройствами программные, номера битов можно менять без каких-либо ограничений.
Особенностью МК AVR является то, что первые 16 регистров R0 – R15 являются «неполноценными», с ними не работают команды, содержащие внутри себя операнд – например, ldi или subi. Т.е. чтобы даже загрузить значение, отличное от 0 в один из этих регистров, надо использовать дополнительный регистр:
ldi R16, 32
mov R0, R16
Поэтому, часто такие регистры используются как «переменные с быстрым доступом». Для этого компилятор имеет директиву .def, позволяющую присвоить регистру дополнительное символьное имя, например:
.def R_TS = R0
В программе термометра регистр R0 всегда хранит состояние приемника данных АМ2302, регистр R1 используется для подсчета времени приема сигнала, R2 содержит принимаемые данные, R3 используется как счетчик таймера, увеличивающегося с частотой 100Гц, а R4 и R5 – как обратный счетчик таймера 75КГц, считающего от 749 до 0.
Сегмент данных МК поделен на 4 части – блок принятых с АМ2302 данных (5 байт), буфер для десятичной печати числа (4 байта), буфер для усреднения показаний термометра и гигрометра на 8 значений (8*2*2 = 32 байта) и стек МК (ему отделена вся оставшаяся память, т.е. 23 байта). В действительности, конечно, стек занимает меньше, и в памяти можно еще найти несколько байт для дополнительных функций, но увлекаться уже не стоит.
Теперь перейдем непосредственно к сегменту кода. Он традиционно начинается с таблицы прерываний, для ATtiny13 это 10 векторов, включая вектор сброса. Неиспользуемые прерывания сразу же содержат команду reti, используемые (а их два) – команду перехода на обработчик. Термометр использует два прерывания, обслуживаемые одним обработчиком – это прерывание по переполнению таймера и прерывание по равенству таймера значению OCRA. Можно было бы обойтись одним, однако такой метод на 2 команды короче (не надо изменять режим работы таймера с обычного на СТС).
Сразу после векторов прерываний идет таблица перевода цифр в коды для зажигания 7-сегментных индикаторов. Можно было бы воспользоваться встроенной в MAX7219 функцией декодирования, однако тогда было бы сложнее выводить на индикатор строковые сообщения.
За таблицей начинается программа инициализации термометра, выполняемая сразу после сброса МК. Она выполняет начальную установку указателя стека МК, сторожевого таймера watchdog (устанавливается на 4 секунды), занесение начальных значений в регистры МК, а также инициализацию портов ввода-вывода, MAX7219 и основного таймера МК. После этого программа ждет 2 секунды, пока инициализируется АМ2302 (демонстрируя простую анимацию из гаснущих знаков «минус» на дисплее) и переходит в свой основной цикл.
Основной цикл начинается с инициации запроса к АМ2302 посредством изменения состояния приемника данных в регистре R_TS (R0). Ближайшее прерывание таймера определит изменение состояния и начнет цикл опроса датчика. По его завершению в биты состояния регистра R_TS будет помещено значение TMS_NONE, а до этого момента основная программа может выполнять любые действия. В данном случае выполнять нечего, поэтому программа просто переводит МК в режим сна (sleep) и ждет окончания цикла опроса.
После завершения опроса бит 3 регистра состояния определяет, были ли данные получены успешно (значение 1) или же произошла ошибка (значение 0). В случае успешного получения данных программа проверяет их контрольную сумму и, по необходимости, передает управление обработчику ошибки. Обработчик ошибки считает количество ошибок, идущих подряд, и как только это значение станет равным трем, выводит на дисплей сообщение «Sn Error», сигнализирующее о неисправности сенсора или соединительной линии. Как только данные о температуре и влажности будут получены успешно, счетчик ошибок сбрасывается. Такой механизм позволяет игнорировать одиночные ошибки сенсора, которые время от времени имеют место в реальной жизни.
В случае успешного получения данных, предыдущие измерения, находящиеся в буфере усреднения данных, сдвигаются вверх, и новые данные добавляются в его начало. Параллельно вычисляются средние значения, которые будут показаны на дисплее. Тут следует отметить, что АМ2302 выдает отрицательную температуру не в дополнительном коде, привычном для обработки процессорами, а в виде абсолютного значения температуры и отдельного бита её знака. Для того чтобы складывать такие числа и вычислять их средние значения, используя обычные команды МК, данные надо перевести в дополнительный код.
Поскольку изначально буфер усреднения не инициализируется, средние значения температуры и влажности отображаются только после проведения восьми успешных измерений. До этого момента на дисплей выводятся текущие значения. На практике это означает, что в первые 8 секунд после включения термометра значения температуры и влажности могут прыгать в пределах градуса, после чего показания стабилизируются. Следует сказать, что усреднение из 8-ми последних значений очень благотворно влияет на показания термометра – теперь они в основном изменяются не более чем на 0.1 градуса в секунду.
Температура выводится на дисплей в формате « х.х», « хх.х», «ххх.х», «- х.х» или «-хх.х» в зависимости от ее значения. Влажность выводится в формате « х.х» или « хх.х». Для преобразования двоичного числа, находящегося в регистре Х в десятичную форму (в соответствии с кодами для 7-сегментного индикатора), применяется функция printDecX. Поскольку МК не имеет команды деления, функция основана на последовательном вычитании из исходного числа значений 1000, 100 и 10. Максимальное число, которое может вывести функция – 9999, если при её вызове в регистре Х окажется число больше, функция вернет ошибку переполнения, установив флаг переноса.
Для работы с MAX7219 применяется функция maxWriteWord, которая записывает значение из регистра XL МК в регистр MAX, номер которого задан в регистре XH. После вывода значений текущей температуры и влажности на дисплей, программа делает задержку в 1 секунду и повторяет основной цикл заново. Для реализации задержки используется функция wait100Hz, которая выполняет задержку на время R16*0.01c с использованием счетчика R_TICK100, увеличение которого происходит по прерыванию таймера.
Получение данных с датчика температуры выполняется с помощью функции am2302proc, которая вызывается из обработчика прерывания таймера. Функция представляет собой конечный автомат, состояние которого хранится в регистре R_TS (R0) МК. В зависимости от состояния функция ждет определенного уровня сигнала от датчика, инициируя передачу и последовательно получая все 40 бит передаваемой информации. Синхронизация происходит на каждом изменении уровня входного сигнала, поэтому особой точности от частоты прерываний таймера не требуется (что позволяет МК работать от встроенного генератора). Функция состоит из быстрого обработчика состояния простоя (TMS_NONE), позволяющего минимизировать нагрузку на процессор МК в то время, когда обмена данными с датчиком не происходит, обработчика таймаута, предназначенного для сброса автомата в исходное состояние, если ожидаемый сигнал не приходит длительное время (около 3 мс), и обработчиков каждого отдельного состояния автомата. Следует отметить, что данная функция не обладает помехозащищенностью – если даже импульсная помеха изменит уровень линии данных на короткий промежуток времени, но именно он попадет на операцию чтения из порта, функция прочитает неверные данные. Для компенсации этого в основной программе происходит проверка контрольной суммы прочитанных данных, поэтому отображение неверной информации практически исключено. Однако такая реализация может оказаться не самой лучшей, если вы захотите вынести датчик за пределы термометра и подключить его к МК соединительной линией большой длины.
На данный момент термометр собран на макетной плате и выглядит следующим образом:
В будущем планируется поместить термометр внутрь корпуса существующих электронных часов, организовав его питание от БП часов.
Текущая программа занимает около 75% программной памяти МК. Что можно добавить в программу? Возможно, кому-то пригодится изменение яркости свечения дисплея (это реализовано непосредственно в драйвере MAX7219) по внешней кнопке или датчику освещенности (используя встроенный в МК АЦП и свободный интерфейсный вывод), кому-то может пригодиться запоминание и отображение минимальной и максимальной температуры. Для небольших доработок место еще есть. Более крупные доработки могут потребовать смену МК на другой, имеющий на борту больше программной и оперативной памяти. Что касается интерфейсных выводов – на данный момент у МК есть один полностью незадействованный вывод и еще один можно получить, отключив RESET. Также два вывода из интерфейса SPI (DATA и CLK) можно использовать для других функций, т.к. пока на выводе CS не будет низкого уровня (конкретно для МАХ7219 важен переход с низкого уровня на высокий) сигналы на этих выводах значения не имеют. Т.е., в принципе, заменив МК на более мощный, например, ATtiny85, можно подключить к термометру Real Time Clock (RTC) и до четырех кнопок.
Моей же целью было именно создание простого термометра/гигрометра, поэтому, скорее всего, я оставлю его себе в таком виде.
Текст программы
// *********************************************
// *** Simple digital thermometer/hygrometer ***
// *********************************************
// *** (c) SD, 14.03.2016 ***
// *********************************************
// Based on ATtiny13, AM2303 and MAX7219
// **************
// *** Clocks ***
// **************
// MCU clock frequency is 9.6MHz (internal oscillator)
// Timer frequency is 75KHz = 9.6MHz/128
// (13.3 us between interrupts)
#define SKIPNEXT1W (PC + 2)
#define DS(var) Y + var - _dataStart
// ************
// *** Pins ***
// ************
// MAX7219 output pins
.equ MAX_DIN = 0
.equ MAX_CS = 1
.equ MAX_CLK = 4
// AM2302 input pin
.equ AM2302_PIN = 3
// MAX7219 registers
.equ MAX_DECODE = 0x09
.equ MAX_INTENSITY = 0x0A
.equ MAX_SCANLIMIT = 0x0B
.equ MAX_SHUTDOWN = 0x0C
.equ MAX_DISPTEST = 0x0F
// Temperature measurement state register
// Bits 0 - 2 define the byte number being received
// Bit 3 is set when there are valid data received
// Bits 4 - 7 define the current receiver state
.def R_TS = R0
// Temperature measurement tick
.def R_TT = R1
// Temperature data register
.def R_TD = R2
// Temperature measurement states
.equ TMS_NONE = 0x00 // TMS_NONE - do nothing an wait until
// somebody changes the state
.equ TMS_START = 0x10 // Start of the measurement cycle
.equ TMS_ST_LOW = 0x20 // Initial low signal is being sent
// (1 ms = 75 timer ticks)
.equ TMS_WRSP_LOW = 0x30 // Initial low signal has been sent,
// waiting for the response low signal
.equ TMS_WRSP_HIGH = 0x40 // Response low signal has been received,
// waiting for the response high signal
.equ TMS_W1ST_BIT_LOW = 0x50 // Waiting for the first bit low signal
.equ TMS_WBIT_HIGH = 0x60 // Waiting for the bit high signal
.equ TMS_WBIT_LOW = 0x70 // Waiting for the bit low signal
.equ TMS_WHIGH = 0x80 // Waiting for the final high signal
// Timer 100Hz tick counter
// (counts upwards from 0 to 255)
.def R_TICK100 = R3
// Timer 16bit 75KHz tick counter
// (counts downwords from 749 to 0)
.def R_TICKL = R4
.def R_TICKH = R5
// ************
// *** Data ***
// ************
.dseg
_dataStart: // Data start label
tempData: .byte 5 // Data, received from the AM2302 sensor
displayData: .byte 4 // Decimal printing result
.equ DATA_BUF_SIZE = 8 // AM2302 data buffer size in samples
// (each sample is 4 bytes)
dataBuffer: .byte DATA_BUF_SIZE*4
.cseg
.org 0
// *** Interrupts ***
// Reset Handler
rjmp start
// IRQ0 Handler
reti
// PCINT0 Handler
reti
// Timer0 Overflow Handler
rjmp timerOvfl
// EEPROM Ready Handler
reti
// Analog Comparator Handler
reti
// Timer0 CompareA Handler
rjmp timerCompA
// Timer0 CompareB Handler
reti
// Watchdog Interrupt Handler
reti
// ADC Conversion Handler
reti
// Table to convert decimal digit into 7-segment code
hexTable:
.db 0b01111110, 0b00110000, 0b01101101, 0b01111001
.db 0b00110011, 0b01011011, 0b01011111, 0b01110010
.db 0b01111111, 0b01111011
start:
cli
ldi R16, RAMEND
out (SPL), R16
// Init watchdog (4s interval)
wdr
ldi R16, (1 << WDCE) | (1 << WDE)
out (WDTCR), R16
ldi R16, (1 << WDE) | (1 << WDP3)
out (WDTCR), R16
// Init registers
ldi YL, low (_dataStart)
ldi YH, high (_dataStart)
clr R_TS
clr R_TT
clr R_TICKL
clr R_TICKH
clr R_TICK100
// Init ports
out (PORTB), R_TS
ldi R16, (1 << MAX_DIN) | (1 << MAX_CS) | (1 << MAX_CLK)
out (DDRB), R16
// Init LED driver
// Set all digits to "-"
ldi XL, 0b00000001
ldi XH, 1
init1:
rcall maxWriteWord
cpi XH, 9
brne init1
// Set control registers
ldi XL, 0 // Decode
rcall maxWriteWord
ldi XL, 4 // Intensity
rcall maxWriteWord
ldi XL, 7 // Scan limit
rcall maxWriteWord
ldi XL, 1 // Shutdown
rcall maxWriteWord
ldi XH, 0x0F
ldi XL, 0 // Display test
rcall maxWriteWord
// Init timer for 1 interrupt each 128 CPU cycles
ldi R16, 127
out (OCR0A), R16
ldi R16, 0b00000110
out (TIMSK0), R16
ldi R16, 0b00000001
out (TCCR0B), R16
// First part of the initialization is done.
// Enable interrupts
sei
// Wait 2 sec (while AM2302 initialize itself)
// with little animation
ldi XH, 1
ldi XL, 0
init2:
ldi R16, 25
rcall wait100Hz
rcall maxWriteWord
cpi XH, 9
brne init2
// R6 will contain the number of
// measurement values received
clr R6
// R7 will contain the number of
// continious errors
clr R7
loop:
// Reset watchdog timer
wdr
// Initiate measurement
ldi R16, TMS_START
mov R_TS, R16
loop1:
// Wait for the TMS_NONE state
// which indicates that the measurement
// is done
sleep
mov R16, R_TS
andi R16, 0xF0
brne loop1
// Do we have the valid data?
sbrs R_TS, 3
loop_error1:
rjmp loop_error
// Check control sum of the received data
ldd R16, DS (tempData)
ldd ZL, DS (tempData + 1)
add R16, ZL
ldd ZL, DS (tempData + 2)
add R16, ZL
ldd ZL, DS (tempData + 3)
add R16, ZL
ldd ZL, DS (tempData + 4)
cp R16, ZL
brne loop_error1
// We have valid new measurement data,
// reset error count
clr R7
// Move up data in the buffer
// and count the sum at the same time.
// R12:R13 will contain the humidity value and
// R14:R15 the temperature value
clr R12
clr R13
clr R14
clr R15
ldi ZL, low (dataBuffer + (DATA_BUF_SIZE - 2)*4)
ldi ZH, 0
buf1:
ldd R16, Z + 0
ldd R17, Z + 1
std Z + 4, R16
std Z + 5, R17
add R12, R16
adc R13, R17
ldd R16, Z + 2
ldd R17, Z + 3
std Z + 6, R16
std Z + 7, R17
add R14, R16
adc R15, R17
subi ZL, 4
cpi ZL, low (dataBuffer - 4)
brne buf1
// Add new humidity value to the buffer
// and to the sum
ldd R16, DS (tempData + 1)
ldd R17, DS (tempData)
std DS (dataBuffer + 0), R16
std DS (dataBuffer + 1), R17
add R12, R16
adc R13, R17
// Add new temperature value to the buffer
// and to the sum
ldd R16, DS (tempData + 3)
ldd R17, DS (tempData + 2)
// Check for a negative value
and R17, R17
brpl buf2
// Convert negative temperature to the 2's
// complement form
clr ZL
andi R17, 0x7F
neg R16
sbc ZL, R17
mov R17, ZL
buf2:
std DS (dataBuffer + 2), R16
std DS (dataBuffer + 3), R17
add R14, R16
adc R15, R17
// Divide the humidity and temperature
// sum values by 8 (by shifting them right
// three times)
ldi R16, 3
buf3:
asr R15
ror R14
asr R13
ror R12
dec R16
brne buf3
// Do we have 8 full measurements?
mov R16, R6
cpi R16, 7
// If so, use the average values from
// the buffer
breq buf4
// Otherwise use the latest measurement
ldd R12, DS (dataBuffer + 0)
ldd R13, DS (dataBuffer + 1)
ldd R14, DS (dataBuffer + 2)
ldd R15, DS (dataBuffer + 3)
inc R6
buf4:
// Print out values
// *** Humidity ***
movw X, R12
rcall printDecX
ldi XH, 1
ldd XL, DS (displayData + 3)
rcall maxWriteWord
ldd XL, DS (displayData + 2)
ori XL, 0x80
rcall maxWriteWord
ldd XL, DS (displayData + 1)
rcall maxWriteWord
ldd XL, DS (displayData)
rcall maxWriteWord
// *** Temperature ***
movw X, R14
// Check for a negative value
and XH, XH
brpl buf5
// Calculate the absolute value
clr ZL
neg XL
sbc ZL, XH
mov XH, ZL
buf5:
rcall printDecX
ldi XH, 5
ldd XL, DS (displayData + 3)
rcall maxWriteWord
ldd XL, DS (displayData + 2)
ori XL, 0x80
rcall maxWriteWord
ldd XL, DS (displayData + 1)
rcall maxWriteWord
// If temperature is negative
// write the minus sign to the first digit
// (temperatures of -100.0 and below
// are not supported anyway)
ldd XL, DS (displayData)
and R15, R15
brpl SKIPNEXT1W
ldi XL, 1
rcall maxWriteWord
loop2:
// Wait for 1 sec
ldi R16, 100
rcall wait100Hz
// And repeat
rjmp loop
loop_error:
// An error had occured.
// Increment error count
inc R7
// Do we have 3 or more errors in a row?
mov R16, R7
cpi R16, 3
// No? Just do nothing
brne loop2
// Prevent error count from growing
dec R7
// Display error
ldi ZL, low (errText*2)
ldi ZH, high (errText*2)
rcall maxWrite8Bytes
rjmp loop2
errText:
// "Sn Error"
.db 0b00000101, 0b00011101, 0b00000101, 0b00000101
.db 0b01001111, 0b00000000, 0b00010101, 0b01011011
// **********
// Waits given number (R16) of 100Hz ticks
// Uses: Z
wait100Hz:
// Enable sleep
ldi ZL, 0b00100000
out (MCUCR), ZL
mov ZL, R_TICK100
w100:
sleep
mov ZH, R_TICK100
sub ZH, ZL
cp ZH, R16
brcs w100
ret
// Timer interrupt
timerOvfl:
timerCompA:
push R16
in R16, (SREG)
push R16
push ZL
push ZH
// Receive AM2303 data
rcall am2302proc
// Decrement current 75KHz tick
ldi R16, 1
sub R_TICKL, R16
brcc timerRet
sub R_TICKH, R16
brcc timerRet
// Initialize 75KHz tick value
ldi ZL, low (750 - 1)
ldi ZH, high (750 - 1)
movw R_TICKL, Z
// Increment current 100Hz tick
inc R_TICK100
timerRet:
pop ZH
pop ZL
pop R16
out (SREG), R16
pop R16
reti
// **************
// *** AM2302 ***
// **************
amStart:
// Send the start low signal.
// Switch corresponding PORTB pin to output
// (there is already 0 in the PORTB register)
sbi (DDRB), AM2302_PIN
ldi R16, TMS_ST_LOW
rjmp amSetState
amStartLow:
// Initial start low signal is being sent.
// Wait for 75 ticks
cpi R16, 75
brne amNone
// Switch PORTB pin back to input
cbi (DDRB), AM2302_PIN
ldi R16, TMS_WRSP_LOW
// Do not check AM2303 input pin at this tick
// since it's possible that it has not recovered
// from the low state yet.
rjmp amSetState
amWRespLow:
// Waiting for the response low signal
sbrc ZH, AM2302_PIN
ret
ldi R16, TMS_WRSP_HIGH
rjmp amSetState
amWRespHigh:
// Waiting for the response high signal
sbrs ZH, AM2302_PIN
ret
ldi R16, TMS_W1ST_BIT_LOW
rjmp amSetState
amW1StBitLow:
// Waiting for the first bit low signal
sbrc ZH, AM2302_PIN
ret
// Get ready to receive the first bit
ldi R16, 1
mov R_TD, R16
// Set new state and reset the byte counter
ldi ZL, TMS_WBIT_HIGH
rjmp amSetState2
amBitHigh:
sbrs ZH, AM2302_PIN
ret
// If the bit low signal was there too long
// (longer than 5 ticks (5*13.3 = 66.5us)
// something went wrong)
cpi R16, 6
brcc amResetState
ldi R16, TMS_WBIT_LOW
rjmp amSetState
am2302proc:
// First, check for the TMS_NONE state.
// In this case just do nothing to
// not waste MCU cycles.
mov ZL, R_TS
andi ZL, 0xF0
cpi ZL, TMS_NONE
breq amNone
// Increment receiver tick
inc R_TT
// If we are waiting for too long,
// something went wrong, reset the state
breq amResetState
// Save the current tick into a more
// convenient register
mov R16, R_TT
// Get input signal
in ZH, (PINB)
// Branch depending on the current state.
// Check for TMS_WBIT_LOW first since it
// has the longest service routine
cpi ZL, TMS_WBIT_LOW
breq amBitLow
cpi ZL, TMS_START
breq amStart
cpi ZL, TMS_ST_LOW
breq amStartLow
cpi ZL, TMS_WRSP_LOW
breq amWRespLow
cpi ZL, TMS_WRSP_HIGH
breq amWRespHigh
cpi ZL, TMS_W1ST_BIT_LOW
breq amW1StBitLow
cpi ZL, TMS_WBIT_HIGH
breq amBitHigh
cpi ZL, TMS_WHIGH
breq amWHigh
amResetState:
// In case of an error, reset state to
// the default TMS_NONE
ldi R16, TMS_NONE
amSetState:
// Preserve the current byte number
mov ZL, R_TS
andi ZL, 0x07
or ZL, R16
amSetState2:
mov R_TS, ZL
// Clear receiver tick counter
clr R_TT
amNone:
ret
amBitLow:
sbrc ZH, AM2302_PIN
ret
// The high bit signal was too long?
cpi R16, 8
brcc amResetState
// Store input bit (inverted, since cpi produces
// inverted result in the carry flag)
cpi R16, 4
rol R_TD
// Initally we set R_TD to 1, so when all 8
// bits are received, the carry flag will be set
// indicating that a full byte has been received.
// Otherwise, receive the next bit
ldi R16, TMS_WBIT_HIGH
brcc amSetState
// We have the full byte. Invert it
com R_TD
// Save it
mov ZL, R_TS
andi ZL, 0x07
subi ZL, low (-tempData)
ldi ZH, high (tempData)
st Z+, R_TD
// Did we receive all 5 bytes?
cpi ZL, low (tempData + 5)
ldi R16, TMS_WHIGH
breq amSetState
// OK, receive the next byte.
// Increment the byte counter
inc R_TS
// Initialize R_TD
ldi R16, 1
mov R_TD, R16
ldi R16, TMS_WBIT_HIGH
rjmp amSetState
amWHigh:
sbrs ZH, AM2302_PIN
ret
cpi R16, 6
brcc amResetState
// We received everything. Set
// the state to TMS_NONE and set
// the data validity bit
ldi R16, 0x08
mov R_TS, R16
ret
// *********
/*
// Write data from Z
// Uses R16 - R19, X, Z
maxWriteData:
lpm XH, Z+
tst XH
brne SKIPNEXT1W
ret
lpm XL, Z+
rcall maxWriteWord
rjmp maxWriteData
maxInit:
.db MAX_DECODE, 0
.db MAX_INTENSITY, 4
.db MAX_SCANLIMIT, 7
.db MAX_SHUTDOWN, 1
.db MAX_DISPTEST, 0
.db 0, 0
maxTest:
.db 0, 0b00011101, 0b00010101, 0b00010000, 0b00011100, 0b00111101, 0b00000101, 0b01110111
*/
// Writes 8 bytes from (Z) (program memory)
// to MAX7219
// Uses R16 - R19, X, Z
maxWrite8Bytes:
ldi XH, 0x01
mw8b1:
lpm XL, Z+
rcall maxWriteWord
cpi XH, 9
brne mw8b1
ret
// Write word X (XL = data, XH = address) to MAX2719
// Uses R16 - R19, X
maxWriteWord:
// Set all pins to zero
in R17, (PORTB)
andi R17, ~((1 << MAX_DIN) | (1 << MAX_CS) | (1 << MAX_CLK))
out (PORTB), R17
ldi R19, (1 << MAX_CLK)
mov R16, XH
rcall mww1
mov R16, XL
rcall mww1
// Set LOAD(CS) to high thus writing all 16 bits into
// MAX register
sbi (PORTB), MAX_CS
// Increment MAX register number
inc XH
ret
mww1:
ldi R18, 8
mww2:
bst R16, 7
bld R17, MAX_DIN
out (PORTB), R17
lsl R16
dec R18
// Create clock impulse by toggling clock output twice
out (PINB), R19
out (PINB), R19
brne mww2
ret
// *********
printDecX:
ldi ZH, low (1000)
ldi R16, high (1000)
rcall pdx
// Change zero digit to empty space
cpi ZL, 0b01111110
brne SKIPNEXT1W
ldi ZL, 0
std DS (displayData), ZL
ldi ZH, 100
ldi R16, 0
rcall pdx
// If this digit is zero and the first
// digit is empty (i.e. it was zero too)
// change this digit to empty space
ldi R16, 0b01111110
eor R16, ZL
ldd ZH, DS (displayData)
or R16, ZH
brne SKIPNEXT1W
ldi ZL, 0
std DS (displayData + 1), ZL
ldi ZH, 10
ldi R16, 0
rcall pdx
std DS (displayData + 2), ZL
mov ZL, XL
rcall pdx3
std DS (displayData + 3), ZL
// Clear carry flag to indicate that
// no error occurred
clc
ret
pdx:
ldi ZL, 0
pdx1:
sub XL, ZH
sbc XH, R16
brcs pdx2
cpi ZL, 9
breq pdxOverflow
inc ZL
rjmp pdx1
pdx2:
add XL, ZH
adc XH, R16
pdx3:
subi ZL, -low (hexTable << 1)
ldi ZH, high (hexTable << 1)
lpm ZL, Z
ret
pdxOverflow:
// Set carry flag to indicate error
sec
// Pop return address out of the stack
// so we can return to the caller of printDecX
pop R16
pop R16
ret
HEX-файл (fuses: H:FF, L:7A)
:020000020000FC
:100000000EC018951895C2C018951895BFC01895C0
:10001000189518957E306D79335B5F727F7BF8940D
:100020000FE90DBFA89508E101BD08E201BDC0E6DA
:10003000D0E00024112444245524332408BA03E1D9
:1000400007BBA1E0B1E015D1B930E9F7A0E011D1CB
:10005000A4E00FD1A7E00DD1A1E00BD1BFE0A0E05B
:1000600008D10FE706BF06E009BF01E003BF78949F
:10007000B1E0A0E009E181D0FCD0B930D9F7662425
:100080007724A89500E1002E8895002D007FE1F7E8
:1000900003FE66C00881E9810E0FEA810E0FEB8135
:1000A0000E0FEC810E17A9F77724CC24DD24EE2463
:1000B000FF24E1E8F0E00081118104831583C00E84
:1000C000D11E0281138106831783E00EF11EE450D6
:1000D000E53689F70981188109871A87C00ED11E74
:1000E0000B811A8111232AF4EE271F770195E10B6A
:1000F0001E2F0B871C87E00EF11E03E0F594E7949A
:10010000D594C7940A95D1F7062D073029F0C984F4
:10011000DA84EB84FC846394D601C0D0B1E0A88576
:10012000A8D0AF81A068A5D0AE81A3D0AD81A1D069
:10013000D701BB2322F4EE27A195EB0BBE2FAED047
:10014000B5E0A88596D0AF81A06893D0AE8191D05C
:10015000AD81FF200AF4A1E08CD004E60ED091CF4F
:100160007394072D0330C9F77A94E2E7F1E07BD06E
:10017000F4CF051D05054F00155BE0E2E5BFE32D5B
:100180008895F32DFE1BF017D8F308950F930FB742
:100190000F93EF93FF932BD001E0401A30F4501AE5
:1001A00020F4EDEEF2E02F013394FF91EF910F91E7
:1001B0000FBF0F911895BB9A00E232C00B34A9F51E
:1001C000BB9800E32DC0F3FD089500E429C0F3FFC0
:1001D000089500E525C0F3FD089501E0202EE0E636
:1001E00022C0F3FF08950630D0F400E719C0E02DD7
:1001F000E07FE030D1F0139491F0012DF6B3E037B9
:10020000A9F0E031C1F2E032C9F2E033E1F2E034CA
:10021000F1F2E03501F3E03621F3E038E9F000E0F7
:10022000E02DE770E02B0E2E11240895F3FD0895C4
:100230000830A8F70430221C00E690F72094E02D47
:10024000E770E05AF0E02192E53600E849F30394C4
:1002500001E0202E00E6E4CFF3FF08950630F8F623
:1002600008E0002E0895B1E0A59103D0B930E1F780
:10027000089518B31C7E18BB30E10B2F05D00A2F50
:1002800003D0C19AB395089528E007FB10F918BB75
:10029000000F2A9536BB36BBC1F70895F8EE03E090
:1002A00017D0EE3709F4E0E0ED83F4E600E010D07B
:1002B0000EE70E27FD810F2B09F4E0E0EE83FAE054
:1002C00000E006D0EF83EA2F0DD0E88788940895E8
:1002D000E0E0AF1BB00B20F0E93041F0E395F9CF3F
:1002E000AF0FB01FEC5EF0E0E491089508940F9119
:0402F0000F910895CD
:00000001FF
РадиоКот :: Термометр-гигрометр на ATmegta8
РадиоКот >Схемы >Цифровые устройства >Бытовая техника >Термометр-гигрометр на ATmegta8
Добрый всем радиокотам. Смотрю на работы конкурсные и радуюсь. Узнал из них много инересного и занимательного. Даже из комментариев «Автор неправ, надо использовать микросхему XXXX» узнал любопытные деталюшки. Думаю дай-ка и я пошлю одну свою разработку. Правда она делалась в начале весны и довольно простая по схемотехнике, ну да ничего.
Разработка эта … часы на ATmega8 …, шучу-шучу термометр-гигрометр с батарейным питанием на Atmega8. Подвигло на создание сей конструкции меня дача. Бываю там не каждый день, а температуру и влажность внутри помещения и снаружи интересно знать. Причем знать именно всю историю — как дача остывала, как грелась, какая температура была при этом на улице.
Детали были такие процессор ATMega8, датчик AM 2302 (DHT-22), spi flash M25P16 и дисплейчик от Nokia разрешением 96×48. Соединяем все это вместе, получаем схему с минимумом обвеса.
Выглядит сия поделка так. Есть еще уличный вариант, но он совсем непрезентабельный, чтобы висел и не привлекал внимания.
А вот и схема:
Транзистор нужен, чтобы датчик не кушал лишнее электричество. Кнопка — чтобы включать дисплей. Короткое нажатие — показать данные, длинное нажатие — включить подсветку.
Так как мой код и USB драйвера не влезали в ATMega8, то общение с компьютером происходит через програматор USBAsp. Там есть очень удобная команда прочитать/записать по SPI 4 байта. Ей и пользуемся для общения компьютер <-> девайс. Намучался с таким схемотехническим решением изрядно. Всетаки когда ATmega8 работает как мастер для LCD дисплея и SPI flash и в этот момент к нему пытается подключиться программатор по SPI — это гемморой. А если сюда еще подмешать power save режимы, то смесь получается адская. Но вроде тфу-тфу все баги выловил связанные с этим.
Вся логика работы с PC стороны написанна на python, с испоьзованием сторонних библиотек usb, PyQt4 и matplotlib. Так что теоретически должна работать под любой операционкой, где это есть. Основной скрипт с графической оболочкой — это main.py. Но некоторые редкоиспользуемые команды есть только в usb_commands.py. После сборки устройства и заливки программы, вынимаем перемычку JP1. После этого USBasp программатор пригоден для того, чтобы общаться с нашим устройством по SPI. Записываем в eeprom имя устройства. Делается это в командной строкой «usb_commands.py set_name device_name». Имя нужно для того, чтобы потом различать устройства и сливать данные в соответствующий файл. Далее пользуемся уже исключительно командным интерфейсом запуская файл main.py.
Так же надо установить время/дату на устройстве, иначе оно не будет писать во flash данные. Для этого жмем кнопку «Установить время». Время потом желательно обновлять иногда, а то например у меня часы убегают за месяц на 5 минут. Данные во flash пишутся раз в 6 часов, поэтому оставляем прибор на некоторое время и подключаемся к нему опять и жмем кнопку «Прочитать данные». После этого сможем воспользоваться левой частью меню, где есть просмотр данных. В папке graph/data есть данные за несколько месяцев с моих датчиков, так что можно запустить main.py и посмотреть как выглядят графики.
Вот типичный весенний день. Приехали на дачу, растопили печку, жена начала кашеварить (и соответственно повышать влажность). От топки печки повышается температура, а влажность снижается. От готовки еды влажностть и температура повышается. Там есть маленький пик начиная с 20-ти часов, это кипятили чайник. Так что на этом графике можно даже видеть когда чайник кипел и форточку открывали.
А вот уже погода на улице. Чудесная весенняя погода днем тепло и сухо, ночью бывают заморозки.
А вот летняя погода. Калининградский холод и влажность. Вобщем если не хотите заплесневеть — не селитесь на побережъе балтийского моря.
DS1307 — довольно прожорливая микросхема (в том виде как ее включил). Кушает постоянно 150 mka. Если прибавить сюда время от времени просыпающийся микроконтроллер, то средний ток потребления получается порядка 200 мка. Это немало для девайса на батарейках. Поэтому дешевую батарейку на 4.5 V сие чудо техники разряжает за два месяца. Купил потом батарейки подороже, они живут уже три с половиной месяца и пока не разрядились. Так-же скачут показания напряжения питания на +-0.1V. Это из-за того что питаю LCD дисплей через ножку микроконтроллера. Step-Up ковертор, встроенный в дисплей дает довольно сильные помехи на ADC. Еще неудобно, что надо нажимать на кнопку, чтобы посмотреть показания. Красивее выглядит, когда данные отображаются постоянно.
Хоть это устройство и делает все что нужно, но возобладало желание сделать еще лучше. Поэтому делаю еще один вариант, но на STM32L. Там будет все — и постоянная индикация, и потребление в 20 мка и USB интерфейс.
Так что STM32 — rulezzzz и To Be continued….
Файлы:
Схема и плата для Eagle
Исходники для ATmega8 и скрипты для PC
Все вопросы в Форум.
Как вам эта статья? | Заработало ли это устройство у вас? |
Эти статьи вам тоже могут пригодиться:
Метеостанция
Комплекс различных приборов (термометр, гигрометр, барометр и др.) для метеорологических измерений
2012 г.Метеостанция своими руками
Метеостанция построена на Picaxe микроконтроллере от Revolution Education Ltd и состоит из двух основных частей: наружный блок, который посылает свои данные каждые 2 секунды, используя передатчик на частоте 433МГц. И внутренний блок, который отображает полученные данные на 20 х 4 ЖК-дисплее, а также атмосферное давление, которое измеряется локально во внутреннем блоке.
Автор: none
6 5 [1]Похожие статьи:
Метеостанция + построение графика + C#
Метеостанция (влажность + температура). Связь с COM портом, передача данных на компьютер, обработка данных (хранение в файле) и построение по полученным данным график изменений.
Автор: alex-human
9 5 [1]Метеостанция на STM32
В данной статье пойдет речь, об одной из разновидностей метеостанций, построенной на основе платы miniSTM32, с добавкой внешней периферии: датчики температуры, влажности, давления. В основу работы метеостанции положена работа с ОС реального времени типа FreeRTOS.
Автор: Mih_Mih
2 5 [1]Похожие статьи:
Простая домашняя метеостанция
В статье описывается создание простой метеостанции на МК Ардуино, позволяющую измерять температуру, давление, влажность, качество воздуха, строить суточные графики изменения этих параметров и предупреждать об ухудшении качества воздуха.
Автор: DimaVolk
13 4.9 [2]Похожие статьи:
Как сделать погодную станцию своими руками
Вам понадобится
- — Плата Ардуино или аналог;
- — датчик температуры и влажности DHT11;
- — датчик давления BMP085;
- — датчик углекислого газа MQ135;
- — LCD дисплей 1602;
- — потенциометр 10 кОм;
- — корпус для погодной станции;
- — кусок фольгированного стеклотекстолита;
- — винты для крепления компонентов;
- — компьютер;
- — соединительные провода;
- — разъём для подачи питания;
- — паяльник.
Инструкция
Для начала нужно подобрать подходящий корпус. Туда должны вместиться все комплектующие будущей комнатной метеостанции. Такие корпуса продаются во многих магазинах радиоэлектроники. Или воспользуйтесь любым другим корпусом, который сможете найти.
Прикиньте, как все компоненты будут размещаться внутри. Прорежьте окно для закрепления LCD дисплея, если его нет. Если будете размещать внутри датчик углекислого газа, который достаточно сильно греется, то разместите его в противоположной от других датчиков стороне или сделайте его выносным. Предусмотрите отверстие для разъёма питания.
Несколько слов об используемых компонентах.
LCD-дисплей 1602 использует 6 пинов Arduino + 4 на питание (подсветка и знакосинтезатор).
Датчик температуры и влажности DHT11 подключается к любому цифровому пину. Для чтения значений будем использовать библиотеку DHT11.rar, которую можно скачать, например, тут: https://yadi.sk/d/1LiFmQWITGPAY
Датчик давления BMP085 подключается по интерфейсу I2C к двум пинам Arduino: SDA — к аналоговому пину A4 и SCL — к аналоговому пину A5. Обратите внимание, что для питания на датчик подаётся напряжение +3,3 В.
Датчик углекислого газа MQ135 подключается к одному аналоговому пину.
В принципе, для оценки метеообстановки достаточно иметь данные о температуре, влажности и атмосферном давлении, а датчик углекислого газа необязателен.
Но используя все 3 датчика, у нас будут задействованы 7 цифровых и 3 аналоговых пина Ардуино. Ну и питание, естественно.
Схема метеостанции показана на рисунке. Тут всё ясно.
Напишем скетч для Ардуино. Текст программы, ввиду значительного размера, приводится в виде ссылки в приложении к статье в разделе «Источники». Весь код снабжён подробными и понятными комментариями.
Загрузим скетч в память контроллера платы Ардуино.
Сделаем печатную плату для размещения компонентов внутри корпуса — это самое удобное решение для компоновки и подключения сенсоров. Для изготовления печатной платы в домашних условиях я использую «лазерно-утюжную» технологию (мы её подробно описывали в прошлых статьях) и травление с помощью лимонной кислоты. Предусмотрим на плате места для перемычек («джамперов»), чтобы иметь возможность отключать датчики. Это будет полезно, если будет нужно перепрограммировать микроконтроллер, когда возникнет желание модифицировать программу.
С помощью пайки установим датчики давления и газов.
Для установки платы Arduino Nano удобно использовать специальные адаптеры или гнёзда с шагом 2,54. Но за неимением этих деталей и из-за экономии пространства внутри корпуса, я установлю Ардуино также пайкой.
Термодатчик будет располагаться на некотором отдалении от платы и будет теплоизолирован от внутренностей метеостанции с помощью специальной изоляционной прокладки.
Предусмотрим места для подводки внешнего питания к нашей самодельной плате. Я буду использовать обычное зарядное устройство на 5 В от старого сломанного роутера. Плюс 5 вольт от зарядного устройства будут подаваться на пин Vin платы Arduino.
ЖК-экран будет крепиться винтами прямо к корпусу, к передней части. Подключаться будет проводами с разъёмами быстрого подключения типа «Dupont».
Установим печатную плату внутри корпуса и закрепим винтами. Подключим LCD-экран к ножкам Arduino согласно схеме.
Аккуратно закрываем корпус метеостанции.
Ещё раз перепроверив, что всё подключили правильно, подаём питание на нашу метеостанцию. ЖК-экран должен загореться, и через несколько секунд на нём появятся данные о давлении, небольшой прогноз, основанный на показаниях давления, а также данные о температуре, влажности и концентрации углекислого газа.
Работа с датчиком DHT11. Строим термометр-гигрометр на ATMEGA8
Привет любителям электроники!Сегодня я решил познакомиться с датчиком влажности DHT11, который также умеет измерять температуру. У него есть старший брат датчик DHT22 с более высокими показателями точности, большим размахом измерительной шкалы, и, конечно же, подороже своего младшего брата.
Т.к. проблематикой влажности я ранее не занимался, и мне не требовалась высокая точность, то по экономическим соображениям я и приобрёл датчик DHT11.
На фото роль датчика взял на себя микроконтроллер ATtiny13. Я написал тестовую программку, которая шлёт одни и те же данные. На тот момент, датчик путешествовал из Китая ко мне и, дабы успокоить свой азарт, я пошёл на такую хитрость.
После танцев с бубном и впитывания даташита, знакомство вполне состоялось. И в итоге я собрал портативное устройство, работающее от 3 пальчиковых батарей.
Содержание / Contents
Т.к. датчик я тогда ещё в руках не держал, то из даташита выяснил, что у него 4 ноги, а используются всего три из них. Почему Китайцы так сделали, одному Джеки Чану известно. Ну, да ладно.
Основные характеристики датчика DHT11
— диапазон измеряемой влажности: 20-95% RH (значение влажности в 8 бит)
— диапазон измеряемой температуры: 0-50°С (значение температуры также 8 бит)
— точность температурного сенсора: ±2°С
— точность сенсора влажности: ±5% RH
— шаг измеряемых значений: 1
— однопроводной протокол передачи данных
— частота измерений: 1 секунда
— напряжение питания: 3.5-5.5 V
— потребляемый ток в режиме измерения: 2 мА
— потребляемый ток в режиме ожидания: 150 мкА
Для опытов точность и цена датчика в самый раз, и я начал проектировать схему.
— устройство должно быть портативным;— иметь малые габариты;
— уметь работать долгое время, т.е. потреблять малый ток;
Значит, от семисегментных индикаторов лучше отказаться и применить индикатор на жидких кристаллах — ЖКИ.Т. к. датчик по сути своей цифровой, то потребуется микроконтроллер, с достаточным количеством выводов и обладающий способностью впадать в глубокий сон.
Тут задействован микроконтроллер (далее МК) ATMega8 в TQFP корпусе, работающий на частоте в 2 МГц от внутренней RC-генератора.
МК принимает данные с датчика DHT11, замеряет и показывает уровень заряда батарей в виде значка батарейки, и отправляет все полученные данные на символьный ЖКИ, у которого две строки по 8 символов.
Ещё МК слушает три кнопки, которые позволяют задать режим отображения данных на индикаторе, температура + влажность, только температура, только влажность. Так же реализован режим калибровки.Можно упомянуть про энергосбережение устройства. Как видно по схеме, МК управляет питанием датчика влажности и питанием ЖКИ.Т. к. устройство большую часть времени находится в состоянии покоя (не будет же человек смотреть на его показатели часами), то его смело можно перевести в режим глубоко сна, в котором он потребляет менее 4 мкА! Экономия энергии неплохая.
А когда необходимо увидеть показания, достаточно нажать на кнопку «PWR» и МК проснётся, подав питание на ЖКИ и датчик влажности.
Считывание данных из датчика происходит раз в секунду, во время этого процесса кратковременно вспыхивает светодиод «DHT».
Итак, появляется питание, МК считывает калибровочные значения из своей EEPROM и начинает ждать, пока датчик влажности отправит ему свои данные. Через секунду данные получены и МК рисует температуру и влажность на ЖКИ.
У нас есть три кнопки:
— кнопка «PWR»
— кнопка «С»
— кнопка «RH»
Кнопка «PWR» исполняет роль включателя/выключателя устройства. Если зажать кнопку «PWR», то появляется значок часов, который означает, что время отображения данных будет составлять 10 секунд и затем МК уснёт. Если значка нет, то сон отменяется, показ значений будет происходить постоянно, пока батареи не сядут.
Если нажать на кнопку «C», то режим отображения переключится на показ только температуры. Второе нажатие возвращает режим отображения на общий вид.
Аналогично и с кнопкой «RH»: показ только влажности или общий режим.
Если зажать обе кнопки «RH» и «C» вместе на пару секунд и отпустить, то запустится режим калибровки. Калибровка возможна в небольших пределах +/- 9 единиц, тут кнопки «C» и «RH» играют роль кнопок «-» и «+». Переключение по меню происходит кнопкой «PWR».
Собственно это всё, что заложено в МК в плане «2D-графики». Признаюсь, много времени ушло на прорисовку собственного символа батарейки, и особенно на жирный шрифт, т.к. памяти ОЗУ у ЖКИ всего на 8 символов, приходится постоянно её переписывать нужными рисунками.
Во время сборки устройства, я так был поглощён энтузиазмом, что не заметил, как мой рабочий стол превратился в СВАЛКУ! Не подумайте, что я постоянно сижу в таком бардаке, но когда начинаю творить, то да, одного стола мне мало!Корпус взял от Ethernet-сплиттера, печатную плату вытравил с двух сторон, на лицевой части находится основная часть электроники, а на задней датчик и коробочка для вставки батареек.
Собственно вот что вышло в итоге.
При правильном программировании МК и фьюзов устройство начинает работать, как только появляется питание.
Наладка устройства сводится к установлению уровня контрастности резистором RV1.
Фьюзы выставляются на тактирование от внутренней RC цепочки на 2 МГц, остальные остаются заводскими.
Прошивка для заливки (hex):▼ hex.zip 5,02 Kb ⇣ 39
Программа в CodeVision AVR 3.12 (исходники):
▼
source_code.zip
156,39 Kb ⇣ 55
Проект для опытов в Proteus v8.4 SP0:
▼
proteus.zip
25,59 Kb ⇣ 49
Печатная плата в SprintLayout v6.0:
▼
pcb.zip
31,9 Kb ⇣ 50
Термометр работает верно. Что касается точности измерения влажности, проверить её мне нечем. Медленно подув на датчик, вижу, как температура и влажность повышаются.
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Куплено и опробовано читателями или в лаборатории редакции.
Измеритель
TrH: домашний термометр и гигрометр с адаптивной регулировкой яркости, реализованный на 7-сегментных светодиодных дисплеях
Этот проект связан с созданием цифрового комнатного термометра и гигрометра на основе микроконтроллера, который отображает температуру и относительную влажность на 4 больших (1 дюйм) семисегментных светодиодных дисплеях, которые регулируют уровень яркости в соответствии с окружающим освещением. Он состоит из системы с обратной связью, которая непрерывно оценивает состояние окружающего освещения с помощью недорогого светозависимого резистора (LDR) и использует эту информацию для регулировки яркости дисплея.Недорогой датчик DHT11 используется для измерения температуры и относительной влажности. В этом проекте используется микроконтроллер PIC16F688, работающий на частоте 4 МГц, генерируемой внутренним источником. Отдельная микросхема драйвера дисплея (MAX7219) используется для управления и обновления данных дисплея на семи сегментных светодиодах.
TrH Meter: домашний термометр для дома и гигрометр
Зачем нужна адаптивная регулировка яркости?
Автоматическая регулировка яркости семи сегментных светодиодных дисплеев не только экономит электроэнергию, но и улучшает читаемость в любых условиях окружающего освещения.Многие смартфоны, телевизоры высокой четкости, КПК, планшеты и экраны компьютеров теперь оснащены этой функцией. Он в основном затемняет дисплей в темноте, но при этом остается читаемым и приятным для глаз. Точно так же, когда уровень окружающего освещения повышается, дисплей становится ярче, чтобы улучшить читаемость. В этом проекте температура и относительная влажность в помещении отображаются на больших 1-дюймовых семисегментных светодиодах, которые автоматически регулируют яркость в соответствии с условиями освещения в комнате. Итак, если вы поставите этот счетчик в спальне, вам не придется беспокоиться о том, чтобы выключить его в ночное время.Он автоматически станет достаточно тусклым, чтобы не мешать вашему сну, сохраняя при этом удобочитаемость.
Принципиальная схема
Чтобы упростить объяснение, я разделил полную принципиальную схему на 3 части: Блок питания , Блок микроконтроллера и датчика и Блок драйвера дисплея .
Блок питания состоит из микросхемы регулятора LM7805 для получения стабилизированного источника питания + 5В от настенного адаптера постоянного тока 9-15В.Полная принципиальная схема блока питания представлена ниже. LED1 — это светодиодный индикатор включения питания.
Блок питания + 5В регулируемый
На следующей принципиальной схеме показаны подключения датчика DHT11 и фоторезистора (также называемого светозависимым резистором или LDR) к микроконтроллеру PIC16F688. DHT11 — это недорогой цифровой датчик для измерения температуры от 0 до 50 ° C с точностью ± 2 ° C и относительной влажности от 20 до 95% с точностью ± 5%. Датчик имеет полностью откалиброванные цифровые выходы и имеет собственный запатентованный протокол 1-Wire для связи.Я описал больше об этом датчике и его протоколе связи в Измерение температуры и относительной влажности с использованием датчика DHT11 и микроконтроллера PIC. PIC16F688 использует контакт ввода / вывода RC4 для чтения выходных данных DHT11. Обратите внимание, что R7 служит подтягивающим резистором, необходимым для вывода данных датчика DHT11. Переключатель S2 на принципиальной схеме предназначен для выбора между градусами Фаренгейта (° F) и градусами Цельсия (° C) для отображения температуры. Когда переключатель разомкнут, контакт RC3 по умолчанию опущен на низкий уровень, а температура отображается в градусах Фаренгейта.Чтобы выбрать шкалу ° C, вывод RC3 должен быть поднят вверх, что происходит, когда S2 замкнут.
Затем фоторезистор (R5) и R4 образуют сеть делителя напряжения, как показано на схеме. Аналоговое напряжение на R4 увеличивается пропорционально количеству света, падающего на фоторезистор. Сопротивление типичного фоторезистора меньше 1 К? при ярком освещении. Его сопротивление может доходить до нескольких сотен К? в очень темном состоянии. Следовательно, для данной схемы напряжение на резисторе R4 может изменяться от менее 0.От 1 В (в темноте) до более 4,0 В (при очень ярком освещении). Микроконтроллер PIC16F688 считывает это аналоговое напряжение через свой канал АЦП AN2 (RA2) для определения уровня окружающей освещенности.
Схема микроконтроллера
Блок дисплея состоит из микросхемы MAX7219, которая может напрямую управлять до восьми 7-сегментных светодиодных дисплеев (с общим катодом) через 3-проводный последовательный интерфейс. В микросхему включены декодер BCD, схема мультиплексного сканирования, драйверы сегментов и цифр, а также статическое ОЗУ 8 × 8 для хранения цифровых значений.Ток сегмента для всех светодиодов устанавливается только через один внешний резистор, подключенный между выводом ISET и источником питания. Устройство также обеспечивает 16-ступенчатую регулировку яркости с помощью программного обеспечения с использованием внутреннего широтно-импульсного модулятора. Чтобы узнать больше об устройстве MAX7219, прочитайте мою предыдущую статью Последовательный 4-значный семисегментный светодиодный дисплей. В этом проекте выводы RC0, RC1 и RC2 I / O PIC16F688 используются для управления сигнальными линиями DIN, LOAD и CLK MAX7219.
Схема дисплея
Вот полная схема проектной схемы на перфорированной макетной плате общего назначения.
Схема на перфорированной макетной плате общего назначения
Полная установка
Программное обеспечение
Прошивка PIC разработана на языке C и скомпилирована с помощью mikroC Pro для компилятора PIC версии 5.30. Подпрограммы для инициализации MAX7219 и отправки байтов отображаемых данных написаны простым и понятным способом, поэтому при необходимости их можно легко реализовать с помощью любого другого языка программирования. MAX7219 позволяет программно регулировать яркость дисплея с помощью внутреннего широтно-импульсного модулятора (ШИМ).Выход ШИМ управляется нижним полубайтом (D3-D0) регистра интенсивности (адрес 0x0A) и допускает 16 уровней яркости. Нулевое значение полубайта устанавливает минимальную яркость дисплея, тогда как все полубайтовые биты, установленные на 1 (0x0F), выбирают максимальный уровень интенсивности для дисплея. Для автоматического управления яркостью 10-битный счетчик АЦП (0-1023), соответствующий выходному напряжению фоторезистора, уменьшается до 0-19 путем деления счетчика на 50 (20 уровней яркости между 0-1023). Затем используется справочная таблица для сопоставления масштабированных уровней яркости с соответствующими значениями полубайтов для регистра управления яркостью MAX7219.Температура отображается в шкале Фаренгейта (° F), если RC3 опущен на низкий уровень, и в шкале Цельсия (° C), если RC3 высокий. Измерение относительной влажности отображается в процентах (P). Микроконтроллер попеременно переключает отображаемые данные между температурой и относительной влажностью.
// Определение соединений Soft-SPI для светодиодного дисплея #define MOSI_Pin RC0_bit #define CS_Pin RC1_bit #define CLK_Pin RC2_bit // Определение вывода данных для DHT11 #define Data RC4_bit #define DataDir TRISC4_bit #define FC_Select RC3_bit // Выбор по Фаренгейту или Celcious беззнаковый короткий TOUT = 0, CheckSum, i, check, u, NumSamples; беззнаковый короткий T_Byte1, T_Byte2, RH_Byte1, RH_Byte2; unsigned long int яркость = 0x0b; unsigned int counter = 0, TempF, TempC, RH, ADC_OP, TempSum, RHSum; // Справочная таблица яркости unsigned short Таблица яркости [21] = {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 15, 15} ; void SPI_Write_Byte (короткое беззнаковое число) { беззнаковый короткий t, маска, флаг; CLK_Pin = 0; Маска = 128; для (t = 0; t & gt; 1; } } void MAX7219_INIT () { // Отключить режим выключения CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x0C); // Выбираем регистр выключения SPI_Write_Byte (0x01); // Устанавливаем бит D0 для возврата к нормальной работе CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ // Устанавливаем режим декодирования BCD для цифр DIG1-DIG3 и DIG5-DIG7 CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x09); // Выбираем регистр режима декодирования SPI_Write_Byte (0b00001100); // Отключить режим BCD для цифр DIG0, DIG1 CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ // Устанавливаем яркость дисплея CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x0A); // Выбираем регистр интенсивности SPI_Write_Byte (яркость); // Устанавливаем яркость CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ // Устанавливаем обновление дисплея CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x0B); // Выбираем регистр Scan-Limit SPI_Write_Byte (0x03); // Выбираем цифры DIG0-DIG3 CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ // Включить Display-Test CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x0F); // Выбираем регистр Display-Test SPI_Write_Byte (0x01); // Включить Display-Test CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ Delay_ms (1000); // Отключить Display-Test CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x0F); // Выбираем регистр Display-Test SPI_Write_Byte (0x00); // Отключить Display-Test CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ } void Display_Value (unsigned int j, unsigned short k) { CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (4); // Отправляем тысячу цифр SPI_Write_Byte ((j / 100)% 10); CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (3); // Отправляем сотню цифр SPI_Write_Byte (((j / 10)% 10)); CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (2); // Отправляем цифру десятков if (k 40) num | = 1 & lt; 40us, Данные равны 1 } return num; } void interrupt () { если (PIR1.TMR1IF) { TOUT = 1; T1CON.TMR1ON = 0; // остановка таймера PIR1.TMR1IF = 0; // Очистить флаг прерывания TMR0 } } void Display_Brightness () { ADC_OP = ADC_Read (2); Яркость = ADC_OP / 50; CS_Pin = 0; // Вывод CS вытягивается НИЗКОМ SPI_Write_Byte (0x0A); // Выбираем регистр интенсивности SPI_Write_Byte (Brightness_Table [яркость]); // Обновляем яркость CS_Pin = 1; // Вывод CS переведен в ВЫСОКОЕ } void Wait_Nsec () { Delay_ms (3000); } пустая функция() { ANSEL = 0b00000100; // RA2 / AN2 - аналоговый вход CMCON0 = 0x07; // Отключить компараторы TRISC = 0b00001000; // PORTC Все выходы, кроме RC3 TRISA = 0b00001110; // ПОРТА Все выходы, кроме RA3 и RA2 ИНТКОН.ЭДД = 1; // Разрешить глобальное прерывание INTCON.PEIE = 1; // Разрешить периферийное прерывание // Настраиваем модуль Timer2 PIE1.TMR1IE = 1; // Разрешить прерывание от Timer2 T1CON = 0; // Предделитель 1: 1, и Таймер 2 изначально выключен PIR1.TMR1IF = 0; // Очистить бит флага TMR INT TMR1H = 0; TMR1L = 0; MAX7219_INIT (); // инициализируем max7219 если (! FC_Select) Display_Value (0, 0); если (FC_Select) Display_Value (0, 1); делать{ NumSamples = 0; TempSum = 0; RHSum = 0; для (u = 0; u |
Скачать исходный код и файлы HEX
Микроконтроллер PIC16F688 работает на частоте 4.Внутренние часы 0 МГц. Включены MCLR и таймер включения питания (PWRT).
Выход
Проект был протестирован при различных условиях внутреннего освещения, от очень темного до очень яркого. Дисплей оказался одинаково хорошо читаемым и приятным для глаз в любых условиях. Я положил его в спальню, и ночью дисплей автоматически тускнеет настолько, чтобы не мешать сну, в то время как я все еще могу читать показания температуры и влажности в темноте.
Относительная влажность в процентах (P)
Температура отображается в градусах Фаренгейта (F)
Обновление
Сейчас я продаю полный комплект этого проекта (с предварительно запрограммированными микроконтроллерами PIC16F688) на Tindie. Если вам интересно, вы можете заказать его здесь:
Ссылка для заказа Tindie: https://www.tindie.com/products/rajbex/pre-order-trh-meter-kit-3/
Версия для печатной платы использует ту же принципиальную схему, что и описанная выше, за исключением использования AMS1117-5.0 вместо LM7805. Вот изображение собранной доски проекта. Инструкции по пайке для этого набора доступны здесь .
Доска проекта в сборе
Похожие сообщения
Создайте гигрометр дома, используя Raspberry Pi и SI7021: 6 шагов
Не зная точных деталей, их стоимости и того, где их взять, это действительно раздражает. Не волнуйся. Мы сделали это для вас.После того, как вы получите все детали в квадрате, приступайте к работе над этим проектом.
1. Raspberry Pi
Первым шагом было получение платы Raspberry Pi. Raspberry Pi — это одноплатный компьютер на базе Linux. Этот маленький ПК обладает огромной вычислительной мощностью, используемой в проектах электроники, и простыми операциями, такими как электронные таблицы, обработка текста, просмотр веб-страниц, электронная почта и игры.
2. I²C Shield для Raspberry Pi
По нашему мнению, единственное, чего действительно не хватает Raspberry Pi 2 и Pi 3, — это порт I²C.INPI2 (адаптер I2C) предоставляет Raspberry Pi 2/3 порт I²C для использования с несколькими устройствами I²C. Он доступен в Dcube Store.
3. Датчик влажности и температуры SI7021
Датчик влажности и 2-зонной температуры SI7021 I²C представляет собой монолитную ИС CMOS, объединяющую элементы датчиков влажности и температуры, аналого-цифровой преобразователь, обработку сигналов, данные калибровки, и интерфейс I²C. Мы приобрели этот датчик в Dcube Store .
4. Соединительный кабель I²C
У нас был соединительный кабель I²C, доступный в DcubeStore .
5. Кабель Micro USB
Наименее сложным, но самым строгим с точки зрения требований к питанию является Raspberry Pi! Самый простой способ подключить Raspberry Pi — через кабель Micro USB.
6. Кабель Ethernet (LAN) / USB-адаптер WiFi
Вы когда-нибудь смотрели на свою жизнь и думали, что Интернет сделал со мной?
Классический способ подключить Raspberry Pi — использовать кабель Ethernet и подключить его к сетевому маршрутизатору.Кроме того, подключение к Wi-Fi можно выполнить, подключив ключ WiFi и щелкнув левой кнопкой мыши значок сети, чтобы открыть список доступных сетей Wi-Fi.
7. Кабель HDMI / удаленный доступ
С помощью кабеля HDMI на плате вы можете подключить его к цифровому телевизору или к монитору . Хотите экономного пути! Доступ к Raspberry Pi можно получить удаленно, используя различные методы, такие как SSH и доступ через Интернет. Вы можете использовать программное обеспечение с открытым исходным кодом PuTTY.
Ненавижу математику, но люблю считать деньги.
Гигрометры: предостережение — Новости
Наше (своего рода) эпическое путешествие о том, как правильно обращаться с датчиками влажности.
Кинч 13 марта 2013 г., 6:00 UTC 20 Добавлено в избранное Любимый 2 Гигрометры, или датчики влажности, как их чаще называют, не являются особенно захватывающими темами для обсуждения на большинстве вечеринок, но это не делает их менее полезными или менее интересными для таких гиков, как мы.Они тоже есть практически повсюду — медицинское, климатическое и метеорологическое оборудование — вот лишь несколько мест, где вы их найдете.
Для DIYers и клиентов SparkFun наиболее распространенным приложением является последнее, хотя, если я и чему-то научился, работая здесь последние несколько лет, так это никогда не недооценивать изобретательность хакера выходного дня — кто знает, какое применение вы придете. с. По этой причине, среди многих других, мы хотим убедиться, что вы получаете то, за что платите, когда что-то покупаете у нас.Мы не всегда можем точно предсказать, как вы собираетесь использовать наши продукты, но мы понимаем, что, по крайней мере, для производителей и хакеров, мало что может быть хуже, чем покупка чего-либо, встраивание в проект, а затем обнаружение, что это не так » t преформировать так, как должно. На этой ноте я с сожалением должен сказать, что до конца 2011 года мы совершенно не подозревали, что упускали из виду необходимую процедуру после сборки наших датчиков влажности — регидратацию.
Эти штуки до чертиков полезны.
Видите ли, два наиболее распространенных типа датчиков влажности, по крайней мере, в нашей сфере деятельности, — это емкостные датчики влажности и резистивные датчики влажности, оба из которых, как правило, используют проводящие полимеры для измерения относительной влажности. Емкостный тип определяет относительную влажность окружающей среды путем измерения диэлектрической проницаемости этого полимера, что является причудливым способом сказать, что он использует соотношение между емкостью конденсатора с этим полимером между двумя его плоскостями и емкостью конденсатора. конденсатор с вакуумом между двумя его плоскостями.В датчиках влажности резистивного типа изменение электрического сопротивления этого полимера в зависимости от температуры используется в качестве основного инструмента измерения. В любом случае, этот полимер важен для дизайна и функциональности, и если он высохнет, точность показаний будет отрицательно сказана. Откуда нам это знать? Введите данные всемогущего:
Поклонись даташиту.
Это правда, что иногда эти вещи не самые хорошо написанные части технической треп, но можно с уверенностью предположить, что если в таблице данных для этой части указано, что нужно заботиться о ней определенным образом, вы должны это сделать.В этом случае таблица данных для каждого из имеющихся у нас датчиков влажности рекомендует «повторно кондиционировать» детали после заполнения в течение примерно 12 часов в замкнутом пространстве при относительной влажности 75%. Регидратация становится особенно важной, если учесть, что мы пропускаем эти плиты через печь оплавления, где температура превышает 260 градусов по Цельсию. А мы живем в Колорадо, в среднем очень засушливом штате. Итак, регидратация — это то, чем мы должны были заниматься все время. Почему не были? Трудно сказать, правда.Я не собираюсь оправдываться. Важно то, что мы этого не делали. Это наша проблема, и мы очень сожалеем о оплошности.
Тем не менее, я могу заверить вас, что мы уже некоторое время повторно увлажняем каждый датчик влажности, который мы устанавливаем. Теперь мы используем паяльную пасту без очистки на всех этих продуктах, чтобы платы не подвергались чрезмерному воздействию влаги, так как это тоже может повредить компонент. После постройки каждая доска проводит вышеупомянутые 12 часов (как минимум) в среде с контролируемой влажностью.Что мы используем, спросите вы? На самом деле, это самая интересная часть этой истории. Нам нужно было замкнутое пространство, которое могло бы контролировать и поддерживать относительную влажность внутри на стабильном процентном уровне на неопределенный срок. Он также должен был хранить приличное количество печатных плат. Я уверен, что мы могли бы купить что-то, что делает это, но это не так весело, как построить это самостоятельно, не так ли?
Можно было бы купить стандартный хьюмидор для сигар, но просто покупать что-то скучно.
Изначально мы использовали пластиковые контейнеры и увлажняющие пакеты в качестве немедленного, хотя и временного решения. Осознавая, что мы можем улучшить процесс, мы попросили нашего инженера-механика Пола Смита разработать более надежное решение. Пол взял наши подробные спецификации для такого устройства (мы примерно сказали ему, сколько полок нам нужно), и, спустя некоторое время в мехшопе, он создал El Cubano! По сути, это хьюмидор для заполненных печатных плат! Он даже был достаточно любезен, чтобы написать руководство, документирующее процесс сборки! Вы можете проверить это здесь.
¡Viva el Cubano!
Мораль этой истории (извините, что получил весь «Фул Хаус» на вас) заключается в том, что мы не знали об этой проблеме, пока клиенты не высказались в комментариях. Мы любим делиться с нашими клиентами всем, чем можем, и всегда ищем способы улучшить качество наших продуктов. Вот почему мы поощряем диалог и рассматриваем Sparkfun не только как бизнес, но и как на сообщество. Ты делаешь нас лучше. Это правда.Так что спасибо, что держите нас в тонусе!
Датчик влажностис использованием микроконтроллера 8051 — Измерение влажности
Датчик влажности с использованием 8051 (гигрометр)
Этот проект представляет собой простой датчик влажности на базе микроконтроллера 8051. Датчик влажности еще называют гигрометром. Этот контур может определять относительную влажность (RH) от 20% до 95% с точностью до 5%. Информация о влажности отображается на ЖК-дисплее 16 × 2. Также предусмотрено реле, которое активируется, когда влажность пересекает определенную точку срабатывания.Схема работает от сети и очень проста в установке. Здесь используется датчик влажности DHT11. Подробная информация о датчике влажности DHT11 и его работе приведены ниже.
Датчик влажности DHT11.
DHT11 — недорогой датчик влажности и температуры с цифровым выходом. Емкостной метод используется для измерения влажности, а термистор используется для измерения температуры. Датчик может определять относительную влажность от 20% до 95% с разрешением 5%.Измерение температуры до 50 ° C с разрешением 2 ° C. Связь с микроконтроллером осуществляется по одному проводу. Базовая схема связи представлена на изображении ниже.
Обмен данными с датчиком DHT11 очень прост. Контакт 2 DHT11 подключен к контакту порта микроконтроллера. Схема подключения представлена на изображении ниже. Для вывода данных (вывод 2) DHT11 требуется внешний подтягивающий резистор 10 кОм.
Протокол связи объясняется следующим образом.MCU (блок микроконтроллера) сначала отправляет сигнал низкого уровня шириной 18 мс на DHT11. После этого сигнала MCU подключает линию связи и ожидает ответа от DHT11. Это занимает от 2 до 40 мкс. Затем DHT11 отключает линию связи и удерживает ее на низком уровне в течение 80 мкс. Затем DHT11 подтягивает линию и поддерживает ее на уровне 80 мкс. Затем DHT опускает линию на 50 мкс, и следующий высокий импульс будет первым битом данных. Данные отправляются пакетами по 8 бит. Каждый высокий импульс пакета указывает на сигнал данных.Сигналы низкого уровня 50 мкс между битами данных являются просто разделителями. Логика бита данных определяется путем измерения его ширины. Импульс шириной от 26 до 28 мкс означает «НИЗКИЙ», а импульс шириной 70 мкс — «ВЫСОКИЙ». Проще говоря, импульс меньше 50 мкс можно принять как «НИЗКИЙ», а шире 50 мкс — как «ВЫСОКИЙ». Первые 8 бит пакета данных представляют собой интегральное значение относительной влажности, вторые 8 бит представляют десятичное значение относительной влажности, третьи 8 бит представляют собой интегральное значение данных температуры, а последние 8 бит представляют десятичное значение. данных о температуре. Для DHT11 десятичные значения всегда равны нулю, и мы измеряем относительную влажность только в этом проекте.Поэтому нам нужно просто позаботиться о первых 8 битах данных, которые являются неотъемлемой частью данных относительной влажности. Принципиальная схема датчика влажности показана на изображении ниже.
Принципиальная схема.
Датчик влажности DHT11 подключен к P3.1 микроконтроллера 8051. R8 подтягивает линию связи между DHT11 и 8051. Реле управляется с помощью P2.0 микроконтроллера. Транзистор Q1 переключает реле. R0 — это подтягивающий резистор, а R7 ограничивает базовый ток Q1.D5 — это просто безынерционный диод. Строки данных ЖК-дисплея подключены к порту 0 микроконтроллера. Линии управления RS, R / E и E подключены к контактам P2.7, P2.6 и P2.5 микроконтроллера соответственно. R4 устанавливает контрастность дисплея. R5 ограничивает ток через светодиод подсветки. C9 — байпасный конденсатор. C8, C10 и X1 связаны со схемой часов. C11, R6 и S2 образуют цепь сброса.
Программа.
RS EQU P2.7 RW EQU P2.6 E EQU P2.5 ORG 000H MOV DPTR, # LUT SETB P3.5 CLR P2.0 MOV TMOD, № 00100001B MOV TL1, # 00D ACALL DINT ACALL TEXT1 ГЛАВНАЯ: MOV R1, # 8D SETB P3.5 CLR P3.5 ACALL DELAY1 SETB P3.5 ЗДЕСЬ: JB P3.5, ЗДЕСЬ ЗДЕСЬ1: JNB P3.5, ЗДЕСЬ1 ЗДЕСЬ2: JB P3.5, ЗДЕСЬ2 ПЕТЛЯ: JNB P3.5, ПЕТЛЯ RL A MOV R0, A SETB TR1 ЗДЕСЬ4: JB P3.5, ЗДЕСЬ4 CLR TR1 MOV A, TL1 ПОДБ А, №50Д MOV A, R0 JB PSW.7, СЛЕДУЮЩИЙ SETB ACC.0 SJMP ESC ДАЛЕЕ: CLR ACC.0 ESC: MOV TL1, # 00D CLR PSW.7 DJNZ R1, ПЕТЛЯ ACALL DINT ACALL TEXT1 ACALL LINE2 ACALL TEXT2 НАЗВАТЬ HMDTY ACALL CHECK ACALL DELAY2 LJMP ГЛАВНАЯ ЗАДЕРЖКА1: MOV TH0, # 0B9H MOV TL0, # 0B0H SETB TR0 ЗДЕСЬ5: JNB TF0, ЗДЕСЬ5 CLR TR0 CLR TF0 RET ЗАДЕРЖКА 2: MOV R1, # 112D НАЗАД: ЗАДЕРЖКА НАЗВАНИЯ1 DJNZ R1, НАЗАД RET ПРОВЕРИТЬ: MOV A, R0 MOV B, # 65D ПОДБ А, Б JB PSW.7, NEXT1 ACALL TEXT3 SETB P2.0 SJMP ESC1 NEXT1: ACALL TEXT4 CLR P2.0 ESC1: CLR PSW.7 RET CMD: MOV P0, A CLR RS CLR RW SETB E CLR E ACALL DELAY RET ДИСПЛЕЙ: MOV P0, A SETB RS CLR RW SETB E CLR E ACALL DELAY RET HMDTY: MOV A, R0 MOV B, # 10D DIV AB MOV R2, B MOV B, # 10D DIV AB ACALL ASCII ДИСПЛЕЙ ACALL MOV A, B ACALL ASCII ДИСПЛЕЙ ACALL MOV A, R2 ACALL ASCII ДИСПЛЕЙ ACALL MOV A, # "%" ДИСПЛЕЙ ACALL RET ТЕКСТ1: MOV A, # "H" ДИСПЛЕЙ ACALL MOV A, # "y" ДИСПЛЕЙ ACALL MOV A, # "g" ДИСПЛЕЙ ACALL MOV A, # "r" ДИСПЛЕЙ ACALL MOV A, # "o" ДИСПЛЕЙ ACALL MOV A, # "м" ДИСПЛЕЙ ACALL MOV A, # "e" ДИСПЛЕЙ ACALL MOV A, # "t" ДИСПЛЕЙ ACALL MOV A, # "e" ДИСПЛЕЙ ACALL MOV A, # "r" ДИСПЛЕЙ ACALL RET ТЕКСТ2: MOV A, # "R" ДИСПЛЕЙ ACALL MOV A, # "H" ДИСПЛЕЙ ACALL MOV A, # "" ДИСПЛЕЙ ACALL MOV A, # "=" ДИСПЛЕЙ ACALL MOV A, # "" ДИСПЛЕЙ ACALL RET ТЕКСТ3: MOV A, # "" ДИСПЛЕЙ ACALL MOV A, # "" ДИСПЛЕЙ ACALL MOV A, # "O" ДИСПЛЕЙ ACALL MOV A, # "N" ДИСПЛЕЙ ACALL RET ТЕКСТ4: MOV A, # "" ДИСПЛЕЙ ACALL MOV A, # "O" ДИСПЛЕЙ ACALL MOV A, # "F" ДИСПЛЕЙ ACALL MOV A, # "F" ДИСПЛЕЙ ACALL RET DINT: MOV A, # 0CH ACALL CMD MOV A, # 01H ACALL CMD MOV A, # 06H ACALL CMD MOV A, # 83H ACALL CMD MOV A, # 3CH ACALL CMD RET LINE2: MOV A, # 0C0H ACALL CMD RET ЗАДЕРЖКА: CLR E CLR RS SETB RW MOV P0, # 0FFH SETB E MOV A, P0 JB ACC.7, ЗАДЕРЖКА CLR E CLR RW RET ASCII: MOVC A, @ A + DPTR RET LUT: DB 48D DB 49D DB 50D DB 51D DB 52D DB 53D DB 54D DB 55D DB 56D DB 57D КОНЕЦ
Связанные проекты
Автоматическая система полива растений с использованием 8051 — интересный и полезный проект для реализации в домашних условиях. В проекте используется датчик влажности YL69 и микроконтроллер 8051 для завершения системы.Влажность почвы измеряется датчиком YL69, и на основании измеренного уровня влажности двигатель включается / выключается с помощью датчика 8051.
О программе.
Протокол связи с датчиком и микроконтроллером уже объяснен. Вывод данных DHT11 подключен к P3.5 микроконтроллера. В начале ГЛАВНОГО цикла P3.5 удерживается на высоком уровне. Затем он становится низким и вызывается процедура задержки 18 мс (DELAY1). Тогда P3.5 становится высоким.Это формирует первый сигнал пуска шириной 18 мс для DHT11. Теперь линия связи имеет высокий уровень, и микроконтроллер опрашивает состояние этой линии и ожидает, пока он не станет низким. Он становится низким, когда DHT11 отправляет ответный сигнал. Затем микроконтроллер ожидает второго ответного сигнала, который является сигналом высокого уровня. Когда получен этот высокий сигнал, микроконтроллер ожидает следующего низкого сигнала, и после этого низкого сигнала начинается передача данных.
Я уже упоминал, что каждый бит данных представлен высоким сигналом, и его ширина определяет логику.Поэтому, когда микроконтроллер получает импульс данных, запускается Timer1, и программа ждет там, пока импульс данных не исчезнет. Затем таймер останавливается. Теперь младший регистр TL1, то есть таймера 1, содержит ширину импульса данных. Затем ширина сравнивается с 50 путем вычитания 50 из счетчика TL1. Если установлен флаг переноса (PSW.7), это означает, что ширина меньше 50 мкс, а если флаг переноса не установлен, это означает, что ширина больше 50 мкс.
Если ширина меньше 50 мкс, это указывает на низкий уровень сигнала и ACC.0 очищен. Если ширина превышает 50 мкс, это указывает на высокий уровень сигнала и установлен ACC.0. Затем очищаются регистр TL1 и бит PSW.7. Затем цикл повторяется 8 раз, и в начале каждой итерации аккумулятор поворачивается влево. Команда поворота влево (RL) используется потому, что во время каждой итерации вы обновляете только ACC.0, и вы должны сохранять этот бит перед следующим обновлением. Это достигается путем смещения его влево каждый раз.
Последнее обновление ACC.0 не требует сдвига позиции, потому что оно находится в нужном месте, как и должно быть.Это причина помещения инструкции RL A в начало LOOP. После 8-й итерации LOOP завершается без вращения аккумулятора. Теперь содержимое аккумулятора равно интегральному значению текущей относительной влажности в процентах.
Затем вызывается подпрограмма DINT для инициализации дисплея. Затем вызывается подпрограмма TEXT1, которая отображает «Гигрометр». Затем вызывается подпрограмма LINE2 для перемещения курсора на вторую строку. Затем вызывается подпрограмма HMDTY для отображения значения влажности в процентах.Затем вызывается подпрограмма CHECK для проверки того, является ли значение влажности выше или ниже 65%. Если влажность выше 65%, реле активируется, в противном случае реле деактивируется. Вызывается подпрограмма задержки 2S DELAY2. Задержка составляет 2 секунды, потому что вы можете снимать рейды с DHT11 только один раз в 2 секунды. Это также делает дисплей стабильным. Затем программа переходит к ГЛАВНОЙ метке, и весь процесс повторяется.
Простая метеостанция (термометр + гигрометр + барометр) с AVR
Простая метеостанция (термометр + гигрометр + барометр) с AVR Введение:
Эта простая самодельная метеостанция может измерять и отображать все основные метеорологические переменные —
температура воздуха (термометр), относительная влажность (гигрометр) и атмосферное давление (барометр).Позволяет установить ориентацию прогноза погоды.
Для всех трех измеренных значений сохраняются минимум и максимум, которые можно отобразить или сбросить с помощью кнопок.
Описание:
Схема управляется микропроцессором IO4 — Atmel AVR ATmega8, ATmega8A или ATmega8L.
Температура измеряется интегральной схемой IO3 LM35. Это обеспечивает
выходное напряжение линейно зависит от температуры с коэффициентом 10 мВ / ° C.
В качестве датчика влажности IO2 я использовал встроенный датчик HIH-5030 (также можно использовать улучшенный HIH-5031).Давление измеряется схемой IO1 — встроенным датчиком давления MPXH6115A. Вы также можете использовать MPXHZ6115A, MPXA6115A, MPXAZ6115A или MPX4115A.
Термометр измеряет температуру в помещении в диапазоне 2,0 … 99,9 ° C. Измеритель влажности (гигрометр) измеряет относительную влажность в диапазоне 1 … 99%.
Барометр измеряет давление воздуха в гектопаскалях в диапазоне 150 … 1150 гПа (1 гПа = 1 мбар = 0,75 торр = 0,75 мм рт. Ст. = 0,02953 дюйма рт. Ст.).
Для просмотра значений используется светодиодный дисплей. В барометре используется четырехзначный дисплей, двухзначный гигрометр и трехзначный дисплей термометра.Дисплеи управляются мультиплексированием как один 9-значный дисплей. Катоды подключены к порту D,
аноды ко всему порту B и выводу PC5 через транзисторы усиления тока T1 … T9. Частота мультиплексирования около 100 Гц.
R1 – R8 определяют ток дисплея и, следовательно, яркость.
Для измерения аналоговых сигналов используются три несимметричных входа 10-битной схемы аналого-цифрового преобразователя ATmega8 (A) (L).
При измерении каждой переменной всегда берутся больше выборок и усредняются для устранения случайных ошибок (шума).AVR IO4 использует встроенный RC-генератор, работающий на частоте 1 МГц, в качестве тактовой частоты источника. Кристалл не нужен — частота
не критично для аналого-цифрового преобразователя (АЦП). Метеостанция питается от стабилизированного источника питания 5 В с регулятором 7805 в типичном применении.
Измерение:
Первая часть дисплея показывает температуру, вторая — относительную влажность, а третья — атмосферное давление.
Если значение вне допустимого диапазона или датчик неисправен
(неожиданное входное напряжение от ADC0 до ADC2) отображается символ «_» (значение меньше допустимого диапазона) или «‾» (значение выше допустимого диапазона).Данные обновляются каждые 3-4 секунды.
Мин / макс память:
Метеостанция отслеживает и сохраняет все измеренные значения для максимального и минимального значения. Это можно увидеть, нажав кнопки
МИН или МАКС. Через мгновение после отпускания кнопки фактическое значение снова отображается.
Память для минимумов и максимумов может быть сброшена одновременным нажатием обеих кнопок. Примечание: мониторинг мин. И макс.
начинается после задержки в 15 секунд с момента включения метеостанции, чтобы избежать сохранения бессмысленных значений сразу после включения,
когда цепь еще не урегулирована.
исходный код на ассемблере (ASM)
скомпилирован в HEX-файле (1028 байт)
Как записать программу в AVR описано здесь . Могу послать вам запрограммированный микроконтроллер. Для дополнительной информации щелкните здесь.
Схема простой метеостанции (градусник + гигрометр + барометр) с АРН
Установка битов конфигурации.
(Шестнадцатеричные значения: Low Fuse: 21 , High Fuse: D9 .)
Тестируем метеостанцию в макете. Отображение данных по порядку: температура (° C), относительная влажность (%), атмосферное давление (гПа).
Примечание: цифра слева не связана.
Датчик давления MPXH6115A с переходником SMD-THT.
Датчик относительной влажности HIH-5030 и плата готовы к установке адаптера SMD-THT.
Датчик относительной влажности с адаптером
Датчик давления, влажности и температуры (LM35) и часть AVR ATmega8 в макете.
Метеостанция припаяна к макетной плате.
Дисплеи метеостанции (T-5631BUY-11, LD-D056UR-C, 2x LD-D028UG-C).
Самодельная метеостанция в действии
Печатная плата снизу.
Датчики
Готовая метеостанция своими руками в коробке для дискет.
Видео — тестирование метеостанции с AVR.
Добавлен: 10. 7. 2013
дом
Как работают гигрометры | Измерение влажности
Как работают гигрометры | Измерение влажности — объясните, что вещи РекламаКриса Вудфорда.Последнее изменение: 21 июня 2021 г.
Если вы когда-либо были в засушливой пустыне или в палящей палящей жаре тропического леса, вы наверняка это запомните. Что делает эти В экстремальных условиях настолько отличаются друг от друга их влажность : количество водяного пара в атмосфере. Пустыни, очевидно, содержат мало или совсем не содержат воды, во время похода по тропическому лесу может чувствовать себя как будто идете под душем. Измерение влажности — это неотъемлемая часть прогноза погоды, а также очень полезна для садовники с теплицами и люди, которые управляют саунами.Мы можем сделать это просто и качественно с хитрыми приборами под названием гигрометры . Давайте посмотрим, как они работают!
Фото: Традиционный погодный дом в стиле Шварцвальда построен на очень простом гигрометре. Женщина (слева) и мужчина (справа) стоят на вращающейся платформе, поддерживаемой скрученным волокном (оранжевого цвета). Когда влажность высока в сырую погоду, волосы распускаются, и поворотный столик вращается по часовой стрелке, поэтому мужчина выходит с зонтиком. Когда становится суше, волосы стягиваются, поворотный столик вращается в другую сторону, и женщина выходит на солнце!
Что такое влажность?
Фото: вы можете измерить влажность с помощью своего смартфона, но только если он имеет встроенный датчик влажности (или тот, который к нему подключен).Это приложение для измерения влажности в стиле ретро для Android представляет собой снимок экрана из книги «Гигрометр» Борсе Трайковски.
Влажность — это «влажность» окружающего нас воздуха. Это определенно то, что мы можем почувствовать, но мы не всегда можем его увидеть … так как же мы можем его точно измерить?
Прежде чем мы сможем понять, как что-то измерить, мы должны иметь представление о что мы измеряем — и что будут значить наши измерения. Мы измеряем большинство вещей в тех или иных научных единицах, таких как килограммы, метры или секунды; но влажность немного другая, и обычно мы измеряем его двумя совершенно разными способами.
Одно из возможных измерений называется удельной влажностью , т.е. количества водяного пара, присутствующего в килограмме массы воздуха (включая воду), выраженное в таких единицах, как граммы на килограмм. Есть очень похожее измерение, называемое соотношением смешивания , которое представляет собой массу водяного пара в килограмме массы сухого воздуха, также записанного в таких единицах, как граммы на килограмм.
Гораздо более распространенное измерение называется относительной влажностью , т.е. количество водяного пара в воздухе по сравнению с максимальное количество, которое может быть при этой температуре, записывается в процентах (без единиц измерения).В действительно влажный и сырой день относительная влажность может составлять 90–100 процентов; на сухой день, дует сухой ветер, и вероятность дождя практически отсутствует, более вероятно, что это будет 60–75 процентов. Когда мы говорим о влажности в процентах, мы имеем в виду относительную влажность.
Поскольку определенная влажность не имеет значения для большинства людей, прогнозы погоды обычно укажите относительную влажность — и удобные гигрометры откалиброваны (отмечены с измерениями на их циферблатах или дисплеях) тоже.
Рекламные ссылкиКак мы можем измерить изменения влажности?
Artwork: На протяжении веков люди изобретали все более изобретательные способы измерения влажности. На этой иллюстрации показаны термометры и гигрометры из Флоренции 17 века. Произведение Лоренцо Магалотти (1637–1712) из его классического Saggi di naturali Esperienze («Очерки естественных экспериментов») любезно предоставлено Библиотека Конгресса США.
Многие растения реагируют на изменение влажности.Сосновые шишки открывают свои колючки, когда они высохнут (для высвобождения семян) и плотно закрывают их, когда мокро. Вот почему (как известно большинству детей) вы можете использовать упавший сосновая шишка, чтобы выяснить, насколько влажно на улице. Сосновые шишки не однако самые точные гигрометры, не в последнюю очередь потому, что на это уходит много времени открывать и закрывать — но вы все равно можете делать забавные и интересные домашние гигрометры с ними, и они проводят хорошие научные эксперименты (см. ссылки ниже).
Фото: Сосновая шишка — простой гигрометр.Он плотно закрывается во влажном состоянии (вверху) и открывается в сухом состоянии (внизу). Хотя вы можете построить приличный домашний гигрометр из сосновой шишки, потребуется некоторое время, чтобы отреагировать на изменения влажности.
Гигрометры с витым волокном
Некоторые приборы для измерения влажности не намного сложнее сосновых шишек. В погодный дом маленький мужчина и маленькая женщина стоят пополам дверные проемы закрытого деревянного ящика. Когда пойдет дождь, мужчина выходит из двери с зонтиком; когда высохнет, мужчина идет внутрь, и вместо этого из двери выскакивает женщина.Внутри погоды дома, две фигуры установлены на поворотном столе и подвешены к кусок плотно скрученных волос (или растительное волокно). Когда он высыхает, волосы подтягиваются и поворачивает поворотный стол в одну сторону. Во влажных условиях волосы распускаются а поворотный стол вместо этого вращается в другую сторону. Так же, как ты можешь сделать домашний гигрометр из сосновой шишки, чтобы можно было делать то же самое прядь собственных волос или услужливого друга! (Опять же, вы найдете несколько ссылок ниже.)
Изображение: Типичный гигрометр из скрученного волокна.До того, как электронные гигрометры стали популярными в 20-м веке самые недорогие гигрометры работали так, как этот, запатентованный Луисом Уллманом из Нэшвилла, штат Теннесси, в 1859 году. У него есть коробка (открытая для воздуха, чтобы влага могла входить и выходить) с кусочком скрученного растительного волокна (оранжевого цвета) внутри. Волокно подключено к стрелке (красный), которая вращается вокруг шкалы, и при изменении влажности волокно либо сжимается, либо ослабляется, перемещая указатель вверх или вниз по шкале. Как объясняет Ульман в своем патенте, можно использовать различные растительные волокна, в том числе волокна Герань эродиумная.Иллюстрация из патента США № 25,457: гигрометр любезно предоставлен Управлением по патентам и товарным знакам США.
Психрометры
Сосновые шишки и погодные домики довольно смутно указывают на влажность, в лучшем случае. Как мы можем поставить какие-то числа на влажность и точнее измерить? Один из способов — использовать инструмент, называемый психрометр (также известный как термометр с влажным и сухим термометром). Он использует пару термометров, стоящих рядом. У одного есть лампочка открыты воздуху; на другом — лампочка, покрытая влажной тканью.В попадание воды на ткань вызывает испарение и потерю тепла лампой, сделать его показание ниже, чем на сухом термометре. В количество испарения (и понижение температуры) зависит от от того, сколько водяного пара уже есть в атмосфере. Измерение разница температур между двумя термометрами позволяет измерить относительную влажность.
Изображение: Типичный психрометр (термометр с влажно-сухим термометром) имеет два термометра. бок о бок. Один из них (слева) представляет собой термометр с сухим термометром и просто измеряет температуру окружающего воздуха. как любой обычный градусник.Другой термометр (справа) — это влажный термометр: его колба погружена в бутылку или резервуар. жидкости (зеленого цвета) у основания. Вы измеряете влажность, сравнивая показания двух термометров. С использованием скользящим указателем (синий), вы можете определить влажность на вращающейся диаграмме (желтой) в центре, которая По сути, это справочная таблица, которая преобразует разницу температур в измерения влажности. Эта конкретная версия гигрометра с влажно-сухой лампой была изобретена в 1930-х годах Джоном Леонардом Шварцем из Филадельфии, а рисунок взят из его патента США № 1 933 283: гигрометр, любезно предоставленного Управлением по патентам и товарным знакам США.
Электронные гигрометры
Фото: электронный гигрометр Холмса имеет легко читаемый циферблат. Доступно множество других брендов, в том числе Honeywell и GE Panametrics. Фотография любезно предоставлена Беном Уинслоу, опубликована на Flickr в 2008 г. под лицензией Creative Commons.
Photo Керамическая чувствительная мембрана электронного гигрометра. Фото любезно предоставлено Исследовательский центр НАСА в Лэнгли (NASA-LaRC).
В эпоху, когда для нас измеряется практически все, мгновенно и в электронном виде последнее, что многие из нас хотят делать, это играть насчет термометров и влажных тряпок.Слава богу, за электронные гигрометры. Обычно они измеряют емкость или сопротивление образца воздуха и рассчитать по нему влажность. В емкостном гигрометре есть две металлические пластины с воздухом в между ними. Чем больше воды в воздухе, тем сильнее она влияет емкость пластин (способность накапливать статический электрический заряд). Измеряя, сколько заряда может храниться, можно измерить влажность быстро и точно. В резистивном датчике электричество протекает через кусок керамического материала, подвергающийся воздействию воздуха.Чем выше влажность, тем больше водяного пара конденсируется внутри керамика, меняя свое сопротивление. Измерение силы тока протекает через керамику, что дает точное измерение влажность.
Приложения для гигрометра
В наши дни вы даже можете получить приложения для гигрометров для мобильных телефонов; тебе понадобиться смартфон со встроенным датчиком влажности или автономный датчик, к которому вы можете подключиться с помощью USB-кабеля или Bluetooth (беспроводного) соединения, чтобы они работали. Некоторые приложения-гигрометры также работают косвенно, определяя ваше местоположение (с помощью «служб определения местоположения» или спутникового приемника GPS телефона) и отправляя запрос на сервер местной метеостанции, который отправляет обратно измерения влажности для отображения на вашем телефоне.Это приблизительное измерение влажности при погоде. станции, которая может находиться за много километров или миль от вашего дома. Это даст вам приблизительное представление от общей влажности (если это сухой или влажный день), но не от точной местной влажности прямо там, где вы находитесь.
Гигрометры на метеостанциях
Фото: основные части переносной военной метеостанции. Он может отправлять свои показания автоматически используя передатчик на солнечной энергии. Фото Maynelinne De La Cruz любезно предоставлено ВВС США.
Типичная электронная метеостанция содержит термометр (измеряет температуру), барометр (измеряет максимальное и минимальное давление воздуха), датчик осадков (осадков), анемометр, и наш старый друг гигрометр!
Современные электронные метеостанции обычно имеют ЖК-дисплей, показывает все измерения автоматически и мгновенно обновляет их, избавляя от необходимости читать инструменты один за другим. С использованием измерения, микрочип внутри также определит и отобразит то, что называется тенденция (приблизительный прогноз погоды на следующий день, резюмируется простой картинкой, такой как солнце (ясный день), частично затемненное солнце (пасмурный день) или дождевая туча (влажный день).Электронные станции также обычно имеют память, поэтому они могут записывать сотни отдельных измерения за последние несколько месяцев. Некоторые станции могут быть подключен к компьютеру с помощью USB-кабеля, чтобы вы могли загружать свои данные и рисовать правильную погоду и климатические карты.
Фото: Эта традиционная метеостанция содержит гигрометр и другое оборудование для прогнозирования погоды. Белый ящик с жалюзи, называемый экраном Стивенсона, защищает инструменты от прямого солнечного тепла, но позволяет воздуху циркулировать внутри, обеспечивая более надежные измерения.
Создание собственной метеостанции
Достаточно легко собрать вместе несколько основных инструментов для измерения погоды — термометр, гигрометр, измеритель осадков и т. д. — чтобы делать свои собственные локальные записи и прогнозы, но как насчет этого? автоматически? Есть ли альтернатива покупке готовой электронной метеостанции? Конечно! Благодаря широкому распространению электронных микроконтроллеров, таких как Ардуино (и Raspberry Pi настроен для работы аналогичным образом) это относительно легко превратить ваш компьютер в метеостанцию своими руками, которая может получать данные от электронных датчики и составить прогнозы погоды и климатические карты.Я добавил несколько ссылок на Arduino-type проекты метеостанций в конце дальнейшего чтения ниже.
Сейчас довольно круто и по последнему слову техники построить собственную метеостанцию, но как насчет того, чтобы пытались сделать это полвека назад, до того, как компьютеры и микроэлектроника произвели революцию в мире. Невозможно? Не тут-то было! Пролистайте назад все патенты, зарегистрированные в US Patent and Trademark Office, и вы обнаружите, что немало людей пытались сделать механические, электрические и электронные инструменты, которые могут автоматически записывать данные с метеостанций.
В 1942 году Гарри Даймонд и Уилбур Хинман-младший из Национального бюро стандартов США (NBS) построили замечательное оборудование для автоматической записи погоды вы можете увидеть здесь. Используя хитроумную смесь механических устройства (рычаги, шестерни и часовой механизм), простые электрические схемы и радиопередатчик, он собирал данные о давлении, температуре, влажности, направлении ветра, скорости ветра и осадках и автоматически передавал их в приемный офис с помощью кодированных радиосигналов.Ешьте сердце, Ардуино!
Иллюстрация: Как работала автоматическая метеостанция Даймонда и Хинмана: во-первых, они разработали общий механизм (1, зеленый), который мог преобразовывать движения, вызванные различными видами механических датчиков, в движения переменного резистора, другими словами, превращая механические движения в измеримые электрические токи. Затем они создали простые механические датчики погоды, которые по-разному управляли этим механизмом. Здесь показаны три из них. 2 — барометр-анероид, в котором расширяющийся и сжимающийся анероидная ячейка перемещает рычаг вверх и вниз при изменении давления; 3 — датчик влажности, который измеряет влажность, используя натяжение тех проводов, которые предположительно сжимаются или ослабляются в зависимости от того, насколько влажный или сухой воздух; 4 — датчик дождя, в котором ведро движется вниз и поворачивает колеса, когда оно наполняется дождем.Наконец, они изобрели способ преобразования измерений сопротивления в коды, которые можно было передавать с помощью радиосигналов. Подробнее об этом читайте в патенте США 2 287 786: Автоматическая метеостанция Гарри Даймонда и Уилбура Хинмана-младшего, правопреемников правительства США, запатентовано 30 июня 1942 года. Изображение предоставлено Управлением по патентам и товарным знакам США с небольшими изменениями и окраской оригинала для повышения четкости.
Рекламные ссылкиУзнать больше
На этом сайте
Книги — для старших читателей
- Метеорология сегодня: введение в погоду, климат и окружающую среду автор C.Дональд Аренс, Роберт Хенсон. Cengage, 2021. Содержательный, четко написанный учебник.
- Haynes Meteorology Manual: Практическое руководство по погоде от Сторма Данлопа. Haynes, 2014. Разборчивое вступление в доступном стиле Haynes.
- «Погода для чайников» Джона Д. Кокса. John Wiley & Sons, 2011. Простое руководство, написанное в строгом формате манекенов, включая облака, штормы, местную и глобальную погоду, а также ненастную погоду, такую как ураганы.
- Роберт Хенсон «Грубый путеводитель по погоде».Penguin / Rough Guides, 2007. Очень четко написанное, хорошо иллюстрированное руководство. Все, что вам нужно знать, объясняется просто!
- Погода имеет значение Бернар Мерген. University Press of Kansas, 2008. Почему мы так заботимся о погоде? Как это повлияло на нашу историю?
Книги — для младших читателей
- Все, погода, Кэти Фурганг. National Geographic Kids, 2018: увлекательный красочный 64-страничный обзор с фотографиями и мероприятиями (в возрасте 8–10 лет.)
- Свидетель: Погода Брайана Косгроува. Dorling Kindersley Children’s, 2016: простое 72-страничное иллюстрированное введение. (Возраст 9–12 лет)
- Погода Майкла Аллаби. Dorling Kindersley Children’s, 2001: ясное и простое введение в работу нашей погоды. (Возраст 9–12 лет)
- Справочник по погоде для учителей Тома Конвички. Libraries Unlimited, 1999. Он содержит несколько простых и удобных занятий с погодой для детей, в том числе подробное описание того, как построить несколько различных типов гигрометров (в главе 6).
Сайты
Общие сайты
Как сделать гигрометр
Создание собственной метеостанции типа Arduino
Пожалуйста, НЕ копируйте наши статьи в блоги и другие сайты
статей с этого сайта зарегистрированы в Бюро регистрации авторских прав США. Копирование или иное использование зарегистрированных работ без разрешения, удаление этого или других уведомлений об авторских правах и / или нарушение смежных прав может привести к серьезным гражданским или уголовным санкциям.
Авторские права на текст © Крис Вудфорд 2009, 2018. Все права защищены. Полное уведомление об авторских правах и условиях использования.
Подписывайтесь на нас
Сохранить или поделиться этой страницей
Нажмите CTRL + D, чтобы добавить эту страницу в закладки на будущее, или расскажите об этом своим друзьям с помощью:
Цитировать эту страницу
Вудфорд, Крис. (2009/2018) Гигрометры. Получено с https://www.explainthatstuff.com/hygrometers.html. [Доступ (укажите дату здесь)]
Подробнее на нашем сайте…
Как построить метеостанцию Raspberry Pi Pico
Вам нужен цифровой ареометр для контроля температуры и влажности в вашем доме или офисе? Вместо того, чтобы покупать один, теперь вы можете сделать свой собственный с платой микроконтроллера Raspberry Pi Pico . Когда проект будет завершен, протяните датчик DHT через окно для наиболее точных показаний погоды (или используйте этот проект для контроля температуры в помещении).
В этом руководстве мы используем микроконтроллер Raspberry Pi Pico для считывания данных о температуре и влажности и отображения данных на ЖК-экране 16×2.В отличие от любого другого Raspberry Pi, Pico (см. Наш обзор Raspberry Pi Pico ) представляет собой плату микроконтроллера, а не полноценный компьютер с Linux. Благодаря этому он отлично подходит для работы с легкими проектами, включающими датчики и другие электронные компоненты, особенно те, которые используют аналоговый вход, с чем другие Pis не справятся без дополнительной платы.
Плата Pico может быть запрограммирована на C / C ++ или MicroPython. Для этого урока мы выбрали C / C ++. В качестве бонуса это руководство также включает базовую установку Pico SDK и cmake.Если вы хотите увидеть это руководство в MicroPython, сообщите нам об этом в разделе комментариев.
Что вам понадобится
Сроки : Предполагается, что этот проект займет не менее 1 часа, но мы включили окончательный файл пакета (файл UF2) в качестве «быстрого» метода.
Большая часть этого руководства основана на командах терминала. Если вы не знакомы с командами терминала на своем Raspberry Pi, мы настоятельно рекомендуем сначала просмотреть 25+ Linux Commands Raspberry Pi, которые пользователи должны знать .
Настройка Raspberry Pi Pico
1. Для этого проекта требуются контакты к вашей плате Pico. Если вы еще этого не сделали, вам нужно припаять контакты к Raspberry Pi Pico . Подключите экран, мышь и клавиатуру к Raspberry Pi.
2. Загрузите Raspberry Pi. Если у вас еще нет карты microSD, прочтите нашу статью о , как настроить Raspberry Pi в первый раз или как установить Raspberry Pi без головы, установить .
3. Обновите ОС Raspberry Pi. Откройте терминал и введите:
sudo apt-get update && sudo apt-get upgrade
Протестируйте свою плату Pico с помощью C / C ++ Пример кода Blink можно найти здесь .
4. Загрузите файл blink.uf2 из руководства C / C ++ Приступая к работе .
5. Удерживая нажатой кнопку BOOTSEL на плате Pico, подключите ваш microUSB от вашей платы Pico к RaspberryPi.
(Изображение предоставлено Tom’s Hardware)6. Перетащите файл blink.uf2 из папки загрузок на съемный носитель RPI-RP2 . Теперь посмотрите, как начинает мигать встроенный светодиод на вашей плате Pico. Вы можете отключить плату Pico от Raspberry Pi для следующего шага.
(Изображение предоставлено Tom’s Hardware)Подключите Pico к ЖК-экрану и датчику температуры и влажности DHT22
1. Поместите плату Pico на макетную плату.
2. С помощью перемычек подключите GND от Pico к шине GND, Подключите контакт 36 / 3,3 В к шине питания.
3. Подключите датчик DHT22 к макетной плате и подключите GND к шине GND, питание к шине питания и сигнал OUT к GPIO15 / контакту 20 (для 3-контактных датчиков DHT). Если вы используете 4-контактный DHT22, включите резистор 10 кОм, как показано на принципиальной схеме.
4. Для ЖК-экрана подключите SDA к контакту 6 и SCL к контакту 7 .
5. Для питания ЖК-экрана подключите LCD VCC к VBUS (контакт 40) на Pico и LCD GND к шине GND макетной платы .
(Изображение предоставлено Tom’s Hardware)Short Cut Method — Pico Weather Station
Если вы спешите, чтобы ваша метеостанция Pico заработала, вы можете загрузить скомпилированный файл сборки UF2 здесь . Обратите внимание, что использование скомпилированного файла не позволяет настраивать текст или изменять сигнальные контакты.
1. Загрузите weatherstation.uf2 отсюда .
2. Отключите плату Pico от Raspberry Pi.
3. Удерживайте кнопку BOOTSEL при подключении платы Pico к Pi. Вы должны увидеть всплывающее окно, и RPI-RP2 отобразится как съемный носитель.
4. Перетащите weatherstation.uf2 на свой Pico с меткой RPI-RP2 из папки загрузок в файловом менеджере.
(Изображение предоставлено Tom’s Hardware)Через несколько секунд (до минуты) вы должны увидеть на ЖК-экране дисплей комнатной температуры и влажности.
(Изображение предоставлено Tom’s Hardware)Полные инструкции: Raspberry Pi Pico Weather Station
Этот метод дает тот же результат, ЖК-дисплей, который отображает температуру и влажность, но вы узнаете, как скомпилировать исходный код для платы Pico . Этот метод также включает базовую установку pico-sdk для пользователей, начинающих с нуля. Для более полной установки с дополнительными примерами ознакомьтесь с PDF-файлом «Начало работы с Raspberry Pi Pico C / C ++ dev» здесь .
1. Откройте Терминал на рабочем столе Raspberry Pi (нажмите Ctrl-T).
2. Начнем с создания каталога и клонирования кода , необходимого для компиляции C / C ++ для платы Pico, с помощью следующих команд.
метеостанция мкдир
cd метеостанция
git clone -b master https://github.com/raspberrypi/pico-sdk.git
компакт-диск pico-sdk
git обновление подмодуля --init
компакт диск ..
git clone https://github.com/carolinedunn/pico-weather-station
(Изображение предоставлено Tom’s Hardware)3. Установите cmake с соответствующими зависимостями для Pico. Этот шаг может занять около 5 минут на Raspberry Pi 4.
sudo apt update
sudo apt install cmake gcc-arm-none-eabi build-essential
(Изображение предоставлено Tom’s Hardware)4. Сейчас самое время взглянуть на исходный код, который мы будем использовать для создания нашей метеостанции.
Дополнительно: Перейдите в / home / pi / weather-station / pico-weather-station и откройте метеостанцию.c с Geany в вашем файловом менеджере для просмотра исходного кода.
(Изображение предоставлено Tom’s Hardware)Примечания к коду для weatherstation.c
- weatherstation.c — это основной исходный файл для нашего сегодняшнего проекта.
- Строка 17: Мы настроили наш Pico на чтение нашего DHT из GPIO15. Здесь вы можете настроить несколько DHT или изменить свой вывод GPIO.
- Строка 199-200: Этот оператор printf предназначен для устранения неполадок и доступен только через minicom.Доступ к показаниям через minicom будет обсуждаться в разделе устранения неполадок.
- Строка 202: Мы будем отображать показания Фаренгейта на этой метеостанции. Вы можете изменить показания на Цельсия.
- Строка 211: отображение обновленной температуры с интервалом в 2 секунды (или 2000 миллисекунд).
Скомпилируйте код C / C ++ и перенесите его в Pico
5. В том же терминале, что и на шаге 3, введите следующие команды для создания файла UF2.
cd пико-метеостанция
mkdir build
cd build
экспорт PICO_SDK_PATH =../../pico-sdk
cmake ..
делать
Изображение 1 из 2 (Изображение предоставлено: Tom’s Hardware) Изображение 2 из 2 (Изображение предоставлено: Tom’s Hardware)6. Перейдите в / home / pi / weather-station / pico-weather-station / build
(Изображение предоставлено Tom’s Hardware)7. Отключите плату Pico от Raspberry Pi.
8. Удерживайте кнопку BOOTSEL при подключении платы Pico к Pi. Вы должны увидеть всплывающее окно, и RPI-RP2 отобразится как съемный носитель.
9. Перетащите weatherstation.uf2 на Pico с меткой RPI-RP2 из папки загрузок в файловом менеджере.
(Изображение предоставлено Tom’s Hardware)Через несколько секунд (до минуты) вы должны увидеть на ЖК-экране дисплей комнатной температуры и влажности.
(Изображение предоставлено Tom’s Hardware)После того, как ваша метеостанция Pico заработает, вы можете добавить светодиод или зуммер, если температура или влажность поднимаются выше (или ниже) порогового значения.
Портативное решение с батарейным питанием
Теперь вы можете включать Pico без использования Raspberry Pi. Просто отключите USB от Raspberry Pi (подключенного к Pico) и подключите к зарядному устройству Power Bank или адаптеру питания USB.
(Изображение предоставлено Tom’s Hardware)Руководство по поиску и устранению неисправностей
- ЖК-экран включен, но пустой: отрегулируйте потенциометр на обратной стороне ЖК-экрана.
- Температура и влажность всегда равны нулю: отрегулируйте время в строке 156.если (количество> 46).