Belajar Mikrokontroler - Robot Remote IR Arduino - #9

Belajar Mikrokontroler - Robot Remote IR Arduino - #9

Dalam Tutorial Arduino ini kita akan belajar bagaimana mengendalikan motor DC menggunakan remote IR dan Arduino. Kita akan melihat beberapa teknik dasar untuk mengendalikan motor DC dan membuat dua contoh di mana kita akan belajar bagaimana mengontrol motor DC menggunakan driver MX1508 dan board Arduino.



Kita dapat mengontrol kecepatan motor DC hanya dengan mengontrol tegangan input ke motor dan metode yang paling umum untuk melakukannya adalah dengan menggunakan sinyal PWM.

Kontrol Motor DC PWM

PWM, atau Pulse Wide Modulation (modulasi lebar pulsa) adalah teknik yang memungkinkan kita untuk menyesuaikan nilai rata-rata tegangan yang mengalir ke perangkat elektronik dengan menghidupkan dan mematikan daya dengan kecepatan tinggi. Tegangan rata-rata bergantung pada siklus kerja, atau jumlah waktu sinyal ON versus jumlah waktu sinyal OFF dalam satu periode waktu.


Jadi tergantung pada ukuran motor, kita cukup menghubungkan output PWM Arduino ke basis transistor atau gerbang MOSFET dan mengontrol kecepatan motor dengan mengontrol output PWM. Sinyal PWM Arduino daya rendah menghidupkan dan mematikan gerbang di MOSFET tempat motor daya tinggi digerakkan.

Catatan : Arduino GND dan catu daya motor GND harus dihubungkan bersama

Kontrol Motor DC H-Bridge

Di sisi lain, untuk mengontrol arah putaran, kita hanya perlu membalik arah aliran arus melalui motor, dan cara yang paling umum untuk melakukannya adalah dengan menggunakan Jembatan-H. Sirkuit H-Bridge berisi empat elemen switching, transistor atau MOSFET, dengan motor di tengahnya membentuk konfigurasi mirip-H. Dengan mengaktifkan dua sakelar tertentu pada saat yang sama kita dapat mengubah arah aliran arus, sehingga mengubah arah putaran motor.


Jadi jika kita menggabungkan kedua metode ini, PWM dan H-Bridge, kita dapat memiliki kendali penuh atas motor DC. Ada banyak driver motor DC yang memiliki fitur ini dan L298N adalah salah satunya selain itu bisa juga menggunakan MX1508.

Driver L298N

L298N adalah driver motor H-Bridge ganda yang memungkinkan kontrol kecepatan dan arah dari dua motor DC pada saat yang bersamaan. Modul tersebut dapat menggerakkan motor DC yang memiliki tegangan antara 5 dan 35V, dengan arus puncak hingga 2A.


Mari kita lihat lebih dekat pinout modul L298N dan jelaskan cara kerjanya. Modul ini memiliki dua blok terminal sekrup untuk motor A dan B, dan blok terminal sekrup lainnya untuk pin Ground, VCC untuk motor dan pin 5V yang dapat berupa input atau output.


Ini tergantung dari tegangan yang digunakan pada motor VCC. Modul ini memiliki regulator 5V onboard yang diaktifkan atau dinonaktifkan menggunakan jumper. Jika tegangan suplai motor hingga 12V kita dapat mengaktifkan regulator 5V dan pin 5V dapat digunakan sebagai output, misalnya untuk menyalakan papan Arduino kita. Namun jika tegangan motor lebih besar dari 12V kita harus memutuskan jumper karena tegangan tersebut akan menyebabkan kerusakan pada regulator 5V onboard. Dalam hal ini pin 5V akan digunakan sebagai input karena kita perlu menghubungkannya ke catu daya 5V agar IC berfungsi dengan baik.

Kita dapat mencatat di sini bahwa IC ini membuat penurunan tegangan sekitar 2V. Jadi misalnya, jika kita menggunakan catu daya 12V, tegangan pada terminal motor akan menjadi sekitar 10V, yang berarti kita tidak akan bisa mendapatkan kecepatan maksimum dari motor DC 12V kita.


Berikutnya adalah input kontrol logika. Pin Enable A dan Enable B digunakan untuk mengaktifkan dan mengontrol kecepatan motor. Jika ada jumper pada pin ini, motor akan diaktifkan dan bekerja pada kecepatan maksimum, dan jika kita melepas jumper kita dapat menghubungkan input PWM ke pin ini dan dengan cara itu mengontrol kecepatan motor. Jika kita menghubungkan pin ini ke Ground, motor akan dinonaktifkan.


Selanjutnya, pin Input 1 dan Input 2 digunakan untuk mengontrol arah putaran motor A, dan input 3 dan 4 untuk motor B. Dengan menggunakan pin ini kami sebenarnya mengontrol sakelar H-Bridge di dalam IC L298N. Jika input 1 LOW dan input 2 HIGH maka motor akan bergerak maju, begitu pula sebaliknya, jika input 1 HIGH dan input 2 LOW maka motor akan bergerak mundur. Jika kedua input sama, baik LOW atau HIGH, motor akan berhenti. Hal yang sama berlaku untuk input 3 dan 4 dan motor B.

setelah kita memahami cara kerja mengendalikan motor dc menggunakan driver l298N selanjutnya kita akan rangkai bagian remote IR karena kita akan mengendalikan motornya melalui perintah remote IR. susun rangkaian sebagai berikut :


kemudian masukan program dibawah ini:

#include <IRremote.h>
 
int IR_penerima = 7;   //IR Receiver Pin 3
int motor1_maju = 3;
int motor1_mundur = 4;
int motor2_maju = 5;
int motor2_mundur = 6;
 
IRrecv irrecv(IR_penerima);
decode_results results;
 
void setup(){
  Serial.begin(9600);  
  irrecv.enableIRIn(); 
  pinMode(motor1_maju, OUTPUT);    
  pinMode(motor1_mundur, OUTPUT);    
 pinMode(motor2_maju, OUTPUT);
 pinMode(motor2_mundur, OUTPUT);
}
 
void loop(){
 
  if (irrecv.decode(&results)){
    long int decCode = results.value;
    Serial.println(results.value);
   
    if (results.value==16736925) //maju
    {
      digitalWrite(motor1_maju, HIGH);
      digitalWrite(motor2_maju, HIGH);
      digitalWrite(motor1_mundur, LOW);
      digitalWrite(motor2_mundur, LOW);
      }
    if (results.value==16754775) // mundur
    {
      digitalWrite(motor1_maju, LOW);
      digitalWrite(motor2_maju, LOW);
      digitalWrite(motor1_mundur, HIGH);
      digitalWrite(motor2_mundur, HIGH);
      }
    if (results.value==16761405)// kanan
    {
      digitalWrite(motor1_maju, LOW);
      analogWrite(motor2_maju, 128);
      digitalWrite(motor1_mundur, LOW);
      digitalWrite(motor2_mundur, LOW);
      }
    if (results.value==16720605) //kiri
    {
      analogWrite(motor1_maju, 128);
      digitalWrite(motor2_maju, LOW);
      digitalWrite(motor1_mundur, LOW);
      digitalWrite(motor2_mundur, LOW);
      }
    if (results.value==16712445) // berhenti
    {
      digitalWrite(motor1_maju, LOW);
      digitalWrite(motor2_maju, LOW);
      digitalWrite(motor1_mundur, LOW);
      digitalWrite(motor2_mundur, LOW);
      }
      
    irrecv.resume();
  }
  delay(10);
}

Selamat Mencoba!



Post a Comment

Previous Post Next Post

Contact Form