Senzorul HC-R04 poate determina ( sau măsura ) distanța față de un obiect situat între 2cm – 500cm cu o acuratețe de 0,3cm. Acesta trimite unde ultrasonice cu frecvența în jur de 40kHz, apoi așteaptă și ascultă ecoul primit, calculând timpul luat până când unda ecou a ajuns înapoi. Se poate trimite semnale de 20 de ori pe secundă.
Senzorul are 4 pini pe care îi vom utiliza :
Specificațiile tehnice ale senzorului :
Mod de lucru :
În figura următoare vă prezint diagrama de funcționare :
Pentru distanța minimă de 2cm durata va fi circa 116us, iar pentru distanța maximă de ≈500cm durata va fi de 23,2ms iar dacă distanța este prea mare durata va fi 38ms.
Scema :
Partea software :
#define trigPin 10
#define echoPin 12
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
// delayMicroseconds(1000);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
if (distance >= 200 || distance <= 0){
Serial.println(„Out of range”);
}
else Serial.println(distance);
delay(1000);
}
După cum observați distanța măsurată de afișează la terminalul serial. Pentru a vedea sau a accesa terminalul faceți următorii pași : meniul ”Tools” și apoi click pe ”Serial Monitor”, iar în acest moment vă va apărea pe ecran distanța măsurată în cm.
Schema:
Partea software:
#include <TM1637Display.h>
#define trigPin 10
#define echoPin 12
const int CLK=3; //Declaram pinul la care este conectat pinul CLK al afisajului
const int DIO=2;
TM1637Display afisaj(CLK, DIO);
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
afisaj.setBrightness(0x0a); //setam luminozitatea la maxim
}
void loop()
{
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
if (distance >= 200 || distance <= 0){
Serial.println(„Out of range”);
}
else {
Serial.println(distance);
afisaj.showNumberDec(distance);
}
delay(1500);
}
Lasă un răspuns