L298N ve RC Alıcı için Kod

silver525

Üye
Katılım
23 Nis 2022
Mesajlar
4
Puanları
1
Yaş
33
Herkese merhaba. 3 boyutlu yazıcıda RC ekskavatör yapıyorum. Paletler için 2 adet DC motorun hızını ve yönünü 2 farklı kanaldan kontrol etmek istiyorum. Aşağıdaki kodu buldum fakat bu 1 adet DC motoru çalıştırıyor. Kodlama hakkında bilgim yok, bu kodu 2 DC motoru ayrı ayrı 2 kanaldan kontrol edebilmek için nasıl güncellemem gerekir? Yardımınıza ihtiyacım var, şimdiden teşekkür ederim.

Kod:
int in1 = 2;
int in2 = 3;
int enable1 = 5;  // pin with ~ symbol

int channel_2 = 6;  // pin with ~ symbol

void setup()
{
  pinMode(channel_2, INPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(enable1, OUTPUT);
  Serial.begin(9600);
}

void loop() {
 
  int pwm = 0;
  int value = pulseIn(channel_2, HIGH, 25000);
 
  if(value==0)
  {
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      analogWrite(enable1, 0);
  }
 
  else if(value > 1530)
  {
      pwm = map(value, 1530, 2000, 0, 255);
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      analogWrite(enable1, pwm);
  }
 
  else if(value < 1460)
  {
      pwm = map(value, 1460, 1000, 0, 255);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      analogWrite(enable1, pwm);
  }
 
  else
  {
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      analogWrite(enable1, 0);
  }
 
  delay(10);
}
 
Orada 2 motor birden nasıl sürüleceği anlatılmış. Siz kendi projenize göre oradaki kodlamadan faydalanarak kodlamanızı yapacaksınız.
 
Elimden geldiğince kod düzenlemeye çalıştım, aşağıdaki kodu bulup kendime göre değiştirdim. Bu kod 2 motoru ayrı ayrı kontrol etmemi sağlıyor ancak şimdiki sıkıntı; 2 motoru aynı anda çalıştırmak istediğimde önce 1. motora hemen ardından 2. motora güç vermem gerekiyor. Yani önce 2. motora sonra 1. motora güç verdiğimde 1. motor çalışmıyor, sadece 2. motor çalışmaya devam ediyor.
Böyle bir sıralama neden olur, nasıl engellerim? 2 motoru da tamamen birbirinden bağımsız, aynı anda ve ayrı 2 kanaldan kontrol etmek istiyorum.

Kod:
//motor pinleri
#define MotorL1 9
#define MotorL2 10
#define MotorLE 6

#define MotorR1 7
#define MotorR2 8
#define MotorRE 5
//alıcıdan arduinoya aldığımız kanallar
const int ch1=A1; 
const int ch2=A2;
const int ch6=A4;

//gerekli değişkenleri tanımladık
int leddeger; 
int ilerideger, motorileri, motorgeri; 
int donusdeger, motorsag, motorsol; 


void setup()
{
 
  Serial.begin(9600);
  //kanalları tanımladık
  pinMode(ch1,INPUT);
  pinMode(ch2,INPUT);
  pinMode(ch6,INPUT);
  pinMode(2,OUTPUT);

}


void loop()
{
  //değerleri pulsein komutu ile okuyup değişkenlere atadık
  leddeger = pulseIn (ch6,HIGH);
  donusdeger = pulseIn (ch1,HIGH);
  ilerideger = pulseIn (ch2,HIGH);
  motorileri=map(ilerideger,1920,1080,0,255);
  motorgeri=map(ilerideger,1080,1920,0,255);
  motorsag=map(donusdeger,1080,1920,0,255);
  motorsol=map(donusdeger,1920,1080,0,255);
  if (leddeger > 1300) {digitalWrite(2,HIGH);}
  else digitalWrite(2,LOW);

  if (ilerideger > 1550){ geri(motorgeri);}
  else if (ilerideger < 1450){ ileri(motorileri);}
  else if (donusdeger < 1450) {yerindesol(motorsol);}
  else if (donusdeger > 1550) {yerindesag(motorsag);} 
  else dur();

}

void ileri(int ilerigeri){  // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.


  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
  analogWrite(MotorRE, ilerigeri); // Sağ motorun hızı
 
}
void geri(int ilerigeri){ // Robotun geri hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif
  digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif
  analogWrite(MotorRE, ilerigeri); // Sağ motorun hızı

}
void yerindesag(int sag){ // Robotun yerinde sağa dönme hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi pasif
  analogWrite(MotorLE, sag); // Sol motorun hızı
 
}
void yerindesol(int sol){ // Robotun yerinde sola dönme hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi pasif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi aktif
  analogWrite(MotorLE, sol); // Sol motorun hızı
 
}

void dur(){ // Robotun durma hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, HIGH);
  digitalWrite(MotorR2, LOW);
  digitalWrite(MotorRE, LOW);

  digitalWrite(MotorL1, HIGH);
  digitalWrite(MotorL2, LOW);
  digitalWrite(MotorLE, LOW);
 
}
 
Yazdığınız fonksiyonların içerisinde her iki motora da yol ver komutu mevcut değil.
 
Şunları
Kod:
  motorileri=map(ilerideger,1920,1080,0,255);
  motorgeri=map(ilerideger,1080,1920,0,255);
  motorsag=map(donusdeger,1080,1920,0,255);
  motorsol=map(donusdeger,1920,1080,0,255);
  if (leddeger > 1300) {digitalWrite(2,HIGH);}
  else digitalWrite(2,LOW);

  if (ilerideger > 1550){ geri(motorgeri);}
  else if (ilerideger < 1450){ ileri(motorileri);}
  else if (donusdeger < 1450) {yerindesol(motorsol);}
  else if (donusdeger > 1550) {yerindesag(motorsag);}
  else dur();

Şunlarla değiştirip deneyin. Fakat yazdığınız kodlarda dönüşlerde problem olması muhtemel.

Kod:
  motorileri=map(ilerideger,1920,1079,0,255); 
  motorgeri=map(ilerideger,1080,1919,0,255);
 
  motorsag=map(donusdeger,1080,1919,0,255);
  motorsol=map(donusdeger,1920,1079,0,255); 
 
  if (leddeger > 1300) {digitalWrite(2,HIGH);}
  else digitalWrite(2,LOW);

  if (ilerideger > 1550){ geri(motorgeri);}
  else if (donusdeger > 1550) {yerindesag(motorsag);}
 
  if (ilerideger < 1450){ ileri(motorileri);} 
  else if (donusdeger < 1450) {yerindesol(motorsol);}
  
  else dur();
 

Forum istatistikleri

Konular
127,969
Mesajlar
913,975
Kullanıcılar
449,614
Son üye
Canipk

Yeni konular

Geri
Üst