Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Medindo os níveis de CO2, também conhecido como o multiplicador de sonolência

Componentes e suprimentos

Andium Anduino WiFi
× 1
Arduino Due
× 1
sensor de co2
× 1

Aplicativos e serviços online

Arduino IDE
Adafruit IO

Sobre este projeto





Motivação


Você já teve dificuldade em sobreviver a uma reunião à tarde? Não consegue parar de bocejar? Dormindo durante suas aulas de 3 horas? Não, não estou vendendo um suplemento energético. Você provavelmente não dormiu o suficiente na noite passada, a maioria de nós não. Mas, sua sonolência pode não ser totalmente sua culpa! Má ventilação e altos níveis de dióxido de carbono podem fazer com que você se sinta sonolento!

Usando este sensor NDIR CO2, você pode medir com precisão os níveis de CO2 e ler os valores usando uma interface serial UART simples. Os sensores convencionais de CO2 costumavam consumir muita energia e demoravam para aquecer a lâmpada antes de serem preparados para fazer uma leitura. Agora, usando um detector de LED e infravermelho, você pode medir gases com precisão usando este sensor de 3,3 V que extrai menos de 1,5 ma em média. Ele usa dispersão óptica e algumas outras feitiçarias, veja o datasheet do Cozir para mais alguns detalhes, é impressionante.





Primeiros passos


Certo, então o que eu preciso para começar a medir o 'fator de sonolência' do meu cubículo de escritório?
  • Arduino devido ou zero
  • Escudo AnduinoWiFi
  • Sensor de CO2 Cozir
  • Alguns jumpers para conectar e ligar o sensor.

As conexões para este são simples, o sensor tem 10 pinos, mas você só precisará conectar 4.

Usando o Due conecte 3,3v a 3V3, GND ao aterramento, Rx (DIO19) ao Tx e Tx (DIO18) ao Rx. Certifique-se de ter "cruzado" os fios UART e lembre-se de que você não pode usar Tx (DIO1) e Rx (DIO0), a menos que queira abrir mão do termo serial para monitorar suas leituras. Usei Serial1 para o sensor, embora você possa usar qualquer um dos três UARTs restantes.

** Se você quiser ignorar o Arduino por enquanto e testar o envio de comandos diretamente para o sensor, basta abrir o putty ou seu termo serial favorito e conectar a 9600 baud, 8bits, sem paridade, 1 bit de parada. Pode ser necessário habilitar o envio de '/ r / n' em cada envio de ascii. **

*** Este sensor é 3,3v TTL, então certifique-se de usar um shifter lógico se os COMs forem originados em uma fonte de 5V ***





Calibrando o sensor


Existem algumas maneiras de calibrar o sensor de CO2. Uma das melhores maneiras é saturar o sensor com um gás conhecido (nitrogênio) que não contém dióxido de carbono. Isso irá gerar uma leitura zero conhecida. Se você não tem nenhum nitrogênio por perto, você também pode calibrar com bastante precisão usando ar fresco. Então, peguem seus óculos escuros, vamos fazer uma viagem de campo.

Quando você estiver do lado de fora, você vai querer executar o esboço de exemplo abaixo e descomentar
  calibrateFreshAir ();  

na rotina Setup (). Isso envia o comando 'G' via serial para o sensor solicitando ...

calibração! Bem, isso não é perfeito, já que não sei exatamente quais são as atuais condições de concentração de CO2 no 14º andar aqui em Nova York (possivelmente um pouco mais alto aqui do que a média da "Terra" no Havaí). Mas, uma vez que nossos limites para detectar realmente diferenças físicas no ambiente estão na casa dos 1.000 ppm, acho que estamos muito seguros de usar essa leitura de ar fresco de 450 ppm como nosso ponto de calibração para medir nossas salas de conferência e salas de aula.
  char buffer [20] ={0}; int c =0; void setup () {Serial.begin (9600); while (! Serial) {}; Serial1.begin (9600); while (! Serial) {}; Serial.println ("Comece a ler os níveis de CO2"); // setOperatingMode (CZR_STREAMING); // setOperatingMode (CZR_POLLING); // calibrateFreshAir (); } loop vazio () {atraso (10000); c =Solicitação ("Z"); Serial.print ("CO2:"); Serial.println (c); Serial.println (""); } Solicitação int (char * s) {buffer [0] ='\ 0'; int idx =0; Comando (s); atraso (250); while (Serial1.available ()) {buffer [idx ++] =Serial1.read (); } buffer [idx] ='\ 0'; uint16_t rv =0; switch (buffer [1]) {case 'T':rv =atoi (&buffer [5]); if (buffer [4] ==1) rv + =1000; pausa; padrão:rv =atoi (&buffer [2]); pausa; } return rv; } Comando void (char * s) {Serial1.print (s); Serial1.print ("\ r \ n"); } uint16_t calibrateFreshAir () {solicitação de retorno ("G"); } void setOperatingMode (modo uint8_t) {sprintf (buffer, "K% u", modo); Comando (buffer); }  

Também anote rapidamente as duas declarações #define no topo do esboço. Ao desempacotar o sensor pela primeira vez, pode ser necessário configurá-lo usando setOperatingMode (). Este esboço foi projetado para funcionar em modo de votação. Se você calibrou com sucesso e está lendo os níveis de CO2 para o terminal, você está pronto para passar a publicar isso na nuvem. Vamos nos conectar ao Adafruit IO e começar a visualizar os dados.





Publicação de métricas de CO2 na nuvem


Se você ainda não se conectou ao Adafruit IO usando o anduinoWiFi, verifique este artigo do projeto que será iniciado. Ele cobre todos os detalhes que irei encobrir aqui. Aqui está o esboço para você começar a publicar seus níveis de CO2 a cada minuto.
  #include  #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // Parâmetros WiFi #define WLAN_SSID "YOUR_SSID" #define WLAN_PASS "YOUR_PASSWLAN" // Adafruit IO #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "YOUR_AIO_USERNAME" #define AIO_KEY "YOUR_AIO_KEY" Cliente WiFiClient; Adafruit_MQTT_Client mqtt (&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); / ******************************* Feeds ****************** ********************** / // Configurar feed para co2 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish (&mqtt, AIO_USERNAME "/ feeds / co2"); / * Cria uma instância do AnduinoLCD * / AnduinoLCD LCD =AnduinoLCD (ST7735_CS_PIN, ST7735_DC_PIN, 13); estático int co2 =0; static int co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char buffer [20] ={0}; void setup () {Serial.begin (115200); atraso (3000); Serial1.begin (9600); // Conectar ao WiFi &Adafruit.IO connectToWiFi (); connectToAdafruit (); // Inicializa o LCD LCD.begin (); LCDinit (); // Calibração de CO2 e configuração inicial // setOperatingMode (CZR_STREAMING); // setOperatingMode (CZR_POLLING); // calibrateFreshAir (); } void loop () {// execute ping no adafruit io algumas vezes para garantir que permaneçamos conectados if (! mqtt.ping (3)) {// reconecte no adafruit io if (! mqtt.connected ()) connect (); } // Pega a leitura atual de co2 co2 =Request ("Z"); // converte int temp para char array char b [20]; String str; str =String (co2); para (int i =0; i  =0) mqtt.disconnect (); Serial.println (F ("Tentando conexão novamente ...")); atraso (5000); } Serial.println (F ("Adafruit IO Connected!")); } void displayCo2 (int co2, int co2Prev) {// limpar o valor obsoleto LCD.setTextColor (ST7735_BLACK); LCD.setTextSize (2); LCD.setTextWrap (true); LCD.setCursor (40,60); LCD.setTextSize (3); LCD.print (co2Prev); LCD.setTextSize (1); LCD.print ("ppm"); // Imprime o novo valor LCD.setTextColor (ST7735_WHITE); LCD.setTextSize (2); LCD.setTextWrap (true); LCD.setCursor (40,60); LCD.setTextSize (3); LCD.print (co2); LCD.setTextSize (1); LCD.print ("ppm"); } void connectToWiFi () {// Conectar ao ponto de acesso WiFi. atraso (10); Serial.print (F ("Conectando a")); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); enquanto (WiFi.status ()! =WL_CONNECTED) {atraso (500); Serial.print (F (".")); } Serial.println (F ("WiFi conectado!")); } void connectToAdafruit () {// conectar ao adafruit io connect (); } void LCDinit () {LCD.setBacklight (ON); LCD.fillScreen (ST7735_BLACK); // limpa a tela LCD.showBanner (); // carrega Andium Banner LCD.setTextColor (ST7735_WHITE); LCD.setTextSize (2); LCD.setTextWrap (true); LCD.setCursor (0,40); LCD.print ("CO2:"); } uint16_t Request (char * s) {buffer [0] ='\ 0'; int idx =0; // envia a solicitação de comando 'Z' para Comando (s) CO2; atraso (250); while (Serial1.available ()) {buffer [idx ++] =Serial1.read (); } buffer [idx] ='\ 0'; uint16_t rv =0; rv =atoi (&buffer [2]); return rv; } Comando void (char * s) {Serial1.print (s); Serial1.print ("\ r \ n"); } uint16_t calibrateFreshAir () {solicitação de retorno ("G"); } void setOperatingMode (modo uint8_t) {sprintf (buffer, "K% u", modo); Comando (buffer); }  





É isso!


Essa coisa é super sensível, você pode quase rastrear os níveis de ocupação da sala com base na concentração de CO2, mesmo em uma sala bem ventilada. É hora de provar ao seu professor que não é 'difícil' deixá-lo para baixo, é a ventilação insuficiente! É hora de mudar a aula para a praia!


Código

Anduino
Uma biblioteca Arduino para o escudo Andium (Anduino). Transforme seu Arduino em um AndiumNode.https://github.com/andium/Anduino

Processo de manufatura

  1. Sensirion:sensor de CO2 miniaturizado
  2. A integração dos dados do sensor com o microprocessador Raspberry Pi
  3. Hackeando o Lego EV3:Construa seus próprios “olhos” de sensor de objeto
  4. Como conectar um sensor ultrassônico Lego Mindstorms NXT ao Raspberry Pi
  5. Sensor de alcance ultrassônico HC-SR04 no Raspberry Pi
  6. Usando o sensor de radar pulsado A111 com um Raspberry Pi
  7. Melhorando os níveis de atendimento ao cliente na prateleira
  8. A alimentação sem fio de RF libera a onipresença das redes de sensores
  9. 5 Ws do sensor SARS-CoV-2 RapidPlex
  10. Quais são os níveis de manutenção industrial?