İçindekiler:
- Gereçler
- Adım 1: Donanım
- Adım 2: Nasıl Çalışması Gerektiğini Tanımlayın
- 3. Adım: Durum Makinesinin Arayüz Oluşturulması
- Adım 4: HMI Kontrolü
- Adım 5: Durumları Yönetin
- 6. Adım: Kronometre
- Adım 7: Sayaç
- Adım 8: Simülasyon
- 9. Adım: Örneği Alın
Video: Durum Makinelerini Kullanan Arduino HMI: 9 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
Bu Eğitilebilir Kitapta, Arduino için 16x2 LCD Tuş Takımı Kalkanı kullanarak basit ve genişletilebilir bir HMI gerçekleştirmek için YAKINDU Statechart Araçlarını nasıl kullanacağınızı göstereceğim.
Sonlu Durum Makineleri (FSM), karmaşık İnsan Makine Arayüzlerini (HMI) geliştirmek için güçlü bir tasarım modelidir. Bir HMI'nın işlevselliği artabileceğinden, durum makineleri gibi bir tasarım deseni kullanmak faydalıdır.
Tam örnek, YAKINDU Statechart Tools'a yerleştirilmiştir. Ek olarak, IDE'de derleme ve flashing için Eclipse C++ IDE for Arduino Plugin kullanılmıştır.
YAKINDU Statechart Tools'un Kısa Bir Özeti
Bu araç ile grafik durum makineleri oluşturmak mümkündür. Kullanıcının durum makinesinden C, C++ veya Java kodu oluşturmasını sağlar. Bu yaklaşımla, model değiştirilebilir veya genişletilebilir ve kullanıcı kodu yeniden oluşturabilir ve düz kaynak kodu yazmak zorunda kalmaz.
Gereçler
Parçalar:
- Arduino (Uno, Mega)
- USB kablosu
- 16x2 LCD Tuş Takımı Kalkanı
Aletler:
- YAKINDU Durum Çizelgesi Araçları
- Arduino için Eclipse C++ IDE
Adım 1: Donanım
LCD Tuş Takımı Kalkanı Arduino'ya kolayca takılabilir. 16x2 LCD Ekrana sahiptir ve ek olarak altı buton vardır:
- Sol
- Doğru
- Yukarı
- Aşağı
- Seçme
- (Sıfırla)
Açıkçası, bunlardan beşi kullanılabilir. Anahtarlar bir voltaj bölücüye bağlanır ve voltaja bağlı olarak Pin A0 kullanılarak algılanır. Bunları doğru bir şekilde algılamak için yazılımdan çıkmayı kullandım.
Adım 2: Nasıl Çalışması Gerektiğini Tanımlayın
Uygulama üç şeyi yapabilmelidir.
- Durumları Burada Kullanın Beş durum arasında gezinmek için düğmeleri kullanmak istiyorum: Üst, Orta, Alt, Sol ve Sağ
- KronometreBaşlatılabilen, durdurulabilen ve sıfırlanabilen basit bir kronometre. Her 100 milisaniyede bir artırılmalıdır
- SayaçÜçüncü kısım basit bir yukarı/aşağı sayacı içerir. Pozitif sayıları sayabilmeli ve sıfırlanabilir olmalıdır.
Aktif menü (veya durum) üst satırda 16x2 LCD'de görüntülenecektir. Uygulama (Durum, Zamanlayıcı veya Sayaç) en alt satırda görüntülenecektir. Navigasyon için sol ve sağ buton kullanılmalıdır.
3. Adım: Durum Makinesinin Arayüz Oluşturulması
Düğmeler geri döndürülecek ve durum makinesine bağlanacaktır. Durum makinesindeki olaylarda olduğu gibi kullanılabilirler. Ek olarak, mevcut menüyü görüntülemek için işlemler tanımlanır. Ve biri zamanlayıcı ve diğeri sayaç için olmak üzere en az iki değişken tanımlanır.
arayüz:
// giriş olayları olarak düğmeler olayda sağ olayda sol olayda olay yukarı olay aşağı olay seçiminde // HMI'ye özgü değerleri göster işlem displayLCDString(değer:dize, uzunluk:tamsayı, konum:tamsayı) işlem ekranıLCDInteger(değer:tamsayı, konum:integer) işlemi clearLCDRow(konum:integer) internal: //depolama için değişkenler var cnt: tamsayı var timeCnt: tamsayı = 0
C++ kodunu oluşturduktan sonra, in olayları geri döndürülmeli ve arayüze bağlanmalıdır. Bu kod parçacığı, bunun nasıl yapılacağını gösterir.
İlk başta, düğmeler tanımlanacaktır:
#define YOK 0#define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define SAĞ 5
Ardından butonu okumak için tanımlanmış bir fonksiyon var. Değerler, LCD Shield üreticisine bağlı olarak değişebilir.
statik int readButton() { int sonuç = 0; sonuç = analogRead(0); if (sonuç < 50) {dönüş SAĞ; } if (sonuç < 150) { dönüş YUKARI; } if (sonuç < 300) { AŞAĞI döndür; } if (sonuç < 550) { dönüş SOL; } if (sonuç < 850) { geri SEÇ; } HİÇBİRİ döndür; }
Sonunda, düğmeler kaldırılacaktır. 80 ms ile iyi sonuçlar elde ettim. Bir düğme bırakıldığında, olaya göre yükseltecektir.
int oldState = NONE;statik void boostEvents() { int buttonPressed = readButton(); gecikme(80); oldState = buttonPressed; if (oldState != NONE && readButton() == NONE) { switch (oldState) { case SELECT: { stateMachine->raise_select(); kırmak; } durum SOL: { stateMachine->raise_left(); kırmak; } durum AŞAĞI: { stateMachine->raise_down(); kırmak; } durum YUKARI: { stateMachine->raise_up(); kırmak; } durum SAĞ: { stateMachine->raise_right(); kırmak; } varsayılan: { ara; } } } }
Adım 4: HMI Kontrolü
Her durum, menünün bir bölümü için kullanılır. Uygulamanın - örneğin kronometrenin - yürütüleceği alt durumlar vardır.
Bu tasarım ile arayüz kolayca genişletilebilir. Aynı tasarım deseni kullanılarak ek menüler kolayca eklenebilir. Bir sensörün değerini okumak ve onu dördüncü bir menü öğesinde görüntülemek önemli değil.
Şimdilik sadece sol ve sağ kontrol olarak kullanılıyor. Ancak yukarı ve aşağı, ana menüde gezinme uzantısı olarak da kullanılabilir. Belirli bir menü öğesine girmek için yalnızca seçim düğmesi kullanılacaktır.
Adım 5: Durumları Yönetin
Tutamaç durumları menüsü yalnızca başka bir gezinme örneği olarak kullanılır. Yukarı, aşağı, sağa veya sola kullanmak, durumlar arasında geçişe izin verir. Mevcut durum her zaman LCD Ekranın ikinci satırına yazdırılacaktır.
6. Adım: Kronometre
Kronometre oldukça basittir. Başlangıçta, zamanlayıcı değeri sıfırlanacaktır. Zamanlayıcı, sol düğme kullanılarak başlatılabilir ve sol ve sağ kullanılarak değiştirilebilir. Yukarı veya aşağı kullanmak zamanlayıcıyı sıfırlar. Zamanlayıcı, seçim düğmesini iki kez kullanarak - menüden çıkıp bir kez daha girerek sıfıra ayarlanabilir, çünkü zamanlayıcı başlangıçta kronometreye girildiğinde sıfıra ayarlanacaktır.
Adım 7: Sayaç
En azından uygulanan bir sayaç var. Sayaç durumuna girmek, sayacı sıfırlar. Seçim düğmesi dışında herhangi bir buton kullanılarak başlatılabilir. Değeri 0'dan küçük olmayan basit bir yukarı/aşağı sayacı olarak uygulanır.
Adım 8: Simülasyon
9. Adım: Örneği Alın
IDE'yi buradan indirebilirsiniz: YAKINDU Statechart Tools
IDE'yi indirdikten sonra, örneği Dosya -> Yeni -> Örnek yoluyla bulabilirsiniz.
Hobiler için ücretsizdir, ancak 30 günlük deneme sürümünü de kullanabilirsiniz.
Önerilen:
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ı
AA Pil Kullanan Acil Durum Mobil Şarj Cihazı: 3 Adım
AA Pil Kullanan Acil Mobil Şarj Cihazı: Giriş Bu, çok basit talimatları izleyerek herkes tarafından yapılabilecek bir hobi projesidir. Şarj cihazı 4x1.5V AA pillerin voltajını IC 7805 voltaj regülatörü kullanarak 5V'a düşürerek çalışır, çünkü bir fotonun ihtiyaç duyduğu voltaj
Arduino İle 2.4Ghz NRF24L01 Modülünü Kullanan Kablosuz Uzaktan Kumanda - Nrf24l01 Quadcopter için 4 Kanal / 6 Kanal Verici Alıcı - Rc Helikopter - Arduino Kullanan Rc Uçak: 5 Adım (Resimlerle)
Arduino İle 2.4Ghz NRF24L01 Modülünü Kullanan Kablosuz Uzaktan Kumanda | Nrf24l01 Quadcopter için 4 Kanal / 6 Kanal Verici Alıcı | Rc Helikopter | Arduino Kullanan Rc Uçak: Bir Rc araba çalıştırmak için | Quadcopter | dron | RC uçak | RC tekne, her zaman bir alıcı ve vericiye ihtiyacımız var, RC QUADCOPTER için 6 kanallı bir verici ve alıcıya ihtiyacımız olduğunu ve bu tür TX ve RX'in çok maliyetli olduğunu varsayalım, bu yüzden bir tane yapacağız
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
Arduino PLC 32 I/O+Durum Makinesi+SCADA veya HMI: 8 Adım
Arduino PLC 32 I/O+State Machine+SCADA veya HMI: Bir endüstriyel sistemi arduino ile programlamanın, kontrol etmenin ve denetlemenin birçok yolu