В статье представляю новое сетевое устройство – датчик температуры и влажности воздуха с использованием сенсора AHT10.
Предыдущая статья Навигация по рубрике Следующая статья
В какой-то мере это аналог датчика DHT22, только с более высокими техническими характеристиками и сетевым интерфейсом, позволяющим по 2х проводной линии связи подключать несколько датчиков на значительном расстоянии.
Общее описание и характеристики устройства.
AHT10 – это датчик температуры и влажности воздуха, конструктивно выполненный в виде миниатюрного SMD модуля.
Кроме высоких технических характеристик у него крайне низкая стоимость. На данный момент его розничная цена на Али Экспресс составляет всего 50-70 руб.
В результате получился сетевой датчик со следующими характеристиками.
Параметр | Значение |
Диапазон измерения температуры | -40 … 85 °C |
Разрешающая способность измерения температуры | 0,01 °C |
Погрешность измерения температуры | ± 0,3 °C |
Диапазон измерения влажности | 0 … 100 % |
Разрешающая способность измерения влажности | 0,024 % |
Погрешность измерения влажности | ± 2 % |
Время измерения, не более | 500 мс |
Принципиальная схема и конструкция.
AHT10 работает через интерфейс I2C с уровнями логических сигналов 3,3 В. Поэтому используется та же схема подключения к PIC-контроллеру, как и в предыдущем устройстве - люксметре.
Перемычку U1 необходимо замыкать при программировании PIC-контроллера в составе платы. Может потребоваться только при производстве.
Разработка датчика температуры и влажности воздуха доведена до серийного образца.
Работа сдатчиком на базе AHT10 в системе Ардуино.
Подключил датчик к выводу 2 платы Arduino Nano, задал адрес.
В библиотеке TinyOneWireNet.h есть 3 функции, для работы с датчиком.
uint8_t startMeasurement_AHT10(uint8_t adr); // запуск измерения
uint8_t readCode_AHT10(uint8_t adr, uint8_t * code); // чтение результата измерений (код, 6 байтов)
uint8_t readTempHum_AHT10(uint8_t adr, float * temp, float * hum); // чтение результата измерений(C и %)
- adr – адрес устройства;
- code – указатель на массив для считанного кода (6 байтов);
- temp – указатель на полученное значение температуры;
- hum - указатель на полученное значение влажности.
Последовательность операций обычная.
- Запустить измерение.
- Выдержать паузу не менее 500 мс.
- Считать результат.
Вот скетч, который выводит результаты измерений в последовательный порт.
// измерение температуры и влажности воздуха
#include <TinyOneWireNet.h>
#define NET_PIN 2 // вывод данных сети
#define BETWEEN_COM_TIME 2 // пауза между командами (мс)
TinyOneWireNet sens(NET_PIN);
float temp, hum;
void setup() {
Serial.begin(9600);
sens.onLine(10);
}
void loop() {
if( sens.startMeasurement_AHT10(52) == 0 ) {
delay(1000);
if( sens.readTempHum_AHT10(52, & temp, & hum) == 0 ) {
Serial.print("Temp= ");
Serial.print(temp);
Serial.print(" C Hum= ");
Serial.print(hum);
Serial.println(" %");
}
else Serial.println("Error");
}
else {
Serial.println("Error");
delay(1000);
}
delay(BETWEEN_COM_TIME);
}
Датчик откалиброван при изготовлении. Коррекция результата не требуется.
В следующей статье представлю конвертеры UART TinyOneWireNet и USB TinyOneWireNet.