Სარჩევი:

მოძრაობის სენსორი/Counter კონტროლირებადი განათება: 7 ნაბიჯი
მოძრაობის სენსორი/Counter კონტროლირებადი განათება: 7 ნაბიჯი

ვიდეო: მოძრაობის სენსორი/Counter კონტროლირებადი განათება: 7 ნაბიჯი

ვიდეო: მოძრაობის სენსორი/Counter კონტროლირებადი განათება: 7 ნაბიჯი
ვიდეო: მოძრაობის დეტექტორი PIR ULTRARED SENSOR 2024, ივლისი
Anonim
მოძრაობის სენსორი/Counter კონტროლირებადი განათება
მოძრაობის სენსორი/Counter კონტროლირებადი განათება

ეს პროექტი შეიქმნა როგორც საბოლოო პროექტი ციფრული დიზაინის კურსისთვის Cal Poly, San Luis Obispo (CPE 133).

რატომ ვაკეთებთ ამას? ჩვენ გვსურს ხელი შევუწყოთ მსოფლიოში ბუნებრივი რესურსების შენარჩუნებას. ჩვენი პროექტი ორიენტირებულია ელექტროენერგიის დაზოგვაზე. მეტი ელექტროენერგიის დაზოგვით, ჩვენ შევძლებთ შევინარჩუნოთ ბუნებრივი რესურსები, რომლებიც გამოიყენება ელექტროენერგიის წარმოებისთვის. 2018 წლიდან ვიწყებთ, ბუნებრივი რესურსები წარმოუდგენლად სწრაფად იხარჯება. ჩვენ გვინდა ვიცოდეთ ჩვენი გავლენა ჩვენს გარემოზე და შევასრულოთ ჩვენი როლი ბუნებრივი რესურსების შენარჩუნებაში. ელექტრონიკა შეიძლება განხორციელდეს ენერგიის დაზოგვის სხვადასხვა გზით, რაც ეხმარება გარემოს და ჩვენს ეკონომიკურ მდგომარეობას.*ეს მოდელი შეიქმნა ჩვენთვის ხელმისაწვდომი კომპონენტების გამოყენებით.

რა იყო ჩვენი შთაგონება? ადამიანებს ხშირად ავიწყდებათ შუქის გამორთვა და ენერგიის დაკარგვა ღამით დატოვებით. სინამდვილეში, ეს პროექტი დაზოგავს ელექტროენერგიას, რადგან "სადღესასწაულო შუქები" მხოლოდ მაშინ იქნება ჩართული, როდესაც ხალხი ახლოს არის და ამით ენერგიას დაზოგავს, როდესაც არავინ არის. უფრო მეტიც, ჩვენ გვინდოდა ტაიმერის შემუშავება ისე, რომ შუქები მთლიანად გამორთულიყო გარკვეული დროის შემდეგ, რათა უზრუნველყოფილიყო, რომ ისინი არ ჩართულიყო დილის 3 საათზე გამოვლენილი მოძრაობის გამო, მაგალითად.

როგორ შეგიძლიათ გამოიყენოთ ეს დიზაინი? ეს დიზაინი შეიძლება განხორციელდეს ყველა სახის განათებისთვის, იქნება ეს დეკორატიული, პრაქტიკული თუ ორივე. თუ გსურთ, რომ თქვენი მაგიდის შუქმა იმუშაოს მხოლოდ 6 საათის განმავლობაში, მაგალითად. თქვენ უნდა დააყენოთ მრიცხველი 21, 600 წამი (6 საათი x 3, 600 წამი/საათი). მიუხედავად იმისა, რომ მრიცხველი აქტიურად იზრდება, მოძრაობის სენსორი აკონტროლებს შუქს. ამრიგად, ყოველ ჯერზე, როდესაც ის გამორთულია დროის ამ მონაკვეთში, თქვენ უბრალოდ უნდა აწიოთ ხელი მოძრაობის სენსორის წინ და ის კვლავ ჩართოთ. თუ თქვენ იძინებთ თქვენს სამუშაო მაგიდასთან და იღვიძებთ 7 საათის შემდეგ, თქვენი მოძრაობა არ ჩართავს მას.

