Măsurarea distanței folosind HC-SR04
Având în dotare de ceva vreme un senzor ultrasonic de 40kHz am decis să încerc să-l pun în funcțiune. După ceva documentare conștiincioasă am constatat că e destul de simplu de conecta pentru ca are doar 4 pini VCC, TRIG, ECHO si GND. Apoi am facut calculele pentru o viteza a sunetului de 340 m/s și am calculat distanța pe baza duratei întoarcerii sunetului la receptor. Totul a mers fără nici o problemă. Senzorul are o rezolutie de minim 2 cm si maxim 4 metrii. Unda sonora este emisa de transmițător, se loveste de un obiect si se intoarce la receptor. Pe baza vitezei sunetului și a formulei de calcul a timpului rezultă formula distanței = timp * 0.034/2. Acest mini proiect probabil o să-l folosesc la dronă sau la un eventual proiect de masinuță autonomă.
Teste și calcule
În prima imagine am prins si calculele facute pentru un exemplu de obiect aflat la 10 cm de senzor. Iar mai jos se văd desenate semnalele senzorului si ordinea lor, in prima faza se seteaza pe high trigerul pentru 10 us iar apoi urmeaza 8 ropote (burst) :D de semnal urmate de semnalul de echo.
Documentatie proiect
NewPing lib
Wiki ultrasound
Componente
Schema electronica/sistem
Aici se poate observa conexiunea senzorului la placa Atmega2560: Aici am testat măsurarea distantaței până la caiet:Cod de test
Cel mai simplu cod pentru măsurarea distantei folosind doar setarea pinilor:
/*
* Ultrasonic Sensor HC-SR04
*
*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm ");
}
Codul sursa pentru masurarea distantei folosind libraria NewPing:
/*
* Ultrasonic Sensor HC-SR04
*
*/
#include "NewPing.h"
// defines variables
long duration;
int distance;
// defines pins numbers
#define TRIG_PN 9
#define ECHO_PN 10
#define MAX_DIST 400
#define MIN_DIST 2
NewPing sonar(TRIG_PN,ECHO_PN,MAX_DIST);
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Calculating the distance
distance= sonar.ping_cm();
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
if((distance >= MAX_DIST) || (distance <= MIN_DIST))
{
Serial.println("Out of range ");
}
else
{
Serial.print(distance);
Serial.println(" cm ");
}
}
O zi plăcută tuturor !