Gece Modlu Trafik Lambası

Arduino Nano 33 BLE üzerinde bir kavşak trafik lambasını (kırmızı, kırmızı + sarı, yeşil, sarı) hiç kaymayan millis() zamanlamasıyla çalıştırın ve yanıp sönen sarı gece moduna geçip geri dönen bir buton ekleyin.

Kart
Nano 33 BLE · Arduino
Zorluk
Orta
Konu
Timing & Program Flow
Erişim
Ücretsiz

Görev

Gece Modlu Kavşak Trafik Lambası

Küçük bir kavşağa yeni bir trafik lambası takılıyor. Gündüz bilinen dört evreli döngüyü çalıştırıyor. Gece operatör kontrol kutusundaki butona basıyor ve lamba yanıp sönen sarıya geçiyor; tekrar basınca normal döngü geri geliyor.

Donanım

  • Arduino Nano 33 BLE (nRF52840, 3,3 V lojik). Seri konsol Serial1 (D0/D1), 115200 baud. Serial USB'dir ve testlerde görülmez.
  • D2: kırmızı lamba, D3: sarı lamba, D4: yeşil lamba. Her biri seri dirençle GND'ye bağlı bir LED; HIGH = yanık.
  • D5: GND'ye bağlı mod butonu. Dahili pull-up kullanın (LOW = basılı) ve sıçramayı süzün (basış, 20 ms kesintisiz LOW'dan sonra sayılır).

Gereksinimler

Kodu sketch/sketch.ino dosyasına (setup() ve loop()) yazın.

  1. Açılış. Serial1'i 115200 baud ile açın, pinleri ayarlayın, READY yazın ve döngüyü hemen kırmızı evreyle başlatın.

  2. Gündüz döngüsü. Evreler bu sırayla tekrar eder; her evrede yalnızca tablodaki lambalar yanar, diğerleri söner:

    EvreYanan lambalarSüre
    REDkırmızı2000 ms
    RED_YELLOWkırmızı + sarı500 ms
    GREENyeşil2000 ms
    YELLOWsarı500 ms
  3. Kayma yok. Zamanlama kaymamalı: kaç döngü geçerse geçsin, her evre READY'den itibaren 5 s'nin tam katı artı kendi ofsetinde başlar. millis() kullanın (delay() yok) ve her evreyi, döngünüzün fark ettiği andan değil, bir önceki evrenin bitmesi gereken andan planlayın.

  4. Konsol. Her evre başladığında adını (RED, RED_YELLOW, GREEN veya YELLOW) ayrı bir satıra yazın.

  5. Gece modu. Gündüz döngüsündeyken filtrelenmiş bir basış gece moduna geçirir: NIGHT yazın, kırmızı ve yeşil söner, sarı 500 ms yanık, 500 ms sönük yanıp söner (yanık başlar).

  6. Gündüze dönüş. Bir basış daha gece modundan çıkarır: DAY yazın, sonra gündüz döngüsünü yeniden RED evresinden başlatın (her zamanki gibi RED yazın).

Örnek konsol çıktısı:

READY
RED
RED_YELLOW
GREEN
YELLOW
RED
NIGHT
DAY
RED
Döngü neden kayar?

Her evre start = millis() ile, döngünün değişikliği gördüğü anda başlatılırsa, her evreye döngünün tepki süresi eklenir. Birçok döngüden sonra bu birikir. Bunun yerine her evrenin başlaması gereken zamanı tutun (start += süre).

Kablolama

Wiring sekmesinde devreyi kurun: D2, D3 ve D4'te her biri kendi seri direnciyle üç LED, D5 ile GND arasında mod butonu.

Başarı ölçütleri

  1. Sketch derlenir.
  2. Lambalar dört evreyi verilen sürelerle izler (her geçişin 150 ms öncesinde ve sonrasında, ikinci döngüde de kontrol edilir).
  3. Kırmızı ve yeşil hiçbir zaman aynı anda yanmaz.
  4. Gece modunda yalnızca sarı lamba yanıp söner; gece modundan çıkınca gündüz döngüsü kırmızıdan yeniden başlar.

Neler var

  • Firmware'in emüle edilmiş bir kartta derlenip çalıştırılır ve donanım seviyesindeki testlerle kontrol edilir.
  • Geliştirme kartı veya yerel kurulum gerekmez.

Gömülüye yeni misin? Yol haritasıyla başla: Gömülü sistemler nasıl öğrenilir