цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Arduino и датчик температуры и влажности AHT10: схема подключения и код программы



Arduino и датчик температуры и влажности AHT10: схема подключения и код программы

Автор: Mike(admin) от 7-07-2023, 03:55

Сегодня на рынке электронных компонентов для Arduino среди датчиков температуры и влажности можно найти не только устройства серии DHT (DHT11 и DHT22), но и многие другие датчики.


Arduino и датчик температуры и влажности AHT10: схема подключения и код программы

В данном материале мы рассмотрим работу Arduino с датчиком AHT10 на примере создания комнатного термометра, который будет выдавать данные о температуре и влажности на дисплей SSD1306.


Датчик AHT10 оснащен ASIC-микросхемой новой конструкции, улучшенным полупроводниковым емкостным МЭМС датчиком влажности и стандартным встроенным датчиком температуры. Он может выводить калиброванный цифровой сигнал в стандартном формате I2C. Модуль AHT10 работает от 1,6 В до 6 В, что идеально, если мы используем внешний источник 5 В для питания этого датчика вместе с дисплеем SSD1306 и платой Arduino. Модуль с датчиком AHT10, который мы здесь будем использовать, имеет собственный встроенный линейный регулятор напряжения и базовую схему сдвига логического уровня. Существует возможность изменить адрес I2C по умолчанию (0x38).


Arduino и датчик температуры и влажности AHT10: схема подключения и код программы

Схема подключения Arduino, датчика AHT10 и дисплея SSD1306 представлена далее.


Arduino и датчик температуры и влажности AHT10: схема подключения и код программы

Код программы для Arduino следующий:



#include <Wire.h>
#include <AHTxx.h>

#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

#define OLED_WIDTH 128
#define OLED_HEIGHT 64

#define OLED_ADDR   0x3C
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);

float ahtValue;
AHTxx aht10(AHTXX_ADDRESS_X38, AHT1x_SENSOR);


void setup()
{
  #if defined(ESP8266)
  WiFi.persistent(false);
  WiFi.forceSleepBegin();
  #endif

  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();

  Serial.begin(115200);
  Serial.println();
  
  while (aht10.begin() != true)
  {
    Serial.println(F("AHT1x not connected or fail to load calibration coefficient"));

    delay(5000);
  }

  Serial.println(F("AHT10 OK"));

  //Wire.setClock(400000);
}


void loop()
{
  Serial.println();
  Serial.println(F("DEMO 1: read 12-bytes"));

  ahtValue = aht10.readTemperature();

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(30, 0);
  display.println(F("Temp-"));

//  Serial.print(F("Temperature...: "));
  
  if (ahtValue != AHTXX_ERROR)
  {

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(35, 25);
  display.println(ahtValue);
  display.display();
//    Serial.print(ahtValue);
   
  }
  else
  {
    printStatus();

    if   (aht10.softReset() == true) Serial.println(F("reset success"));
    else                             Serial.println(F("reset failed"));
  }

  delay(2000);

  ahtValue = aht10.readHumidity();

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(30, 0);
  display.println(F("Humd-"));
  
  
//  Serial.print(F("Humd-"));
  
  if (ahtValue != AHTXX_ERROR)
  {

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(35, 25);
  display.println(ahtValue);
  display.display();

 //   Serial.println(F(" +-2%"));
  }
  else
  {
    printStatus();
  }
  delay(2000);

  Serial.println();
  Serial.println(F("DEMO 2: read 6-byte"));

  ahtValue = aht10.readTemperature();

  Serial.print(F("Temperature: "));
  
  if (ahtValue != AHTXX_ERROR)
  {
    Serial.print(ahtValue);
    Serial.println(F(" +-0.3C"));
  }
  else
  {
    printStatus();
  }
  ahtValue = aht10.readHumidity(AHTXX_USE_READ_DATA);

  Serial.print(F("Humidity...: "));
  
  if (ahtValue != AHTXX_ERROR)
  {
    Serial.print(ahtValue);
    Serial.println(F(" +-2%"));
  }
  else
  {
    printStatus();
  }

  delay(10000);
}

void printStatus()
{
  switch (aht10.getStatus())
  {
    case AHTXX_NO_ERROR:
      Serial.println(F("no error"));
      break;

    case AHTXX_BUSY_ERROR:
      Serial.println(F("sensor busy, increase polling time"));
      break;

    case AHTXX_ACK_ERROR:
      Serial.println(F("sensor didn't return ACK, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
      break;

    case AHTXX_DATA_ERROR:
      Serial.println(F("received data smaller than expected, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
      break;

    case AHTXX_CRC8_ERROR:
      Serial.println(F("computed CRC8 not match received CRC8, this feature supported only by AHT2x sensors"));
      break;

    default:
      Serial.println(F("unknown status"));    
      break;
  }
}

Датчик температуры AHT10 работает успешно и отображает показания температуры, а затем показания влажности одно за другим с временным интервалом 2000 миллисекунд после загрузки кода.




© digitrode.ru


Теги: Arduino, датчик температуры, датчик влажности




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий