Leser sind eingeladen zu
hausgemacht Autor von Instructables unter dem Spitznamen Gearboxmakers, der den Abstand zwischen dem Objekt und dem Entfernungsmesser auf einer Skalenanzeige anzeigt und, wenn er zu klein ist, eine Melodie spielt.
Der Meister beginnt mit der Arbeit am Entwurf, indem er sein Schema erstellt:
Die Schlussfolgerungen für die Stromversorgung des Entfernungsmessers sind in der Abbildung nicht dargestellt, aber auf dem Entfernungsmesser selbst sind alle erforderlichen Symbole verfügbar.
Die Schieberegister 74HC595 (KR1564IR52) sind hier die zweitwichtigsten Komponenten nach
Arduino. Sie werden häufig verwendet, wenn Sie viele Lasten mit nur zwei Ausgängen des Mikrocontrollers verwalten müssen. Sehr vereinfacht kann ihr Wirkprinzip wie folgt beschrieben werden. Sie tippen auf der Tastatur - physisch oder auf dem Bildschirm. Gleichzeitig drücken Sie natürlich nacheinander nacheinander die Tasten. Das Ergebnis ist eine Linie, deren Zeichen gleichzeitig auf dem Bildschirm angezeigt werden - parallel. Die Anzahl der gesteuerten Lasten kann leicht erhöht werden, indem der Kette mehr Schieberegister hinzugefügt werden. Die Anzahl der Ausgänge des beteiligten Mikrocontrollers nimmt nicht zu, aber bei konstanter Datenübertragungsgeschwindigkeit verringert sich die maximale Frequenz, mit der jede der Lasten ein- und ausgeschaltet werden kann.
Da sich die Anzahl der gleichzeitig eingeschalteten LEDs ändert, kann der Master nicht mit einem gemeinsamen Widerstand auskommen - Sie müssen jeder LED einen Widerstand hinzufügen.
Der Assistent stellt das Gerät zusammen
mit seinen eigenen Händen auf einem Steckbrett vom Typ Perfboard und verbindet mehrere Leiter mit dem Arduino, die dazu dienen, die Stromleitungen und den gemeinsamen Draht zu parallelisieren sowie Daten mit dem Mikrocontroller auszutauschen. Die Signale vom Arduino zum Gerät werden verwendet, um die Schieberegister, den Schallemitter und den Emitter des Entfernungsmessers und in entgegengesetzter Richtung die vom Empfänger des Entfernungsmessers beim Empfang reflektierter Schwingungen erzeugten Signale zu steuern. Als nächstes wird die Platine teilweise zusammengebaut gezeigt:
Der Assistent beginnt mit der Arbeit an der Software und erhält die folgende Skizze:
/ *
** Erstellt von: Charles Muchene
** @charlesmuchene
** **.
** Datum: 3. Oktober 2013
** **.
** Zeit: 1412 Uhr
** **.
** Code des Entfernungsmessers
** Das System misst die Entfernung
** mit dem Ultraschallsensor HC-SR04
** und übersetzt es in eine Reihe
** von leuchtenden LEDs
** **.
** Viel Spaß und optimiere es!
* /
/ * Bibliothek für die melodischen Tonhöhen
** Es beschreibt die zu erzeugenden Frequenzen * /
#include "Pitches.h"
const int triggerPin = 10; // Trigger Pin (grün)
const int echoPin = 9; // Echostift (orange)
const int tonPin = 8; // Tonstift (weißblau)
const int serialDataPin = 7; // serieller Datenstift (orange)
const int registerClockPin = 6; // Uhrstift registrieren (braun)
const int shiftRegisterClockPin = 5; // Schieberegistertakt
const int numOfRegisters = 16; // Anzahl der Register
const boolean registers [numOfRegisters]; // Array registrieren
int litLEDs = 0; // LED-Pin-Zähler
int range = 100; // Bereichswert
int Entfernung; // Entfernung
const int count = range / numOfRegisters; // (Meter pro LED)
// Melodie starten
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// Melodie für kritische Distanz
int CriticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// Notendauer: 4 = Viertelnote, 8 = Achtelnote usw.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int CriticalNoteDurations [] = {4, 4, 4, 4};
void setup ()
{
/ * Pin-Konfigurationen * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Zünde sie an * /
lightEmUp ();
/ * Melodie starten * /
playMelody ();
/ * Alle LEDs ausschalten * /
clearRegisters ();
} // einrichten
/ * Entfernung von HC-SR04 abrufen * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
delayMicroseconds (2);
/ * Triggersignal senden * /
digitalWrite (triggerPin, HIGH);
delayMicroseconds (10);
digitalWrite (triggerPin, LOW);
/ * Rücklauf in Zentimetern * /
return (pulsIn (echoPin, HIGH) / 2) / 29.1;
} // Entfernung bekommen
// Alle LEDs anzünden
void lightEmUp ()
{
für (int pin = 0; pin = 0; i--)
Register [i] = LOW;
writeRegisters ();
} // Register löschen
/ * Registerwerte schreiben und speichern * /
void writeRegisters ()
{
/ * Mit niedrig eingestelltem Registertaktstift
** den Inhalt des Speicherregisters
** werden durch die sich ändernden Schieberegisterwerte nicht verändert
** /
digitalWrite (registerClockPin, LOW);
/ * Alle Register durchlaufen * /
für (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = Register [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // schleift alle Register
/ * Dieses Signal überträgt den Inhalt von
** des Schieberegisters zu den Speicherregistern
* /
digitalWrite (registerClockPin, HIGH);
} // Register schreiben
// setze einen einzelnen Pin auf HIGH oder LOW
void setRegisterPin (int index, int value)
{
Register [Index] = Wert;
} // Register-Pin-Wert setzen
/ * Play start uMelody * /
void playMelody ()
{
for (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * Um die Notendauer zu berechnen,
Nehmen Sie sich eine Sekunde geteilt durch den Notentyp
/ * z.B. Viertelnote = 1000/4,
** Achtelnote = 1000/8 usw. * /
int noteDuration = 1000 / noteDurations [thisNote];
Ton (TonPin, Melodie [thisNote], noteDuration);
/ * Um die Noten zu unterscheiden, legen Sie eine Mindestzeit zwischen ihnen fest.
** Die Dauer der Note + 30% scheint gut zu funktionieren * /
int pauseBetweenNotes = noteDuration * 1.30;
delay (pauseBetweenNotes);
noTone (8);
} // alle Notizen
} // Startmelodie spielen
/ * Kritische Melodie * /
void playCriticalMelody ()
{
for (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
Ton (TonePin, CriticalMelody [thisNote], NoteDuration);
/ * Um die Noten zu unterscheiden, legen Sie eine Mindestzeit zwischen ihnen fest.
** Die Dauer der Note + 30% scheint gut zu funktionieren * /
int pauseBetweenNotes = noteDuration * 1.30;
delay (pauseBetweenNotes);
noTone (8);
} // Alle Noten schleifen
} // kritische Melodie spielen
void loop ()
{
/ * Entfernung erhalten * /
distance = getDistance ();
/ * Berechne die LEDs zum Leuchten * /
if (Bereich> = Entfernung)
litLEDs = (Bereich - Entfernung) / Anzahl;
sonst
litLEDs = -1;
/ * LEDs leuchten je nach berechneter Entfernung * /
für (int pin = 0; pin = 13)
playCriticalMelody ();
} // Schleife
/ ************************************************** *
* Definition "Pitches.h"
* *
* Öffentliche Konstanten
* Die Konstanten repräsentieren die Tonhöhenfrequenzen
* der jeweiligen Noten zu einem Standardkonzert
* Instrumentenstimmung wie ein Klavier
*************************************************** *
#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
Nach Abschluss der Montage und dem Ausfüllen der Skizze zeigt der Assistent, dass er erfolgreich war:
Das Gerät kann beispielsweise einen Mitarbeiter über einen Fotoladen, ein Kopierzentrum, eine Metallreparatur usw. informieren. über das Aussehen des Kunden.