Arduino Uno (R3) και αισθητήρας υπερήχων HY-SRF05

Ο HY-SRF05 είναι ένας πομπός/δέκτης υπερήχων που χρησιμοποιείται για τη μέτρηση της απόστασης με ακρίβεια ~0,3 cm.

Ο HY-SRF05 εκπέμπει ένα σήμα τετραγωνικού κύματος 40 KHz μετα από ενεργοποίηση του ακροδέκτη TRIGGER από το Arduino Uno. Το σήμα αντανακλάται σε αντικείμενα μπροστά από τον αισθητήρα το οποίο ανιχνεύεται στη συνέχεια από τον αισθητήρα και η διάρκεια του λαμβανόμενου σήματος αντανακλάται στον ακροδέκτη ECHO ο οποίος διαβάζεται από το Arduino Uno .

 

Χαρακτηριστικά HY-SRF05

·        Τάση τροφοδοσίας: 4,5 V έως 5,5 V

·        Ρεύμα τροφοδοσίας: 10 mA έως 40 mA

·        Είσοδος ενεργοποίησης, ακροδέκτης TRIGGER: Ψηφιακός παλμός 10μs

·        Συχνότητα ήχου: 40 KHz

·        Έξοδος, ακροδέκτης Echo: 0V-VCC

·        Μορφή ακροδέκτη Echo: ψηφιακή

 

 

 

Τρόπος χρήσης

·        Στέλνετε έναν παλμό πλάτους 10 μs (10-6s) (χαμηλή προς υψηλή) στον ακροδέκτη Trigger.

·        Παρακολουθείτε τον ακροδέκτη ECHO.

·        Όταν η ακίδα ECHO πάει ΥΨΗΛΑ, ξεκινάτε το χρονόμετρο.

·        Όταν η ακίδα ECHO πέσει LOW, σταματάτε το χρονόμετρο και αποθηκεύτε τον χρόνο που έχει παρέλθει.

·        Υπολογίζετε τον χρόνο που έχει παρέλθει με τον  παρακάτω τύπο για να λάβετε την απόσταση σε cm:

Απόσταση (σε cm) = (χρόνος που έχει παρέλθει * ταχύτητα ήχου (340 m/s)) / 100 / 2

 

 Βιβλιογραφία

 

1. Arduino Guide για αρχάριους, Νούσης Βασίλης, ΕΚΦΕ Θεσπρωτίας

2. Πάλλας Αναστάσιος, Ορφανάκης Στυλιανός.  Η αξιοποίηση των αισθητήρων του Arduino στις εργαστηριακές και ερευνητικές δραστηριότητες.

 

 

 

Κώδικας

 

/*

VCC to +5V

GND to ground

TRIG to digital pin 12

ECHO to digital pin 13

*/

 

const int TRIG_PIN = 12;

const int ECHO_PIN = 13;

 

void setup()

{

  // initialize serial communication:

  Serial.begin(9600);

  pinMode(TRIG_PIN,OUTPUT);

  pinMode(ECHO_PIN,INPUT);

}

 

void loop()

{

  long duration, distanceCm, distanceIn;

 

  digitalWrite(TRIG_PIN, LOW);

  delayMicroseconds(2);

  digitalWrite(TRIG_PIN, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN,HIGH);

 

  // convert the time into a distance

  distanceCm = duration / 29.1 / 2 ;

  distanceIn = duration / 74 / 2;

 

  if (distanceCm <= 0)

  {

    Serial.println("Out of range");

  }

  else

  {

    Serial.print(distanceIn);

    Serial.print("in: ");

    Serial.print(distanceCm);

    Serial.print("cm");

    Serial.println();

  }

  delay(1000);

}