Çözüldü Arduino robot nasıl rastgele hareketler yapar?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Della.dd

Decipat
Katılım
25 Ağustos 2024
Mesajlar
2.274
Çözümler
22
Daha fazla  
Cinsiyet
Erkek
Benim 2 redüktorlu motorlu bir Arduino arabam var. Bu arabamın rastgele bir şekilde sağa sola öne arkaya gitmesini istiyorum. Tamamen rastgele hareket etsin istiyorum. Bunu sağlayan bir kod var mıdır hocam?
 
Çözüm
C++:
[CODE=cpp]// Rastgele hareket eden Arduino arabası kodu

// HC-SR04 ultrasonik sensör eklenerek engelden geri gitme özelliği



#include <AFMotor.h>

#include <NewPing.h>



// Motor tanımlamaları

AF_DCMotor motor1(1, MOTOR12_64KHZ); // L298N Motor 1

AF_DCMotor motor2(2, MOTOR12_64KHZ); // L298N Motor 2



// HC-SR04 sensör pinleri

#define TRIG_PIN 7

#define ECHO_PIN 6

#define MAX_DISTANCE 200 // Maksimum algılama mesafesi (cm)



NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);



void setup() {

  Serial.begin(9600);

  motor1.setSpeed(200); // Motor hızını ayarla (0-255)

  motor2.setSpeed(200);

}



void loop() {

  unsigned int distance = sonar.ping_cm(); // Mesafeyi ölç (cm cinsinden)



  if (distance > 0 && distance < 25) { // Eğer mesafe 25 cm'den küçükse

    Serial.println("Engel algılandı! Geri gidiliyor...");

    moveBackward();

    delay(1000); // Bir süre geri git

    randomTurn();

  } else {

    randomMove();

  }



  delay(100); // Döngü gecikmesi

}



void moveForward() {

  motor1.run(FORWARD);

  motor2.run(FORWARD);

}



void moveBackward() {

  motor1.run(BACKWARD);

  motor2.run(BACKWARD);

}



void stopMotors() {

  motor1.run(RELEASE);

  motor2.run(RELEASE);

}



void randomTurn() {

  int turnDirection = random(0, 2); // 0: sola, 1: sağa

  if (turnDirection == 0) {

    Serial.println("Sola dönülüyor...");

    motor1.run(BACKWARD);

    motor2.run(FORWARD);

  } else {

    Serial.println("Sağa dönülüyor...");

    motor1.run(FORWARD);

    motor2.run(BACKWARD);

  }

  delay(1000); // Bir süre dön

  stopMotors();

}



void randomMove() {

  int moveDirection = random(0, 4); // 0: ileri, 1: geri, 2: sola, 3: sağa

  switch (moveDirection) {

    case 0:

      Serial.println("İleri gidiliyor...");

      moveForward();

      break;

    case 1:

      Serial.println("Geri gidiliyor...");

      moveBackward();

      break;

    case 2:

      Serial.println("Sola dönülüyor...");

      motor1.run(RELEASE);

      motor2.run(FORWARD);

      break;

    case 3:

      Serial.println("Sağa dönülüyor...");

      motor1.run(FORWARD);

      motor2.run(RELEASE);

      break;

  }

  delay(1000); // Hareket süresi

  stopMotors();

}

Hocam GPT'ye şu kodu çıkarttım. Bakabilirsiniz. Çalışıp çalışmadığını anlamanız için seri monitöre de yazdırttım.
Gerekli olanlar:
2 redüktörlü motor (Motor sürücüsü ile birlikte, örn. L298N ya da L293D).
Motor sürücü modülü (ör. L298N).
Güç kaynağı.

C++:
// Motor sürücü pinleri
const int motor1Pin1 = 5; // Motor 1 ileri
const int motor1Pin2 = 6; // Motor 1 geri
const int motor2Pin1 = 9; // Motor 2 ileri
const int motor2Pin2 = 10; // Motor 2 geri

void setup() {
  // Motor pinlerini çıkış olarak ayarla
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);

  // Rastgelelik için tohum oluştur (analog pin değerlerini kullanabilirsiniz)
  randomSeed(analogRead(0));
}

void loop() {
  int action = random(0, 5); // 0 ile 4 arasında rastgele bir hareket seç
 
  switch (action) {
    case 0:
      // İleri hareket
      moveForward();
      break;
    case 1:
      // Geri hareket
      moveBackward();
      break;
    case 2:
      // Sağa dön
      turnRight();
      break;
    case 3:
      // Sola dön
      turnLeft();
      break;
    case 4:
      // Durakla
      stopMotors();
      break;
  }

  delay(random(500, 2000)); // Rastgele bir süre bekle (0.5 - 2 saniye)
}

// İleri hareket fonksiyonu
void moveForward() {
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
}

// Geri hareket fonksiyonu
void moveBackward() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
}

// Sağa dön fonksiyonu
void turnRight() {
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
}

// Sola dön fonksiyonu
void turnLeft() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
}

// Motorları durdurma fonksiyonu
void stopMotors() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, LOW);
}
 
Son düzenleme:
Hangi motor sürücüyü kullanıyorsunuz hocam?(L293d)?Motorunuzda kaç adet pin var.Rastgele hareket etmesini istiyorsanız.Random fonksiyon kullanabiliriz.

C++:
// Motor sürücü pinleri
const int motor1Pin1 = 5; // Motor 1 ileri
const int motor1Pin2 = 6; // Motor 1 geri
const int motor2Pin1 = 9; // Motor 2 ileri
const int motor2Pin2 = 10; // Motor 2 geri

void setup() {
  // Motor pinlerini çıkış olarak ayarla
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);

  // Rastgelelik için tohum oluştur (analog pin değerlerini kullanabilirsiniz)
  randomSeed(analogRead(0));
}

void loop() {
  int action = random(0, 5); // 0 ile 4 arasında rastgele bir hareket seç
 
  switch (action) {
    case 0:
      // İleri hareket
      moveForward();
      break;
    case 1:
      // Geri hareket
      moveBackward();
      break;
    case 2:
      // Sağa dön
      turnRight();
      break;
    case 3:
      // Sola dön
      turnLeft();
      break;
    case 4:
      // Durakla
      stopMotors();
      break;
  }

  delay(random(500, 2000)); // Rastgele bir süre bekle (0.5 - 2 saniye)
}

// İleri hareket fonksiyonu
void moveForward() {
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
}

// Geri hareket fonksiyonu
void moveBackward() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
}

// Sağa dön fonksiyonu
void turnRight() {
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
}

// Sola dön fonksiyonu
void turnLeft() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
}

// Motorları durdurma fonksiyonu
void stopMotors() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, LOW);
}
hocam sakin.İlk bir bilgileri öğrenelim 😄
 
Hangi motor sürücüyü kullanıyorsunuz hocam?(L293D)?motorunuzda kaç adet pin var. Rastgele hareket etmesini istiyorsanız. Random fonksiyon kullanabiliriz.

Hocam sakin. İlk bir bilgileri öğrenelim 😄

Hocam L298n kullanıyorum toplamda 12v 6A güc kaynagım var (pil) Arduino Uno kullanıyorum.
 
Gerekli olanlar:
2 redüktörlü motor (motor sürücüsü ile birlikte, örneğin. L298n ya da L293D).
Motor sürücü modülü (ör. L298n).
Güç kaynağı.

C++:
// Motor sürücü pinleri.
const int motor1Pin1 = 5; // Motor 1 ileri.
const int motor1Pin2 = 6; // Motor 1 geri.
const int motor2Pin1 = 9; // Motor 2 ileri.
const int motor2Pin2 = 10; // Motor 2 geri.

void setup() {
 // Motor pinlerini çıkış olarak ayarla.
 pinMode(motor1Pin1, OUTPUT);
 pinMode(motor1Pin2, OUTPUT);
 pinMode(motor2Pin1, OUTPUT);
 pinMode(motor2Pin2, OUTPUT);

 // Rastgelelik için tohum oluştur (analog pin değerlerini kullanabilirsiniz)
 randomSeed(analogRead(0));
}

void loop() {
 int action = random(0, 5); // 0 ile 4 arasında rastgele bir hareket seç.

 switch (action) {
 case 0:
 // İleri hareket.
 moveForward();
 break;
 case 1:
 // Geri hareket.
 moveBackward();
 break;
 case 2:
 // Sağa dön.
 turnRight();
 break;
 case 3:
 // Sola dön.
 turnLeft();
 break;
 case 4:
 // Durakla.
 stopMotors();
 break;
 }

 delay(random(500, 2000)); // Rastgele bir süre bekle (0.5 - 2 saniye)
}

// İleri hareket fonksiyonu.
void moveForward() {
 digitalWrite(motor1Pin1, HIGH);
 digitalWrite(motor1Pin2, LOW);
 digitalWrite(motor2Pin1, HIGH);
 digitalWrite(motor2Pin2, LOW);
}

// Geri hareket fonksiyonu.
void moveBackward() {
 digitalWrite(motor1Pin1, LOW);
 digitalWrite(motor1Pin2, HIGH);
 digitalWrite(motor2Pin1, LOW);
 digitalWrite(motor2Pin2, HIGH);
}

// Sağa dön fonksiyonu.
void turnRight() {
 digitalWrite(motor1Pin1, HIGH);
 digitalWrite(motor1Pin2, LOW);
 digitalWrite(motor2Pin1, LOW);
 digitalWrite(motor2Pin2, HIGH);
}

// Sola dön fonksiyonu.
void turnLeft() {
 digitalWrite(motor1Pin1, LOW);
 digitalWrite(motor1Pin2, HIGH);
 digitalWrite(motor2Pin1, HIGH);
 digitalWrite(motor2Pin2, LOW);
}

// Motorları durdurma fonksiyonu.
void stopMotors() {
 digitalWrite(motor1Pin1, LOW);
 digitalWrite(motor1Pin2, LOW);
 digitalWrite(motor2Pin1, LOW);
 digitalWrite(motor2Pin2, LOW);
}

Hocam peki bu kod dosyasının üzerine bir yere çarpmasın diye duvarla arasındaki mesafe 25 Cm'den kücük olursa geri gitsin diye sensör kullanabilir miyiz? Hcsr04.
 
C++:
[CODE=cpp]// Rastgele hareket eden Arduino arabası kodu

// HC-SR04 ultrasonik sensör eklenerek engelden geri gitme özelliği



#include <AFMotor.h>

#include <NewPing.h>



// Motor tanımlamaları

AF_DCMotor motor1(1, MOTOR12_64KHZ); // L298N Motor 1

AF_DCMotor motor2(2, MOTOR12_64KHZ); // L298N Motor 2



// HC-SR04 sensör pinleri

#define TRIG_PIN 7

#define ECHO_PIN 6

#define MAX_DISTANCE 200 // Maksimum algılama mesafesi (cm)



NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);



void setup() {

  Serial.begin(9600);

  motor1.setSpeed(200); // Motor hızını ayarla (0-255)

  motor2.setSpeed(200);

}



void loop() {

  unsigned int distance = sonar.ping_cm(); // Mesafeyi ölç (cm cinsinden)



  if (distance > 0 && distance < 25) { // Eğer mesafe 25 cm'den küçükse

    Serial.println("Engel algılandı! Geri gidiliyor...");

    moveBackward();

    delay(1000); // Bir süre geri git

    randomTurn();

  } else {

    randomMove();

  }



  delay(100); // Döngü gecikmesi

}



void moveForward() {

  motor1.run(FORWARD);

  motor2.run(FORWARD);

}



void moveBackward() {

  motor1.run(BACKWARD);

  motor2.run(BACKWARD);

}



void stopMotors() {

  motor1.run(RELEASE);

  motor2.run(RELEASE);

}



void randomTurn() {

  int turnDirection = random(0, 2); // 0: sola, 1: sağa

  if (turnDirection == 0) {

    Serial.println("Sola dönülüyor...");

    motor1.run(BACKWARD);

    motor2.run(FORWARD);

  } else {

    Serial.println("Sağa dönülüyor...");

    motor1.run(FORWARD);

    motor2.run(BACKWARD);

  }

  delay(1000); // Bir süre dön

  stopMotors();

}



void randomMove() {

  int moveDirection = random(0, 4); // 0: ileri, 1: geri, 2: sola, 3: sağa

  switch (moveDirection) {

    case 0:

      Serial.println("İleri gidiliyor...");

      moveForward();

      break;

    case 1:

      Serial.println("Geri gidiliyor...");

      moveBackward();

      break;

    case 2:

      Serial.println("Sola dönülüyor...");

      motor1.run(RELEASE);

      motor2.run(FORWARD);

      break;

    case 3:

      Serial.println("Sağa dönülüyor...");

      motor1.run(FORWARD);

      motor2.run(RELEASE);

      break;

  }

  delay(1000); // Hareket süresi

  stopMotors();

}

Hocam GPT'ye şu kodu çıkarttım. Bakabilirsiniz. Çalışıp çalışmadığını anlamanız için seri monitöre de yazdırttım.
 
Son düzenleyen: Moderatör:
Çözüm
C++:
[CODE=cpp]// Rastgele hareket eden Arduino arabası kodu.

// HC-SR04 ultrasonik sensör eklenerek engelden geri gitme özelliği.

#include <AFMotor.h>

#include <NewPing.h>

// Motor tanımlamaları.

AF_DCMotor motor1(1, MOTOR12_64KHZ); // L298N Motor 1

AF_DCMotor motor2(2, MOTOR12_64KHZ); // L298N Motor 2

// HC-SR04 sensör pinleri.

#define TRIG_PIN 7

#define ECHO_PIN 6

#define MAX_DISTANCE 200 // Maksimum algılama mesafesi (cm)

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {

 Serial.begin(9600);

 motor1.setSpeed(200); // Motor hızını ayarla (0-255)

 motor2.setSpeed(200);

}

void loop() {

 unsigned int distance = sonar.ping_cm(); // Mesafeyi ölç (cm cinsinden)

 if (distance > 0 && distance < 25) { // Eğer mesafe 25 cm'den küçükse.

 Serial.println("Engel algılandı! Geri gidiliyor...");

 moveBackward();

 delay(1000); // Bir süre geri git.

 randomTurn();

 } else {

 randomMove();

 }

 delay(100); // Döngü gecikmesi.

}

void moveForward() {

 motor1.run(FORWARD);

 motor2.run(FORWARD);

}

void moveBackward() {

 motor1.run(BACKWARD);

 motor2.run(BACKWARD);

}

void stopMotors() {

 motor1.run(RELEASE);

 motor2.run(RELEASE);

}

void randomTurn() {

 int turnDirection = random(0, 2); // 0: sola, 1: sağa.

 if (turnDirection == 0) {

 Serial.println("Sola dönülüyor...");

 motor1.run(BACKWARD);

 motor2.run(FORWARD);

 } else {

 Serial.println("Sağa dönülüyor...");

 motor1.run(FORWARD);

 motor2.run(BACKWARD);

 }

 delay(1000); // Bir süre dön.

 stopMotors();

}

void randomMove() {

 int moveDirection = random(0, 4); // 0: ileri, 1: geri, 2: sola, 3: sağa.

 switch (moveDirection) {

 case 0:

 Serial.println("İleri gidiliyor...");

 moveForward();

 break;

 case 1:

 Serial.println("Geri gidiliyor...");

 moveBackward();

 break;

 case 2:

 Serial.println("Sola dönülüyor...");

 motor1.run(RELEASE);

 motor2.run(FORWARD);

 break;

 case 3:

 Serial.println("Sağa dönülüyor...");

 motor1.run(FORWARD);

 motor2.run(RELEASE);

 break;

 }

 delay(1000); // Hareket süresi.

 stopMotors();

}

Hocam GPT'ye şu kodu çıkarttım. B akabilirsiniz. Çalışıp çalışmadığını anlamanız için seri monitöre de yazdırttım.

Teşekkürler hocam.
 

Technopat Haberler

Yeni konular

Geri
Yukarı