Robot hatası
  • Selamlar, Yapmaya çalıştığım robot devre üzerinde aşağıda belirtmeye çalıştığım sorun oluşuyor.
    Robot devre üzerindeki malzemeler;
    1-zumo robot kiti
    2-Arduino motor shield
    3- ön tekerlekler için 2 adet dc motor
    4-HC-SR04 ultrasonic sensor
    5-ultrasonic sensörün dönmesi için 1 adet servo motor.

    Aşağıda vermiş olduğum kod'a göre servo motorun sinyal pinini motor shieldin 10 numaralı pinine bağladığım zaman, bilgisayarın com portu çok kısa süreler ile bağlanıyor ve kesiliyor.
    Yapmış olduğum devrede; motor shield'in 5V ve ground uçlarından bir board'un (+) ve (-) uçlarına bağladım. Bu (+) ve (-) uçlara; ultrasonic sensorun (+) ve (-) uçlarını ve servo motorun (+) ve (-) uçlarınıda bağladım.
    Yukarıda da belirtmiş olduğum olduğum gibi servo motoru bağlamadığım zaman, robot 30 cm lik engel gördüğü zaman duruyor ve sadece (önden bakıldığı zaman) sağ teker duruyor, robot dönüyor ve 30 cmlik engel kalkınca düz gitmryr başlıyor. Fakat servo motoru bağladığım zaman ise ;
    bilgisayar com portu çok kısa süre aralıkları ile bağlanıp kesiliyor ve bu arada servo motor dönme hareketini yapsada aşağıdaki kod bloğunda görüleceği üzere sağ ve sol kıyaslama yapıp buna göre sağ veya sol teker hareket edeceğine tekerlekler sadece duruyor. sadece servo motor ve üzerindeki ultrasonic sensor sağa ve sola dönüyor.
    Bu sorunu yardımınızla halledebilirsem ikinci sorum şu olacak. Bu robotun enerji kaynağı olarak usb kablo ile sağlıyorum. USB kablo olmadan bu robotun kablodan bağımsız olarak hareket edebilmesi için bataryasını nasıl seçmeliyim. 9 Volt'luk bir pili motorshield'in (+) ve (-) uçlarına bağladım bu şekilde usb kablosuz çalışmadı.

    #include
    const int M1 = 13; // direction motor 1
    const int M2 = 12; // direction motor 2
    const int M1BRAKE = 9; // pwm motor 1
    const int M2BRAKE = 8; // pwm motor 2

    #define TRIGGER_PIN 4
    #define ECHO_PIN 5



    int leftDistance, rightDistance, fwdDistance;
    Servo SRF6AServo; // servo objects
    void setup() {
    Serial.begin(57600);
    pinMode(13, OUTPUT); // direction motor 1, left front
    pinMode(12, OUTPUT); // direction motor 2, left rear

    pinMode(8, OUTPUT); // motor 1 BRAKE
    pinMode(9, OUTPUT); // motor 2 BRAKE

    pinMode(TRIGGER_PIN, OUTPUT);
    pinMode(ECHO_PIN, INPUT);

    SRF6AServo.attach(10);
    SRF6AServo.write(55) ; // set servo to center pois
    delay(150);
    }
    void loop() {
    long duration, distance;
    digitalWrite(TRIGGER_PIN, HIGH);
    // delayMicroseconds(1000); - Removed this line
    delayMicroseconds(10); // Added this line
    digitalWrite(TRIGGER_PIN, LOW);
    duration = pulseIn(ECHO_PIN, HIGH);
    distance = (duration/2) / 29.1;
    digitalWrite(TRIGGER_PIN, LOW); // Added this line
    delayMicroseconds(2); // Added this line

    fwdDistance = distance;
    delay(100);
    if (fwdDistance > 30)
    {
    forward();
    }
    else
    {
    stop();
    SRF6AServo.write(110); // move servo left
    delay(500);
    leftDistance = distance;
    delay(100);
    SRF6AServo.write(10); // move servo right
    delay(500);
    rightDistance = distance;
    delay(100);
    SRF6AServo.write(55); // move servo to center
    delay(50);
    compareDistance();
    }
    }
    void compareDistance()
    {
    if (leftDistance>rightDistance) //if left is less obstructed
    {
    turnleft();
    delay(800);
    }
    else if (rightDistance>leftDistance) //if right is less obstructed
    {
    turnright;
    delay(800);
    }
    else if (rightDistance = leftDistance)
    {
    turnleft();
    delay(1500);
    }
    }
    void turnleft()
    {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(8, LOW); // motor 1 BRAKE
    digitalWrite(9, HIGH); // motor 2 BRAKE

    analogWrite(3, 255);
    analogWrite(11, 255);

    }
    void turnright()
    {
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(8, HIGH); // motor 1 BRAKE
    digitalWrite(9, LOW); // motor 2 BRAKE

    analogWrite(3, 255);
    analogWrite(11, 255);

    }
    void forward()
    {
    digitalWrite(13, HIGH);
    digitalWrite(12, HIGH);
    digitalWrite(9, LOW); // motor 1 BRAKE
    digitalWrite(8, LOW); // motor 2 BRAKE

    analogWrite(3, 255);
    analogWrite(11, 255);

    }
    void stop()
    {
    analogWrite(3, 0);
    analogWrite(11, 0);

    }




  • Merhaba,
    Kodu sadece hızlıca inceledim açıkcası ama sorununuzu anladığım kadarıyla sadece güç sağlama problemi yaşıyorsunuz. Yani USB porttan aldığınız güç bir moturu çalıştırmaya yetiyor ve böylece diğerleri çalışmıyor bile. Ben onu anladım. İkinci sorunuzu okuyunca da bundan emin oldum diyebilirim.
    Arduino kendi regülatörü sayesinde yaklaşık 12V'a kadar olan bataryayı 5V'a dönüştürüp devreye verecektir. Ama burada dikkat etmemiz gereken sadece volt değil, akım da önemli.
    Siz pilin (+) ucunu Vin'e (-) ucunu da Gnd'ye bağladınızdan emin olarak tekrar deneyin. Böylece iki sorunu da çözeceğinizi düşünüyorum.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.