Hopp til innhald
Nynorsk
Oppgåve

Avstandsmåling med ultralydsensor

Ein ultralydsensor sender ut eit lydsignal og måler kor lang tid det tek før ekkoet av signalet returnerer. Vi kan bruke sensoren saman med ein mikrokontroller for å oppgi avstand.

Formålet med oppgåva

I denne oppgåva skal du bruke ein ultralydsensor saman med mikrokontrolleren. Du skal måle ein avstand som Arduinoen skal ved hjelp av tre ulike lysdiodar. Lysdiodane har kvar sin førehandsdefinerte avstand.

Ultralydsensor

Ein ultralydsensor sender ut ultralydbølger og måler deretter tida det tek til bølgene er e etter at dei har treft eit objekt. Sensoren har ein sendar som genererer ultralydbølger, og ein mottakar som registrerer dei reflekterte bølgene.

Slik fungerer ein typisk ultralydsensor:

  • Sendaren ein kortvarig ultralydpuls.

  • Ultralydpulsen bevegar seg gjennom lufta eller gjennom eit anna medium (gass, væske, plast osv.) som lydbølger kan bevege seg gjennom.

  • Når ultralydpulsen treffer eit objekt, blir ein del av signala reflekterte. Dei blir sende tilbake mot sensoren.

  • Mottakaren i sensoren fangar opp dei reflekterte ultralydbølgene.

  • Sensoren måler tida det tek for ultralydbølgene å reise fram og tilbake mellom sensoren og objektet.

  • Vi må kjenne hastigheita til lydbølger i det aktuelle mediet når vi programmerer sensoren til å rekne ut avstanden til objektet. Er mediet til dømes luft, skal sensoren multiplisere tida det tek for ultralydbølgene å reise fram og tilbake, med lydhastigheita. Når vi deler dette talet på to, vi får avstanden éin veg, frå sensor og fram til objekt.

  • Registrering av avstand kan skje ved at sensoren sender ut pulsar med jamne mellomrom og måler avstanden til reflekterte objekt.

Ultralydsensorar blir brukte i ei rekke applikasjonar, til dømes avstandsmåling, fartsdeteksjon og nivåmåling.

Utstyrsliste

For å bygge den kretsen treng du

  • Arduino Uno mikrokontroller

  • USB-kabel

  • loddefritt

  • tre LED-ar med ulik farge

  • tre motstandar (verdi mellom 100 ohm og 1 kiloohm), til dømes 220 ohm

  • ultralydavstandsmålar

  • koplingsleidningar (jumper wires)

  • digitalt simuleringsprogram, til dømes

Trinn 1: Teikn kretsen (digitalt)

I dette dømet har vi brukt programmet Tinkercad Circuits.

  • Start med å opne nettsida. Vel New design og deretter Circuit.

  • Komponentane du kan nytte, ligg i ein meny på høgre side. Du kan velje kor mange komponentar du vil sjå i menyen.

  • Trykk og dra ein Arduino Uno, koplingsbrett, ultralydsensor, tre diodar og tre motstandar frå komponentpanelet inn til teikneområdet.

  • Kople 5-volts- og jordpinnane på Arduino til straumskjenene (+) og jordskjenene (–) på koplingsbrettet med leidningar. Straumskjenene gir (+) og (–) på heile rekka du koplar leidningane til, og du kan derfor kople til sensorar og ar på heile straumskinna.

  • Du kan forandre leidningsfargane viss du vil, og vi tilrår at du bruker raud farge for (+) og svart farge for (–).

  • Dra tre lysdiodar på koplingbrettet i rad E, med to koplingspunkts avstand frå kvarandre. Du kan forandre LED-fargen på diodane ved å bruke kontrollpanelet som dukkar opp når du klikkar på dei enkeltvis.

  • Bruk ein 220 ohm motstand for å kople katoden til kvar LED (dvs. venstre bein) til jordskjena (svart) på koplingsbrettet. Du kan forandre verdien til ein motstand ved å markere han og bruke nedtrekksmenyen.

  • Kople LED-anodane (høgre bein) til digitale pinnar 4, 3 og 2 på Arduino. Her kan du sjølv velje kva farge du vil bruke på leidningane. Vi har valt nesten same farge som på diodane.

  • LED-anoden (+) er terminalen som straumen flyt inn i, og må koplast til vald utgangspinne på Arduino. Katoden (–) er terminalen som straumen går frå. Denne blir kopla til jordskjena.

Trinn 2: Legg til ultralydsensor

Ultralydsensorar kjem i fleire variantar. I Tinkercad Circuits kan du til dømes velje mellom ein 3-pinnars- og ein 4-pinnarssensor. Generelt har ultralydsensorar éin pinne som blir kopla til jord, ein annan som blir kopla til 5 volt, ein tredje som sender signal og ein fjerde som mottek signal. I 3-pinnarssensoren er sende- og motta-funksjonane kombinerte i éin pinne.

