Showing posts with label Servo. Show all posts
Showing posts with label Servo. Show all posts

Sunday, October 28, 2018

Drive Motor Servo dari GUI HTML pada Raspberry Pi

Pendahuluan

Untuk membuat aplikasi GUI di Raspberry Pi banyak macamnya, salah satunya bisa menggunakan Python, membuat GUI dengan Python menurut saya sendiri agak merepotkan pertama karena harus mempelajari hal yang baru, kedua tampilannya yang sedikit lebih kaku. agak berbeda jika kita membuat GUI dengan HTML scriptnya lebih mudah, tampilannya bisa dipermanis dengan CSS dan Javascript. Artikel ini dibuat sebagai tutorial membuat aplikasi GUI dari HTML untuk mentrigger script Python sebagai script yang dijalankan secara background dan mengembalikan nilai balik ke HTML.

Disini saya akan membuat Aplikasi dimana terdapat dua tombol untuk menggerakan motor Servo dan tampilan bar progress yang memperlihatkan nilai sebuah sensor. ya tentu saja untuk urusan GUI kita buat dengan menggunakan HTML dan Bootstrap agar tampilannya eyecatching. dan script Python bertugas sebagai pelaksana untuk mengerakan motor Servo dan mengambil nilai sebuah sensor.

perlu diketahui bahwa sebelum memulai, diperlukan web server nginx dan CGI dengan program uwsg, dimana terdapat pada artikel sebelumnya pada link http://www.plankton123.info/2018/10/install-web-server-nginx-baca-engine-x.html. web server dan CGI diperlukan agar script Python bisa berjalan dari Web Browser.

GUI HTML

Kita akan membuat GUI sederhana dengan HTML, membuat GUI dengan HTML sangatlah mudah, karena HTML merupakan script pemrograman berbasis Tag, sebagai contoh jika kita membuat tombol mempunyai tag button maka contohnya yaitu <button> Gerak Servo </button> 
untuk mempelajari GUI HTML bisa dipelajari terpisah dari artikel ini. baik langsung saja saya membuat GUI HTML sebagai berikut :


<!DOCTYPE html>
<html>
<head>
 <title>GUI HTML</title>
</head>
<body>

 <div style="margin-top: 100px; margin-left: 100px;">
  <button id="servoKanan">Servo >></button>  
 </div>

 
</body>
</html>


simpanlah script HTML diatas difolder baru pada folder web dengan nama index.html, jika di Raspberry Pi milik saya dengan web server nginx, maka folder webnya berada di /var/www/html/ kemudian buat folder baru yaitu guihtml. dan simpan file index.html tersebut di folder /var/www/html/guihtml/.

kemudian setting konfigurasi nginx agar supaya folder baru guihtml dapat dibuka, yaitu dengan mengedit file /etc/nginx/sites-available/defaut  dengan menambahkan location baru  dengan perintah

 location /guihtml {
     try_files $uri $uri/ =404;
 }

dan reset service nginx dengan perintah diterminal sudo service nginx restart dan buka di browser http://ip-raspberry-pi/guihtml dikomputer lain yang satu jaringan dengan raspberry Pi anda. sehingga ketika dibuka akan tampil seperti berikut ini :


Menggunakan Javascript

project ini tidak terlepas dari bantuan javascript, javascript disini menggunakan framework jquery dan ajax. jquery dibutuhkan oleh ajax dalam melakukan tugasnya yaitu merequest sebuah halaman web, mengirimkan data, dan mendapatkan nilai balik dari sebuah halaman yang direquest. dalam hal ini halaman yang direquest merupakan script Python untuk melakukan sesuatu, misalnya menggerakan motor Servo atau mengambil nilai sebuah sensor dan mengirimkan nilai balik ke ajax tersebut.

karena menggunakan jquery maka jquery bisa kamu dapatkan pada link  https://jquery.com/download/  , letakan jquery didalam folder baru yang sudah dibuat tadi (folder guihtml). kemudian tambahkan baris kode diatas tag </body> file index.html dengan baris kode berikut ini :


<script type="text/javascript" src="http://172.20.10.14/guihtml/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
  
$('#servoKanan').click(function() {
  $.ajax({
   type:'get',
   url:'http://172.20.10.14/cgi-bin/servo.py?pulsa=4.5',
   success:function(data){
          alert (data);
       } 
   });
});
</script> 



kode diatas merupakan perintah untuk mendengarkan event klik button dengan id=servoKanan kemudian akan menjalankan ajax untuk melakukan request ke sebuah halaman script Python dengan nama servo.py dengan mengirimkan variable GET bernama pulsa bernilai '4.5'  kemudian nilai balikan dari hasil servo.py dikembalikan dalam bentuk parameter funtion (data) dan ditunjukan berupa alert javascript. jika terdapat alamat IP address diatas bisa diganti dengan alamat IP Address Raspberry Pi Anda sendiri, untuk mengetahui IP Address Raspberry Pi dapat melakukan ifconfig di terminal. berikut adalah kode lengkap untuk file index.html


<!DOCTYPE html>
<html>
<head>
 <title>GUI HTML</title>
</head>
<body>

 <div style="margin-top: 100px; margin-left: 100px;">
  <button id="servoKanan">Servo >></button>  
 </div>

 

 <script type="text/javascript" src="http://172.20.10.14/guihtml/jquery-3.3.1.min.js"></script>
 <script type="text/javascript">
  
  $('#servoKanan').click(function() {
    $.ajax({
         type:'get',
         url:'http://172.20.10.14/cgi-bin/servo.py?pulsa=4.5',
         success:function(data){
         alert (data);
         } 
      });
  });
 </script>

 
</body>
</html>


Servo.py (Script Python)

Dan terakhir kita akan membuat script Python dengan nama servo.py untuk menggerakan motor servo. seperti yang sudah pernah kalian ketahui bahwa motor servo digerakan dengan mengirimkan keluaran sinyal PWM (Pulse Width Modulation), oleh karena itu kita akan membuat keluaran sinyal PWM dengan duty cycle berupa data yang dikirimkan dari javascript menggunakan methode GET. berikut script Python yang sudah saya buat :

#!/usr/bin/env python

import RPi.GPIO as GPIO
import time
import cgi

form = cgi.FieldStorage()

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.OUT)

pwm = GPIO.PWM(18, 50)
pulsa = form.getvalue('pulsa')
pwm.start(float(pulsa)) time.sleep(1) pwm.stop() GPIO.cleanup() print "Content-type: text/html\n\n" print form.getvalue('pulsa')

script Python diatas pertama-tama membuat keluaran sinyal PWM dengan frekuensi 50 Hz, duty cycle berupa data yang dikirimkan melalui GET dengan nama pulsa  di Pin 18 BCM GPIO Raspberry Pi. kemudian mengembalikan nilai data variable pulsa yang dikirimkan melalui GET sebelumnya.

sejak PWM yang dikeluarkan yaitu 50Hz, maka periodenya yaitu 20ms, karena servo bergerak sepanjang 0 - 180 derajat dengan lebar pulsa minimal 0.5ms sampai 2.5ms, maka perhitungan duty cyclenya yaitu :

 0.5ms = 0.5/20 x 100% = 2.5%

1.5ms = 1.5/20 x 100% = 7.5%

2.5ms = 2.5/20 x 100% = 12.5%

sehingga untuk duty cycle yang digunakan yaitu dari 2.5 sampai 12.5

script Python diatas disimpan di folder CGI, pada kasus saya sendiri, saya simpan pada /usr/lib/cgi-bin/servo.py

agar www-data (akses halaman web untuk pada linux) dapat menjalankankan GPIO maka, perlu kita setting permission agar www-data dapat mengakses GPIO. untuk melakukan itu yaitu dapat melakukan perintah

$ sudo usermod -a -G gpio www-data
$ sudo groups www-data

kemudian restart Raspberry Pi. lanjut untuk testing.

Testing

setelah semuanya sudah selesai kita bisa mencoba testing. sebelumnya letakan Servo pin data ke GPIO nomor 18 BCM. kemudian buka web browser dikomputer lain yang satu jaringan dengan Raspberry Pi dan ketikan di Address Bar http://ip-address-Raspberry-Pi/guihtml/ dalam kasus saya buka http://172.20.10.14/guihtml/ kemudian tekan button servo >> maka seharusnya motor servo gerak dengan duty cycle PWM 4.5 % dan pada halaman browser akan ada alert variable GET seperti berikut :





Simple Input Output GPIO

Pendahuluan

