Ana Sayfa Arduino Arduino ile Temizlik Robotu Yapımı

Arduino ile Temizlik Robotu Yapımı

12 min read
3
0
1,116

Öncelikle bu projenin basit ve yapımı kolay bir proje olduğunu belirterek başlamalıyım. Projeye başlamadan önce bazı tavsiyelerde bulunacağım. Öncelikle projede kullanacağınız sensörleri , motorları , modülleri bread-board yardımı ile test ediniz. Örneğin; l293n motor sürücüsünü kullanarak motorları pwm ile sürmeyi, daha sonra sensörler ile mesafe ölçmenin mantığını öğrenmelisiniz. Öğrendiğiniz iki durumu koşul ifadeleri ile kodlamayı deneyiniz. Board üzerinde yaptığınız temel testlerden sonra tasarım ve kodlama mantığı hayal gücünüze kalıyor.

Projede Kullanılan Malzemeler:

Aletler:

Arduino nano kullanmamızın sebebi , küçük ve bizim işimizi görecek kadar pin sayısına sahip olmasıdır. Alternatif olarak da uno kullanabilirsiniz ama dediğim gibi küçük olması yararınıza olacaktır. Dört adet motor kullanmamıza rağmen sadece 2 motorun hızlarını ve yönlerini kontrol edeceğimiz için L293N motor sürücüsü bize yeterli olacaktır. Modül üzerinde bulunan soğutucu blokta motor sürücülerinin aşırı ısınmasını engelleyerek uzun süre çalışmasını sağlamaktadır.

Ön taraftaki motorlar ve fan direk olarak bataryaya bağlanmalı, motorların dönüş yönü aşağıdaki gibi olmalıdır. (+,- bağlantı şeklini değiştirerek dönüş yönlerini değiştirebilirsiniz.)

Birazda kasanın yapımından bahsedeyim. Kasa için plastik ekmek kabı kullanıldı.Çünkü ucuz ve istediğim ölçülerdeydi. Ancak zamanla kutunun esnediğini fark ettim. Bu sebepten dolayı esnemeyen veya içini metal bir iskeletle destekleyeceğiniz bir gövde yapın. Kutuyu delme ve kesme işleri için bıçak falçata vs. yerine havya kullanırsanız daha rahat olacaktır. Bu işler için ayrı bir havyanız yoksa bir parça teli ısıtarak da kullanabilirsiniz. Zira lehim yaptığınız havya ile plastik eritmek havyanıza zarar verir. Yapıştırma işlemler için de sıcak silikon ve bazı sabitleme işleri için de kablo bağları kullanıldı.

Kasanın yapımında dikkat etmeniz gereken bir nokta da sarhoş tekerin ve yön tekerlerinin(arkadaki tekerler) yüksekliğidir. Bu yüksekliği iyi ayarlarsanız hem halıda hem de fayans üzerinde rahatça çalışacaktır.

Vakum kısmında ise normal elektrikli süpürgelerdeki sistemin aynısı kullanıldı. Yani fanın önüne koyulan tül parçasına tozlar yapışıyor, çöpler ise haznede birikiyor. gövdenin alt tarafından küçük bir delik açıp motorunuzun gücüne göre açtığınız yeri genişletirsiniz veya dudak ekleyebilirsiniz. Burada dikkat etmeniz gereken 2 husus var. Fan hesabı notlarını incelerseniz, yaptığınız vakumlama sisteminde olabildiğince az dirsek kullanılmalı ve gövde altına açtığınız deliği küçük tutmaya özen gösterin yani acele etmeden küçük bir delik ile motor gücüne göre genişletmelisiniz.

Kullanacağınız jumperler, kablo bağları ve bread-board sizi lehimleme işinden kurtaracaktır.

 

Önemli olan bir diğer noktada L293N modulünün kullanımı. Bu modülün kullanımı kolaydır ancak dikkat edeceğiniz nokta enable pinleridir. Eneable A ve B pinleri normalde 5v kısadevredir ancak biz buraya pwm vererek motorun hız kontrolünü sağlayabiliriz.

Devre Şeması

Arduino Kodları


// Made by Fatih Mehmet Yılmaz
//ön

int trigPin = 5;
int echoPin = 4;
 //sağ
int trigPin2 = 13;
int echoPin2 = 6;
//sol
int trigPin3 = 8;
int echoPin3 = 7;

// motor 1
int enA = 9;//ok
int in1 = 2;
int in2 = 10;
// motor 2
int enB = 3;//ok
int in3 = 11;
int in4 = 12;

void setup()
{
Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);

  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);

  pinMode(9,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(3,OUTPUT);

   pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  }

void loop()

{
//sistemin 3saniye gecikmeli başlaması için
  do {delay(3000);}
  while(0);

//ön------------------------------------------------------------------

int duration, distance;
    digitalWrite (trigPin, HIGH);
    delayMicroseconds (10);
    digitalWrite (trigPin, LOW);
    duration = pulseIn (echoPin, HIGH);
    distance = (duration/2) / 29.1;

    Serial.print("sag sensor:");
      Serial.print(distance);   
      Serial.print("cm");
      Serial.println();
  //sağ-------------------------------------------------------------------

int duration2, distance2;
    digitalWrite (trigPin2, HIGH);
    delayMicroseconds (10);
    digitalWrite (trigPin2, LOW);
    duration2 = pulseIn (echoPin2, HIGH);
    distance2 = (duration2/2) / 29.1;

    Serial.print("sag sensor:");
      Serial.print(distance2);   
      Serial.print("cm");
      Serial.println();
  //sol------------------------------------------------------------------

 int duration3, distance3;
    digitalWrite (trigPin3, HIGH);
    delayMicroseconds (10);
    digitalWrite (trigPin3, LOW);
    duration3 = pulseIn (echoPin3, HIGH);
    distance3 = (duration3/2) / 29.1;

    Serial.print("sag sensor:");
      Serial.print(distance3);   
      Serial.print("cm");
      Serial.println();
     //------------------------------------------------------------------

      // Motorlar sabit hızda aynı yöne dönüyorlar.
  // sol motor ileri
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  // Motor 1 için 0~255 arasında bir hız değeri verelim. 255 en üst sınır
  analogWrite(enA, 100);
  // sağ motor ileri
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  // Motor 2 için 0~255 arasında bir hız değeri verelim. 255 en üst sınır
  analogWrite(enB, 100);
  delay(2000);

  //-------------------KOŞUL BLOĞU----------------------
      if(distance<10 && distance >4)//ön sensör
      {
        //motorlar durduruluyor
        digitalWrite(in1, LOW);
         digitalWrite(in2, LOW);  
        digitalWrite(in3, LOW);
        digitalWrite(in4, LOW);  

        delay(750);//bir üst fonksiyonun çalışma süresi
        
         // motorlar geriye dönüyor
         digitalWrite(in1, LOW);
         digitalWrite(in2, HIGH);  
         digitalWrite(in3, LOW);
         digitalWrite(in4, HIGH);

         delay(1750);//bir üst fonksiyonun çalışma süresi

         digitalWrite(in1, HIGH);
         digitalWrite(in2, LOW);

         delay(1750);//bir üst fonksiyonun çalışma süresi

      }
        //----------------------------------------------------
      if(distance2<7 && distance2 >4)//sağ sensör
      {
        //sol motor
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      analogWrite(enA, 200);

      //sağ motor
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      analogWrite(enB, 130); // sağ motorun hızı arttırıldı

      delay(1500);
      }

      //------------------------------------------------------
      if(distance3<7 && distance3 >4)//sol sensör
      {

      //sol motor
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      analogWrite(enA, 130);// sol motorun hızı arttırıldı

      //sağ motor
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      analogWrite(enB, 100); 

      delay(1500);
      }

      }
      //---------------------------------------------------
      
      
      




Projenin Çalışma Videosu

 

 

Sakarya Üniversitesi  Mekatronik Mühendisliği Öğrencisi

Fatih Mehmet Yılmaz (https://www.facebook.com/fmyilmazz)

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Konuk Yazar
Daha Fazla Göster -  Arduino

3 Yorumlar

  1. hamza

    27 Temmuz 2017 at 12:42

    acaba bu projede rastgele değilde daha akıl katma adına temizlediği alandan bir daha geçmemesi adına nasıl bir algoritma ekleyebiliriz.

    Reply

  2. fatih

    30 Temmuz 2017 at 22:33

    duvar takip ekledim ama gittiği yeri hafızasında tutup bidaha gitmeme üzerine çalışılabilir.

    Reply

  3. […] 2 hafta önce Arduino ile Temizlik Robotu Yapımı […]

    Reply

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

PLC Ve DCS Arasındaki Farklar Nelerdir?

PLC ile DCS arasındaki farkları daha rahat kavrayabilmemiz için ilk önce bu iki kavramı iy…