Arduino - Ultrasone Sensor

In deze tutorial leert u:

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Ultrasone Sensor
1×Jumper wires (verbindingsdraadjes)
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables STEM V3 Starterskit (Arduino inbegrepen)
1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de Ultrasone Sensor

De ultrasone sensor HC-SR04 wordt gebruikt om de afstand tot een object te meten door middel van ultrasone golven.

Pinout

De ultrasone sensor HC-SR04 heeft vier pinnen:

  • VCC pin: moet aangesloten worden op VCC (5V)
  • GND pin: moet aangesloten worden op GND (0V)
  • TRIG pin: deze pin ontvangt het controlesignaal (puls) van de Arduino
  • ECHO pin: deze pin zendt een signaal (puls) naar de Arduino. De Arduino meet de duur van deze puls om de afstand te berekenen.
Ultrasone Sensor Pinout
image source: diyables.io

Hoe Het Werkt

Deze sectie is gewijd aan diepgaande kennis. Maak u GEEN zorgen als u het niet begrijpt. Sla deze sectie over als deze u overweldigt en kom op een andere dag terug. Lees verder met de volgende secties.
  1. Microcontroller: genereert een puls van 10 microseconden op de TRIG pin.
  2. De ultrasone sensor zendt automatisch ultrasone golven uit.
  3. De ultrasone golf wordt gereflecteerd nadat deze een obstakel raakt.
  4. De ultrasone sensor:
    • Detecteert de gereflecteerde ultrasone golf.
    • Meet de reistijd van de ultrasone golf.
  • Ultrasone sensor: genereert een puls op de ECHO pin. De pulsduur is gelijk aan de reistijd van de ultrasone golf.
  • Microcontroller meet de pulsduur op de ECHO pin en berekent vervolgens de afstand tussen sensor en obstakel.
  • Hoe Afstand te Verkrijgen van de Ultrasone Sensor

    Om afstand te meten met de ultrasone sensor hoeven we alleen twee stappen te doen (1 en 6 uit het onderdeel Hoe Het Werkt):

    • Genereer een puls van 10 microseconden op de TRIG pin
    • Meet de pulsduur op de ECHO pin en bereken daarmee de afstand tussen sensor en obstakel

    Afstand Berekening

    We hebben:

    • De reistijd van de ultrasone golf (µs): travel_time = pulse_duration
    • De snelheid van de ultrasone golf: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs

    Dus:

    • De afstand van de ultrasone golf (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
    • De afstand tussen sensor en obstakel (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

    Arduino - Ultrasone Sensor

    De pinnen van Arduino kunnen een puls van 10 microseconden genereren en de pulsduur meten. Daarom kunnen we afstand meten met de ultrasone sensor door twee Arduino-pinnen te gebruiken:

    • Eén pin is verbonden met de TRIG pin om een puls van 10 µs naar de sensor te sturen
    • Een andere pin is verbonden met de ECHO pin om de puls van de sensor te meten

    Bedradingsschema

    Arduino Ultrasone Sensor Bedradingsschema

    This image is created using Fritzing. Click to enlarge image

    Hoe te Programmeren voor Ultrasone Sensor

    digitalWrite(9, HIGH); delayMicroseconds(10); digitalWrite(9, LOW);
    • Meet de pulsduur (µs) op een Arduino-pin met behulp van de functie pulseIn(). Bijvoorbeeld, pin 8:
    duration_us = pulseIn(8, HIGH);
    • Bereken de afstand (cm):
    distance_cm = 0.017 * duration_us;

    Arduino Code

    /* * Created by ArduinoGetStarted, https://arduinogetstarted.com * * Arduino - Ultrasonic Sensor HC-SR04 * * Wiring: Ultrasonic Sensor -> Arduino: * - VCC -> 5VDC * - TRIG -> Pin 9 * - ECHO -> Pin 8 * - GND -> GND * * Tutorial is available here: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor */ int trigPin = 9; // TRIG pin int echoPin = 8; // ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // configure the trigger pin to output mode pinMode(trigPin, OUTPUT); // configure the echo pin to input mode pinMode(echoPin, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(echoPin, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

    Snel Starten

    • Kopieer bovenstaande code en open deze in de Arduino IDE
    • Klik op de Upload-knop in de Arduino IDE om de code naar de Arduino te uploaden
    Arduino IDE - Hoe code uploaden
    • Open de Seriële Monitor
    • Beweeg uw hand voor de ultrasone sensor
    • Bekijk de afstand van de sensor tot uw hand op de Seriële Monitor
    COM6
    Send
    distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Code Uitleg

    Lees de regel-voor-regel uitleg in de commentaarregels van de code!

    Hoe Ruis te Filteren uit Afstandsmmetingen van de Ultrasone Sensor

    De meetresultaten van de ultrasone sensor bevatten ruis. In sommige toepassingen veroorzaakt deze ruis ongewenste werking. We kunnen de ruis verwijderen met het volgende algoritme:

    1. Meerdere metingen nemen en opslaan in een array
    2. De array sorteren in oplopende volgorde
    3. Ruis filteren
      • De kleinste monsters worden als ruis beschouwd → negeren
      • De grootste monsters worden als ruis beschouwd → negeren
      • Gemiddelde nemen van de middelste monsters

      De onderstaande voorbeeldcode neemt 20 metingen:

      • De vijf kleinste monsters worden als ruis beschouwd → genegeerd
      • De vijf grootste monsters worden als ruis beschouwd → genegeerd
      • Gemiddelde wordt genomen van de 10 middelste monsters (van 5e tot 14e)
      /* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-ultrasonic-sensor */ #define TRIG_PIN 9 // TRIG pin #define ECHO_PIN 8 // ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor void setup() { // begin serial port Serial.begin (9600); // configure the trigger and echo pins to output mode pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid untrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore it // + the five biggest samples are considered as noise -> ignore it // ---------------------------------------------------------------- // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; return distance_cm; }

    Video Tutorial

    We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

    Daag uzelf uit

    Gebruik de ultrasone sensor om één van de volgende projecten te maken:

    • Botsingsvermijding voor een RC-auto
    • Detecteren van de vulgraad van een vuilnisbak
    • Monitoren van het niveau van een vuilnisbak
    • Automatisch openen/sluiten van een vuilnisbak. Tip: Raadpleeg Arduino - Servo Motor.

    Extra Kennis

    Sommige fabrikanten leveren ultrasone sensoren met slechts 3 pinnen. De TRIG- en ECHO-signalen zitten dan op dezelfde pin. In dat geval heeft u maar één Arduino-pin nodig voor beide functies: het genereren van een puls naar de sensor én het meten van de puls van de sensor.

    Ultrasone Sensor Toepassingen

    • Botsingsvermijding
    • Vulgraad detectie
    • Niveau meting
    • Nabijheidsdetectie

    ※ ONZE BERICHTEN

    • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!