이 Arduino IR Tutorial에서는 TV 리모컨과 Arduino를 사용하여 전자 장치를 제어하는 방법을 배웁니다. 간단한 LED 제어부터 DC Fan 속도 제어, 고전압 가전 제어까지 몇 가지 예를 들어 보겠습니다. 다음 동영상을 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다.
작동 방식
버튼을 눌렀을 때 TV 리모컨 앞의 LED가 깜박이는 것을 볼 수 있습니다. 실제로 이것은 적외선이며 사람의 눈에는 보이지 않기 때문에 카메라를 통해서만 볼 수 있습니다.
<그림 클래스="aligncenter">
따라서 깜박임은 버튼을 누를 때 적외선 LED가 적외선 수신기로 수신하는 데 필요한 빛이나 펄스의 버스트를 보내는 것을 의미합니다.
이 튜토리얼에서는 수신된 신호를 증폭, 필터링 및 복조하고 Arduino 보드의 디지털 입력에 허용되는 깨끗한 논리 출력을 제공하는 것을 볼 수 있는 다음 블록 다이어그램이 있는 V 34838 IR 수신기를 사용할 것입니다.
<그림 클래스="aligncenter">
그런 다음 Ken Shirriff의 Arduino-IRremote 라이브러리를 사용하여 직렬 모니터에서 프로그램을 만들 때 사용할 수 있는 각 버튼 누름에 대한 고유한 16진수 코드를 볼 수 있는 데모 예제입니다.
Ken Shirriff의 Arduino-IRremote 라이브러리 링크:https://github.com/z3t0/Arduino-IRremote
TV 리모컨으로 RGB LED 제어
구성요소는 아래 사이트에서 얻을 수 있습니다.
IR 수신기 ...........................................................................
RGB LED ...........................................................................
그래서 우리는 TV 리모컨의 4가지 색상 버튼을 사용하여 LED 색상을 제어할 것입니다. 즉, 먼저 IRrecvDemo 예제를 업로드하고 직렬 모니터를 실행하여 이러한 각 버튼에 대한 16진수 코드를 확인해야 합니다. 이 버튼을 각각 누르고 코드를 기록해 보겠습니다.
이제 우리는 이와 같이 데모 코드를 수정하고 특정 버튼을 눌렀을 때 실행될 if 문을 추가할 것입니다. 따라서 각 버튼에 대해 적절한 RGB 값을 설정하고 setColor() 기능은 특정 색상의 LED를 켭니다. RGB LED가 Arduino와 어떻게 작동하는지 자세히 알아보려면 내 Arduino RGB 자습서를 확인하세요.
/*
* Controlling a RGB LED with a TV Remote
*
* Modified IRrecvDemo example from Ken Shirriff IRremote Library
* Ken Shirriff
* https://arcfn.com
*
* Modified by Dejan Nedelkovski,
* www.HowToMechatronics.com
*
*/
#include <IRremote.h>
int RECV_PIN = 8; // IR Receiver - Arduino Pin Number 8
IRrecv irrecv(RECV_PIN);
decode_results results;
int redPin = 5;
int greenPin = 6;
int bluePin = 7;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 0xF21D7D46) { // Red Button
setColor(255, 0, 0); // Sets Red Color to the RGB LED
delay(100);
}
if (results.value == 0x87CF1B29) { // Green Button
setColor(0, 255, 0); // Green Color
delay(100);
}
if (results.value == 0x6623D37C) { // Yellow Button
setColor(255, 255, 0); // Yellow Color
delay(100);
}
if (results.value == 0x854115F2) { // Blue Button
setColor(0, 0, 255); // Blue Color
delay(100);
}
if (results.value == 0x1639AB6E) { // Stop Button
setColor(0, 0, 0); // OFF
delay(100);
}
irrecv.resume(); // Receive the next value
}
delay(100);
}
// Custom made function for activating the RGB LED
void setColor(int red, int green, int blue)
{
analogWrite(redPin, red); // Sends PWM signal to the Red pin
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}Code language: Arduino (arduino)
다음은 Arduino IR 제어 RGB LED의 회로도입니다.
<그림 클래스="aligncenter">
TV 리모컨으로 DC 팬 속도 제어하기
이 예에 필요한 구성 요소:
DC 모터 ...........................
또는 DC 팬...........................................
NPN 트랜지스터………
다이오드...........................
커패시터 – 1uF .....
저항 – 1k 옴 ..
이 예에서는 TV 리모컨의 앞으로 및 뒤로 버튼을 사용하여 DC 팬 속도를 제어합니다. 팬 속도를 제어하기 위해 이 회로도를 사용하거나 실제로 버튼을 사용하여 PWM 신호를 제어합니다. 이 회로도의 작동 방식에 대한 자세한 내용은 내 Arduino 모터 자습서를 참조하십시오.
<그림 클래스="aligncenter">
다음은 이 예제의 소스 코드입니다. 따라서 analogWrite()를 사용하여 기능에서 우리는 트랜지스터의 베이스에 PWM 신호를 보낼 것입니다. PLAY 버튼은 최대 속도로 모터를 시작하거나 PWM 신호의 듀티 사이클은 100%가 되고 STOP 버튼은 모터를 정지합니다. 앞으로 버튼은 누를 때마다 PWM 신호의 듀티 사이클을 증가시켜 팬 속도를 높이고 뒤로 버튼은 감소시킵니다.
/*
* Controlling a DC Fan Speed with a TV Remote
*
* Modified IRrecvDemo example from Ken Shirriff IRremote Library
* Ken Shirriff
* https://arcfn.com
*
* Modified by Dejan Nedelkovski,
* www.HowToMechatronics.com
*
*/
#include <IRremote.h>
int RECV_PIN = 8; // IR Receiver - Arduino Pin Number 8
int pwmPin = 7; // Arduino Pin Number 7 to the Base of the Transistor
int pwmValue;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode( pwmPin, OUTPUT);
pwmValue = 0; // Starts the program with turned off motor
}
void loop() {
if (irrecv.decode(&results)) {
analogWrite(pwmPin, pwmValue);
if (results.value == 0xAFAF8374) { // PLAY Button
pwmValue = 255; // 100% Duty Cycle | Max Speed
}
if (results.value == 0x98519C65) { // STOP Button
pwmValue = 0; // 0% Duty Cycke | Turned off
}
if (results.value == 0x93F1BA08) { // FORWARD Button
if(pwmValue <= 245){
pwmValue = pwmValue + 10; // Increases the Duty Cycle of the PWM Signal
delay(20);
}
}
if (results.value == 0x71D086FF) { // BACKWARD Button
if(pwmValue >= 20){
pwmValue = pwmValue - 10; // Decreases the Duty Cycle of the PWM Signal
delay(20);
}
}
Serial.print(pwmValue);
Serial.print(" ");
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
delay(100);
}
Code language: Arduino (arduino)
TV 리모컨으로 고전압 가전제품 제어하기
이 튜토리얼에 필요한 구성요소:
5V 릴레이 모듈..... Amazon/ Banggood/AliExpress
케이블, 플러그, 소켓
마지막 예는 TV 리모컨을 사용하여 고전압 가전 제품을 제어하는 것입니다. 이를 위해 릴레이 모듈이 필요합니다. 250 및 125 V AC에서 정격이 10 A인 HL-52S 릴레이 모듈을 사용하겠습니다. 다음은 Arduino IR로 제어되는 고전압 가전 제품의 회로도입니다. Arduino 보드의 핀 번호 7을 사용하여 고전압 전자 장치를 연결하기 위한 소켓이 있는 릴레이를 제어합니다.
<그림 클래스="aligncenter">
우리는 HIGH VOLTAGE를 사용할 것이기 때문에 매우 조심해야 하며 부적절하거나 잘못된 사용은 심각한 부상이나 사망을 초래할 수 있으며 나는 당신의 행동에 대해 어떠한 책임도 지지 않음을 경고합니다. 릴레이를 사용하는 방법과 전자 장치를 연결하기 위한 소켓을 만드는 방법에 대한 자세한 내용은 내 Arduino 릴레이 자습서를 참조하십시오.
<그림 클래스="aligncenter">
이 예제의 소스 코드는 다음과 같습니다.
/*
* Controlling High Voltage Home Appliances with a TV Remote
*
* Modified IRrecvDemo example from Ken Shirriff IRremote Library
* Ken Shirriff
* https://arcfn.com
*
* Modified by Dejan,
* www.HowToMechatronics.com
*
*/
#include <IRremote.h>
int RECV_PIN = 8;
int relayOut = 7;
int buttonState ;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode( relayOut, OUTPUT);
buttonState = HIGH; // Starts the program with turned off Relay. The relay input works inversly so HIGH state means deactivated relay
}
void loop() {
buttonState = digitalRead(relayOut);
if (irrecv.decode(&results)) {
if (results.value == 0xAFAF8374) { // PLAY Button
digitalWrite(relayOut, LOW); // Activates the relay
}
if (results.value == 0x98519C65) { // STOP Button
digitalWrite(relayOut, HIGH); // Deactivates the relay
}
irrecv.resume(); // Receive the next value
}
Serial.print(" ");
Serial.println(results.value, HEX);
delay(100);
}Code language: Arduino (arduino)