Els lectors són convidats a
casolans autor de Instructables sota el sobrenom de Gearboxmakers, que mostra la distància entre l'objecte i el cercador de rangs en un indicador d'escala i, si és massa petit, toca una melodia.
El mestre comença a treballar en el disseny elaborant el seu esquema:
Les conclusions sobre l’alimentació de l’alimentació al telescopi no es mostren al diagrama, però en el mateix telescriptor hi ha disponibles tots els símbols necessaris.
Els registres Shift 74HC595 (KR1564IR52) són els segons components més importants després
Arduino. Sovint s’utilitzen quan necessiteu gestionar moltes càrregues, utilitzant només dues sortides del microcontrolador. Molt simplificat, el seu principi d’acció es pot descriure de la manera següent. Escriviu el teclat: físic o a la pantalla. Naturalment, al mateix temps que premeu les tecles al seu torn, de forma seqüencial. El resultat és una línia, tots els signes dels quals es veuen a la pantalla alhora - en paral·lel. El nombre de càrregues controlades és fàcil d'augmentar afegint més registres de desplaçament a la cadena. El nombre de sortides del microcontrolador implicat no augmentarà, però amb una velocitat de transferència de dades constant, la freqüència màxima amb què es pot activar i desactivar cadascuna de les càrregues disminuirà.
Com que el nombre de LEDs que s’encenen simultàniament canvia, el mestre no pot gestionar amb una resistència comuna: heu d’afegir una resistència a cada LED.
L’assistent munta el dispositiu
fes-ho tu mateix en una placa de taula de tipus perfboard i connecta diversos conductors a l’Arduino, que serveixen per paral·lelitzar les línies d’energia i el cable comú, a més d’intercanviar dades amb el microcontrolador. Els senyals de l’Arduino al dispositiu s’utilitzen per controlar els registres de desplaçament, l’emissor de so i l’emissor del cercador de gamma, i en el sentit contrari, els senyals generats pel receptor del cercador d’interval a la recepció de les oscil·lacions reflectides. A continuació, es mostra el tauler parcialment muntat:
L’assistent comença a treballar en el programari, obté el següent esbós:
/ *
** Creat per: Charles Muchene
** @charlesmuchene
**
** Data: 3 d’octubre de 2013
**
** Hora: 1412hrs
**
** Codi del comptador de distància
** El sistema mesura la distància
** mitjançant sensor d’ultrasons HC-SR04
** i el tradueix en una sèrie
** de LEDs il·luminats
**
** Divertiu-vos i penteu-ho!
* /
/ * Biblioteca per a les fosses melòdiques
** Descriu les freqüències a produir * /
#inclou "pitches.h"
const int triggerPin = 10; // pin activador (verd)
const int echoPin = 9; // pin eco (taronja)
const int tonePin = 8; // pin de tons (blau blanc)
const int serialDataPin = 7; // Pin de dades en sèrie (taronja)
const int registerClockPin = 6; // registrar el pin rellotge (marró)
const int shiftRegisterClockPin = 5; // rellotge de registre de canvis
const int numOfRegisters = 16; // nombre de registres
const registres booleans [numOfRegisters]; // matriu de registre
int litLEDs = 0; // led led counter
rang int = 100; // valor de rang
distància int; // distància
const int count = range / numOfRegisters; // (metres per LED)
// començar melodia
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// melodia de distància crítica
int criticMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// duracions de nota: 4 = quarta nota, 8 = vuitena nota, etc.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticNoteDurations [] = {4, 4, 4, 4};
nul configuració ()
{
/ * Configuracions del pin * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Llumen-los * /
lightEmUp ();
/ * Comença la melodia * /
playMelody ();
/ * Apagueu tots els LED * /
clearRegisters ();
} // configuració
/ * Obtenir distància des de HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
delayMicrosegons (2);
/ * Enviar senyal de desencadenament * /
digitalWrite (triggerPin, HIGH);
delayMicrosegons (10);
digitalWrite (triggerPin, LOW);
/ * distància de retorn en centímetres * /
retorn (impulsIn (echoPin, HIGH) / 2) / 29.1;
} // obtenir distància
// encendre tots els leds
void lightEmUp ()
{
for (int pin = 0; pin = 0; i--)
registres [i] = BAIX;
writeRegisters ();
} // registres nets
/ * Escriure valors del registre i emmagatzemar-los * /
void writeRegisters ()
{
/ * Amb el passador de rellotge de registre ajustat baix
** el contingut del registre d’emmagatzematge
** no es canvien pels valors canviants del registre de canvis
** /
digitalWrite (registerClockPin, LOW);
/ * Enllaçar a través de tots els registres * /
for (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = registres [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // recorre tots els registres
/ * Aquest senyal transfereix el contingut de
** del registre de canvis als registres d'emmagatzematge
* /
digitalWrite (registerClockPin, HIGH);
} // escriure registres
// estableix un pin individual ALT o BAIX
void setRegisterPin (índex int, valor int)
{
registres [index] = valor;
} // estableix el valor del pin de registre
/ * Iniciar reproducció uMelody * /
void playMelody ()
{
for (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * Per calcular la durada de la nota,
triga un segon dividit pel tipus de nota
/ * p. nota trimestral = 1000/4,
** vuitè nota = 1000/8, etc * /
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, melodia [thisNote], noteDuration);
/ * Per distingir les notes, fixeu-hi un temps mínim.
** la durada de la nota + el 30% sembla que funciona bé * /
int pauseBetweenNotes = notaDuration * 1.30;
retard (pausaBetweenNotes);
noTone (8);
} // totes les notes
} // reproduir melodia d’inici
/ * Melodia crítica * /
void playCriticalMelody ()
{
for (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, criticMelody [thisNote], noteDuration);
/ * Per distingir les notes, fixeu-hi un temps mínim.
** la durada de la nota + el 30% sembla que funciona bé * /
int pauseBetweenNotes = notaDuration * 1.30;
retard (pausaBetweenNotes);
noTone (8);
} // enllaça totes les notes
} // reproduir melodia crítica
bucle void ()
{
/ * Obtenir distància * /
distància = obtenirDistància ();
/ * Calculeu els LED a la llum * /
if (rang> = distància)
litLEDs = (abast - distància) / recompte;
més
litLEDs = -1;
/ * LED de llum en funció de la distància calculada * /
for (int pin = 0; pin = 13)
playCriticalMelody ();
} // bucle
/ ********************************************** *
* Definició “Pitches.h”
*
* Constants públiques
* Les constants representen les freqüències de to
* de les notes respectives sobre un concert estàndard
* afinació d'instruments com un piano
*********************************************** *
#defineu NOTA_B0 31
#defineu NOTA_C1 33
#defineu NOTA_CS1 35
#defineu NOTA_D1 37
#defineu NOTA_DS1 39
#defineu NOTA_E1 41
#defineu NOTA_F1 44
#defineu NOTA_FS1 46
#defineu NOTA_G1 49
#defineu NOTA_GS1 52
#defineu NOTA_A1 55
#defineu NOTA_AS1 58
#defineu NOTA_B1 62
#defineu NOTA_C2 65
#defineu NOTA_CS2 69
#defineu NOTA_D2 73
#defineu NOTA_DS2 78
#defineu NOTA_E2 82
#defineu NOTA_F2 87
#defineu NOTA_FS2 93
#defineu NOTA_G2 98
#defineu NOTA_GS2 104
#defineu NOTA_A2 110
#defineu NOTA_AS2 117
#defineu NOTA_B2 123
#defineu NOTA_C3 131
#defineu NOTA_CS3 139
#defineu NOTA_D3 147
#defineu NOTA_DS3 156
#defineu NOTA_E3 165
#defineu NOTA_F3 175
#defineu NOTA_FS3 185
#defineu NOTA_G3 196
#defineu NOTA_GS3 208
#defineu NOTA_A3 220
#defineu NOTA_AS3 233
#defineu NOTA_B3 247
#defineu NOTA_C4 262
#defineu NOTA_CS4 277
#defineu NOTA_D4 294
#defineu NOTA_DS4 311
#defineu NOTA_E4 330
#defineu NOTA_F4 349
#defineu NOTA_FS4 370
#defineu NOTA_G4 392
#defineu NOTE_GS4 415
#defineu NOTA_A4 440
#defineu NOTA_AS4 466
#defineu NOTA_B4 494
#defineu NOTA_C5 523
#defineu NOTA_CS5 554
#defineu NOTA_D5 587
#defineu NOTA_DS5 622
#defineu NOTA_E5 659
#defineu NOTA_F5 698
#defineu NOTA_FS5 740
#defineu NOTA_G5 784
#defineu NOTA_GS5 831
#defineu NOTA_A5 880
#defineu NOTA_AS5 932
#defineu NOTA_B5 988
#defineu NOTA_C6 1047
#defineu NOTA_CS6 1109
#defineu NOTA_D6 1175
#defineu NOTA_DS6 1245
#defineu NOTA_E6 1319
#defineu NOTA_F6 1397
#defineu NOTA_FS6 1480
#defineu NOTA_G6 1568
#defineu NOTA_GS6 1661
#defineu NOTA_A6 1760
#defineu NOTA_AS6 1865
#defineu NOTA_B6 1976
#defineu NOTA_C7 2093
#defineu NOTA_CS7 2217
#defineu NOTA_D7 2349
#defineu NOTA_DS7 2489
#defineu NOTA_E7 2637
#defineu NOTA_F7 2794
#defineu NOTA_FS7 2960
#defineu NOTA_G7 3136
#defineu NOTA_GS7 3322
#defineu NOTA_A7 3520
#defineu NOTA_AS7 3729
#defineu NOTA_B7 3951
#defineu NOTA_C8 4186
#defineu NOTA_CS8 4435
#defineu NOTA_D8 4699
#defineu NOTA_DS8 4978
Després d’acabar el muntatge i omplir l’esbós, l’assistent mostra que va tenir èxit:
El dispositiu pot, per exemple, informar un empleat d’una botiga fotogràfica, un centre de còpies, una reparació de metalls, etc. sobre l’aparició del client.