• Tidak ada hasil yang ditemukan

BAB V KESIMPULAN DAN SARAN

5.2. Saran

Berdasarkan hasil implementasi yang diperoleh, untuk pengembangan lebih lanjut ada beberapa saran agar alat ini dapat bekerja lebih baik, yaitu :

1. Perlu ditambahkan satu derajat kebebasan untuk ruang gerak pada pitch agar pergelangan robot tidak kaku. Sehingga memudahkan untuk meraih tuts keyboard. 2. Penggunaan keypad dapat lebih dioptimalkan dengan perintah untuk menyimpan

DAFTAR PUSTAKA

[1] Syafruddin, Raden Muhammad dan Fitri, Nyayu , 2012,

Perancangan Sistem Kendali

Gerak Lengan Robot Pengikut Gerak Lengan Manusia Berbasis Mikrokontroller,

http://eprints.mdp.ac.id/430/1/PERANCANGAN%20SISTEM%20KENDALI%20GER

AK%20LENGAN%20ROBOT%20PENGIKUT%20GERAK%20LENGAN%20MANU

SIA%20BERBASIS%20MIKROKONTROLLER.pdf , diakses tanggal 18 Maret 2014

[2] Konsep Mikrokontroler , http://sistemkomputer.fasilkom.narotama.ac.id/?p=194 ,

diakses tanggal 18 Maret 2014

[3]

Arduino Mega 2560, http://arduino.cc/en/Main/ArduinoBoardMega2560, diakses

tanggal 18 Maret 2014.

[4]

Arduino Mega 2560, http://arduino.cc/en/Main/ArduinoBoardMega2560, diakses

tanggal 18 Maret 2014.

[5]

Arduino Introduction, http://arduino.cc/en/Guide/Introduction, diakses 21 maret 2013.

[6]

Arduino Software, http://arduino.cc/en/Main/Software, diakses 21 maret 2013.

[7] Motor Servo , http://elektronika-dasar.web.id/teori-elektronika/motor-servo/ , diakses

tanggal 21 Maret 2014

[8] HS-645 Ultra Torque, https://www.servocity.com/html/hs-

645mg_ultra_torque.html#.U0zNAvlSioQ diakses 10 April 2014

[9] GWS S04 BBM Large Servo, http://www.robotsinsearch.com/products/gws-s04-bbm-

large-servo diakses 10 April 2014

[10] Hitec HS-805BB Mega ¼ Scale Servo,

https://www.hobbyking.com/hobbyking/store/__9810__Hitec_HS_805BB_Mega_1_4_S

cale_servo_19_8kg_152g_0_19sec.html diakses 10 April 2014

[11] Tower Pro SG90 Micro Servo, http://jogjarobotika.com/motor-aktuator/124-towerpro-

sg90-micro-servo.html diakses 12 April 2014

[12] Analog Input/Output, http://interactive.usc.edu/2010/02/13/class-5-analog-inputoutput/

diakses 12 April 2014

[13] Pengetahuan dasar komunikasi i2c,

http://mazanung.blogspot.com/2012/12/pengetahuan-dasar-komunikasi-i2c.html diakses

12 April 2014

[14] Matrik Keypad Heksadesimal Dengan MCS51

, http://e-belajarelektronika.com/matrik-keypad-heksadesimal-dengan-mcs51/ diakses 10

Februari 2015

[15] Lets play piano, http://prettysweetpiano.blogspot.com/p/belajar-teori-dasar-bermain-

piano.html di akses 10 Maret 2015

60

Lampiran Tabel Hasil Pengujian Alat

Tabel 4.3 Pengujian kondisi pembacaan tombol

No. Kode

Keterangan

1.

1A

Terbaca kode sebagai 1 (posisi do)

2.

1B

Terbaca kode sebagai 2 (posisi re)

3.

1C

Terbaca kode sebagai 3 (posisi mi)

4.

2A

Terbaca kode sebagai 4 (posisi fa)

5.

2B

Terbaca kode sebagai 5 (posisi sol)

6.

2C

Terbaca kode sebagai 6 (posisi la)

7.

3A

Terbaca kode sebagai 7 (posisi si)

8.

3B

Terbaca kode sebagai 8 (posisi do tinggi)

9.

3C

Terbaca namun tidak digunakan

10.

4B

Terbaca kode sebagai 0 (posisi awal)

11.

4A

Terbaca kode sebagai * (memainkan lagu)

12.

4B

Terbaca kode sebagai # (memainkan lagu)

Tabel 4.4. Gerakan Jari sesuai dengan Input Keypad No. Input Keypad Jari yang bergerak

1. 1 Ibu Jari 2. 2 Jari Telunjuk 3. 3 Jari Tengah 4. 4 Ibu Jari 5. 5 Jari Telunjuk 6. 6 Jari Tengah 7. 7 Jari Manis 8. 8 Jari Kelingking

9. 0 Semua Jari (dengan pengkondisian) 10. * Semua Jari (dengan pengkondisian) 11. # Semua Jari (dengan pengkondisian)

Tabel 4.5 Data Pengukuran Sudut Lengan Robot tanpa beban

No. Daerah Lengan Data Input Data Terbaca Busur Derajat Error

1. Base 900 900 0%

2. Shoulder 430 390 9,3%

3. Elbow 960 730 24%

4. Pitch 1100 1150 4,5%

Tabel 4.6 Data Pengukuran Sudut Lengan Robot dengan beban

No. LenganDaerah Data Input Data Terbaca BusurDerajat Error

1. Base 900 900 0%

2. Shoulder 430 270 14%

3. Elbow 960 650 32%

4. Pitch +Jari 1100 1200 9%

Tabel 4.7. Hasil pengukuran waktu penekanan tuts oleh jari

No

.

Kode Jari

(dalam angka)

Waktu (dalam detik)

0,1

0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9

1

1.

Ibu Jari ( 1)

0,05 0,13 0,12 0,25 0,31 0,44 0,58 1,03 1,03 1,23

2.

Telunjuk (2)

0,0

0,1 0,1 0,18 0,24 0,38 0,41

1

1

1,04

3.

Tengah (3)

0,0

0,1 0,13 0,22 0,27 0,4 0,5

1

1,04 1,1

4.

Ibu Jari (4)

0,05 0,12 0,13 0,32 0,2 0,32 0,44 0,58 1,05 1,23

5.

Telunjuk (5)

0,0 0,09 0,1 0,2 0,2 0,35 0,44

1

0,5 1,11

6.

Tengah (6)

0,0 0,11 0,13 0,2 0,32 0,38 0,46

1

1

1,03

7.

Manis (7)

0,06 0,09 0,19 0,18 0,39 0,38 0,51 1,04 1,16 1,17

8

Kelingking (8) 0,07 0,08 0,2 0,2 0,4 0,39 0,45 1,1 1,1 1,1

Tabel 4.8 Data pengujian keberhasilan jari menekan tuts dari do rendah ke do tinggi

Nomor percobaan Gagal Berhasil Error

Percobaan 1 8 8 50% Percobaan 2 6 10 37,5% Percobaan 3 7 9 43% Percobaan 4 4 12 25% Percobaan 5 0 16 0% Percobaan 6 6 10 37,5% Percobaan 7 5 11 31,2% Percobaan 8 1 15 6,25% Percobaan 9 6 10 37,2% Percobaan 10 6 10 37,2%

Tabel 4.9 Data pengujian keberhasilan jari menekan tuts pada lagu “Ode to Joy”

Nomor percobaan Gagal Berhasil Error

Percobaan 1 7 25 22% Percobaan 2 4 28 12,5% Percobaan 3 3 29 9,3% Percobaan 4 10 22 31,2% Percobaan 5 1 31 3,1% Percobaan 6 8 24 25% Percobaan 7 2 30 6,2% Percobaan 8 8 24 25% Percobaan 9 11 21 34,3% Percobaan 10 9 23 28,1%

LISTINGPROGRAM

#include <Keypad.h>

#include <Servo.h>

#include <Wire.h>

#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN 150 // this is the 'minimum' pulse length count (out of 4096)

