Daftar Isi:

State Machine di Arduino - Lampu Lalu Lintas Pejalan Kaki: 6 Langkah (dengan Gambar)
State Machine di Arduino - Lampu Lalu Lintas Pejalan Kaki: 6 Langkah (dengan Gambar)

Video: State Machine di Arduino - Lampu Lalu Lintas Pejalan Kaki: 6 Langkah (dengan Gambar)

Video: State Machine di Arduino - Lampu Lalu Lintas Pejalan Kaki: 6 Langkah (dengan Gambar)
Video: How to Create a Traffic Light Controller using UDBs with PSoC 5LP (Part 2) 2024, November
Anonim
State Machine di Arduino - Lampu Lalu Lintas Pejalan Kaki
State Machine di Arduino - Lampu Lalu Lintas Pejalan Kaki

Hai! Saya akan menunjukkan cara memprogram lampu lalu lintas pejalan kaki untuk Arduino di C++ dengan mesin keadaan terbatas dengan menggunakan YAKINDU Statechart Tools. Ini akan menunjukkan kekuatan mesin negara dan dapat digunakan sebagai cetak biru untuk proyek lebih lanjut.

Perlengkapan

Anda hanya membutuhkan Arduino, beberapa tombol, LED, Jumper dan resistor.

Perangkat keras

  • 2x Tombol Tekan
  • 2x Lampu Lalu Lintas atau Anda dapat menggunakan LED dengan resistor 220 Ohm
  • 2x 10k Ohm resistor
  • Papan tempat memotong roti
  • Peloncat
  • Arduino Uno/Mega (atau lainnya, yang mendapatkan setidaknya 8 GPIO)

Perangkat lunak

  • Alat Bagan Negara YAKINDU
  • Eclipse C++ IDE untuk Arduino

Langkah 1: Tentukan Cara Kerjanya: Lampu Lalu Lintas Pejalan Kaki

Pada awalnya, kita perlu menentukan bagaimana lampu lalu lintas pejalan kaki seharusnya bekerja. Saya sudah mencoba merangkum poin-poinnya:

  • Dua lampu lalu lintas digunakan - satu untuk mobil, yang lain untuk pejalan kaki
  • Lampu lalu lintas dapat dinyalakan dengan menggunakan tombol
  • Pejalan kaki dapat meminta penyeberangan jalan dengan menekan tombol
  • Lampu lalu lintas yang dimatikan ditunjukkan dengan mengedipkan kedua LED kuning
  • Setelah menyala, lampu lalu lintas menunggu 10 detik dalam mode aman
  • Setelah mode aman, mobil selalu memiliki fase hijau sampai pejalan kaki memulai permintaan
  • Permintaan pejalan kaki untuk penyeberangan ditunjukkan dengan menyalakan LED kuning

Selain itu, ada beberapa peristiwa waktu tergantung pada cara bagaimana lampu lalu lintas bekerja.

Langkah 2: Bangun Sirkuit

Bangun Sirkuit
Bangun Sirkuit

Mari kita mulai mengatur sirkuit. Dalam contoh saya, seperti yang Anda lihat pada gambar pratinjau, saya telah menggunakan Arduino Mega 2560, tetapi setiap Arduino lain dengan setidaknya delapan GPIO seharusnya baik-baik saja. Selain itu, saya telah membeli beberapa lampu lalu lintas 5V di Amazon. Hanya mencari Lampu Lalu Lintas Arduino. Jika tidak, Anda cukup menggunakan enam LED berbeda. Selanjutnya, Anda memerlukan dua tombol tekan dan dua resistor 10k Ohm.

Tiga LED kiri digunakan untuk lalu lintas mobil dan tiga LED kanan untuk pejalan kaki, di mana yang kuning dapat menunjukkan permintaan.

Langkah 3: Membuat Mesin Negara

Membuat Mesin Negara
Membuat Mesin Negara

Jadi, seperti yang Anda lihat, ada dua status utama dengan anggota komposit - status aktif dan nonaktif. Anda dapat beralih di antara kedua status dengan menggunakan acara onOff, yang dihubungkan ke tombol ON/OFF. Dalam keadaan awal, keadaan mati, kedua LED kuning mulai berkedip setiap detik. Setelah lampu lalu lintas dinyalakan, itu dimulai di Safestate. Setelah 10 detik, perilaku khas lampu lalu lintas akan ditangani. LED merah dan kuning akan menyala dalam keadaan StreetPrepare dan lampu lalu lintas berubah menjadi hijau setelah 2 detik lagi. Mulai sekarang, state machine sedang menunggu event pedestrianRequest, yang disambungkan ke tombol kedua. Setelah mengirim acara, permintaan akan ditunjukkan dengan mengaktifkan LED kuning setiap detik dalam status PedWating. 7 detik kemudian lampu lalu lintas akan berubah menjadi kuning terlebih dahulu dan kemudian menjadi merah sampai pejalan kaki mendapatkan sinyal untuk masuk dalam keadaan PedestrianGreen. Setelah ini, PedestrianRed diaktifkan dan siklus berulang. Ini hanya dapat diinterupsi dengan mematikan lampu lalu lintas lagi.

Langkah 4: Menjalankan Contoh

Langkah 5: Membuat Kode C++

Kode C++ yang dihasilkan adalah switch-case klasik untuk menangani logika mesin negara. Ini hanya cuplikan kode tampilannya:

void TrafficLightCtrl::runCycle(){ clearOutEvents(); for (stateConfVectorPosition = 0; stateConfVectorPosition < maxOrthogonalStates; stateConfVectorPosition++) { switch (stateConfVector[stateConfVectorPosition]) { case main_region_on_r1_StreetGreen: { main_region_on_r1_StreetGreen_react(true); merusak; } kasus main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react(true); merusak; } default: istirahat; } clearInEvents(); }

Langkah 6: Dapatkan Contoh

Seluruh contoh siap untuk dikompilasi & dijalankan. Muncul dengan YAKINDU Statechart Tools, yang gratis untuk penggunaan non-komersial. Setelah mengunduh, Anda dapat mengimpor contoh langsung di alat:

File -> Baru -> Contoh -> Contoh Statechart YAKINDU -> Berikutnya -> Lampu Lalu Lintas (C++) untuk Arduino

> DI SINI Anda dapat mengunduh Alat Statechart YAKINDU <<

Anda dapat memulai dengan uji coba 30 hari. Setelah itu, Anda harus mendapatkan lisensi, yang gratis untuk penggunaan non-komersial!

Direkomendasikan: