산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

졸음 승수라고도 불리는 CO2 수치 측정

구성품 및 소모품

Andium Anduino WiFi
× 1
Arduino Due
× 1
이산화탄소 센서
× 1

앱 및 온라인 서비스

Arduino IDE
Adafruit IO

이 프로젝트 정보

동기

오후 회의를 통과하기 위해 애쓴 적이 있습니까? 하품을 멈출 수 없습니까? 3시간 강의를 듣고 잠이 드시나요? 아니요, 에너지 보충제를 판매하는 것이 아닙니다. 당신은 아마도 지난 밤에 충분한 수면을 취하지 못했을 것입니다. 우리 대부분은 그렇지 않습니다. 그러나 졸음이 완전히 당신의 잘못은 아닐 수도 있습니다! 열악한 환기와 높은 수준의 이산화탄소는 졸음을 유발할 수 있습니다!

이 NDIR CO2 센서를 사용하면 CO2 수준을 정확하게 측정하고 간단한 UART 직렬 인터페이스를 사용하여 값을 읽을 수 있습니다. 기존의 CO2 센서는 많은 전력을 소비하고 판독을 위해 준비되기 전에 램프를 예열하는 데 시간이 걸렸습니다. 이제 LED 및 적외선 감지기를 사용하여 평균 1.5ma 미만을 당기는 이 3.3v 센서를 사용하여 가스를 정확하게 측정할 수 있습니다. 광학 분산 및 기타 마법을 사용합니다. 자세한 내용은 Cozir의 데이터시트를 확인하세요. 인상적입니다.

시작하기

제 사무실 칸막이의 '수면 요인' 측정을 시작하려면 무엇이 필요합니까?

<울>
  • Arduino Due 또는 Zero
  • <울>
  • AnduinoWiFi 실드
  • <울>
  • Cozir CO2 센서
  • <울>
  • 센서를 연결하고 전원을 켜기 위한 몇 개의 점퍼
  • 이것에 대한 연결은 간단합니다. 센서에는 10개의 핀이 있지만 4개만 연결하면 됩니다.

    Due를 사용하여 3.3v를 3V3에 연결하고 GND를 접지로, Rx(DIO19)를 Tx로, Tx(DIO18)를 Rx에 연결합니다. UART 와이어를 "교차"했는지 확인하고 판독값을 모니터링하기 위해 직렬 용어를 사용하는 것을 포기하지 않는 한 Tx(DIO1) 및 Rx(DIO0)를 사용할 수 없음을 기억하십시오. 센서에 Serial1을 사용했지만 나머지 세 가지 UART를 사용할 수 있습니다.

    ** 지금은 Arduino를 우회하고 센서에 직접 명령을 보내는 테스트를 하고 싶다면 퍼티 또는 선호하는 직렬 용어를 열고 9600 보드, 8비트, 패리티 없음, 1 정지 비트에서 연결하십시오. ASCII를 제출할 때마다 '/r/n' 전송을 활성화해야 할 수도 있습니다.**

    ***이 센서는 3.3v입니다. TTL이므로 통신이 5v 소스에서 시작된 경우 논리 시프터를 사용해야 합니다.***

    센서 보정

    CO2 센서를 보정하는 몇 가지 방법이 있습니다. 가장 좋은 방법 중 하나는 이산화탄소를 포함하지 않는 알려진 가스(질소)에서 센서를 포화시키는 것입니다. 이것은 알려진 0 판독값을 생성합니다. 주위에 질소가 없다면 신선한 공기를 사용하여 상당히 정확하게 보정할 수도 있습니다. 그러니 선글라스를 챙기고 견학을 가자.

    밖에 있을 때 아래 예제 스케치를 실행하고 주석을 제거하고 싶을 것입니다.

    <사전><코드> calibrationFreshAir();

    Setup() 루틴에서. 이것은 'G' 명령을 직렬을 통해 요청하는 센서에 보냅니다...

    구경 측정! 지금은 여기 NYC의 14층에 있는 현재 CO2 농도 조건이 실제로 무엇인지 정확히 알지 못하기 때문에 완벽하지 않습니다(하와이의 "지구" 평균보다 여기가 약간 높을 수 있음). 그러나 실제로 물리적으로 환경의 차이를 감지하는 임계값은 1,000ppm이므로 이 450ppm의 신선한 공기 측정값을 회의실과 교실 측정을 위한 보정 지점으로 사용하는 것이 안전하다고 생각합니다.

    문자 버퍼[20] ={0}; 정수 c =0; 무효 설정() { Serial.begin(9600); 동안(!직렬){}; Serial1.begin(9600); 동안(!직렬){}; Serial.println("CO2 수준 읽기 시작"); //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //calibrationFreshAir(); } 무효 루프() { 지연(10000); c =요청("Z"); Serial.print("CO2 :");Serial.println(c); Serial.println(""); } int 요청(char* s) { 버퍼[0] ='\0'; 정수 idx =0; 명령(들); 지연(250); while(Serial1.available()) { 버퍼[idx++] =Serial1.read(); } 버퍼[idx] ='\0'; uint16_t rv =0; switch(buffer[1]) { case 'T' :rv =atoi(&buffer[5]); if (버퍼[4] ==1) rv +=1000; 부서지다; 기본값 :rv =atoi(&buffer[2]); 부서지다; } 리턴 rv; } 무효 명령(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibrationFreshAir() { 반환 요청("G"); } 무효 setOperatingMode(uint8_t 모드) { sprintf(버퍼, "K %u", 모드); 명령(버퍼); }  

    또한 스케치 상단에 있는 두 개의 #define 문을 빠르게 기록해 두십시오. 센서를 처음 개봉할 때 setOperatingMode()를 사용하여 센서를 구성해야 할 수도 있습니다. 이 스케치는 폴링 모드에서 작동하도록 설계되었습니다. 성공적으로 보정하고 터미널에서 CO2 수준을 읽는 중이면 이를 클라우드에 게시할 준비가 된 것입니다. Adafruit IO에 연결하여 데이터 시각화를 시작해 보겠습니다.

    클라우드에 CO2 측정항목 게시

    아직 anduinoWiFi를 사용하여 Adafruit IO에 연결하지 않았다면 시작할 이 프로젝트 작성을 확인하세요. 여기에서 설명할 모든 세부 사항을 다룹니다. 다음은 1분마다 CO2 수치를 게시할 수 있는 스케치입니다.

    #include  #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // WiFi 매개변수 #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 클라이언트; Adafruit_MQTT_Client mqtt(&client, 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); 정적 정수 CO2 =0; 정적 정수 co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char 버퍼[20] ={0}; 무효 설정() { Serial.begin(115200); 지연(3000); Serial1.begin(9600); //WiFi &Adafruit.IO에 연결 connectToWiFi(); connectToAdafruit(); //LCD 초기화 LCD.begin(); LCDinit(); //CO2 보정 및 초기 설정 //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //calibrationFreshAir(); } void loop() { // 연결 상태를 유지하기 위해 adafruit io를 몇 번 ping if(! mqtt.ping(3)) { // adafruit io에 다시 연결 if(! mqtt.connected()) connect(); } // 현재 co2 읽기 co2 =Request("Z"); // int temp를 char 배열로 변환 char b[20]; 문자열 str; str=문자열(co2); for(int i=0; i=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(true); 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(true); LCD.setCursor(40,60); LCD.setTextSize(3); LCD.print(CO2); LCD.setTextSize(1); LCD.print("ppm"); } void connectToWiFi() { // WiFi 액세스 포인트에 연결합니다. 지연(10); Serial.print(F("연결 중 ")); 직렬.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); 동안 (WiFi.status() !=WL_CONNECTED) { 지연(500); Serial.print(F(".")); } Serial.println(F("와이파이 연결!")); } void connectToAdafruit() { // adafruit에 연결 io connect(); } 무효 LCDinit() { LCD.setBacklight(ON); LCD.fillScreen(ST7735_BLACK); //화면 지우기 LCD.showBanner(); //앤디움 배너 로드 LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(0,40); LCD.print("CO2:"); } uint16_t 요청(char* s) { 버퍼[0] ='\0'; 정수 idx =0; //CO2 명령 요청 'Z' 보내기 Command(s); 지연(250); while(Serial1.available()) { 버퍼[idx++] =Serial1.read(); } 버퍼[idx] ='\0'; uint16_t rv =0; rv =atoi(&버퍼[2]); 리턴 rv; } 무효 명령(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibrationFreshAir() { 반환 요청("G"); } 무효 setOperatingMode(uint8_t 모드) { sprintf(버퍼, "K %u", 모드); 명령(버퍼); }  

    그게 다야!

    이것은 매우 민감하므로 환기가 잘 되는 방에서도 CO2 농도를 기반으로 방 점유율 수준을 거의 추적할 수 있습니다. 당신을 실망시키는 것은 'diff eq'가 아니라 환기가 잘 안 되기 때문이라는 것을 교수님에게 증명할 시간입니다! 수업을 해변으로 이동할 시간입니다!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    안두이노
    Andium(Anduino) 쉴드용 Arduino 라이브러리입니다. Arduino를 AndiumNode로 변환합니다.https://github.com/andium/Anduino

    제조공정

    1. Sensirion:소형 CO2 센서
    2. 센서 데이터와 Raspberry Pi 마이크로프로세서의 통합
    3. 레고 EV3 해킹:자신만의 물체 센서 "눈" 만들기
    4. 레고 Mindstorms NXT 초음파 센서를 Raspberry Pi에 연결하는 방법
    5. 라즈베리 파이의 HC-SR04 초음파 범위 센서
    6. A111 펄스 레이더 센서를 Raspberry Pi와 함께 사용
    7. 선반의 고객 서비스 수준 향상
    8. RF 무선 전력, 센서 네트워크의 편재화
    9. SARS-CoV-2 RapidPlex 센서의 5W
    10. 산업 유지 보수 수준은 무엇입니까?