ნაბიჯი 1: საჭირო პროგრამული უზრუნველყოფა და აპარატურა

საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა
საჭირო პროგრამული უზრუნველყოფა და აპარატურა

პროგრამული უზრუნველყოფა:

  • Vivado 2016.2 (ან უფრო ახალი ვერსია) შეგიძლიათ იხილოთ აქ
  • Arduino IDE 1.8.3 (ან უახლესი ვერსია) შეგიძლიათ ნახოთ აქ

აპარატურა:

  • 1 ბასი 3 დაფა
  • 1 არდუინო უნო
  • 2 პურის დაფა
  • 1 ულტრაბგერითი სენსორი HC-SR04
  • 9 მამაკაცი-მამაკაცი მავთული
  • 1 LED
  • 1 100Ω რეზისტორი

ნაბიჯი 2: კოდები (Vivado)

კოდები (Vivado)
კოდები (Vivado)

სასრული მდგომარეობის მანქანა (იხ. მდგომარეობის დიაგრამა ზემოთ):

LED- ს დასჭირდა სასრული მდგომარეობის მანქანა. LED- ს აქვს მხოლოდ ორი მდგომარეობა ჩართვის და გამორთვის. მხოლოდ ორი შეყვანა აკონტროლებს LED- ის მდგომარეობას, მრიცხველს და სენსორს. ერთადერთი დრო, როდესაც LED უნდა იყოს ჩართული, არის როდესაც სენსორი ამოიცნობს მოძრაობას და როდესაც მრიცხველი ითვლის ნულიდან ოცდაათ წამამდე. ნებისმიერ სხვა შემთხვევაში LED იქნება გამორთული.

ფაილის სახელი: LEDDES

მრიცხველი:

მრიცხველი გვაძლევს შესაძლებლობას შევზღუდოთ დროის ხანგრძლივობა, რომლის დროსაც მოძრაობის სენსორს შეუძლია LED- ის გააქტიურება. მისი მნიშვნელობა ნაჩვენებია Basys 3 Board– ის შვიდი სეგმენტის ჩვენებაზე კოდის საშუალებით („sseg_dec“). როდესაც გადატვირთვის ღილაკი ქვემოთაა (მნიშვნელობა: '0'), მრიცხველი იწყებს ზრდას ყოველ წამში 0 -დან 30 -მდე. როდესაც მიაღწევს 30 -ს, ის იყინება ამ რიცხვზე. ის არ განახლდება 0 – დან მანამ, სანამ გადატვირთვის გადართვა არ მოხდება „1“–ზე და ისევ „1.“–ზე. როდესაც გადატვირთვა ბრუნდება "0" - ზე, მრიცხველი განახლდება 0 -დან 30 -მდე. ეს განხორციელება ასევე მოითხოვს საათის სიგნალის გამოყენებას, მისი კოდი მოცემულია ქვემოთ ("clk_div2").

ფაილის სახელი: FinalCounter

მოწოდებული ფაილები:

შვიდი სეგმენტის ჩვენება:

ეს კოდი საშუალებას აძლევს შვიდი სეგმენტის ჩვენებას აჩვენოს ათობითი მნიშვნელობები. ერთი ქვემოდული მოქმედებს როგორც დეკოდირება 8 ბიტიანი ორობითი შეყვანისა და 4 ბიტიანი ორობითი კოდირებული ათწილადის შორის. მეორე ყოფს საათის სიგნალს, რომ განაახლონ მისი მნიშვნელობა გარკვეული სიჩქარით.

ფაილის სახელი: sseg_dec

საათის სიგნალი:

