This commit is contained in:
thek4n 2026-05-26 19:16:49 +03:00
parent 837adf64f4
commit 1307829158
2 changed files with 136 additions and 0 deletions

124
co2_sensor.ino Normal file
View File

@ -0,0 +1,124 @@
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SensirionI2cScd4x.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // -1 = no reset pin
SensirionI2cScd4x scd4x;
void setup() {
Serial.begin(9600);
Wire.begin();
// Инициализация дисплея
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // 0x3C or 0x3D
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F("Initializing..."));
display.display();
delay(1000);
// Инициализация SCD40
display.clearDisplay();
display.setCursor(0, 0);
display.println(F("Starting SCD40..."));
display.display();
scd4x.begin(Wire, SCD40_I2C_ADDR_62);
// Проверка подключения
uint16_t error;
char errorMessage[256];
error = scd4x.stopPeriodicMeasurement();
if (error) {
Serial.print("Error stopping periodic measurement: ");
Serial.println(error);
}
delay(500);
error = scd4x.startPeriodicMeasurement();
if (error) {
Serial.print("Error starting periodic measurement: ");
Serial.println(error);
display.clearDisplay();
display.setCursor(0, 0);
display.println(F("SCD40 ERROR!"));
display.println(F("Check wiring"));
display.display();
delay(5000);
} else {
display.clearDisplay();
display.setCursor(0, 0);
display.println(F("SCD40 Ready!"));
display.display();
delay(1000);
}
}
void loop() {
uint16_t error;
char errorMessage[256];
uint16_t co2 = 0;
float temperature = 0.0;
float humidity = 0.0;
// Чтение данных с SCD40
error = scd4x.readMeasurement(co2, temperature, humidity);
display.clearDisplay();
display.setCursor(0, 0);
if (error) {
// Если ошибка чтения
display.println(F("SCD40 READ ERROR!"));
display.print(F("Code: "));
display.println(error);
display.println();
display.println(F("Check connection"));
} else {
// Отображение CO2
display.print(F("CO2: "));
display.print(co2);
display.println(F(" ppm"));
// Цветовая индикация уровня CO2
if (co2 < 800) {
// Нормальный уровень - зеленый (отображаем как белый на монохромном дисплее)
display.println(F("Status: GOOD"));
} else if (co2 < 1200) {
display.println(F("Status: NORMAL"));
} else if (co2 < 2000) {
display.println(F("Status: POOR!"));
} else {
display.println(F("Status: DANGER!"));
}
display.println();
// Отображение температуры
display.print(F("Temp: "));
display.print(temperature, 1);
display.println(F(" C"));
// Отображение влажности
display.print(F("RH: "));
display.print(humidity, 1);
display.println(F(" %"));
}
display.display();
// Задержка между измерениями (SCD40 обновляется каждые 5 секунд)
delay(5000);
}

12
justfile Normal file
View File

@ -0,0 +1,12 @@
build:
arduino-cli compile --fqbn lgt8fx:avr:328
upload:
arduino-cli upload --port /dev/ttyACM1 --fqbn lgt8fx:avr:328
install-libs:
arduino-cli lib install "Adafruit SSD1306"
arduino-cli lib install "Adafruit GFX Library"
arduino-cli lib install "Sensirion I2C SCD4x"