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

에어 서퍼

구성품 및 소모품

Arduino Mega 2560
× 1
Mega 2560용 3.2인치 tft 모듈
× 1
온도 프로브
× 1
Adafruit 습도 및 온도 센서
× 1
mh-z19 CO2 센서
× 1
RTC 모듈
× 1
조정 가능한 전압 조정기
× 1
항공 플러그 L89 G12
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

토목 기사로서 저는 환기 시스템이 집에서 어떻게 작동해야 하는지 잘 알고 있습니다. 그래서 아파트 공기질을 측정하기 위해 CO2 모니터를 구입했는데 CO2 수치뿐 아니라 실내 온도까지 보여주기 때문에 정말 마음에 들었습니다.

그러나 이것은 나에게 충분하지 않았습니다. 더 많은 매개변수를 측정하고 싶었기 때문에 적절한 장치를 찾고 있었습니다. 터무니없이 비싼 것을 발견하여 직접 만들기로 결정했습니다.

그 당시 저는 이미 여러 파이프라인 분기를 제어하는 ​​솔레노이드 밸브가 있는 펌프 스테이션용 arduino 컨트롤러를 프로그래밍한 경험이 있었습니다.

나는 종이로 프로젝트를 만들고 필요한 도구와 센서를 주문했습니다.

베이스

나는 그것이 최소 10인치의 큰 화면을 갖고 싶었지만 그것은 내 주머니를 매우 빨리 비울 것입니다. 나는 현실적이라고 결정하고 tft 3.2 420x380 디스플레이가 있는 Arduino Mega 2560 R3을 선택했습니다. 이 설정은 디스플레이가 arduino 보드에 직접 연결되기 때문에 최소한의 배선이 필요했습니다.

불행히도 알리익스프레스에서 주문한 디스플레이가 너무 싸서 제대로 작동하지 않았습니다. 시간이 지남에 따라 흰색의 작은 점이 나타나고 색이 반전되었습니다. 다른 라이브러리와 다른 컨트롤러를 시도했지만 도움이 되지 않았습니다. 그래서 코드의 색상을 조정하고 오후 12시와 오전 12시에 화면 새로고침을 추가했습니다.

센서

프로젝트에서 가장 비싼 부분은 mh-z19 CO2 센서였습니다. 다른 CO2 센서에 비해 상대적으로 저렴하면서도 안정적인 측정과 자동 보정 기능을 제공합니다.

다른 모듈은 비교적 설치가 쉬웠지만 이 센서는 데이터시트에 많은 정보가 없었기 때문에 포럼에서 코드를 찾아보고 모든 정보를 결합했습니다. 결과적으로 이제 모든 것이 완벽하고 이전 센서보다 더 잘 작동합니다.

그러나 자체 보정하는 데 24시간이 걸렸으므로 처음에는 판독값이 일치하지 않았습니다. 자동 보정은 간단합니다. 내가 아파트를 떠날 때 산소를 소비하는 사람이 아무도 없기 때문에 CO2 수준은 외부 수준인 400ppm으로 떨어집니다. 판독값이 이 수치 아래 어딘가에 있으면 센서가 보정합니다.

UART 및 PWM을 통해 통신할 수 있습니다. 나는 그것이 더 신뢰할 수 있다고 생각하기 때문에 첫 번째 것을 선택했습니다.

그런 다음 I2C 프로토콜을 사용하고 SDA 및 SCL 핀에 연결하는 실내 모니터링을 위해 SI7021 온도 및 습도 센서를 사용했습니다. 비싸지 않은 산업용 고정밀. 문제가 전혀 없었기 때문에 마음에 듭니다.

외부 온도의 경우 스테인리스 스틸 캡슐에 동봉된 ds18b20을 사용했습니다. 저렴하고 정확한 판독. 그러나 4,7k Ohms 저항이 필요하므로 잊지 마십시오. 통신은 1-wire를 통해 이루어집니다.

그동안 I2C를 사용하는 DS 1307 RTC 모듈을 구입했습니다.

그런 다음 CO2 수준에 대한 3개의 LED. 400-800ppm의 경우 녹색 LED, 800-1200ppm의 경우 주황색 LED, 1200ppm 이상의 경우 빨간색 LED입니다.

또한 LED가 있는 3개의 스테인리스 스틸 버튼. 왼쪽은 시간 조정용입니다. 가운데는 분용이고 오른쪽은 텍스트 색상 변경용입니다.

또한 LED 밝기를 조정하기 위해 포토레지스터를 배선했습니다. 나는 그들이 밤에 너무 밝게 빛나는 것을 원하지 않았습니다.

전원 공급 장치의 경우 바닥에 구멍을 뚫고 DC 커넥터를 배치했습니다.

문제는 적절한 전원 공급 장치가 없다는 것이었습니다. Arduino에 권장되는 전압은 7-12v이지만 19v 및 15v 공급 어댑터만 가지고 있었습니다. 그러나 나는 많은 LM2696 DC-DC 조정 가능한 전압 조정기를 가지고있었습니다.

나는 그것을 상자 안에 넣고 7 볼트로 조정했습니다. 내 Arduino가 12볼트 아래에서 매우 빠르게 가열된다는 것을 알았으므로 권장되는 최소값을 선택했습니다. 그 결과 이제 다양한 전원에서 공급할 수 있게 되었습니다.

외부 온도 센서에는 에비에이터 커넥터와 전화선을 사용했습니다.

상자

3D 프린터가 없었기 때문에 이것이 가장 큰 문제였습니다. 처음에는 폴리머클레이로 만들려고 했는데 모양이 잘 안 잡혀요. 게다가 오븐에 구웠어요.

두 번째 시도는 6mm 합판이었습니다. 대부분 괜찮았는데 자르기가 힘들었다. 전기톱과 드레멜 도구를 사용해야 했습니다.

마지막이자 가장 성공적인 것은 3mm 합판(찾기 어려웠음)으로 전기 장비 없이 절단할 수 있었고 상자 커터 칼과 약간의 사포만 사용했습니다. 아크릴 물감으로 덮었더니 훨씬 더 멋져 보입니다.

비용

<울>
  • Arduino Mega 2560 R3 - 8,27$(480Rub)
  • 디스플레이 TFT 3.2 480x320 - 8$(400Rub)
  • RTC DS1307 모듈 - 0,55$(32Rub)
  • CO2 mh-z19 센서 - 20$(1160Rub)
  • 온도 및 습도 센서 Si7021 - 2$(118Rub)
  • 온도 센서 DS18b20 캡슐 - 1,14$(66Rub)
  • 포토레지스터 - 1$/50개(65Rub)
  • LED - 0,67$/100개(39Rub)
  • 스테인리스 스틸 푸시 버튼 - 5,07$/3개(294Rub)
  • GX12-3 핀 항공 플러그(세트) - 1,17$(68Rub)
  • DC 커넥터 1,25$/10개(73Rub)
  • LM2596 DC-DC 조정 가능 전압 조정기 - 0,69$(40Rub)
  • 전원 어댑터 12v - 2,14$(120Rub)
  • 전선 - 1,78$(100Rub)
  • 합판 3mm - 1,78$(100Rub)
  • 총 55,51$(3155 문지름)

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

    코드

    <울>
  • 에어서퍼 코드
  • 에어 서퍼 코드Arduino
    #include #include "RTClib.h"//#include #include #include #include #include  #include #include #define ONE_WIRE_BUS 9#define GREENLED 5#define YELLOWLED 7#define REDLED 8#define BUTTONLED 11OneWire oneWire(ONE_WIRE_BUS)aatureDallasToneWire(&DallasToneWire) myGLCD(CTE32HR, 38, 39, 40, 41); HTU21D myHumidity;RTC_DS1307 rtc; 외부 uint8_t 우분투[]; 바이트 cmd[9] ={0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char 응답[9];unsigned int ppm;unsigned long time;int photocellReading;int hourupg;int minupg;float humd;float temp;int tcolor;int Z; //LED 밝기 부울 재설정 =false; // 디스플레이 재설정용;void lamps(void) { //CO2if (ppm<800){ myGLCD.setColor(255,140,255); //녹색 myGLCD.fillCircle(450, 87, 12); analogWrite(녹색 LED, Z); analogWrite(노란색, 0); analogWrite(REDLED, 0); } if (ppm>800 &ppm<1200) { myGLCD.setColor(70,70,255); //노란색 myGLCD.fillCircle(450, 87, 12); analogWrite(녹색 LED, 0); analogWrite(노란색, Z); analogWrite(REDLED, 0);} if (ppm>1200){ myGLCD.setColor(VGA_AQUA); myGLCD.fillCircle(450, 87, 12); analogWrite(녹색 LED, 0); analogWrite(노란색, 0); analogWrite(REDLED, Z); } //윙윙거리는 소리 if (humd>30 &humd<50) { myGLCD.setColor(255,140,255); //녹색 myGLCD.fillCircle(450, 149, 12); } if (humd>20 &humd<30) { myGLCD.setColor(70,70,255); //노란색 myGLCD.fillCircle(450, 149, 12); } if (humd<20) { myGLCD.setColor(70,70,255); //노란색 myGLCD.fillCircle(450, 149, 12); } if (humd>50 &humd<60) { myGLCD.setColor(70,70,255); //노란색 myGLCD.fillCircle(450, 149, 12); } if (humd>60) { myGLCD.setColor(VGA_AQUA); myGLCD.fillCircle(450, 149, 12); } //온도 입력 if (temp>
    20 &temp<27) { myGLCD.setColor(255,140,255); //녹색 myGLCD.fillCircle(450, 213, 12); } else {myGLCD.setColor(70,70,255); //YellowmyGLCD.fillCircle(450, 213, 12); } // Tempouts if (sensors.getTempCByIndex(0)<10) {myGLCD.setColor(70,70,255); //YellowmyGLCD.fillCircle(450, 278, 12);} else { myGLCD.setColor(255,140,255); //녹색 myGLCD.fillCircle(450, 278, 12);}}void drawmain(void) {myGLCD.setFont(Ubuntu);if(tcolor==0) myGLCD.setColor(VGA_BLACK);if(tcolor==1) myGLCD.setColor(VGA_SILVER);if(tcolor==2) myGLCD.setColor(250,10,250);if(tcolor==3) myGLCD.setColor(200,100,200);if(tcolor==4) myGLCD.setColor(100,200,200);if(tcolor==5) myGLCD.setColor(10,200,200);if(tcolor==6) myGLCD.setColor(200,200,100);if(tcolor==7) myGLCD.setColor(250,250,10);if(tcolor==8) myGLCD.setColor(10,10,250);if(tcolor==9) myGLCD.setColor(10,250,10);if(tcolor==10) myGLCD.setColor(250,10,10);if(tcolor==11) myGLCD.setColor(VGA_TEAL);if (tcolor==12) myGLCD.setColor(VGA_AQUA); 지금 날짜 시간 =rtc.now(); // Timeif (now.hour()<10) { myGLCD.print("0", 190, 7);myGLCD.printNumI(now.hour(), 215, 7); } 그렇지 않으면 {myGLCD.printNumI(now.hour(), 190, 7); } myGLCD.print(":", 240, 5); if (now.minute()<10) { myGLCD.print("0", 265, 7); myGLCD.printNumI(now.minute(), 290, 7); } else { myGLCD.printNumI(지금.분(), 265, 7); }//myGLCD.setColor(VGA_BLACK);myGLCD.print("CO2", 18, 74); if (ppm> 999){ myGLCD.printNumI(ppm, 250, 74);}else{myGLCD.print(" ", 250, 74);myGLCD.printNumI(ppm, 275, 74);}myGLCD.print(" ppm", 348, 74);myGLCD.print("습도", 18, 136);myGLCD.printNumI(humd, 343, 136); //humdmyGLCD.print("%", 398, 136);myGLCD.print("Temp(in)", 18, 200);if(temp>
    =0) { if(temp<10) {myGLCD.print( " ", 275, 200); myGLCD.print("+", 300, 200); //tempmyGLCD.printNumF(temp,1, 325, 200);}else{ myGLCD.print("+", 275, 200); //tempmyGLCD.printNumF(temp,1, 300, 200);}}if (temp<0){ if (temp>
    -10) { myGLCD.print(" ", 275, 200);myGLCD.printNumF(temp, 1, 300, 200);}else{ myGLCD.printNumF(temp,1, 275, 200);}}myGLCD.print("C", 398, 200);myGLCD.print("Temp(out)", 18 , 265);if (sensors.getTempCByIndex(0)<-100) { myGLCD.print("빈", 300, 265);}else{if(sensors.getTempCByIndex(0)>=0) { if(센서. getTempCByIndex(0)<10) {myGLCD.print(" ", 275, 200); myGLCD.print("+", 300, 265); myGLCD.printNumF(sensors.getTempCByIndex(0),1, 325, 265);}else{ myGLCD.print("+", 275, 265);myGLCD.printNumF(sensors.getTempCByIndex(0),1, 300, 265);}}if (sensors.getTempCByIndex(0)<0){ if (sensors.getTempCByIndex(0)>-10) { myGLCD.print(" ", 275, 200);myGLCD.printNumF(sensors.getTempCByIndex(0),1, 300, 265);}else{ myGLCD.printNumF(센서) .getTempCByIndex(0),1, 275, 265);}}myGLCD.print("C", 398, 265);}} void dateandtime(void) { DateTime now =rtc.now();hourupg=now.hour ();minupg=지금.분(); //시간 조정 if (digitalRead(3) ==LOW) { if (minupg==59) { minupg=0; } else { minupg=minupg+1; } rtc.adjust(날짜시간(0,0,0,시간단위,분단위,0)); } if (digitalRead(2) ==LOW) { if(hourupg==23) { hourupg=0; } 그렇지 않으면 { hourupg=hourupg+1; } rtc.adjust(날짜시간(0,0,0,시간단위,분단위,0)); }} 무효 co2(void) { Serial3.write(cmd, 9); memset(응답, 0, 9); Serial3.readBytes(응답, 9); 정수 나; 바이트 crc =0; for (i =1; i <8; i++) crc+=response[i]; crc =255 - crc; crc++; if ( !(response[0] ==0xFF &&response[1] ==0x86 &&response[8] ==crc) ) { } else { unsigned int responseHigh =(unsigned int) response[2]; unsigned int responseLow =(unsigned int) 응답[3]; ppm =(256*responseHigh) + responseLow; }} 무효 th(무효) { humd =myHumidity.readHumidity(); 온도 =myHumidity.readTemperature(); sensor.requestTemperatures(); // 온도 판독값을 얻기 위해 명령을 보냅니다.}void photosensor(void) { photocellReading =analogRead(12); if (photocellReading <150) { // Serial.println(" - 다크"); analogWrite(버튼 LED, 5); Z=25; } else if (photocellReading <300) { // Serial.println(" - Dim"); analogWrite(버튼 LED, 50); Z=80; } else if (photocellReading <700) { // Serial.println(" - Light"); analogWrite(버튼 LED, 100); Z=120; } else if (photocellReading <900) { // Serial.println(" - Bright"); analogWrite(버튼 LED, 150); Z=150; } else { // Serial.println(" - 매우 밝음"); analogWrite(버튼 LED, 200); Z=200; }// Serial.print(photocellReading);}void screenreset(void) { if(((hourupg==0 &&minupg==0) || (hourupg==12 &&minupg==0)) &&Reset==false ) {myGLCD.clrScr();myGLCD.fillScr(VGA_WHITE); // 내 디스플레이의 반전된 색상으로 인해myGLCD.setBackColor(VGA_WHITE); //내 디스플레이의 반전된 색상으로 인해Reset=true;}if((hourupg==0 || hourupg==12)&&minupg>0) { Reset=false; }} 무효 설정(무효) {myGLCD.InitLCD();myGLCD.clrScr();myGLCD.fillScr(VGA_WHITE); // 내 디스플레이의 반전된 색상으로 인해myGLCD.setBackColor(VGA_WHITE); // 내 displaySerial3.begin(9600);//Serial.begin(9600); sensor.begin(); myHumidity.begin(); tcolor=0;rtc.begin();pinMode(GREENLED, OUTPUT);pinMode(YELLOWLED, OUTPUT);pinMode(REDLED, OUTPUT);pinMode(BUTTONLED, OUTPUT);pinMode(2, INPUT_PULLUP);pinMode(3, INPUT_PULLUP) );pinMode(4, INPUT_PULLUP);Z=0;}무효 루프(무효) {co2(); 광센서();날짜와 시간();일(); if (digitalRead(4) ==LOW){ tcolor=tcolor+1; } if (tcolor>=13) tcolor=0; 드로메인();램프();스크린리셋();}

    회로도


    제조공정

    1. OpenSensor의 공기질 측정 방법
    2. 대기 오염 감지기
    3. 공기 압축기 방한
    4. 에어 실린더 액츄에이터 소개
    5. 탑 에어 컴프레서 선택 가이드
    6. 자동차 엔진의 과급기 이해
    7. 자동차 에어컨 시스템의 이해
    8. 에어 서스펜션 시스템의 이해
    9. 공기 분사 시스템 이해
    10. 항공 =돈