Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Измерение уровня CO2, также известного как множитель сонливости

Компоненты и расходные материалы

Andium Anduino WiFi
× 1
Arduino Due
× 1
датчик co2
× 1

Приложения и онлайн-сервисы

IDE Arduino
Adafruit IO

Об этом проекте

Мотивация

Вы когда-нибудь изо всех сил пытались пережить послеобеденное собрание? Не могу перестать зевать? Выспались на трехчасовых лекциях? Нет, я не продаю тебе энергетическую добавку. Вы, наверное, не выспались прошлой ночью, большинство из нас этого не делает. Но ваша сонливость может быть не полностью вашей виной! Плохая вентиляция и высокий уровень углекислого газа могут вызывать сонливость!

Используя этот датчик CO2 NDIR, вы можете точно измерять уровни CO2 и считывать значения с помощью простого последовательного интерфейса UART. Обычные датчики CO2 потребляли много энергии, и им требовалось время, чтобы прогреть лампу, прежде чем они были загружены для измерения. Теперь, используя светодиодный и инфракрасный детектор, вы можете точно измерять газы с помощью этого датчика 3,3 В, который в среднем тянет менее 1,5 мА. Он использует оптическую дисперсию и некоторые другие колдовства, более подробную информацию можно найти в таблице данных Cozir, это впечатляет.

Начало работы

Итак, что мне нужно, чтобы начать измерять «коэффициент сонливости» моей офисной кабинки?

  • Arduino Due или Zero
  • Щит AnduinoWiFi
  • Датчик CO2 Cozir
  • Несколько перемычек для подключения и включения датчика.

Подключения для этого просты, датчик имеет 10 контактов, но вам нужно только подключить 4 провода.

Используя Due, подключите 3,3 В к 3V3, GND к земле, Rx (DIO19) к Tx и Tx (DIO18) к Rx. Убедитесь, что вы «пересекли» провода UART, и помните, что вы не можете использовать Tx (DIO1) и Rx (DIO0), если вы не хотите отказаться от использования последовательного термина для отслеживания ваших показаний. Я использовал Serial1 для датчика, хотя вы можете использовать любой из трех оставшихся UART.

** Если вы хотите пока обойти Arduino и протестировать отправку команд непосредственно на датчик, просто откройте замазку или свой любимый последовательный термин и подключитесь со скоростью 9600 бод, 8 бит, без четности, 1 стоповый бит. Возможно, вам потребуется включить отправку '/ r / n' при каждой отправке ascii. **

*** Этот датчик - 3,3 В TTL, поэтому обязательно используйте логический сдвиг, если coms исходит от источника 5v ***

Калибровка датчика

Есть несколько способов откалибровать датчик CO2. Один из лучших способов - пропитать датчик известным газом (азотом), не содержащим углекислого газа. Это приведет к заведомо нулевому показанию. Если у вас нет азота, вы также можете довольно точно откалибровать, используя свежий воздух. Так что бери свои солнцезащитные очки, мы собираемся на экскурсию.

Когда вы выйдете на улицу, вам нужно будет запустить приведенный ниже пример скетча и раскомментировать

  calibrateFreshAir ();  

в подпрограмме Setup (). Это отправляет команду 'G' по последовательному каналу на датчик с запросом ...

калибровка! Это не идеально, так как я не знаю точно, каковы текущие условия концентрации CO2 на 14-м этаже здесь, в Нью-Йорке (возможно, здесь немного выше, чем в среднем на «Земле» на Гавайях). Но поскольку наши пороговые значения для фактического физического восприятия различий в окружающей среде находятся в пределах 1000 ppm, я думаю, что мы вполне безопасно использовать эти 450 ppm свежего воздуха в качестве точки калибровки для измерения наших конференц-залов и учебных классов.

  char buffer [20] ={0}; int c =0; void setup () {Serial.begin (9600); while (! Serial) {}; Serial1.begin (9600); while (! Serial) {}; Serial.println («Начните читать уровни CO2»); // setOperatingMode (CZR_STREAMING); // setOperatingMode (CZR_POLLING); // calibrateFreshAir (); } void loop () {задержка (10000); c =Запрос ("Z"); Serial.print ("CO2:"); Serial.println (c); Serial.println (""); } int Запрос (char * s) {буфер [0] ='\ 0'; int idx =0; Команда (и); задержка (250); в то время как (Serial1.available ()) {буфер [idx ++] =Serial1.read (); } буфер [idx] ='\ 0'; uint16_t rv =0; переключатель (буфер [1]) {case 'T':rv =atoi (&buffer [5]); если (буфер [4] ==1) rv + =1000; ломать; по умолчанию:rv =atoi (&buffer [2]); ломать; } return rv; } void Command (char * s) {Serial1.print (s); Serial1.print ("\ r \ n"); } uint16_t calibrateFreshAir () {запрос возврата ("G"); } void setOperatingMode (режим uint8_t) {sprintf (буфер, "K% u", режим); Команда (буфер); }  

Также обратите внимание на два оператора #define в верхней части эскиза. Когда вы впервые распаковываете датчик, вам может потребоваться настроить его с помощью setOperatingMode (). Этот скетч предназначен для работы в режиме опроса. Если вы успешно откалибровали и считываете уровни CO2 на терминал, вы готовы перейти к публикации этого в облаке. Давайте подключимся к Adafruit IO и начнем визуализировать данные.

Публикация показателей CO2 в облаке

Если вы еще не подключились к Adafruit IO с помощью anduinoWiFi, ознакомьтесь с описанием этого проекта, с которого начнем. Он охватывает все детали, которые я здесь замалчиваю. Вот набросок, который поможет вам начать ежеминутно публиковать свои уровни CO2.

  #include  #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // параметры WiFi #define WLAN_SSID "YOUR_SSID" #define WLAN_PASS "YOUR_PASSWLAN_PASS" 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" Клиент WiFiClient; Adafruit_MQTT_Client mqtt (&клиент, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); / ***************************** Каналы ****************** ********************* / // Настройка канала для co2 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish (&mqtt, AIO_USERNAME "/ feeds / co2"); / * Создаем экземпляр AnduinoLCD * / AnduinoLCD LCD =AnduinoLCD (ST7735_CS_PIN, ST7735_DC_PIN, 13); статический int co2 =0; статический int co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char buffer [20] ={0}; void setup () {Serial.begin (115200); задержка (3000); Serial1.begin (9600); // Подключаемся к Wi-Fi и Adafruit.IO connectToWiFi (); connectToAdafruit (); // Инициализируем ЖК-дисплей LCD.begin (); LCDinit (); // Калибровка CO2 и начальная настройка // setOperatingMode (CZR_STREAMING); // setOperatingMode (CZR_POLLING); // calibrateFreshAir (); } void loop () {// несколько раз пингуем adafruit io, чтобы убедиться, что мы остаемся на связи if (! mqtt.ping (3)) {// переподключимся к adafruit io if (! mqtt.connected ()) connect (); } // Захватываем текущее показание co2 co2 =Request ("Z"); // конвертируем int temp в char array char b [20]; String str; str =Строка (co2); для (int я =0; я  =0) mqtt.disconnect (); Serial.println (F ("Повторная попытка подключения ...")); задержка (5000); } Serial.println (F («Adafruit IO подключен!»)); } void displayCo2 (int co2, int co2Prev) {// очистить устаревшее значение LCD.setTextColor (ST7735_BLACK); LCD.setTextSize (2); LCD.setTextWrap (истина); LCD.setCursor (40,60); LCD.setTextSize (3); LCD.print (co2Prev); LCD.setTextSize (1); LCD.print («ppm»); // Распечатать новое значение LCD.setTextColor (ST7735_WHITE); LCD.setTextSize (2); LCD.setTextWrap (истина); LCD.setCursor (40,60); LCD.setTextSize (3); LCD.print (co2); LCD.setTextSize (1); LCD.print («ppm»); } void connectToWiFi () {// Подключаемся к точке доступа Wi-Fi. задержка (10); Serial.print (F («Подключение к»)); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); в то время как (WiFi.status ()! =WL_CONNECTED) {задержка (500); Serial.print (F (".")); } Serial.println (F («WiFi подключен!»)); } void connectToAdafruit () {// подключаемся к adafruit io connect (); } void LCDinit () {LCD.setBacklight (ВКЛ); LCD.fillScreen (ST7735_BLACK); // очищаем экран LCD.showBanner (); // загружаем Andium Banner LCD.setTextColor (ST7735_WHITE); LCD.setTextSize (2); LCD.setTextWrap (истина); LCD.setCursor (0,40); LCD.print ("CO2:"); } uint16_t Запрос (char * s) {buffer [0] ='\ 0'; int idx =0; // отправляем запрос команды 'Z' для CO2 Command (s); задержка (250); в то время как (Serial1.available ()) {буфер [idx ++] =Serial1.read (); } буфер [idx] ='\ 0'; uint16_t rv =0; rv =atoi (&буфер [2]); return rv; } void Command (char * s) {Serial1.print (s); Serial1.print ("\ r \ n"); } uint16_t calibrateFreshAir () {запрос возврата ("G"); } void setOperatingMode (режим uint8_t) {sprintf (буфер, "K% u", режим); Команда (буфер); }  

Вот и все!

Эта штука сверхчувствительная, вы можете почти отслеживать уровни заполнения комнаты, основываясь на концентрации CO2 даже в хорошо вентилируемой комнате. Пора доказать своему профессору, что вас пугает не diff eq, а плохая вентиляция! Пора переносить занятия на пляж!

Код

Андуино
Библиотека Arduino для щита Andium (Андуино). Превратите свой Arduino в AndiumNode. Https://github.com/andium/Anduino

Производственный процесс

  1. Sensirion:миниатюрный датчик CO2
  2. Интеграция данных датчика с микропроцессором Raspberry Pi
  3. Взлом Lego EV3:создайте свой собственный объектный датчик «глаза»
  4. Как подключить ультразвуковой датчик Lego Mindstorms NXT к Raspberry Pi
  5. Ультразвуковой датчик диапазона HC-SR04 на Raspberry Pi
  6. Использование импульсного радиолокационного датчика A111 с Raspberry Pi
  7. Повышение уровня обслуживания клиентов на полке
  8. RF Wireless Power раскрывает повсеместное распространение сенсорных сетей
  9. 5 Вт сенсора SARS-CoV-2 RapidPlex
  10. Каковы уровни промышленного обслуживания?