I simuleringsprogrammet finn du vanlegvis ultralydavstandsmålaren under fana "Komponentar". 4-pinnarssensoren finn du når du vel "Alle" i komponentpanelet. I dette dømet bruker vi ein ultralydsensor med tre pinnar.

  • Plasser sensoren på brødbrettet til venstre for lysdiodane i rad E, som vist på figuren.

  • Kople sensoren slik at 5-voltpinnen blir kopla til 5-voltspenningsskjena, GND-pinnen blir kopla til jordskjena og SIG- eller TRIG-pinnen til Arduino-pinne 7. (Viss du bruker
    4-pinnarssensoren, blir ECHO-pinnen kopla til Arduino-pinne 6.)

Trinn 3: Programmering med blokkprogrammering

I dette dømet har vi brukt blokkprogrammering til å programmere mikrokontrolleren. Programmet vi har brukt, heiter Tinkercad Circuits.

  • Programmet skal få ultralydsensoren til å sende ut eit signal og lytte etter ekkoet.

  • Mikrokontrolleren skal registrere kor lang tid det tek frå signalet blir sendt ut til det returnerer.

  • Mikrokontrolleren skal bruke det registrerte talet til å rekne ut avstanden mellom sensoren og objektet som reflekterer signalet.

  • Mikrokontrolleren skal tenne ein grøn, gul eller raud diode, alt etter kor stor den målte avstanden er.

Programmering

Klikk på "Kode"-knappen for å opne koderedigeringsprogrammet. På dei grå notasjonsblokkene kan du notere kva du har tenkt at koden skal gjere, men denne teksten er ikkje nødvendig som ein del av programmet.

Når du har opna programmet, har du to ulike blokker liggande: "start" og "forever". Du skal programmere inne i blokka som heiter "forever".

Variablar

Programmet skal lese eit signal frå ultralydsensoren og sende dette signalet til mikrokontrolleren. Då treng du ein variabel for å lagre denne verdien.

Klikk på kategorien "Variablar" i koderedigeringsprogrammet. Sidan vi skal måle verdien i centimeter, har vi valt å kalle variabelen for "cm". Når du lagar ditt eige program, kan du fritt velje eit anna variabelnamn, til dømes "avstand".

Lese verdi

Vi hentar så inn variabelen "cm" og fortel mikrokontrolleren at han skal både sende og lese signal på pinne 7 på Arduinoen.

Vise verdi via Serial Monitor

Programmet kan vise på skjerm kva verdi som er registrert og lagra i variabelen. Til dette blir det brukt eit verktøy kalla Serial Monitor.

Mikrokontrolleren skal altså sende ut informasjon til ein skjerm. Du finn rett blokk under "Output". Ho heiter "print to serial monitor".

Her kan du anten legge inn eigen tekst eller hente ein variabel. Du kan òg bestemme om mikrokontrolleren skal hoppe til ny linje eller ikkje. Det gjer du ved å velje "with" eller "without" i nedtrekksmenyen framfor "newline".

Illustrasjonen under viser eit døme der er det lagt inn kommandoar som fortel at mikrokontrolleren skal

  • skrive vald tekst "Avstanden er:"

  • skrive verdien som er lagra i variabelen "cm"

  • avslutte med vald tekst "cm"

  • hoppe til ny linje

Viss avstanden er 120 cm, vil mikrokontrolleren i så fall skrive "Avstanden er: 120 cm" før han hoppar til ny linje for å halde fram med å skrive.

Aktivere lysdiodar basert på målt avstand

I dette prosjektet vil vi signalisere avstanden ved å tenne LED-diodar med ulik farge. Vi må då hente inn det som blir kalla logiske funksjonar. Dei fortel mikrokontrolleren at viss ein påstand er sann, skal ein bestemd arbeidsoperasjon gjennomførast. Viss påstanden ikkje er sann (dvs. usann), skal noko anna skje. Blokkene for dei logiske funksjonane finn du under "Control".

I dømet vårt har vi valt følgande trinn for dei ulike LED-diodane:

  • Viss verdien i variabelen "cm" (avstanden) er over 300 cm, skal ingen LED lyse.

  • Viss verdien er mellom 200 og 300 cm, skal grøn LED lyse.

  • Viss verdien er mellom 100 og 200 cm, skal gul LED lyse.

  • Viss verdien er under 100 cm, skal raud LED lyse.

Om mikrokontrolleren skal aktivere dioden eller ikkje, blir bestemt av verdiane LOW og HIGH. Dette er digitale verdiar som eigentleg betyr 0 og 1.

  • LOW betyr at den aktuelle pinnen er avslått (0).

  • HIGH betyr at den aktuelle pinnen er aktivert (1).

På teikninga kopla vi dei ulike diodane til pinnane 2, 3 og 4. Vi må derfor fortelje kva verdi mikrokontrolleren skal setje dei ulike pinnane til kvar gong ein verdi er avlesen og lagra i variabelen "cm".

Målehyppigheit

For å kunne regulere målehyppigheita legg vi ei blokk som heiter WAIT på slutten av programmet. Denne blokka pausar programmet ein bestemd periode før det tek ei ny måling. Kodeblokka for WAIT-funksjonen finn du under Control.