#define SERVOMAX 600 // this is the 'maximum' pulse length count (out of 4096)

uint8_t servonum = 0;

int degrees=83;

int degreesx1=83;

int degreesx2=106;

int degrees1=63.2;

int degrees2=23.45;

int degrees3=140.55;

int clock;

Servo servo1;

Servo servo2;

Servo servo3;

Servo servo4;

Servo servo5;

int pos = 0;

const byte ROWS = 4; //four rows

const byte COLS = 3; //three columns

char keys[ROWS][COLS] = {

{ '1', '2', '3'} ,

{ '4', '5', '6'} ,

{ '7', '8', '9'} ,

{ '*', '0', '#'}

};

byte rowPins[ROWS] = { A11, A10, A9, A8 }; //connect to the row pinouts of the keypad

byte colPins[COLS] = { A5, A4, A3};//connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){

Serial.begin(9600);

servo1.attach(11);

servo2.attach(9);

servo3.attach(7);

servo4.attach(5);

servo5.attach(3);

pinMode(3, OUTPUT);

pinMode(5, OUTPUT);

pinMode(7, OUTPUT);

pinMode(9, OUTPUT);

pinMode(11, OUTPUT); // Sets the digital pin as output.

keypad.addEventListener(keypadEvent); // Add an event listener for this keypad

pwm.begin();

pwm.setPWMFreq(60);

}

void setServoPulse(uint8_t n, double pulse) {

double pulselength;

pulselength = 1000000; // 1,000,000 us per second

pulselength /= 60; // 60 Hz

Serial.print(pulselength); Serial.println(" us per period");

pulselength /= 4096; // 12 bits of resolution

Serial.print(pulselength); Serial.println(" us per bit");

pulse *= 1000;

pulse /= pulselength;

Serial.println(pulse);

pwm.setPWM(n, 0, pulse);

}

void loop(){

char key = keypad.getKey();

if (key) {

Serial.println(key);

}

if( key != 0) { //jika key tidak 0,

}

if (key) {

Serial.println(key);

}

}

// Taking care of some special events.

void keypadEvent(KeypadEvent key){

switch (keypad.getState()){

case PRESSED:

if (key == '0') {

clock = map(degrees, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

clock = map(degrees1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(2, 0, clock);

pwm.setPWM(3, 0, clock);

clock = map(degrees2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(6, 0, clock);

clock = map(degrees3, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(8, 0, clock);

delay(1600);

digitalWrite(3,HIGH);

digitalWrite(5,HIGH);

digitalWrite(7,HIGH);

digitalWrite(9,HIGH);

digitalWrite(11,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{ // in steps of 1 degree

servo1.write(pos);

servo2.write(pos);

servo3.write(pos);

servo4.write(pos);

servo5.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '1') {

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(3,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{ // in steps of 1 degree

servo1.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '2') {

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(5,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{ // in steps of 1 degree

servo2.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '3') {

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

digitalWrite(7,HIGH);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

{

servo3.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '4') {

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(3,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{ // in steps of 1 degree

servo1.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '5') {

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(5,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{

servo2.write(pos);

// tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '6') {

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(7,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{ // in steps of 1 degree

servo3.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '7') {

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(9,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{

servo4.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

else if (key == '8') {

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

digitalWrite(11,HIGH);

for(pos = 180; pos >= 0; pos -= 1)

{

servo5.write(pos); // tell servo to go to position in variable 'pos'

delay(200);

}

}

else if (key == '*') {

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos); // in steps of 1 degree

// in steps of 1 degree

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

// tell servo to go to position in variable 'pos'

delay(200);

digitalWrite(7,HIGH);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos); // in steps of 1 degree

// in steps of 1 degree

delay(200);

digitalWrite(3,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

// tell servo to go to position in variable 'pos'

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos); // in steps of 1 degree

// in steps of 1 degree

delay(200);

digitalWrite(7,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

digitalWrite(9,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo4.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo4.write(pos

delay(200);

digitalWrite(11,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo5.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo5.write(pos);

delay(1000);

digitalWrite(11,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo5.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo5.write(pos

delay(200);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo4.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo4.write(pos);

delay(200);

digitalWrite(7,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

delay(200);

digitalWrite(3,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos

delay(200);

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos

delay(200);

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

delay(600);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

}

/*===================================================================

========================*/

else if (key == '#') {

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos

delay(200);

digitalWrite(7,HIGH);

// mi ===========================================================

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// fa ===========================================================

digitalWrite(3,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos

delay(200);

//sol ===========================================================

digitalWrite(5,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos

delay(200);

//fa ============================================================

digitalWrite(3,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

//mi ============================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos

// re ===========================================================

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

delay(200);

// do ===========================================================

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos

delay(200);

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

// re ===========================================================

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos

delay(200);

// mi ===========================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// re ===========================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos

//delay =======================================================

delay(600);

//delay =======================================================

// mi ===========================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// fa ===========================================================

digitalWrite(3,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

//sol ===========================================================

digitalWrite(5,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

delay(200);

digitalWrite(5,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

delay(200);

//fa ============================================================

digitalWrite(3,HIGH);

clock = map(degreesx2, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

//mi ============================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// re ===========================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// do ===========================================================

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

digitalWrite(3,HIGH);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

// re ===========================================================

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// mi ===========================================================

digitalWrite(7,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

delay(600);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// re ===========================================================

digitalWrite(5,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo3.write(pos);

for(pos = 180; pos >= 0; pos -= 1)

servo3.write(pos);

delay(200);

// do ===========================================================

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo2.write(pos);

delay(400);

for(pos = 180; pos >= 0; pos -= 1)

servo2.write(pos);

delay(200);

digitalWrite(3,HIGH);

clock = map(degreesx1, 0, 180, SERVOMIN, SERVOMAX);

pwm.setPWM(0, 0, clock);

for(pos = 0; pos <= 180; pos += 1)

servo1.write(pos);

delay(200);

for(pos = 180; pos >= 0; pos -= 1)

servo1.write(pos);

delay(200);

}

}

}

Rangkaian keseluruhan

Rangkaian komunikasi keypad dengan mikrokontroler

Data Sheet Komponen

Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface

DESCRIPTION

You want to make a cool robot, maybe a hexapod walker, or maybe just a piece of art with a lot of moving parts. Or maybe you want to drive a lot of LEDs with precise PWM output. Then you realize that your microcontroller has a limited number of PWM outputs! What now? You could give up OR you could just get this handy PWM and Servo driver breakout.

When we saw this chip, we quickly realized what an excellent add-on this would be.Using only two pins, control 16 free-running PWM outputs!You can even chain up 62 breakouts to control up to 992 PWM outputs (which we would really like to see since it would be glorious)

 It's an i2c-controlled PWM driver with a built in clock. That means that, unlike the TLC5940 family, you do not need to continuously send it signal tying up your microcontroller, its completely free running!

 It is 5V compliant, which means you can control it from a 3.3V microcontroller and still safely drive up to 6V outputs (this is good for when you want to control white or blue LEDs with 3.4+ forward voltages)

 6 address select pins so you can wire up to 62 of these on a single i2c bus, a total of 992 outputs - that's a lot of servos or LEDs  Adjustable frequency PWM up to about 1.6 KHz

 12-bit resolution for each output - for servos, that means about 4us resolution at 60Hz update rate  Configurable push-pull or open-drain output

 Output enable pin to quickly disable all the outputs

We wrapped up this lovely chip into a breakout board with a couple nice extras

 Terminal block for power input (or you can use the 0.1" breakouts on the side)  Reverse polarity protection on the terminal block input

 Green power-good LED

 3 pin connectors in groups of 4 so you can plug in 16 servos at once (Servo plugs areslightlywider than 0.1" so you can only stack 4 next to each other on 0.1" header

 "Chain-able" design

 A spot to place a big capacitor on the V+ line (in case you need it)

 220 ohm series resistors on all the output lines to protect them, and to make driving LEDs trivial  Solder jumpers for the 6 address select pins

Dokumen terkait