MODULE ARDUINO & THƯ VIỆN

Điều khiển Arduino với remote nhà mình

Trong hướng dẫn về Arduino & cảm biến hồng ngoại này, chúng ta sẽ tìm hiểu cách điều khiển các thiết bị điện tử bằng remote TV và Arduino. Chúng ta sẽ bắt đầu từ việc điều khiển đèn LED đơn giản, sau đó điều khiển tốc độ Quạt DC, đến điều khiển các thiết bị gia dụng điện áp 220V.

Cách thức hoạt động

Chúng ta cần biết rằng đèn LED phía trước remote TV nhấp nháy khi chúng ta nhấn một nút bất kỳ. Chúng ta chỉ có thể nhìn thấy điều này qua camera vì đây là LED hồng ngoại và nó không thể nhìn thấy bằng mắt người.

Vì vậy, Khi chúng ta nhấn một nút, đèn LED hồng ngoại phát ra xung ánh sáng mà chúng ta cần nhận chúng bằng một bộ thu hồng ngoại.

Trong hướng dẫn này, chúng ta sẽ sử dụng bộ thu hồng ngoại đầu sắt ( có mã là V 34838) có sơ đồ khối như hình bên dưới.

Sau đó, sử dụng thư viện Arduino-IRremote của Ken Shirriff và ví dụ demo, chúng ta có thể nhận được một đoạn mã HEX cho mỗi nút nhấn tương ứng trên remote TV.

Điều khiển LED RGB qua remote TV

Chúng ta sẽ cần:

  • IR Receiver
  • RGB LED
  • 3x điện trở 220 Ohms
  • Arduino Board
  • Breadboard và dây cắm

Trong ví dụ này, chúng ta sẽ điều khiển màu LED bằng 4 nút màu của Remote TV. Điều cần làm trước tiên là cần xem mã HEX cho mỗi nút này bằng sử dụng ví dụ IRrecvDemo và Serial Monitor. Chúng ta sẽ nhấn từng nút và lưu lại mã của chúng.

Bây giờ chúng ta sẽ sửa demo code và thêm các câu lệnh sẽ được thực thi nếu nhấn một nút có màu tương ứng. Vì vậy, ứng với mỗi nút, chúng ta sẽ set các giá trị RGB phù hợp với hàm setColor (). Để biết thêm chi tiết về cách đèn LED RGB hoạt động với Arduino, bạn có thể đọc bài viết RGB LED & Arduino.

#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);  
}

Dưới đây là sơ đồ nối dây:

Điều khiển tốc độ động cơ DC

Linh kiện cần dùng

  • Động cơ DC hoặc Quạt DC
  • Transistor NPN (C1815)
  • Diode
  • Tụ điện – 1uF
  • Điện trở – 1k Ohms

Trong ví dụ này sẽ điều khiển tốc độ Quạt DC bằng các nút tiến và lùi của Remote TV. Chúng ta sẽ sử dụng sơ đồ mạch dưới đây để kiểm soát tốc độ của quạt thông qua PWM.

Bằng cách sử dụng hàm analogWrite (), chúng ta sẽ gửi tín hiệu PWM đến chân B của transistor. Nút PLAYsẽ khởi động động cơ ở tốc độ tối đa với chu kỳ PWM là 100% và nút STOP sẽ dừng động cơ. Nút TIẾN sẽ tăng tốc độ của quạt với mỗi lần nhấn bằng cách tăng chu kỳ làm việc của PWM và nút LÙI sẽ làm giảm tốc độ của nó.

#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);
}

Điều khiển thiết bị điện gia dụng với remote TV

Linh kiện cần dùng:

  • Module Relay
  • Nguồn ngoài

Ví dụ cuối cùng sẽ là điều khiển các thiết bị gia dụng bằng Remote TV bằng module relay (rơle). Với chân số 7 từ board Arduino, chúng ta sẽ điều khiển rơle đã kết nối sẵn với thiết bị điện gia dụng.

Dưới đây là source code:

#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);
}

Các bạn xem thêm các hướng dẫn khác tại: https://www.abcarduino.com/category/module-arduino-va-thu-vien/