İçindekiler:
- Adım 1: Malzemeler ve Malzemeler:
- Adım 2:
- Adım 3: "Bahçenizi" Birleştirme
- Adım 4: Kodu Yazma
- Adım 5: Kodu Kopyalayın
Video: Bahçe Yardımcısı Roomba Bot: 8 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Kiara Myers, Ahmad Alghadeer ve Madison Tippet
Amaç:
Bu talimat size, MATLAB kullanarak bir bahçede gezinmek ve boyutlarına göre toplanacak kadar olgun olan dairesel şekilli meyveleri/sebzeleri tespit etmek için bir Roomba Bot'u nasıl programlayacağınızı öğretecektir. Bu robot ayrıca size kaç tane meyvenin toplanmaya hazır olduğunu ve gittiği yolu bildiren bir e-posta gönderir.
Özellikleri:
- Duvarları algılamak için ışık sensörleri kullanır ve onlara çarpmamak için hafifçe döner
- Bahçenin sonundaki kayaya çarptığında programı bozmak için çarpma sensörleri kullanır
- Bahçedeki bir daireyi algılamak ve ardından yarıçapını belirlemek için görüntü işlemeyi kullanır
- Bir meyvenin varlığını gösteren renkli bir bandı algılamak için uçurum sensörlerini kullanır
Adım 1: Malzemeler ve Malzemeler:
- Bir Dizüstü Bilgisayar
- MATLAB 2017
- Roomba Elektrikli Süpürge
- Ahududu Pi
- Tahta blokları
- Beyaz kağıt
- Siyah kağıt
- Renkli bant/ince renkli kağıt şeridi
- Büyük kaya
Adım 2:
Adım 3: "Bahçenizi" Birleştirme
- Siyah kağıdınızı alın ve çeşitli boyutlarda daireler kesin
-
Bu siyah daireleri büyük beyaz bir kağıda bantlayın.
Bu kontrast, bir meyve tespit edilirken gerekli olacaktır
-
Robotunuzun gezinmesi için labirent benzeri bir bahçe yolu oluşturmak için tahta bloklarınızı kullanın
Yukarıda gösterildiği gibi U şeklinde bir yol seçtik
- Bahçenizin sonuna, robotunuzun bittiğini anlaması için bir kaya, kapı veya başka bir nesne ekleyin.
-
Beyaz kağıdınızı daire ile bahçenin duvarlarına bantlayın
Duvarlarımız kamera için çok kısa olduğu için bantlamak için kovalar kullandık
- Meyvenin önüne renkli bant/ince renkli kağıt şeritleri yere koyun.
Adım 4: Kodu Yazma
Bahçede Gezinmek
Bump Sensörlerini Kullanma: Programı çalıştırmak için, kodlamayı, kod bozulana kadar çeşitli if ifadeleri arasında dolaşan bir while ifadesine yerleştiririz. Tamponlardan herhangi biri vurulursa, değerleri true değerine eşit olur (Boolean'da 1 değeridir). Değerlerinden biri 1'e eşit olduğunda kodu kırmak için if ifadesi kullanılır.
Uçurum Sensörlerini Kullanma: while deyimi içinde, Roomba'ya bir bitkinin bulunduğu yere ne zaman ulaştığını söylemek için bir if deyimi kullanırız. Roomba, uçurum sensörlerinin algıladığı kırmızı eşiği inceleyerek zemindeki renkli bandı algılar. Sol veya sağ uçurum sensörü, zeminden daha büyük bir eşiği olan bir renk algılarsa, robotu 2 saniyeliğine durdurur (duraklatma komutunu kullanarak). Bu 2 saniye boyunca Roomba meyvenin bir görüntüsünü alacak ve gösterecektir. Komutta yerleşik imfindcircles'ı kullanarak çevrelerinizin yarıçapı için bir aralık belirleyin ve Roomba'nız sözde meyvenizi bulacaktır.
Görüntü İşlemeyi Kullanma: if ifadesinin içine, şunu söyleyen başka bir if ifadesini yerleştiririz: yarıçap tespit edilirse, yarıçap3, olgun bir meyve için minimum gereksinimimiz olan r1'e eşit veya bundan büyükse (buna siz karar verirsiniz), sonra sayın ve görüntüleyin Roomba kaç meyve hazır ve bahçeden devam etmek için dönüyor. Değilse, sıra bahçeden devam edin. Not: Her Roomba farklı olduğundan döndüğünüz açıyı ayarlamanız gerekebilir.
Işık Tamponlarının Kullanılması: Başka bir if ifadesinde, ışık tamponlarının hiçbirinin bizim belirlediğimiz eşiği aşmadığından emin olmak için analiz edilir. Sol, sağ, sol orta, sağ orta, sol ön veya sağ ön ışık tamponu eşiğin üzerine çıkarsa, Roomba duvara çarpmamak için uygun açıda hafifçe dönecektir. Bu nedenle, labirentte gezinmek.
Kodun geri kalanı, Roomba tarafından alınan yolu çizmek ve ardından sonuçları e-postanıza göndermek için kullanılır.
Adım 5: Kodu Kopyalayın
% Amaç: Roomba boyutlarına göre bir bahçeden geçecek ve toplanmaya hazır sebze/meyveleri ayırt edecektir. % Girişler: Işık çarpması sensörleri, Uçurum sensörleri, Çarpma sensörleri, kameradan görüntü % Çıkışlar: Işık sensörleri eşikten büyük olduğunda, roomba döner ve bir resim çeker, % sebze/meyve yarıçapı belirli bir aralık arasındaysa bip sesi çıkarır. Roomba bir nesnenin %'sine çarptığında kod kırılır, astronota kaç tane meyvenin % toplanmaya hazır olduğuna dair bir e-posta ve roomba'nın hareketinin bir haritasını gönderir. % Kullanım: If ve while ifadeleri, çizim komutları, MATLAB'dan e-posta kodu
k=0
tik
timerVal=tic
doğru iken
v=.2; % hız r.setDriveVelocity(v, v);%roomba ileri git L=r.getLightBumpers; LC=L.leftCenter; Rr=L.sağ; Lf=L.sol; RC=L.sağMerkez; LF=L.solÖn; RF=L.sağÖn; Q= 75; % eşik. RTH=30; %Yüksek kırmızı eşik RTL=10; %Düşük kırmızı eşik B=r.getBumpers S=r.getCliffSensors; r1=24; r3=10; PL1=1800; eğer S.leftFront > PL1 || S.rightFront > PL1 %, zemindeki rengin eşiğin üzerinde olup olmadığını algılar r.durdur duraklama(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % 2 saniye duraklama img = r.getImage; %resmi al imshow(img)%görüntü göster [centers3, radii3] = imfindcircles(img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = iç çemberler(merkezler3, yarıçap3); Eğer yarıçap3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime ise resimde belirtilen aralıkta yarıçaplı daireleri arayın, sonra Roomba bu meyveyi sayar elseif radii3<=r3 T=0 else T=0 dist2=0.2.*elapsedTime %Değilse, meyve sonunu saymaz
if T==1 r.setLEDDigits(num2str(k)) r.bip r.bip r.bip r.turnAngle(78) %Eğer bir meyve algılanırsa, Roomba'da sayıyı görüntüleyin, %ses çıkar ve çevirin elseif T==2 r.turnAngle(78) %2 meyve tespit edilirse, %bahçe'den devam etmek için dönün else r.turnAngle(78) %Eğer meyve tespit edilmezse, %bahçe sonundan devam etmek için çevirin eğer LC >Q r.stop r.turnAngle(-7) elseif RC >Q r.stop r.turnAngle(7) elseif LF >Q r.stop r.turnAngle(-7) elseif RF >Q r.stop r. turnAngle(7) elseif Lf > Q r.stop r.turnAngle(-7) elseif Rr >Q r.stop r.turnAngle(7) end % Işık tamponlarının değerlerinden herhangi biri eşiğin üzerine çıkarsa, % Roomba duvara çarpmamak için uygun yönde hafifçe dönecektir
eğer B.sağ ==1 || B.sol==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Eğer bunlardan herhangi biri bumbers vurulur, sonra oda sesi çalar, döner, % ve kodu kırar
ara sonu
bitiş dağılım(0.533, 0, '^') dağılımda beklet(0.533, dist1, '<') dağılımda bekle(-dist2, dist1, 'v') dağılımda bekle(-dist2, 0, 'd') saveas (gcf, 'Hareket.png')
kmsg=num2str(k) mail= '[email protected]' password='Srsora123#' host='smtp.gmail.com' port='465'
setpref('İnternet', 'E_posta', posta); setpref('Internet', 'SMTP_Server', ana bilgisayar) sahne = Java.lang. System.getProperties; props.setProperty('mail.smtp.user', mail); props.setProperty('mail.smtp.host', host); props.setProperty('mail.smtp.port', port); props.setProperty('mail.smtp.starttls.enable', 'true'); props.setProperty('mail.smtp.debug', 'true'); props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.port', port); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.fallback', 'yanlış'); sendmail(mail, 'Merhaba Astronot! Bahçede bu kadar meyve var', kmsg, {'movement.png'})
Önerilen:
Kendin Yap Hava Durumu Yardımcısı: 6 Adım
DIY Hava Durumu Yardımcısı: En son ESP32'yi mevcut hava durumunu yayınlayabilen bir hava durumu yayın istasyonu yapmak için kullandım. İlgileniyorsanız, önceki talimatı kontrol edebilirsiniz. Şimdi güncellenmiş bir versiyon yapmak istiyorum, kontrol etmek için bir şehir belirleyeceğim
DIY Toner Koyulaştırıcı (toner Yardımcısı): 6 Adım
Kendin Yap Toner Koyulaştırıcı (toner Yardımcısı): Son zamanlarda, boya incelticilerinin toner yardımcısı (toner koyulaştırıcı) yerine kullanılabileceğini keşfettim. Bu DIY toner koyulaştırıcının maliyeti, piyasada bulunan çözümlerden 10 kat daha düşüktür ve basılı şablon kontrastını büyük ölçüde artırabilir. süreçler
Miller's Hollow'un Kurt Adamları (狼人殺) Devre Yardımcısı: 4 Adım
The Werewolves of Miller's Hollow (狼人殺) Circuit Helper: Bu proje The Werewolves of Miller's Hollow oynamayı sevenler için yapılmıştır ve bu kutu 8 kişilik, üç kurt adam, iki köylü ve üç özel rol ile oynamak için kullanılmaktadır. (Seer, Cadı ve Avcı). Bu kutunun yerine
Breadboard Tel Yardımcısı: 10 Adım (Resimlerle)
Breadboard Wire Helper: Bu talimat, breadboard prototiplemeyi daha kolay ve daha düzenli hale getirmeye yardımcı olacak bir aracın nasıl oluşturulacağını gösterir. Ben buna Breadboard Wire Helper diyorum
En İyi Elektronik Yardımcısı -- Yardımcı Ellerle Değişken Tezgah Üstü PSU: 12 Adım (Resimlerle)
En İyi Elektronik Yardımcısı || Yardımcı Ellere Sahip Değişken Tezgah Üstü PSU: Elektronikle çalışırken hemen hemen her zaman iki araca ihtiyaç vardır. Bugün bu iki temel öğeyi oluşturacağız. Ayrıca bir adım daha ileri götürüp bu ikisini nihai elektronik yardımcısında bir araya getireceğiz! Elbette bundan bahsediyorum