Οι αναγνώστες καλούνται να
σπιτικό συγγραφέας των Instructables με το ψευδώνυμο Gearboxmakers, ο οποίος εμφανίζει την απόσταση μεταξύ του αντικειμένου και του εύρους εύρεσης τιμών σε μια ένδειξη κλίμακας και αν είναι πολύ μικρό, αναπαράγει μια μελωδία.
Ο πλοίαρχος αρχίζει να ασχολείται με το σχεδιασμό, καταρτίζοντας το σχέδιό του:
Τα συμπεράσματα για την παροχή ισχύος στον μετρητή εύρους ζώνης δεν φαίνονται στο διάγραμμα, αλλά στον ίδιο τον εύρος μετρητή υπάρχουν όλες οι απαραίτητες σημειώσεις.
Οι καταχωρητές μετατόπισης 74HC595 (KR1564IR52) εδώ είναι τα δεύτερο πιο σημαντικά συστατικά μετά
Arduino. Συχνά χρησιμοποιούνται όταν χρειάζεται να διαχειριστείτε πολλά φορτία, χρησιμοποιώντας μόνο δύο εξόδους από τον μικροελεγκτή. Πολύ απλοποιημένη, η αρχή της δράσης τους μπορεί να περιγραφεί ως εξής. Πληκτρολογείτε στο πληκτρολόγιο - φυσική ή επί της οθόνης. Φυσικά, ταυτόχρονα πατάτε τα πλήκτρα με τη σειρά, διαδοχικά. Το αποτέλεσμα είναι μια γραμμή, όλα τα σημάδια που βλέπετε ταυτόχρονα στην οθόνη - παράλληλα. Ο αριθμός των ελεγχόμενων φορτίων αυξάνεται εύκολα με την προσθήκη περισσότερων καταχωρητών ολίσθησης στην αλυσίδα. Ο αριθμός των εξόδων του εμπλεκόμενου μικροελεγκτή δεν θα αυξηθεί, αλλά με μια σταθερή ταχύτητα μεταφοράς δεδομένων, η μέγιστη συχνότητα με την οποία μπορεί να ενεργοποιηθεί και να απενεργοποιηθεί κάθε φορτίο θα μειωθεί.
Από τη στιγμή που αλλάζει ο αριθμός των ενεργοποιημένων LED ταυτόχρονα, ο κυβερνήτης δεν μπορεί να διαχειριστεί με μία κοινή αντίσταση - πρέπει να προσθέσετε μια αντίσταση σε κάθε LED.
Ο οδηγός συναρμολογεί τη συσκευή
το κάνετε μόνοι σας σε ένα πινέλο τύπου perfboard και συνδέει αρκετούς αγωγούς με το Arduino, οι οποίοι χρησιμεύουν για την παραλληλισμό των γραμμών μεταφοράς ηλεκτρικού ρεύματος και του κοινού καλωδίου, καθώς και για την ανταλλαγή δεδομένων με τον μικροελεγκτή. Τα σήματα ελέγχου από τους καταχωρητές μετατόπισης, τον εκπομπό ήχου και τον εκπομπό του εύρους ζώνης μεταδίδονται από το Arduino στη συσκευή και τα σήματα που παράγονται από τον δέκτη του εύρους ζώνης κατά την παραλαβή ανακλώμενων ταλαντώσεων μεταδίδονται στη συσκευή. Στη συνέχεια, η σανίδα εμφανίζεται μερικώς συναρμολογημένη:
Ο οδηγός αρχίζει να εργάζεται για το λογισμικό, παίρνει το ακόλουθο σκίτσο:
/ *
** Δημιουργία: Charles Muchene
** @charlesmuchene
**
** Ημερομηνία: 3 Οκτωβρίου 2013
**
** Χρόνος: 1412 ώρες
**
** Κωδικός μέτρου απόστασης
** Το σύστημα μετρά την απόσταση
** χρησιμοποιώντας υπερηχητικό αισθητήρα HC-SR04
** και μεταφράζεται σε μια σειρά
** των αναμμένων LED
**
** Καλή διασκέδαση και τσίμπημα!
* /
/ * Βιβλιοθήκη για τις μελωδικές γωνίες
** Περιγράφει τις συχνότητες που πρέπει να παραχθούν * /
#include "pitches.h"
const int triggerPin = 10; // πείρο ενεργοποίησης (πράσινο)
const int echoPin = 9; // ακίδα (πορτοκαλί)
const int tonePin = 8; // pin (τόνος-μπλε)
const int serialDataPin = 7; // καρφίτσα σειριακών δεδομένων (πορτοκαλί)
const int καταχωρητήςClockPin = 6; // καταχωρίστε τον ακροδέκτη ρολογιού (καφέ)
const int shiftRegisterClockPin = 5; // ρολόι καταχωρητή μετατόπισης
const int numOfRegisters = 16; // αριθμός μητρώων
const boolean μητρώα [numOfRegisters]; // καταχωρίστε πίνακα
int litLEDs = 0; // μετρητής ακίδων οδήγησης
int εύρος = 100; // εύρος τιμών
int απόσταση? // απόσταση
const int count = εύρος / numOfRegisters; // (μέτρα ανά LED)
// μελωδία εκκίνησης
int μελωδία [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8}.
// μελωδία κρίσιμης απόστασης
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8}.
// σημειώσεις διάρκειες: 4 = τετράμηνο, 8 = όγδοη σημείωση κ.λπ.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2}.
int criticalNoteDurations [] = {4, 4, 4, 4}.
void setup ()
{
/ * Ρυθμίσεις ακίδων * /
pinMode (triggerPin, OUTPUT).
pinMode (echoPin, είσοδος);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT).
pinMode (shiftRegisterClockPin, OUTPUT).
/ * Φωτισμός 'επάνω * /
lightEmUp ();
/ * Έναρξη μελωδίας * /
playMelody ();
/ * Απενεργοποίηση όλων των λυχνιών LED * /
clearRegisters ();
} / / setup
/ * Απομακρύνετε από HC-SR04 * /
int getDistance ()
{
ψηφιακή γραφή (triggerPin, LOW);
καθυστέρησηΜικοδευτερόλεπτα (2);
/ * Αποστολή σήματος ενεργοποίησης * /
Ψηφιακή εγγραφή (triggerPin, HIGH);
καθυστέρησηMicroseconds (10);
ψηφιακή γραφή (triggerPin, LOW);
/ * απόσταση επιστροφής σε εκατοστά * /
επιστροφή (παλμόςIn (echoPin, HIGH) / 2) / 29.1;
} // πάρτε απόσταση
// ανάβουν όλα τα led
void lightEmUp ()
{
για (int pin = 0, pin = 0; i -)
τα μητρώα [i] = LOW;
writeRegisters ();
} // διαγραφή καταχωρητών
/ * Γράψτε τις τιμές του καταχωρητή και τις αποθηκεύστε * /
void writeRegisters ()
{
/ * Με την κασέτα ρολογιού καταχωρητή χαμηλή
** τα περιεχόμενα του μητρώου αποθήκευσης
** δεν μεταβάλλονται από τις μεταβαλλόμενες τιμές καταχωρητή μετατόπισης
** /
ψηφιακή καταγραφή (registerClockPin, LOW);
/ * Βρόχος μέσω όλων των καταχωρητών * /
για το (int i = numOfRegisters - 1; i> = 0; i -)
{
ψηφιακή καταγραφή (shiftRegisterClockPin, χαμηλή);
int val = μητρώα [i];
ψηφιακή καταγραφή (serialDataPin, val);
ψηφιακή καταγραφή (shiftRegisterClockPin, υψηλή);
} // βρόχους όλων των καταχωρητών
/ * Αυτό το σήμα μεταφέρει τα περιεχόμενα του
** του μητρώου μετατόπισης στους καταχωρητές αποθήκευσης
* /
ψηφιακή καταγραφή (registerClockPin, υψηλή);
} // εγγραφή μητρώων
// ορίστε μια ξεχωριστή καρφίτσα HIGH ή LOW
void setRegisterPin (ευρετήριο int, τιμή int)
{
καταχωρητές [ευρετήριο] = τιμή;
} // ορίστε την τιμή του pin του καταχωρητή
/ * Έναρξη αναπαραγωγής uMelody * /
void playMelody ()
{
για (int thisNote = 0 · thisNote <10 · thisNote ++)
{
/ * Για να υπολογίσετε τη διάρκεια της σημείωσης,
πάρτε ένα δευτερόλεπτο διαιρούμενο με τύπο σημείωσης
/ * π.χ. τετράμηνο σημείωμα = 1000/4,
** όγδοη σημείωση = 1000/8, κ.λπ. * /
int noteDuration = 1000 / noteΔημειώσεις [thisNote];
τόνος (tonePin, μελωδία [thisNote], noteDuration);
/ * Για να διακρίνετε τις σημειώσεις, ορίστε έναν ελάχιστο χρόνο μεταξύ τους.
** η διάρκεια της σημείωσης + 30% φαίνεται να λειτουργεί καλά * /
int pauseBetweenNotes = noteDuration * 1.30;
καθυστέρηση (παύσηΜεγέθυνση);
noTone (8);
} // όλες τις σημειώσεις
} // αναπαραγωγή μελωδίας εκκίνησης
/ * Κρίσιμη μελωδία * /
void playCriticalMelody ()
{
για (int thisNote = 0 · thisNote <4 · thisNote ++)
{
int noteDuration = 1000 / noteΔημειώσεις [thisNote];
τόνος (tonePin, criticalMelody [thisNote], noteDuration).
/ * Για να διακρίνετε τις σημειώσεις, ορίστε έναν ελάχιστο χρόνο μεταξύ τους.
** η διάρκεια της σημείωσης + 30% φαίνεται να λειτουργεί καλά * /
int pauseBetweenNotes = noteDuration * 1.30;
καθυστέρηση (παύσηΜεγέθυνση);
noTone (8);
} // βρόχο όλες τις σημειώσεις
} // αναπαραγωγή κρίσιμης μελωδίας
κενός βρόχος ()
{
/ * Αποκτήστε απόσταση * /
απόσταση = getDistance ();
/ * Υπολογίστε τα LED που ανάβουν * /
αν (εύρος> = απόσταση)
litLEDs = (απόσταση - απόσταση) / μέτρηση.
αλλού
litLEDs = -1;
/ * Φως LED ανάλογα με την υπολογισμένη απόσταση * /
για (int pin = 0, pin = 13)
playCriticalMelody ();
} // βρόχο
/ ********************************************************
* Ο ορισμός "Pitches.h"
*
* Δημόσια Σταθερά
* Οι σταθερές αντιπροσωπεύουν τις συχνότητες του βήματος
* των αντίστοιχων σημειώσεων για μια τυποποιημένη συναυλία
* συντονισμός οργάνων, όπως ένα πιάνο
******************************************************** /
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
Αφού ολοκληρώσετε τη συναρμολόγηση και γεμίσετε το σκίτσο, ο οδηγός δείχνει ότι πέτυχε:
Η συσκευή μπορεί, για παράδειγμα, να ενημερώσει έναν υπάλληλο για ένα κατάστημα φωτογραφιών, κέντρο αντιγραφής, επισκευή μετάλλων κ.λπ. σχετικά με την εμφάνιση του πελάτη.