ide dasar
keunggulan motor servo
untuk gambar simulasi penempatan komponen dan board Arduino bisa di lihat di bawah ini. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Membuat Perubahan
int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}
void loop()
{
pulseTime = 2100; //(the number of microseconds
//to pause for (1500 90 degrees
// 900 0 degrees 2100 180 degrees)
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
Upload dan coba lihat hasilnya. Servo akan bergerak ke arah 180 derajat. Timing 2100 microseconds akan membuat servo bergerak ke arah 180 derajat. dibawah ini yang merupakan variasi dari kode sebelumnya.
catatan :
untuk timing servo berbeda tergantung manufaktur jadi belum tentu timing 2100 membuat motor servo bergerak 180 derajat ,Untuk mencoba menemukan timing yang sesuai dengan servo yang anda pakai, gunakan kode program dibawah ini yang merupakan variasi dari kode sebelumnya.
int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}
void loop()
{
for(pulseTime = 900; pulseTime <= 2100; pulseTime += 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
for(pulseTime = 2100; pulseTime >= 900; pulseTime -= 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
}
Upload dan coba lihat kembali hasilnya. Servo akan bergerak ke 180 derajat dan 0 derajat berulang-ulang seperti pada program Sweep tadi. Tetapi hasilnya mungkin kurang maksimal, sudut 180 derajat dan 0 derajat-nya masih belum maksimal. Artinya servo sebenarnya belum menyentuh sudut 180 derajat atau 0 derajat. Coba rubah angka pada pulseTime, untuk yg 900 coba diperkecil dan untuk yang 2100 coba diperbesar. Anda harus menemukan angka pulseTime yang pada angka tersebut servo sudah pada posisi maksimumnya (servo tidak bergerak lagi, mencapai sudut 180/0 derajat). seperti kode berikut ini\
int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}
void loop()
{
for(pulseTime = 700; pulseTime <= 2650; pulseTime += 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
for(pulseTime = 2500; pulseTime >= 600; pulseTime -= 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
}
Agar mempermudah melihat angka pulseTime, coba gunakan Serial Monitor (Menu: Tools > Serial Monitor). Dan agar angka pulseTime yang digunakan tidak bergerak terlalu cepat, ganti kode delay(25); menjadi delay(500);.
Setelah anda mengerti dan memahami cara menggerakkan servo menggunakan Arduino, Gunakan daya kreasi anda dan kembangkan
sekian dulu posting dari saya ,terimakasih
sumber : http://blog.famosastudio.com/2011/07/tutorial/tutorial-arduino-servo/128
http://arduino.cc/en/Main/ArduinoBoardUno
langsung aja untuk posting kali ini saya akan membahas tentang cara menggunakan arduino uno(sini) untuk mengendalikan motor servo ,pada percobaan kali ini servo yang digunakan adalah servo mikro yang banyak dijual pada toko hobi atau bisa juga di sini
keunggulan motor servo
Di dalam servo terdapat gearbox yang kecil (untuk membuat gerakan yang
lebih bertenaga) dan rangkaian elektronik (untuk memudahkan pengaturan).
Sebuah servo standard dapat diatur posisinya dari 0 sampai dengan 180
derajat. Pengaturan posisi diatur menggunakan timed pulse, antara 1.25 milliseconds (0 derajat) dan 1.75 milliseconds (180 derajat) 1.5 milliseconds untuk 90 derajat). Waktu yang digunakan ini bervariasi dari tiap manufaktur servo. Apabila pulse yang digunakan dikirim setiap 25-50 milliseconds maka servo akan bergerak dengan sangat halus
untuk komponen yang di perlukan dalam percobaan ini antara lain
- 1 buah servo mikro
- Kabel jumper
gambar.1.1 skema rangkaian servo dan arduino
untuk gambar simulasi penempatan komponen dan board Arduino bisa di lihat di bawah ini. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.
gambar 1.2 simulasi penempatan komponen
kode program
kode program yang digunakan untuk menggerakkan
servo. Tidak perlu mengetiknya karena sudah tersedia pada software
Arduino. Klik menu File > Examples > Servo > Sweep.
// Controlling a servo position using a potentiometer (variable resistor) // by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Membuat Perubahan
- Membuat timing sendiri caramya dengan mengatur pulse yang digunakan untuk menggerakkan servo secara langsung (tanpa library servo). Dengan cara ini kita dapat menggerakkan servo pada 20 pin yang tersedia pada Arduino (pin digital & analog). Tetapi anda perlu merubah beberapa baris kode agar dapat mengoptimalkan hasilnya.
int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}
void loop()
{
pulseTime = 2100; //(the number of microseconds
//to pause for (1500 90 degrees
// 900 0 degrees 2100 180 degrees)
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
Upload dan coba lihat hasilnya. Servo akan bergerak ke arah 180 derajat. Timing 2100 microseconds akan membuat servo bergerak ke arah 180 derajat. dibawah ini yang merupakan variasi dari kode sebelumnya.
catatan :
untuk timing servo berbeda tergantung manufaktur jadi belum tentu timing 2100 membuat motor servo bergerak 180 derajat ,Untuk mencoba menemukan timing yang sesuai dengan servo yang anda pakai, gunakan kode program dibawah ini yang merupakan variasi dari kode sebelumnya.
int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}
void loop()
{
for(pulseTime = 900; pulseTime <= 2100; pulseTime += 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
for(pulseTime = 2100; pulseTime >= 900; pulseTime -= 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
}
Upload dan coba lihat kembali hasilnya. Servo akan bergerak ke 180 derajat dan 0 derajat berulang-ulang seperti pada program Sweep tadi. Tetapi hasilnya mungkin kurang maksimal, sudut 180 derajat dan 0 derajat-nya masih belum maksimal. Artinya servo sebenarnya belum menyentuh sudut 180 derajat atau 0 derajat. Coba rubah angka pada pulseTime, untuk yg 900 coba diperkecil dan untuk yang 2100 coba diperbesar. Anda harus menemukan angka pulseTime yang pada angka tersebut servo sudah pada posisi maksimumnya (servo tidak bergerak lagi, mencapai sudut 180/0 derajat). seperti kode berikut ini\
int servoPin = 9;
int pulseTime;
void setup()
{
Serial.begin(9600);
pinMode(servoPin,OUTPUT);
}
void loop()
{
for(pulseTime = 700; pulseTime <= 2650; pulseTime += 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
for(pulseTime = 2500; pulseTime >= 600; pulseTime -= 50) {
Serial.println(pulseTime);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
}
Agar mempermudah melihat angka pulseTime, coba gunakan Serial Monitor (Menu: Tools > Serial Monitor). Dan agar angka pulseTime yang digunakan tidak bergerak terlalu cepat, ganti kode delay(25); menjadi delay(500);.
Setelah anda mengerti dan memahami cara menggerakkan servo menggunakan Arduino, Gunakan daya kreasi anda dan kembangkan
sekian dulu posting dari saya ,terimakasih
sumber : http://blog.famosastudio.com/2011/07/tutorial/tutorial-arduino-servo/128
http://arduino.cc/en/Main/ArduinoBoardUno