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

Arduino Uno 로 IR 적외선 장애물 감지센서를 사용해서 DC 모터를 제어해 보기

by 오마이엔지니어 2024. 5. 11.
반응형

Arduino Uno 로 IR 적외선 장애물 감지센서를 사용해서 DC 모터를 제어해 보고 속도를 조정해 보는 프로젝트 입니다

<IR 적외선 장애물 감지센서 이미지>
IR 적외선 장애물 감지센서는 적외선 트랜스미터(송신기)와 리시버(수신기)로 구성되어 있으며
발사된 적외선이 물체에 맞고 돌아오는것을 수신기가 수신하여 장애물을 감지하게 되는 원리로 동작합니다
동작전압 3.3~5V 로 OUT은 디지털 출력이 가능합니다
아두이노등의 마이크로 컨트롤 보드에 연결해서 사용하기에 적합하며 근접센서로 활용할 수 있습니다
IR 적외선 송수신 소자가 달려있기 때문에 주변광 자연광 간섭이 없는 어두운 실내에서 테스트 가능합니다

<R140 소형 DC Motor 이미지>

아두이노로 테스트 하기 적합하게 3~5V로 원활하게 동작 가능한 R140 소형 DC Motor를 사용하였습니다


사용된 부품

Arduino Uno R3 (Italy)

미니 브래드 보드

R140 소형 DC Motor

IR 적외선 장애물 감지센서
Photodiode 빛감지 센서
L9110S 듀얼 모터 드라이버
미니 브래드 보드
막대저항 10K ohm
Tact 스위치
점퍼케이블


사용된 키트

아두이노 장애물 감지 DC 모터 제어 키트



구성 배선도 

사용된 예제소스  

IR Sensor DC Motor.txt
0.00MB
Photodiode Sensor DC Motor.txt
0.00MB



주의사항
IR 적외선 송수신 소자가 달려있기 때문에 주변광 자연광 간섭이 없는 어두운 실내에서 테스트 가능합니다
밝은곳에서 테스트하고 싶다면 포토다이오드 센서를 사용해서 테스트 하면 됩니다

가장 주의해야 할 점은 R140 소형 DC Motor는 소형이지만 원활한 구동을 위해서 일정 이상 충분한 전압과 전류를

필요로 하므로 IR 적외선 장애물 감지센서와 별도의 전압으로 5V로 연결해 줍니다
IR 적외선 장애물 감지센서는 3.3V 에도 동작하므로 R140 소형 DC Motor 와 별도로 3.3V로 연결해 줍니다

예제코드를 살펴보면
int A_1A = 5;
int A_1B = 7;
int IRSensorpin = 3; // define IR Sensor signal pin
int val; //define a numeric variable
DC 모터 드라이버의 A_1A 핀은 5번
DC 모터 드라이버의 A_1B 핀은 7번
IRSensor핀은 3번에 연결합니다

int speed = 255;
모터 스피드는 아두이노 1024를 5V로 변환한 값 최대 255로 세팅합니다

이 부분을 원하는 값으로 변환해서 테스트 할수 있습니다
아날로그핀이 아니고 디지털핀에 연결된 디지털 테스트 이기 때문에
아주 정밀하게 조정은 불가능하지만 어느정도 속도 조정이 가능합니다 

void setup()
{
  pinMode(A_1A, OUTPUT);
  pinMode(A_1B, OUTPUT);
  pinMode(IRSensorpin, INPUT); //IR Sensor pin as input
}
셋업에서 센서 입력값을 받아서 모터 드라이버 A_1A 와 A_1B 에 연결된 DC 모터를 출력해서 구동시킵니다

void loop()

{
  val=digitalRead(IRSensorpin); //read the value of the sensor 
  if(val == HIGH)
  {
  digitalWrite(A_1A, LOW);
  digitalWrite(A_1B, LOW);
  }
루프에서 if문을 사용해서 디지털 센서값을 읽어서
장애물이 감지되지 않을때 센서는 HIGH 로 모터는 LOW 미구동 됩니다


  else
  {
  analogWrite(A_1A, speed);
  analogWrite(A_1B, 0);
  }
}
그밖의 경우는 A_1A 가 speed 세팅된 255 속도로 회전합니다
만약 반대 방향으로 역회전을 시키고 싶다면  
  analogWrite(A_1A, 0);
  analogWrite(A_1B, speed);
이렇게 예제를 수정해 주거나 DC 모터 배선을 반대로 연결해도 됩니다


Phodiode 센서를 사용해서도 역시 동일하게 테스트 가능합니다

다만 Phodiode 센서는 빛 감지 센서로 일정량의 광이 있는 밝은 곳에서 테스트 가능합니다

그리고 위 첨부된 예제파일에서도 알수 있듯이 Photodiode 센서는 
기본적으로 광이 있는곳에서 광을 감지해 LOW 출력이 되있기 때문에
val=digitalRead(PhotodiodeSensorpin); //read the value of the sensor 
if(val == LOW)
예제코드가 IR 장애물 감지센서를 사용할때와는 반대로 세팅되있습니다

프로젝트 동영상 - IR 적외선 장애물 감지 센서를 사용해서 DC Motor 제어해 보기


프로젝트 동영상 - Photodiode 빛감지 센서를 사용해서 DC Motor 제어해 보기


이렇게 IR 장애물 감지센서나 Photodiode 빛 감지 센서를 사용해서 간단하게 DC Motor 를 제어해 볼수 있습니다
센서 연결없이 단순하게 그냥 DC Motor를 구동 시키는 방법은 아래 포스팅을 참조 하도록 합니다

Arduino Uno 로 L9110S 듀얼 모터 드라이버를 사용해 DC 모터 구동시켜 보기



이어서 추가로 센서 대신 버튼을 사용해서 버튼을 눌렀을때 소형 DC 모터를 구동시켜 보는 테스트입니다 

구성 배선도 


사용된 예제소스  

Button DC Motor.txt
0.00MB
Button DC Motor2.txt
0.00MB


Button DC Motor 는 버튼을 누르고 있을때 DC 모터가 동작하는 예제이고
Button DC Motor2 는 버튼을 누르면 DC 모터가 동작하고 다시 버튼을 누르면 DC 모터가 멈추는 예제입니다

배선시 아두이노 3번핀에 연결된 버튼의 한쪽 핀은 풀업 저항 10K Ohm 과 함께 5V(또는 3.3V) 로 연결합니다 

예제코드를 살펴보면

int A_1A = 5;
int A_1B = 7;
int Buttonpin = 3; // Button signal pin
int val; //define a numeric variable
DC 모터 드라이버의 A_1A 핀은 5번
DC 모터 드라이버의 A_1B 핀은 7번
Button핀은 3번에 연결합니다
  

int speed = 255;
모터 스피드는 아두이노 1024를 5V로 변환한 값 최대 255로 세팅합니다
이 부분을 원하는 값으로 변환해서 테스트 할수 있습니다
아날로그핀이 아니고 디지털핀에 연결된 디지털 테스트 이기 때문에
아주 정밀하게 조정은 불가능하지만 어느정도 속도 조정이 가능합니다 

void setup()
{
  pinMode(A_1A, OUTPUT);
  pinMode(A_1B, OUTPUT);
  pinMode(Buttonpin, INPUT); //Button pin as input
}
셋업에서 버튼 입력값을 받아서 모터 드라이버 A_1A 와 A_1B 에 연결된 DC 모터를 출력해서 구동시킵니다

void loop()
{
  val=digitalRead(Buttonpin); //read the value of the Button 
  if(val == HIGH)
  {
  digitalWrite(A_1A, LOW);
  digitalWrite(A_1B, LOW);
  }
루프에서 if문을 사용해서 버튼의 디지털 신호를 읽어서
기본 신호가 HIGH 일때 모터는 LOW 로 미구동 됩니다

  else
  {
  analogWrite(A_1A, speed);
  analogWrite(A_1B, 0);
  }
}
그밖의 경우는 A_1A 가 speed 세팅된 255 속도로 회전합니다
만약 반대 방향으로 역회전을 시키고 싶다면  
  analogWrite(A_1A, 0);
  analogWrite(A_1B, speed);
이렇게 예제를 수정해 주거나 DC 모터 배선을 반대로 연결해도 됩니다

프로젝트 동영상-Button 을 사용해서 DC Motor 제어해 보기

반응형

댓글