Een LED 8×8 matrix aansturen met een HC-SR04 afstandsmeter

Welkom bij deze tutorial waarbij we een LED 8×8 matrix & zoemer gaan aansturen met een HC-SR04!

Wil je eerst graag weten wat een HC-SR04 of een LED 8×8 matrix is?

Check dan de onderstaande productbeschrijvingen!

HC-SR04 Ultrasone sensor

8×8 LED Matrix (MAX7219)

Doel van het project

We gaan de afstandsmeting van een HC-SR04 Ultrasoon sensor gebruiken om de aansturing van een bepaalde hoeveelheid LED’s op de 8×8 LED Matrix te bepalen.
We zullen de afstandsmeting waardes van het gedetecteerde object om moeten rekenen naar een bepaalde hoeveelheid LED’s, hiervoor gaan de Arduino gebruiken.
Een voorbeeld hiervan is dat we bij een afstand objectdetectie van 10 centimeter 10 LED’s willen laten branden.
Om te kunnen zien wanneer er geen object binnen de afstandsbereik aanwezig is laten we een kruis branden.
Om nog wat toe te voegen gaan we ook een zoemer aansturen waarbij de frequentie verhoudingsgewijs gelijk loopt aan de afstand van het object.

Benodigde materialen

Om dit project te kunnen maken heb je de volgende materialen nodig:

Arduino Uno
Bestel hem hier
arduino-uno
8×8 LED Matrix
Bestel hem hier

HC-SR04 Ultrasone Sensor
Bestel hem hier

Zoemer 5V
Bestel hem hier
Piëzo-zoemer KPMG-serie Geluidsontwikkeling: 85 dB 5 V/DC Inhoud: 1 stuks

Breadboard & Draadbruggen
Bestel ze hier

Arduino Breadboard met draadbruggen

Aansluiten op de Arduino

Aansluitschema HC-SR04 + 8x8 Matrix + 5V buzzer.png

Connecties:

Arduino 5V – Breadboard 5V
Arduino 0V – Breadboard 0V
Arduino Pin 2 – HC-SR04 Trig
Arduino Pin 4 – HC-SR04 Echo
Arduino Pin 9 – Buzzer 5V
Arduino Pin 10 – LED Matrix CS
Arduino Pin 11 – LED Matrix CLK
Arduino Pin 12 – LED Matrix DIN
LED Matrix VCC – Breadboard 5V
LED Matrix GND – Breadboard 0V
HC-SR04 VCC – Breadboard 5v
HC-SR04 GND – Breadboard 0V
Buzzer 0V – Breadboard 0V

Programmeren van de Arduino

Voor de aansturing van de LED Matrix moet je de LedControl Library importeren in je Arduino Software.

Download hier de LedControl Library

Kopieer vervolgens de Arduino Code hieronder en plak deze in je Arduino Software.

// CreaTechWeb - Aansturen van een 8x8 LED Matrix en zoemer met een HC-SR04 Ultrasone Sensor
// https://createchweb.com/een-led-8x8-matrix-aansturen-met-een-hc-sr04-afstandsmeter/

//       |||||||  ||||||||  ||        ||      
//       ||          ||     ||        ||
//       ||          ||     ||   ||   ||
//       ||          ||     ||   ||   ||
//       |||||||     ||     ||||||||||||  
       
#include <LedControl.h>               // Deze programmering maakt gebruik van de LedControl Library
LedControl lc=LedControl(12,11,10,1); // Definiëring van de LedControl pinnen
                                      // pin 12 aansluiten op de DIN pin van de 8x8 LED Matrix
                                      // pin 11 aansluiten op de CLK pin van de 8x8 LED Matrix
                                      // pin 10 aansluiten op de CS pin van de 8x8 LED Matrix
                                      // 1 staat voor het aantal 8x8 LED Matrixen die aangesloten zijn. In dit geval maar 1

#define trigPin 2     // De Trig pin van de HC-SR04 aansluiten op de digitale pin 2
#define echoPin 4     // De Echo pin van de HC-SR04 aansluiten op de digitale pin 4
    
// Onderstaande code is voor de definiëring van de variabele waarden

int Tijdsduur;        // De variabele waarde voor de tijdsduur dat de Echo verstuurd en weer terug komt
int Afstand;          // De omgerekende variabele waarde van tijdsuur naar afstand
int LednummerTotaal;  // De variabele waarde voor het aantal LEDS dat aangestuurd moet worden in verhouding tot de afstand
int LednummerRij;     // De variabele waarde voor het aantal LEDrijen dat aangestuurd moet worden in verhouding tot de afstand
int Rijnummer;        // De variabele waarde van de rijnummer waar de laatste LED zich bevindt van LednummerTotaal
int ZoemerSterkte;    // De variabele waarde voor de ZoemerSterkte {Frequentie) in verhouding tot de afstand 
int Zoemer = 9;       // De zoemer aansluiten op digitale pin 9
 

 
void setup() {
  
  Serial.begin (9600);        // Start de seriële monitor voor het uitlezen van de status

  // Onderstaande code is voor de pin definiëring van de Arduino
  
  pinMode(trigPin, OUTPUT);   // De Trig pin op de Arduino is een output
  pinMode(echoPin, INPUT);    // De Echo pin op de Arduino is een input
  pinMode(Zoemer, OUTPUT);    // De Zoemer pin is een output


  // Onderstaande code is voor de standaard opstartinstelling van de LED matrix
  
  lc.shutdown(0,false);       // Het uitzetten van de energiebesparingsmode, dus het activeren van de LED matrix. (De 0 staat voor LED matrix 1)
  lc.setIntensity(0,15);//    // Het instellen van de felheid van de LEDS. In te stellen waarde is van 0 tot 15. (De 0 staat voor LED matrix 1)
  lc.clearDisplay(0);         // Het uitzetten van alle LEDS op de LED matrix. (De 0 staat voor LED matrix 1)
}
 
void loop() {  

// Onderstaande code is voor het aansturen van de Ultrasoon puls van de HC-SR04, waarmee de afstand berekenend gaat worden.

  digitalWrite(trigPin, HIGH);                            // Hoog maken van de Trig pin van de HC-SR04 zodat hij een puls verstuurd
  delay (1000);                                           // 1 seconde wachten
  digitalWrite(trigPin, LOW);                             // Laag maken van de Trig pin van de HC-SR04 
  
  if (Afstand >= 100 || Afstand <= 0){                    // Als de afstand hoger is als 100 centimeter of lager als 0 centimeter print dan "Meetafstand buiten bereik" naar de seriële monitor
  Serial.println("Meetafstand buiten bereik");
  }

// Onderstaande code is voor het omrekenen van waardes naar variabelen

Tijdsduur = pulseIn(echoPin, HIGH);                       // De tijdsduur berekening voordat de puls teruggekomen is.
Afstand = (Tijdsduur/2) / 29.1;                           // De afstandsberekening aan de hand van de tijdsduurwaarde
LednummerTotaal = map(Afstand, 0, 100, 0, 64);            // Zet de waarde Afstand om in het aantal LED's
LednummerRij = (LednummerTotaal - (Rijnummer*8));         // Zet de waarde van het aantal LED's om in het Rijnummer waar de laatste LED zich bevindt.
Rijnummer = (LednummerTotaal / 8);                        // Zet de waarde van het aantal LED's om in het hoogte Rijnummer.



// Onderstaande code is voor sturen van een aantal waardes naar de seriële monitor

Serial.print (Tijdsduur);                                               // Print de waarde van de tijdsduur naar de seriële monitor
Serial.println(" = Tijdsduur voordat echo terugkomt");                  // Print de tekst " = Tijdsduur voor echo terugkomt" voor de waarde Tijdsduur in de seriële monitor

Serial.print (Afstand);                                                 // Print de waarde van de afstand in centimeter naar de seriële monitor
Serial.println(" = Afstand in cm");                                     // Print de tekst " = Afstand in cm" voor de waarde Afstand in de seriële monitor

Serial.print(LednummerTotaal);                                          // Print de waarde van LednummerTotaal naar de seriële monitor
Serial.println(" = Lednummer van 64 leds op de 8x8 LedMatrix");         // Print de tekst " = Lednummer van 64 leds op de 8x8 LedMatrix" voor de waarde LednummerTotaal in de seriële monitor

Serial.print(LednummerRij);                                             // Print de waarde van LednummerRij naar de seriële monitor
Serial.println(" = Lednummer van desbetreffende rij op de LedMatrix");  // Print de tekst " = Lednummer van desbetreffende rij op de LedMatrix" in de seriële monitor

Serial.print(Rijnummer);                                                // Print de waarde van Rijnummer naar de seriële monitor
Serial.println(" = Rijnummer van 8x8 LedMatrix" );                      // Print de tekst " = Rijnummer van 8x8 LedMatrix" voor de waarde Rijnummer in de seriële monitor
 
 
lc.clearDisplay(0);                                                     // Deactiveer alle LED's op de LedMatrix

// Onderstaande code is voor de aansturing van het aantal LED's die in verhouding zijn tot de afstand.

 byte LedPositie[8]={B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111};              // Defineer de 8 Binaire ledposities voor 

 switch (Rijnummer){              // Een voorwaarde met 8 verschillende "Cases"

 case 0:                          // Als de voorwaarde Rijnummer 0 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 break;                       
 
 case 1:                          // Als de voorwaarde Rijnummer 1 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 break;
 
 case 2:                          // Als de voorwaarde Rijnummer 2 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 lc.setRow(0,2,LedPositie[7]);    // Stuur alle LED's op Rij 2 hoog
 break;
 
 case 3:                          // Als de voorwaarde Rijnummer 3 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 lc.setRow(0,2,LedPositie[7]);    // Stuur alle LED's op Rij 2 hoog
 lc.setRow(0,3,LedPositie[7]);    // Stuur alle LED's op Rij 3 hoog
 break;
 
 case 4:                          // Als de voorwaarde Rijnummer 4 is   
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 lc.setRow(0,2,LedPositie[7]);    // Stuur alle LED's op Rij 2 hoog
 lc.setRow(0,3,LedPositie[7]);    // Stuur alle LED's op Rij 3 hoog
 lc.setRow(0,4,LedPositie[7]);    // Stuur alle LED's op Rij 4 hoog
 break;
 
 case 5:                          // Als de voorwaarde Rijnummer 5 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 lc.setRow(0,2,LedPositie[7]);    // Stuur alle LED's op Rij 2 hoog
 lc.setRow(0,3,LedPositie[7]);    // Stuur alle LED's op Rij 3 hoog
 lc.setRow(0,4,LedPositie[7]);    // Stuur alle LED's op Rij 4 hoog
 lc.setRow(0,5,LedPositie[7]);    // Stuur alle LED's op Rij 5 hoog
 break;
 
 case 6:                          // Als de voorwaarde Rijnummer 6 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 lc.setRow(0,2,LedPositie[7]);    // Stuur alle LED's op Rij 2 hoog
 lc.setRow(0,3,LedPositie[7]);    // Stuur alle LED's op Rij 3 hoog
 lc.setRow(0,4,LedPositie[7]);    // Stuur alle LED's op Rij 4 hoog
 lc.setRow(0,5,LedPositie[7]);    // Stuur alle LED's op Rij 5 hoog
 lc.setRow(0,6,LedPositie[7]);    // Stuur alle LED's op Rij 6 hoog
 break;
 
 case 7:                          // Als de voorwaarde Rijnummer 7 is
 lc.setRow(0,0,LedPositie[7]);    // Stuur alle LED's op Rij 0 hoog
 lc.setRow(0,1,LedPositie[7]);    // Stuur alle LED's op Rij 1 hoog
 lc.setRow(0,2,LedPositie[7]);    // Stuur alle LED's op Rij 2 hoog
 lc.setRow(0,3,LedPositie[7]);    // Stuur alle LED's op Rij 3 hoog
 lc.setRow(0,4,LedPositie[7]);    // Stuur alle LED's op Rij 4 hoog
 lc.setRow(0,5,LedPositie[7]);    // Stuur alle LED's op Rij 5 hoog
 lc.setRow(0,6,LedPositie[7]);    // Stuur alle LED's op Rij 6 hoog
 lc.setRow(0,7,LedPositie[7]);    // Stuur alle LED's op Rij 7 hoog
 break;
 }

 
// Onderstaande code is voor het weergeven van een kruis op de LED Matrix als de gemeten afstand buiten het bereik valt.

if (Afstand >= 100 || Afstand <= 0){    // Als de afstand hoger is als 100 centimeter of lager als 0 centimeter
 lc.setLed(0,0,0, true);                // Stuur de eerste LED hoog op de eerste rij
 lc.setLed(0,1,1, true);                // Stuur de tweede LED aan op de tweede rij 
 lc.setLed(0,2,2, true);                // Stuur de derde LED aan op de derde rij 
 lc.setLed(0,3,3, true);                // Stuur de vierde LED aan op de vierde rij 
 lc.setLed(0,4,4, true);                // Stuur de vijfde LED aan op de vijfde rij 
 lc.setLed(0,5,5, true);                // Stuur de zesde LED aan op de zesde rij 
 lc.setLed(0,6,6, true);                // Stuur de zevende LED aan op de zevende rij 
 lc.setLed(0,7,7, true);                // Stuur de achtste LED aan op de achtste rij 

 lc.setLed(0,0,7, true);                // Stuur de achtste LED aan op de eerste rij 
 lc.setLed(0,1,6, true);                // Stuur de zevende LED aan op de tweede rij 
 lc.setLed(0,2,5, true);                // Stuur de zesde LED aan op de derde rij
 lc.setLed(0,3,4, true);                // Stuur de vijfde LED aan op de vierde rij      
 lc.setLed(0,4,3, true);                // Stuur de vierde LED aan op de vijfde rij
 lc.setLed(0,5,2, true);                // Stuur de derde LED aan op de zesde rij 
 lc.setLed(0,6,1, true);                // Stuur de tweede LED aan op de zevende rij 
 lc.setLed(0,7,0, true);                // Stuur de eerste LED aan op de achtste rij 



}
ZoemerSterkte = map(Afstand, 0, 100, 0, 500); // Zet de waarde van de afstand om in een frequentie waarde voor de zoemer
{
  
if (Afstand <= 100 && Afstand >= 0){    // Als de afstand tussen het bereik ligt van 0 - 100 centimeter
digitalWrite (Zoemer, HIGH);            // Stuur de zoemer hoog
delay(ZoemerSterkte);                   // Tijdsduur voor de aansturing van de zoemer (Afhankelijk van de afstand)
digitalWrite (Zoemer, LOW);             // Stuur de zoemer laag
}
}       
}  

  
 


Het resultaat

Op de eerste foto stond ik dicht op de HC-SR04 Ultrasoon sensor.
Zoals je kan zien branden er dan maar 2 rijen LED’s
Op de andere foto’s stap ik steeds iets verder achteruit en zoals je ziet veranderd het aantal rijen LED’s mee.
Op de foto rechts onderin sta ik buiten het bereik van de HC-SR04 Ultrasoon sensor.
Zoals je ziet wordt er dan een kruis weergegeven.

Foto's HC-SR04.jpg

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s