Hopp til innhald
Nynorsk
Oppgåve

NDLA-boksen: Parkeringssensor

Ein parkeringssensor er eit nyttig system som hjelper sjåførar å parkere tryggare. Sensoren varslar om avstanden mellom bilen og hindringar. Lær korleis du programmerer ein parkeringssensor som består av ein Arduino, ein ultralydsensor og tre lysdiodar (grøn, gul og raud).

Korleis verkar ein parkeringssensor?

Ein parkeringssensor bruker ultralydteknologi til å måle avstanden mellom ein bil og eit objekt. Sensoren sender ut ultralydbølger som når dei treffer eit objekt. Systemet måler tida det tek før ekkoet kjem tilbake, og bruker deretter dette talet til å rekne ut avstanden.

Basert på den målte avstanden blir ulike lysdiodar aktiverte:

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

  • Gul diode: Bilen nærmar seg hindringa.

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

Programmering ved hjelp av praterobot

Du kan bruke ein praterobot (kunstig intelligens) som hjelp til å programmere dette prosjektet. Då må du gi roboten klare instruksjonar slik at du får eit svar som er tilpassa den konkrete oppgåva du jobbar med. Roboten treng så omfattande informasjon som mogleg om oppgåva.

Instruks

Først må du fortelje prateroboten kva rolle han skal ha, slik at han veit korleis han skal hjelpe deg.

Forslag til rolleinstruks

"Eg vil at du skal vere den digitale rettleiaren min og hjelpe meg med oppkopling og programmering av ein Arduino Uno R3.

Du skal bruke faguttrykk og elles eit språk og forklaringar som er tilpassa elevar i vidaregåande skule. Du skal vere engasjerande og motiverande.

Først skal du forklare korleis systemet eg spør om, verkar.

Så vil eg ha ei oversikt over komponentane eg kan ha bruk for når eg bygger dette systemet. Gi meg både namn og bruksmåtar.

Eg treng òg forslag til korleis systemet skal koplast saman. Gi meg instruksjonar om kva pinnar som skal nyttast på komponentane og Arduinoen, og om det er behov for resistorar i kretsen.

Du skal så lage ein programkode som kan brukast på systemet. Først forklarer du godt kvar enkelt del av programmet. Så skriv du ein komplett programkode.

Eg ønsker at du lagar ei liste over eventuelle vanskelege fagomgrep og forklarer dei i eit lett språk.

Du skal òg lage ei liste med praktiske døme på bruk av eit slikt system i det verkelege livet.

Til slutt skal du lage eit samandrag av dei viktigaste punkta i svaret ditt."

Programkode

Når du har gitt prateroboten ei rolle, er du klar til å fortelje han kva du treng hjelp til. Du må då informere om kva komponentar som skal koplast til, og kva du ønsker at prosjektet skal gjere.

Forslag til spørsmål om programkode

"Du skal lage ein programkode for Arduino Uno som skal måle avstanden fram til ein gjenstand ved hjelp av ein ultralydsensor. Avstandane skal i tre nivå etter kor lange dei er, og nivåa skal visast ved hjelp av tre lysdiodar i fargane grønt, gult og raudt. Grønt skal vise lang avstand, gult skal vise middels lang avstand og raudt skal vise kort avstand. Eg vil òg at ein buzzer (summar) skal gi eit lydsignal når avstanden er så kort at raud lysdiode lyser. Det skal vere mogleg å justere sensibiliteten for ultralydsensoren med eit potensiometer. Verdiane skal oppdatere seg ti gonger per sekund."

Tenk over

  • Kan du spørje om eksakte avstandar, til dømes

    • grønt lys: over 100 cm

    • gult lys: mellom 30 og 100 cm

    • raudt lys: under 30 cm

  • Vil det vere formålstenleg å fortelje prateroboten namna på komponentane du bruker (ultralydsensor og potensiometer)?

  • Treng prateroboten å vite kva tilkoplingspinnar kvar enkelt komponent har, til dømes 5V, GND og SIG (3-pola ultralydsensor)?

Fagleg støtte

Prateroboten kan gi deg råd og rettleiing om korleis du skal kople leidningar og sensorar. Han kan forklare for deg korleis programkoden er bygd opp, og kva kvar enkelt programlinje betyr.

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

"Beskriv korleis eg skal kople opp komponentane og Arduinoen. Eg vil òg at du gir meg ei god forklaring på kvar enkelt programlinje slik at det blir lett å forstå programmet."

Bruksområde og utvidingar

Du kan òg spørje prateroboten om kva eit slikt prosjekt kan brukast til, og korleis det kan utvidast ved å nytte fleire sensorar og system.

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

"Gi meg forslag til kva dette prosjektet kan brukast til i det verkelege livet, og korleis prosjektet kan utvidast med fleire komponentar."

Instruks til prateroboten

Når du snakkar med prateroboten, kan du stille mange delspørsmål for å komme fram til rett svar til slutt. Alternativt kan du samle alle spørsmåla og lage éin lang instruks, men då får du òg eit langt svar og mykje informasjon på ein gong.

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

Komplett instruks og spørsmål

"Eg vil at du skal vere den digitale rettleiaren min og hjelpe meg med oppkopling og programmering av ein Arduino Uno R3.

Du skal bruke faguttrykk og elles eit språk og forklaringar som er tilpassa elevar i vidaregåande skule. Du skal vere engasjerande og motiverande.

Først skal du forklare korleis systemet eg spør om, verkar.

Så vil eg ha ei oversikt over komponentane eg har bruk for når eg bygger dette systemet. Gi meg både namn og bruksmåtar.

Eg treng òg forslag til korleis systemet skal koplast saman. Gi meg instruksjonar om kva pinnar som skal brukast på komponentane og Arduinoen, og om det er behov for resistorar i kretsen.

Du skal så lage ein programkode som kan brukast på systemet. Først forklarer du godt kvar enkelt del av programmet. Så skriv du ein komplett programkode.

Eg ønsker at du lagar ei liste over eventuelle vanskelege fagomgrep og forklarer desse i eit lett språk.

Til slutt skal du lage eit samandrag av dei viktigaste punkta i svaret ditt.

Dette er programmeringsoppgåva du skal løyse: Lag ein programkode som kan brukast på systemet. Først forklarer du godt kvar enkelt del av programmet. Så skriv du ein komplett programkode.

Du skal lage ein programkode for Arduino Uno som skal måle avstanden fram til ein gjenstand ved hjelp av ein ultralydsensor. Avstandane skal i tre nivå etter kor lange dei er, og nivåa skal visast ved hjelp av tre lysdiodar i fargane grønt, gult og raudt. Grønt skal vise lang avstand, gult skal vise middels lang avstand og raudt skal vise kort avstand. Eg vil òg at ein buzzer skal gi eit lydsignal når avstanden er så kort at raud lysdiode lyser. Det skal vere mogleg å justere sensibiliteten for ultralydsensoren med eit potensiometer. Verdiane skal oppdatere seg ti gonger per sekund.

Beskriv korleis eg skal kople opp komponentane og Arduinoen. Gi meg òg ei god forklaring på kvar enkelt programlinje slik at det blir lett å forstå programmet.

Eg ønsker forslag til kva dette prosjektet kan brukast til i det verkelege livet, og korleis prosjektet kan utvidast med fleire komponentar."

Filer

I filene under finn du teikningar for å skrive ut sidevegger og for å montere sensorane og displayet i denne oppgåva.

Du kan òg laste ned eit forslag til koplingsskjema.

Løysingsforslag for programkode

Programkode

// Definer pinnar

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;

// Variablar for målingar

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 frå 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 sensibilitetsverdi frå potensiometer

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

// Bestem kva 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 gonger per sekund

}

Relatert innhald

NDLA-boksen

NDLA-boksen er spesialdesigna for Arduino-programmering. Her får du høve til å lage din eigen boks til bruk i programmeringsøvingar.


Skrive av Roger Rosmo.
Sist oppdatert 21.01.2025