Bolg -Arduino – Senzorul ultrasonic HC-SR04

Arduino – Senzorul ultrasonic HC-SR04

Postat de pe data de 17 martie 2020 in categoria Arduino

image_pdfimage_print

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 :

  • Vcc – alimentare
  • Trig – inițierea semnalului
  • Echo – recepție răspuns ecou
  • GND – masă

Specificațiile tehnice ale senzorului :

  • Tensiune alimentare – 5V dc
  • Curent maxim – 15mA
  • Frecvență – 40kHz
  • Semnal ieșire – 0 – 5V ( maxim când obstacolul este aproape )
  • Unghi de detecție – 15 grde
  • Distanța măsurată – 2cm – 500cm
  • Durată impuls Trigger – 10 us

Mod de lucru :

  1. Aplicăm o stare de 1 logic pe pinul Trigger timp de 10us iar senzorul va trimite 8 cicluri de unde ultrasonice la o frecvență de 40kHz.
  2. Senzorul așteaptă răspuns, ecoul.
  3. Distanța se va calcula folosindu-ne de durata între cele două evenimente : distanța = \( \frac{t}{58} \) cm sau distanta = \( \frac{t}{148} \) inch, sau distanta = (cât timp Echo este 1 logic x viteza sunetului ) / 2 .

Î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.

În continuare vă prezint schema și partea software pentru a măsura o distanța de la senzor până la un obiect sau obstacol.

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.

În continuare vă prezint schema și partea software pentru a măsura o distanța de la senzor până la un obiect sau obstacol iar afișarea se va face pe un ecran 7-segmente TM1637.

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

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.



Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert