İçindekiler:

Enerji Verimli Hareket Aktif Sokak Lambaları: 8 Adım
Enerji Verimli Hareket Aktif Sokak Lambaları: 8 Adım

Video: Enerji Verimli Hareket Aktif Sokak Lambaları: 8 Adım

Video: Enerji Verimli Hareket Aktif Sokak Lambaları: 8 Adım
Video: Erken Kalkmak İçin 4 Taktik 2024, Kasım
Anonim
Enerji Verimli Hareket Aktif Sokak Lambaları
Enerji Verimli Hareket Aktif Sokak Lambaları

Bu projedeki amacımız, toplulukların enerji ve finansal kaynaklarından tasarruf sağlayacak bir şey yaratmaktı. Hareketle etkinleştirilen sokak lambaları bu iki şeyi de yapacaktır. Tüm ülke genelinde enerji, sokak lambalarının boş olan sokakları aydınlatmasıyla boşa harcanıyor. Sokak aydınlatma sistemimiz, ışıkların yalnızca gerektiğinde açık olmasını sağlayarak toplulukların sayısız dolar tasarruf etmesini sağlar. Hareket sensörlerini kullanan sistem, yalnızca arabalar varken ışıkları açar. Ayrıca yayaların güvenliği için sokaktaki tüm ışıkları açan bir geçersiz kılma düğmesi uyguladık. Aşağıdaki adımlar, Vivado ve bir Basys 3 panosu kullanarak projemizin küçültülmüş modelini nasıl tasarladığımız ve oluşturduğumuz konusunda size yol gösterecektir.

Adım 1: Sistem Kara Kutusu

Sistem Kara Kutusu
Sistem Kara Kutusu

Bu projeye basit bir kara kutu diyagramı çizerek başladık. Bir kara kutu diyagramı, sistemimizin gerekli tüm işlemleri tamamlamak için ihtiyaç duyduğu girdileri ve çıktıları basitçe gösterir. Tasarımımızı mümkün olduğunca basit ve sade tutmaya çalıştık. Üç sistem girişimiz, bir hareket sensörü veriyolu (küçültülmüş modelimiz için 4), bir yaya geçersiz kılma düğmesi ve bir saat girişi içeriyordu. Diğer tarafta tek çıkışımız sokak ışıklarımızı temsil eden bir LED ışık veriyoludur. Bu model için 16 sokak lambası senaryosu kullandık çünkü bu Basys 3 kartındaki maksimum yerleşik LED çıkışı sayısı. Son olarak, bu diyagramı kullanarak uygun girdi ve çıktılarla Vivado projemizi, kaynak ve kısıtlama dosyalarımızı oluşturabildik.

2. Adım: Bileşenler

Bileşenler
Bileşenler
Bileşenler
Bileşenler

Bu adımda kara kutu diyagramımızı oluşturan bileşenleri daha derinlemesine inceleyeceğiz. İlk bileşenimiz, D parmak arası terlik içeren bir VHDL kaynak dosyasıdır. D parmak arası terlikler, saatin yükselen kenarındaki sensörlerden kendilerine girilen sinyali alır ve bu verileri bir sonraki yükselen kenara kadar kilitler. Bu, hassas hareket sensörlerimizin çıkış LED'lerinin "titremesine" neden olmasını engeller. Ayrıca, düğmeye basıldıktan sonra LED'leri yaklaşık 5-7 saniye açık tutmak için düğme giriş sinyaline tek bir D flip-flop koyduk. Bunu ayrıca bir saat bölücüden geçirdik.

varlık clk_div2 Bağlantı Noktasıdır (clk: std_logic içinde; sclk: std_logic dışında); clk_div2'yi sonlandır;

clk_div2'nin my_clk_div mimarisi

sabit max_count: tamsayı:= (300000000); sinyal tmp_clk: std_logic:= '0'; my_div'e başla: süreç (clk, tmp_clk) değişken div_cnt: tamsayı:= 0; başlar if (rising_edge(clk)) sonra if (div_cnt = MAX_COUNT) o zaman tmp_clk <= tmp_clk değil; div_cnt:= 0; başka div_cnt:= div_cnt + 1; eğer son; eğer son; sclk <= tmp_clk; işlemi sonlandır my_div; my_clk_div'i sonlandır;

Bu şemadaki son bileşenimiz, giriş sinyallerinin konfigürasyonunu temel alan çıkışlar için koşulları içeren davranışsal bir VHDL kaynak dosyasıdır.

Adım 3: D Parmak Arası Terlikler

D Parmak Arası Terlikler
D Parmak Arası Terlikler

Giriş sinyallerine bağlı dört parmak arası terlik, sistemimizin işlevselliği için çok önemlidir. Daha önce de belirtildiği gibi, hassas hareket sensörleri ve bir geçersiz kılma düğmesi ile parmak arası terlikler, yalnızca giriş sinyalimizi saatin yükselen kenarında vermek için mandalları kullanır. Bu sıralı mantık, sokak ışıklarımızın hızlı bir hareketle tetiklendikten sonra belirli bir süre açık kalabileceği anlamına gelir. D-Flip Flop'un kodlaması oldukça basittir:

startprocess (CLK) başlar, eğer yükselen_kenar(CLK) ise Q <= D; eğer son; bitiş süreci;

Her şey tek bir if ifadesinde derlenebilir. Bu parçayı aldıktan sonra, gerekli parmak arası terliklerimizin dördünü de içeren yapısal bir VHDL kaynak dosyası oluşturduk:

DFF0'ı başlat: DFF bağlantı noktası haritası (CLK => CLK, D => D(0), Q => Q(0)); DFF1: DFF bağlantı noktası haritası (CLK => CLK, D => D(1), Q => Q(1)); DFF2: DFF bağlantı noktası haritası (CLK => CLK, D => D(2), Q => Q(2)); DFF3: DFF bağlantı noktası haritası (CLK => CLK, D => D(3), Q => Q(3));

son Davranış;

Bu, tüm sistem bileşenlerini bir araya getirdiğimiz ana yapısal dosyamızı çok daha temiz ve düzenli tutmaya yardımcı olur.

Adım 4: Koşullar

Kodumuzu kompakt ve verimli tutmak için tüm koşullarımızı tek bir durum ifadesinde yazdık. Her hareket sensörü 4 LED'lik bir gruptan sorumlu olduğundan, küçültülmüş modelimiz için 16 olası LED çıkış konfigürasyonumuz vardı.:

durum NMS "1111" olduğunda => LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED <= "111111111111111"; son durum;

Adım 5: Kısıtlamalar

Vivado kullanarak giriş ve çıkışlarınızı düzgün bir şekilde belirtmek için, kullanılan tüm bağlantı noktalarını, düğmeleri, LED'leri ve saatleri belirten bir kısıtlama dosyası uygulamalısınız.

set_property PACKAGE_PIN W5 [get_ports CLK] set_property IOSTANDARD LVCMOS33 [get_ports CLK]

set_property PACKAGE_PIN U16 [get_ports {LED[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[0]}] set_property PACKAGE_PIN E19 [get_ports {LED[1]}] set_property IOSTANDARD LVCMOS33property IOSTANDARD LVCMOS33property IOSTANDARD LVCMOS33property [get_ports] set_LEDPIN] U19 [get_ports {LED[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[2]}] set_property PACKAGE_PIN V19 [get_ports {LED[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[3]}] set_property PACKAGE_PIN get_ports {LED[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[4]}] set_property PACKAGE_PIN U15 [get_ports {LED[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[5]}] set_property PACKAGE_PIN U14 LED[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[6]}] set_property PACKAGE_PIN V14 [get_ports {LED[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[7]}] set_property PACKAGE_PIN V13 [get_ 8]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[8]}] set_property PACKAGE_PIN V3 [get_ports {LED[9]}] set_property IO STANDART LVCMOS33 [get_ports {LED[9]}] set_property PACKAGE_PIN W3 [get_ports {LED[10]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[10]}] set_property PACKAGE_PIN U3 [gettyports {OSTLED[11]}] [get_ports {LED[11]}] set_property PACKAGE_PIN P3 [get_ports {LED[12]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[12]}] set_property PACKAGE_PIN N3 [get_ports {LED[13]CMOS33] set_property IOSTANDARD_port LV {LED[13]}] set_property PACKAGE_PIN P1 [get_ports {LED[14]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[14]}] set_property PACKAGE_PIN L1 [get_ports {LED[15]}] set_property IOSTANDARD LVCMOS33 [get_ [15]}]

