본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 Photo Interrupter 포토인터럽터 센서를 사용해서 LED와 Buzzer 제어해 보기

by 오마이엔지니어 2022. 10. 25.
반응형

Arduino Uno 로 Photo Interrupter 포토인터럽터 센서를 사용하는 방법을 알아보고 LED와 Buzzer를 제어해 보는 프로젝트입니다


포토 인터럽터는 송신부(다이오드)와 수신부(트랜지스터)로 구성된 송신부와 수신부 사이의 물체나 장애물의 유무를 감지할수 있는 소자입니다
송신부와 수신부 사이에 물체가 없을경우 송신부(다이오드)에서 발산한 빛이 수신부(포토 트랜지스터)를 Turn On 시켜 LOW를 출력하게 됩니다
송신부와 수신수 사이에 물체가 있을경우 송신부(다이오드)에서 발산한 빛이 차단되어 수신부(포토 트랜지스터)가 Turn Off 되어 HIGH를 출력하게 됩니다
포토인터럽터 송신부와 수신부 사이의 물체나 장애물을 감지하고 측정할수 있기 때문에 모터의 속도나 RPM 측정등에 활용할수 있습니다

포토 인터럽터 센서모듈은 4핀 PCB에 장착되어 3.3V~5V 전원으로 동작가능하며 디지털(DO) & 아날로그(AO) 출력으로  출력값을 확인할수 있습니다

<포토 인터럽터 센서 이미지>

사용된 부품

Arduino Uno R3 (Italy)

브래드 보드
5mm LED
포토인터럽터 센서모듈

Active Buzzer
SG90 마이크로 서보모터
점퍼케이블
막대저항 220 Ohm

사용된 키트
아두이노 포토 인터럽터 센서 키트

구성 배선도-장애물 감지시 LED 제어해 보기

구성 배선도-장애물 감지시 LED와 Buzzer 제어해 보기

구성 배선도-장애물 감지시 숫자 카운트해 보기

사용된 예제소스 

photo interrupter LED.txt
0.00MB
photo interrupter LED Buzzer.txt
0.00MB
photo interrupter Count.txt
0.00MB


주의사항
포토 인터럽터 센서가 브래드보드에 꽉 꼽혀서 전원(파워 LED)이 잘 들어오도록 배선합니다
(브래드보드에 잘 꼽히지 않아 전원이 켜졌다 꺼졌다 한다면 숫놈-암놈 케이블로 따로 배선해 주면 잘 동작합니다)
LED는 긴 다리쪽이 (+)이고 짧은 다리쪽이(-)입니다,  Buzzer는 (+)표시쪽을 5번핀에 배선하고 반대쪽을 (-)로 배선합니다
별도 라이브러리를 사용하지 않으므로 간단하게 테스트 할수 있습니다

photo interrupter LED 예제코드를 살펴보면

int led = 3;
int sensor = 2;

void setup()
{
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);
}

void loop()
{
if( digitalRead(sensor) == LOW )
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);

delay(100);
}
LED는 아두이노 3번핀, 센서DO는 아두이노 2번핀에 연결합니다
셋업에서 센서값을 입력받아서 LED로 출력해 줍니다
루프에서 if 문을 사용해서 센서가 LOW이면 LED가 HIGH가 됩니다
elss 문을 사용해서 그밖의 경우 센서가 HIGH이면 LED가 LOW가 됩니다

동영상에서는 장애물이 감지될시 LED가 꺼졌는데 반대로 장애물 감지시 LED를 켜고 싶다면
예제코드의 HIGH 와 LOW만 바꿔서 수정해 주고 업로드 해주면 됩니다

photo interrupter LED Buzzer 예제코드를 살펴보면

int Led = 7; // define Blue LED pin
int Led2 = 8; // define Red LED pin
int Buzzer = 5; // define Buzzer pin
int buttonpin = 3; // define photo interrupter signal pin
int val; //define a numeric variable
블루 LED는 아두이노 7번핀, 레드 LED는 아두이노 8번핀, 부저는 아두이노 5번핀, DO핀은 아두이노 3번핀에 배선합니다

void setup()
{
  pinMode(Led, OUTPUT); // Blue LED pin as output
  pinMode(Led2, OUTPUT); // Red LED pin as output
  pinMode(Buzzer, OUTPUT); // Buzzer pin as output
  pinMode(buttonpin, INPUT); //photo interrupter pin as input
}
셋업에서 센서값을 입력받아서, Led, Led2, Buzzer 로 출력해 줍니다

void loop()
{
  val=digitalRead(buttonpin); //read the value of the sensor 
  if(val == HIGH) // turn on LED when sensor is blocked 
  {
    digitalWrite(Led,HIGH);
    digitalWrite(Led2,LOW);
    digitalWrite(Buzzer,HIGH);
  }
  else
  {
    digitalWrite(Led,LOW);
    digitalWrite(Led2,HIGH);
    digitalWrite(Buzzer,LOW);
  }
}

루프에서 if문을 사용해서 장애물이 감지될지 블루 LED(Led) 와 부저(Buzzer)가 켜지고
레드 LED(Led2) 가 꺼집니다
else문을 사용해서 그밖의 경우 장애물이 감지되지 않을시 레드 LED(Led2)가 켜지고

블루 LED(Led) 와 부저(Buzzer)가 꺼집니다

photo interrupter Count 예제는 장애물 감지시 시리얼 모니터로 숫자를 카운팅을 하는 예제로
속도 측정원리를 설명하는 예제로 참조만 하는게 좋을것 같습니다

프로젝트 동영상-장애물 감지시 LED 제어해 보기


프로젝트 동영상-장애물 감지시 LED와 Buzzer 제어해 보기


프로젝트 동영상-장애물 감지시 숫자 카운트해 보기



이어서 추가로 Arduino Uno 로 Photo Interrupter 포토인터럽터 센서로 LED와 SG90 마이크로 서보 모터를

제어해 보는 프로젝트입니다

구성 배선도-장애물 감지시 LED와 SG90 서보모터 제어해 보기

사용된 예제소스  

Photo Interrupter SG90.txt
0.00MB


주의사항
가장 주의해야 할 점은 마이크로 서보모터이긴 하지만SG90 서보모터 제대로 동작하려면
안정적인 전압과 전류가 필요하므로 포터 인터럽터센서와 별도의 전압으로5V로 연결해 줍니다
포토 인터럽터센서는 3.3V 에도 동작하므로 SG90 서보모터와 별도로
3.3V로 연결해 줍니다

예제코드를 살펴보면
 #include <Servo.h>
기본 Servo.h 라이브러리를 사용합니다

 
  int pinInterrupter=5; //Interrupter sensor digital pin
  int pinServo=3; //servo motor pin
  int pinLED=2;
  int val=0;

포토인터럽터 감지센서는 아두이노 5번핀
SG90 서보모터는 아두이노 3번핀

LED는 아두이노 2번핀에 연결합니다

void setup(){
  Serv.attach(pinServo);
  pinMode(pinLED,OUTPUT);
}
셋업에서 센싱값을 받아서 서보모터와 LED를 동작시킵니다


  void loop(){
    val = digitalRead(pinInterrupter);
  
    if (val ==0) { 
      Serv.write(10);
      digitalWrite(pinLED,LOW);
      delay(100);
    }
    else{
      Serv.write(150);
      digitalWrite(pinLED,HIGH);
      delay(100);
    }
  }
루프에서 if문을 사용해서 디지털 센서값을 읽어서
장애물이 감지되지 않았을 때는 서보모터가 10도 복귀하며 LED가 꺼집니다

else문을 사용해서 그밖의 장애물이 감지되었을 때는 서보모터가 150도로 움직이고 LED가 켜집니다

예제코드의 Serv.write(10); 
10도 또는  Serv.write(150); 150도를 적당하게 바꾸어서 테스트 가능합니다
하단 동영상에서는 180도로 수정해서도 테스트 해보았습니다


프로젝트 동영상-장애물 감지시 LED와 SG90 서보모터 제어해 보기

반응형

댓글