Rock Paper Scissors Game with Servo Motor 🗿📃✂️ 🎮
Perkenalan
RoboKarsa yakin kalau teman-teman semua pernah tahu atau paling tidak pernah bermain permainan Batu Kertas Gunting dengan temannya.
Namun bagaimana kalau teman kita sedang tidak ada ketika kita ingin bermain Batu Kertas Gunting?
Kalau begitu, mari kita jadikan robot sebagai lawan kita untuk bermain Batu Kertas Gunting.
Robot ini akan menggunakan Servo Motor untuk menggerakkan tangan nya ketika akan mengeluarkan jurus. Entah itu akan mengeluarkan Batu, Kertas, atau Gunting untuk melawan jurus yang kita keluarkan.
Kemudian kita akan menggunakan sensor Jarak agar robotnya bisa mendeteksi keberadaan tangan kita ketika sudah mengeluarkan jurus kita.
Tanpa bicara panjang lebar lagi, mari kita langsung saja membuatnya.
Alat dan Komponen yang diperlukan
- Alat 🛠
- Komponen Yang Dibutuhkan 🔑
- Obeng Plus
- 1 x Arduino Nano
- 1 x Kabel USB Arduino Nano
- 1 x Komputer/Laptop
- 3 x Servo
- 3 X Lengan Robot
- 1 x Sensor Jarak Ultrasonik
- 1 x Kotak Baterai 2 Slot
- 2 x Baterai
- Baut seperlunya
- Kabel Jumper seperlunya
Petunjuk Merakit
◼️ Merakit Komponen Utama
▪️ Memasang Kotak Baterai
Siapkan komponen pertama, yakni rangka utama.
Kemudian siapkan kotak baterai seperti ditunjukkan oleh gambar di bawah.
Perhatikan bahwa terdapat dua buah lubang pada kotak baterai seperti yang ditunjukkan oleh tanda panah putih nomor satu dan dua.
Lubang pada kotak baterai tersebut sejajar dengan lubang pada rangka utama seperti yang ditunjukkan oleh tanda panah hitam nomor satu dan dua.
Lubang tersebut akan dijadikan sebagai lubang untuk memasang baut. Contoh baut yang telah terpasang ditunjukkan seperti pada gambar di bawah ini
Baik, sekarang kotak baterai telah terpasang, hasilnya akan seperti pada gambar di bawah ini.
Selanjutnya kita akan memasang baterai pada kotak baterai.
▪️ Memasang Baterai
Setelah kotak baterai terpasang, kita akan memasang baterai. Siapkan dua buah baterai seperti pada gambar di bawah ini.
Masukkan baterai ke kotak baterai. Perhatikan, kutub negatif baterai yang ditandai oleh tanda negatif ➖, masuk terlebih dahulu ke pegas pada kotak baterai.
Hasilnya akan seperti pada gambar di bawah ini.
Selanjutnya kita akan memasang baterai berikutnya.
Sama seperti langkah 7 di atas sebelumnya, masukkan baterai ke kotak baterai dengan kutub negatif baterai yang ditandai oleh tanda negatif ➖, masuk terlebih dahulu ke pegas pada kotak baterai.
Hasilnya akan seperti pada gambar di bawah ini.
Setelah kedua baterai terpasang pada kotak baterai, hasilnya akan menjadi seperti di bawah ini.
▪️ Memasang Arduino Nano
Selanjutnya kita akan memasang Arduino Nano ke rangka utama. Siapkan 4 buah spacer kertas dan Arduino Nano.
Bukalah baut pada keempat spacer kertas tersebut, kemudian pasangkan ke lubang baut pada Arduino Nano.
Setelah keempat spacer kertas terpasang pada Arduino Nano, akan menjadi seperti ini.
Setelah keempat spacer kertas terpasang pada Arduino Nano, selanjutnya kita akan memasang Arduino Nano ke rangka utama. Namun sebelumnya, perhatikan terlebih dahulu lubang-lubang yang ditunjukkan oleh tanda panah putih pada gambar di bawah ini.
Kita akan menancapkan keempat kaki spacer kertas pada keempat lubang tersebut.
Tancapkan kaki spacer bagian depan Arduino Nano pada lubang. Setelah sejajar dengan lubang, tekan hingga masuk sepenuhnya.
Lakukan hal yang sama untuk dua kaki yang tersisa di belakangnya.
Apabila Arduino Nano telah terpasang pada rangka utama, maka hasilnya akan seperti pada gambar di bawah ini
▪️ Memasang Sensor Jarak Ultrasonik
Selanjutnya kita akan memasang sensor jarak ultrasonik ke rangka utama. Siapkan sensor jarak ultrasonik dan dudukannya seperti ditunjuk pada gambar di bawah ini.
Kemudian pasangkan sensor jarak ultrasonik ke dudukannya seperti pada gambar di bawah ini.
Setelah sensor jarak ultrasonik terpasang pada dudukannya, kita akan memasangkannya pada rangka utama seperti pada gambar di bawah ini
Maka hasil akhir setelah sensor jarak ultrasonik terpasang akan seperti pada gambar di bawah ini.
▪️ Memasang Lengan Robot ke Servo
Selanjutnya, kita akan memasang servo untuk menggerakkan tangan robot. Siapkan tiga buah servo motor dan tiga buah tangan robot seperti yang ditunjukkan oleh gambar di bawah.
Kita akan memasang lengan robot ke servo. Namun sebelumnya, bukalah terlebih dahulu baut yang terpasang pada servo seperti ditunjukkan pada gambar di bawah. Harap jaga baut kecilnya dengan baik ya, teman-teman. Jangan sampai hi
Kemudian pasangkan lengan robot ke servo seperti pada gambar di bawah.
Sebelum lanjut ke langkah berikutnya, pastikan titik tengah roda gigi servo seperti yang ditunjuk oleh panah hitam sudah berada di tengah-tengah servo seperti pada gambar di bawah ini. Jika titik tengah roda gigi servo belum berada di tengah-tengah servo, putarlah secara manual dengan menggunakan lengan robot.
Setelah lengan robot terpasang, kita kencangkan dengan memasang baut yang telah kita lepas sebelumnya pada langkah 16 tadi pada lubang yang ditunjuk oleh tanda panah.
Pasangkan lengan robot ke dua servo yang tersisa, sehingga kita mendapat tiga buah lengan robot seperti pada gambar di bawah ini.
▪️ Memasang Lengan Robot ke Rangka Utama
Setelah ketiga lengan robot sudah siap, kita akan memasang ketiga nya ke rangka utama. Kita akan mulai dari lengan kiri terlebih dahulu. Pasang dengan posisi seperti pada gambar di bawah ini.
Kemudian kita akan memasang lengan tengah. Pasang dengan posisi seperti pada gambar di bawah ini.
Terakhir, kita akan memasang lengan kanan. Pasanglah dengan posisi seperti pada gambar di bawah ini.
Maka hasil akhir semua komponen terpasang pada rangka utama akan diperlihatkan seperti pada gambar di bawah ini.
◼️ Wiring Diagram
Jika sudah selesai memasang semua komponen ke rangka utama, selanjutnya kita akan merangkai dan menghubungkan komponen tersebut dengan kabel jumper.
▪️ Diagram Gambar
Teman-teman bisa gunakan gambar Wiring Diagram di bawah ini sebagai petunjuk untuk merangkai kabel-kabelnya.
▪️ Diagram Tabel
Apabila titik ujung kabel pada gambar di atas kurang jelas, teman-teman bisa gunakan tabel di bawah ini.
Modul Servo | Ultrasonic Distance Sensor | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Mengetik Program
Kemudian ketik program di bawah ini. Setelah selesai mengetik, jalankan proses Verify. Setelah proses verify dan compiling selesai, upload programnya ke Arduino Nano.
#include<Servo.h>
#include <Ultrasonic.h>
Ultrasonic ultrasonic(4, 5);
int distance;
int number=0;
int randomdelay=0;
Servo servo1;
Servo servo2;
Servo servo3;
// Variables will change:
int moveState = 0; // current state of the move
int lastMoveState = 0; // previous state of the move
void setup() {
// initialize the LED as an output:
pinMode(13, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
servo1.attach(9);
servo2.attach(10);
servo3.attach(11);
//initialize starting servo sequence
servo1.write(0);
servo2.write(0);
servo3.write(0);
delay(300);
servo1.write(90);
delay(300);
servo2.write(90);
delay(300);
servo3.write(90);
delay(500);
servo3.write(0);
delay(150);
servo2.write(0);
delay(150);
servo1.write(0);
delay(150);
servo1.write(90);
servo2.write(90);
servo3.write(90);
delay(300);
servo1.write(0);
servo2.write(0);
servo3.write(0);
}
void loop() {
delay(100); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
Serial.print("Jarak: ");
distance = ultrasonic.read();
Serial.print(distance);
Serial.println("cm");
if (distance<=15){
moveState=LOW;
}
else if(distance>=15){
moveState=HIGH;
}
// compare the moveState to its previous state
if (moveState != lastMoveState) {
// if the state has changed, do the robot move
if (moveState == HIGH) {
digitalWrite(13,LOW);
servo1.write(0);
servo2.write(0);
servo3.write(0);
} else {
number = random(3);
Serial.println(number);
digitalWrite(13,HIGH);
if(number==0)
{
servo1.write(0);
servo2.write(90);
servo3.write(0);
delay(2000);
}
else if(number==1)
{
servo1.write(0);
servo2.write(0);
servo3.write(90);
delay(2000);
}
else if(number==2)
{
servo1.write(90);
servo2.write(0);
servo3.write(0);
delay(2000);
}
}
// Delay a little bit to avoid bouncing
delay(50);
}
// save the current state as the last state, for next time through the loop
lastMoveState = moveState;
}