set_property PACKAGE_PIN U18 [get_ports BTN] set_property IOSTANDARD LVCMOS33 [get_ports BTN]

set_property PACKAGE_PIN A14 [get_ports {MS[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS[0]}] set_property PACKAGE_PIN A16 [get_ports {MS[1]}] set_property IOSTANDARD LVCMOS33property IOSTANDARD LVCMOS33property [get_ports] set_[1] B15 [get_ports {MS[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS[2]}] set_property PACKAGE_PIN B16 [get_ports {MS[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS[3]}]

Adım 6: Ana Kaynak Dosyası

Bu ana dosyada daha önce bahsedilen tüm bileşen kaynak dosyalarını bir araya getiriyoruz. Bu dosya, farklı bileşenleri bir araya getiren yapısal kod işlevi görür.

varlık Master_Final_Project Port'tur (BTN: STD_LOGIC'de; CLK: STD_LOGIC'de; MS: STD_LOGIC_VECTOR'da (3'ten 0'a); LED: STD_LOGIC_VECTOR (15'ten 0'a kadar); Master_Final_Project'i sonlandır;

Master_Final_Project mimarisinin Davranışı

final_project bileşeni Port'tur (--CLK: STD_LOGIC'de; NMS: STD_LOGIC_VECTOR'da (3'e 0); BTN: STD_LOGIC'de; --sw: STD_LOGIC_Vector'de (1'den 0'a); LED: out STD_LOGIC_VECTOR (15'ten 0'a); uç bileşen;

Final_DFF bileşeni:

Port (CLK: STD_LOGIC'de; D: STD_LOGIC_Vector'de (3'ten 0'a); Q: çıkış STD_LOGIC_Vector'de (3'ten 0)); uç bileşen;

sinyal DFF02proj30: STD_LOGIC;

sinyal DFF12proj74: STD_LOGIC; sinyal DFF22proj118: STD_LOGIC; sinyal DFF32proj1512: STD_LOGIC;

başlamak

DFF0: Final_DFF bağlantı noktası haritası (CLK => CLK, D(0) => MS(0), D(1) => MS(1), D(2) => MS(2), D(3) => MS(3), Q(0) => DFF02proj30, Q(1) => DFF12proj74, Q(2) => DFF22proj118, Q(3) => DFF32proj1512); Proje0: final_project bağlantı noktası haritası (NMS(0) => DFF02proj30, NMS(1) => DFF12proj74, NMS(2) => DFF22proj118, NMS(3) => DFF32proj1512, BTN => BTN, LED => LED); son Davranış;

Adım 7: Montaj

toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı

Bu proje için donanım montajı minimumdur. Tek gerekli parçalar aşağıdaki gibidir:

1. Basys 3 kartı (1)

2. Amazon'da bulabileceğiniz ucuz hareket sensörleri. (4)

3. Erkek-kadın potansiyel müşteriler (4)

Toplantı:

1. 4 erkek ucu PMod başlık JB bağlantı noktaları 1-4'e bağlayın (Bkz. Şekil).

2. Dişi uçları her hareket sensörünün çıkış pinine bağlayın.

Adım 8: Programın Yüklenmesi

Artık VHDL ana kaynak dosyasını Basys 3 kartına yüklemeye hazırız. Olası hatalar için sentez, uygulama ve bit akışı denetimi oluşturduğunuzdan emin olun. Hepsi başarılı bir şekilde çalışıyorsa, donanım yöneticisini açın ve Basys 3 cihazını programlayın. Projeniz şimdi tamamlandı!

Önerilen: