Selasa, 03 Januari 2017

Ball Bot dengan menggunakan sensor kamera pixy cam


Hallo sobat arduino Indonesia, sesuai dengan janji kemarin, hari ini saya akan share bagaimana menggunakan pixy cam untuk membuat robot pendeteksi bola dengan menggunakan sensor kamera. Bagi teman-teman yang akan ikut robot soccer di kontes robot Indonesia mungkin bisa sedikit membantu, tapi ini benar-benar masih basic lo sobat, jadi perlu beberapa improvement.

oke langsung saja sobat, yang perlu di siapkan adalah sebagai berikut



  1. Batere holder dan batere
  2. Shield driver mobo
  3. Arduino Uno
  4. Pixy cam
dan pastinya set mobile robot yang di lengkapi dengan motor DC.

Oke bentuk setelah dipasang di body atau frame



 langkah-langkah sebelum programming arduino yang perlu dilakukan adalah 
  • set pixy terlebih dahulu dengan menggunakan kabel mini usb, dan buka program pixymon
 
  •  cari object yang akan di detect, untuk kali ini kita pake bola warna biru

  • set signature 1 dengan klik warna yang akan di detect
 
  • Karena kita sekarang menggunakan i2c pada pixy cam dengan arduino maka set juga di pixymon ke configure, pilih interface, dan pilih data out port  i2c dan jangan lupa address nya di ingat-ingat, untuk kali ini saya menggunakan 0x55

  •  silahkan close program pixymon
  • sekarang kabel konfigurasi untuk i2c ke shield mobo. pixy mempunyai pin output seperti berikut ini :
 
1 : SPI MISO, UART RX, GPI00
2 : 5V
3 : SPI SCK, DAC OUT, GPI01 
4 : SPI MOSI, UART TX, GPI02
5 : I2C SCL
6 : GND
7 : SPI SS, ADC IN, GPI03
8 : GND
9 : I2C SDA
10 : GND
  • jadi untuk koneksi ke arduino i2c konfigurasinya menggunakan pin 
ARDUINO -------------------  PIXY CAM
      5V                                           pin 2
      GND                                       pin 6
      A4                                           pin 9
      A5                                           pin 5

Oke langsung saja untuk programming arduinonya bisa di ikuti sebagai berikut :

/* pixy cam Sekolahrobot.com */
/* Sekolah Robot Indonesia   */
/* Ball bot, Januari 2017 */



#include <Wire.h>
#include <PixyI2C.h>
uint16_t blocks;
int bin1 = 8;
int bin2 = 9;
int pwmb = 10;
int ain1 = 12;
int ain2 = 13;
int pwma = 11;

PixyI2C pixy(0x55); // alamat pixy i2c

void setup()
{
  Serial.begin(9600);
  Serial.print("Starting...\n");
 
  pixy.init();
  pinMode(bin1,OUTPUT);
  pinMode(bin2,OUTPUT);
  pinMode(pwmb,OUTPUT);
  pinMode(ain1,OUTPUT);
  pinMode(ain2,OUTPUT);
  pinMode(pwma,OUTPUT);
}
void loop()
{

  static int i = 0;
  int j;
  char buf[32];
  blocks = pixy.getBlocks();

  if (blocks)
  {
    i++;
    if (i%50==0)
    {
      if(pixy.blocks[j].x>200)
        {
          Serial.println("Right");
          belokkanan();
        }
       else if(pixy.blocks[j].x<60)
        {
          Serial.println("Left");
          belokkiri();
        }
        else if(pixy.blocks[j].x>=60 && pixy.blocks[j].x<=200)
        {
          Serial.println("Middle");
          maju();
        }
        else{
          Serial.println("No Object Detected");
          berhenti(); 
        }

    }
   
  }
 
}

void maju()
{
  digitalWrite(ain1,HIGH);
  digitalWrite(ain2,LOW);
  analogWrite(pwma,100);
  digitalWrite(bin1,HIGH);
  digitalWrite(bin2,LOW);
  analogWrite(pwmb,100);
}
void mundur(){
  digitalWrite(ain1,LOW);
  digitalWrite(ain2,HIGH);
  analogWrite(pwma,100);
  digitalWrite(bin1,LOW);
  digitalWrite(bin2,HIGH);
  analogWrite(pwmb,100);
}

void belokkanan(){
  digitalWrite(ain1,HIGH);
  digitalWrite(ain2,LOW);
  analogWrite(pwma,100);
  digitalWrite(bin1,LOW);
  digitalWrite(bin2,LOW);
  analogWrite(pwmb,100);
}

void belokkiri(){
  digitalWrite(ain1,LOW);
  digitalWrite(ain2,LOW);
  analogWrite (pwma,100);
  digitalWrite(bin1,HIGH);
  digitalWrite(bin2,LOW);
  analogWrite(pwmb,100);
 
 
}

void berhenti(){
  digitalWrite(ain1,LOW);
  digitalWrite(ain2,LOW);
  analogWrite (pwma,0);
  digitalWrite(bin1,LOW);
  digitalWrite(bin2,LOW);
  analogWrite(pwmb,0);
 
 
}