Til hovedinnhold

Slik lager du din egen ryggesensor med Arduino

Ved hjelp av tre komponenter og bare noen få linjer kode laget vi vår egen ryggesensor

Introduksjon

I Tek-redaksjonen er vi glad i selvbyggerprosjekter. Blant annet har vi tidligere både laget vår egen Ruter-skjerm som forteller deg når neste buss kommer, og vi lagde for kort tid siden vår egen arkademaskin med Raspberry Pi 2. Idag skal vi se på hvordan vi kan lage vår egen ryggesensor for bilen. For å lage en ryggesensor trenger vi:

  • Avstandssensor for å måle avstand til objekter bak bilen
  • Lydenhet for å indikere avstand til objekt
  • En eller annen form for kontrollenhet

Vi har tidligere skrevet om knøttemaskinen Arduino, og hvordan den egner seg godt som kontrollenhet til hobbyprosjekter. Arduino er et utviklingsverktøy for å lage elektronikk. Det består av et elektronikkort med innganger og utganger som kan programmeres ved hjelp av enkle kommandoer – og det er på en måte litt som en liten datamaskin. Arduino ble utviklet av italieneren Massimo Banzi sammen med noen kolleger i 2005. Den ble designet for å være veldig enkel å bruke, slik at selv personer uten teknisk bakgrunn skal kunne lage prosjekter basert på den.

Arduino UNO. Foto: Shutterstock

Arduino er ikke like kraftig som en Raspberry Pi – som også egner seg godt for hobbyprosjekter – men i dette prosjektet vil vi ikke ha behov for noe særlig prosessorkraft. Vi trenger bare noe for å gjøre enkle utlesninger fra en avstandssensor og enkel styring av en lydenhet for å indikere avstand. Denne jobben er en Arduino mye bedre egnet for. Derfor velger vi å bruke en Arduino som kontrollenhet i dette prosjektet.

Måling av avstand

For å detektere og måle avstanden til objekter bak bilen, trenger vi en eller annen form for avstandssensor. Det finnes flere måter å måle avstand på, hvorav de mest vanlige metodene er å bruke infrarødt lys, ultralyd, radarbølger eller laser. De har alle sine fordeler og ulemper. Vi ønsker å finne en sensor som både er billig, har et bredt synsområde og er nogenlunde nøyaktig.

Laser er en vanlig måte å måle avstand på. Problemet med laser er at den måler avstand til et spesifikt punkt, og ikke et område. Dersom du rygger mot en vegg, så er ikke dette noe problem, men dersom det for eksempel er en sementblokk bak bilen, som ikke er akkurat der laserpunktet måler, så vil laseren ikke detektere denne.

Måling av avstand med laser. Foto: Shutterstock

Radar er tradisjonelt en teknologi som har blitt brukt for å detektere objekter over lange avstander. Men nyere utviklinger av teknologien har ført til at de også finnes som små og lite energikrevende avstandssensorer som fungerer på korte avstander med høy nøyaktighet. For eksempel har det norske selskapet Novelda utviklet en slik type sensor. En slik sensor ville antageligvis vært ideell som ryggesensor, men dessverre ser det ikke ut til at disse sensorene er tilgjengelig for «mannen i gata» helt ennå.

En infrarød finnes tilgjengelig i mange forskjellige varianter, og de kan fåes til en ganske billig penge. Problemet med infrarøde sensorer er at de har et litt smalt deteksjonsområde og den fungerer dårlig i sollys.

Måling av avstand med ultralyd

Hvordan ultralyd fungerer. Foto: Shutterstock

En ultralydsensor derimot fungerer helt uavhengig av lysforhold, er billig, forholdsvis nøyaktig og har et passe bredt synsfelt. Perfekt for vårt prosjekt. Ultralyd er lyd med veldig høy frekvens. VI mennesker kan bare høre lyder med en frekvens på opptil 20 000 svingninger per sekund. Frekvenser over dette kalles ultralyd.

Metoden man bruker for å måle avstand med ultralyd er å sende ut en liten ultralydpuls, deretter vente på et ekko. Lyd beveger seg med en hastighet på ca 345 meter per sekund. Tiden det tar før ekkoet kommer tilbake, kan man derfor bruke for å regne ut avstanden frem til objektet.

Ultralydsensoren vi valgte var en Maxbotix LV-EZ1. Dette er en fullverdig avstandssensor som tar seg av utsending av lydpulser, detektering av ekko, og utregning av avstand. Vi trenger bare koble til strøm og lese ut avstandsmålinger. Sensoren koster rundt 30 dollar og er tilgjengelig fra mange nettbutikker som selger elektronikk.

Sensoren gir ut data på tre forskjellige måter: Ett analogt utgangssignal og to forskjellige digitale utgangsignaler. Ved å bruke en av de digitale signalene vil vi få den mest korrekte målingen, men det analoge signalet er mye enklere å bruke og vil gi bra nok målinger for vårt prosjekt.

Oppkobling av sensor til Arduino

Ultralydsensor. Foto: Øyvind N. Dahl

Når vi åpner pakningen til ultralydsensoren, blir vi møtt med en liten, men nyttig lapp som beskriver hvilke tilkoblingspunkter som gjør hva – og i tillegg hvordan vi kan tolke det analoge utgangssignalet. Vi kan lese at den analoge utgangen vil gi ut en spenning mellom null og fem volt, hvor hver 9.8 millivolt tilsvarer én tomme.

Siden vi skal bruke den analoge utgangen, betyr det at vi trenger å koble til ledninger til følgende tilkoblingspunkter:

  • +5: Her kobler vi til 5 volt fra Arduino
  • GND: Her kobler vi til jord fra Arduino
  • AN: Her kobler vi til en analog inngang på Arduino

Sensoren kommer uten ledninger, så vi klipper til tre ledninger og lodder dem fast til de tre punktene vi skal bruke. For å teste at sensoren fungerer som den skal, trenger vi å laste opp et lite program til Arduinoen, som måler spenningen fra sensorens analoge utgang.

Dette er en populær sensor, så etter et kjapt Google-søk finner vi raskt eksempelkode fra Arduinos nettsider, som vi kan bruke for å teste den. Vi limer inn koden i Arduino-vinduet og laster opp. Og ved å bruke «Serial Monitor»-verktøyet i Arduinoprogrammet, kan vi se at sensoren måler avstand til det som er foran sensoren.

Resultat fra test av sensor. Foto: Øyvind N. Dahl

Oppsett av lydsignal

Med en fungerende avstandsmåler, trenger vi å lage en form for indikasjon som sier hvor langt unna vi er veggen eller andre objekter. Mange ryggesensorer på markedet i dag bruker lyd for å indikere avstand. Jo nærmere du kommer et objekt, jo raskere piper lyden.

Vi skal prøve å etterligne dette, ved å bruke en «buzzer». Dette er en liten dings som inneholder et piezoelement, og som kan lage lyd ved å tilføre en frekvens innenfor det hørbare frekvensområdet.

Det finnes både aktive og passive «buzzere». Den aktive trenger bare å kobles til strøm, og har en intern krets som sørger for å lage lydfrekvensen. Den passive består av bare elementet, og du må tilføre lydsignalet selv. Vi skal bruke en aktiv «buzzer» som vi hadde liggende, men disse er også lett tilgjengelige på nettbutikker som selger elektronikk.

Buzzer. Foto: Øyvind N. Dahl

For å teste «buzzeren» vår, kobler vi den røde ledningen til en digital pinne på Arduinoen, og den svarte ledningen til jord. Så lager vi en enkel kode som skrur den digital pinnen på, venter i noen millisekunder, skrur pinnen av igjen, og venter ennå litt. Deretter repeterer dette om og om igjen. Dette vil gi oss repeterende pip fra «buzzeren».

Vi lastet opp følgende kode på Arduinoen:

int lyd_pinne = 8;
int pause_ms = 100;

void setup() {
pinMode(lyd_pinne, OUTPUT); //Setter "lydpinnen" som utgang
}

void loop() {
//Lager en "beep"
digitalWrite(lyd_pinne, HIGH);
delay(pause_ms);
digitalWrite(lyd_pinne, LOW);
delay(pause_ms);
}

Koden gir oss en fin, repeterende pipelyd. For å indikere avstand kan vi bruke ventetiden imellom hver lydpuls til å angi hvor nære et objekt vi er – den samme metoden som mange kommersielle ryggesensorer benytter. Siden den målte avstanden vil bli mindre når man kommer nærmere et objekt, kan vi bruke denne verdien til å redusere tiden mellom hvert pip. Dette burde gi oss den forventede effekten.

Resultatet

Til slutt gjenstår bare å koble både «buzzeren» og avstandssensoren til Arduinoen, og lage kode som leser avstandsmålinger fra sensoren og bestemmer lydsignalet ut ifra den målte avstanden.

Etter litt prøving og feiling, fant vi en god måte å lage lydisgnalet på. Vi tok antall centimeter til objektet, og ganget dette med to. Deretter brukte vi denne verdien til både å angi hvor lenge pipet skal vare, og hvor lenge pausen mellom hvert pip skal vare. For å unngå ekstra lange pip når det blir målt lange avstander, satte vi maks pip-lengde til 500 millisekunder.

Her er koden vi endte opp med:

int sensor_pinne = A0;
int lyd_pinne = 8;

int pause_ms;
long unsigned int forrige_beep;

void setup() {
pinMode(lyd_pinne, OUTPUT); //Setter "lydpinnen" som utgang

//Les avstand for å ha som startverdier
int avstand = lesAvstand();
pause_ms = avstand * 2;
}

void loop() {

//Sørger for å ikke ha lengre pip enn 500 millisekunder
int pip_ms = pause_ms;
if (pip_ms > 500)
pip_ms = 500;

//Følgende kode lager et pip
digitalWrite(lyd_pinne, HIGH);
delay(pip_ms);
digitalWrite(lyd_pinne, LOW);

//Lagrer antall millisekunder siden Arduinoen ble startet
forrige_beep = millis();

//Venter pause_ms millisekunder (og oppdaterer avstandsmålingen underveis for rask reaksjon)
while (millis() - forrige_beep < pause_ms) {
int avstand = lesAvstand();
pause_ms = avstand*2;
}
}

//Metode som gir ut avstand i cm
int lesAvstand() {
int inches = analogRead(sensor_pinne)/2;
int cm = inches * 2.54;
return cm;
}

Sensoren fungerte utmerket og er klar for å blir festet på en bil. For å montere ryggesensoren på en bil, kan det være smart å la Arduinoen med «buzzer» være plassert inne i kupèen ved føreren, og dra ledninger gjennom bilen ut til ultralydsensoren som må plasseres på bakenden av bilen. Arduinoen kan får strøm fra et 9V batteri, eller du kan lage din egen konverter for sigarettenneren.

Her er en kort video hvor vi tester sensoren:

Oppsummering

I denne guiden så vi først på hvordan vi kan bruke Arduino til å lese avstandsmålinger fra en ultralydsensor. Deretter koblet vi til en «buzzer» for å lage lyd. Til slutt koblet vi sammen det hele til en ryggesensor som indikerer avstand ved å pipe raskere og raskere ettersom den målte avstanden blir lavere.

Det krevde ikke mange linjer kode å få til dette – og det er utrolig interessant å oppdage alle de mulighetene man har med Arduino. Har du lyst til å lære mer om Arduino og mulighetene, kan du lese vår introduksjon til Arduino (Ekstra).

Takk til Tinkersoup for lån av ultralydsensor.

Les også
Intel og Arduino har lansert knøttemaskin for selvbyggere
Les også
Denne automatiske dingsen knekker kombinasjonslåser på bare sekunder
Les også
Se hvordan vi fikk værvarselet inn på lampen
Les også
Gir bort gratis Raspberry Pi-er til værstasjonprosjekt
Les også
Slik lager du din egen Ruter-skjerm med knøttemaskinen Arduino
Les også
Slik lager du et lys som vokter huset ditt
Les også
Det er uante muligheter med knøttemaskinen Arduino
Les også
Bygg din egen superfjernkontroll
Les også
Med denne kan du lage flammesprutende ponnier og vanningssystemer
annonse