Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

CO2-niveaus meten, ook bekend als The Sleepiness Multiplier

Componenten en benodigdheden

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

Apps en online services

Arduino IDE
Adafruit IO

Over dit project

Motivatie

Heb je ooit moeite gehad om een ​​middagvergadering door te komen? Kun je niet stoppen met gapen? Door je 3 uur durende colleges heen slapen? Nee, ik verkoop je geen energiesupplement. Je hebt waarschijnlijk niet genoeg geslapen vannacht, de meesten van ons niet. Maar uw slaperigheid is misschien niet helemaal uw schuld! Slechte ventilatie en een hoog kooldioxidegehalte kunnen ervoor zorgen dat u zich slaperig voelt!

Met deze NDIR CO2-sensor kunt u nauwkeurig de CO2-niveaus meten en de waarden uitlezen met behulp van een eenvoudige UART seriële interface. Conventionele CO2-sensoren trokken vroeger veel stroom en hadden tijd nodig om de lamp op te warmen voordat ze klaar waren om een ​​meting uit te voeren. Nu met behulp van een LED- en infrarooddetector kunt u nauwkeurig gassen meten met behulp van deze 3,3v-sensor die gemiddeld minder dan 1,5 ma trekt. Het maakt gebruik van optische dispersie en andere hekserij, bekijk de datasheet van Cozir voor meer details, het is indrukwekkend.

Aan de slag

Dus wat heb ik nodig om de 'slaperigheidsfactor' van mijn kantoorhokje te meten?

  • Arduino Due of Zero
  • AnduinoWiFi-schild
  • Cozir CO2-sensor
  • Een paar jumpers om de sensor aan te sluiten en op te starten.

De aansluitingen voor deze zijn eenvoudig, de sensor heeft 10 pinnen, maar je hoeft er maar 4 aan te sluiten.

Gebruik de Due om 3.3v aan te sluiten op 3V3, GND op aarde, Rx(DIO19) op Tx en Tx(DIO18) op Rx. Zorg ervoor dat u de UART-draden "gekruist" hebt en onthoud dat u Tx(DIO1) en Rx(DIO0) niet kunt gebruiken, tenzij u wilt afzien van het gebruik van de seriële term om uw metingen te controleren. Ik heb Serial1 voor de sensor gebruikt, hoewel je een van de drie resterende UART's kunt gebruiken.

** Als je de Arduino voorlopig wilt omzeilen en het verzenden van commando's rechtstreeks naar de sensor wilt testen, open dan gewoon stopverf of je favoriete seriële term en maak verbinding met 9600 baud, 8 bits, geen pariteit, 1 stopbit. Mogelijk moet u het verzenden van '/r/n' inschakelen bij elke inzending van ascii.**

***Deze sensor is 3,3v TTL, dus zorg ervoor dat u een logische shifter gebruikt als de communicatie afkomstig is van een 5v-bron***

De sensor kalibreren

Er zijn een paar manieren om de CO2-sensor te kalibreren. Een van de beste manieren is de sensor te verzadigen in een bekend gas (stikstof) dat geen kooldioxide bevat. Dit genereert een bekende nulmeting. Als je geen stikstof hebt liggen, kun je ook redelijk nauwkeurig kalibreren met frisse lucht. Dus pak je zonnebril, we gaan op excursie.

Als je buiten bent, wil je de onderstaande voorbeeldschets uitvoeren en commentaar verwijderen

 kalibrerenFreshAir();  

in de Setup()-routine. Dit stuurt het 'G'-commando via serieel naar de sensor met het verzoek...

kalibratie! Nu is dit niet perfect, omdat ik niet precies weet wat de huidige CO2-concentratie-omstandigheden werkelijk zijn op de 14e verdieping hier in NYC (mogelijk een beetje hoger hier dan het 'aarde'-gemiddelde in Hawaï). Maar aangezien onze drempels voor het daadwerkelijk fysiek waarnemen van verschillen in de omgeving in de 1000 ppm liggen, denk ik dat we redelijk veilig zijn om deze 450 ppm frisse lucht te gebruiken als ons kalibratiepunt voor het meten van onze vergaderruimten en klaslokalen.

char buffer[20] ={0}; intc =0; void setup() { Serial.begin(9600); while(!Serial){}; Serial1.begin (9600); while(!Serial){}; Serial.println ("Begin met het lezen van CO2-niveaus"); //setOperatingMode (CZR_STREAMING); //setOperatingMode (CZR_POLLING); //kalibrerenFreshAir(); } void loop() {vertraging (10000); c =Verzoek("Z"); Serial.print("CO2 :");Serial.println(c); Serieel.println(""); } int Request(char* s) { buffer[0] ='\0'; int idx =0; Opdracht(en); vertraging (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; pauze; standaard:rv =atoi(&buffer[2]); pauze; } retour rv; } void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibrateFreshAir() { return Request("G"); } void setOperatingMode (uint8_t-modus) { sprintf (buffer, "K% u", modus); Commando(buffer); }  

Noteer ook snel de twee #define-statements bovenaan de schets. Wanneer u uw sensor voor het eerst uitpakt, moet u deze mogelijk configureren met setOperationMode(). Deze schets is ontworpen om in de pollingmodus te werken. Als u met succes hebt gekalibreerd en CO2-niveaus naar de terminal leest, bent u klaar om dit naar de cloud te publiceren. Laten we verbinding maken met Adafruit IO en beginnen met het visualiseren van de gegevens.

CO2-statistieken publiceren naar de cloud

Als je nog geen verbinding hebt gemaakt met Adafruit IO met behulp van anduinoWiFi, bekijk dan deze projectbeschrijving die aan de slag gaat. Het behandelt alle details die ik hier ga verdoezelen. Hier is de schets om u op weg te helpen om elke minuut uw CO2-niveaus te publiceren.

#include  #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // WiFi-parameters #define WLAN_SSID "YOUR_SSID" #define WLAN_PASS "YOUR_PASSWD" // Adafruit IO #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "YOUR_AIO_USERNAME" #define AIO_KEY "YOUR_AIO_KEY" WiFiClient-client; Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); /****************************** Feeds **************** *********************/ // Setup-feed voor co2 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/co2"); /*Maak een instantie van de AnduinoLCD */ AnduinoLCD LCD =AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, 13); statisch int co2 =0; statisch int co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char buffer [20] ={0}; void setup() { Serial.begin(115200); vertraging (3000); Serial1.begin (9600); //Verbind met WiFi &Adafruit.IO connectToWiFi(); connectToAdafruit(); // Initialiseer LCD LCD.begin (); LCDinit(); // CO2-kalibratie en initiële installatie // setOperatingMode (CZR_STREAMING); //setOperatingMode (CZR_POLLING); //kalibrerenFreshAir(); } void loop() { // adafruit io een paar keer pingen om er zeker van te zijn dat we verbonden blijven if(! mqtt.ping(3)) { // maak opnieuw verbinding met adafruit io if(! mqtt.connected()) connect(); } // Pak de huidige co2-lezing co2 =Request ("Z"); //converteer int temp naar char array char b [20]; String str; str=String(co2); for(int i=0; i=0) mqtt.disconnect(); Serial.println(F("Verbinding opnieuw proberen...")); vertraging (5000); } Serial.println(F("Adafruit IO Verbonden!")); } void displayCo2 (int co2, int co2Prev) {// wis de oude waarde 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"); // Print nieuwe waarde LCD.setTextColor (ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(40,60); LCD.setTextSize (3); LCD.afdruk(co2); LCD.setTextSize(1); LCD.print("ppm"); } void connectToWiFi() { // Maak verbinding met wifi-toegangspunt. vertraging(10); Serial.print(F("Verbinden met ")); Serieel.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() !=WL_CONNECTED) { delay(500); Serial.print(F(".")); } Serial.println(F("WiFi verbonden!")); } void connectToAdafruit() {// verbind met adafruit io connect(); } void LCDinit() { LCD.setBacklight(ON); LCD.fillScreen(ST7735_BLACK); // wis het scherm LCD.showBanner(); // laad 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; //stuur opdrachtverzoek 'Z' voor CO2-opdracht(en); vertraging (250); while(Serial1.available()) {buffer[idx++] =Serial1.read(); } buffer[idx] ='\0'; uint16_t rv =0; rv =atoi(&buffer[2]); terugkeer camper; } void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibrateFreshAir() { return Request("G"); } void setOperatingMode (uint8_t-modus) { sprintf (buffer, "K% u", modus); Commando(buffer); }  

Dat is het!

Dit ding is supergevoelig, je kunt de kamerbezetting bijna volgen op basis van de CO2-concentratie in zelfs een goed geventileerde kamer. Tijd om aan je professor te bewijzen dat het niet 'diff eq' is die je naar beneden haalt, het is de slechte ventilatie! Tijd om de klas naar het strand te verplaatsen!

Code

Anduino
Een Arduino-bibliotheek voor het Andium(Anduino)-schild. Transformeer uw Arduino in een AndiumNode.https://github.com/andium/Anduino

Productieproces

  1. CO2 versus Nd-lasersnijden:wat is het verschil?
  2. Sensirion:geminiaturiseerde CO2-sensor
  3. De integratie van sensorgegevens met Raspberry Pi-microprocessor
  4. De Lego EV3 hacken:bouw je eigen objectsensor "Ogen"
  5. Hoe sluit je een Lego Mindstorms NXT ultrasone sensor aan op de Raspberry Pi
  6. HC-SR04 ultrasone bereiksensor op de Raspberry Pi
  7. De A111 gepulseerde radarsensor gebruiken met een Raspberry Pi
  8. Klantenservice verbeteren op de plank
  9. RF Wireless Power ontketent de alomtegenwoordigheid van sensornetwerken
  10. 5 Ws van de SARS-CoV-2 RapidPlex-sensor
  11. BME680 – Een allesomvattende gids over de omgevingssensor