Kor ofte mikrokontrolleren skal gjennomføre måling, er opp til deg. Her har vi valt 0,1 sekund, det vil seie at mikrokontrolleren måler avstanden 10 gonger per sekund.

Simulering av programmet

Når du har kopla opp brettet og laga ferdig programmet, kan du simulere for å sjå om du har kopla og programmert rett.

  • Trykk på simuleringsknappen. Då koplar maskina straum på mikrokontrolleren, og programmet er klart til å bli testa.

  • Trykk så på ultralydsensoren, og du vil få opp eit måleområde der det òg er plassert ein grøn prikk. Denne prikken kan du flytte på inne i målefeltet, og du kan sjå om lysdiodane verkar slik du har programmert dei.

  • Du kan òg trykke på feltet for Serial Monitor for å lese av verdien og sjå om teksten stemmer med det du har programmert.

Trinn 5: Sjå programmeringskoden

Når koderedigeringsprogrammet er opent, kan du klikke på nedtrekksmenyen til venstre og velje "Blokker + tekst" for å hente fram Arduino-koden som har blitt generert av kodeblokkene.

Komplett programkode

// C++ code

// Set startverdi på variabel

int cm = 0;

long readUltrasonicDistance(int triggerPin, int echoPin)

{

pinMode(triggerPin, OUTPUT); // Definer pinne for trigger

digitalWrite(triggerPin, LOW);

delayMicroseconds(2);

// Aktiverer trigger-pinne i 10 mikrosekund

digitalWrite(triggerPin, HIGH);

delayMicroseconds(10);

digitalWrite(triggerPin, LOW);

pinMode(echoPin, INPUT);

// Les frå Echo-pinnen og returnerer tida lydbølgene har brukt, i mikrosekund

return pulseIn(echoPin, HIGH);

}

void setup()

{

Serial.begin(9600);

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

}

void loop()

{

// Lese verdi frå sensor og skrive verdien på

// skjermen

cm = 0.01723 * readUltrasonicDistance(7, 7);

// Skrive verdi på skjerm (Serial Monitor)

Serial.print("Avstanden er: ");

Serial.print(cm);

Serial.println(" cm");

// Beskrive kva som skal skje viss avstanden er

// over 300 cm

if (cm > 300) {

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

}

// Kva skal skje viss avstanden er mellom 200 og

// 300 cm?

if (cm <= 300 && cm > 200) {

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

}

// Kva skal skje viss avstanden er mellom 100 og

// 200 cm?

if (cm <= 200 && cm > 100) {

digitalWrite(2, LOW);

digitalWrite(3, HIGH);

digitalWrite(4, LOW);

}

// Kva skal skje viss avstanden er under 100 cm?

if (cm <= 100) {

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, HIGH);

}

// Kor ofte skal avstanden sjekkast?

delay(100); // Wait for 100 millisecond(s)

}

Trinn 6: Bygg ein fysisk krets (valfritt)

Viss du bygger ein versjon av denne kretsen, kan du prøve han ut med den serielle monitoren i Arduino-programvara (forstørringsglasknapp øvst til høgre i skissevindauget). Du kan aktivere sensoren med handa, kroppen, notatboka osv.

Ultralydsensoren må av og til kalibrerast fordi hastigheita på lydbølgene kan variere litt på grunn av temperatur, lufttrykk osv. Viss du vil ha eksakte resultat for ulike avstandar, må du gjennomføre nokre testmålingar. Du kan setje ein gjenstand i bestemde avstandar framfor sensoren og observere avstandane ved hjelp av den serielle monitoren. Så set du trinna for diodane til dei verdiane du har valt.

Juster dei ulike avstandstersklane dine til eit område som passar til startverdien din. Viss handa di til dømes var 60 cm unna, kan området ditt vere 0–60, og trinna kan vere 60–40,
40–20 og 20–0.

Last opp koden på nytt, og prøv å bevege deg framfor sensoren. Etter kvart som du nærmar deg sensoren, bør lysdiodane tennast etter tur når du er innanfor dei angitte trinna.

Trinn 6: Utforsk fleire moglegheiter!

Gratulerer!

Du har lært å oppdage avstand ved hjelp av ein ultralydsensor. Du har òg lært om frittståande funksjonar og brukt og seriell monitor for å spore endringar inne i Arduino.

Du kan prøve å utvide eller forandre dette prosjektet på ulike måtar:

  • Du kan gjere det til ein nærleiksalarm ved å legge til ein Piezo-summar som blir slått på når den siste lysdioden lyser (næraste avstand).

  • Du kan legge til fleire diodar eller nivå.

  • Ultralydsensoren kan kanskje bytast ut med ein mikrofon, og diodane kan vise kor høg lyd som blir registrert.

  • Det er kanskje mogleg å byte ut avstandssensoren med ein temperatursensor.

  • Du kan legge til ein motor som kan opne ei dør eller ein port når nokon kjem nær nok.

Her er det i grunnen berre fantasien som set grenser!

Skrive av Roger Rosmo.
Sist oppdatert 05.07.2023