Pada project embeded system hal yang paling dasar adalah bagaimana menggunakan input-output pada pin-pin controller yang digunakan. dalam kasus Raspberry Pi yang digunakan sebagai controller maka GPIO (General Purpose Input Output) merupakan pin-pin output atau gerbang interface ke dunia luar. karena dalam Raspberry Pi salah satu bahasa pemrograman yang didukung adalah Python. maka dalam artikel ini kita batasi dengan menggunakan bahasa pemrograman Python.


Hal dasar yang perlu diketahui tentang level logic yaitu pada saat Raspberry Pi mengeluarkan data High atau logika '1' maka secara fisika mengeluarkan tegangan 3.3 Volt dan saat Raspberry Pi mengeluarkan data Low atau logika '0' maka secara real mengeluarkan tegangan 0 Volt. maka didapat disimpulkan bahwa Raspberry Pi memiliki level tegangan 3.3 Volt

Akses GPIO dari Python

Untuk mengakses GPIO dari Python maka salah satu hal yang diperlukan yaitu menginstall package bernama RPi.GPIO. RPi.GPIO merupakan package Python yang berisi class untuk mengontrol GPIO pada Raspberry Pi. menurut dokumentasi Python penggunaan package ini tidak cocok untuk aplikasi yang memerlukan waktu yang sangat presisi, mengingat kita tidak bisa memprediksi kapan Python akan melakukan garbage collecting. juga karena jalan di OS under Linux dimana priority process ditentukan oleh CPU itu sendiri. untuk menginstall package RPi.GPIO dapat dilakukan dengan perintah dibawah ini :

sudo pip install RPi.GPIO
setelah terinstall tanpa error, package RPi.GPIO siap digunakan pada script Python. untuk menggunakannya langkah-langkahnya yaitu : pertama kita perlu mengimport package RPi.GPIO dengan perintah import RPi.GPIO as gpio, kemudian ada dua mode yang memetakan pin-pin di GPIO, pertama yaitu mode BOARD dimana mode ini menamakan pin sesuai dengan angka yang tercetak pada GPIO Raspberry PI. dan yang kedua mode BCM mode ini menamakan pin sesuai dengan standar "Broadcom SOC Channel". untuk mengetahui nomor pin dapat digunakan perintah pinout pada terminal sehingga akan tampil seperti gambar berikut ini :


dapat dilihat pada gambar diatas, untuk mode BOARD menggunakan nomor yang didalam tanda kurung berwarna putih, sedangkan pada mode BCM menggunakan nomor setelah tulisan GPIO berwarna hijau. contoh, pada mode BOARD pin nomor 12 akan sama dengan mode BCM pin nomor 18. untuk mengatur mode dengan perintah gpio.setmode(gpio.BOARD) jika digunakan sebagai mode BOARD dan perintah gpio.setmode(gpio.BCM) jika digunakan sebagai mode BCM.

MODE OUTPUT

Setelah menentukan mode, kemudian menentukan mode input atau output pada pin tertentu. jika digunakan sebagai output maka perintahnya yaitu gpio.setup(pin_number, gpio.OUT) contoh gpio.setup(12, gpio.OUT). untuk mengeluarkan data HIGH dapat digunakan perintah gpio.output(pin_number, gpio.HIGH) contoh gpio.output(12, gpio.HIGH).

Sedangkan untuk mengeluarkan data low dengan perintah gpio.output(pin_number, gpio.LOW) contoh gpio.output(12, gpio.lOW). contoh berikut ini merupakan script untuk membuat blink led jika terhubung ke pin 12 mode BOARD.


import RPi.GPIO as gpio 
import time 

gpio.setmode(gpio.BOARD) 
gpio.setup(12, gpio.OUT) 

gpio.output(12, gpio.LOW) 
time.sleep(1) 
gpio.output(12, gpio.HIGH) 

gpio.cleanup()
untuk rangkaian LED ke pin GPIO perlu tambahan resistor untuk mengatur arus sebesar 15mA melalui LED. untuk mengetahui besaran berapa nilai resitor tersebut dapat digunakan hukum Ohm yaitu R = V / I, jika tegangan level logika HIGH adalah 3.3 V serta tegangan jatuh pada LED adalah 2.1 V dan I = 15mA maka nilai Resitor yang harus dipasaang yaitu 3.3 - 2.1/ 0.015 = 80 ohm.


MODE INPUT

