Mahir Arduino Sketch dan Elektro secara praktek

Showing posts with label DC Motor. Show all posts
Showing posts with label DC Motor. Show all posts
Proyek sederhana untuk mengatur kecepatan Motor DC, hanya 1 arah, menggunakan komponen power transistor, diode dan eksternal power supply (untuk memberi daya pada motor) dan  potentiometer untuk mengatur kecepatan motor.

Transistor TIP120 dapat digantikan dengan transistor namun pastikan menggunakan transistor untuk beban arus tinggi. Sesuaikan dengan voltage dan arus  yang digunakan motor. Disarankan menggunakan heat sink pada transistor jika arus yang digunakan >= 1 amp.

External power supply bisa berupa baterai atau external DC power supply yang dapat kamu beli di toko-toko penyedia elektronik. Pastikan cukup voltage dan ampere untuk menjalankan motor namun tidak melebihi spek motor.

Pada proyek ini digunakan DC power supply dengan spek 5V dan 500mA. Bila volt lebih besar akan berisiko merusak motor.

Komponen yang digunakan

  • DC Motor
  • 10kΩ Potentiometer
  • TIP120 Transistor*
  • 1N4001 Diode*
  • Jack Plug
  • External Power Supply
  • 1K Resistor

Skema
Pertama, pastikan Arduino tidak terhubung dengan arus listrik. Baru rangkai seperti gambar dibawah.
Pastikan terhubung dengan benar. Salah rangkaian dapat menyebabkan kerusakan pada komponen bahkan pada Arduino board.

Diode penting untuk menjaga Arduino dari  EMF.




Sketch

!!! Perhatian: Sebelum upload code, matikan eksternal power supply ke motor dan pastikan potentiometer mentok di 0 (putar habis kearah sebalik jarum jam hingga mentok)


Setelah upload, hubungkan eksternal power supply. Sekarang potentiometer dapat kamu putar untuk mengatur kecepatan motor.

// Project 15 - Simple Motor Control
int potPin = 0; // Analog in 0 connected to the potentiometer
int transistorPin = 9; // PWM Pin 9 connected to the base of the transistor
int potValue = 0; // value returned from the potentiometer

void setup() {
// set the transistor pin as output:
pinMode(transistorPin, OUTPUT);
}

void loop() {
// read the potentiometer, convert it to 0 - 255:
potValue = analogRead(potPin) / 4;
// use that to control the transistor:
analogWrite(transistorPin, potValue);
}


Penjelasan Kode

Pertama-tama, kita deklarasikan 3 variable untuk menyimpan nilai dari analog pin yang terhubung dengan potentiometer, PWM pin yang terhubung dengan kaki base transistor dan variable untuk menyimpan value yang dibaca dari potentiometer

int potPin = 0; // Analog in 0 connected to the potentiometer
int transistorPin = 9; // PWM Pin 9 connected to the base of the transistor
int potValue = 0; // value returned from the potentiometer
.
Pada setup( ) function  kita atur pin mode transistor sebagai output.
void setup() {
// set the transistor pin as output:
pinMode(transistorPin, OUTPUT);
}

Pada main loop potValue diisi oleh nilai yang dibaca dari analog pin 0 (the potPin) kemudian dibagi 4.

analogWrite(transistorPin, potValue);

Kita perlu membagi dengan 4  karena range nilai analog ada diantara 0 (0 volts) hingga 1023 (5 volts) sedangkan range nilai yang akan kita tulis pada pin transistor (digital pin 9) adalah 0 - 255.

Selanjutnya, program akan menulis nilai dari potentiometer.

analogWrite(transistorPin, potValue);

Jadi, saat kita memutar potentiometer, nilai antara 0 -1023 akan terbaca, kemudian diconvert menjadi 0-255 kemudian nilai tersebut kita gunakan untuk mengubah kecepatan motor.

Putar arah balik jarum jam akan memperlambat motor, putar searah jarum jam akan menambah kecepatan motor.

