Пример кода для мониторинга влажности почвы в горшке с использованием емкостного датчика влажности и дисплея SSD1306 на Arduino Uno:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Пин для емкостного датчика влажности
#define MOISTURE_SENSOR_PIN A0
// Пины для I2C-шин
#define SDA_PIN A4
#define SCL_PIN A5
// Создаем объект дисплея SSD1306
Adafruit_SSD1306 display(128, 64, &Wire);
// Интервал времени между считываниями данных с датчика (в миллисекундах)
#define READ_INTERVAL 600000
void setup() {
// Инициализируем серийный порт
Serial.begin(9600);
// Инициализируем I2C-шину
Wire.begin(SDA_PIN, SCL_PIN);
// Инициализируем дисплей SSD1306
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
// Устанавливаем опорное напряжение для аналогового входа на 1.1 В
analogReference(INTERNAL);
// Ждем, пока емкостной датчик влажности не стабилизируется
delay(1000);
}
void loop() {
// Считываем уровень влажности с емкостного датчика
int moisture_level = analogRead(MOISTURE_SENSOR_PIN);
// Конвертируем уровень влажности в проценты (от 0 до 100%)
int moisture_percent = map(moisture_level, 1023, 300, 0, 100);
if (moisture_percent > 100) {
moisture_percent = 100;
} else if (moisture_percent < 0) {
moisture_percent = 0;
}
// Выводим уровень влажности на серийный порт
Serial.print("Уровень влажности: ");
Serial.print(moisture_percent);
Serial.println("%");
// Отображаем уровень влажности на дисплее SSD1306
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Влажность:");
display.setCursor(80, 0);
display.print(moisture_percent);
display.print("%");
display.display();
// Ждем заданный интервал времени
delay(READ_INTERVAL);
}
Этот код использует библиотеку Adafruit_SSD1306
для управления дисплеем SSD1306 через I2C-шину. Кроме того, используется аналоговый вход A0
для чтения уровня влажности с емкостного датчика.
В функции setup()
происходит инициализация серийного порта, I2C-шин и аналогового входа A0
. Также инициализируется дисплей SSD1306 .
В функции loop()
происходит чтение уровня влажности с емкостного датчика с помощью функции analogRead()
. Затем значение уровня влажности конвертируется в проценты и выводится на серийный порт.