Readers are invited to
homemade author of Instructables under the nickname Gearboxmakers, which displays the distance between the object and the range finder on a scale indicator, and if it is too small, it plays a melody.
The master begins work on the design by drawing up its scheme:
The conclusions for supplying the power to the rangefinder are not shown in the diagram, but on the rangefinder itself all the necessary notations are available.
Shift registers 74HC595 (KR1564IR52) here are the second most important components after
Arduino. They are often used when you need to manage many loads, using only two outputs from the microcontroller. Very simplified, their principle of action can be described as follows. You type on the keyboard - physical or on-screen. Naturally, at the same time you press the keys in turn, sequentially. The result is a line, all the signs of which you see on the screen at the same time - in parallel. The number of controlled loads is easy to increase by adding more shift registers to the chain. The number of outputs of the microcontroller involved will not increase, but with a constant data transfer speed, the maximum frequency with which each of the loads can be turned on and off will decrease.
Since the number of simultaneously turned on LEDs changes, the master fails to manage with one common resistor - you have to add a resistor to each LED.
The wizard assembles the device
do it yourself on a breadboard of the perfboard type and connects several wires to the Arduino, which serve to parallelize the power lines and the common wire, as well as exchange data with the microcontroller. Control signals from the shift registers, sound emitter and emitter of the rangefinder are transmitted from the Arduino to the device, and the signals generated by the receiver of the rangefinder upon receipt of reflected oscillations are transmitted to the device. Next, the board is shown partially assembled:
The wizard starts working on the software, he gets the following sketch:
/ *
** Created by: Charles Muchene
** @charlesmuchene
**
** Date: 3rd October 2013
**
** Time: 1412hrs
**
** Distance meter code
** The system measures the distance
** using HC-SR04 ultrasonic sensor
** and translates it into a series
** of lit LEDs
**
** Have fun and tweak it!
* /
/ * Library for the melodic pitches
** It describes the frequencies to be produced * /
#include "pitches.h"
const int triggerPin = 10; // trigger pin (green)
const int echoPin = 9; // echo pin (orange)
const int tonePin = 8; // tone pin (whilte-blue)
const int serialDataPin = 7; // serial data pin (orange)
const int registerClockPin = 6; // register clock pin (brown)
const int shiftRegisterClockPin = 5; // shift register clock
const int numOfRegisters = 16; // number of registers
const boolean registers [numOfRegisters]; // register array
int litLEDs = 0; // led pin counter
int range = 100; // range value
int distance; // distance
const int count = range / numOfRegisters; // (meters per LED)
// start up melody
int melody [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// critical distance melody
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// note durations: 4 = quarter note, 8 = eighth note, etc.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
void setup ()
{
/ * Pin configurations * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * Light 'em up * /
lightEmUp ();
/ * Start melody * /
playMelody ();
/ * Turn off all LEDs * /
clearRegisters ();
} // setup
/ * Get distance from HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
delayMicroseconds (2);
/ * Send trigger signal * /
digitalWrite (triggerPin, HIGH);
delayMicroseconds (10);
digitalWrite (triggerPin, LOW);
/ * return distance in centimeters * /
return (pulseIn (echoPin, HIGH) / 2) / 29.1;
} // get distance
// light all leds
void lightEmUp ()
{
for (int pin = 0; pin = 0; i--)
registers [i] = LOW;
writeRegisters ();
} // clear registers
/ * Write register values and store them * /
void writeRegisters ()
{
/ * With register clock pin set low
** the contents of the storage register
** are not changed by the changing shift register values
** /
digitalWrite (registerClockPin, LOW);
/ * Loop through all the registers * /
for (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = registers [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // loops all registers
/ * This signal tranfers the contents of
** of the shift register to the storage registers
* /
digitalWrite (registerClockPin, HIGH);
} // write registers
// set an individual pin HIGH or LOW
void setRegisterPin (int index, int value)
{
registers [index] = value;
} // set register pin value
/ * Play start uMelody * /
void playMelody ()
{
for (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * To calculate the note duration,
take one second divided by note type
/ * e.g. quarter note = 1000/4,
** eighth note = 1000/8, etc * /
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, melody [thisNote], noteDuration);
/ * To distinguish the notes, set a minimum time between them.
** the note's duration + 30% seems to work well * /
int pauseBetweenNotes = noteDuration * 1.30;
delay (pauseBetweenNotes);
noTone (8);
} // all notes
} // play start up melody
/ * Critical Melody * /
void playCriticalMelody ()
{
for (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [thisNote];
tone (tonePin, criticalMelody [thisNote], noteDuration);
/ * To distinguish the notes, set a minimum time between them.
** the note's duration + 30% seems to work well * /
int pauseBetweenNotes = noteDuration * 1.30;
delay (pauseBetweenNotes);
noTone (8);
} // loop all notes
} // play critical melody
void loop ()
{
/ * Get distance * /
distance = getDistance ();
/ * Calculate the LEDs to light * /
if (range> = distance)
litLEDs = (range - distance) / count;
else
litLEDs = -1;
/ * Light LEDs depending on the distance calculated * /
for (int pin = 0; pin = 13)
playCriticalMelody ();
} // loop
/ ****************************************************
* “Pitches.h” definition
*
* Public Constants
* The constants represent the pitch frequencies
* of the respective notes on a standard concert
* instrument tuning such as a 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
After completing the assembly and filling the sketch, the wizard shows that he succeeded:
The device may, for example, inform an employee of a photo shop, copy center, metal repair, etc. about the appearance of the client.