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

Arduino 냉각 거울 습도계

구성품 및 소모품

Arduino UNO
× 1
12V 10A 전원 공급 장치
× 1
12V 40mm 고성능 팬
× 1
12V 40mm TEC
× 1
40mm 방열판
× 1
작은 거울
× 1
열전도성 접착제
× 1
열 페이스트
× 1
BTS7960 모터 드라이버
× 1
3mm LED:노란색
× 1
OPT101 광 센서
× 1
IRF520 MOSFET 모듈
× 1
Maxim 통합 DS18B20 프로그래밍 가능 분해능 1선식 디지털 온도계
× 1
SparkFun 습도 및 온도 센서 브레이크아웃 - Si7021
× 1

필요한 도구 및 기계

뜨거운 글루건(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

습도 측정은 다양한 방법으로 수행할 수 있습니다. 가장 널리 사용되는 방법은 정전식 습도 센서를 사용하는 것입니다. 불행히도 이러한 센서는 매우 습한 환경에서 지속적으로 작동할 경우 정확도를 빠르게 잃습니다. Chilled Mirror 습도계는 이 문제를 겪지 않으며 특히 높은 습도 범위에서 훨씬 더 정확합니다. 불행히도 상업용 Chilled Mirror 습도계는 문자 그대로 수천 달러의 비용이 듭니다. 기본 조작은 매우 간단하므로 직접 만들 수 있습니다. 상용 기기와 같은 0.1도 정확도는 아니지만 대부분의 경우 용량성 센서보다 충분하고 확실히 더 정확합니다.

이 프로젝트는 개념 증명이며 생산 준비가 전혀 되어 있지 않습니다. 많은 개선이 이루어질 수 있지만 그것이 효과가 있다는 사실을 증명합니다.

작동 방식

냉각 거울 습도계는 펠티에(TEC)를 사용하여 응결이 나타날 때까지 반사 표면을 냉각시킵니다. 결로 현상은 광원과 광학 센서로 감지됩니다. 거울 표면 온도는 응결이 나타나는 순간에 기록됩니다. 이 온도는 이슬점과 같습니다. 상대 습도는 이슬점과 주변 온도를 사용하여 계산할 수 있습니다.

단순화

이 DIY 냉장 거울 습도계는 상업용 장치에 비해 몇 가지 차이점이 있습니다.

상업용 칠드 미러 습도계는 열을 잘 전도 및 분산하지 않아 정확도와 효율성이 감소하기 때문에 기존의 미러를 사용하지 않습니다. 이러한 장치는 주로 백금 또는 로듐 도금 구리를 거울로 사용합니다. 쉽게 구할 수 없고 비용 효율적이지 않기 때문에 이 DIY 냉각 거울 습도계에는 일반 거울이 사용됩니다. 작은 정사각형 거울이 둥근 것보다 낫겠지만 나는 그것을 찾을 수 없었습니다. 대안으로 광택이 나는 스테인리스 스틸 슬래브가 훨씬 더 나을 것입니다.

상업용 냉각 거울 습도계는 거울 표면에 장착된 SMD 온도계 대신 거울 아래에 내장된 백금 저항 온도계(PRT)를 사용합니다. PRT는 추가 전자 장치가 필요하며 Peltier와 미러 사이에 장착하는 동시에 우수한 열 전도성을 제공하는 데 문제가 있습니다. 거울 표면에 온도계를 장착할 때의 단점은 열 분포 특성이 수정되어 정확도가 감소한다는 것입니다. 그러나 표면 장착형 온도계는 제작이 훨씬 쉽고 정확합니다.

상업용 Chilled Mirror 습도계는 4cm 대신에 약 5mm의 훨씬 작은 거울을 사용합니다. 더 적은 전력을 필요로 하고 더 작은 폼 팩터를 갖기 때문입니다. 그러나 작은 거울과 일치하는 Peltier는 큰 변형만큼 쉽게 구할 수 없습니다. 또한 소형 Peltier에는 매우 낮은 전압이 필요하므로 맞춤형 드라이버가 필요합니다. 또한 SMD 온도계를 작은 거울 표면에 장착하는 동시에 약간의 빛을 반사할 수 있는 충분한 공간을 확보하는 것도 더 어렵습니다.

현재 버전에는 차광 인클로저가 없습니다. 이것은 쉽게 3d 인쇄할 수 있으며 외부 광원의 간섭을 차단하기 위해 적극 권장됩니다. 광원과 광 센서를 제자리에 고정하는 데 사용할 수도 있습니다. 3d 인쇄 인클로저를 만드는 경우 환기가 잘되는지 확인하십시오. 환기를 위해 펠티에 팬을 사용할 수 있지만 공기를 인클로저로 불어넣지 말고 인클로저로 끌어들이십시오. 내부도 거울 청소를 위해 쉽게 접근할 수 있어야 합니다.

현재 구현에서는 얼음 입자와 물방울을 구별해야 하기 때문에 서리점을 측정할 수 없으며 산란광을 측정하려면 두 번째 광학 센서가 필요합니다.

구축 방법

펠티에를 가지고 양면을 청소하고 뜨거운 면에 열전도성 접착제를 놓습니다. 고르게 분포되어 있는지 확인하십시오. 열전도성 접착제가 없으면 가장자리 근처에 슈퍼 접착제 몇 방울과 함께 열 페이스트를 사용할 수 있습니다. 이것은 똑같이 잘 작동합니다. 방열판 표면을 청소하고 방열판과 Peltier를 함께 눌러 접착제를 건조시킵니다.

방열판을 펠티에에 부착하고 접착제가 마른 후 거울도 같은 방법으로 부착하고 바닥면을 먼저 청소해야 합니다. 열 페이스트가 고르게 분포되고 공기 틈이 없는 것이 중요합니다. 그렇지 않으면 거울의 열 분포가 균일하지 않게 됩니다.

모든 접착제가 마르면 팬을 부착하십시오. 방열판은 상당히 뜨거워지므로 방열판을 식힐 수 있을 만큼 강력한 팬을 사용하십시오. 방열판에 팬을 부착하는 방법은 사용하는 방열판 유형에 따라 다릅니다. 핫 글루건을 사용하여 두 개를 붙였습니다.

팬의 전원을 켠 다음 Peltier를 켜서 거울에 동시에 응결이 나타나는 영역이 두 개 이상 있는지 확인합니다. 펠티에에 너무 오래 전원을 공급하면 균일한 응결 프로파일이 생성되므로 너무 오래 사용하지 마십시오. 응결이 막 보일 때의 모습을 보고 싶습니다. 결과가 마음에 들지 않으면 새 펠티에, 거울 및 방열판으로 다시 시도하십시오. 부품을 제거하고 매끄러운 표면을 복원할 가능성이 낮기 때문입니다.

열 페이스트를 균일하게 도포하지 않아 위 사진에서 볼 수 있듯이 불규칙한 결로 현상이 발생했습니다.

거울면 온도 센서를 장착하고 거울에 반사되는 빛의 양을 측정해야 하는 부분이기 때문에 사진을 찍거나 결로 현상이 동시에 나타나는 부분을 표시하는 것이 중요합니다.

이 프로젝트에서는 저잡음 출력을 제공하기 때문에 거울 온도를 측정하기 위해 Si7021을 사용합니다. 불행히도 I2C 주소는 하드 코딩되어 있으므로 해당 센서 중 하나만 사용할 수 있습니다. 주변 온도의 경우 DS18B20 온도 센서를 사용하지만 정확도가 그리 높지 않습니다. 내가 그 센서를 사용하는 유일한 이유는 내가 그것들을 사용할 수 있게 되었기 때문입니다.

Si7021(또는 PCB 기반 온도 센서)을 미러에 장착하려면 먼저 온도 센서에 비전도성 열 페이스트를 한 방울 떨어뜨립니다. 전자 장치에 결로 현상을 방지하기 위해 PCB도 열 페이스트로 덮어야 합니다. 그런 다음 PCB의 각 모서리에 4개의 큰 글루 덩어리를 놓습니다. 빨리 움직여야 합니다. 결로 현상이 균일하게 나타난 위치에서 거울에 센서를 대고 누릅니다. 센서를 수평으로 놓고 센서를 거울에 단단히 누르십시오. 뜨거운 접착제는 거울에 닿으면 빠르게 굳습니다. 센서 위치를 다시 지정해야 하는 경우 상자 커터 칼날로 쉽게 긁어내고 접착제를 떼어내고 다시 시도할 수 있습니다. PCB에 결로 현상이 있는 경우 핫 글루 또는 스프레이 온 플라스틱으로 절연하십시오.

팬은 IRF520 MOSFET 모듈에 의해 제어됩니다.

사용된 광센서는 OPT101로 민감하고 출력잡음이 낮고 사용이 간편하다.

광원의 경우 저전력 레이저 다이오드 또는 일반 LED를 사용할 수 있습니다. 나는 둘 다 시도했고 둘 다 잘 작동합니다. 레이저는 반응이 더 좋은 장점이 있지만 정렬하기가 더 어렵습니다. LED는 더 많은 빛이 주변에 산란되기 때문에 더 평평한 응답을 갖지만 정렬하기가 더 쉽습니다. LED를 사용하는 경우 초점을 맞춘 빔을 출력하는지 확인하십시오.

LED 및 레이저 광 출력이 너무 높을 수 있으며 PWM을 사용하여 출력을 줄이는 것은 광 센서에 간섭을 일으킬 수 있으므로 옵션이 아닙니다. 대신에 저항을 LED 또는 레이저와 직렬로 연결하여 출력을 줄이십시오.

LED 또는 레이저와 OPT101 광 센서를 장착하기 위해 약간의 구리선을 고정 와이어로 꼬아서 고정시켜 더 강성을 부여했습니다. 양쪽 끝은 뜨거운 접착제로 고정되었습니다. 이것은 개념 증명에 적합하지만 실험실(또는 지하실) 환경에서 사용하기에는 너무 취약합니다. 그래도 센서와 광원을 정렬하는 것은 쉽습니다. 더 나은 방법은 이러한 장치용 홀더를 3d 인쇄하는 것입니다. 3d 인쇄된 인클로저는 외부 빛의 간섭을 방지하기 위한 필수 요소이기 때문입니다.

Peltier를 제어하기 위해 BTS7960 모터 드라이버가 사용됩니다. 펠티에를 구동하는 가장 효율적인 방법은 PWM을 사용하지 않고 전류를 변경하는 것입니다. 그러나 Peltier 컨트롤러는 BTS7960 모터 드라이버만큼 쉽게 사용할 수 없으며 이 개념 증명에서 전력 소비는 요소가 아닙니다.

조립이 끝나면 코드를 Arduino에 업로드하고 전위차계로 OPT101 감도 범위를 조정합니다. 더 높은 저항은 동일한 양의 빛에 대해 더 높은 전압 출력을 의미합니다. OPT101 데이터시트, 그림 3 - 전압 응답성 대 조도를 참조하십시오. 디버깅을 위해 거울을 불어서 결로를 만들거나 센서 앞에 물체를 놓을 수 있습니다. 에어컨이 있다면 켜고(또는 꺼서) 기다리십시오. 습도 변화를 확인할 수 있습니다.

아래 그래프에서 온도(파란색), 광학 판독값(빨간색) 및 측정된 이슬점(녹색)을 볼 수 있습니다. 에어컨을 끄니 이슬점이 올라가는 것을 볼 수 있습니다.

안전

제공된 코드는 이를 지원하지 않지만 하드웨어는 미러를 냉각시키는 것 외에도 가열할 수 있습니다. 이것은 단순히 Peltier의 극성을 되돌려서 수행됩니다. 거울 가열은 응결을 신속하게 제거하고 응답 시간을 개선하는 데 사용할 수 있습니다. 또한 플래시 증발 응축은 작은 오염 물질을 제거합니다. 그러나 이것은 미러 표면에 방열판이 없기 때문에 잠재적인 안전 위험이 있습니다. 코드가 펠티에를 가열하는 데 걸리는 경우 기껏해야 온도계를 제자리에 고정시키는 뜨거운 접착제를 녹이고 최악의 경우 와이어가 녹아 합선을 일으켜 화재가 발생합니다.

정확도

측정된 이슬점 온도는 절대값이기 때문에 교정은 정전식 또는 저항성 습도계만큼 중요하지 않습니다. 그러나 경면 온도 센서 영역과 광 감지 영역 사이에는 최소한 약간의 온도 차이가 있습니다. 판독값의 정확성을 확인해야 하는 경우 보정된 상용 Chilled Mirror 습도계로 장치를 보정할 수 있습니다.

거울 오염에 관해서는 이것은 부분적으로만 문제입니다. 반사광 판독값은 절대적이지 않고 냉각 주기의 시작을 기준으로 합니다. 냉각 주기가 시작되면 거울에 응결이 생기지 않습니다. 반사광량을 측정하여 결로를 검출하는 기준으로 사용합니다. 거울이 오염되고 반사되는 빛이 적더라도 결로 감지에 영향을 미치지 않아야 합니다. 그러나 일부 오염 물질은 응결이 발생하는 온도를 낮추거나 높이므로 최상의 정확도를 위해 때때로 거울 표면을 청소하십시오.

거울과 주변 온도 센서는 보정 정확도가 높을 필요는 없지만 분해능은 높아야 합니다. 예를 들어 실제 온도가 24.0도이지만 측정 값이 24.5도인 경우 거울과 주변 온도계도 24.5(정규화 가능)를 측정하고 숫자가 소수점 이하 1자리만 떨리는 한 괜찮습니다. 많은 온도계의 지터는 0.2도 또는 0.3도입니다. TSYS01 온도 센서는 0.1도의 백금 저항 온도계와 동일한 정확도를 제공하므로 거울 표면 온도와 주변 온도 측정 모두에 사용하는 것이 좋습니다.

온도 센서가 거울 표면과 잘 접촉하는 것이 중요합니다. 비전도성 열 페이스트의 사용은 필수적입니다.

온도계의 응답 시간보다 빠르게 거울을 냉각하지 마십시오. 그렇지 않으면 감지된 이슬점이 정확하지 않습니다.

온도 센서는 거울과 동시에 광 감지 영역의 결로 현상이 나타나는 위치에 설치해야 합니다.

거울 표면에 온도 센서를 장착하면 열 분포가 수정되어 정확도가 감소합니다. 적외선 온도계를 대안으로 사용하고 싶을 수도 있지만 불행히도 거울은 어느 정도의 열복사를 반사하므로 측정은 주변 환경의 영향을 받습니다.

기술적으로 습도 판독값은 기압에 따라 달라지지만 주변 환경에서는 그 영향이 매우 작습니다. 쾅 닫히는 문으로 인한 압력 변화와 건물의 차압을 유발하는 외부 바람은 가치보다 더 많은 문제를 일으킬 수 있습니다.

펠티에 방열판의 뜨거운 공기가 거울 위로 빠져나가면 안 됩니다.

느린 온도 강하는 더 정확한 판독값을 제공하지만 응답 시간도 감소합니다. 그러나 이슬점에 가깝게 온도를 진동시켜 응답 시간을 향상시킬 수 있습니다.

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

코드

<울>
  • 냉장 거울 습도계
  • 냉장 거울 습도계C/C++
    Arduino 코드
    #include #include  //Watchdog 충돌 감지//사용자 정의 라이브러리입니다.#include "Si7021.h" //히터가 있는 습도 센서#include  //DS18B20 온도 센서#include  //DS18B20 온도 센서//타이머 라이브러리:https://github.com/brunocalou/Timer#include "timer.h#include "timerManager.h" //Arduino 보드의 하드웨어 핀을 정의합니다.#define 냉각PWM 6#define 가열PWM 5#define 냉각Enable 13#define heatingEnable 12#define tecFan 7#define opticalSensor 0 //아날로그 입력#define oneWireBus A3 //DS18B20 온도 센서// TEC.#define COOLING 0#define HEATING 1#define OFF 2//TimersTimer timerMainLoop;Timer timerTecCooling;Timer timerSampleNoise;//온도 센서의 상태(습도 미사용). Si7021 si7021;//DS18B20 온도 센서OneWire oneWire(oneWireBus); DallasTemperature sensor(&oneWire);float 습도 =0;floatambientTemp =0;float opticalDewpoint =0;//직렬 플로터 범위가 정확하도록 이 값을 초기 더 높은 값으로 설정하십시오.float mirrorTemp =30; 플로트 광학 =30; 부동 이슬점 =15; //초기값은 미러보다 낮아야 함 temp.float relativeHumidity =30;int tecState =OFF;bool 냉각 =false;int intervalTecCooling =200; // TEC 타이머가 ms.float opticalThreshold =0.5f에서 업데이트되는 빈도; //0.5 //결로 감지에 플래그를 지정하려면 광학 판독값이 기준 아래로 내려가야 하는 섭씨 도의 양입니다. 이것은 신호 noise.int pwmIncrement =1보다 큰 숫자여야 합니다. int startPwm =100, int maxPwm =255, int intervalMainLoop =200, int tecPwm =0;int noiseSampleIndex =0;int noiseSampleAmount =10;float noiseSampleHighest =0;float noiseSampleLowest =10000;bool noiseSampling =false;float computeHumidity(float TD, float T){ //노점은 다음보다 높을 수 없습니다. 온도. if(TD> T){ TD =T; } //August-Roche-Magnus 근사. float rh =100*(exp((17.625*TD)/(243.04+TD))/exp((17.625*T)/(243.04+T))); return rh;}//TEC를 가열, 냉각 또는 끄기로 설정합니다.void SetTEC(int state, int amount){ tecState =state; // 가열 및 냉각 모두에 대해 가열 및 냉각 핀을 높음으로 설정해야 합니다. PCB 설계자에게 이유를 물어보십시오. //TEC를 제어하는 ​​데 사용되는 드라이버:BTS7960 모터 드라이버 보드. TEC를 구동하기 위한 PWM은 효율적이지 않으며 가변 전류 소스를 사용하는 것이 좋습니다. switch(state) { 케이스 냉각:digitalWrite(heatingEnable, HIGH); analogWrite(가열 PWM, 0); digitalWrite(냉각 활성화, 높음); analogWrite(냉각 PWM, 양); 부서지다; 케이스 가열:digitalWrite(coolingEnable, HIGH); analogWrite(냉각 PWM, 0); digitalWrite(가열 가능, 높음); analogWrite(가열 PWM, 양); 부서지다; 경우 OFF:digitalWrite(coolingEnable, LOW); analogWrite(냉각 PWM, 0); digitalWrite(heatingEnable, LOW); analogWrite(가열 PWM, 0); 부서지다; 기본값:digitalWrite(coolingEnable, LOW); analogWrite(냉각 PWM, 0); digitalWrite(heatingEnable, LOW); analogWrite(가열 PWM, 0); }}void setup() { //Watchdog 충돌 감지. 이것은 TEC가 가열 모드에서 멈추는 것을 원하지 않기 때문에 안전을 위한 것입니다. wdt_enable(WDTO_2S); //WDTO_500MS //WDTO_1S Serial.begin(9600); //9600 //57600 핀모드(냉각 PWM, 출력); 핀모드(가열 PWM, 출력); pinMode(냉각 가능, 출력); pinMode(가열 가능, 출력); 핀모드(tecFan, 출력); 핀모드(광센서, 입력); // 타이머 설정 timerMainLoop.setInterval(intervalMainLoop); timerMainLoop.setCallback(mainLoop); timerMainLoop.start(); timerTecCooling.setInterval(intervalTecCooling); timerTecCooling.setCallback(tecCoolingCallback); timerSampleNoise.setInterval(intervalTecCooling); timerSampleNoise.setCallback(샘플노이즈콜백); //si7021 온도 센서 설정. uint64_t 직렬 번호 =0ULL; si7021.begin(); 직렬 번호 =si7021.getSerialNumber(); //DS18B20 원와이어 온도 센서 sensor.begin(); //그래프가 올바르게 작동하도록 하려면 온도 센서 디버그 로깅을 비활성화합니다. /* Serial.print("Si7021 일련번호:"); Serial.print((uint32_t)(일련번호>> 32), 16진수); Serial.println((uint32_t)(serialNumber), HEX); //펌웨어 버전 Serial.print("Si7021 펌웨어 버전:"); Serial.println(si7021.getFirmwareVersion(), HEX); */ startNoiseSampling(); }//광 센서를 가져옵니다. reading.float getOptical(){ int opt ​​=analogRead(opticalSensor); float optFactored =(float)opt / 30.0f; return optFactored;}//타이머 콜백.void tecCoolingCallback(){ digitalWrite(tecFan, HIGH); //TEC의 파워를 천천히 높인다. tecPwm +=pwm증분; // 클램프 if(tecPwm> maxPwm){ tecPwm =maxPwm; } //TEC 냉각량 설정 SetTEC(COOLING, tecPwm); //결로가 감지되었습니까? if(optical <=(noiseSampleLowest - opticalThreshold)){ //이슬점을 기록합니다. 이슬점 =미러 온도; 광학이슬점 =광학; 스톱텍(); }} 무효 startNoiseSampling(){ noiseSampling =true; noiseSampleHighest =0; 노이즈샘플최저 =10000; timerSampleNoise.start();} 무효 sampleNoiseReset(){ timerSampleNoise.stop(); 노이즈 샘플 인덱스 =0; noiseSampling =false;} 무효 sampleNoiseCallback(){ if(noiseSampleIndex> noiseSampleAmount){ sampleNoiseReset(); 시작TecCooling(); } else{ if(optical> noiseSampleHighest){ noiseSampleHighest =광학; } if(optical =noiseSampleLowest)){ startNoiseSampling(); } }void loop() { //Watchdog 충돌 감지 wdt_reset(); //모든 타이머를 업데이트합니다. TimerManager::instance().update();}

    회로도


    제조공정

    1. 거울
    2. Arduino 스파이봇
    3. FlickMote
    4. 수제 TV B-Gone
    5. 만화경 무한대 거울
    6. 마스터 시계
    7. 나를 찾기
    8. Arduino Power
    9. Tech-TicTacToe
    10. Arduino Quadruped