Hopp til innhold
Bokmål
Oppgave

NDLA-boksen: Parkeringssensor

En parkeringssensor er et nyttig system som hjelper sjåfører å parkere tryggere. Sensoren varsler om avstanden mellom bilen og hindringer. Lær hvordan du programmerer en parkeringssensor som består av en Arduino, en ultralydsensor og tre lysdioder (grønn, gul og rød).

Hvordan virker en parkeringssensor?

En parkeringssensor bruker ultralydteknologi til å måle avstanden mellom en bil og et objekt. Sensoren sender ut ultralydbølger som når de treffer et objekt. Systemet måler tida det tar før ekkoet kommer tilbake, og bruker deretter dette tallet til å beregne avstanden.

Basert på den målte avstanden aktiveres ulike lysdioder:

  • Grønn diode: Bilen er på trygg avstand.

  • Gul diode: Bilen nærmer seg hindringa.

  • Rød diode: Bilen er veldig nær hindringa, og det er på tide å stoppe.

Programmering ved hjelp av praterobot

Du kan bruke en praterobot (kunstig intelligens) som hjelp til å programmere dette prosjektet. Da må du gi roboten klare instruksjoner slik at du får et svar som er tilpassa den konkrete oppgaven du jobber med. Roboten trenger så omfattende informasjon som mulig om oppgava.

Rolleinstruks

Først må du fortelle prateroboten hvilken rolle den skal ha, slik at den vet hvordan den skal hjelpe deg.

Forslag til rolleinstruks

"Jeg vil at du skal være min digitale veileder og hjelpe meg med oppkopling og programmering av en Arduino Uno R3.

Du skal bruke faguttrykk og ellers et språk og forklaringer som er tilpassa elever i videregående skole. Du skal være engasjerende og motiverende.

Først skal du forklare hvordan systemet jeg spør om, virker.

Så vil jeg ha en oversikt over komponentene jeg kan ha bruk for når jeg bygger dette systemet. Gi meg både navn og bruksmåter.

Jeg trenger også forslag til hvordan systemet skal koples sammen. Gi meg instruksjoner om hvilke pinner som skal benyttes på komponentene og Arduinoen, og om det er behov for resistorer i kretsen.

Du skal så lage en programkode som kan brukes på systemet. Først forklarer du godt hver enkelt del av programmet. Så skriver du en komplett programkode.

Jeg ønsker at du lager ei liste over eventuelle vanskelige fagbegreper og forklarer dem i et lett språk.

Du skal også lage ei liste med praktiske eksempler på bruk av et slikt system i det virkelige liv.

Til slutt skal du lage et sammendrag av de viktigste punktene i svaret ditt."

Programkode

Når du har gitt prateroboten ei rolle, er du klar til å fortelle den hva du trenger hjelp til. Du må da informere om hvilke komponenter som skal koples til, og hva du ønsker at prosjektet skal gjøre.

Forslag til spørsmål om programkode

"Du skal lage en programkode for Arduino Uno som skal måle avstanden fram til en gjenstand ved hjelp av en ultralydsensor. Avstandene skal i tre nivåer etter hvor lange de er, og nivåene skal vises ved hjelp av tre lysdioder i fargene grønt, gult og rødt. Grønt skal vise lang avstand, gult skal vise middels lang avstand og rødt skal vise kort avstand. Jeg vil også at en buzzer skal gi et lydsignal når avstanden er så kort at rød lysdiode lyser. Det skal være mulig å justere følsomheten for ultralydsensoren med et potensiometer. Verdiene skal oppdatere seg ti ganger per sekund."

Tenk over

  • Kan du spørre om eksakte avstander, for eksempel

    • grønt lys: over 100 cm

    • gult lys: mellom 30 og 100 cm

    • rødt lys: under 30 cm

  • Vil det være hensiktsmessig å fortelle prateroboten navna på komponentene du bruker (ultralydsensor og potensiometer)?

  • Trenger prateroboten å vite hvilke tilkoplingspinner de enkelte komponentene har, for eksempel 5V, GND og SIG (3-pola ultralydsensor)?

Faglig støtte

Prateroboten kan gi deg råd og veiledning om hvordan du skal kople ledninger og sensorer. Den kan forklare for deg hvordan programkoden er bygd opp, og hva de enkelte programlinjene betyr.

Forslag til spørsmål om faglig støtte

"Beskriv hvordan jeg skal kople opp komponentene og Arduinoen. Jeg vil også at du gir meg ei god forklaring på hver enkelt programlinje slik at det blir enkelt å forstå programmet."

Bruksområde og utvidelser

Du kan også spørre prateroboten om hva et slikt prosjekt kan brukes til, og hvordan det kan utvides ved å benytte flere sensorer og systemer.

Forslag til spørsmål om bruksområde og utvidelse

"Gi meg forslag til hva dette prosjektet kan brukes til i det virkelige liv, og hvordan prosjektet kan utvides med flere komponenter."

Instruks til prateroboten

Når du snakker med prateroboten, kan du stille mange delspørsmål for å komme fram til riktig svar til slutt. Alternativt kan du samle alle spørsmåla og lage en lang instruks, men da får du også et langt svar og mye informasjon på én gang.

Vil du ha en komplett instruks, kan du bruke denne teksten:

Komplett instruks og spørsmål

"Jeg vil at du skal være min digitale veileder og hjelpe meg med oppkopling og programmering av en Arduino Uno R3.

Du skal bruke faguttrykk og ellers et språk og forklaringer som er tilpassa elever i videregående skole. Du skal være engasjerende og motiverende.

Først skal du forklare hvordan systemet jeg spør om, virker.

Så vil jeg ha en oversikt over komponentene jeg har bruk for når jeg bygger dette systemet. Gi meg både navn og bruksmåter.

Jeg trenger også forslag til hvordan systemet skal koples sammen. Gi meg instruksjoner om hvilke pinner som skal brukes på komponentene og Arduinoen, og om det er behov for resistorer i kretsen.

Lag ei liste over eventuelle vanskelige fagbegreper og forklar disse i et lett språk.

Til slutt skal du lage et sammendrag av de viktigste punktene i svaret ditt.

Dette er programmeringsoppgaven du skal løse: Lag en programkode som kan brukes på systemet. Først forklarer du godt hver enkelt del av programmet. Så skriver du en komplett programkode.

Du skal lage en programkode for Arduino Uno som skal måle avstanden fram til en gjenstand ved hjelp av en ultralydsensor. Avstandene skal i tre typer etter hvor lange de er, og typene skal vises ved hjelp av tre lysdioder i fargene grønt, gult og rødt. Grønt skal vise lang avstand, gult skal vise middels lang avstand og rødt skal vise kort avstand. Jeg vil også at en buzzer skal gi et lydsignal når avstanden er så kort at rød lysdiode lyser. Det skal være mulig å justere følsomheten for ultralydsensoren med et potensiometer. Verdiene skal oppdatere seg ti ganger per sekund.

Beskriv hvordan jeg skal kople opp komponentene og Arduinoen. Gi meg også ei god forklaring på hver enkelt programlinje slik at det blir enkelt å forstå programmet.

Jeg ønsker forslag til hva dette prosjektet kan brukes til i det virkelige liv, og hvordan prosjektet kan utvides med flere komponenter."

Filer

I filene under finner du tegninger for å skrive ut sidevegger og for å montere sensorene og displayet i denne oppgaven.

Du kan også laste ned et forslag til koplingsskjema.

Løsningsforslag for programkode

Programkode

// Definer pinner

const int sigPin = 9; // Signalpinne for ultralydsensor

const int greenLED = 3;

const int yellowLED = 4;

const int redLED = 5;

const int buzzer = 6;

const int potPin = A0;

// Variabler for målinger

long duration;

int distance;

int threshold;

void setup() {

pinMode(sigPin, OUTPUT); // Starter som output for å sende puls

pinMode(greenLED, OUTPUT);

pinMode(yellowLED, OUTPUT);

pinMode(redLED, OUTPUT);

pinMode(buzzer, OUTPUT);

pinMode(potPin, INPUT);

Serial.begin(9600);

}

void loop() {

// Send puls fra sensor

pinMode(sigPin, OUTPUT);

digitalWrite(sigPin, LOW);

delayMicroseconds(2);

digitalWrite(sigPin, HIGH);

delayMicroseconds(10);

digitalWrite(sigPin, LOW);

// Bytt til input for å lese ekko

pinMode(sigPin, INPUT);

duration = pulseIn(sigPin, HIGH);

// Beregn avstand i cm

distance = duration * 0.034 / 2;

// Les følsomhetsverdi fra potensiometer

threshold = analogRead(potPin) / 4; // Skalerer til 0–255

// Bestem hvilken LED som skal lyse

if (distance > threshold + 10) {

digitalWrite(greenLED, HIGH);

digitalWrite(yellowLED, LOW);

digitalWrite(redLED, LOW);

digitalWrite(buzzer, LOW);

}

else if (distance > threshold) {

digitalWrite(greenLED, LOW);

digitalWrite(yellowLED, HIGH);

digitalWrite(redLED, LOW);

digitalWrite(buzzer, LOW);

}

else {

digitalWrite(greenLED, LOW);

digitalWrite(yellowLED, LOW);

digitalWrite(redLED, HIGH);

digitalWrite(buzzer, HIGH);

}

// Skriv til seriell monitor

Serial.print("Avstand: ");

Serial.print(distance);

Serial.println(" cm");

delay(100); // Oppdatering 10 ganger per sekund

}

Relatert innhold

NDLA-boksen

NDLA-boksen er spesialdesigna for Arduino-programmering. Her får du mulighet til å lage din egen boks til bruk i programmeringsøvinger.


Skrevet av Roger Rosmo.
Sist oppdatert 21.01.2025