Πίνακας περιεχομένων:

Αισθητήρας κίνησης/φώτα ελεγχόμενου μετρητή: 7 βήματα
Αισθητήρας κίνησης/φώτα ελεγχόμενου μετρητή: 7 βήματα

Βίντεο: Αισθητήρας κίνησης/φώτα ελεγχόμενου μετρητή: 7 βήματα

Βίντεο: Αισθητήρας κίνησης/φώτα ελεγχόμενου μετρητή: 7 βήματα
Βίντεο: Σύνδρομο αποτυχημένης οσφυικής επέμβασης. Θεραπεία με ηλεκτρική διέγερση νωτιαίου μυελού. 2024, Νοέμβριος
Anonim
Αισθητήρας κίνησης/Φώτα ελεγχόμενης αντίστασης
Αισθητήρας κίνησης/Φώτα ελεγχόμενης αντίστασης

Αυτό το έργο δημιουργήθηκε ως τελικό έργο για ένα μάθημα Designηφιακού Σχεδιασμού στο 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 Basys 3 σανίδα
  • 1 Arduino Uno
  • 2 Breadboards
  • 1 Αισθητήρας υπερηχητικού εύρους HC-SR04
  • 9 Καλώδια από αρσενικό σε αρσενικό
  • 1 LED
  • 1 Αντίσταση 100Ω

Βήμα 2: Κώδικες (Vivado)

Κωδικοί (Vivado)
Κωδικοί (Vivado)

Μηχανή πεπερασμένης κατάστασης (δείτε το διάγραμμα κατάστασης παραπάνω):

Το LED απαιτούσε μηχανή πεπερασμένης κατάστασης. Ένα LED έχει μόνο δύο καταστάσεις ενεργοποίησης και απενεργοποίησης. Μόνο δύο είσοδοι ελέγχουν την κατάσταση του LED, τον μετρητή και τον αισθητήρα. Η μόνη φορά που πρέπει να είναι αναμμένη η λυχνία LED είναι όταν ο αισθητήρας ανιχνεύει κίνηση και όταν ο μετρητής μετρά από μηδέν έως τριάντα δευτερόλεπτα. Σε κάθε άλλη περίπτωση το LED θα σβήσει.

Όνομα αρχείου: LEDDES

Μετρητής:

Ο μετρητής μας επιτρέπει να περιορίσουμε το χρονικό διάστημα κατά το οποίο ο αισθητήρας κίνησης μπορεί να ενεργοποιήσει το LED. Η τιμή του εμφανίζεται στην οθόνη επτά τμημάτων του Basys 3 Board μέσω ενός πηγαίου κώδικα ("sseg_dec"). Όταν ο διακόπτης Reset είναι κάτω (τιμή: '0'), ο μετρητής αρχίζει να αυξάνεται κάθε δευτερόλεπτο από 0 σε 30. Όταν φτάσει το 30, παγώνει σε αυτόν τον αριθμό. Δεν θα επανεκκινηθεί από το 0 έως ότου ο διακόπτης Επαναφορά αλλάξει στο "1" και πίσω στο "1." Εάν η Επαναφορά γίνει "1" ενώ ο μετρητής πηγαίνει, ο μετρητής θα παγώσει σε οποιαδήποτε τιμή είχε φτάσει. Όταν η Επαναφορά επιστρέψει στο "0", ο μετρητής θα επανεκκινηθεί από 0 έως 30. Αυτή η εφαρμογή απαιτεί επίσης τη χρήση σήματος ρολογιού, ο κωδικός του παρέχεται παρακάτω ("clk_div2").

Όνομα αρχείου: FinalCounter

ΠΑΡΕΧΕΤΑΙ ΑΡΧΕΙΑ:

Επίδειξη επτά τμημάτων:

Αυτός ο κώδικας επιτρέπει στην οθόνη επτά τμημάτων να εμφανίζει δεκαδικές τιμές. Ένα υπομονάριο λειτουργεί ως αποκωδικοποιητής μεταξύ μιας δυαδικής εισόδου 8-bit και ενός δεκαδικού δυαδικού κωδικοποιημένου 4-bit. Το άλλο διαιρεί το σήμα του ρολογιού για να ανανεώσει την τιμή του με συγκεκριμένο ρυθμό.

Όνομα αρχείου: sseg_dec

Σήμα ρολογιού:

Αυτός ο κωδικός επιτρέπει στον μετρητή να αυξάνεται κατά βήματα 1 δευτερολέπτου. Χωρίζει τη συχνότητα του ρολογιού εισόδου σε μια πιο αργή συχνότητα. Προσαρμοστήκαμε για να παρέχουμε μια περίοδο 1 δευτερολέπτου με αλλαγή σταθεράς max_count: ακέραιος: = (3000000)”σε“σταθερή μέγιστη_μετρία: ακέραιος: = (50000000).”

Όνομα αρχείου: clk_div2

Παρέχονται αρχεία: sseg_dec, clk_div2 *Αυτά τα αρχεία προέλευσης παρέχονται από τον καθηγητή Bryan Mealy.

Βήμα 3: Κατανόηση του πώς συνδυάζονται (Σχήματα των στοιχείων VHDL)

Κατανόηση του πώς συνδυάζονται (σχήματα των στοιχείων VHDL)
Κατανόηση του πώς συνδυάζονται (σχήματα των στοιχείων VHDL)

Το κύριο αρχείο ("MainProjectDES") περιέχει όλα τα δευτερεύοντα αρχεία που συζητήθηκαν προηγουμένως. Συνδέονται με τον παραπάνω τρόπο. Τα διαφορετικά συστατικά διασυνδέονται χρησιμοποιώντας χάρτες θυρών για την αποστολή σήματος από το ένα στοιχείο στο άλλο.

Όπως ίσως έχετε παρατηρήσει, το FinalCounter παρέχει έξοδο 5-bit ενώ το sseg_dec απαιτεί είσοδο 8-bit. Για αντιστάθμιση, θέτουμε το σήμα που συνδέει και τα δύο εξαρτήματα να αρχίζει με "000" και να προσθέτει την έξοδο 5-bit από τον μετρητή. Παρέχει έτσι μια είσοδο 8-bit.

Περιορισμοί:

Για την εκτέλεση αυτών των κωδικών στον πίνακα Basys 3, απαιτήθηκε ένα αρχείο περιορισμών, το οποίο έλεγε σε κάθε σήμα πού να πάει και πώς συνδέθηκαν τα μέρη.

Βήμα 4: Κωδικός (Arduino)

Προγραμματίσαμε το Arduino Uno να χρησιμοποιεί τον αισθητήρα κίνησης για να ανιχνεύει κίνηση και να παρέχει έξοδο που σηματοδοτεί το LED να ανάψει. Επιπλέον, η χρήση του αισθητήρα για την ανίχνευση κίνησης απαιτεί βρόχους λειτουργίας που αναζητούν συνεχώς αλλαγή στην απόσταση. Ουσιαστικά, χρειάζεται ένα χρονόμετρο που λειτουργεί ταυτόχρονα για να βγάλει ένα σήμα "υψηλό" για να ανάψει το LED ενώ ο χρονοδιακόπτης πρέπει να επαναρυθμιστεί μόλις εντοπιστεί νέα κίνηση, κάτι που είναι σχεδόν αδύνατο να εφαρμοστεί στο Vivado με βάση το εύρος των γνώσεων της τάξης. Επιπλέον, χρησιμοποιήσαμε ένα Arduino επειδή δεν θα ήταν εφικτό να χρησιμοποιήσουμε το HC-SR04 με τον πίνακα Basys 3 αφού ο πίνακας τροφοδοτεί μόνο 3.3V ενώ ο αισθητήρας απαιτεί τροφοδοσία 5V. Για την εφαρμογή της κίνησης ανίχνευσης, είναι η πραγματική κωδικοποίηση σε αντίθεση με το CAD στο VHDL.

