Сигнализатор качества воздуха на CCS811 с дисплеем TM1637

Проекты на Arduino
Ответить
Аватара пользователя
KirAdmin
Администратор
Сообщения: 10
Зарегистрирован: 04 янв 2019, 15:13
Откуда: М.О., г.Фрязино
Контактная информация:

Сигнализатор качества воздуха на CCS811 с дисплеем TM1637

Сообщение KirAdmin »

Этот проект является упрощённой версией ранее опубликованного Дешевый датчик качества воздуха на CCS811, TM1637 и ESP8266. Не имеет выхода в интернет и является автономным устройством работающее 4-5 суток от одного заряда. Вся логика построена на Arduino, для вывода данных используется индикатор на модуле TM1637 (модуль используется для часов и простых медиа плееров), который поочередно показывает данные.

Проект сборки нам необходимо:
  1. Arduino 1.8.2
  2. Библиотека Adafruit_CCS811.h
  3. Библиотека TM1637.h

Код: Выделить всё

#include "Adafruit_CCS811.h"
#include "TM1637.h"
#define CLK 16 // A2 Arduino Pro Mini
#define DIO 17 // A3 Arduino Pro Mini
//#define ledPin 9 // 9 Arduino Pro Mini
//#define CLK 13 // D7 ESP8266
//#define DIO 12 // D6 ESP8266
//#define ledPin 16 // D0 ESP8266
TM1637 disp(CLK, DIO); //
Adafruit_CCS811 ccs;

bool alarm = true;


void setup() {
  //pinMode(LED_BUILTIN, OUTPUT); // выход под LED
  //pinMode(ledPin, OUTPUT); // выход под LED
  disp.init();  // инициализация
  disp.set(0);  // яркость, 0 - 7 (минимум - максимум)

    // если датчик не исправен выводим "----"
  if(!ccs.begin()){
    disp.clearDisplay(); // очистка дисплея
    disp.displayByte(_dash, _dash, _dash, _dash);
      delay(500);
    while(1);
  }

  //calibrate temperature sensor
  while(!ccs.available());
  float temp = ccs.calculateTemperature();
  ccs.setTempOffset(temp - 25.0);
}

void loop() {
  if(ccs.available()){
    float temp = ccs.calculateTemperature();
    if(!ccs.readData()){
      disp.clearDisplay(); // очистка дисплея
      disp.displayInt(ccs.geteCO2()); // выводим 
      delay(2000);
      disp.clearDisplay();
      disp.displayInt(ccs.getTVOC());
      delay(1000);
    }

// управление LED
      if(ccs.geteCO2() >= 1200 || ccs.getTVOC() >= 220) { // если порог превышен
                  digitalWrite(LED_BUILTIN, HIGH); 
                  //digitalWrite(ledPin, HIGH); 
                  }

      else if(ccs.geteCO2() <= 500 || ccs.getTVOC() <= 11) { // если показания в норме
                  digitalWrite(LED_BUILTIN, LOW); 
                  //digitalWrite(ledPin, LOW); 
                  }
      }

    
    else{
      disp.clearDisplay(); // очистка дисплея
      disp.displayByte(_E, _r, _r, _empty);
      while(1);
    }
  delay(500);
}
Инженер всякой х...и :lol:
Ответить