ეს კოდი საშუალებას აძლევს მრიცხველს გაზარდოს 1 წამის ნამატი. ის ყოფს საათის შეყვანის სიხშირეს უფრო ნელ სიხშირეზე. ჩვენ მოვერგეთ, რათა უზრუნველვყოთ 1 წამიანი პერიოდი მუდმივი max_count- ის შეცვლით: მთელი რიცხვი: = (3000000)” - მდე” მუდმივი max_count: მთელი რიცხვი: = (50000000).”

ფაილის სახელი: clk_div2

მოწოდებული ფაილები: sseg_dec, clk_div2 *ეს საწყისი ფაილები მოწოდებულია პროფესორ ბრაიან მილის მიერ.

ნაბიჯი 3: იმის გაგება, თუ როგორ ხდებიან ისინი ერთად (VHDL კომპონენტების სქემა)

იმის გაგება, თუ როგორ ხდებიან ისინი ერთად (VHDL კომპონენტების სქემა)
იმის გაგება, თუ როგორ ხდებიან ისინი ერთად (VHDL კომპონენტების სქემა)

მთავარი ფაილი ("MainProjectDES") შეიცავს ადრე განხილულ ყველა ქვეფილეს. ისინი დაკავშირებულია ზემოაღნიშნული წესით. სხვადასხვა კომპონენტი ერთმანეთთან არის დაკავშირებული პორტის რუქების გამოყენებით სიგნალის გასაგზავნად ერთი ელემენტიდან მეორეზე.

როგორც თქვენ ალბათ შეამჩნიეთ, FinalCounter უზრუნველყოფს 5 ბიტიან გამომავალს, ხოლო sseg_dec მოითხოვს 8 ბიტიან შეყვანას. კომპენსაციისთვის, ჩვენ ვაყენებთ სიგნალს, რომელიც აკავშირებს ორივე კომპონენტს, რომ დაიწყოს "000" და დამატება 5 ბიტიანი გამომავალიდან მრიცხველიდან. ამრიგად, უზრუნველყოფილია 8 ბიტიანი შეყვანა.

შეზღუდვები:

ამ კოდების გასაშვებად Basys 3 დაფაზე, საჭირო იყო შეზღუდვების ფაილი, რომელიც თითოეულ სიგნალს ეუბნებოდა სად უნდა წასულიყო და როგორ იყო დაკავშირებული ნაწილები.

ნაბიჯი 4: კოდი (არდუინო)

ჩვენ დავპროგრამეთ Arduino Uno, რომ გამოიყენოს მოძრაობის სენსორი მოძრაობის გამოსავლენად და უზრუნველყოს გამოსავალი, რომელიც სიგნალს აძლევს LED- ს განათებას. გარდა ამისა, სენსორის გამოყენება მოძრაობის გამოსავლენად მოითხოვს გაშვებულ მარყუჟებს, რომლებიც მუდმივად ეძებენ ცვლილებებს მანძილზე. არსებითად, მას სჭირდება ტაიმერი, რომელიც მუშაობს ერთდროულად, რათა გამოაქვეყნოს "მაღალი" სიგნალი, რომ LED აანთოს, ხოლო ტაიმერი უნდა გადატვირთოს ახალი მოძრაობის გამოვლენისთანავე, რომლის განხორციელებაც თითქმის შეუძლებელია Vivado– ზე ცოდნის მოცულობის საფუძველზე. კლასის უფრო მეტიც, ჩვენ გამოვიყენეთ Arduino, რადგან შეუძლებელი იქნებოდა HC-SR04- ის გამოყენება Basys 3 დაფაზე, რადგან დაფა ამარაგებს მხოლოდ 3.3V– ს, ხოლო სენსორი მოითხოვს 5V დენის წყაროს. გამოვლენის მოძრაობის განსახორციელებლად, ეს არის რეალური კოდირება VHDL– ში CAD– ისგან განსხვავებით.

ჩვენ გამოვიყენეთ სენსორისთვის ჩამონტაჟებული პულსის ფუნქცია სენსორიდან თავდაპირველად გამოსული ხმასა და ობიექტზე დარტყმისას უკან გამომავალ ხმას შორის. შემდეგ ჩვენ ვიყენებთ ხმის სიჩქარეს და დროის ინტერვალს, რათა გამოვთვალოთ მანძილი ობიექტსა და სენსორს შორის. აქედან ჩვენ ვინახავთ მიმდინარე დისტანციას და თვალყურს ვადევნებთ მას. ჩვენ ვამოწმებთ მანძილს ყოველ 150 მმ -ში. ჩვენ ასევე გამოვიყენეთ elapsedmil ბიბლიოთეკა არდუინოს შიდა ტაიმერის გასაშვებად დროის გასვლის თვალყურის დევნისთვის. თუ ჩვენ აღმოვაჩენთ მანძილის ცვლილებას, რომელიც შეესაბამება მოძრაობას, ტაიმერი ნულდება და ის ინარჩუნებს შუქს 3 წამის გასვლამდე. როდესაც სენსორი აღმოაჩენს სხვა მოძრაობას, ტაიმერი გადატვირთულია 0 -ზე და LED სინათლის სიგნალი იქნება "მაღალი" მომდევნო 3 წამის განმავლობაში. ქვემოთ დავამატეთ ჩვენი Arduino კოდის ასლი.

ნაბიჯი 5: როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს

როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს!
როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს!
როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს!
როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს!
როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს!
როგორ შეესაბამება ჩვენი კომპონენტები ერთმანეთს!

როგორც ხედავთ "Basys3: Pmod Pin-out Diagram*" და Arduino Uno Board- ის ფოტოში, ჩვენ გამოვყავით და შევაფასეთ პორტები, რომლებსაც ჩვენ ვიყენებდით.

1. LED და Basys 3 დაფა

LED არის სერიულად დაკავშირებული 100Ω რეზისტორთან. -თეთრი მავთული აკავშირებს რეზისტორს Basys 3 დაფის PWR პინთან. -ყვითელი მავთული აერთებს LED- ს ბასის 3 დაფის H1- ს.

2. მოძრაობის სენსორი და არდუინო უნო

ნარინჯისფერი მავთული აკავშირებს მოძრაობის სენსორის Vcc (სიმძლავრეს) Arduino Uno დაფის 5V- სთან. მოძრაობის სენსორი Arduino Uno დაფის 9-ზე. შავი მავთული აკავშირებს მოძრაობის სენსორის pin GND- ს Arduino Uno დაფის GND- თან.

[მავთულები, რომლებიც ჩვენ გამოვიყენეთ, ძალიან მოკლე იყო კომპონენტებთან მისასვლელად, ამიტომ ისინი ერთმანეთთან იყო დაკავშირებული]

3. Basys 3 Board და Arduino Uno

ყვითელი მავთული აკავშირებს Basys 3 დაფის პინ A14- ს Arduino Uno დაფის 6 პინთან.

*ეს დიაგრამა აღებულია დიგილენტის "Basys 3 ™ FPGA Board Reference Manual" - დან, რომელიც შეგიძლიათ იხილოთ აქ.

ნაბიჯი 6: დემონსტრაცია

ნაბიჯი 7: დროა შეამოწმოთ ის

გილოცავთ! თქვენ დაასრულეთ ჩვენი მოძრაობის სენსორის და მრიცხველის კონტროლირებადი განათების პროექტი! დიდი მადლობა რომ კითხულობთ ჩვენს ინსტრუქციულ პოსტს. ახლა დროა თქვენ თვითონ სცადოთ ამ პროექტის შექმნა. თუ ყურადღებით მიჰყევით თითოეულ ნაბიჯს, თქვენ უნდა გქონდეთ მოძრაობის სენსორი და მრიცხველი, რომელიც მუშაობს ჩვენნაირი! ჩვენ გისურვებთ წარმატებებს ამ პროექტის მშენებლობაში და ვიმედოვნებთ, რომ მას შეუძლია წვლილი შეიტანოს როგორც ელექტროენერგიის, ასევე ბუნებრივი რესურსების დაზოგვაში!

გირჩევთ: