Şimdi Ara

Çizgi Labirenti en kısa yoldan giden robot incelemesi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
183
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Herkese selam arkadaşlar.

    Bu sefer Robotun Aklını okuyup size aktarmaya çalıştım. Labirent robotumuz labirenti nasıl çözdüğü sadeleştirmeyi nasıl yaparak çıkışın en kısa yolunu hesapladığını anlatmaya çalıştım. Videomu izleyerek “hmm demek böyle yapıyormuş bende bir şey sanmıştım .” diyeceksiniz. Aslında hayatta her şey öğrenene kadar zor öğrenince ise acayip kolaydır. Birde bugün bir videoda ki sözü paylaşmak istedim.

    “Üşenme

    Ertleme

    Vazgeçme”

    Bunları yaparsak yapamayacağımız şey yoktur.


    Çizgi Labirenti en kısa yoldan giden robot incelemesi



    #define sol_orta 3
    #define sol_yakin 4
    #define sol_uzak 5
    #define sag_orta 2
    #define sag_yakin 1
    #define sag_uzak 0

    int oku_sol_orta;
    int oku_sol_yakin;
    int oku_sol_uzak;
    int oku_sag_orta;
    int oku_sag_yakin;
    int oku_sag_uzak;

    int sol_durtmek;
    int tekrarlama;
    int sagl_durtmek;

    #define sicrama_zamani 100

    #define leftMotor1 10
    #define leftMotor2 7

    #define rightMotor1 13
    #define rightMotor2 12


    #define sag_led 9
    #define sol_led 8

    #define SolMotorHiz 11
    #define SagMotorHiz 5

    #define vcc_m 6
    int ref = 300;

    char yol[30] = {};
    int yol_uzunlugu;
    int uzunluk_okumak;

    void setup() {
    Serial.begin(9600);
    pinMode(vcc_m , OUTPUT);
    pinMode(SolMotorHiz, OUTPUT);
    pinMode(SagMotorHiz, OUTPUT);
    pinMode(sol_orta, INPUT);
    pinMode(sol_yakin, INPUT);
    pinMode(sol_uzak, INPUT);
    pinMode(sag_orta, INPUT);
    pinMode(sag_yakin, INPUT);
    pinMode(sag_uzak, INPUT);

    pinMode(sag_led, OUTPUT);
    pinMode(sol_led, OUTPUT);

    pinMode(leftMotor1, OUTPUT);
    pinMode(leftMotor2, OUTPUT);
    pinMode(rightMotor1, OUTPUT);
    pinMode(rightMotor2, OUTPUT);



    digitalWrite(vcc_m , HIGH);

    for (int a = 0; a < 5; a++)
    {
    digitalWrite(sag_led, HIGH);
    digitalWrite(sol_led, LOW);
    delay (100);
    digitalWrite(sol_led, HIGH);
    digitalWrite(sag_led, LOW);
    delay (100);
    }

    digitalWrite(sag_led, LOW);
    digitalWrite(sol_led, LOW);

    analogWrite(SolMotorHiz, 255);
    analogWrite(SagMotorHiz, 255);


    delay(1000);
    }

    void loop() {

    sensor_oku();

    if (oku_sol_uzak < ref && oku_sag_uzak < ref && (oku_sol_orta > ref || oku_sag_orta > ref) ) // 0.-.2.2.-.0
    {
    duz();
    }
    else { // -.-.-.-.-.-
    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, LOW);

    digitalWrite(sag_led, HIGH);
    digitalWrite(sol_led, HIGH);
    delay(100);

    digitalWrite(sag_led, LOW);
    digitalWrite(sol_led, LOW);
    delay(100);
    sol_el_duvar();
    }
    }

    void sensor_oku() {

    oku_sol_orta = analogRead(sol_orta);
    oku_sol_yakin = analogRead(sol_yakin);
    oku_sol_uzak = analogRead(sol_uzak);
    oku_sag_orta = analogRead(sag_orta);
    oku_sag_yakin = analogRead(sag_yakin);
    oku_sag_uzak = analogRead(sag_uzak);

    }


    void sol_el_duvar() {

    // if ( oku_sol_uzak > ref && oku_sag_uzak > ref) { // 1.-.-.-.-.1
    if (oku_sol_uzak > ref && oku_sol_orta > ref && oku_sag_orta > ref && oku_sag_uzak > ref && oku_sol_yakin > ref && oku_sag_yakin > ref) {// 1.1.1.1.1.1

    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);

    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(sicrama_zamani);

    sensor_oku();

    if (oku_sol_uzak > ref && oku_sag_uzak > ref) { // || && yapıldı // 1.-.-.-.-.1

    tamam();
    }
    if (oku_sol_uzak < ref && oku_sag_uzak < ref) { // 0.-.-.-.-.0
    sola_don();
    }

    }

    if (oku_sol_uzak > ref) { // SOLA DÖNEBİLİRSEN SOLA DÖN 1.-.-.-.-.-


    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);
    delay(sicrama_zamani);
    sensor_oku();

    if (oku_sol_uzak < ref && oku_sag_uzak < ref) {// 0.-.-.-.-.0
    sola_don();
    }


    else {
    tamam();
    }
    }

    if (oku_sag_uzak > ref) { // -.-.-.-.-.1


    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(sicrama_zamani);

    sensor_oku();

    if (oku_sol_uzak > ref) { // 1.-.-.-.-.-
    delay(sicrama_zamani - 30);
    sensor_oku();

    if (oku_sag_uzak > ref && oku_sol_uzak > ref) { // 1.-.-.-.-.1

    // if (oku_sol_uzak > ref && oku_sol_orta > ref && oku_sag_orta > ref && oku_sag_uzak > ref && oku_sol_yakin > ref && oku_sag_yakin > ref) {// 1.1.1.1.1.1
    tamam();
    }
    else {
    sola_don();
    return;
    }
    }
    delay(sicrama_zamani - 30);
    sensor_oku();
    if (oku_sol_uzak < ref && oku_sol_orta < ref && oku_sag_orta < ref && oku_sag_uzak < ref) {// 0.-.0.0.-.0

    saga_don();
    return;
    }
    yol[yol_uzunlugu] = 'S';
    yol_uzunlugu++;

    if (yol[yol_uzunlugu - 2] == 'B') {

    kisa_yol();
    }
    duz();
    }



    sensor_oku();
    if (oku_sol_uzak < ref && oku_sol_orta < ref && oku_sag_orta < ref && oku_sag_uzak < ref && oku_sol_yakin < ref && oku_sag_yakin < ref) {// 0.0.0.0.0.0
    arkani_don();
    }

    }
    void tamam() {
    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, LOW);

    tekrarlama = 1;
    yol[yol_uzunlugu] = 'D';
    yol_uzunlugu++;
    while (analogRead(sol_uzak) > ref) {

    digitalWrite(sag_led, HIGH);
    digitalWrite(sol_led, LOW);
    delay (100);
    digitalWrite(sag_led, LOW);
    digitalWrite(sol_led, HIGH);
    delay (100);
    Serial.print(oku_sol_orta);
    oku_sol_orta = analogRead(sol_orta);
    oku_sol_yakin = analogRead(sol_yakin);
    oku_sol_uzak = analogRead(sol_uzak);
    oku_sag_orta = analogRead(sag_orta);
    oku_sag_yakin = analogRead(sag_yakin);
    oku_sag_uzak = analogRead(sag_uzak);

    Serial.print(oku_sol_orta);
    Serial.print(" ");
    Serial.print(oku_sol_yakin);
    Serial.print(" ");
    Serial.print(oku_sol_uzak);
    Serial.print(" ");
    Serial.print(oku_sag_orta);
    Serial.print(" ");
    Serial.print(oku_sag_yakin);
    Serial.print(" ");
    Serial.println(oku_sag_uzak);



    }

    digitalWrite(sag_led, LOW);
    digitalWrite(sol_led, LOW);
    delay(2500);
    replay();
    }

    void sola_don() {

    analogWrite(SolMotorHiz, 190);
    analogWrite(SagMotorHiz, 190);
    while (analogRead(sag_orta) > ref || analogRead(sol_orta) > ref) {// -.-.1.1.-.-

    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, HIGH);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    // delay(2);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);
    //
    // delay(1);
    }

    while (analogRead(sag_orta) < ref) {// -.-.-.0.-.-

    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, HIGH);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    // delay(2);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);
    //
    // delay(1);
    }

    if (tekrarlama == 0) {
    yol[yol_uzunlugu] = 'L';
    yol_uzunlugu++;
    if (yol[yol_uzunlugu - 2] == 'B') {
    kisa_yol();
    }
    }
    }

    void saga_don() {

    analogWrite(SolMotorHiz, 190);
    analogWrite(SagMotorHiz, 190);
    while (analogRead(sag_orta) > ref) { // -.-.-.1.-.-
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, HIGH);

    // delay(2);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);
    //
    // delay(1);
    }
    while (analogRead(sag_orta) < ref) {
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, HIGH);

    // delay(2);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);
    //
    // delay(1);
    }
    while (analogRead(sol_orta) < ref) {
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, HIGH);

    // delay(2);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);
    //
    // delay(1);
    }

    if (tekrarlama == 0) {
    yol[yol_uzunlugu] = 'R';
    Serial.println("r");
    yol_uzunlugu++;
    Serial.print("yol length: ");
    Serial.println(yol_uzunlugu);
    if (yol[yol_uzunlugu - 2] == 'B') {
    Serial.println("kisa_ening yol");
    kisa_yol();
    }
    }

    }
    void duz() {
    if ( analogRead(sol_orta) < ref) {


    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);

    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, HIGH);

    // digitalWrite(leftMotor1, HIGH);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, HIGH);
    // digitalWrite(rightMotor2, LOW);

    delay(1);
    // digitalWrite(leftMotor1, HIGH);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);

    delay(3);


    return;
    }
    if (analogRead(sag_orta) < ref) {

    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);

    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, HIGH);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);


    // digitalWrite(leftMotor1, HIGH);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, HIGH);
    // digitalWrite(rightMotor2, LOW);

    delay(1);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, HIGH);
    // digitalWrite(rightMotor2, LOW);

    delay(3);

    return;
    }

    analogWrite(SolMotorHiz, 160);
    analogWrite(SagMotorHiz, 160);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);



    }

    void arkani_don() {

    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(50);
    while (analogRead(sol_orta) < ref) {

    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, HIGH);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    // delay(2);
    // digitalWrite(leftMotor1, LOW);
    // digitalWrite(leftMotor2, LOW);
    // digitalWrite(rightMotor1, LOW);
    // digitalWrite(rightMotor2, LOW);
    //
    // delay(1);
    }
    yol[yol_uzunlugu] = 'B';
    yol_uzunlugu++;
    duz();
    //Serial.println("b");
    //Serial.print("yol length: ");
    //Serial.println(yol_uzunlugu);
    }

    void kisa_yol() {
    int kisa_tamam = 0;
    if (yol[yol_uzunlugu - 3] == 'L' && yol[yol_uzunlugu - 1] == 'R') {
    yol_uzunlugu -= 3;
    yol[yol_uzunlugu] = 'B';
    //Serial.println("test1");
    kisa_tamam = 1;
    }

    if (yol[yol_uzunlugu - 3] == 'L' && yol[yol_uzunlugu - 1] == 'S' && kisa_tamam == 0) {
    yol_uzunlugu -= 3;
    yol[yol_uzunlugu] = 'R';
    //Serial.println("test2");
    kisa_tamam = 1;
    }

    if (yol[yol_uzunlugu - 3] == 'R' && yol[yol_uzunlugu - 1] == 'L' && kisa_tamam == 0) {
    yol_uzunlugu -= 3;
    yol[yol_uzunlugu] = 'B';
    //Serial.println("test3");
    kisa_tamam = 1;
    }


    if (yol[yol_uzunlugu - 3] == 'S' && yol[yol_uzunlugu - 1] == 'L' && kisa_tamam == 0) {
    yol_uzunlugu -= 3;
    yol[yol_uzunlugu] = 'R';
    //Serial.println("test4");
    kisa_tamam = 1;
    }

    if (yol[yol_uzunlugu - 3] == 'S' && yol[yol_uzunlugu - 1] == 'S' && kisa_tamam == 0) {
    yol_uzunlugu -= 3;
    yol[yol_uzunlugu] = 'B';
    //Serial.println("test5");
    kisa_tamam = 1;
    }
    if (yol[yol_uzunlugu - 3] == 'L' && yol[yol_uzunlugu - 1] == 'L' && kisa_tamam == 0) {
    yol_uzunlugu -= 3;
    yol[yol_uzunlugu] = 'S';
    //Serial.println("test6");
    kisa_tamam = 1;
    }

    yol[yol_uzunlugu + 1] = 'D';
    yol[yol_uzunlugu + 2] = 'D';
    yol_uzunlugu++;
    //Serial.print("yol length: ");
    //Serial.println(yol_uzunlugu);
    //printyol();
    }

    void printyol() {
    Serial.println("+++++++++++++++++");
    int x;
    while (x <= yol_uzunlugu) {
    Serial.println(yol[x]);
    x++;
    }
    Serial.println("+++++++++++++++++");
    }

    void replay() {

    sensor_oku();
    if (oku_sol_uzak < ref && oku_sag_uzak < ref) {
    duz();
    }
    else {
    if (yol[uzunluk_okumak] == 'D') {


    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(50);
    digitalWrite(leftMotor1, LOW);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, LOW);
    digitalWrite(rightMotor2, LOW);

    // tamam();// sürekli döngü devam eder
    son_hareket();
    }
    if (yol[uzunluk_okumak] == 'L') {


    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(sicrama_zamani);

    sola_don();
    }
    if (yol[uzunluk_okumak] == 'R') {
    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(sicrama_zamani);

    saga_don();
    }
    if (yol[uzunluk_okumak] == 'S') {

    analogWrite(SolMotorHiz, 150);
    analogWrite(SagMotorHiz, 150);
    digitalWrite(leftMotor1, HIGH);
    digitalWrite(leftMotor2, LOW);
    digitalWrite(rightMotor1, HIGH);
    digitalWrite(rightMotor2, LOW);

    delay(sicrama_zamani);
    duz();
    }

    uzunluk_okumak++;
    }

    replay();

    }

    void son_hareket() {
    Serial.print(oku_sol_orta);
    Serial.print(" ");
    Serial.print(oku_sol_yakin);
    Serial.print(" ");
    Serial.print(oku_sol_uzak);
    Serial.print(" ");
    Serial.print(oku_sag_orta);
    Serial.print(" ");
    Serial.print(oku_sag_yakin);
    Serial.print(" ");
    Serial.println(oku_sag_uzak);
    digitalWrite(sag_led, HIGH);
    digitalWrite(sol_led, HIGH);
    son_hareket();
    }



  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.