untuk menset pin menjadi mode input, maka pada fungsi setup di gpio mempunyai tiga parameter yaitu pin number, gpio.IN dan pull_up_down=gpio.PUD_DOWN atau pull_up_down=gpio.PUD_UP. contoh gpio.setup(11, gpio.IN, pull_up_down=gpio.PUD_DOWN)

extra parameter atau parameter ketiga pada fungsi setup ini memberikan tambahan informasi bahwa perlu diaktifkan resistor pull up atau resistor pull down. jika diberikan pull_up_down= gpio.PUD_DOWN maka resistor pull down akan aktif sehingga dalam posisi ambang atau tidak ada masukan logika pin akan bernilai LOW.

jika diberikan pull_up_down=gpio.PUD_UP maka resistor pull up akan aktif, dan dalam posisi ambang atau tanpa masukan logika tegangan pin akan bernilai HIGH. untuk membaca nilai input dapat digunakan perintah gpio.INPUT(pin number) contoh gpio.INPUT(11). berikut ini adalah contoh penggunaan mode input pada GPIO.

import RPi.GPIO as gpio 
import time 

gpio.setmode(gpio.BOARD) 
gpio.setup(12, gpio.OUT) 
gpio.setup(11, gpio.IN, pull_up_down=gpio.PUD_DOWN) 

try:
   while True :
      if gpio.input(11) == gpio.HIGH :
         gpio.output(12, gpio.LOW)
      else :
         gpio.output(12, gpio.HIGH)

except KeyboardInterrupt:
  gpio.cleanup()

OUTPUT PWM (Pulse Width Modulation)

PWM atau pulse width modulation adalah teknik mengatur lebar pulsa atau duty cycle pada frekuensi yang tetap. sebagai contoh jika terdapat sebuah sinyal kotak-kotak dengan frekuensi 50 Hz yang berarti nilai periodenya yaitu 1 /50 = 0.02 sekon atau 20mS.  dengan mengatur lebar pulsa maka lebar HIGH-nya dapat berubah-rubah begitu juga lebar LOW-nya berubah-rubah, yang mana jika dijumlahkan nilainya harus tetap yaitu 20mS. 

modulasi lebar pulsa bisa digunakan untuk mengatur terang redup nyala lampu LED, mengatuh kecepatan motor DC, menentukan derajat perputaran motor servo dan lain sebagainya. 

setiap Pin I/O pada GPIO Raspberry Pi secara software dapat dijadikan output PWM dengan menggunakan package RPi.GPIO. untuk menggunakan sebagai PWM, pin perlu di setup sebagai output kemudian ditentukan nilai frekuensinya dan mengatur duty cycle awalan dalam satuan %, kemudian dapat mengubah duty cycle pada proses berikutnya  berikut adalah contoh script output PWM dengan duty cylce 5.5 % untuk awalan :


import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.OUT)

pwm = GPIO.PWM(18, 50)

pwm.start(5.5)
time.sleep(1)

pwm.ChangeDutyCycle(7.5)
time.sleep(1)


pwm.stop()
GPIO.cleanup()

dapat dilihat pada script di atas dimana mode yang digunakan BCM pin 18 sama dengan pin 12 mode BOARD, kemudian pin 18 dijadikan output, dan dibuat objek pwm dengan pin 18 sebagai output pwm dan frekuensi 50 Hz yaitu pada perintah pwm = GPIO.PWM(18, 50). dengan frekuensi 50 Hz maka periodenya yaitu 1/ 50 = 20ms/

kemudian dilanjutkan dengan menset duty cycle awal sebesar 5.5 % selama 1 detik dengan perintah pwm.start (5.5) time.sleep(1). duty cycle 5.5 % artinya memiliki Ton yaitu sebesar 5.5/100 * 20ms = 1.1 ms dan Toff sebesar 20ms - 1.1ms = 18.9ms. dilanjutkan dengan merubahnya ke nilai 7.5 % selama 1 detik dengan perintah pwm.ChangeDutyCycle(7.5) time.sleep(1). duty cycle 7.5 % artinya memliliki Ton = 7.5/100 * 20ms = 1.5ms dan Toff = 20ms - 1.5ms = 18.5ms

selanjutnya pwm berhenti dan mengembali pin-pin GPIO secara default. dengan perintah pwm.stop() GPIO.cleanup(). semoga artikel ini dapat bermanfaat bagi teman-teman. selamat bereksperimen :) .

Saturday, October 27, 2018

