dominoFiber     domiRobot     Forum


Projeler - DAGU 6WD IR Kontrol

DAGU 6WD IR Kontrol
Bu projemizde arduino, SparkFun Monster Moto Shield ve Kızılötesi (Infared-IR) Alıcı Modülü kullanarak 2 motorun yön ve hız kontrolünü yapacağız.

Amaç
Amacımız kızılötesi alıcı verici modül ile 2 adet dc motorun yön ve hız kontrolünü yapabilme becerisini kazanmak.

Seviye
Orta seviye

<a href="http://www.youtube.com/watch?v=VhbKT00WULg" target="_blank">http://www.youtube.com/watch?v=VhbKT00WULg</a>
Video 1: Proje videosu

Teknik özellikler ve Uzaktan Kumanda Aletinin Kullanımı
Fotoğraf 1'de görülen uzaktan kumanda aletinin ileri, geri, sağ ve sol yön butonları ile motorlara yön verilir.

1 nolu butona basılmasıyla motorlar yavaş devirde (1. Vites), 2 nolu butona basılmasıyla orta hızda (2. Vites), 3 nolu butona basılmasıyla da maksimum devirde (3. Vites) hareket ederler. Motorların birinci vitesteki varsayılan default hızı devre üzerindeki potansiyometre ile ayarlanabilir.
 
Projemizde DAGU 6WD Arazi Robotu Platformu kullanacağız. Siz daha farklı platformlar ya da motorlar kullanabilirsiniz. Kullandığımız platformda üçerli iki grup halinde 6 adet dc motor bulunmaktadır. Her bir gruptaki motorlar birbirine paralel bağlıdır

Fotoğraf 1 : Uzaktan Kumanda Vericisi

Şema 1: Arduino bağlantı şeması

Malzeme listesi

Dagu 6WD arduino kodu
Kod: [Seç]
#define BRAKEVCC 0
#define CW   1
#define CCW  2
#define BRAKEGND 3
#define CS_THRESHOLD 100

int inApin[2] = {7, 4};  // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)

int statpin = 13;
int IR_negatif_pin = 12;
int IR_pozitif_pin = 11;
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;

int hizPin = A2; // hiz potu A2 pinine baglanir
int hizValue = 0; // hizValue isminde değişken tanımlandı
int hiz=0; // hiz isminde değişken tanımlandı

void setup()
{
  Serial.begin(9600);
  pinMode(statpin, OUTPUT);
  pinMode(IR_negatif_pin, OUTPUT);
  pinMode(IR_pozitif_pin, OUTPUT);
  digitalWrite(IR_negatif_pin, LOW);
  digitalWrite(IR_pozitif_pin, HIGH);

  for (int i=0; i<2; i++)
  {
    pinMode(inApin[i], OUTPUT);
    pinMode(inBpin[i], OUTPUT);
    pinMode(pwmpin[i], OUTPUT);
  }

  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
   irrecv.enableIRIn();

}

void loop()
{
    if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);   

hizValue = analogRead(hizPin);
hiz= map(hizValue, 0, 1023, 50, 255);

birinci_vites ();
if(results.value == 0xFF9867) {ikinci_vites ();}
if(results.value == 0xFFB04F) {ucuncu_vites ();}
 

}



void birinci_vites()
{


if(results.value == 0xFF629D) {ileri_git ();}
if(results.value == 0xFF02FD) {dur ();}
if(results.value == 0xFFA857) {geri_git ();}
if(results.value == 0xFFC23D) {sag_don ();}
if(results.value == 0xFF22DD) {sol_don ();}
if(results.value == 0xFF9867) {ileri_git2 ();}
if(results.value == 0xFFB04F) {ileri_git3 ();}
if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
birinci_vites ();

}

void motorOff(int motor)
{
  // Initialize braked
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
  analogWrite(pwmpin[motor], 0);
}


void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
  if (motor <= 1)
  {
    if (direct <=4)
    {
      // Set inA[motor]
      if (direct <=1)
        digitalWrite(inApin[motor], HIGH);
      else
        digitalWrite(inApin[motor], LOW);

      // Set inB[motor]
      if ((direct==0)||(direct==2))
        digitalWrite(inBpin[motor], HIGH);
      else
        digitalWrite(inBpin[motor], LOW);

      analogWrite(pwmpin[motor], pwm);
    }
  }
}

void translateIR() // takes action based on IR code received
{
  switch(results.value)
  {

  case 0xFF629D: 
    Serial.println(" ILERI            ");
    break;

  case 0xFFA857: 
    Serial.println(" GERI         ");
    break;

 case 0xFFC23D: 
    Serial.println(" SAG     ");
    break;
   
  case 0xFF22DD: 
    Serial.println(" SOL           ");
    break;

  case 0xFF02FD: 
    Serial.println(" DUR          ");
    break;

  case 0xFF6897: 
    Serial.println(" 1              ");
    break;

  case 0xFF9867: 
    Serial.println(" 2           ");
    break;

  case 0xFFB04F: 
    Serial.println(" 3           ");
    break;

  case 0xFF30CF: 
    Serial.println(" 4              ");
    break;

  case 0xFF18E7: 
    Serial.println(" 5              ");
    break;

  case 0xFF7A85: 
    Serial.println(" 6              ");
    break;

  case 0xFF10EF: 
    Serial.println(" 7              ");
    break;

  case 0xFF38C7: 
    Serial.println(" 8              ");
    break;

  case 0xFF5AA5: 
    Serial.println(" 9              ");
    break;

  case 0xFF42BD: 
    Serial.println(" *              ");
    break;

  case 0xFF4AB5: 
    Serial.println(" 0              ");
    break;

  case 0xFF52AD: 
    Serial.println(" #             ");
    break;

  default:
    Serial.println(" other button   ");

  }
} //END translateIR

void ileri_git()
{
  motorGo(0, CW, hiz);
  delay(300);
  motorGo(1, CCW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void dur()
{
  motorGo(0, CW, 0);
  motorGo(1, CW, 0);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void geri_git()
{
  motorGo(0, CCW, hiz);
  delay(300);
  motorGo(1, CW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void sol_don()
{
  motorGo(0, CCW, hiz);
  delay(300);
  motorGo(1, CCW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void sag_don()
{
  motorGo(0, CW, hiz);
  delay(300);
  motorGo(1, CW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}


void ikinci_vites()
{


if(results.value == 0xFF629D) {ileri_git2 ();}
if(results.value == 0xFFA857) {geri_git2 ();}
if(results.value == 0xFF02FD) {dur2 ();}
if(results.value == 0xFFC23D) {sag_don2 ();}
if(results.value == 0xFF22DD) {sol_don2 ();}
if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
if(results.value == 0xFF6897) {ileri_git ();}
if(results.value == 0xFFB04F) {ileri_git3 ();}
ikinci_vites ();

}

void ileri_git2()
{
  motorGo(0, CW, 100);
  delay(500);
  motorGo(1, CCW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void geri_git2()
{
  motorGo(0, CCW, 100);
  delay(500);
  motorGo(1, CW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void dur2()
{
  motorGo(0, CW, 0);
  motorGo(1, CW, 0);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void sol_don2()
{
  motorGo(0, CCW, 100);
  delay(500);
  motorGo(1, CCW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void sag_don2()
{
  motorGo(0, CW, 100);
  delay(500);
  motorGo(1, CW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}









void ucuncu_vites()
{


if(results.value == 0xFF629D) {ileri_git3 ();}
if(results.value == 0xFFA857) {geri_git3 ();}
if(results.value == 0xFF02FD) {dur3 ();}
if(results.value == 0xFFC23D) {sag_don3 ();}
if(results.value == 0xFF22DD) {sol_don3 ();}
if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
if(results.value == 0xFF6897) {ileri_git ();}
if(results.value == 0xFF9867) {ileri_git2 ();}
ucuncu_vites ();

}

void ileri_git3()
{
  motorGo(0, CW, 255);
  delay(500);
  motorGo(1, CCW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void geri_git3()
{
  motorGo(0, CCW, 255);
  delay(500);
  motorGo(1, CW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void dur3()
{
  motorGo(0, CW, 0);
  motorGo(1, CW, 0);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void sol_don3()
{
  motorGo(0, CCW, 255);
  delay(500);
  motorGo(1, CCW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void sag_don3()
{
  motorGo(0, CW, 255);
  delay(500);
  motorGo(1, CW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

Download
İhtiyaç duyulması halinde projeye ait dosyaları buraya tıklayıp indirebilirsiniz.




Motor sürücü ve IR alıcı verici satın al

  • Kızılötesi alıcı verici<br />modül satın alKızılötesi alıcı verici<br />modül satın alKızılötesi alıcı verici<br />modül satın al
  • Motor sürücü<br />modül satın alMotor sürücü<br />modül satın alMotor sürücü<br />modül satın al