Les lecteurs sont invités à
fait maison auteur d'Instructables sous le surnom de Gearboxmakers, qui affiche la distance entre l'objet et le télémètre sur un indicateur d'échelle, et s'il est trop petit, il joue une mélodie.
Le maître commence le travail sur la conception en élaborant son schéma:
Les conclusions pour fournir l'alimentation au télémètre ne sont pas représentées sur le schéma, mais sur le télémètre lui-même toutes les notations nécessaires sont disponibles.
Les registres à décalage 74HC595 (KR1564IR52) sont les deuxièmes composants les plus importants après
Arduino. Ils sont souvent utilisés lorsque vous avez besoin de gérer de nombreuses charges, en utilisant seulement deux sorties du microcontrôleur. Très simplifié, leur principe d'action peut être décrit comme suit. Vous tapez sur le clavier - physique ou à l'écran. Naturellement, en même temps, vous appuyez successivement sur les touches. Le résultat est une ligne dont tous les signes sont visibles à l'écran en même temps - en parallèle. Le nombre de charges contrôlées est facile à augmenter en ajoutant plus de registres à décalage à la chaîne. Le nombre de sorties du microcontrôleur impliqué n'augmentera pas, mais avec une vitesse de transfert de données constante, la fréquence maximale avec laquelle chacune des charges peut être activée et désactivée diminuera.
Étant donné que le nombre de LED allumées simultanément change, le maître ne parvient pas à gérer avec une résistance commune - vous devez ajouter une résistance à chaque LED.
L'assistant assemble l'appareil
fais-le toi-même sur une planche à pain du type perfboard et connecte plusieurs fils à l'Arduino, qui servent à paralléliser les lignes électriques et le fil commun, ainsi qu'à échanger des données avec le microcontrôleur. Les signaux de l'Arduino vers l'appareil sont utilisés pour contrôler les registres à décalage, l'émetteur sonore et l'émetteur du télémètre, et dans le sens opposé, les signaux générés par le récepteur du télémètre lors de la réception d'oscillations réfléchies. Ensuite, la carte est montrée partiellement assemblée:
L'assistant commence à travailler sur le logiciel, il obtient le croquis suivant:
/ *
** Créé par: Charles Muchene
** @charlesmuchene
**
** Date: 3 octobre 2013
**
** Temps: 1412hrs
**
** Code du télémètre
** Le système mesure la distance
** utilisant le capteur à ultrasons HC-SR04
** et le traduit en une série
** de LED allumées
**
** Amusez-vous et ajustez-le!
* /
/ * Bibliothèque pour les hauteurs mélodiques
** Il décrit les fréquences à produire * /
#include "pitches.h"
const int triggerPin = 10; // goupille de déclenchement (vert)
const int echoPin = 9; // broche d'écho (orange)
const int tonePin = 8; // broche ton sur ton (bleu whilte)
const int serialDataPin = 7; // broche de données série (orange)
const int registerClockPin = 6; // enregistrer la broche d'horloge (marron)
const int shiftRegisterClockPin = 5; // horloge de registre à décalage
const int numOfRegisters = 16; // nombre de registres
const registres booléens [numOfRegisters]; // registre tableau
int litLEDs = 0; // compteur de broches led
gamme int = 100; // valeur de plage
distance int; // distance
const int count = range / numOfRegisters; // (mètres par LED)
// démarrer la mélodie
mélodie int [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// mélodie de distance critique
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// durées des notes: 4 = noire, 8 = croche, etc.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
void setup ()
{
/ * Configurations des broches * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Éclairez-les * /
lightEmUp ();
/ * Lancer la mélodie * /
playMelody ();
/ * Éteignez toutes les LED * /
clearRegisters ();
} // configuration
/ * Obtenez la distance de HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
delayMicroseconds (2);
/ * Envoyer un signal de déclenchement * /
digitalWrite (triggerPin, HIGH);
delayMicroseconds (10);
digitalWrite (triggerPin, LOW);
/ * distance de retour en centimètres * /
return (pulseIn (echoPin, HIGH) / 2) / 29,1;
} // obtenir la distance
// allume toutes les leds
void lightEmUp ()
{
pour (int pin = 0; pin = 0; i--)
registres [i] = LOW;
writeRegisters ();
} // effacer les registres
/ * Écrire des valeurs de registre et les stocker * /
void writeRegisters ()
{
/ * Avec une broche d'horloge de registre réglée à un niveau bas
** le contenu du registre de stockage
** ne sont pas modifiés par les valeurs changeantes du registre à décalage
** /
digitalWrite (registerClockPin, LOW);
/ * Parcourez tous les registres * /
pour (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = registres [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // boucle tous les registres
/ * Ce signal transfère le contenu de
** du registre à décalage aux registres de stockage
* /
digitalWrite (registerClockPin, HIGH);
} // écrire des registres
// définir une broche individuelle HAUT ou BAS
void setRegisterPin (index int, valeur int)
{
registres [index] = valeur;
} // définir la valeur de broche de registre
/ * Lire démarrer uMelody * /
void playMelody ()
{
pour (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * Pour calculer la durée de la note,
prendre une seconde divisée par type de note
/ * par exemple noire = 1000/4,
** croche = 1000/8, etc * /
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, mélodie [thisNote], noteDuration);
/ * Pour distinguer les notes, définissez un intervalle minimum entre elles.
** la durée de la note + 30% semble bien fonctionner * /
int pauseBetweenNotes = noteDuration * 1,30;
délai (pauseBetweenNotes);
noTone (8);
} // toutes les notes
} // jouer la mélodie de démarrage
/ * Mélodie critique * /
void playCriticalMelody ()
{
pour (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, criticalMelody [thisNote], noteDuration);
/ * Pour distinguer les notes, définissez un intervalle minimum entre elles.
** la durée de la note + 30% semble bien fonctionner * /
int pauseBetweenNotes = noteDuration * 1,30;
délai (pauseBetweenNotes);
noTone (8);
} // boucle toutes les notes
} // joue une mélodie critique
boucle vide ()
{
/ * Obtenir la distance * /
distance = getDistance ();
/ * Calculer les LED à allumer * /
si (plage> = distance)
litLEDs = (portée - distance) / comptage;
d'autre
litLEDs = -1;
/ * LED lumineuses en fonction de la distance calculée * /
pour (int pin = 0; pin = 13)
playCriticalMelody ();
} // boucle
/ ****************************************************
* Définition «Pitches.h»
*
* Constantes publiques
* Les constantes représentent les fréquences de hauteur
* des notes respectives sur un concert standard
* accord d'instruments comme un 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
#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
#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
Après avoir terminé l'assemblage et rempli l'esquisse, l'assistant montre qu'il a réussi:
Le dispositif peut, par exemple, informer un employé d'un magasin de photos, d'un centre de copie, d'une réparation de métal, etc. sur l'apparence du client.