Arduino Nano - Ultrasone Sensor

Deze tutorial leert u hoe u de Arduino Nano en een ultrasone sensor gebruikt om de afstand tot obstakels of objecten te meten. In detail behandelen we:

Hardware Benodigd

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB kabel
1×Ultrasone Sensor
1×Jumperdraden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

Of u kunt de volgende kits kopen:

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 HC-SR04 ultrasone sensor wordt gebruikt om de afstand tot een object te meten door middel van ultrasone golven.

Pinout van de Ultrasone Sensor

De HC-SR04 ultrasone sensor heeft vier pinnen:

  • VCC pin: moet worden verbonden met VCC (5V)
  • GND pin: moet worden verbonden met GND (0V)
  • TRIG pin: ontvangt een besturingssignaal (pulse) van de Arduino Nano
  • ECHO pin: stuurt een signaal (pulse) naar de Arduino Nano. De Arduino Nano meet de duur van deze pulse om de afstand te berekenen.
Ultrasone Sensor pinout

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.
  • De Arduino Nano genereert een 10-microseconden durende pulse op de TRIG-pin, waardoor de ultrasone sensor ultrasone golven uitzendt.
  • Wanneer deze golven een obstakel raken, worden ze weerkaatst.
  • De ultrasone sensor kan de teruggekaatste golf detecteren en meet de reistijd ervan.
  • Vervolgens genereert de sensor een puls op de ECHO-pin met een duur gelijk aan de reistijd van de ultrasone golf.
  • De Arduino Nano meet de pulsduratie op de ECHO-pin en berekent daarmee de afstand tussen sensor en obstakel.

Hoe Verkrijgt U Afstand van de Ultrasone Sensor

Om de afstand van de ultrasone sensor te berekenen, hoeven we slechts twee stappen in de Arduino-code te doen (stap 1 en 6 in Hoe Het Werkt):

  • De Arduino Nano genereert een pulse van 10 microseconden op de TRIG-pin.
  • De Arduino Nano meet de duur van de pulse op de ECHO-pin.
  • Daarna gebruikt de Arduino Nano de gemeten pulsduratie om de afstand te berekenen tussen sensor en obstakel.

Afstandsberekening

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 die de ultrasone golf aflegt (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 Nano - Ultrasone Sensor

De pinnen van de Arduino Nano kunnen een pulse van 10 microseconden genereren en de duur van een pulse meten. Hierdoor kunnen we twee pinnen van de Arduino Nano gebruiken om de afstand van de ultrasone sensor tot een object te bepalen. We moeten alleen:

  • Eén pin van de Arduino Nano verbinden met de TRIG-pin van de ultrasone sensor. Deze Arduino-pin genereert een pulse van 10 µs op de TRIG-pin van de sensor.
  • Een andere pin van de Arduino Nano verbinden met de ECHO-pin van de ultrasone sensor. Deze Arduino-pin meet de pulse van de sensor.

Bedradingsschema

Arduino Nano ultrasone sensor bedradingsschema

This image is created using Fritzing. Click to enlarge image

Hoe Te Programmeren Voor Ultrasone Sensor

digitalWrite(3, HIGH); delayMicroseconds(10); digitalWrite(3, LOW);
  • Meet de pulsduratie (in microseconden) op Arduino pin 2 met behulp van de functie pulseIn(). Bijvoorbeeld:
duration_us = pulseIn(2, HIGH);
  • Bereken de afstand (cm):
distance_cm = 0.017 * duration_us;

Arduino Nano Code

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // The Arduino Nano pin connected to TRIG pin of ultrasonic sensor #define ECHO_PIN 2 // The Arduino Nano pin connected to ECHO pin of ultrasonic sensor float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // Configure the trigger pin to output mode pinMode(TRIG_PIN, OUTPUT); // Configure the echo pin to input mode pinMode(ECHO_PIN, INPUT); } void loop() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the ECHO pin duration_us = pulseIn(ECHO_PIN, 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); }

Snelle Stappen

  • Kopieer de code en open deze in de Arduino IDE.
  • Klik vervolgens op de Upload knop in de Arduino IDE om de code te compileren en te uploaden naar de Arduino Nano.
Hoe code uploaden naar Arduino Nano
  • Open de Seriële Monitor
  • Houd uw hand voor de ultrasone sensor
  • Bekijk de afstand van sensor tot uw hand die op de Seriële Monitor wordt weergegeven
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 Verklaring

Bekijk de regel-voor-regel uitleg die in de commentaren van de broncode is opgenomen!

Hoe Ruis Te Filteren Uit Afstandsmetingen van de Ultrasone Sensor

Het meetresultaat van een ultrasone sensor kan ruis bevatten, wat in sommige toepassingen ongewenste acties kan veroorzaken. Om de ruis te verwijderen, kunnen we het volgende algoritme gebruiken:

  • Meerdere metingen uitvoeren en opslaan in een array
  • De array sorteren in oplopende volgorde
  • Ruis filteren door:
    • De kleinste waarden als ruis te beschouwen en te negeren
    • De grootste waarden als ruis te beschouwen en te negeren
    • Het gemiddelde te nemen van de middelste waarden

    Onderstaand voorbeeld neemt 20 metingen:

    • Negeer de vijf kleinste metingen.
    • Negeer de vijf grootste metingen.
    • Neem het gemiddelde van de 10 middelste metingen van de vijfde tot de veertiende.
    /* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // The Arduino Nano pin connected to TRIG pin of ultrasonic sensor #define ECHO_PIN 2 // The Arduino Nano pin connected to ECHO pin of ultrasonic sensor 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() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the 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.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten in het gebruik van de ultrasone sensor met Arduino Nano.

Daag uzelf uit

Gebruik een ultrasone sensor voor een van de volgende projecten:

  • Het bouwen van een botsingsvermijdingssysteem voor een op afstand bestuurbare auto.
  • Het bepalen van hoe vol een vuilnisbak is.
  • Het volgen van het vulniveau van een vuilnisbak.
  • Automatisch openen en sluiten van een vuilnisbak. Tip: Zie Arduino Nano - Servo Motor.

Toepassingen van de Ultrasone Sensor

  • Botsing vermijden
  • Volheid detecteren
  • Niveau meten
  • Nabijheid detecteren

※ 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!