Χρησιμοποιήσαμε την ενσωματωμένη παλμική λειτουργία για τον αισθητήρα για να ανακτήσουμε τον χρόνο που πέρασε μεταξύ του ήχου που αρχικά εκπέμπεται από τον αισθητήρα και του ήχου που αναπηδά όταν χτυπά ένα αντικείμενο. Στη συνέχεια, χρησιμοποιούμε την ταχύτητα του ήχου και το χρονικό διάστημα για να υπολογίσουμε την απόσταση μεταξύ του αντικειμένου και του αισθητήρα. Από αυτό, αποθηκεύουμε την τρέχουσα απόσταση και την παρακολουθούμε. Ελέγχουμε την απόσταση κάθε 150ms. Χρησιμοποιήσαμε επίσης τη βιβλιοθήκη elapsedmil για να τρέξουμε έναν εσωτερικό χρονοδιακόπτη μέσα στο arduino για να παρακολουθούμε τον χρόνο που έχει παρέλθει. Εάν εντοπίσουμε μια αλλαγή απόστασης, η οποία αντιστοιχεί σε μια κίνηση, ο χρονοδιακόπτης μηδενίζεται και θα διατηρήσει το φως αναμμένο μέχρι να περάσουν 3 δευτερόλεπτα. Κάθε φορά που ο αισθητήρας ανιχνεύει άλλη κίνηση, ο χρονοδιακόπτης επαναφέρεται στο 0 και το σήμα για το φως LED θα είναι "υψηλό" για τα επόμενα 3 δευτερόλεπτα. Έχουμε επισυνάψει ένα αντίγραφο του κώδικα Arduino μας παρακάτω.

Βήμα 5: Πώς ταιριάζουν τα εξαρτήματά μας

Πώς ταιριάζουν τα εξαρτήματά μας μαζί!
Πώς ταιριάζουν τα εξαρτήματά μας μαζί!
Πώς ταιριάζουν τα εξαρτήματά μας μαζί!
Πώς ταιριάζουν τα εξαρτήματά μας μαζί!
Πώς ταιριάζουν τα εξαρτήματά μας μαζί!
Πώς ταιριάζουν τα εξαρτήματά μας μαζί!

Όπως μπορείτε να δείτε στο "Basys3: Pmod Pin-out Diagram*" και στη φωτογραφία του Arduino Uno Board, επισημάνουμε και επισημάνουμε τις θύρες που χρησιμοποιήσαμε.

1. Ο πίνακας LED και Basys 3

Το LED συνδέεται σε σειρά με την αντίσταση 100Ω. -Το λευκό σύρμα συνδέει την αντίσταση στην καρφίτσα PWR της πλακέτας Basys 3. -Το κίτρινο καλώδιο συνδέει το LED με τον πείρο H1 της πλακέτας Basys 3.

2. Ο αισθητήρας κίνησης και το Arduino Uno

-Το πορτοκαλί σύρμα συνδέει το Vcc (ισχύς) του αισθητήρα κίνησης με τον πείρο 5V της πλακέτας Arduino Uno. ο αισθητήρας κίνησης στον πείρο 9 της πλακέτας Arduino Uno.-Το μαύρο καλώδιο συνδέει τον πείρο GND του αισθητήρα κίνησης με τον πείρο GND της πλακέτας Arduino Uno.

[Τα καλώδια που χρησιμοποιήσαμε ήταν πολύ κοντά για να φτάσουν στα εξαρτήματα, έτσι ήταν διασυνδεδεμένα]

3. Το Basys 3 Board και το Arduino Uno

Το κίτρινο σύρμα συνδέει τον πείρο A14 του πίνακα Basys 3 με τον πείρο 6 του πίνακα Arduino Uno.

*Αυτό το διάγραμμα ελήφθη από το εγχειρίδιο Digilent "Basys 3 ™ FPGA Board Reference Manual", το οποίο μπορείτε να βρείτε εδώ.

Βήμα 6: Επίδειξη

Βήμα 7: Timeρα να το δοκιμάσετε

Συγχαρητήρια! Φτάσατε στο τέλος του έργου μας με αισθητήρα κίνησης και μετρητή μετρητή μετρητή! Σας ευχαριστούμε πολύ που διαβάσατε την ανάρτησή μας στο Instructables. Τώρα είναι καιρός να προσπαθήσετε να φτιάξετε μόνοι σας αυτό το έργο. Εάν ακολουθείτε προσεκτικά κάθε βήμα, θα πρέπει να έχετε αισθητήρα κίνησης και μετρητή μετρητή που λειτουργεί παρόμοια με το δικό μας! Σας ευχόμαστε καλή τύχη στην κατασκευή αυτού του έργου και ελπίζουμε ότι μπορεί να συμβάλει στην εξοικονόμηση ηλεκτρικής ενέργειας καθώς και των φυσικών πόρων!

Συνιστάται: