Rami's 개발기록

[스위치 봇 만들기] 적외선 리모컨으로 서보모터 제어하기 본문

개발기록/arduino

[스위치 봇 만들기] 적외선 리모컨으로 서보모터 제어하기

ramrami 2021. 5. 22. 23:53

적외선 리모컨으로 서보모터를 제어해 볼 것이다.


 

아두이노 시뮬레이터 Tinkercad(팅커캐드)

아두이노 스타터 키트에 하나 들어있던 적외선 센서가 고장 나는 바람에 적외선 센서를 새로 시키면서 이것저것 부품들도 시켰다. 부품이 오는 동안 얼른 만들어보고 싶어서 알아보던 중 아두

public-void.tistory.com

먼저 이전 글에서 소개한 팅커캐드를 이용하여 회로를 먼저 구성해보았다.

 

적외선 리모컨으로 서보모터 제어하기 회로 구성


위의 회로 구성을 토대로 실제로 연결해본 모습이다.

 


리모컨의 ⏮버튼을 누르면 왼쪽 아래를 누르고

⏭버튼을 누르면 오른쪽 아래를 누르게끔 코드를 구성해보았다.

 

#include <Servo.h>
#include <IRremote.h>
 
int IRpin = 11; //11번 핀에 적외선 리모컨 수신부 연결
 
Servo myservo; //서보모터 정의
IRrecv irrecv(IRpin); //IRpin 으로 IR 수신을 하는 IRrecv 클래스 객체 irrecv를 생성
decode_results results; //리모컨을 통해 받은 수신 데이터의 저장 클래스
 
void setup() {
  Serial.begin(9600); //시리얼 통신을 9600의 속도로 시작
  irrecv.enableIRIn(); //리모컨 시작
  myservo.attach(9); //9번 핀에 서보모터 연결
}
 
void loop() {
  if (irrecv.decode(&results)) { //IR 수신이 정상적으로 완료된 경우 IR 수신하여 변조된 데이터를 results 변수에 저장
    Serial.println(results.value, HEX); //키값을 16진수로 변환하여 시리얼모니터에 출력
    irrecv.resume(); //IR 데이터 수신 후 다음 신호를 받을 수 있도록 준비
  }
  if (results.value == 0xFF906F) { //>>버튼 클릭시
    myservo.write(60); //서보모터 각도 60도
    delay(200); //0.2초 동안 딜레이
    myservo.write(90); //서보모터 각도 90도
  }
  if (results.value == 0xFFE01F) { //<<버튼 클릭시
    myservo.write(120); //서보모터 각도 120도
    delay(200); //0.2초 동안 딜레이
    myservo.write(90); //서보모터 각도 90도
  }
}

 

17번째 줄에서 사용된 decode() 함수는 수신된 적외선 리모컨으로부터 신호를 받을 준비를 한다.

이 값을 results라는 변수에 저장하기 위해 매개변수로 &results를 사용한다.

접두사 &는 results 변수의 주소 값을 의미한다.

해석한 값은 results.value로 가져올 수 있다.

 

18번째 줄은 시리얼 모니터에 16진수 값을 출력하는 코드이다.

또한 16진수 상수 값을 표현하기 위해 접두사 "0x"를 앞에 붙여 사용한다.

왜냐하면 10진수로 숫자 15는 16진수 "F"로 표현할 수 있는데

영문자 "F"와 구분하기 위해 코드에서는 "0xF"라고 표현한다.


움직이는 소리가 꽤 크지만 그래도 성공이다!

 

 

다음에는 타이머를 맞춰 시간이 되면 불이 켜지고 꺼지도록 만들어 볼 것이다.

 


👀참고

 

적외선 리모컨으로 LED 원격조종하기 - 아두이노 서킷(Circuits) 배우기 35편

● 적외선 센서와 리모컨 적외선 센서와 리모컨은 독립적으로 사용할 수 없고 두 장치가 모두 존재해야 한...

blog.naver.com

반응형

'개발기록 > arduino' 카테고리의 다른 글

아두이노 시뮬레이터 Tinkercad(팅커캐드)  (3) 2021.05.22
아두이노 키트 첫 개봉기  (5) 2021.05.20
Comments