Arduino - Sensor de CO2 SCD40

Neste tutorial, vamos aprender:

Arduino Sensor de CO2 SCD40

Quando muitas pessoas ficam em uma sala fechada, o nível de CO2 sobe. O CO2 alto nos deixa cansados e lentos para pensar. Com um SCD40 e um Arduino Uno, podemos ver esse número e saber quando é hora de abrir uma janela.

Sobre o Sensor de CO2 SCD40

O SCD40 é um pequeno sensor de CO2 fabricado pela Sensirion. Ele mede a quantidade real de dióxido de carbono no ar. Isso é diferente de sensores de gás baratos, como a série MQ (veja Arduino - Sensor de Gás), que apenas estimam a qualidade do ar. Como ele funciona? Dentro do sensor, uma pequena luz infravermelha pisca. O gás CO2 absorve essa luz e cria uma onda de pressão muito pequena, como um som. Um microfone minúsculo ouve esse som. Quanto mais CO2, mais alto o som. Esse método se chama NDIR fotoacústico.

Pinagem do Sensor de CO2 SCD40
SCD40
Tensão de Operação 2.4V a 5.5V
Interface I2C (endereço 0x62)
Faixa de Saída de CO2 0 a 40,000 ppm
Precisão de CO2 ±(50 ppm + 5% da leitura), de 400 a 2,000 ppm
Taxa de Leitura um novo valor a cada 5 segundos
Precisão de Temperatura ±0.8°C (15°C a 35°C)
Precisão de Umidade ±6 %RH (15°C a 35°C, 20 a 65 %RH)
Corrente Média cerca de 15 mA

O módulo SCD40 tem quatro pinos:

  • Pino VCC: precisa ser conectado ao VCC (5V ou 3.3V)
  • Pino GND: precisa ser conectado ao GND (0V)
  • Pino SDA: o pino de dados I2C. Ele precisa ser conectado ao pino SDA do Arduino
  • Pino SCL: o pino de clock I2C. Ele precisa ser conectado ao pino SCL do Arduino

A maioria dos módulos SCD40 já tem resistores de pull-up para as linhas I2C, então não precisamos adicionar nenhum.

O Que Significa o Valor de CO2?

O sensor fornece o CO2 em ppm (partes por milhão). Podemos usar este guia simples:

Nível de CO2 Qualidade do Ar
Cerca de 400 ppm Ar fresco ao ar livre
400 a 1,000 ppm Bom ar em ambientes internos
1,000 a 2,000 ppm Abafado, abra uma janela
Acima de 2,000 ppm Ruim, pode causar dor de cabeça ou sonolência

※ Nota:

  • O SCD40 se calibra sozinho automaticamente (Automatic Self-Calibration). Para isso funcionar, o sensor precisa ver ar fresco (cerca de 400 ppm) pelo menos uma vez por semana, por exemplo perto de uma janela aberta por uma hora.
  • As primeiras leituras depois de ligar podem ser menos precisas. Dê alguns minutos a ele.

Diagrama de Ligação

No Arduino Uno, os pinos I2C são A4 (SDA) e A5 (SCL).

Diagrama de ligação do sensor de CO2 SCD40 com Arduino

This image is created using Fritzing. Click to enlarge image

Tabela de ligação do Módulo SCD40 e do Arduino Uno

Módulo SCD40 Arduino Uno
VCC → 5V
GND → GND
SDA → A4
SCL → A5

Como Programar o Sensor de CO2 SCD40

  • Inclua as bibliotecas:
#include <Arduino.h> #include <SensirionI2cScd4x.h> #include <Wire.h>
  • Declare um objeto SCD4x:
SensirionI2cScd4x scd4x;
  • Inicialize o I2C e o sensor:
Wire.begin(); scd4x.begin(Wire, SCD40_I2C_ADDR_62);
  • Inicie a medição. Depois disso, o sensor faz uma nova leitura a cada 5 segundos:
scd4x.startPeriodicMeasurement();
  • Verifique se uma nova leitura está pronta:
bool dataReady = false; scd4x.getDataReadyStatus(dataReady);
  • Leia os valores. A função sempre fornece três valores juntos:
uint16_t co2 = 0; float temperature = 0.0f; float humidity = 0.0f; scd4x.readMeasurement(co2, temperature, humidity);

Código Arduino - Sensor de CO2 SCD40

