İçindekiler:

Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı: 6 Adım (Resimli)
Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı: 6 Adım (Resimli)

Video: Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı: 6 Adım (Resimli)

Video: Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı: 6 Adım (Resimli)
Video: Sıfırdan! Basit Eğitim Robotu Çizip, Üretime Gönderiyoruz (Bölüm 1) 2024, Kasım
Anonim
Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı
Arduino Üzerindeki Durum Makinesi - Yaya Trafik Işığı

Merhabalar!Size YAKINDU Statechart Tools kullanarak sonlu durum makinesi ile C++'da Arduino için bir yaya trafik ışığını nasıl programlayacağınızı göstereceğim. Bu, durum makinelerinin gücünü gösterecek ve daha sonraki projeler için bir plan olarak kullanılabilir.

Gereçler

Sadece bir Arduino'ya, bazı butonlara, LED'lere, Jumper'a ve dirençlere ihtiyacınız var.

Donanım

  • 2x Buton
  • 2 adet Trafik Işığı veya 220 Ohm dirençli LED'ler kullanabilirsiniz
  • 2x 10k Ohm dirençler
  • ekmek tahtası
  • Tulum
  • Arduino Uno/Mega (veya en az 8 GPIO'su olan herhangi biri)

Yazılım

  • YAKINDU Durum Çizelgesi Araçları
  • Arduino için Eclipse C++ IDE

Adım 1: Nasıl Çalıştığını Tanımlayın: Yaya Trafik Işığı

Öncelikle yaya trafik ışığının nasıl çalışması gerektiğini belirlememiz gerekiyor. Madde işaretlerini özetlemeye çalıştım:

  • Biri arabalar için, diğeri yayalar için olmak üzere iki trafik ışığı kullanılır.
  • Bir düğme kullanılarak trafik ışığı açılabilir
  • Yaya bir düğmeye basarak karşıdan karşıya geçmeyi talep edebilir
  • Kapalı trafik ışığı, her iki sarı LED'in de yanıp sönmesiyle gösterilir
  • Açıldıktan sonra trafik ışığı güvenli modda 10 saniye bekler
  • Güvenli moddan sonra, bir yaya bir istek başlatana kadar arabalar her zaman yeşil bir aşamaya sahiptir.
  • Yaya geçiş talebi, sarı LED'in değiştirilmesiyle belirtilir

Ek olarak, trafik ışığının çalışma şekline bağlı olarak bazı zaman olayları vardır.

Adım 2: Devreyi Oluşturun

Devreyi İnşa Et
Devreyi İnşa Et

Devreyi kurmaya başlayalım. Örneğimde, önizleme görüntüsünde görebileceğiniz gibi, bir Arduino Mega 2560 kullandım, ancak en az sekiz GPIO'lu diğer tüm Arduino'lar iyi olmalı. Ek olarak, Amazon'dan bazı 5V trafik ışıkları satın aldım. Sadece Trafik Işığı Arduino'yu arayın. Aksi takdirde, altı farklı LED kullanabilirsiniz. Ayrıca, iki adet basmalı düğmeye ve iki adet 10k Ohm rezistöre ihtiyacınız var.

Soldaki üç LED araç trafiği için, üç sağ LED ise yayalar için kullanılır, burada sarı olan bir talebi belirtebilir.

Adım 3: Durum Makinesini Oluşturma

Durum Makinesini Oluşturma
Durum Makinesini Oluşturma

Gördüğünüz gibi, bileşik üyeli iki ana durum vardır - durum açık ve durum kapalı. ON/OFF düğmesine bağlı olan onOff olayını kullanarak her iki durum arasında geçiş yapabilirsiniz. İlk durumda, kapalı durumda, her iki sarı LED de her saniye yanıp sönmeye başlar. Trafik ışığı açıldıktan sonra Güvenli Durumda başlar. 10 saniye sonra trafik ışıklarının tipik davranışı ele alınacaktır. StreetPrepare durumunda kırmızı ve sarı LED yanar ve 2 saniye daha sonra trafik ışığı yeşile döner. Şu andan itibaren durum makinesi, ikinci düğmeye bağlı olan yaya İsteği olayını bekliyor. Olayı gönderdikten sonra istek, PedWating durumunda her saniye sarı LED'in değiştirilmesiyle belirtilecektir. 7 saniye sonra, yayalar Yaya Yeşili durumuna geçme sinyali alana kadar trafik ışığı önce sarıya, sonra kırmızıya çevrilecektir. Bundan sonra PedestrianRed etkinleştirilir ve döngü tekrarlanır. Bu, ancak trafik ışığı tekrar kapatılarak durdurulabilir.

Adım 4: Örneği Çalıştırma

Adım 5: Oluşturulan C++ Kodu

Oluşturulan C++ kodu, durum makinesinin mantığını işlemek için klasik bir geçiş durumudur. Bu sadece nasıl göründüğünün bir kod parçacığıdır:

void TrafficLightCtrl::runCycle(){ clearOutEvents(); for (stateConfVectorPosition = 0; stateConfVectorPosition < maxOrthogonalStates; stateConfVectorPosition++) { anahtar (stateConfVector[stateConfVectorPosition]) { case main_region_on_r1_StreetGreen: { main_region_on_r1_Street(true); kırmak; } durum main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react(true); kırmak; } varsayılan: ara; } clearInEvents(); }

Adım 6: Örneği Alın

Tüm örnek derlemeye ve çalıştırmaya hazır. Ticari olmayan kullanım için ücretsiz olan YAKINDU Statechart Tools ile birlikte gelir. İndirdikten sonra örneği doğrudan araca aktarabilirsiniz:

Dosya -> Yeni -> Örnek -> YAKINDU Durum Şeması Örnekleri -> Sonraki -> Arduino için Trafik Işığı (C++)

> BURADAN YAKINDU Statechart Araçlarını indirebilirsiniz <<

30 günlük deneme ile başlayabilirsiniz. Daha sonra, ticari olmayan kullanım için ücretsiz olan bir lisans almalısınız!

Önerilen: