Monday, August 27, 2018

Kontrol Motor Servo di Raspberry Pi

Pengenalan

Artikel kali ini  yaitu sharing tutorial tentang bagaimana mengerakan motor servo dengan menggunakan perintah terminal. sebagaimana yang kita tahu motor servo dapat dikendalikan dengan sinyal pulsa untuk berbagai variasi putaran derajat. dengan konsep ini, kita bisa mengatur putaran berapa derajat dengan memberikan sinyal pulsa ke motor servo. sebelum kita lanjut, ada baiknya kita mengenal lebih jauh tentang motor servo.

Motor Servo

Motor servo merupakan motor yang putaran per derajatnya dapat diatur dengan memberikan inputan lebar pulsa tertentu. secara sederhana apabila diberikan inputan dengan lebar pulsa 1 milisecond maka motor servo akan menuju ke posisi awal atau sudut 0 derajat. kemudian apabila diberikan lebar pulsa 1.5 milisecond maka motor servo akan menuju ke posisi center, dan apabila diberikan 2 milisecond maka motor servo akan menuju ke posisi 180 derajat. berikut ringkasan lebar pulsa inputan dan posisi motor servo.
  1. lebar pulsa 1 milisecond posisi 0 derajat
  2. lebar pulsa 1.5 milisecond posisi 90 derajat atau posisi center
  3. lebar pulsa 2 milisencond posisi 180 derajat.

RaspberyPI dan PWM

karena motor servo bergerak dengan memberikan inputan lebar pulsa, maka Raspberry Pi disini digunakan untuk memberikan inputan lebar pulsa tertentu kepada Motor servo. untuk melakukan hal ini, maka output pin Raspberry Pi akan diset menjadi PWM (Pulse Width Modulation). berikut tools software yang digunakan untuk kemudahan dalam memberikan output PWM.
 

wiringPi

wiringPi digunakan sebagai tools software untuk meg-control gpio pada Raspberry Pi. salah satunya dengan memberikan output PWM pada gpio. untuk menginstall wiringPi dapat menggunakan perintah sebagai berikut pada terminal:

sudo apt-get install -y wiringpi

setelah berhasil menginstall wiringPI maka, dapat digunakan perintah dibawah ini untuk menset pin tertentu pada gpio agar outputnya mengeluarkan PWM.
gpio -g mode 18 pwm
merupakan perintah untuk menset pin 18 agar mengeluarkan output PWM. untuk menentukan frekuensi output, rumus frekuensi PWMnya yaitu : 19,200,000 Hz / pwmClock / pwmRange anggap kita perlu menset frekuensi sebesar 50 Hz,  dan pwmClock 192 maka pwmRangenya yaitu 2000. nilai ini di set dengan perintah sebagai berikut :

gpio pwm-ms
gpio pwmc 192 
gpio pwmr 2000

setelah menset frekuensi, sekarang kita dapat mengeluarkan PWM dengan lebar pulsa tertentu:

untuk mengeluarkan lebar pulsa 1 milisecond dapat menggunakan perintah berikut :
gpio -g pwm 18 100
 untuk mengeluarkan lebar pulsa 1.5 milisecond dapat menggunakan perintah berikut :
gpio -g pwm 18 150
dan untuk mengeluarkan lebar pulsa 2 milisecond dapat menggunakan perintah sebagai berikut : 
gpio -g pwm 18 200
 
dengan lebar pulsa PWM diatas, maka motor servo seharusnya bergerak sesuai dengan lebar pulsanya. namun sering kali motor servo merespon inputan lebar pulsa yang lebih kecil dari 1ms yaitu 0.5ms atau lebih besar dari 2ms yaitu 2.5 ms, kamu dapat bereksperimen dengan lebar pulsa 0.5ms dan 2.5ms. untuk mengerakan servo dengan putaran tertentu dapat dicoba dengan nilai lebar pulsa antara 0.5ms sampai 2.ms. perlu diperhatikan bahwa ouput motor servo belum tentu stabil, terkadang ada beberapa jitter!

Script Python untuk Servo

untuk program dengan Python membutuh library wiringpi di python. install dengan perintah sebagai berikut :
sudo pip install wiringpi
setelah sukses menginstall modul wiringpi untuk python, kita buat program yang membuat servo bergerak dari posisi 0 ke 180 secara berulang-ulang, berikut contoh programnya :

import time
import wiringpi

wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(18, wiringpi.GPIO.PWM_OUTPUT)
wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS)
wiringpi.pwmSetClock(192)
wiringpi.pwmSetRange(2000)

delay_period = 0.01

while True:
        for pulse in range(100, 200, 1):
                wiringpi.pwmWrite(18, pulse)
                time.sleep(delay_period)
        for pulse in range(200, 100, -1):
                wiringpi.pwmWrite(18, pulse)
                time.sleep(delay_period)


untuk membuatnya secara remote ssh, dapat menggunakan text editor nano. buka program nano dengan perintah sebagai berikut :
nano servo.py
perintah diatas yaitu membuka text editor nano untuk file servo.py, setelah terbuka program nano, kitak ketikan kode diatas. simpan dengan short cut CTRL + O dan pilih Yes, kemudian keluar dengan shortcut CTRL + X. untuk menjalankan script python yang sudah dibuat, dapat dilakukan dengan perintah berikut:
sudo python servo.py
Motor servo seharusnya akan bergerak dari posisi 0 derajat ke 180 derajat secara berulang-ulang. selamat mencoba. Terima kasih sudah membaca artikel ini semoga bisa bermanfaat: