Lezers zijn uitgenodigd
zelfgemaakt auteur van Instructables onder de bijnaam Gearboxmakers, die de afstand tussen het object en de afstandsmeter op een schaalindicator weergeeft, en als het te klein is, speelt het een melodie.
De meester begint aan het ontwerp te werken door het schema op te stellen:
De conclusies voor het leveren van stroom aan de afstandsmeter worden niet weergegeven in het diagram, maar op de afstandsmeter zelf zijn alle noodzakelijke notaties beschikbaar.
Schakelregisters 74HC595 (KR1564IR52) zijn hier de op een na belangrijkste componenten
Arduino. Ze worden vaak gebruikt wanneer u veel belastingen moet beheren, met slechts twee uitgangen van de microcontroller. Zeer vereenvoudigd, hun werkingsprincipe kan als volgt worden beschreven. Je typt op het toetsenbord - fysiek of op het scherm. Uiteraard drukt u tegelijkertijd achtereenvolgens op de toetsen. Het resultaat is een lijn, waarvan u alle tekens tegelijkertijd op het scherm ziet - parallel. Het aantal gecontroleerde ladingen is eenvoudig te vergroten door meer schuifregisters aan de ketting toe te voegen. Het aantal uitgangen van de betrokken microcontroller zal niet toenemen, maar met een constante gegevensoverdrachtsnelheid zal de maximale frequentie waarmee elk van de belastingen kan worden in- en uitgeschakeld, afnemen.
Omdat het aantal gelijktijdig ingeschakelde LED's verandert, slaagt de master er niet in om met één gemeenschappelijke weerstand te werken - u moet aan elke LED een weerstand toevoegen.
De wizard monteert het apparaat
doe het zelf op een breadboard van het perfboard-type en verbindt verschillende geleiders met de Arduino, die dienen om de hoogspanningslijnen en de gemeenschappelijke draad te paralleliseren, en om gegevens uit te wisselen met de microcontroller. De signalen van de Arduino naar het apparaat worden gebruikt om de schuifregisters, de geluidszender en de zender van de afstandsmeter te regelen, en in de tegenovergestelde richting de signalen die door de ontvanger van de afstandsmeter worden gegenereerd na ontvangst van gereflecteerde oscillaties. Het volgende bord wordt gedeeltelijk gemonteerd weergegeven:
De wizard begint aan de software te werken, hij krijgt de volgende schets:
/ *
** Gemaakt door: Charles Muchene
** @charlesmuchene
**
** Datum: 3 oktober 2013
**
** Tijd: 1412 uur
**
** Code afstandsmeter
** Het systeem meet de afstand
** met behulp van HC-SR04 ultrasone sensor
** en vertaalt het in een serie
** van verlichte LED's
**
** Veel plezier en tweak het!
* /
/ * Bibliotheek voor de melodische toonhoogtes
** Het beschrijft de te produceren frequenties * /
#include "pitches.h"
const int triggerPin = 10; // trigger pin (groen)
const int echoPin = 9; // echo pin (oranje)
const int tonePin = 8; // tone pin (whilte-blauw)
const int serialDataPin = 7; // seriële datapin (oranje)
const int registerClockPin = 6; // register klokpin (bruin)
const int shiftRegisterClockPin = 5; // schuifregister klok
const int numOfRegisters = 16; // aantal registers
const booleaanse registers [numOfRegisters]; // register array
int litLEDs = 0; // led pin teller
int bereik = 100; // bereikwaarde
int afstand; // afstand
const int count = range / numOfRegisters; // (meter per LED)
// start melodie
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// kritische afstandsmelodie
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// noot duur: 4 = kwartnoot, 8 = achtste noot, etc.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
ongeldige setup ()
{
/ * Pin configuraties * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Verlicht ze * /
lightEmUp ();
/ * Start melodie * /
playMelody ();
/ * Schakel alle LED's uit * /
clearRegisters ();
} // setup
/ * Afstand krijgen van HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
delayMicroseconds (2);
/ * Stuur triggersignaal * /
digitalWrite (triggerPin, HIGH);
delayMicroseconds (10);
digitalWrite (triggerPin, LOW);
/ * retourafstand in centimeters * /
return (pulseIn (echoPin, HIGH) / 2) / 29.1;
} // haal afstand
// verlicht alle leds
ongeldig lightEmUp ()
{
voor (int pin = 0; pin = 0; i--)
registreert [i] = LAAG;
writeRegisters ();
} // duidelijke registers
/ * Schrijf registerwaarden en bewaar ze * /
nietig writeRegisters ()
{
/ * Met register klokpen laag ingesteld
** de inhoud van het opslagregister
** worden niet gewijzigd door de veranderende schuifregisterwaarden
** /
digitalWrite (registerClockPin, LOW);
/ * Loop door alle registers * /
voor (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = registers [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // herhaalt alle registers
/ * Dit signaal verzendt de inhoud van
** van het schuifregister naar de opslagregisters
* /
digitalWrite (registerClockPin, HIGH);
} // schrijf registers
// stel een individuele pin HOOG of LAAG in
leegte setRegisterPin (int index, int waarde)
{
registreert [index] = waarde;
} // set register pin waarde
/ * Play start uMelody * /
ongeldig playMelody ()
{
voor (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * Om de nootduur te berekenen,
neem een seconde gedeeld door noottype
/ * bijv. kwartnoot = 1000/4,
** achtste noot = 1000/8, etc * /
int noteDuration = 1000 / noteDurations [thisNote];
toon (tonePin, melodie [thisNote], noteDuration);
/ * Om de noten te onderscheiden, stelt u een minimale tijd in tussen de noten.
** de duur van de notitie + 30% lijkt goed te werken * /
int pauseBetweenNotes = noteDuration * 1.30;
vertraging (pauseBetweenNotes);
noTone (8);
} // alle notities
} // speel opstartmelodie
/ * Critical Melody * /
ongeldig playCriticalMelody ()
{
voor (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
toon (tonePin, criticalMelody [thisNote], noteDuration);
/ * Om de noten te onderscheiden, stelt u een minimale tijd in tussen de noten.
** de duur van de notitie + 30% lijkt goed te werken * /
int pauseBetweenNotes = noteDuration * 1.30;
vertraging (pauseBetweenNotes);
noTone (8);
} // loop alle noten
} // Speel kritische melodie
leegte lus ()
{
/ * Afstand krijgen * /
afstand = getDistance ();
/ * Bereken de LED's om te branden * /
if (bereik> = afstand)
litLEDs = (bereik - afstand) / telling;
anders
litLEDs = -1;
/ * Licht-LED's afhankelijk van de berekende afstand * /
voor (int pin = 0; pin = 13)
playCriticalMelody ();
} // loop
/ *****************************************************
* "Pitches.h" -definitie
*
* Openbare constanten
* De constanten vertegenwoordigen de toonhoogtefrequenties
* van de respectievelijke opmerkingen over een standaardconcert
* instrumentafstemming zoals een piano
***************************************************** /
#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 definiëren
#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 definiëren
#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
Na het voltooien van de montage en het vullen van de schets, laat de tovenaar zien dat het hem gelukt is:
Het apparaat kan bijvoorbeeld een werknemer informeren over een fotowinkel, een kopieercentrum, metaalreparatie, enz. over het uiterlijk van de klant.