중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

알콜센서

2014-11-07 17:39:55

개요


출처 : www.wikitree.co.kr
 
경찰분들께서 음주측정을 하는 모습을 흔하게 보실 수 있습니다.
센서 중에서도 알코올을 측정할 수 있는 센서가 있습니다.
 
출처 : blog.daum.net

위 사진은 휴대폰에 쉽게 연결할 수 있는 음주측정기 입니다.
알코올 센서를 사용하면 디자인과 크기에 문제를 떠나서
자신만의 음주측정기를 만들수도 있습니다.
 

본문에서는 알코올 센서를 사용하여 현재 알코올 양을 시리얼 모니터에 출력해봅시다.
또 프로세싱을 사용하여 알코올 양에 따른 움직이는 그래프를 그려봅시다.



미리보기 동영상

 

부품목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 브레드 보드 1  
3 알코올 센서 1 MQ-3센서 모듈을 사용했습니다.
4 점퍼 케이블 4  

 

 

부품명  오렌지 보드 브레드 보드 점퍼 케이블 알코올 센서
사진  x1  x1  x4  x1

 

 

 

 

 

하드웨어 Making

 

 

 

 

회로도

브레드보드 레이아웃

소프트웨어 Coding

아래의 스케치를 업로드 하세요. 
 

int dout = 6;    //센서 디지털 핀 선언
int aout = A0;   //센서 아날로그 핀 선언

void setup() {
  pinMode(dout, INPUT);   //디지털 핀 입력용으로 선언
  Serial.begin(9600);
}

void loop() {
  int analogValue = analogRead(aout);    //아날로그 값 읽음
  int digitalValue = digitalRead(dout);  //디지털 값 읽음
  
  Serial.println(analogValue);           //아날로그 값 출력
  Serial.println(digitalValue);          //디지털 값 출력
  Serial.println("-----------------");
  delay(500);
}

두번 째 스케치

/* 
 다음 스케치는 http://sensorworkshop.blogspot.kr/2008/04/sensor-report 에서 참고하였습니다.
*/

int gasPin = 0;
int value = 0;

void setup() {

  Serial.begin(9600);
  pinMode(gasPin,INPUT);

}

void loop() {

  value = analogRead(0)/2;
  Serial.print("Alcohol:");
  Serial.println(value);
  delay(100);

}

프로세싱

/*
 이 코드는 http://sensorworkshop.blogspot.kr/2008/04/sensor-report 를 참고하였습니다.
*/

import processing.serial.*;

PFont font;  //vlw폰트는 PFont 객체
int an1;
int val = 0;
int xPos=0;
String buff = "";
int displaySize = 2;
int a=127;

Serial port;

void setup(){
  size(600,500);
  smooth();
  port = new Serial(this, Serial.list()[1], 9600); //맞는 시리얼 포트를 선택하기 위햇 배열의 인덱스를 확인하세요.
  port.write(65);
  font = loadFont("ArialMT-24.vlw");   //ArialMT-24.vlw이 필요합니다.
  textFont(font, 24);
}

void draw(){      
  while (port.available() > 0) {
    serialEvent(port.read());
  }
}

void serialEvent(int serial) {
  if(serial != '\n') {          //시리얼을 통해 값을 받은 후 
    buff += char(serial);       //char타입으로 buff에 저장
  }
  else {
    int curX = buff.indexOf("Alcohol:");
    if(curX >=0){
       String val = buff.substring(curX+8);
       an1 = Integer.parseInt(val.trim());
       println(an1);
       xPos++;

    if(xPos > width) xPos = 0;

    fill(50,5);
    noStroke();
    rect(0,0,width,height);

    fill(0);
    rect(xPos+displaySize+1, 0, 160, height);

    fill(255, an1-20);
    text(buff, xPos+10, an1-10);

    sensorTic(xPos,an1+20);     //원 그리기
   }
   buff = "";
  }
}

//값의 따른 원그리기 함수
void sensorTic(int x, int y){
  fill(255, 360-an1,0,an1-35);
  ellipse(x,y,displaySize+an1/20,displaySize+an1/20);
}

하드웨어 및 소프트웨어 설명

1. 하드웨어 설명

MQ-3 알코올 센서는 총 6개의 핀을 가지고 있습니다.
그 중 두개는 heating system을 위한 핀이고 나머지 두 개는 GND와 VCC를 위한 핀 입니다.
MQ-3 센서는 내부 튜브를 가열 시키는 데 시간이 필요하므로 연결시 준비시간이 필요합니다.
또 알코올이  있을 경우 값을 감지하는 것은 매우 빠르게 작동하지만
다시 재측정을 위한 준비시간이 필요합니다.
또한 모듈의 경우 뒷 부분에 민감도 조절하는 부분이 있습니다.
시계 방향을 돌리면 민감도가 커지고 반시계 방향의 경우 작아집니다.

2. 소프트웨어 설명

int dout = 6;    //센서 디지털 핀 선언
int aout = A0;   //센서 아날로그 핀 선언

이 센서는 디지털 값과 아날로그 값을 읽을 수 있는 핀이 총 2개가 있습니다.
아날로그 핀의 경우 알코올 농도를 측정하고
디지털 핀의 경우 알코올의 유무를 측정합니다. 
0일 경우 알코올이 있다는 뜻입니다.

  • 알코올이 없을 때
  • 알코올이 있을 때
PFont font;
int an1;
int val = 0;
.......
.......

void setup(){
  size(600,500);
  smooth();
  port = new Serial(this, Serial.list()[1], 9600); //맞는 시리얼 포트를 선택하기 위햇 배열의 인덱스를 확인하세요.
  port.write(65);
  font = loadFont("ArialMT-24.vlw");   //ArialMT-24.vlw이 필요합니다.
  textFont(font, 24);
}

다음 프로세싱을 실행하기 위해서는 ArialMT-24.vlw이 필요합니다.
값을 텍스처로 표현 해주는 파일 중 하나입니다.
다음 링크로 가서 zip파일을 다운로드 하신 후 압축을 푸시면 ./data 밑에 존재합니다.
이 파일을 프로세싱 파일이 설치된 폴더에 넣어 주세요.

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

알코올 센서, 아두이노, 오렌지보드

유선우 2016-12-09 18:00:20

저희 센서의 경우 A0는 A0 에 D0는 디지털 6번핀에 GND VCC는 각각 GND 와 5V 에 연결해주었습니다
그렇게하고나서 소스코드를 쓰려고 보니까 첫번째스케치와 두번째 스케치가 있는데 두개를 그냥 이어서 컴퍼일하면 오류가 떠서 저 소스를 어떻게 해야하나요???

kocoafab 2019-01-29 15:32:17

@유선우
소스코드중 첫번째 소스코드는 아두이노 IDE용 두번째 소스코드는 프로세싱이라고하는 다른 프로그램의 소스 코드입니다.

두 코드를 각각 프로그램에 맞게 실행을 해주셔야 합니다.

프로세싱에 관한 내용은 https://kocoafab.cc/tutorial/view/90 를 참고하세요.