Вместо предисловия
Эта статья должна была быть опубликована аж 4 месяца назад, но по непонятным мне причинам, попавший ко мне образец датчика, отказался нормально работать и поэтому он был заброшен в долгий ящик. К счастью, со временем подтянулся народ и появилась возможность проверить написанный код с другими датчиками. Поэтому выражаю огромную благодарность пользователю Civil c форума который поделился своими результатами и своим устройством, описанным ниже.
Не так давно, с пол года назад, компания Sensirion рассылала бесплатные образцы новейших датчиков влажности SHT21. И как бывает в таких случаях, производитель предоставил возможность получить образцы этих датчиков совершенно бесплатно. За более чем полгода, многие успели урвать эту кроху, в том числе и я. Несмотря на крошечные размеры корпуса микросхемы (3х3х1,1 мм), вытравить под нее плату, а тем более запаять, проще простого. ЛУТ и простой паяльник справляются на ура.
С ведущим контроллером датчик общается по протоколу i2c, и для работы необходимы всего лишь пару внешних резисторов и один керамический конденсатор по питанию. Адрес датчика на шине и2ц фиксирован и имеет значение &h80. Примеры как работать с периферией по протоколу I2C можно глянуть на основе . Сам метод работы с датчиком и рабочие команды описывать не буду, так как есть отличная и интересная статья от товарища dcoder с сообщества , посвященная описанию датчика.
Схема устройства приведена ниже, используются семисегментные индикаторы RL-D5623 YCAW с общим анодом. Тактирование микроконтроллера происходит от внутреннего RC генератора настроенного на 8 МГц. Питать датчик рекомендуется напряжением 3,6 В, но если подать на него 5 В датчик продолжит работу. Производитель крайне не рекомендует этого делать, так как срок службы резко сокращается (разрушается активный слой внутри датчика).
Фрагмент кода для работы с датчиком. Здесь происходит считывание влажности и температуры с последующим преобразованием согласно формулам из даташита. Работа с датчиком происходит в нормальном (slave) режиме, тоесть во время измерения датчик не прижимает линию CSL к земле:
‘считывание температуры
I2cstart
I2cwbyte &H80 ‘адрес микросхемы-датчика SHT21
I2cwbyte &HE3 ‘выбор измерения T в нормальном режиме
Waitms 100 ‘измерение
I2cstart
I2cwbyte &H81 ‘чтение результата измерения
I2crbyte Data1 , Ack ‘прием старшего байта, ждем слудующий байт
I2crbyte Data2 , Ack ‘прием младшего байта
I2crbyte Crc , Nack ‘прием байта контрольной суммы (можно на него забить)
I2cstop ‘конец общения
Dataw = Data1
Shift Dataw , Left , 8
Dataw = Dataw + Data2
T = Dataw * 175.72
T = T / 65536
T = T – 46.85
‘считывание влажности
I2cstart
I2cwbyte &H80 ‘адрес микросхемы-датчика SHT21
I2cwbyte &HE5 ‘выбор измерения влажности в нормальном режиме
Waitms 100 ‘измерение
I2cstart
I2cwbyte &H81 ‘чтение результата измерения
I2crbyte Data1 , Ack ‘прием старшего байта, ждем слудующий байт
I2crbyte Data2 , Ack ‘прием младшего байта
I2crbyte Crc , Nack ‘прием байта контрольной суммы
I2cstop ‘конец общения
Dataw = Data1
Shift Dataw , Left , 8
Dataw = Dataw + Data2
H = Dataw * 125
H = H / 65536
H = H – 6
Print ” T ” ; Fusing(t , “#.##”) ; ” H ” ; Fusing(h , “#.#”)
Полный листинг программы можно скачать в конце статьи, там же находиться откомпилированный файл.
А вот измерения устройством в сравнении с метеостанцией:
Как видно качество измерений не уступает фирменному аналогу.
Скачать исходники, файл прошивки и файл печатной платы в формате .lay
Еще пара фоток устройства от автора:
UPD. От сенсирион прикатил еще один конверт с таким же датчиком, так что как появится время выложу свой похожий проект на этой крохе.
Взято с: avrproject.ru
Последние статьи
- Лучшая практика проектирования при размещении компонентов печатной платы
- Android 6.0 на lancer X
- Простой усилитель мощности класса АВ своими руками.
- Двухтактный ультралинейный ламповый УНЧ на EL84 (6П14П).
- Люксметр на ATmega8 и цифровом датчике BH1750
- Контроллер для светодиодной ленты с ИК управлением
- Самодельный LED светильник на основе ИК датчика HC-SR501
- Простой усилитель низкой частоты на TDA7377 и NE5532
- Простейший звонок с двумя мелодиями
- LED Cube 8x8x8 на Arduino с RTC