O código abaixo imprime o nível de CO2 e uma palavra simples para a qualidade do ar: Good, Moderate ou Poor.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-scd40-co2-sensor */ #include <Arduino.h> #include <SensirionI2cScd4x.h> #include <Wire.h> // SCD40 is connected to the Arduino Uno I2C pins: SDA = A4, SCL = A5 SensirionI2cScd4x scd4x; char errorMessage[64]; int16_t error; void setup() { Serial.begin(9600); while (!Serial) { delay(10); } Wire.begin(); // start I2C on the default pins (A4, A5) scd4x.begin(Wire, SCD40_I2C_ADDR_62); // the SCD40 address is 0x62 // clean start: wake the sensor up, stop any old measurement and reset it scd4x.wakeUp(); // may return an error if the sensor is already awake - ignore it scd4x.stopPeriodicMeasurement(); scd4x.reinit(); // start measuring: the SCD40 gives a new value every 5 seconds error = scd4x.startPeriodicMeasurement(); if (error) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Cannot start the SCD40: "); Serial.println(errorMessage); return; } Serial.println("SCD40 started. Waiting for the first reading..."); } void loop() { delay(1000); // check the sensor once per second // is a new reading ready? bool dataReady = false; error = scd4x.getDataReadyStatus(dataReady); if (error) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Data ready error: "); Serial.println(errorMessage); return; } if (!dataReady) { return; // not yet, try again in the next loop } // read the new values (temperature and humidity are not used here) uint16_t co2 = 0; float temperature = 0.0f; float humidity = 0.0f; error = scd4x.readMeasurement(co2, temperature, humidity); if (error) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Read error: "); Serial.println(errorMessage); return; } // print the CO2 level and a simple air quality word Serial.print("CO2 = "); Serial.print(co2); Serial.print(" ppm -> "); Serial.println(airQuality(co2)); } // turn a ppm value into a simple word const char* airQuality(uint16_t ppm) { if (ppm < 1000) return "Good"; if (ppm < 2000) return "Moderate - open a window"; return "Poor - get fresh air"; }

Passos Rápidos

  • Conecte o Arduino ao PC por um cabo USB
  • Abra o Arduino IDE, selecione a placa e a porta corretas
  • Vá até o ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise “SCD4x” e encontre a biblioteca Sensirion I2C SCD4x da Sensirion
  • Clique no botão Install para instalar a biblioteca.
  • Search for Sensirion I2C SCD4x created by Sensirion and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Library Manager
Type:
All
Topic:
All
Sensirion I2C SCD4x by Sensirion
Enables you to use the SCD4X sensor family via I2C. More info
1.1.0
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
Arduino Uno on COM15
1
  • Será pedido que você instale a dependência da biblioteca "Sensirion Core"
  • Clique no botão Install All para instalá-la também.
  • Copie o código acima e abra com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para fazer o upload do código para o Arduino
  • Abra o Serial Monitor. O primeiro valor chega após cerca de 5 segundos.
  • Respire devagar perto do sensor, ou feche a porta de uma sala pequena, e veja o CO2 subir.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
SCD40 started. Waiting for the first reading... CO2 = 523 ppm -> Good CO2 = 531 ppm -> Good CO2 = 528 ppm -> Good CO2 = 874 ppm -> Good CO2 = 1362 ppm -> Moderate - open a window CO2 = 1148 ppm -> Moderate - open a window CO2 = 942 ppm -> Good CO2 = 761 ppm -> Good
Ln 11, Col 1
Arduino Uno on COM15
2

O salto para 1362 ppm acontece quando respiramos no sensor. Depois de pouco tempo, o valor volta a cair.

Lendo Temperatura e Umidade do SCD40

O SCD40 também tem um sensor de temperatura e umidade embutido. Ele os usa para corrigir o valor de CO2, mas nós também podemos lê-los. Eles vêm da mesma chamada readMeasurement(), então não precisamos de nenhuma ligação extra nem de outra biblioteca. O código abaixo imprime os três valores.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-scd40-co2-sensor */ #include <Arduino.h> #include <SensirionI2cScd4x.h> #include <Wire.h> // SCD40 is connected to the Arduino Uno I2C pins: SDA = A4, SCL = A5 SensirionI2cScd4x scd4x; char errorMessage[64]; int16_t error; void setup() { Serial.begin(9600); while (!Serial) { delay(10); } Wire.begin(); scd4x.begin(Wire, SCD40_I2C_ADDR_62); // clean start scd4x.wakeUp(); // the result is ignored on purpose scd4x.stopPeriodicMeasurement(); scd4x.reinit(); error = scd4x.startPeriodicMeasurement(); if (error) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Cannot start the SCD40: "); Serial.println(errorMessage); return; } Serial.println("SCD40 started. New values come every 5 seconds."); } void loop() { delay(1000); bool dataReady = false; error = scd4x.getDataReadyStatus(dataReady); if (error || !dataReady) { return; // no new reading yet } uint16_t co2 = 0; float temperature = 0.0f; // in °C float humidity = 0.0f; // in %RH error = scd4x.readMeasurement(co2, temperature, humidity); if (error) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Read error: "); Serial.println(errorMessage); return; } // print all three values on one line Serial.print("CO2: "); Serial.print(co2); Serial.print(" ppm | Temperature: "); Serial.print(temperature, 1); Serial.print("\xC2\xB0"); // degree symbol Serial.print("C | Humidity: "); Serial.print(humidity, 1); Serial.println(" %"); }

Passos Rápidos

  • Mantenha a mesma ligação de cima
  • Copie o código acima e abra com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para fazer o upload do código para o Arduino
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
SCD40 started. New values come every 5 seconds. CO2: 612 ppm | Temperature: 25.3°C | Humidity: 47.2 % CO2: 618 ppm | Temperature: 25.3°C | Humidity: 47.0 % CO2: 625 ppm | Temperature: 25.4°C | Humidity: 46.9 % CO2: 633 ppm | Temperature: 25.4°C | Humidity: 46.8 %
Ln 11, Col 1
Arduino Uno on COM15
2

※ Nota:

O SCD40 não foi feito para ser um termômetro de alta precisão. Se você só precisa de temperatura e umidade, o tutorial Arduino - DHT22 é uma escolha mais simples.

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!