Arduino Nano ESP32 - Sensor de CO2 SCD40

Uma sala cheia de gente vai se enchendo de CO2 aos poucos. Você não vê nem sente o cheiro, mas sente isso como uma cabeça pesada e perda de foco. Neste guia, vamos aprender a usar o sensor de CO2 SCD40 com o Arduino Nano ESP32 para colocar um número real nisso. Em detalhes, vamos aprender:

Arduino Nano ESP32 SCD40 CO2 sensor

Hardware Necessário

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×SCD40 CO2 Sensor Module
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Sensor de CO2 SCD40

O SCD40 da Sensirion mede o CO2 verdadeiro, não um palpite de "eCO2" como o MQ135 ou o CCS811. Dentro de sua pequena câmara, uma luz infravermelha pisca ligando e desligando. O CO2 absorve parte dessa luz e faz um minúsculo "som" de pressão, e um microfone embutido o ouve. Mais CO2 dá um sinal mais forte. O módulo conversa com o Arduino Nano ESP32 por I2C, então precisa de apenas dois fios de sinal.

SCD40 CO2 sensor module pinout

O módulo tem quatro pinos:

  • Pino VCC: conecte a 3.3V (o sensor aceita de 2.4V a 5.5V). Algumas placas o rotulam como VIN.
  • Pino GND: conecte ao GND (0V).
  • Pino SDA: linha de dados I2C. Conecte ao A4 do Arduino Nano ESP32.
  • Pino SCL: linha de clock I2C. Conecte ao A5 do Arduino Nano ESP32.

A maioria dos módulos SCD40 já tem resistores de pull-up I2C na placa, então você não precisa adicioná-los.

SCD40
Tensão de alimentaçã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
Nova leitura a cada 5 segundos (a cada 30 segundos no modo de baixo consumo)
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 15mA a 3.3V

O Que Significam os Números de CO2?

CO2 (ppm) Qualidade do ar O que fazer
cerca de 400 Ar externo Nada, este é ar fresco
400 a 1000 Bom ar interno Nada
1000 a 2000 Abafado Abra uma janela
acima de 2000 Ruim Ventile agora, dor de cabeça e sonolência são possíveis

※ Nota:

A autocalibração automática (ASC) vem ATIVADA por padrão. O sensor espera ver ar fresco, de nível externo (cerca de 400 ppm), pelo menos uma vez por semana, idealmente por uma hora ou mais. Se ele nunca recebe ar fresco, suas leituras podem derivar aos poucos. Além disso, as primeiras leituras depois de ligar podem ser menos precisas.

Diagrama de Ligação

O SCD40 usa os pinos I2C padrão do Arduino Nano ESP32: A4 para SDA e A5 para SCL. Como a placa funciona a 3.3V, alimente o módulo pelo pino 3V3.

The wiring diagram between Arduino Nano ESP32 and SCD40 CO2 sensor

This image is created using Fritzing. Click to enlarge image

Módulo SCD40 Arduino Nano ESP32
VCC → 3V3
GND → GND
SDA → A4
SCL → A5

Como Programar o SCD40

  • Inclua as bibliotecas.
#include <SensirionI2cScd4x.h> #include <Wire.h>
  • Crie o objeto do sensor.
SensirionI2cScd4x scd4x;
  • Inicie o I2C e diga à biblioteca qual barramento e qual endereço usar.
Wire.begin(); scd4x.begin(Wire, SCD40_I2C_ADDR_62);
  • Inicie a medição periódica (um novo valor a cada 5 segundos).
scd4x.startPeriodicMeasurement();
  • Verifique se um novo valor está pronto e depois leia-o.
bool dataReady = false; scd4x.getDataReadyStatus(dataReady); if (dataReady) { scd4x.readMeasurement(co2, temperature, humidity); }

A biblioteca sempre lê CO2, temperatura e umidade juntos. No primeiro sketch, imprimimos apenas o valor de CO2.

Código Arduino Nano ESP32 - Sensor de CO2 SCD40

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-scd40-co2-sensor */ // Read the CO2 level (ppm) from an SCD40 sensor and print it with a simple air-quality word. // Wiring (I2C): SDA -> A4, SCL -> A5, VCC -> 3V3, GND -> GND #include <Arduino.h> #include <SensirionI2cScd4x.h> // "Sensirion I2C SCD4x" library by Sensirion #include <Wire.h> SensirionI2cScd4x scd4x; // the SCD40 sensor object char errorMessage[64]; // buffer for error text int16_t error; // 0 = no error void setup() { Serial.begin(9600); delay(1000); Wire.begin(); // Nano ESP32 default I2C pins: A4 (SDA), A5 (SCL) scd4x.begin(Wire, SCD40_I2C_ADDR_62); // the SCD40 address is 0x62 // Clean start: wake the sensor, stop any old measurement, reload its settings scd4x.wakeUp(); // may return an error if the sensor is already awake, that is OK scd4x.stopPeriodicMeasurement(); scd4x.reinit(); // Start periodic mode: one new reading about every 5 seconds error = scd4x.startPeriodicMeasurement(); if (error != 0) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Cannot start measurement: "); Serial.println(errorMessage); return; } Serial.println("SCD40 started. Waiting for the first CO2 reading..."); } void loop() { // Ask the sensor if a new reading is ready bool dataReady = false; error = scd4x.getDataReadyStatus(dataReady); if (error != 0) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Data ready error: "); Serial.println(errorMessage); delay(1000); return; } if (!dataReady) { // not ready yet, check again soon delay(500); return; } // Read the measurement (the library always returns all three values) uint16_t co2 = 0; float temperature = 0.0f; float humidity = 0.0f; error = scd4x.readMeasurement(co2, temperature, humidity); if (error != 0) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Read error: "); Serial.println(errorMessage); return; } // Print the CO2 value and a simple air-quality word Serial.print("CO2: "); Serial.print(co2); Serial.print(" ppm -> "); Serial.println(airQualityText(co2)); } // Turn a ppm value into a simple word const char* airQualityText(uint16_t ppm) { if (ppm < 1000) return "Good"; if (ppm < 2000) return "Moderate - open a window"; return "Poor - ventilate now"; }

Passos Rápidos

Para começar com o Arduino Nano ESP32, siga estes passos:

  • Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
  • Ligue o módulo SCD40 ao Arduino Nano ESP32 de acordo com a tabela e o diagrama acima.
  • Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
  • Abra o Library Manager clicando no ícone Library Manager na barra de navegação à esquerda da Arduino IDE.
  • Digite "SCD4x" na caixa de pesquisa e procure a biblioteca Sensirion I2C SCD4x da Sensirion.
  • Clique no botão Install.
  • Uma janela pede para instalar uma dependência (Sensirion Core). Clique em Install All.
  • 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 Nano ESP32
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 Nano ESP32 on COM15
1
  • Copie o código acima e cole-o na Arduino IDE.
  • Clique no botão Upload para enviar o código ao Arduino Nano ESP32.
  • Abra o Serial Monitor. O primeiro valor chega depois de cerca de 5 segundos.
  • Respire suavemente perto do sensor por alguns segundos e veja o valor de CO2 subir e depois cair de novo.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
SCD40 started. Waiting for the first CO2 reading... CO2: 612 ppm -> Good CO2: 608 ppm -> Good CO2: 615 ppm -> Good CO2: 1340 ppm -> Moderate - open a window CO2: 1185 ppm -> Moderate - open a window CO2: 947 ppm -> Good CO2: 731 ppm -> Good CO2: 664 ppm -> Good
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

※ Nota:

Se você vir uma mensagem de erro em vez de números, verifique se o SDA vai para o A4 e o SCL vai para o A5, e não o contrário.

Lendo a Temperatura e a Umidade do SCD40

O SCD40 tem dentro dele um pequeno sensor próprio de temperatura e umidade. Ele os usa para corrigir o valor de CO2, e a biblioteca nos entrega esses valores de graça na mesma chamada readMeasurement(). Então, sem nenhuma ligação extra, o Arduino Nano ESP32 pode mostrar os três valores. A ligação e a biblioteca continuam as mesmas de acima.

※ Nota:

O sensor esquenta um pouco enquanto trabalha, então sua temperatura pode marcar um pouco mais do que a do ambiente. Isso é bom para um monitor de ambiente, mas use um sensor dedicado se você precisar de uma temperatura precisa.

Código Arduino Nano ESP32 - CO2, Temperatura e Umidade do SCD40

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-scd40-co2-sensor */ // Read CO2 (ppm), temperature (°C) and humidity (%RH) from an SCD40 sensor. // Wiring (I2C): SDA -> A4, SCL -> A5, VCC -> 3V3, GND -> GND #include <Arduino.h> #include <SensirionI2cScd4x.h> // "Sensirion I2C SCD4x" library by Sensirion #include <Wire.h> SensirionI2cScd4x scd4x; // the SCD40 sensor object char errorMessage[64]; // buffer for error text int16_t error; // 0 = no error void setup() { Serial.begin(9600); delay(1000); Wire.begin(); // Nano ESP32 default I2C pins: A4 (SDA), A5 (SCL) scd4x.begin(Wire, SCD40_I2C_ADDR_62); // the SCD40 address is 0x62 // Clean start scd4x.wakeUp(); // an error here only means the sensor was already awake scd4x.stopPeriodicMeasurement(); scd4x.reinit(); error = scd4x.startPeriodicMeasurement(); // new data about every 5 seconds if (error != 0) { errorToString(error, errorMessage, sizeof errorMessage); Serial.print("Cannot start measurement: "); Serial.println(errorMessage); return; } Serial.println("SCD40 started (CO2 + temperature + humidity)"); } void loop() { bool dataReady = false; error = scd4x.getDataReadyStatus(dataReady); if (error != 0 || !dataReady) { // error or no new data yet: wait and try again delay(500); return; } uint16_t co2 = 0; float temperature = 0.0f; float humidity = 0.0f; error = scd4x.readMeasurement(co2, temperature, humidity); if (error != 0) { 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(" °C | Humidity: "); Serial.print(humidity, 1); Serial.println(" %"); }

Passos Rápidos

  • Copie o código acima e cole-o na Arduino IDE.
  • Clique no botão Upload para enviar o código ao Arduino Nano ESP32.
  • Abra o Serial Monitor para ver os três valores em uma só linha.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
SCD40 started (CO2 + temperature + humidity) CO2: 702 ppm | Temperature: 25.6 °C | Humidity: 47.3 % CO2: 709 ppm | Temperature: 25.6 °C | Humidity: 47.1 % CO2: 716 ppm | Temperature: 25.7 °C | Humidity: 46.9 % CO2: 711 ppm | Temperature: 25.7 °C | Humidity: 47.0 %
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Vídeo

※ 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!