Arduino kod Yardım

oner86

Üye
Katılım
18 Mar 2024
Mesajlar
7
Puanları
1
Yaş
38
Merhaba joystiği ve beyni arızalı bir tekerlekli sandalyeyi uzaktan kumanda ile hareket ettirmeye çalışıyorum.
Kullandığım parçalar ; 2 adet 250w 24v 13,4 ah dc fırçalı motor
2 adet BTS7960b motor sürücü kartı
2 adet 24v 24 ah jel akü
1 Flysky fs-i6x kumanda ve FS-IA6B algılayıcı
1 arduino uno
kullandığım arduino pinler
  • Sağ Motorun RPWM pini: Arduino'nun 9. pinine
  • Sol Motorun LPWM pini: Arduino'nun 10. pinine
  • Her iki BTS7960 kartının R_EN ve L_EN pinleri: Sırasıyla Arduino'nun 8. ve 7. pinlerine
  • Her iki BTS7960 kartının VCC (güç) pini: Arduino'nun 5V pinine veya harici bir güç kaynağına
  • Her iki BTS7960 kartının gnd (toprak) pini: Arduino'nun GND pinine
  • Flysky ı ise A0 ve A1 pinlerine

Kullanıdığım kod ise ;

// Motor sürücü kartları için pin atamaları
const int RPWM = 9; // Sağ motor için PWM pin
const int R_EN = 8; // Sağ motor için etkinleştirme pin
const int LPWM = 10; // Sol motor için PWM pin
const int L_EN = 7; // Sol motor için etkinleştirme pin

// Flysky FS-i6X vericisinden joystick sinyallerini okumak için pin atamaları
const int throttlePin = A0; // Gaz kontrolü için pin
const int directionPin = A1; // Yön kontrolü için pin

void setup() {
// Motor sürücü kartı pinlerini çıkış olarak ayarla
pinMode(RPWM, OUTPUT);
pinMode(R_EN, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(L_EN, OUTPUT);

// Gaz ve yön kontrolü pinlerini giriş olarak ayarla
pinMode(throttlePin, INPUT);
pinMode(directionPin, INPUT);

// Seri haberleşmeyi başlat
Serial.begin(9600);
}

void loop() {
// Gaz ve yön kontrol sinyallerini oku
int throttleValue = analogRead(throttlePin);
int directionValue = analogRead(directionPin);

// Gaz kontrol sinyalini sağ motor hızına dönüştür
int rightSpeed = map(throttleValue, 0, 1023, -255, 255);

// Yön kontrol sinyalini sol motor hızına dönüştür
int leftSpeed = map(directionValue, 0, 1023, -255, 255);

// Sağ motorun hızını kontrol et
if (rightSpeed >= 0) {
digitalWrite(R_EN, HIGH); // Sağ motoru etkinleştir
analogWrite(RPWM, rightSpeed); // Sağ motoru ileri yönde çalıştır
} else {
digitalWrite(R_EN, LOW); // Sağ motoru etkisiz hale getir
analogWrite(RPWM, -rightSpeed); // Sağ motoru geri yönde çalıştır
}

// Sol motorun hızını kontrol et
if (leftSpeed >= 0) {
digitalWrite(L_EN, HIGH); // Sol motoru etkinleştir
analogWrite(LPWM, leftSpeed); // Sol motoru ileri yönde çalıştır
} else {
digitalWrite(L_EN, LOW); // Sol motoru etkisiz hale getir
analogWrite(LPWM, -leftSpeed); // Sol motoru geri yönde çalıştır
}

// Verileri seri monitöre yazdır
Serial.print("Throttle: ");
Serial.print(throttleValue);
Serial.print(", Direction: ");
Serial.println(directionValue);
}

hatayı bir türlü bulamadım konu kusra bakmayın yeniyim paylaşımda hatalarım olduysa
 
İki sürücü olduğuna göre; iki L_EN, iki R_EN, iki
LPWM ve iki RPWM pinleri olacak.
Ayrıca negatif değerler pwmi sürmez.

Pot değeri ortada iken yani ~512 değerindeyken
motor dursun, alt değere ve üst değere göre
motor hareket etsin ve değer değişimine göre
de pwm değeri değişsin.

Bu şekilde sadece bir motoru çalıştırın. Sonra
diğer motoru ilave edersiniz.

https://schematicpartclaudia.z19.web.core.windows.net/ibt-2-motor-driver-schematic.html
https://drive.google.com/drive/folders/1unto2Ejn3RgB8B4dK0pyAlSDomYU6veP
 
Son düzenleme:
Bütün kod 40 satır zaten. Videoya bakıp
elle yazabilirsiniz.
 
BTS7960 kartlarının arızalı olup olmadığını en basit şekilde nasıl kontrol ederim.
 
Vcc + gnd kısmına 5V dan fazla bir gerilim
verdiyseniz veya ters bağlantı yaptıysanız
74244 bozulmuş olabilir.
 
BTS7960 kartlarının arızalı olup olmadığını en basit şekilde nasıl kontrol ederim.
BT2.png
 
Vcc + gnd kısmına 5V sadece arduinodan güç aldım fakat arduino uno yu fazla güçten yaktım bir kez değiştirdim.
Ama o fazla gücü bts7960 a aktaramamıştır diye düşünüyorum.
Kusura bakmayın bende profesyonel değilim deneme yanılma ile ilerliyorum. kurduğum devre aşağıdaki gibiydi
Adsız.jpg
 
Her sürücü için bir pwm çıkışı yeterli. Sadece
yön seçmek için ayrıca iki pin gerekli.
 
Her sürücü için bir pwm çıkışı yeterli. Sadece
yön seçmek için ayrıca iki pin gerekli.
Pwm çıkışlarınıda sağda sağı solda solu kullandımsadece . koduda bu şekilde yeniledim ama gene çalışmadı. pinlere gelen 5v değerleride ölçtüm sorum yok.
// Motor 1 için pin tanımlamaları
const int motor1EN = 3; // Motor 1 için hız kontrol pini (PWM)
const int motor1IN1 = 4; // Motor 1 için yön kontrol pini 1
const int motor1IN2 = 5; // Motor 1 için yön kontrol pini 2

// Motor 2 için pin tanımlamaları
const int motor2EN = 6; // Motor 2 için hız kontrol pini (PWM)
const int motor2IN1 = 7; // Motor 2 için yön kontrol pini 1
const int motor2IN2 = 8; // Motor 2 için yön kontrol pini 2

// Flysky FS-İA10B
const int receiverPin = 9; //

void setup() {
// Motor pinleri çıkış olarak ayarlanır
pinMode(motor1EN, OUTPUT);
pinMode(motor1IN1, OUTPUT);
pinMode(motor1IN2, OUTPUT);
pinMode(motor2EN, OUTPUT);
pinMode(motor2IN1, OUTPUT);
pinMode(motor2IN2, OUTPUT);

// Alıcı pinini giriş olarak ayarla
pinMode(receiverPin, INPUT);
}

void loop() {
// Alıcıdan veri okuma
int receiverValue = pulseIn(receiverPin, HIGH); // PWM sinyalini oku

// PWM sinyali değerlerine göre motor hızlarını ayarla
int motorSpeed1 = map(receiverValue, 1000, 2000, 0, 255); //
int motorSpeed2 = map(receiverValue, 1000, 2000, 0, 255); //

// Alıcıdan gelen sinyale göre motor yönlerini belirle
if (receiverValue < 1500) {
// Alıcı sinyali 1500 mikrosaniyeden küçükse, motorlar geriye döner
digitalWrite(motor1IN1, LOW);
digitalWrite(motor1IN2, HIGH);
digitalWrite(motor2IN1, LOW);
digitalWrite(motor2IN2, HIGH);
} else if (receiverValue > 1500) {
// Alıcı sinyali 1500 mikrosaniyeden büyükse, motorlar ileriye döner
digitalWrite(motor1IN1, HIGH);
digitalWrite(motor1IN2, LOW);
digitalWrite(motor2IN1, HIGH);
digitalWrite(motor2IN2, LOW);
} else {
// Alıcı sinyali 1500 mikrosaniyeye eşitse, motorlar durur
digitalWrite(motor1IN1, LOW);
digitalWrite(motor1IN2, LOW);
digitalWrite(motor2IN1, LOW);
digitalWrite(motor2IN2, LOW);
}

// Motor hızlarını ayarla
analogWrite(motor1EN, motorSpeed1); // Motor 1'in hızını ayarla
analogWrite(motor2EN, motorSpeed2); // Motor 2'nin hızını ayarla
}
 

Yeni mesajlar

Forum istatistikleri

Konular
128,193
Mesajlar
915,740
Kullanıcılar
449,968
Son üye
ibrahimkalebayir38@gmail.

Yeni konular

Geri
Üst