İçindekiler:
- Gereçler
- Adım 1: Her Şeyi Ayarlamak
- 2. Adım: Otto ile Nasıl Arayüz Yapılacağını Anlamak
- Adım 3: Boşlukları Doldurmak
- Adım 4: Otto Dansı Yapmak
Video: Durum Makinalı Arduino Otto Robot: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
Projeye Genel Bakış
Bu projede sizlere Arduino tabanlı bir kendin yap robotu olan Otto Robot'u programlamanın bir yolunu göstermek istiyorum. YAKINDU Statechart Tools'u (ticari olmayanlar için ücretsiz) kullanarak, Otto Robot'un davranışını grafiksel olarak modellemek ve C/C++ kodu oluşturmak için durum makinelerini kolayca kullanabiliriz. Davranışı beğenimize genişletmek için örneklerinden birini kullanacağız.
Durum makinesinin ne olduğunu bilmeyen ve karmaşık Wikipedia makalesini karıştırmak istemeyen insanlar için işte küçük bir açıklama:
Durum makinesi sadece düğümler ve bu düğümler arasındaki yollardır. Bir başlangıç düğümünüz var ve korumalarına bağlı olarak olaylarla temsil edilebilen diğer düğümlere giden yolları kullanabilirsiniz. Bu olaylar ya durum makinesinin kendisinden ya da dışarıdan (bir fonksiyon gibi, vb.)
Aracın kendisi bir sürükle ve bırak arayüzü ve alana özgü bir dil kullanır. Bunu sizin için gözden geçireceğim, böylece Otto'nuzu çalışır duruma getirmek için belgelerini incelemenize gerek kalmaz. IDE'yi kurmak çok zor değil çünkü tüm eklentiler vb. otomatik olarak kurulmalıdır.
Gereçler
Otto Robot veya Zowi Robot
Bu robotların ikisi de temelde aynı şeyi yapar ve aynı API'yi kullanır. Otto Robot, parçaları çevrimiçi olan, elinizde varsa bir 3D yazıcı ile basılmaya hazır bir DIY robottur. Alternatif, çevrimiçi olarak satın alınabilen ve kullanıma hazır olan Zowi Robot'tur.
YAKINDU Durum Çizelgesi Araçları
Durum makinesini modellemek için kullanacağımız araç. 30 günlük bir deneme ile başlayabilir ve daha sonra ticari olmayan kullanım için ücretsiz bir lisans alabilirsiniz.
Arduino Eklentisi için Eclipse C++ IDE
IDE bizim için yaptığı için manuel olarak indirmemize gerek yok. Yine de burada listelemenin iyi olacağını düşündüm.
Adım 1: Her Şeyi Ayarlamak
IDE'yi kurduktan sonra çalıştırın ve bilgisayarınızın herhangi bir yerinde bir çalışma alanı kurun (kurulum Eclipse'i ilk kez kullanmakla aynıdır). Program tam olarak başladığında, hoş geldiniz sayfasını tıklayın ve 'Dosya -> Yeni -> Örnek…' üzerine tıklayın ve ardından 'YAKINDU Statechart Örnekleri'ni seçin, biraz bekleyin ve "Gömülü Sistemler -> Zowi (C++) öğesini arayın.)" örnek.
ÖNEMLİ: 'Bağımlılıkları Yükle…' adlı sağ üstteki düğmeye tıklayın! Bu sizin için her şeyi yükler, böylece Kitaplıklar, Eklentiler ve benzerleri hakkında endişelenmenize gerek kalmaz. Örneği indirin, "Gömülü Sistemler -> Zowi (C++)" örneğindeki talimatları izleyin ve ardından bir sonraki adıma geçin.
2. Adım: Otto ile Nasıl Arayüz Yapılacağını Anlamak
".sct" dosyasına gidin ve durum makinesini beğeninize göre düzenleyin. Sağda, mevcut tüm öğeleri içeren bir menü var. Biz sadece durumlar ve geçişlerle ilgileniyoruz.
Resimde geçişlerin üzerine bir şeyler yazdığımı görüyorsunuz; "X s'den sonra" oldukça açıklayıcıdır ve "her zaman" sadece, Devletin kodunu bitirdikten hemen sonra oraya gittiği anlamına gelir. "Giriş /", kodun duruma girildikten hemen sonra yürütülmesi gerektiği anlamına gelir.
IDE, durum makinesini Arduino uyumlu olan C++ ile derler. Otto'nun özelliklerini kullanmak için, arayüze erişmek için kendimiz biraz çalışmamız gerekiyor.
Durum makinesinin kullanması için öğeleri tanımlamak için aşağıdaki anahtar sözcükler kullanılabilir:
değerleri tutan ve değiştirilemeyen sabitler
değerleri tutan ve değiştirilebilen değişkenler
uygulama için sanal C++ yöntemlerine oluşturulacak işlemler
arayüz:
sabit PIN_YL: tamsayı = 2 sabit PIN_YR: tamsayı = 3 sabit PIN_RL: tamsayı = 4 sabit PIN_RR: tamsayı = 5 sabit ses: tamsayı = 2 sabit ağız_kalp: tamsayı = 13 sabit ağız_mutluOpen: tamsayı = 11 işlem zowi_init(YL, R): tamsayı, RL: tamsayı, RR: tamsayı) işlemi zowi_home() işlemi zowi_putMouth(ağızTipi: tamsayı) işlemi zowi_sing(şarkıAdı: tamsayı) işlemi zowi_walk(adımlar: gerçek, T: tamsayı, yön: tamsayı) işlemi zowi_sha
Profesyonel İpucu: Bir yere ne gireceğinizi bilmiyorsanız veya bir hata var gibi görünüyorsa, girebilecekleriniz hakkında bazı ipuçları almak için "ctrl+boşluk" tuşlarına basın.
Ek olarak, örneklere bakmalısınız, orada da bazı kodlar var! Bunları, şu anda ilgilendiğimiz tek kısım olan modeli düzenlemek için bir yapı olarak da kullanabilirsiniz.
Adım 3: Boşlukları Doldurmak
Modeldeki bazı şeyleri değiştirdikten sonra "zowiSCT.sgen -> Generate Code Artifacts" üzerine sağ tıklayabilirsiniz. Bu, C++'da, durum makinesinde "src-gen" klasörüne bildirilen ve daha sonra normal C++ kullanarak uyguladığımız sanal işlevleri oluşturur.
Otto'dan istediğimiz işlevselliği elde etmek için bu iki dosyayı "src" klasöründe oluşturmanız yeterlidir.
İlk olarak Impl.h
#ifndef SRC_IMPL_H_
#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" sınıfı Impl: public ZowiSCT::DefaultSCI_OCB{ public: Impl(); sanal ~Impl(); void zowi_init(sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); geçersiz zowi_home(); void zowi_putMouth(sc_integermouthType); void zowi_sing(sc_integer şarkıAdı); void zowi_walk(sc_real adımlar, sc_integer T, sc_integer dir); geçersiz zowi_shakeLeg(); }; #endif /* SRC_IMPL_H_ */
Daha sonra Impl.cpp
#include "Impl.h"
#include "../Zowi/Zowi.h" Zowi zowi = new Zowi(); Impl::Impl() {} Impl::~Impl() {} void Impl::zowi_home() { zowi.home(); } void Impl::zowi_init(sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR) { zowi.init(YL, YR, RL, RR); } void Impl::zowi_putMouth(sc_integer ağızTürü) { zowi.putMouth(ağızTürü); } void Impl::zowi_sing(sc_integer şarkıAdı) { zowi.sing(şarkıAdı); } void Impl::zowi_walk(sc_real adımlar, sc_integer T, sc_integer dir) { zowi.walk(adımlar, T, dir); } geçersiz Impl::zowi_shakeLeg() { zowi.shakeLeg(); }
Adım 4: Otto Dansı Yapmak
Ürününüzden memnun kaldığınızda sol üstteki çekicin üzerine tıklayın ve işlemin bitmesini bekleyin. Ardından çekicin sağındaki yeşil oka tıklayın ve Otto dansını görün!
Dilerseniz başka örneklere de göz atabilirsiniz: YAKINDU Statechart Tools
Önerilen:
Kendi Kendine Öğrenen Labirent Yengeç Robot PROTOTİP 1 DURUM EKSİK: 11 Adım
Kendi Kendine Öğrenen Labirent Yengeç Robot PROTOTİP 1 DURUM EKSİK: SORUMLULUK REDDİ!!: Merhaba, kötü resimler için özür dilerim, daha sonra daha fazla talimat ve diyagram ekleyeceğim (ve daha spesifik ayrıntılar. Süreci belgelemedim (bunun yerine az önce yaptım). hızlandırılmış video) Ayrıca bu talimat eksik, benim yaptığım gibi
Lastik Bant Makinalı Tüfek, Kızılötesi Algılama, TV DEFENDER ROBOT: 5 Adım (Resimlerle)
Lastik Bant Makineli Tüfek, Kızılötesi Algılama, TV DEFENDER ROBOT: Hiçbir entegre devre kullanmadan, bu robot standart bir TV uzaktan kumandasından bir kızılötesi sinyal bekler ve ardından hızla bir dizi lastik bant ateşler. Not: "Masaüstü sitesini" Görüntüle/İstek; videoyu görmüyorsanız. Sorumluluk Reddi: Bu proje
Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı: 6 Adım (Resimli)
Arduino'da Durum Makinesi - Bir Yaya Trafik Işığı: Merhaba!Arduino için C++'da bir sonlu durum makinesi ile YAKINDU Statechart Araçlarını kullanarak bir yaya trafik ışığının nasıl programlanacağını göstereceğim. Bu, durum makinelerinin gücünü gösterecek ve daha fazlası için bir plan olarak kullanılabilir
Sonlu Durum Makinesi Kullanan Arduino Üzerindeki Dijital Saat: 6 Adım
Arduino'da Sonlu Durum Makinesi Kullanarak Dijital Saat: Merhaba, YAKINDU Statechart Tools ile bir dijital saatin nasıl oluşturulabileceğini ve LCD Tuş Takımı Kalkanı kullanan bir Arduino'da nasıl çalıştırılacağını göstereceğim.Dijital saatin orijinal modeli saat David Harel'den alınmıştır. Hakkında bir makale yayınladı
Acil Durum Güç Bankası - DIY Araç Kutusu Solar: Radyo+ Şarj Cihazı+ Acil Durum için Işık!: 4 Adım
Acil Durum Güç Bankası - Kendin Yap Araç Kutusu Solar: Radyo+ Şarj Cihazı+ Acil Durum için Işık!: Ekle 28 Mart 2015: Alet kutumu acil durumlar için yaptım ve şimdi şehrim çamura gömüldüğü için kullanıyorum. Tecrübe olarak telefon şarj etmek ve radyo dinlemek için hizmet ettiğimi söyleyebilirim. Eski bir alet çantası mı? eski bir bilgisayar hoparlörü? kullanılmayan 12 voltluk bir pil mi? Yapabilirsiniz