Læserne inviteres til
hjemmelavet produkt forfatter af Instructables under kaldenavnet Gearboxmakers, der viser afstanden mellem objektet og afstandsmåleren på en skalaindikator, og hvis det er for lille, spiller det en melodi.
Skibsføreren begynder arbejdet med designet ved at udarbejde sit skema:
Konklusionerne for at levere strømmen til afstandsmåleren er ikke vist i diagrammet, men på selve afstandsmåleren er alle de nødvendige symboler tilgængelige.
Skiftregistre 74HC595 (KR1564IR52) her er de næstvigtigste komponenter efter
Arduino. De bruges ofte, når du har brug for at styre mange belastninger, ved kun at bruge to udgange fra mikrokontrolleren. Meget forenklet kan deres handlingsprincip beskrives som følger. Du skriver på tastaturet - fysisk eller på skærmen. Naturligvis på samme tid trykker du på tasterne i rækkefølge. Resultatet er en linje, alle tegn, som du ser på skærmen på samme tid - parallelt. Antallet af kontrollerede belastninger er let at øge ved at tilføje flere skiftregistre til kæden. Antallet af udgange fra den involverede mikrokontroller vil ikke stige, men med en konstant dataoverførselshastighed vil den maksimale frekvens, hvormed hver af belastningerne kan tændes og slukkes, falde.
Da antallet af samtidige tændte LED'er ændres, lykkes masteren ikke med en fælles modstand - du skal tilføje en modstand til hver LED.
Guiden samler enheden
gør det selv på et brødbræt af perfboard-typen og forbinder flere ledere til Arduino, der tjener til at parallelisere strømledningerne og den fælles ledning, samt udveksle data med mikrokontrolleren. Styresignaler fra skifteregistre, lydemitter og emitter fra afstandsmåleren transmitteres fra Arduino til enheden, og signalerne, der genereres af modtageren af afstandsmåleren efter modtagelse af reflekterede svingninger, overføres til enheden. Dernæst vises brættet delvist samlet:
Guiden begynder at arbejde på softwaren, han får følgende skitse:
/ *
** Oprettet af: Charles Muchene
** @charlesmuchene
**
** Dato: 3. oktober 2013
**
** Tid: 1412 timer
**
** Afstandsmåler kode
** Systemet måler afstanden
** ved hjælp af HC-SR04 ultralydssensor
** og oversætter det til en serie
** af tændte LED'er
**
** Have det sjovt, og finjuster det!
* /
/ * Bibliotek til de melodiske pladser
** Den beskriver frekvenserne, der skal produceres * /
#include "pitches.h"
const int triggerPin = 10; // trigger pin (grøn)
const int echoPin = 9; // ekko pin (orange)
const int tonePin = 8; // tone pin (whilte-blue)
const int serialDataPin = 7; // seriel datapind (orange)
const int registerClockPin = 6; // registrer uretap (brun)
const int shiftRegisterClockPin = 5; // Skiftregisterur
const int numOfRegisters = 16; // antal registre
const boolean registers [numOfRegisters]; // register array
int litLEDs = 0; // ledet tæller
int-interval = 100; // rækkeværdi
int afstand; // afstand
const int count = rækkevidde / numOfRegisters; // (meter pr. LED)
// start melodi
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// kritisk afstand melodi
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// note varigheder: 4 = kvart note, 8 = ottende note osv.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
ugyldig opsætning ()
{
/ * Pin-konfigurationer * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Lys 'em up * /
lightEmUp ();
/ * Start melodi * /
playMelody ();
/ * Sluk for alle lysdioder * /
clearRegisters ();
} // opsætning
/ * Få afstand fra HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
forsinkelse Mikrosekunder (2);
/ * Send trigger signal * /
digitalWrite (triggerPin, HIGH);
forsinkelse Mikrosekunder (10);
digitalWrite (triggerPin, LOW);
/ * returafstand i centimeter * /
retur (pulseIn (echoPin, HIGH) / 2) / 29.1;
} // få afstand
// lyser alle lysdioder
void lightEmUp ()
{
for (int pin = 0; pin = 0; i--)
registre [i] = LAV;
writeRegisters ();
} // rydde registre
/ * Skriv registerværdier og gem dem * /
ugyldig skrivningRegistre ()
{
/ * Med registerurstiften lavt
** indholdet af lagerregistret
** ændres ikke af de ændrede skiftregisterværdier
** /
digitalWrite (registerClockPin, LOW);
/ * Gå igennem alle registre * /
for (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = registrerer [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // løkker alle registre
/ * Dette signal overfører indholdet af
** af skifteregisteret til lagerregistrerne
* /
digitalWrite (registerClockPin, HIGH);
} // skriv registre
// indstil en individuel pin HØJ eller LAV
void setRegisterPin (int-indeks, int-værdi)
{
registrerer [indeks] = værdi;
} // indstil registernålværdi
/ * Start start uMelody * /
void playMelody ()
{
for (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * For at beregne notens varighed,
tage et sekund divideret med notetype
/ * f.eks. kvart note = 1000/4,
** ottende note = 1000/8 osv. * /
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, melodi [detteNote], noteDuration);
/ * For at skelne noterne skal du indstille en minimumstid mellem dem.
** noteens varighed + 30% ser ud til at fungere godt * /
int pauseBetweenNotes = noteDuration * 1,30;
forsinkelse (pauseBetweenNotes);
noTone (8);
} // alle noter
} // Afspil opstartmelodi
/ * Kritisk melodi * /
void playCriticalMelody ()
{
for (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, criticalMelody [thisNote], noteDuration);
/ * For at skelne noterne skal du indstille en minimumstid mellem dem.
** noteens varighed + 30% ser ud til at fungere godt * /
int pauseBetweenNotes = noteDuration * 1,30;
forsinkelse (pauseBetweenNotes);
noTone (8);
} // luk alle noter
} // afspil kritisk melodi
void loop ()
{
/ * Få afstand * /
afstand = getDistance ();
/ * Beregn lysdioderne til lys * /
if (interval> = afstand)
litLEDs = (rækkevidde - afstand) / tælling;
andet
litLED'er = -1;
/ * Lysdioder afhængigt af den beregnede afstand * /
for (int pin = 0; pin = 13)
playCriticalMelody ();
} // loop
/ *****************************************************
* “Pitches.h” -definition
*
* Offentlige konstanter
* Konstanterne repræsenterer tonefrekvenser
* af de respektive noter på en standardkoncert
* instrumentindstilling såsom et klaver
***************************************************** /
#definer NOTE_B0 31
#definer NOTE_C1 33
#define NOTE_CS1 35
#definer NOTE_D1 37
#define NOTE_DS1 39
#definer NOTE_E1 41
#definer NOTE_F1 44
#definer NOTE_FS1 46
#definer NOTE_G1 49
#definer NOTE_GS1 52
#definer NOTE_A1 55
#define NOTE_AS1 58
#definer NOTE_B1 62
#definer NOTE_C2 65
#definer NOTE_CS2 69
#definer NOTE_D2 73
#definer NOTE_DS2 78
#definer NOTE_E2 82
#definer NOTE_F2 87
#definer NOTE_FS2 93
#definer NOTE_G2 98
#definer NOTE_GS2 104
#definer NOTE_A2 110
#definer NOTE_AS2 117
#definer NOTE_B2 123
#definer NOTE_C3 131
#definer NOTE_CS3 139
#definer NOTE_D3 147
#definer NOTE_DS3 156
#definer NOTE_E3 165
#definer NOTE_F3 175
#definer NOTE_FS3 185
#definer NOTE_G3 196
#definer NOTE_GS3 208
#definer NOTE_A3 220
#definer NOTE_AS3 233
#definer NOTE_B3 247
#definer NOTE_C4 262
#definer NOTE_CS4 277
#definer NOTE_D4 294
#definer NOTE_DS4 311
#definer NOTE_E4 330
#definer NOTE_F4 349
#definer NOTE_FS4 370
#definer NOTE_G4 392
#definer NOTE_GS4 415
#definer NOTE_A4 440
#definer NOTE_AS4 466
#definer NOTE_B4 494
#definer NOTE_C5 523
#definer NOTE_CS5 554
#definer NOTE_D5 587
#definer NOTE_DS5 622
#definer NOTE_E5 659
#definer NOTE_F5 698
#definer NOTE_FS5 740
#definer NOTE_G5 784
#definer NOTE_GS5 831
#definer NOTE_A5 880
#definer NOTE_AS5 932
#definer NOTE_B5 988
#definer NOTE_C6 1047
#definer NOTE_CS6 1109
#definer NOTE_D6 1175
#definer NOTE_DS6 1245
#definer NOTE_E6 1319
#definer NOTE_F6 1397
#definer NOTE_FS6 1480
#definer NOTE_G6 1568
#definer NOTE_GS6 1661
#definer NOTE_A6 1760
#definer NOTE_AS6 1865
#definer NOTE_B6 1976
#definer NOTE_C7 2093
#definer NOTE_CS7 2217
#definer NOTE_D7 2349
#definer NOTE_DS7 2489
#definer NOTE_E7 2637
#definer NOTE_F7 2794
#definer NOTE_FS7 2960
#definer NOTE_G7 3136
#definer NOTE_GS7 3322
#definer NOTE_A7 3520
#definer NOTE_AS7 3729
#definer NOTE_B7 3951
#definer NOTE_C8 4186
#definer NOTE_CS8 4435
#definer NOTE_D8 4699
#definer NOTE_DS8 4978
Efter afsluttet samling og udfyldning af skitsen viser guiden, at han lykkedes:
Enheden kan for eksempel informere en medarbejder om en fotobutik, kopicenter, metalreparation osv. om klientens udseende.