Leserne blir invitert til
hjemmelaget produkt forfatter av Instructables under kallenavnet Gearboxmakers, som viser avstanden mellom objektet og rekkeviddesøkeren på en skalaindikator, og hvis den er for liten, spiller den en melodi.
Mesteren begynner arbeidet med designen ved å tegne opp skjemaet:
Konklusjonene for å levere strøm til avstandsmåleren er ikke vist i diagrammet, men på selve avstandsmåleren er alle nødvendige notasjoner tilgjengelige.
Skiftregistre 74HC595 (KR1564IR52) her er de nest viktigste komponentene etter
Arduino. De brukes ofte når du trenger å håndtere mange belastninger, bare ved å bruke to utganger fra mikrokontrolleren. Veldig forenklet kan deres handlingsprinsipp beskrives som følger. Du skriver på tastaturet - fysisk eller på skjermen. Naturligvis, samtidig trykker du på tastene i tur og orden. Resultatet er en linje, alle tegnene du ser på skjermen samtidig - parallelt. Antall kontrollerte laster er lett å øke ved å legge til flere skiftregistre i kjeden. Antallet utganger fra den involverte mikrokontrolleren vil ikke øke, men med en konstant dataoverføringshastighet vil den maksimale frekvensen som hver av lastene kan slås på og av reduseres.
Siden antallet lysdioder som samtidig slås på endres, klarer ikke mesteren å ha en felles motstand - du må legge til en motstand til hver LED.
Veiviseren monterer enheten
gjør det selv på et brødbord av perfboard-typen og kobler flere ledere til Arduino, som tjener til å parallellisere kraftledningene og fellestråden, samt utveksle data med mikrokontrolleren. Styresignaler fra skiftregistrene, lydutsenderen og emitteren for avstandsmåleren overføres fra Arduino til enheten, og signalene som genereres av mottakeren til avstandsmåleren etter mottak av reflekterte svingninger blir overført til enheten. Deretter vises brettet delvis montert:
Veiviseren begynner å jobbe med programvaren, han får følgende skisse:
/ *
** Laget av: Charles Muchene
** @charlesmuchene
**
** Dato: 3. oktober 2013
**
** Tid: 1412 timer
**
** Avstandsmåler kode
** Systemet måler avstanden
** bruker HC-SR04 ultralydsensor
** og oversetter det til en serie
** av opplyste lysdioder
**
** Ha det gøy og finpusse det!
* /
/ * Bibliotek for de melodiske tonene
** Den beskriver frekvensene som skal produseres * /
#include "pitches.h"
const int triggerPin = 10; // trigger pin (grønn)
const int echoPin = 9; // ekkopinne (oransje)
const int tonePin = 8; // tonepinne (whilte-blue)
const int serialDataPin = 7; // seriell datapinne (oransje)
const int registerClockPin = 6; // register klokke pin (brun)
const int shiftRegisterClockPin = 5; // skiftregisterklokke
const int numOfRegisters = 16; // antall registre
const boolean registers [numOfRegisters]; // register array
int litLEDs = 0; // ledet teller
int-område = 100; // rekkevidde
int distanse; // avstand
const int count = range / numOfRegisters; // (meter per LED)
// oppstartmelodi
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// kritisk distansemelodi
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// note varigheter: 4 = kvart note, 8 = åttende note, etc.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
ugyldig oppsett ()
{
/ * Pinnekonfigurasjoner * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Lys opp * /
lightEmUp ();
/ * Start melodi * /
playMelody ();
/ * Slå av alle lysdioder * /
clearRegisters ();
} // oppsett
/ * Få avstand fra HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
forsinkelse Mikrosekunder (2);
/ * Send trigger signal * /
digitalWrite (triggerPin, HIGH);
forsinkelse Mikrosekunder (10);
digitalWrite (triggerPin, LOW);
/ * returavstand i centimeter * /
retur (pulseIn (echoPin, HIGH) / 2) / 29.1;
} // få avstand
// lys alle lysene
void lightEmUp ()
{
for (int pin = 0; pin = 0; i--)
registre [i] = LAV;
writeRegisters ();
} // klare registre
/ * Skriv registerverdier og lagre dem * /
void writeRegisters ()
{
/ * Med registerklokkenål satt lavt
** innholdet i lagringsregisteret
** endres ikke med de endrede skiftregisterverdiene
** /
digitalWrite (registerClockPin, LOW);
/ * Loop gjennom alle registerene * /
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 signalet overfører innholdet i
** av skiftregisteret til lagringsregistrene
* /
digitalWrite (registerClockPin, HIGH);
} // skriv registre
// still en individuell pinne HØY eller LAV
void setRegisterPin (int-indeks, int-verdi)
{
registrerer [indeks] = verdi;
} // angi verdi for registerpinne
/ * Spill start uMelody * /
void playMelody ()
{
for (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * For å beregne notens varighet,
ta ett sekund delt på merketype
/ * f.eks. kvartedel = 1000/4,
** åttende merknad = 1000/8, etc * /
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, melodi [detteBemerk], noteDuration);
/ * For å skille notatene, angir du en minstetid mellom dem.
** notens varighet + 30% ser ut til å fungere bra * /
int pauseBetweenNotes = noteDuration * 1,30;
forsinkelse (pauseBetweenNotes);
noTone (8);
} // alle notater
} // spille opp melodi
/ * Kritisk melodi * /
void playCriticalMelody ()
{
for (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, criticalMelody [thisNote], noteDuration);
/ * For å skille notatene, angir du en minstetid mellom dem.
** notens varighet + 30% ser ut til å fungere bra * /
int pauseBetweenNotes = noteDuration * 1,30;
forsinkelse (pauseBetweenNotes);
noTone (8);
} // loop alle notater
} // spille kritisk melodi
void loop ()
{
/ * Få avstand * /
avstand = getDistance ();
/ * Beregn lysdiodene til å lyse * /
if (rekkevidde> = avstand)
litLEDs = (rekkevidde - avstand) / telling;
annet
litLEDs = -1;
/ * Lysdioder avhengig av beregnet avstand * /
for (int pin = 0; pin = 13)
playCriticalMelody ();
} // loop
/ ***************************************************
* “Pitches.h” -definisjon
*
* Offentlige konstanter
* Konstantene representerer stigningsfrekvensene
* av respektive notater på en standardkonsert
* instrumentinnstilling, for eksempel et piano
**************************************************** /
#define NOTE_B0 31
#definere 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
#definer NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#definere NOTE_B1 62
#definere NOTE_C2 65
#define NOTE_CS2 69
#definere NOTE_D2 73
#definer NOTE_DS2 78
#definere NOTE_E2 82
#definere NOTE_F2 87
#define NOTE_FS2 93
#definer NOTE_G2 98
#definer NOTE_GS2 104
#definere NOTE_A2 110
#define NOTE_AS2 117
#definere NOTE_B2 123
#definere NOTE_C3 131
#definer NOTE_CS3 139
#definer NOTE_D3 147
#definer NOTE_DS3 156
#define NOTE_E3 165
#definere NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#definere NOTE_GS3 208
#definere NOTE_A3 220
#definer NOTE_AS3 233
#definere NOTE_B3 247
#definere NOTE_C4 262
#definer NOTE_CS4 277
#definer NOTE_D4 294
#definer NOTE_DS4 311
#define NOTE_E4 330
#definer NOTE_F4 349
#definer NOTE_FS4 370
#definere NOTE_G4 392
#definere NOTE_GS4 415
#definere NOTE_A4 440
#definer NOTE_AS4 466
#definere NOTE_B4 494
#definere NOTE_C5 523
#definer NOTE_CS5 554
#definere NOTE_D5 587
#definer NOTE_DS5 622
#definere NOTE_E5 659
#definere NOTE_F5 698
#definere NOTE_FS5 740
#definer NOTE_G5 784
#definere NOTE_GS5 831
#definere NOTE_A5 880
#definer NOTE_AS5 932
#definere NOTE_B5 988
#definere NOTE_C6 1047
#definer NOTE_CS6 1109
#definere NOTE_D6 1175
#definer NOTE_DS6 1245
#define NOTE_E6 1319
#definere NOTE_F6 1397
#definer NOTE_FS6 1480
#definere NOTE_G6 1568
#definere NOTE_GS6 1661
#definer NOTE_A6 1760
#definer NOTE_AS6 1865
#definere NOTE_B6 1976
#definere 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
#definere NOTE_GS7 3322
#definere NOTE_A7 3520
#definer NOTE_AS7 3729
#definere NOTE_B7 3951
#definere NOTE_C8 4186
#definer NOTE_CS8 4435
#definere NOTE_D8 4699
#definer NOTE_DS8 4978
Etter å ha fullført monteringen og fylt skissen, viser veiviseren at han lyktes:
Enheten kan for eksempel informere en ansatt om en fotobutikk, kopisentral, metallreparasjon, etc. om utseendet til klienten.