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.SerialUSB'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 kesintisizLOW'dan sonra sayılır).
Gereksinimler
Kodu sketch/sketch.ino dosyasına (setup() ve loop()) yazın.
-
Açılış.
Serial1'i 115200 baud ile açın, pinleri ayarlayın,READYyazın ve döngüyü hemen kırmızı evreyle başlatın. -
Gündüz döngüsü. Evreler bu sırayla tekrar eder; her evrede yalnızca tablodaki lambalar yanar, diğerleri söner:
Evre Yanan lambalar Süre REDkırmızı 2000 ms RED_YELLOWkırmızı + sarı 500 ms GREENyeşil 2000 ms YELLOWsarı 500 ms -
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. -
Konsol. Her evre başladığında adını (
RED,RED_YELLOW,GREENveyaYELLOW) ayrı bir satıra yazın. -
Gece modu. Gündüz döngüsündeyken filtrelenmiş bir basış gece moduna geçirir:
NIGHTyazı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). -
Gündüze dönüş. Bir basış daha gece modundan çıkarır:
DAYyazın, sonra gündüz döngüsünü yenidenREDevresinden başlatın (her zamanki gibiREDyazı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
- Sketch derlenir.
- 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).
- Kırmızı ve yeşil hiçbir zaman aynı anda yanmaz.
- 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