Argument pada Python (Studi Kasus Pengaturan motor Servo)

Pendahuluan

pada artikel sebelumnya sudah ada  pembahasan mengenai script Python untuk menggerakan motor Servo. namun penggunaannya sebatas berputar pada sudut derajat yang sudah ada di script tersebut. kemudian pertanyaannya bagaimana menggunakan script Python untuk memutarkan motor servo sekian derajat dengan info derajat dikirim dari argument saat script Python tersebut dijalankan. misalkan saat menjalankan script Python seperti dibawah ini :

sudo python servo.py 100
dimana angka 100 merupakan argument yang akan dikirimkan ke dalam script Python untuk diolah menjadi besaran lebar pulsa PWM untuk menggerakan motor servo. dengan ini kita cukup membuat satu script Python kemudian kita bisa memutar motor servo tersebut berapa deraja dengan menganti besaran argument pada saat menjalankan script Python tersebut.

Argument pada Python

Secara sederhana argument adalah nilai yang diberikan kepada sebuah fungsi, saat kita memanggil fungsi tersebut. kemudian nilai argument tersebut akan diberikan ke parameter fungsi tersebut. secara sederhana argument merupakan sebuah nilai misal 5, "hello" dan parameter sebuah simbol misal x, y dan lain sebagainya. contoh misal terdapat fungsi luas_segita dengan parameter alas dan tinggi maka dapat ditulis luasSegita(a, t) a dan t merupakan parameter untuk fungsi luasSegitiga, kemudian fungsi luasSegitiga dipanggil di fungsi utama seperti berikut luasSegitiga(4, 5) angka atau nilai 4 dan 5 merupakan nilai yang diberikan ke a dan t.

untuk menggunakan argument pada saat menjalankan script Python pertama-tama kita perlu meng-impor modul sys. kedua argument tersebut berbentuk list atau array, dimana setiap nilai akan di-assign-kan kedalam index yang berbeda contoh sys.argv[0], sys.argv[1].... berikut kita akan membuat script Python sederhana untuk menguji sebuah argument. berikut script sederhananya :

import sys

nilai1 = sys.argv[0]
niai2 = sys.argb[1]

print (nilai1 = , nilai1)
print (nilai2 = , nilai2)

simpan script diatas dengan nama testArg.py dan jalankan script dengan perintah python testArg.py 1 2 , perlu diingat bahwa semua nilai yang dilewatkan dari argument ini bertype data string, jika teman-teman ingin menggunakannya sebagai numerik atau int maka dapat mengunakan fungsi int() untuk mengubah string menjadi int output dari script diatas yaitu :

('nilai1 = ', 'tesArg.py')
('nilai2 = ', '1')


dapat dilihat bahwa nilai argument index 0 yaitu nama script dan nilai argument index 1 yaitu angka 1. dari sini kita belajar bahwa nilai pertama dari argument yang kita kirimkan akan menuju ke parameter sys.argv dengan index 1 ataua sys.argv[1] dan seterusnya.

Script Motor Servo

kita akan membuat script motor servo dimana nilai argument digunakan sebagai lebar pulsa untuk pengaturan derajat gerak motor servo. contoh: pyhton servo.py 100, maka angka 100 akan digunakan sebagai nilai lebat pulsa PWM. berikut adalah script Python untuk mengerakan motor servo :


import time
import wiringpi
import sys
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(18, wiringpi.GPIO.PWM_OUTPUT)
wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS)
wiringpi.pwmSetClock(192)
wiringpi.pwmSetRange(2000)
pulsa = sys.argv[1]
wiringpi.pwmWrite(18, int(pulsa))

karena pinMode pwm perlu menggunakan permison sudo, maka untuk menjalankan script Python diatas dapat dijalankan dengan sudo python servo.py 100,  pada script diatas angka 100 merupakan argument pertama yang kemudian di masukan ke dalam variable pulsa dan karena masih bertype data string perlu dirubah ke int dengan perintah int(pulsa). 

angka 100 tersebut dapat dirubah nilainya dari 50 sampai 250 sesuai dengan lebar pulsa minimal dan maksimal pada motor servo. dengan begini kita hanya perlu membuat satu script Python untuk mengatur gerakan putar motor servo berapa derajat-pun kita mau dengan melewatkannya pada argument.  sekian artikel kali ini semoga dapat bermanfaat terima kasih :) .




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: