📅 18 Nisan 2026, Cumartesi
📚 Ders Kitapları ✉ İletişim
@ydiner.gen.tr İlköğretim & Lise Düzeyi Kaynak Site "Bilgi paylaştıkça çoğalır"
🏠 Ana Sayfa
  • 🧊 3D Tasarım
  • Animasyon
  • ⚡ Arduino
  • 📌 Genel
  • 🎨 Grafik
  • Pardus
  • 💻 Programlama
  • Robotik ve Kodlama
  • 🗄️ SQL
  • 🌐 Web Tasarım
  • 🤖 Yapay Zeka
  • Arduino

    Arduino Çizgi İzleyen Robot

    2 Haziran 2025 aydiner ,
    // ------------------------
    // PIN TANIMLARI
    // ------------------------
    
    // Çizgi sensör pinleri
    const int solPin = 2;
    const int ortaPin = 3;
    const int sagPin = 4;
    
    // Motor kontrol pinleri (PWM destekli)
    const int ENA = 5;   // Sağ motor hız
    const int IN1 = 7;   // Sağ motor yön
    const int IN2 = 6;
    
    const int ENB = 9;   // Sol motor hız
    const int IN3 = 11;  // Sol motor yön
    const int IN4 = 10;
    
    // ------------------------
    // AYARLAR
    // ------------------------
    int motorHiziSag = 100; // Sol motor hızı (0-255)en düşük 65 olabilir
    int motorHiziSol = 100; // Sağ motor hızı (0-255)EN düşük 55
    
    void setup() {
      // Sensör pinlerini giriş olarak ayarla
      pinMode(solPin, INPUT);
      pinMode(ortaPin, INPUT);
      pinMode(sagPin, INPUT);
    
      // Motor pinlerini çıkış olarak ayarla
      pinMode(ENA, OUTPUT);
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
    
      pinMode(ENB, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
      // Seri haberleşmeyi başlat
      Serial.begin(9600);
    }
    
    void loop() {
      // Sensörlerden veri oku
      int sol = !digitalRead(solPin);
      int orta = !digitalRead(ortaPin);
      int sag = !digitalRead(sagPin);
    
      // Seri Monitör'e yazdır
      Serial.print("Sol: ");
      Serial.print(sol);
      Serial.print(" | Orta: ");
      Serial.print(orta);
      Serial.print(" | Sag: ");
      Serial.println(sag);
    
      // Sensörlere göre karar ver
      if (orta == 0 && sol == 1 && sag == 1) {
        ileri();
      } 
      else if (sol == 0 && orta == 1 && sag == 1) {
        solaDon();
      } 
      else if (sag == 0 && orta == 1 && sol == 1) {
        sagaDon();
      }
      else if (sol == 0 && orta == 0 && sag == 1) {
        sagaKeskin();
      }
      else if (sol == 1 && orta == 0 && sag == 0) {
        solaKeskin();
      }
      else if (sol == 0 && orta == 0 && sag == 0) {
        ileri(); // geniş çizgi olabilir
      } 
      else {
        dur(); // çizgi kaybolduysa
      }
    
      delay(10);
    }
    
    // ------------------------
    // MOTOR FONKSİYONLARI
    // ------------------------
    
    void ileri() {
      analogWrite(ENA, motorHiziSag);
      analogWrite(ENB, motorHiziSol);
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
    }
    
    void solaDon() {
      analogWrite(ENA, 85);  // sol yavaş
      analogWrite(ENB, 0);      // sağ normal
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
    }
    
    void sagaDon() {
      analogWrite(ENA, 0);      // sol normal
      analogWrite(ENB, 85);  // sağ yavaş
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
    }
    
    void solaKeskin() {
      analogWrite(ENA, 0);                     // sol durur
      analogWrite(ENB, 85);          // sağ döner
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
    }
    
    void sagaKeskin() {
      analogWrite(ENA, 85);          // sol döner
      analogWrite(ENB, 0);                     // sağ durur
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
    }
    
    void dur() {
      analogWrite(ENA, 0);
      analogWrite(ENB, 0);
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
    }