Jumat, 02 Mei 2014

Tank Arduino (Proyek Akhir II 3231 Interaksi Manusia dan Komputer dengan Antarmuka) [Explanation Part]

"God is Bigger Than Any Obstacles"
Para pembaca setia sekalian, kali ini saya akan memberikan penjelasan lengkap terkait Tank Arduino yang sebelumnya telah saya paparkan melalui slide presentasi pada postingan sebelumnya. Tank Arduino merupakan tank yang dikendalikan oleh mikrokontroller, yaitu Arduino. Dalam hal ini, terdapat dua Arduino yang digunakan, yaitu Arduino untuk remote controller (transmitter) dan Arduino untuk Tank (receiver). Arduino yang digunakan untuk percobaan kali ini adalah Arduino Uno, baik untuk remote controller (transmitter) maupun untuk Tank (receiver). Antara remote controller dengan Tank, terjadi komunikasi satu arah, di mana Tank menerima sinyal dari remote controller. Tank sendiri dapat digunakan sebagai mainan maupun sebagai alat simulasi. 
Ilustrasi Tank

Sistem Tank Arduino sendiri memiliki spesifikasi sebagai berikut.
  1. Input (Masukan). Masukan yang dibutuhkan sistem adalah switch untuk memberikan respon kepada Tank.
  2. Proses. Proses yang terjadi pada sistem Tank Arduino adalah transmisi sinyal dari remote controller ke Tank.
  3. Output (Keluaran). Keluaran dari sistem Tank Arduino adalah gerak dari motor yang menyebabkan Tank dapat bergerak.
Anda tentunya sudah tidak sabar untuk membuat alat ini kan? Mari kita lihat bersama-sama blok diagram dari perangkat keras (hardware) yang digunakan untuk membuat Tank Arduino. Secara umum, ada dua sistem dari perangkat keras (hardware) yang terdapat pada Tank Arduino, yaitu transmitter dan receiver.


Pada bagian transmitter, sinyal dari switch akan diproses oleh modul radio untuk dikirimkan ke Tank.

Pada bagian transmitter, terdapat beberapa alat dan bahan yang digunakan untuk membuat transmitter itu sendiri, yaitu:
  1. 1 buah mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 2 buah resistor 10K ohm
  3. 2 buah switch 
  4. 1 set modul radio nRF24L01 2.4GHz Radio/Wireless Transceivers
  5. 1 set breadboard atau PCB
  6. Kabel jumper secukupnya
Setelah Anda mendapatkan semua komponen di atas, Anda dapat memulai membuat rangkaian transmitter. Gambar di bawah ini menunjukkan rangkaian transmitter atau remote control
Courtesy of Amal Syahreza
Pada bagian receiver, sinyal yang berasal dari transmitter akan diterima oleh radio dan diteruskan untuk menggerakan motor.


Pada receiver, terdapat beberapa alat dan bahan yang digunakan untuk membuat receiver (Tank) itu sendiri, yaitu:
  1. 1 buah mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 1 set wheel + track (untuk ban dari Tank)
  3. 1 set double gearbox (untuk motor/mesin Tank)
  4. 1 set universal plate (untuk chassis Tank)
  5. 2 buah IRF520/540 MOSFET
  6. 2 buah dioda IN4007
  7. 1 set modul radio nRF24L01 2.4GHz Radio/Wireless Transceivers
  8. 1 set breadboard atau PCB
  9. Kabel jumper secukupnya
Setelah Anda mendapatkan semua komponen di atas, Anda dapat memulai membuat rangkaian receiver. Gambar di bawah ini menunjukkan rangkaian receiver atau Tank.

Courtesy of Amal Syahreza
Untuk membuat tampilan produk lebih bagus dan lebih baik, Anda dapat menggunakan berbagai macam bahan pembungkus seperti karton, dus, triplek, ataupun bahan-bahan lain sekreatf Anda. 

Setelah semua rangkaian dibuat, Anda dapat mulai membuat kode program untuk mengoperasikan mikrokontroller, baik untuk remote controller maupun Tank. Untuk membuat maupun menjalankan kode program, Anda membutuhkan sebuah PC ataupun laptop yang telah terinstall Arduino IDE. Apabila di PC ataupun laptop Anda telah tersedia Arduino IDE, buka program Arduino IDE dan masukkan kode program di bawah ini. Kemudian klik verify pada program Arduino IDE Anda. 

Source code untuk Remote Control

// Source Code untuk Transmitter (Remote Control)
// Courtesy of http://forum.arduino.cc/index.php?topic=138663.0

//Library SPI dan RF 24
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

//Pendefinisan Variabel
int msg[2]; //Array Pesan
RF24 radio(9,10); //Pin untuk Radio
const uint64_t pipe = 0xE8E8F0F0E1LL; //Pipe Radio
int SW1 = 7; //Switch 1
int SW2 = 4; //Switch 2
int sentSignal=0; //Sinyal kirim
 
void setup(void){
  Serial.begin(9600); //Setup Serial
  radio.begin(); //Setup Radio
  radio.openWritingPipe(pipe);
}
 
void loop(void){
//Inisialisasi variabel
  msg[0]=0;
  msg[1]=0;
  sentSignal=0;
  //Pembacaan Switch 1
  if (digitalRead(SW1) == HIGH) {
    msg[0] = 111;
    Serial.println("SW1");
    sentSignal=1;
  }
  //Pembacaan Switch 2
  if (digitalRead(SW2) == HIGH) {
    msg[1] = 111;
    Serial.println("SW2");
    sentSignal=1;
  }
  //Pembacaan Sinyal
  if (sentSignal==1){
    radio.write(msg, 4);
  }
  Serial.println("_______");
}
Source code untuk Tank



// Source Code untuk Receiver (Tank)
// Courtesy of http://forum.arduino.cc/index.php?topic=138663.0

//Library SPI dan RF 24
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

//Pendefinisan Variabel
int msg[2]; //Array Pesan
RF24 radio(9,10); //Pin untuk Radio
const uint64_t pipe = 0xE8E8F0F0E1LL; //Pipe Radio
int Motor1 = 3; //Motor 1
int Motor2 = 5; //Motor 2

void setup(void){
  Serial.begin(9600); //Setup Serial
  radio.begin(); //Setup Radio
  radio.openReadingPipe(1,pipe);
  radio.startListening();
  pinMode(Motor1, OUTPUT); //Setup Pin untuk Motor
  pinMode(Motor2, OUTPUT);
}
 
void loop(void){
  //Pengecekan sinyal dari transmitter
  if (radio.available()){
    //Inisialisasi variabel pengecekan
    bool done = false;   
    while (!done){
      done = radio.read(msg, 4); //Baca pesan dari transmitter     
      Serial.println(msg[0]); //Salin pesan ke serial    
      Serial.println(msg[1]);
      Serial.println("__________");
      //Pembacaan pesan untuk motor 1    
      if (msg[0] == 111){
        delay(10);
        digitalWrite(Motor1, HIGH);
      } else {
        digitalWrite(Motor1, LOW);
      }
      //Pembacaan pesan untuk motor 2 
      if (msg[1] == 111){
        delay(10);
        digitalWrite(Motor2, HIGH);
      } else {
        digitalWrite(Motor2, LOW);
      }
      delay(10);
    }
  }
  else{
    Serial.println("No radio available");
  }
}


Setelah Anda melakukan verify terhadap kedua kode di atas, klik upload untuk mengunggah kode program ke dalam mikrokontroller. Unggah kode program untuk remote control ke rangkaian remote control dan unggah kode program untuk Tank ke rangkaian Tank. Anda tentunya penasaran kan terhadap cara kerja program? Gambar di bawah ini menunjukkan flowchart dari kode program.

Flowchart untuk remote control


Flowchart untuk Tank


Sekian saja postingan saya kali ini. Pada bagian selanjutnya, saya akan memaparkan masalah-masalah yang terjadi selama pembuatan Tank Arduino, hal-hal khusus yang perlu Anda perhatikan, serta cerita-cerita menarik selama pembuatan Tank Arduino ini. Dokumentasi foto dan video pun akan dipaparkan pada bagian selanjutnya dalam "Story Part".

1 komentar: