Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Medición de niveles de CO2, también conocido como el multiplicador de somnolencia

Componentes y suministros

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

Aplicaciones y servicios en línea

Arduino IDE
Adafruit IO

Acerca de este proyecto

Motivación

¿Alguna vez ha tenido problemas para pasar una reunión por la tarde? ¿No puedes dejar de bostezar? ¿Durmiendo durante sus conferencias de 3 horas? No, no te vendo un suplemento energético. Probablemente no durmió lo suficiente anoche, la mayoría de nosotros no. ¡Pero su somnolencia podría no ser completamente culpa suya! La mala ventilación y los altos niveles de dióxido de carbono pueden causarle sueño.

Con este sensor de CO2 NDIR, puede medir con precisión los niveles de CO2 y leer los valores utilizando una interfaz serie UART simple. Los sensores de CO2 convencionales solían consumir mucha energía y necesitaban tiempo para calentar la lámpara antes de que estuvieran preparados para tomar una lectura. Ahora, con un detector de LED e infrarrojos, puede medir con precisión los gases con este sensor de 3.3v que extrae menos de 1.5ma en promedio. Utiliza dispersión óptica y alguna otra brujería, consulte la hoja de datos de Cozir para obtener más detalles, es impresionante.

Comenzando

Entonces, ¿qué necesito para comenzar a medir el 'factor de somnolencia' de mi cubículo de oficina?

  • Arduino Due o Zero
  • Escudo AnduinoWiFi
  • Sensor de CO2 Cozir
  • Algunos puentes para conectar y encender el sensor.

Las conexiones para este son simples, el sensor tiene 10 pines pero solo necesitará cablear 4.

Usando Due, conecte 3.3v a 3V3, GND a tierra, Rx (DIO19) a Tx y Tx (DIO18) a Rx. Asegúrese de haber "cruzado" los cables UART y recuerde que no puede usar Tx (DIO1) y Rx (DIO0) a menos que desee renunciar al uso del término serial para monitorear sus lecturas. He usado Serial1 para el sensor, aunque podrías usar cualquiera de los tres UART restantes.

** Si desea omitir el Arduino por ahora y probar el envío de comandos directamente al sensor, simplemente abra Putty o su término de serie favorito y conéctelo a 9600 baudios, 8 bits, sin paridad, 1 bit de parada. Es posible que deba habilitar el envío de '/ r / n' en cada envío de ascii. **

*** Este sensor es 3.3v TTL, así que asegúrese de usar un cambiador lógico si las comunicaciones se originan en una fuente de 5v ***

Calibrando el sensor

Hay varias formas de calibrar el sensor de CO2. Una de las mejores formas es saturar el sensor en un gas conocido (nitrógeno) que no contiene dióxido de carbono. Esto generará una lectura cero conocida. Si no tiene nitrógeno por ahí, también puede calibrar con bastante precisión usando aire fresco. Así que coge tus gafas de sol, nos vamos de excursión.

Cuando esté afuera, querrá ejecutar el boceto de ejemplo a continuación y descomentar

  calibrateFreshAir ();  

en la rutina Setup (). Esto envía el comando 'G' en serie al sensor que solicita ...

¡calibración! Ahora bien, esto no es perfecto, ya que no sé exactamente cuáles son las condiciones actuales de concentración de CO2 en el piso 14 aquí en Nueva York (posiblemente un poco más alto aquí que el promedio "terrestre" en Hawai). Pero dado que nuestros umbrales para detectar diferencias reales en el medio ambiente están en los 1000 ppm, creo que estamos bastante seguros de usar esta lectura de aire fresco de 450 ppm como nuestro punto de calibración para medir nuestras salas de conferencias y aulas.

  búfer de caracteres [20] ={0}; int c =0; configuración vacía () {Serial.begin (9600); while (! Serial) {}; Serial1.begin (9600); while (! Serial) {}; Serial.println ("Comenzar a leer los niveles de CO2"); // setOperatingMode (CZR_STREAMING); // setOperatingMode (CZR_POLLING); // calibrateFreshAir (); } bucle vacío () {retraso (10000); c =Solicitud ("Z"); Serial.print ("CO2:"); Serial.println (c); Serial.println (""); } int Solicitud (char * s) {búfer [0] ='\ 0'; int idx =0; Comando (s); retraso (250); while (Serial1.available ()) {buffer [idx ++] =Serial1.read (); } búfer [idx] ='\ 0'; uint16_t rv =0; cambiar (búfer [1]) {caso 'T':rv =atoi (&búfer [5]); if (buffer [4] ==1) rv + =1000; descanso; predeterminado:rv =atoi (&buffer [2]); descanso; } return rv; } comando void (char * s) {Serial1.print (s); Serial1.print ("\ r \ n"); } uint16_t calibrateFreshAir () {Solicitud de devolución ("G"); } void setOperatingMode (modo uint8_t) {sprintf (búfer, "K% u", modo); Comando (búfer); }  

También tome nota rápida de las dos declaraciones #define en la parte superior del boceto. Cuando desempaqueta el sensor por primera vez, es posible que deba configurarlo usando setOperatingMode (). Este boceto está diseñado para funcionar en modo de sondeo. Si ha calibrado con éxito y está leyendo los niveles de CO2 en el terminal, está listo para continuar y publicarlo en la nube. Conectémonos a Adafruit IO y comencemos a visualizar los datos.

Publicar métricas de CO2 en la nube

Si aún no se ha conectado a Adafruit IO usando anduinoWiFi, consulte este artículo del proyecto que comenzará. Cubre todos los detalles que voy a resumir aquí. Aquí está el boceto para comenzar a publicar sus niveles de CO2 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_PASSWD "YOUR_PASS" // 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 (&cliente, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); / ***************************** Feeds ****************** ********************* / // Configuración de feed para co2 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish (&mqtt, AIO_USERNAME "/ feeds / co2"); / * Crea una instancia de AnduinoLCD * / AnduinoLCD LCD =AnduinoLCD (ST7735_CS_PIN, ST7735_DC_PIN, 13); static int co2 =0; static int co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char buffer [20] ={0}; configuración vacía () {Serial.begin (115200); retraso (3000); Serial1.begin (9600); // Conéctese a WiFi y Adafruit.IO connectToWiFi (); connectToAdafruit (); // Inicializar LCD LCD.begin (); LCDinit (); // Calibración de CO2 y configuración inicial // setOperatingMode (CZR_STREAMING); // setOperatingMode (CZR_POLLING); // calibrateFreshAir (); } void loop () {// ping adafruit io varias veces para asegurarnos de que permanecemos conectados if (! mqtt.ping (3)) {// reconectar a adafruit io if (! mqtt.connected ()) connect (); } // Toma la lectura actual de co2 co2 =Request ("Z"); // convierte int temp a char array char b [20]; String str; str =Cadena (co2); for (int i =0; i  =0) mqtt.disconnect (); Serial.println (F ("Reintentando conexión ...")); retraso (5000); } Serial.println (F ("Adafruit IO Connected!")); } void displayCo2 (int co2, int co2Prev) {// borra el valor obsoleto LCD.setTextColor (ST7735_BLACK); LCD.setTextSize (2); LCD.setTextWrap (verdadero); LCD.setCursor (40,60); LCD.setTextSize (3); LCD.print (co2Prev); LCD.setTextSize (1); LCD.print ("ppm"); // Imprimir nuevo valor LCD.setTextColor (ST7735_WHITE); LCD.setTextSize (2); LCD.setTextWrap (verdadero); LCD.setCursor (40,60); LCD.setTextSize (3); LCD.print (co2); LCD.setTextSize (1); LCD.print ("ppm"); } void connectToWiFi () {// Conectarse al punto de acceso WiFi. retraso (10); Serial.print (F ("Conectando a")); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! =WL_CONNECTED) {retraso (500); Serial.print (F (".")); } Serial.println (F ("¡WiFi conectado!")); } void connectToAdafruit () {// conectarse a adafruit io connect (); } void LCDinit () {LCD.setBacklight (ON); LCD.fillScreen (ST7735_BLACK); // limpia la pantalla LCD.showBanner (); // cargar Andium Banner LCD.setTextColor (ST7735_WHITE); LCD.setTextSize (2); LCD.setTextWrap (verdadero); LCD.setCursor (0,40); LCD.print ("CO2:"); } uint16_t Solicitud (char * s) {búfer [0] ='\ 0'; int idx =0; // enviar solicitud de comando 'Z' para comando (s) de CO2; retraso (250); while (Serial1.available ()) {buffer [idx ++] =Serial1.read (); } búfer [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 () {Solicitud de devolución ("G"); } void setOperatingMode (modo uint8_t) {sprintf (búfer, "K% u", modo); Comando (búfer); }  

¡Eso es!

Esta cosa es súper sensible, casi puede rastrear los niveles de ocupación de la habitación en función de la concentración de CO2 incluso en una habitación bien ventilada. Es hora de demostrarle a su profesor que no es el 'diff eq' lo que lo deprime, ¡es la mala ventilación! ¡Es hora de trasladar la clase a la playa!

Código

Anduino
Una biblioteca Arduino para el escudo de Andium (Anduino). Transforma tu Arduino en un AndiumNode.https://github.com/andium/Anduino

Proceso de manufactura

  1. Corte con láser CO2 vs Nd:¿Cuál es la diferencia?
  2. Sensirion:sensor de CO2 miniaturizado
  3. La integración de los datos del sensor con el microprocesador Raspberry Pi
  4. Hackear el Lego EV3:construye tus propios "ojos" de sensor de objetos
  5. Cómo conectar un sensor ultrasónico Lego Mindstorms NXT a la Raspberry Pi
  6. Sensor de rango ultrasónico HC-SR04 en Raspberry Pi
  7. Uso del sensor de radar pulsado A111 con una Raspberry Pi
  8. Mejora de los niveles de servicio al cliente en la estantería
  9. La energía inalámbrica RF libera la ubicuidad de las redes de sensores
  10. 5 Ws del sensor SARS-CoV-2 RapidPlex
  11. ¿Cuáles son los niveles de mantenimiento industrial?