- Arduino Tabanlı Zemin Temizleme Robotu Yapmak İçin Gerekli Malzemeler
- Taşınabilir Elektrikli Süpürge
- HC-SR04 Ultrasonik Sensör Modülü
- Merdiven Algılama için Zemin Sensörü (IR Sensörü)
- Arduino Tabanlı Zemin Temizleyici Robot Devre Şeması
- Arduino Tabanlı Zemin Temizleme Robotu için Devre Oluşturma
- Arduino
Günümüz senaryosunda, hepimiz işimizle o kadar meşgulüz ki, evimizi düzgün bir şekilde temizlemek için zamanımız yok. Sorunun çözümü çok basit, sadece irobot roomba gibi evinizi bir düğmeye basarak temizleyecek bir ev tipi elektrikli süpürge robotu satın almanız gerekiyor. Ancak bu tür ticari ürünler ortak bir sorun olan maliyettir. Bu yüzden bugün, basit bir Zemin temizleme robotu yapmaya karar verdik , bu sadece yapımı basit değil , aynı zamanda piyasada bulunan ticari ürünlere kıyasla çok daha düşük maliyetli. Sık okuyucular, uzun zaman önce yaptığımız Arduino Vakum Temizleme Robotumuzu hatırlayabilir, ancak bu çok hantaldı ve hareket etmek için büyük bir kurşun asit bataryaya ihtiyaç duyuyordu. Yeni Arduino Elektrikli Süpürge burada inşa edeceğimiz kompakt ve daha pratik olacak. Bunun da ötesinde, bu robotta ultrasonik sensörler ve bir IR yakınlık sensörü olacak. Ultrasonik sensör, robotun engellerden kaçınmasına olanak tanıyacak, böylece oda uygun şekilde temizlenene kadar serbestçe hareket edebilecek ve yakınlık sensörü merdivenlerden düşmesini önlemeye yardımcı olacaktır. Tüm bu özellikler kulağa ilginç geliyor, değil mi? Öyleyse başlayalım.
Önceki yazılarımızdan birinde Kendinden Dengeleyici Robot, Otomatik Yüzey Dezenfeksiyon Robotu ve Engelden Kurtulma Robotu gibi birçok bot yaptık. Size ilginç geliyorsa bunları kontrol edin.
Arduino Tabanlı Zemin Temizleme Robotu Yapmak İçin Gerekli Malzemeler
Elektrikli süpürge robotunun donanım bölümünü oluşturmak için çok genel bileşenler kullandığımız için, bunların hepsini yerel hobi mağazanızda bulabilmelisiniz. İşte tüm bileşenlerin görüntüsü ile birlikte gerekli malzemenin tam listesi.
- Arduino Pro Mini - 1
- HC-SR04 Ultrasonik Modül - 3
- L293D Motor Sürücüsü - 1
- 5 Volt N20 Motorlar ve Montaj Braketleri - 2
- N20 Motor Tekerlekleri - 2
- Anahtar - 1
- LM7805 Voltaj Regülatörü - 1
- 7.4V Lityum İyon Pil - 1
- IR Modülü - 1
- Perfboard - 1
- Castor Wheel - 1
- MDF
- Jenerik Taşınabilir Elektrikli Süpürge
Taşınabilir Elektrikli Süpürge
Bileşen gereksinimi bölümünde portatif bir elektrikli süpürgeden bahsettik , aşağıdaki görseller tam olarak bunu gösteriyor. Amazon'dan taşınabilir bir elektrikli süpürgedir. Bu çok basit bir mekanizma ile geliyor. Altta üç parçadan oluşur (küçük bir bölme tozu depolamak için, orta kısımda motor, fan ve üstte pil yuvası bulunur (pil için bir kapak veya kapak vardır) DC motor ve Bir fan. Bu motor, basit bir anahtarla doğrudan 3V'ye (2 * 1.5volt AA piller) bağlanmıştır. Bu yüzden gereksiz tüm parçaları çıkardık ve sadece iki telli motor kaldı, bunu aşağıdaki resimde görebilirsiniz.
HC-SR04 Ultrasonik Sensör Modülü
Engelleri tespit etmek için popüler HC-SR04 ultrasonik mesafe sensörünü kullanıyoruz veya buna engellerden kaçınma sensörleri diyebiliriz. Çalışması çok basittir, önce verici modülü havada hareket eden, bir engele çarpan ve geri seken bir ultrasonik dalga gönderir ve alıcı bu dalgayı alır. Arduino ile zamanı hesaplayarak mesafeyi belirleyebiliriz. Arduino Tabanlı Ultrasonik Mesafe Sensörü projesi ile ilgili bir önceki yazımızda bu sensörün çalışma prensibini çok detaylı bir şekilde tartışmıştık. HC-SR04 ultrasonik mesafe sensörü modülü hakkında daha fazla bilgi edinmek isterseniz bunu kontrol edebilirsiniz.
Merdiven Algılama için Zemin Sensörü (IR Sensörü)
Özellikler bölümünde robotun merdivenleri algılayabildiği ve düşmesini engelleyebildiği bir özellikten bahsettik. Bunu yapmak için bir IR Sensörü kullanıyoruz. IR sensörü ile Arduino arasında bir arayüz oluşturacağız. Çalışma IR Proximity Sensor bunun bir IR LED ve bir fotodiyot, IR LED yaydığı kızılötesi ışığı vardır ve herhangi bir engel bu yayılan ışığın önüne gelirse, o yansıyacak, çok basit ve yansıyan ışık tespit edilecek fotodiyot tarafından. Ancak yansımadan üretilen voltaj çok düşük olacaktır. Bunu artırmak için bir op-amp karşılaştırıcı kullanabiliriz, büyütebilir ve çıktı alabiliriz. Bir IR modülüüç pime sahiptir - Vcc, toprak ve çıktı. Genellikle, sensörün önüne bir engel geldiğinde çıkış düşer. Yani bunu zemini tespit etmek için kullanabiliriz. Kısa bir saniye için sensörden bir yükseklik tespit edersek, robotu durdurabilir, geri döndürebilir veya merdivenden düşmesini önlemek için istediğimiz her şeyi yapabiliriz. Bir önceki yazımızda IR Proximity Sensör Modülünün Breadboard versiyonunu yapmıştık ve çalışma prensibini detaylı bir şekilde anlatmıştık, bu sensör hakkında daha fazla bilgi almak isterseniz kontrol edebilirsiniz.
Arduino Tabanlı Zemin Temizleyici Robot Devre Şeması
Engelleri algılayan üç ultrasonik sensörümüz var. Bu nedenle, ultrasonik sensörlerin tüm topraklarını bağlamamız ve bunları ortak zemine bağlamamız gerekiyor. Ayrıca, sensörün üç Vcc'sini de bağlarız ve bunu ortak VCC pinine bağlarız. Daha sonra tetik ve eko pinlerini Arduino'nun PWM pinlerine bağlarız. Ayrıca IR modülünün VCC'sini 5V'a ve topraklamayı Arduino'nun toprak pinine bağlarız, IR sensör modülünün çıkış pini Arduino'nun dijital pin D2'sine gider. Motor sürücüsü için 5volt motorlar kullandığımız için iki etkinleştirme pinini 5v'ye ve ayrıca sürücü voltaj pinini 5V'a bağlarız. Önceki bir makalede, bir Arduino Motor Sürücü Kalkanı yaptık, L293D Motor Sürücü IC hakkında daha fazla bilgi edinmek için bunu kontrol edebilirsiniz.ve operasyonları. Arduino, Ultrasonik modüller, motor sürücüsü ve motorlar 5 Volt üzerinde çalışıyor, yüksek voltaj onu öldürecek ve biz 7.4 voltluk pil kullanıyoruz, bunu 5 Volta çevirmek için LM7805 voltaj regülatörü kullanıyoruz. Elektrikli süpürgeyi doğrudan ana devreye bağlayın.
Arduino Tabanlı Zemin Temizleme Robotu için Devre Oluşturma
Robotum hakkında fikir edinmek için internette elektrikli süpürge robotları aradım ve yuvarlak şekilli robotların bazı resimlerini aldım. Bu yüzden yuvarlak şekilli bir robot yapmaya karar verdim. Robotun kovanını ve gövdesini oluşturmak için köpük levha, MDF, karton vb. Gibi birçok seçeneğim var. Ama MDF'yi seçiyorum çünkü sert ve bazı suya dayanıklı özellikleri var. Bunu yapıyorsanız botunuz için hangi malzemeyi seçeceğinize karar verebilirsiniz.
Robotu oluşturmak için MDF sayfasını aldım, ardından 8 CM yarıçaplı iki daire çizdim ve bu dairenin içine 4 CM yarıçaplı başka bir daire çizdimelektrikli süpürgeyi takmak için. Sonra daireleri kestim. Ayrıca, tekerlek yolu için uygun parçaları kestim ve çıkardım (daha iyi anlamak için resimlere bakın). Son olarak, tekerlek tekerleği için üç küçük delik açtım. Bir sonraki adım, motorları braketlerini kullanarak tabana yerleştirmek, ayrıca tekerlek tekerleğini yerine yerleştirmek ve sabitlemektir. Bundan sonra, ultrasonik sensörleri robotun soluna, sağına ve ortasına yerleştirin. Ayrıca, IR modülünü robotun dezavantajına bağlayın. Anahtarı dışarıya eklemeyi unutmayın. Hepsi robotu yapmakla ilgili, bu noktada kafanız karışırsa, aşağıdaki resimlere başvurabilirsiniz.
Üst kısım için de köpük levha üzerine 11 cm yarıçaplı bir daire çizip kestim. Üst ve alt kısım arasındaki boşluk için 4 cm uzunluğunda üç adet plastik tüp kestim. Daha sonra alt kısma plastik ara parçaları yapıştırdım sonra üst kısmı yapıştırdım. İsterseniz botun yan kısımlarını plastik veya benzeri malzemelerle kapatabilirsiniz.
Arduino
Bu projenin tam kodu belgenin sonunda verilmiştir. Bu Arduino kodu, Arduino Tabanlı Ultrasonik Mesafe Sensörü koduna benzer, tek değişiklik zemin algılamadır. Aşağıdaki satırlarda kodun nasıl çalıştığını anlatıyorum. Bu durumda, fazladan kitaplık kullanmıyoruz. Aşağıda kodu adım adım açıkladık. HC-SR04 sensöründen gelen mesafe verilerini çözmek için fazladan kitaplık kullanmıyoruz çünkü çok basit. Aşağıdaki satırlarda nasıl olduğunu anlattık. Öncelikle, Arduino kartına bağlı olan üç ultrasonik mesafe sensörünün tümü için Tetik Pimi ve Yankı Pimini tanımlamamız gerekir. Bu projede üç Echo pinimiz ve üç Trigger pinimiz var. 1'in sol sensör, 2'nin ön sensör ve 3'ün sağ sensör olduğunu unutmayın.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Sonra hepsi (int) tipi değişken olan mesafe için değişkenler tanımladık ve süre için (long) kullanmayı seçtik. Yine, bizde üç tane var. Ayrıca, hareketin durumunu saklamak için bir tamsayı tanımladım, bundan daha sonra bu bölümde bahsedeceğiz.
uzun süre1; uzun süre2; uzun süre3; int distanceleft; int mesafe ön; int mesafeli; int a = 0;
Ardından, kurulum bölümünde, pinModes () işlevini kullanarak tüm perspektif pinlerini giriş veya çıkış olarak yapmamız gerekir. Modülden ultrasonik dalgalar göndermek için tetikleme pimini yüksek olarak etkinleştirmemiz gerekiyor yani tüm tetikleme pinleri OUTPUT olarak tanımlamalıdır. Ve yankıyı almak için, yankı pinlerinin durumunu okumalıyız, böylece tüm yankı pinleri INPUT olarak tanımlanmalıdır. Ayrıca, sorun giderme için seri monitörü etkinleştiriyoruz. IR modüllerinin durumunu okumak için irpin'i giriş olarak tanımladım.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Ve bu dijital pinler, motor sürücüsünün girişi için OUTPUT olarak tanımlanmıştır.
pinMode (4, OUTPUT); pinMode (7, ÇIKIŞ); pinMode (8, ÇIKIŞ); pinMode (12, ÇIKIŞ);
Ana döngüde, üç sensör için üç bölümümüz var. Tüm bölümler aynı şekilde çalışır, ancak her biri farklı sensörler için. Bu bölümde, her sensörden gelen engel mesafesini okuyoruz ve tanımlı her bir tamsayıda saklıyoruz. Mesafeyi okumak için önce tetik pimlerinin temiz olduğundan emin olmalıyız, bunun için tetik pimini 2 µs için DÜŞÜK olarak ayarlamamız gerekiyor. Şimdi, ultrasonik dalgayı oluşturmak için, tetikleme pimini 10 µs için YÜKSEK döndürmemiz gerekiyor. Bu, ultrasonik sesi gönderecek ve pulseIn () işlevinin yardımıyla, seyahat süresini okuyabilir ve bu değeri değişken " süre " içinde saklayabiliriz. Bu fonksiyonun 2 parametresi vardır, ilki yankı pininin adıdır ve ikincisi için ikisinden birini yazabilirsiniz.YÜKSEK veya DÜŞÜK. YÜKSEK, pulseIn () işlevinin, zıplayan ses dalgasının neden olduğu pimin YÜKSEK gitmesini bekleyeceği ve saymaya başlayacağı, ardından ses dalgası sona erdiğinde pinin DÜŞÜK gitmesini bekleyeceği ve bu da sayımı durduracağı anlamına gelir. Bu işlev, darbenin uzunluğunu mikrosaniye cinsinden verir. Mesafeyi hesaplamak için süreyi 0,034 (havada ses hızı 340 m / s) ile çarpıp 2'ye böleceğiz (bu ses dalgasının ileri geri hareketinden kaynaklanmaktadır). Son olarak, her sensörün mesafesini karşılık gelen tam sayılarda saklıyoruz.
digitalWrite (trigPin1, DÜŞÜK); gecikme Mikrosaniye (2); digitalWrite (trigPin1, YÜKSEK); gecikme Mikrosaniye (10); digitalWrite (trigPin1, DÜŞÜK); süre1 = pulseIn (echoPin1, YÜKSEK); distanceleft = süre1 * 0,034 / 2;
Her bir sensörden mesafeyi aldıktan sonra bir if ifadesi yardımıyla motorları kontrol edebiliyor ve böylece robotun hareketini kontrol ediyoruz. Bu çok basit, önce bir engel mesafe değeri verdik, bu durumda 15cm (bu değeri dilediğiniz gibi değiştirin). Sonra bu değere göre şartlar verdik. Örneğin, sol sensörün önüne bir engel geldiğinde (bu, sol sensörün mesafesinin 15 cm'nin altında veya ona eşit olması gerektiği anlamına gelir) ve diğer iki mesafe yüksek olduğunda (bu, sensörlerin önünde hiçbir engel olmadığı anlamına gelir), daha sonra dijital yazma fonksiyonu yardımıyla motorları sağa doğru sürebiliriz. Daha sonra IR sensörünün durumunu kontrol ettim. Robot yerdeyse, IR piminin değeri DÜŞÜK olacak ve değilse, değerYÜKSEK. Sonra bu değeri int s değişkeninde sakladım . Robotu bu duruma göre kontrol edeceğiz.
Kodun bu bölümü Robotu İleri ve Geri Hareket Ettirmek için kullanılır :
eğer (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, YÜKSEK); digitalWrite (8, DÜŞÜK); digitalWrite (12, YÜKSEK); gecikme (1000); a = 1; }
Ancak motor geriye doğru hareket ettiğinde, zemin geri geldiğinde ve bot ileri doğru hareket ettiğinde bu yöntemde bir sorun var ve botu sıkıştı. Bunun üstesinden gelmek için, floor'un mevcut olmadığını anladıktan sonra int'te bir değer (1) saklarız. Bu durumu diğer hareketler için de kontrol ediyoruz.
Zeminin olmadığını tespit ettikten sonra robot ilerlemeyecektir. Bunun yerine sola hareket edecek, bu şekilde sorunu önleyebiliriz.
eğer ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && mesafe> 15 && mesafe> 15))
Yukarıdaki durumda. İlk olarak, robot kat durumunu ve tam sayı değerini kontrol edecektir. Bot, yalnızca tüm koşullar yerine getirildiğinde ilerleyecektir.
Artık motor sürücüsü için komutları yazabiliriz. Bu, sağ motoru geri ve sol motoru ileri doğru hareket ettirecek ve böylece robotu Sağa çevirecektir.
Kodun bu bölümü Robotu Sağa Hareket Ettirmek için kullanılır:
digitalWrite (4, YÜKSEK); digitalWrite (7, DÜŞÜK); digitalWrite (8, YÜKSEK); digitalWrite (12, DÜŞÜK);
Bot katın olmadığını algılarsa, değer 1 olarak değişir ve bot sola doğru hareket eder. Sola döndükten sonra, 'a' değeri 1'den 0'a değişir.
eğer ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, DÜŞÜK); digitalWrite (8, DÜŞÜK); digitalWrite (12, YÜKSEK); gecikme (100); a = 0; }
Kodun bu bölümü Robotu Sola Hareket Ettirmek için kullanılır:
eğer ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, YÜKSEK); digitalWrite (8, YÜKSEK); digitalWrite (12, DÜŞÜK); }
Arduino tabanlı Akıllı Elektrikli Süpürge Robotu oluşturmak için bu kadar. Projenin tam çalışması, bu sayfanın alt kısmında bağlantısı verilen videoda bulunabilir. Herhangi bir sorunuz varsa aşağıya yorum yapın.