Läsarna är inbjudna till
hemgjorda produkt författare av Instructables under smeknamnet Gearboxmakers, som visar avståndet mellan objektet och räckviddsökaren på en skalaindikator, och om det är för litet spelar det en melodi.
Befälhavaren börjar arbeta med designen genom att utarbeta sitt schema:
Slutsatserna för att leverera kraft till avståndsmätaren visas inte i diagrammet, men på avståndsmätaren i sig är alla nödvändiga notationer tillgängliga.
Skiftregister 74HC595 (KR1564IR52) här är de näst viktigaste komponenterna efter
Arduino. De används ofta när du behöver hantera många laster, med bara två utgångar från mikrokontrollern. Mycket förenklad kan deras handlingsprincip beskrivas på följande sätt. Du skriver på tangentbordet - fysiskt eller på skärmen. Naturligtvis trycker du samtidigt på tangenterna i tur och ordning. Resultatet är en linje, alla tecken som du ser på skärmen samtidigt - parallellt. Antalet kontrollerade laster är lätt att öka genom att lägga till fler skiftregister i kedjan. Antalet utgångar från den involverade mikrokontrollern kommer inte att öka, men med en konstant dataöverföringshastighet minskar den maximala frekvensen med vilken varje belastning kan slås på och av.
Eftersom antalet samtidigt aktiverade lysdioder förändras misslyckas befälhavaren med ett gemensamt motstånd - du måste lägga till ett motstånd till varje lysdiod.
Guiden monterar enheten
gör det själv på en brädskiva av perfboard-typen och ansluter flera ledningar till Arduino, som tjänar till att parallellisera kraftledningarna och den gemensamma kabeln, samt utbyta data med mikrokontrollern. Signalerna från Arduino till enheten används för att styra skiftregistren, ljudavgivaren och emittern från avståndsökaren, och i motsatt riktning, signalerna som alstras av mottagaren av avståndsökaren efter mottagande av reflekterade svängningar. Därefter visas brädet delvis sammansatt:
Guiden börjar arbeta med programvaran, han får följande skiss:
/ *
** Skapad av: Charles Muchene
** @charlesmuchene
**
** Datum: 3 oktober 2013
**
** Tid: 1412 timmar
**
** Distansmätarkod
** Systemet mäter avståndet
** använder HC-SR04 ultraljudssensor
** och översätter det till en serie
** för tända lysdioder
**
** Ha kul och finjustera det!
* /
/ * Bibliotek för de melodiska tonhöjderna
** Den beskriver frekvenserna som ska produceras * /
# inkludera "pitches.h"
const int triggerPin = 10; // trigger pin (grön)
const int echoPin = 9; // echo pin (orange)
const int tonePin = 8; // tonstift (whilte-blue)
const int serialDataPin = 7; // seriedatapinne (orange)
const int registerClockPin = 6; // registrera klocknål (brun)
const int shiftRegisterClockPin = 5; // skiftregisterklocka
const int numOfRegisters = 16; // antal register
const boolean-register [numOfRegisters]; // register array
int litLEDs = 0; // ledstifträknare
int-intervall = 100; // intervallvärde
int avstånd; // avstånd
const int count = intervall / numOfRegister; // (meter per LED)
// starta melodi
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// kritisk distansmelodi
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// anteckningsvaraktigheter: 4 = kvartalsnot, 8 = åttondel, etc.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
ogiltig installation ()
{
/ * Stiftkonfigurationer * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Light 'em up * /
lightEmUp ();
/ * Starta melodi * /
playMelody ();
/ * Stäng av alla lysdioder * /
clearRegisters ();
} // installation
/ * Få avstånd från HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
fördröjning Mikrosekunder (2);
/ * Skicka triggersignal * /
digitalWrite (triggerPin, HIGH);
fördröjning Mikrosekunder (10);
digitalWrite (triggerPin, LOW);
/ * returavstånd i centimeter * /
retur (pulseIn (echoPin, HIGH) / 2) / 29.1;
} // få avstånd
// tända alla lysdioder
void lightEmUp ()
{
för (int pin = 0; pin = 0; i--)
registrerar [i] = LÅG;
writeRegisters ();
} // rensa register
/ * Skriv registervärden och lagra dem * /
void writeRegisters ()
{
/ * Med registerklockstiftet lågt
** innehållet i lagringsregistret
** ändras inte av de ändrade värdena på skiftregistret
** /
digitalWrite (registerClockPin, LOW);
/ * Gå igenom alla register * /
för (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = registrerar [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // loopar alla register
/ * Denna signal överför innehållet i
** i skiftregistret till lagringsregistren
* /
digitalWrite (registerClockPin, HIGH);
} // skriva register
// Ställ in en individuell stift HÖG eller LÅG
void setRegisterPin (int-index, int-värde)
{
registrerar [index] = värde;
} // Ställ in registerstiftvärde
/ * Spela start uMelody * /
void playMelody ()
{
för (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * För att beräkna notens varaktighet,
ta en sekund dividerat med anteckningstyp
/ * t.ex. fjärdedel = 1000/4,
** åttande anteckning = 1000/8, etc * /
int noteDuration = 1000 / noteDurations [thisNote];
ton (tonePin, melodi [dettaNotera], anteckning Varighet);
/ * För att särskilja anteckningarna, ställ in en minimitid mellan dem.
** notens varaktighet + 30% verkar fungera bra * /
int pauseBetweenNotes = noteDuration * 1,30;
fördröjning (pauseBetweenNotes);
noTone (8);
} // alla anteckningar
} // spela upp startmelodi
/ * Kritisk melodi * /
void playCriticalMelody ()
{
för (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, criticalMelody [thisNote], noteDuration);
/ * För att särskilja anteckningarna, ställ in en minimitid mellan dem.
** notens varaktighet + 30% verkar fungera bra * /
int pauseBetweenNotes = noteDuration * 1,30;
fördröjning (pauseBetweenNotes);
noTone (8);
} // slinga alla anteckningar
} // spela kritisk melodi
void loop ()
{
/ * Få avstånd * /
avstånd = getDistance ();
/ * Beräkna lysdioderna som tänds * /
if (intervall> = avstånd)
litLEDs = (räckvidd - avstånd) / räkning;
annars
litLEDs = -1;
/ * Lysdioder beroende på beräknat avstånd * /
för (int pin = 0; pin = 13)
playCriticalMelody ();
} // loop
/ *****************************************************
* "Pitches.h" -definition
*
* Offentliga konstanter
* Konstanterna representerar tonhöjdsfrekvenserna
* av respektive anteckningar om en standardkonsert
* instrumentinställning som ett piano
**************************************************** /
#definiera NOTE_B0 31
#definiera NOTE_C1 33
#definiera NOTE_CS1 35
#definiera NOT_D1 37
#definiera NOTE_DS1 39
#definiera NOT_E1 41
#definiera NOT_F1 44
#definiera NOTE_FS1 46
#definiera NOT_G1 49
#definiera NOTE_GS1 52
#definiera NOT_A1 55
#definiera NOTE_AS1 58
#definiera NOTE_B1 62
#definiera NOTE_C2 65
#definiera NOTE_CS2 69
#definiera NOT_D2 73
#definiera NOTE_DS2 78
#definiera NOTE_E2 82
#definiera NOTE_F2 87
#definiera NOTE_FS2 93
#definiera NOTE_G2 98
#definiera NOTE_GS2 104
#definiera NOTE_A2 110
#definiera NOTE_AS2 117
#definiera NOTE_B2 123
#definiera NOT_C3 131
#definiera NOTE_CS3 139
#definiera NOT_D3 147
#definiera NOTE_DS3 156
#definiera NOT_E3 165
#definiera NOTE_F3 175
#definiera NOTE_FS3 185
#definiera NOT_G3 196
#definiera NOTE_GS3 208
#definiera NOTE_A3 220
#definiera NOTE_AS3 233
#definiera NOTE_B3 247
#definiera NOT_C4 262
#definiera NOTE_CS4 277
#definiera NOT_D4 294
#definiera NOTE_DS4 311
#definiera NOTE_E4 330
#definiera NOTE_F4 349
#definiera NOTE_FS4 370
#definiera NOTE_G4 392
#definiera NOTE_GS4 415
#definiera NOTE_A4 440
#definiera NOTE_AS4 466
#definiera NOT_B4 494
#definiera NOTE_C5 523
#definiera NOTE_CS5 554
#definiera NOT_D5 587
#definiera NOTE_DS5 622
#definiera NOT_E5 659
#definiera NOT_F5 698
#definiera NOTE_FS5 740
#definiera NOT_G5 784
#definiera NOTE_GS5 831
#definiera NOTE_A5 880
#definiera NOTE_AS5 932
#definiera NOTE_B5 988
#definiera NOTE_C6 1047
#definiera NOTE_CS6 1109
#definiera NOTE_D6 1175
#definiera NOTE_DS6 1245
#definiera NOTE_E6 1319
#definiera NOT_F6 1397
#definiera NOTE_FS6 1480
#definiera NOT_G6 1568
#definiera NOTE_GS6 1661
#definiera NOTE_A6 1760
#definiera NOTE_AS6 1865
#definiera NOT_B6 1976
#definiera NOTE_C7 2093
#definiera NOTE_CS7 2217
#definiera NOT_D7 2349
#definiera NOTE_DS7 2489
#definiera NOT_E7 2637
#definiera NOT_F7 2794
#definiera NOTE_FS7 2960
#definiera NOTE_G7 3136
#definiera NOTE_GS7 3322
#definiera NOT_A7 3520
#definiera NOTE_AS7 3729
#definiera NOTE_B7 3951
#definiera NOTE_C8 4186
#definiera NOTE_CS8 4435
#definiera NOTE_D8 4699
#definiera NOTE_DS8 4978
Efter att ha slutfört monteringen och fyllt skissen visar guiden att han lyckades:
Enheten kan till exempel informera en anställd om en fotobutik, kopior, metallreparationer etc. om klientens utseende.