코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-08-07 17:08:46
불꽃 감지 센서에 대해 먼저 알아보면, 적외선LED를 통해 불꽃에서 감지되는 적외선 파장을 감지하여
이를 아날로그 혹은 디지털 신호로 변환해 주는 구조를 지니고 있습니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 (또는 오렌지보드) | 1 | 아두이노 |
2 | 불꽃감지센서 | 1 | 센서 |
3 | 브레드보드 | 1 | 브레드보드 |
4 | 피에조 | 1 | 저항 |
5 | 점퍼 케이블 | 5 | 점퍼 케이블 |
부품명 |
아두이노 우노 R3 (오렌지보드) |
피에조 | 브레드보드 | 점퍼케이블 | 불꽃감지센서 |
파트 | x1 | x1 | x1 | x5 | x1 |
// 불꽃 감지 센서와 피에조를 이용하여 화재경보기를 만들어 봅시다.
// 13번 핀을 LED로 지정합니다.
int ledPin = 13;
// 디지털 2번핀을 불꽃감지센서로 지정합니다.
int inputPin = 2;
// 불꽃 감지 센서의 상태를 저장합니다.(처음 상태를 LOW로 설정)
int pirState = LOW;
// 센서 값을 읽기 위해 변수를 선언합니다.
int val = 0;
// PWM 핀에 스피커 혹은 피에조 센서를 연결합니다.(digital 9, 10, or 11)
int pinSpeaker = 10;
void setup() {
// LED 를 출력으로 설정합니다.
pinMode(ledPin, OUTPUT);
// 센서를 입력으로 설정합니다.
pinMode(inputPin, INPUT);
// 스피커를 출력으로 설정합니다.
pinMode(pinSpeaker, OUTPUT);
// 시리얼 통신(9600)를 준비합니다.
Serial.begin(9600);
}
void loop() {
// 센서값을 읽어들입니다.
val = digitalRead(inputPin);
// 만약 값이 HIGH 일때,
if (val == HIGH) {
// 13번 핀(보드에 내장되어 있는 LED) 를 켭니다.
digitalWrite(ledPin, HIGH);
playTone(300, 160);
delay(150);
if (pirState == LOW) {
// 센서의 상태가 LOW일때
Serial.println("Beware of fire.");
// 다음의 문구를 시리얼 모니터로 출력합니다.
pirState = HIGH;
}
} else {
// LED를 끕니다.
digitalWrite(ledPin, LOW);
playTone(0, 0);
delay(30);
if (pirState == HIGH) {
//센서값이 HIGH 일때
Serial.println("FIRE!!!!");
// 다음의 문구를 시리얼 모니터로 출력합니다.
pirState = LOW;
}
}
}
// 경보음을 만들어 냅니다.
void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}
// 경보음을 만들어 냅니다.
void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
기존 delay 명령어와 비슷하지만 다른 delayMicroseconds는 기존 delay가 ms(밀리초)만큼 지연시키는 명령어 였다면,
delayMicroseconds는 마이크로초만큼 지연시키는 명령어 입니다.
long 함수는 int 형 변수보다 훨씬 큰 정수를 담을 수 있는 변수로 사용하겠다는 것을 의미합니다.( -2,147,483,648 부터 2,147,483,647의 정수를 담을 수 있습니다)
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!