Posted on

Folosirea senzorului de distanta cu ultrasunete HC-SR04 – pentru începători

Folosirea senzorului de distanta cu ultrasunete HC-SR04

HC-SR04-roboromania

Piese necesare :

1 x placă Arduino UNO R3
1 x Senzor de distanţă cu ultrasunete HC-SR04
3 x LED (plus 3 rezistenţe de 1 kΩ pentru aceste leduri)
cabluri de legătură necesare între piese şi placă

Uno-roboromania-fata

Algoritm :

Iniţial ledurile sunt oprite.
La distanţa cea mai mare (eu am specificat în cod peste valoarea 3000) toate ledurile sunt de asemenea oprite.

Dacă se detectează un obstacol între valorile 2001 şi 3000 se aprinde 1 led (aproximativ între 30-40 cm distanţă).
Dacă obiectul se apropie între valorile 1000 si 2000 am setat să se aprindă 2 leduri.
Dacă obiectul e foarte aproape de senzor (sub 1000 respectiv sub 10-15 cm) am setat să se aprindă toate 3 ledurile.

Montare :

Senzorul are 4 pini respectiv:

VCC de la senzor se cupleaza la +5V de pe placa arduino.
TRIG de la senzor se cuplează la unul din pinii digitali de pe placa arduino (în cod am setat pinul 2)
ECHO de la senzor se cuplează la un alt pin digital de pe placa arduino (în cod am setat pinul 3)
GND de la senzor se cuplează la unul din pinii GND de la arduino

LED-urile se cuplează şi ele (prin intermediul unei rezistenţe de 1 kΩ) la pinii 8,9 şi 10 iar negativul de la leduri la GND de la arduino.

Codul necesar (sketch) :

 

/*
* Ultrasound model: HC-SR04
* Senzor pins  | Arduino Board
* VCC la 5V
* TRIG la Digital pin 2
* ECHO la Digital pin 3
* GND la GND
* LED1 la Digital pin 8
* LED2 la Digital pin 9
* LED3 la Digital pin 10
*/

// initialize the necessary ports
int usTrigger = 2;
int usEcho = 3;
int led1 = 8;
int led2 = 9;
int led3 = 10;

void setup() {
// start ultrasound
pinMode(usTrigger, OUTPUT);
pinMode(usEcho, INPUT);
// start leds
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}

void loop() {
// Initiate ultrasonic speaker
digitalWrite(usTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(usTrigger, LOW);

// Reading out the signal strength
long timecount = pulseIn(usEcho, HIGH);
// if more than 3000 all LEDs stop.
if ( timecount > 3000 ) {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
// If it’s between 2001 and 3000 start LED 1
if ( timecount > 2000 && timecount <= 3000 ) {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
// If it’s between 1000 and 2000 start LED 1 and 2
if ( timecount >= 1000 && timecount <= 2000 ) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
}
// If it’s under 1000 turn all LEDs
if ( timecount < 1000 ) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
}
// Wait 0.1 seconds before the next reading.
delay(100);
}

 

Această aplicaţie se poate dezvolta de exemplu pentru un robot autonom care ocoleşte obstacolele.

Succes !

Colectivul Roboromania

Lasă un răspuns