Arduino, PIR 센서

이도현·2023년 8월 10일
0

아두이노 학습

목록 보기
28/34

1. 적외선 PIR센서 인체감지 모션센서

  • 수동 적외선 센서로써 적외선을 통해 사람의 움직임(모션, motion)을 감지하는 센서
  • 감지 각도 범위 안에 적외선(빛)의 변화가 있을 시 High(1) 신호를
  • 없을 시 Low(0) 값을 출력하는 센서

2. PIR 센서로 현관 등 만들기

#include <MiniCom.h>
#include <Led.h>

MiniCom com;
Led led(8);
int pir_pin = 7;
int pirState = LOW;
int val = 0;

void setup() {
	com.init();
	com.print(0, "[[Motion]]");
	pinMode(pir_pin, INPUT);
}

void loop() {
	com.run();
	val = digitalRead(pir_pin);

	if(val == HIGH) {
		if(pirState == LOW) {
		com.print(1, "Motion detected!");
		pirState = HIGH;
		} 
	} else {
		if(pirState == HIGH) {
		com.print(1, "Motion ended!");
		pirState = LOW;
		}
	}
	led.setValue(val); 
}

3. 적외선 PIR센서 인체 감지 모션 센서

//Pir.h
#pragma once

#include <Arduino.h>

class Pir{
protected:
	int pin;
	int state;
	pir_callback_t on_f;
	pir_callback_t off_f;

public:
	Pir(int pin);
	void setCallback(pir_callback_t on_f, pir_callback_t off_f);
	void check();
};
//Pir.cpp
#include "Pir.h"

Pir::Pir(int pin): pin(pin){
	pinMode(pin, INPUT);
	state = LOW;
	on_f = NULL;
	off_f = NULL;
}

void Pir::setCallback(pir_callback_t on_f, pir_callback_t off f){
	this -> on_f = on_f;
	this -> off_f = off_f;
}

void Pir::check{
	int val = digitalread(pin);
	if(val == HIGH){
		if(state == LOW){
			state = HIGH;
			if(on_f != NULL){
				on_f();
			}
		}
	} else{
			if(state == HIGH){
				state = LOW;
				if(off_f != NULL){
					off_f();
				}
			}
	}
}
//app.ino
#include <MiniCom.h>
#include <Led.h>
#include "Pir.h"

MiniCom com;
Led led(8);
Pir pir(7)

void detect_on(){
	com.pirnt(1, "Motion dectected!");
	led.on();
}

void detect_ff(){
	com.print(1, "Motion ended!");
	led.off();
}

void setup(){
	com.init();
	com.print(0, "[[Motion]]");
	pir.setCallback(detect_on, detect_off);
}

void loop(){
	com.run();
	pir.check();
}
profile
좋은 지식 나누어요

0개의 댓글