반응형
전에 구매했던 MQ-3 센서를 이용하여 알코올 농도를 측정하는
간단한 장비를 만들었다.
MQ-3
VCC - 5v
GND - GND
A0 - A0
연결
특징이 있다면 처음 몇 분정도는 기다려야한다.(예열 시간 필요)
int R0 = 0; void setup() { Serial.begin(115200); measuringR0(&R0, 10); } void loop() { int Rs = 1023 - analogRead(A0); Serial.println(String(valueTomL(R0,Rs))); // Serial.println(Rs/R0); // Serial.println(String(valueTomL(R0,Rs)) +"mg/L"); } void measuringR0(int *R0, int DELAY) { Serial.println("Wait " + String(DELAY) + "sec"); delay(DELAY * 1000); *R0 = 0; for (int ii = 0; ii < 10; ii++) { int sum = 0; for (int i = 0; i < 10; i++) { sum += 1023 - analogRead(A0); } sum /= 10; *R0 += sum; } *R0 /= 10; } double valueTomL(int R0, int value) { double x = double(value) / double(R0); if (x > 1.0) { double TAN = (0.4 - 0.1) / (1.0 - 2.5); return TAN * (x - 1.0) + 0.4; } else if(x > 0.55) { double TAN = (1.0 - 0.4) / (0.55 - 1.0); return TAN * (x - 0.55) + 1.0; } else if(x > 0.2) { double TAN = (4.0 - 1.0) / (0.2 - 0.55); return TAN * (x - 0.2) + 4.0; } else if(x > 0.16) { double TAN = (6.0 - 4.0) / (0.16 - 0.2); return TAN * (x - 0.16) + 6.0; } else { double TAN = (10.0 - 6.0) / (0.12 - 0.16); return TAN * (x - 0.12) + 10.0; } }
여기서 의문이 있을 수 있는데
1023 - 값을 한 건
회로도상으로 저런 방식을 취해야
센서 값을 읽을 수 있도록 설계되어 있기 때문이었다.
위의 그래프는
대기 중의 기체 농도에 따른 센서 비율 값에 관한 것이다.
MQ-3는 알코올 뿐만 아니라 벤젠, 메테인, 핵세인, LPG, 일산화탄소 등도 같이 측정할 수 있기 때문에
여러 그래프가 있는 것이다.
우리는 알코올에 관한 것만 할 것이기 때문에 다이아몬드가 있는 그래프만 살펴본다.
기본적인 기호들을 보면
R0는 깨끗한 대기 상태에의 센서 값( -> 처음에만 평균 계산으로 산출한다.)
Rs는 대기 상태에 상관없는 센서 값 (-> 계속해서 값을 읽어 올 거다)
mg/L는 1L당 기체의 무게(mg)
Rs/R0 | mg/L |
2.5 | 0.1 |
1.0 | 0.4 |
0.55 | 1.0 |
0.2 | 4.0 |
0.16 | 6.0 |
0.12 | 10.0 |
그래프를 보고
대충 비슷한 값을 위에 테입이블로 만들었다.
0.1 ~ 0.4, 0.4 ~ 1.0 ....
각 구간마다 그프의 기울기가 다르기 때문에
if문을 5개를 만들었다.
double valueTomL(int R0, int value) { double x = double(value) / double(R0); if (x > 1.0) { double TAN = (0.4 - 0.1) / (1.0 - 2.5); return TAN * (x - 1.0) + 0.4; } else if(x > 0.55) { double TAN = (1.0 - 0.4) / (0.55 - 1.0); return TAN * (x - 0.55) + 1.0; } else if(x > 0.2) { double TAN = (4.0 - 1.0) / (0.2 - 0.55); return TAN * (x - 0.2) + 4.0; } else if(x > 0.16) { double TAN = (6.0 - 4.0) / (0.16 - 0.2); return TAN * (x - 0.16) + 6.0; } else { double TAN = (10.0 - 6.0) / (0.12 - 0.16); return TAN * (x - 0.12) + 10.0; } }
TAN은 그래프의 기울기
x는 Rs/R0이다
결과
에탄올에 넣기 전에는
0.4정도에 있다
넣은 후에는 값이 올라가는 것을 확인할 수 있다.
파일
https://pkr7098.tistory.com/136
라이브러리가 준비되어 있으니 필요하신 분들은 댓글에 메일 주소와 간단한 사용 목적 남겨주세요.
반응형
'아두이노' 카테고리의 다른 글
아두이노에도 OS가? 실시간 커널과 RTOS (0) | 2021.08.09 |
---|---|
아두이노 고성능 라이다 거리센서 LIDAR-Lite v4 LED (2) | 2021.07.02 |
아두이노 진동센서 (1) | 2018.01.18 |
아두이노 심박센서 (0) | 2018.01.18 |
시각장애인용 길 안내 스마트 신발 - [2017 무한 상상 발명 한마당 제작 과정 온라인 공유] (0) | 2017.09.14 |