pada postingan sebelumnya telah dibahas cara beserta program mengendalikan motor servo akantetapi tidak secara smooting artinya motor selalu bergerak konstan dalam kecepatan penuh menuju posisi yang di perintahkan dan mempertahankannya. nah.....kali ini saya menggunakan sedikit modifikasi program yaitu pada bagian sepeti pada potongan program berikut ini.
gambar diatas adalah cara membuat motor bergerak lebih smoot (halus). untuk pengaturan konfigurasi pada Code Vision AVR menggunakan ATtiny2313 adalah sama seperti pada artikle sebelumnya yaitu seperti gambar berikut ini.
Prinsipnya
- Memberikan delay atau waktu tunda pada selah penambahan angka yang di berikan ke motor servo. semakain besar delay yang diberikan akan semakin lamban pergerakannnya berlaku sebaliknya.
- Pengulangan FOR pada program adalah dihitung sesuai kebutuhan misalkan dari posisi angka100 ingin menjadikan ke posisi angka 80 maka pengulangannya adalah sebanyak 20x.
Download
cukup mudah kan? silahkan si sedot aja ya.......gw ikhlash kok wkwkwkwkwkwk
salam anak pulau.....:-)
Related Post
- Pemrograman-banyak-motor-servo menggunakan interrupt timer ATtiny2313
- Pemrograman-satu-motor-servo menggunakan interrupt timer ATtiny2313
- Rangkain servo motor controller ATmega8
- Menghitung Timer interrupt pada pemrogramna motor servo
- http://www.digitdude.com/2010/08/motor-servo-mg90-tower-pro-menggunakan.html
- Blue Arrow 4.3 Gram Micro Servo For Futaba, Hitec, JR,
GWS Receivers
- 322HD Standard Servo
Mas mau tanya nie...gimana klo servu yg digunakan ada 10...terima kasih mas...!!!
BalasHapusoalah AR.........pura2 gak tau ni........tu sama dengan 2 servo ar.....tinggal tambah inisialisasi variable trus dipasang di interrupnya aja....sama kok caranya dnegan yang 2 servo yg kemarin aq posting.
BalasHapusThanks mas.., servo controler bisa saya terapin..!!
BalasHapusTapi saya mo tanya nih gy nih mas Inzar...!!
klo ada 2 IC :
IC master & IC slave..,
IC master sbg Main Controller sdngkn IC slave sbg Servo controller..,
truz untuk mengubungkan k 2 IC pake komunikasi Serial..,
klo blh Tau Programnya gmn yak..??
Mohon Bantuan'y Mas..!!! thanks berat nih..!!
komunikasi serial tingal panggil getchar() trus yg diterima kan karakter maka keduanya di sesuaikan. kalo mau lebih bagus lagi pakai interup serialnya di RX interrup pada master. sehingga data tidak akan pernah kehilangan. tapi ambil datanya di rx_buffer[index keberapa?]
BalasHapuskalo sempat saya posting caranya. belom sempat buat programnya ni.
mas, numpang nimbrung nih...
BalasHapusmau tanya.. servox=23; maksudnya apa ya??
berikan ak pencerahan.... heheheheee
maksudnya servox=23 adalah servo tersebut diberi pwm atau nilai 23 sehingga bergerak ke suatu posisi. bisa disebut dengan posisi awal saat robot atau system dijalankan. (posisi awal servo bisa di set sesukanya)
BalasHapusmas kalo mo gerakin servo dr suatu sudut ke sudut tertentu dgn halus gmn mas?
BalasHapusmisalnya dari sudut 0 ke 90 hbs itu berhenti,
q bingung mas...
ganti aja delaynya. makin besar akan semakin lambat. untuk menentukan sudutnya ganti aja angka pada intruksi for yang 40 menjadi angka lain untuk menggerakkan ke 90 derajat. ingat angka itu bukan dalam bentuk derajat.
BalasHapusuda q coba mas tapi kok berulang trs ya mas,misal uda nyampe 90,entr dlm waktu agak lama balik ke posisi awal trs ke 90 lg.
BalasHapusbiar tetep di 90 trs gmn ya mas???
program pada link download diatas memang servo bolak balik. jadi programnya pangkas aja.
BalasHapusbuang yang bagian program pengurangan
seperti dibawah ini:
for(i=1;i<=40;i++)
{
servox--;
servoy--;
delay_ms(30);
}
delay_ms(1000);
for(i=1;i<=40;i++)
{
servox--;
servoy--;
delay_ms(30);
}
delay_ms(1000);
ok mas nanti q coba,thanks ya mas maaf ngrepotin...
BalasHapushehehe...
mas kl gerakin servo pake pwm gmn ya mas???
BalasHapusbisa aja tapi beda................
BalasHapusliat sini gambarnya ada.
PWM harus memenuhi syarat pensinyalan motor servo yaitu 1 sampai dengan 2 ms.
mas ada contoh program CVAVR or BASCOM untuk menggerakkan motor stepper secara looping gag?
BalasHapustolong kirim ke email donk
denysafari89@gmail.com
motor stepper itu kan lampu berjalan. sama programnnya dengan running led. hidup delay hidup lain lagi delay hidup ya gitu terus. kalo mau putar balik ya balik aja jalannya lampu. ntar nyusul kalo ada. sementara gak posting dulu.
BalasHapusmas klw tuk atmega listing program nya bisa gak yaa mas??
BalasHapussama aja . ikutin aja langkahnya cuma ganti type chip aja. caranya sama kok.
BalasHapusmas mw tanya listing ini bisa g di pake buat gaerkin servo pake sensor, soalnya q coba pake IF g ada reaksinya...
BalasHapuskalaw bisa, listingnya gmn y?,
bisa, if yang digunakan harus mendeteksi sensor. asumsikan sebagai tombol terlebihdahulu.
BalasHapuskemudian didalam fungsi if tersebut letakkan intruksi gerak servo. (didalam if ada if lagi.) seperti itu kira2.
Mas, maksdnya if dalam if tu gmana y?, bisa g mas kasi conthnya?, klw bisa kirim aja ke email tondekan_asli@yahoo.com, soalnya q buat g bisa..
BalasHapusKomentar ini telah dihapus oleh pengarang.
BalasHapusgan mo tanya neh..
BalasHapussaya coba pake atmega8535....
kok bagiab yg ini .
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
bikin eror ya.. tapi kalo di apus malah gk eror...
itu bawaannya ATtiny2313 kalo di konfigurasi pake wizard. soalnya ane pake wizard jadi gak paham bener sama register2 seperti itu. tapi pada judulnya tertulis
BalasHapus// Crystal Oscillator division factor: 1
coba baca datasheet.
sedangkan di ATmega jika di setting melalui wizart seperti gambar diatas gak muncul yg begituan.
trus kalo program buat di atmega gimana donk..??
BalasHapusyg penting intinya sama.. supaya motor servo bergerak halus/lambat..
mohon bimbingannya..
buat project baru trus pilih chip atmega nya kemudian lakukan setting seperti gambar di atas. cuma ganti chip aja. kemudian copy paste program seperti tampilan diatas ke while(1)
BalasHapusmakasih banyak atas tutor nya.. sudah saya coba.. dan berhasil..
BalasHapustapi kalo pengen ganti derajat.. mana yg harus di rubah yah..
sedikit penjelasan singkat:
BalasHapusnilai diatas while(1) yang "servox=23" dan "servoy=23". itu adalah nilai posisi mula2 motor servo.
kemudian dalam while(1) ada intruksi "servox--" dan ++ juga untuk servoy seperti itu juga.
nah....nilai penjumlahan dan pengurangannya itu ada di pengulangan fornya, pada intruksi for
for(i=1;i<=40;i++)
ganti2 aja angka 40 nya.
untuk cepat lambantnya motor atau mengatur smootnya ganti pada delay dalam fungsi for. yang pada gambar diatas "delay_ms(30)". itu aja di ganti2 ntar gerakan smootnya juga berubah.
maap sebelumnya mau nanya, untuk contoh kasus diatas kabel sinyal (kuning) motor servo dikonekin ke mikon di portB, betul? pin berapa yah?
BalasHapusiya. PORTB nya apa aja terserah yang di setting sebagai output seperti gambar di atas. PB0, PB1, PB2.
BalasHapusnah. ntar di paling atas program (coba download contoh program) ada :
#define servox PORTB.0
itu untuk menentukan pin mana yang digunakan yang terhubung dnegan motor servo.
gana kalo langsung pake
BalasHapusservox=35;
servox=25;
tapi perubahan putarannya kok kasar yah..
bisa gk kalo langsung ngasih nilai tapi gerakannya lembut kya program punya gan.. hehe
gini caranya
BalasHapusvoid servo(unsigned char nilai)
{
for(i=1;i<=nilai;i++)
{
servox--;
servoy--;
delay_ms(30);
}
}
letakakn fungsi diatas main program.
penggunaan seperti ini dalam while(1)
while(1)
{
servo(25);
}
misalnya seperti itu.
wah theme web na baru ya Gan..!! keren juga.. hehe
BalasHapusrencananya mau diganti balik seperti kemarin. ini agak bingung sayanya.....maklum udah kebiasaan make yg lama. full widget
BalasHapusblum terbiasa mungkin.. :)
BalasHapusngomong2
kalo saya jadiin gini bisa gk.ya..
ceritanya saya pengen pake 3 motor servo ketika port mikon saya kasih 0xFE
ketiga motor servo bergerak nya beda2..
{
case 0xFE: servox=25; //misal putar 30 drajat
servoy=30; //misal putar 50 drajat
servoz=15; //misal putar 20 drajat
;break;
default : servox=10;
servoy=10;
servoz=10;
};
nah program ini pengen pake fungsi yg ini biar gerakannya halus juga... bisa gk yah
void servo(unsigned char nilai)
{
for(i=1;i<=nilai;i++)
{
servox--;
servoy--;
delay_ms(30);
}
}
letakakn fungsi diatas main program.
penggunaan seperti ini dalam while(1)
while(1)
{
servo(25);
}
bisa. menggunakan fungsi yang pernah saya buat.
BalasHapusakantetapi fungsi tersebut masih ada kekurangan yaitu kita harus tau kondisi servo sudah bernilai berapa sehingga dapat ditentukan didalam fungsi ingin melakukan penambahan atau pengurangan.
jika posisi default adalah 10 maka prosesnya jika ingin menjalankan menjadi 25,30,dan 15.
akan dilakukan secara bersamaan dengan pembagian terlebihdahulu.
intinya harus dibagi rata dulu. agar servo mampu memulai gerakan secara serentak dan berhenti secara serentak. contohnya pada servo yg targetnya 30 dan 15 itu habis dibagi kan? jadi pada fungsi yang pernah saya buat sebelumnya dimasukkan nilai
servo(15);
dan untuk servo dengan target 30 digunakan
servoy+2;
Gan ada cara lain gk.. selain cara di atas..
BalasHapussupaya bisa lebih simple progrmnya..
hhhmmmm......ane coba2 juga dulu ya....soalnya lagi sibuk penelitian JACII ni....keep waiting aja di keep moving forward.
BalasHapus:-)
mas klo kontrol servo menggunakan stick ps2 dengan komunikasi spi gimanaya..?
BalasHapuspakai konfigurasi stick ps ? coba ambil data dulu dari komuni kasi spi stik pada artikle lain. di blog saya belom ada caranya. coba cari pengambilan data spi stick ps2 ke lcd nnti dari data tersebut akan mudah diterapkan untuk berbagai hal.
BalasHapussemoga saran saya membantu.