Program robot sensor ultrasonic

saya masih sd, pemula

bagaimana program robot sensor ultrasonic. Robotnya akan berbelok ke kiri ketika menemui halangan di depannya. saya coba lihat di WikiHow, tapi tidak berjalan.

kode dari WikiHow

#include <Servo.h>

Servo leftMotor;
Servo rightMotor;

const int serialPeriod = 250;       // kode ini memberikan jeda waktu keluaran konsol menjadi setiap 1/4 detik (250 ms)
unsigned long timeSerialDelay = 0;

const int loopPeriod = 20;          // kode ini mengatur frekuensi pembacaan sensor menjadi 20 ms, yang merupakan frekuensi 50 Hz
unsigned long timeLoopDelay   = 0;

// kode ini memberikan fungsi TRIG dan ECHO ke pin-pin pada Arduino. Sesuaikan angka-angka di sini jika Anda menghubungkannya dengan cara yang berbeda
const int ultrasonic2TrigPin = 8;
const int ultrasonic2EchoPin = 9;

int ultrasonic2Distance;
int ultrasonic2Duration;

// kode ini mendefinisikan dua keadaan robot yang mungkin: terus maju atau berbelok ke kiri
#define DRIVE_FORWARD     0
#define TURN_LEFT         1

int state = DRIVE_FORWARD; // 0 = terus maju (<i>DEFAULT</i>), 1 = belok kiri

void setup()
{
    Serial.begin(9600);

    // sensor ini menentukan konfigurasi pin
    pinMode(ultrasonic2TrigPin, OUTPUT);
    pinMode(ultrasonic2EchoPin, INPUT);

    // ini menugaskan motor ke pin-pin Arduino
    leftMotor.attach(12);
    rightMotor.attach(13);
}

void loop()
{
    if(digitalRead(2) == HIGH) // kode ini mendeteksi sakelar ''stop''
    {
        while(1)
        {
            leftMotor.write(90);
            rightMotor.write(90);
        }
    }

    debugOutput(); // kode ini mencetak pesan-pesan <i>debug</i> ke konsol serial

    if(millis() - timeLoopDelay >= loopPeriod)
    {
        readUltrasonicSensors(); // kode ini memerintahkan sensor untuk membaca dan menyimpan data tentang jarak yang diukur

        stateMachine();

        timeLoopDelay = millis();
    }
}

void stateMachine()
{
    if(state == DRIVE_FORWARD) // jika tidak ada halangan yang terdeteksi
    {
        if(ultrasonic2Distance > 6 || ultrasonic2Distance < 0) // jika tidak ada sesuatu di depan robot. <i>ultrasonicDistance</i> akan bernilai negatif untuk beberapa <i>ultrasonics</i> jika tidak ada halangan
        {
            // drive forward
            rightMotor.write(180);
            leftMotor.write(0);
        }
        else //  jika ada benda di depan kita
        {
            state = TURN_LEFT;
        }
    }
    else if(state == TURN_LEFT) // jika halangan terdeteksi, belok kiri
    {
        unsigned long timeToTurnLeft = 500; // membutuhkan sekitar 0,5 detik untuk belok 90 derajat. Anda mungkin perlu menyesuaikan nilai ini jika roda-roda Anda berbeda ukuran dengan ukuran pada contoh

        unsigned long turnStartTime = millis(); // menyimpan kondisi saat robot mulai belok

        while((millis()-turnStartTime) < timeToTurnLeft) // tetap menjalankan siklus ini hingga <i>timeToTurnLeft</i> (500) sudah berlalu
        {
            // belok kiri, ingatlah bahwa saat keduanya bernilai “180”, robot akan berbelok.
            rightMotor.write(180);
            leftMotor.write(180);
        }

        state = DRIVE_FORWARD;
    }
}

void readUltrasonicSensors()
{
    // ini untuk <i>ultrasonic</i> 2. Anda mungkin perlu mengubah perintah ini jika Anda menggunakan sensor yang berbeda.
    digitalWrite(ultrasonic2TrigPin, HIGH);
    delayMicroseconds(10);                  // tarik pin TRIG ke tinggi setidaknya selama 10 mikrodetik
    digitalWrite(ultrasonic2TrigPin, LOW);

    ultrasonic2Duration = pulseIn(ultrasonic2EchoPin, HIGH);
    ultrasonic2Distance = (ultrasonic2Duration/2)/29;
}

// berikut adalah untuk galat <i>debug</i> dalam konsol.
void debugOutput()
{
    if((millis() - timeSerialDelay) > serialPeriod)
    {
        Serial.print("ultrasonic2Distance: ");
        Serial.print(ultrasonic2Distance);
        Serial.print("cm");
        Serial.println();

        timeSerialDelay = millis();
    }
}

avatar haza
@haza

12 Kontribusi 3 Poin

Dipost 4 tahun yang lalu

Belum ada Jawaban. Jadi yang pertama Jawaban

Login untuk ikut Jawaban