Related Article
Proyek Sebelumnya - 16 - Proyek Light Sensor
Proyek Berikutnya - 18 - IC L293D
Pada projek sebelumnya, kita menggunakan transistor untuk mengatur motor. Pada projek ini, kita akan menggunakan IC motor driver yang terkenal, L293D. Keuntungan menggunakan chip ini adalah kita dapat mengatur 2 motor dalam sekali waktu, juga dapat mengatur arah putarannya. Chip ini juga dapat digunakan untuk mengatur stepper motor. Chip ini sudah ada diode internal, jadi kita tidak perlu menggunakan diode pada projek ini.


List Komponen

  • DC Motor
  • L293D or SN754410
  • Motor Driver IC
  • 10KΩ Potentiometer
  • Slide Switch
  • 10KΩ Resistor
  • Heatsink

Rangkaian


Sketch

// Using an L293D Motor Driver IC
#define switchPin 2 // switch input
#define motorPin1 3 // L293D Input 1
#define motorPin2 4 // L293D Input 2
#define speedPin 9 // L293D enable pin 1
#define potPin 0 // Potentiometer on analog Pin 0
int Mspeed = 0; // a variable to hold the current speed value

void setup() {
  //set switch pin as INPUT
  pinMode(switchPin, INPUT);
  // set remaining pins as outputs
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(speedPin, OUTPUT);
}

void loop() {
  Mspeed = analogRead(potPin)/4; // read the speed value from the   potentiometer
  analogWrite (speedPin, Mspeed); // write speed to Enable 1 pin
  if (digitalRead(switchPin)) { // If the switch is HIGH, rotate     motor clockwise
    digitalWrite(motorPin1, LOW); // set Input 1 of the L293D low
    digitalWrite(motorPin2, HIGH); // set Input 2 of the L293D       high
  }
  else { // if the switch is LOW, rotate motor anti-clockwise
    digitalWrite(motorPin1, HIGH); // set Input 1 of the L293D       low
    digitalWrite(motorPin2, LOW); // set Input 2 of the L293D         high
  }
}

Setelah code selesai diupload, atur potensiometer ditengah lalu hubungkan external power supply. Motor akan berputar dan kita dapat mengatur kecepatan motor dengan mangatur potentiometer. Untuk mengubah arah putara, atur dahulu kecepatan ke minimum kemudia tekan switch. Motor akan berputar kearah sebaliknya. Perlu diperhatikan, chipa mudah panas, chip akan panas sekali saat kita nyalakan.

Baca juga : L293D Motor Driver

Pembahasan Program

Kode pada proyek ini sangat mudah, pertama-tama kita definisikan pin yang akan kita gunakan.

#define switchPin 2 // switch input
#define motorPin1 3 // L293D Input 1
#define motorPin2 4 // L293D Input 2
#define speedPin 9 // L293D enable pin 1
#define potPin 0 // Potentiometer on analog Pin 0


Kemudian set sebuah integer untuk menyimpan nilai bacaan kecepatan motor dari potentiometer.

int Mspeed = 0; // a variable to hold the current speed value

Pada fungsi setup, kita set pin yang telah kita definisikan.

void setup() {
  //set switch pin as INPUT
  pinMode(switchPin, INPUT);
  // set remaining pins as outputs
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(speedPin, OUTPUT);
}


Pada main loop, pertama-tama kita baca nilai dari potentiometer yang terhubung pada analog pin 0 dan simpan di variable Mspeed.

  Mspeed = analogRead(potPin)/4; // read the speed value from the   potentiometer


Kemudian kita set nilai PWM  di pin 9  dengan kecepatan dari variable Mspeed.

  analogWrite (speedPin, Mspeed); // write speed to Enable 1 pin


Kemudian kita gunakan statemen if untuk menentukan nilai bacaan dari switch, HIGH atau LOW.
Jika, HIGH, maka output 1 pada IC  L293D di set LOW and output 2 di set to HIGH. Ini artinya, output 2 memiliki positive voltage dan output 1 adalah ground, menyebabkan motor berputar pada 1 arah.

  if (digitalRead(switchPin)) { // If the switch is HIGH, rotate     motor clockwise
    digitalWrite(motorPin1, LOW); // set Input 1 of the L293D low
    digitalWrite(motorPin2, HIGH); // set Input 2 of the L293D       high
  }

Jika switch pin bernilai LOW, maka output 1 di set HIGH dan output 2 di set LOW,  ini akan memutar balik arah putar motor.

  else { // if the switch is LOW, rotate motor anti-clockwise
    digitalWrite(motorPin1, HIGH); // set Input 1 of the L293D       low
    digitalWrite(motorPin2, LOW); // set Input 2 of the L293D         high
  }

Setelah itu fungsi loop akan kembali ke awal procedure. Dapat kita lihat, IC ini memudahkan kerja kita. Membuat skema diatas tanpa IC L293D akan lebih rumit. Begitu juga dengan kodenya. Jadi untuk pemula, jangan mudah terintimidasi oleh IC, karena IC dibuat untuk memudahkan kerja kita, asal tahu input, output dan aturan pakainya dengan membaca datasheet.

Related Article
Projek Sebelumnya - 17 - Simple Motor Control

Projek kali ini simple, menghubungkan stepper motor dengan Arduino dan mengontrolnya.

Komponen
  • Stepper Motor
  • L293D atau SN754410 motor driver IC
  • 2 x 0.01 micro farad Ceramic Capacitor
  • Resistor


Skema

Pastikan Arduino dan L293 terhubung ke power supply DC eksternal agar tidak membebani
Arduino. Arduino tidak perlu dihubungkan dengan suplai eksternal, L293 (atau SN754410).

koneksi power supply positif mengarah langsung ke breadboard dan pin 8 dari L293, dan untuk ground dihubungkan dari breadboard ke arduino.

Kapasitor bersifat opsional dan membantu memuluskan arus dan mencegah interferensi dengan Arduino.
Dapat juga menggunakan kapasitor elektrolit nilai rendah, tetapi pastikan menghubungkannya dengan benar (+ untuk memasok, - ke ground) karena dapat merusak atau meledak jika dihubungkan terbalik!

Resistor pembatas arus antara catu daya dan power supply yang memasok SN754410 atau chip L293D. Gunakan catu daya yang sesuai yang berada dalam rentang tegangan dan arus untuk motor Anda. Juga pastikan bahwa peringkat daya dari setiap resistor yang membatasi arus yang Anda gunakan di atas arus yang diperlukan oleh motor atau resistor akan memanas dan terbakar. Perhatikan bahwa tegangan penggerak motor juga akan lebih rendah daripada tegangan input (bahkan tanpa resistor) karena tegangan turun di internal driver (yang menambahkan hingga 1,5 hingga 4 volt, tergantung pada arus dan hal lainnya).


Pin 5v pada Arduino dihubungkan ke pin 16 (VSS) dari pin driver motor dan dua chip inhibit pin (1 dan 9) dihubungkan dengan 3.3v untuk membuat mereka menjadi HIGH, memastikan tidak ada setengah dari chip driver dihambat.

Pin Vin (Voltage in) pada Arduino dihubungkan ke pin 8 dari driver IC (VC). Pin 4, 5, 12, dan 13 semua dihubungkan ke ground.

Setelah semuanya terhubung sebagaimana mestinya, masukan kode berikut.


Sketch

#include <Stepper.h>
// steps value is 360 / degree angle of motor
#define STEPS 200
// create a stepper object on pins 4, 5, 6 and 7
Stepper stepper(STEPS, 4, 5, 6, 7);

void setup()
{}

void loop(){
  stepper.setSpeed(60);
  stepper.step(200);
  delay(100);
  stepper.setSpeed(20);
  stepper.step(-50);
  delay(100);
}


Pembahasan Kode

Program pada proyek ini sederhana dan clean, karena kerja berat sudah dikerjakan oleh library stepper.h

Pertama kita load library stepper.h

#include <Stepper.h>

Lalu define steps, ini tergantung dari stepper motor yang digunakan. Umumnya stepper motor memiliki angle step 7.5 atau 1.8 derajat. Pada proyek ini digunakan stepper motor 1.8 derajat.

Untuk menentukan berapa banyak step yang diperlukan oleh stepper motor, bagi 360 derajat (1 putaran penuh) dengan angle step, dalam hal ini 1.8 derajat, maka hasilnya adalah 200 step.

#define STEPS 200

Lalu kita buat objek stepper motor, kita beri nama stepper dan assign pins untuk coil dari stepper motor

Stepper stepper(STEPS, 4, 5, 6, 7);


Untuk menentukan kecepatan motor dalam rpm (revolution per minute), digunakan fungsi .setSpeed()

  stepper.setSpeed(60);

Perintah untuk memutar motor adalah .step()

  stepper.step(200);

Anda dapat memasukan angka negatif juga pada perintah .step(), silakan dicoba untuk melihat bagaimana arah putaran motor bila diberi angka negatif.

Saya kira, sketch diatas sudah cukup menjelaskan tanpa perlu dibahas lebih detail karena tutorial ini kesannya akan bertele-tele.

Silakan bereksperimen dengan memainkan parameter speed dan step. Semoga bermanfaat.


Semoga bermanfaat.

Artikel Sebelumnya Display Suhu

Artikel Berkaitan

Pada proyek kali ini akan menggunakan motor shield untuk mengatur 2 motor secara terpisah. Disini kita akan belajar mengatur kecepatan dan arah masing-masing motor. Lalu akan kita aplikasikan untuk mengatur gerak 2-wheel robot.

Komponen

  • Motor Shield
  • 2 x DC Motor atau 2 wheel robot base (lihat gambar berikut)
  • Battery Pack

gambar 1 - two wheeled robot base



Skema
Pada proyek kali ini tidak ada skema rumit, lebih ke plug and play. Pasangkan motor shield pada arduino. Dan hubungkan kabel dari DC motor dari robot base.

Perhatian, gunakan daya eksternal untuk motor shield dan motor (jangan diambil dari Arduino board).

Pada contoh proyek ini, digunakan official Arduino motor shield yang dirancang untuk mengendalikan 2 motor. Banyak shield lainnya, seperti dari Adafruit yang disertai library yang bangus (AFMotor.h). Jika Anda menggunakan produk shield lain, kode/sketch pada proyek ini harus diubah sesuai dengan library yang tersedia.

Sketch

#define QUARTER_SPEED 64 
#define HALF_SPEED 128 
#define FULL_SPEED 255 
// Set the pins for speed and direction of each motor 
int speed1 = 3; 
int speed2 = 11; 
int direction1 = 12; 
int direction2 = 13; 

void stopMotor() {   
  // turn both motors off   
  analogWrite(speed1, 0);   
  analogWrite(speed2, 0); 


void setup(){   
  // set all the pins to outputs   
  pinMode(speed1, OUTPUT);   
  pinMode(speed2, OUTPUT);   
  pinMode(direction1, OUTPUT);   
  pinMode(direction2, OUTPUT); 
}  


void loop(){   
  // Both motors forward at 50% speed for 2 seconds   
  digitalWrite(direction1, HIGH);   
  digitalWrite(direction2, HIGH);   
  analogWrite(speed1, HALF_SPEED);   
  analogWrite(speed2, HALF_SPEED);   

  delay(2000);   
  stopMotor(); 
  delay(1000); 

  // Left turn for 1 second   
  digitalWrite(direction1, LOW);   
  digitalWrite(direction2, HIGH);   
  analogWrite(speed1, HALF_SPEED);   
  analogWrite(speed2, HALF_SPEED);   

  delay(1000);   
  stopMotor(); 
  delay(1000); 

  // Both motors forward at 50% speed for 2 seconds   
  digitalWrite(direction1, HIGH);   
  digitalWrite(direction2, HIGH);   
  analogWrite(speed1, HALF_SPEED);   
  analogWrite(speed2, HALF_SPEED);   

  delay(2000);   
  stopMotor(); 
  delay(1000); 

  // rotate right at 25% speed   
  digitalWrite(direction1, HIGH);   
  digitalWrite(direction2, LOW);   
  analogWrite(speed1, QUARTER_SPEED);   
  analogWrite(speed2, QUARTER_SPEED);   

  delay(2000);   
  stopMotor(); 
  delay(1000); 
}

Penjelasan Kode
Sketch diatas sudah cukup jelas dan tidak terlampau rumit.  Semoga bermanfaat.

Related article
Artikel sebelumnya: Basic Stepper Control