Tilbake
3.6
Mikrokontrollere og Arduino

3.6 Mikrokontrollere og Arduino

Introduksjon til Arduino-plattformen, maskinvare og utviklingsmiljø.

60 min
8 oppgaver
ArduinoMikrokontrollereArduino IDEDigitale pinnerAnaloge pinner
Du leser den lesevennlige versjonen
Din fremgang i kapitlet
0 / 8 oppgaver

En datamaskin på størrelse med en frimerke

Inni vaskemaskinen din, i dronen som svever over hodet på deg, og i tusenvis av andre hverdagsdingser sitter det en bitteliten datamaskin på én eneste brikke. Den kalles en mikrokontroller, og den styrer alt -- når trommelen skal snurre, hvor fort motorene skal gå, hva displayet skal vise.

I dette kapittelet skal du lære å programmere en av de mest populære mikrokontrollerne for læring: Arduino. Det fine med Arduino er at den gjør det enkelt å koble sammen sensorer, som måler temperatur, lys eller avstand, og aktuatorer, som LED-er, motorer og releer. Vi skal starte med selve plattformen og hva pinnene betyr, lære oss grunnstrukturen i et Arduino-program, og se hvordan du leser fra omverdenen og styrer ting tilbake. Når du er ferdig, kan du få en krets til å reagere på verden rundt seg -- og det er der elektronikken virkelig blir morsom.

Plattformen og pinnene

La oss bli kjent med maskinvaren først. Arduino er en plattform med åpen kildekode som omfatter både hardware og software. Den mest brukte modellen er Arduino Uno, bygget rundt mikrokontrolleren ATmega328P. Den har 14 digitale I/O-pinner -- der seks av dem også kan gjøre PWM -- pluss 6 analoge innganger, 32 KB flash-minne og en klokke på 16 MHz. Du programmerer den over USB.

Hva betyr egentlig «14 digitale pinner hvorav 6 kan gjøre PWM»? De digitale pinnene kan settes til å enten lese (INPUT) eller skrive (OUTPUT), og digital betyr to tilstander: HIGH (5 V) eller LOW (0 V). De seks PWM-pinnene -- merket med en tilde, nemlig 3, 5, 6, 9, 10 og 11 -- kan i tillegg simulere analoge verdier ved å slå seg av og på svært raskt, med 256 nivåer fra 0 til 255. I praksis betyr det at du kan koble til 14 ting som bare trenger av eller på, men bare seks av dem kan ha variabel styrke, som dimming av en LED.

Trenger du flere koblinger, finnes det større modeller. Arduino Nano er mindre og passer godt på et koblingsbrett, mens Arduino Mega har hele 54 digitale pinner og 256 KB minne -- valget hvis prosjektet trenger mange utganger. Alt programmeres i Arduino IDE, et gratis programmeringsmiljø med editor, eksempelkode, en seriemonitor for feilsøking og bibliotekbehandling, lastet ned fra arduino.cc.

📝Oppgave Quiz 1

Programmet: setup og loop

Nå til selve koden. Arduino programmeres i C/C++, og hvert program -- kalt en skisse -- bygger på to faste funksjoner. setup() kjører bare én gang, helt i starten: her initialiserer du pinnene med pinMode(), starter seriell kommunikasjon og setter startverdier. loop() kjører deretter i det uendelige: dette er hovedprogrammet, som leser sensorer, tar beslutninger og styrer aktuatorer, og som starter på nytt fra toppen hver gang det er ferdig.

Noen funksjoner går igjen overalt. pinMode(pin, OUTPUT) setter modus, digitalWrite(pin, HIGH) skriver en digital verdi, digitalRead(pin) leser en, analogRead(pin) leser en analog verdi mellom 0 og 1023, analogWrite(pin, 0-255) gir en PWM-utgang, og delay(ms) venter et antall millisekunder.

Det klassiske «hei verden»-programmet er en blinkende LED. Vi setter pinMode(ledPin, OUTPUT) i setup(), og i loop() skriver vi digitalWrite(ledPin, HIGH), venter med delay(1000), skriver digitalWrite(ledPin, LOW), venter ett sekund til, og gjentar. Resultatet er en LED som blinker med ett sekunds intervall, i det uendelige.

Men den virkelige kraften ligger i det analoge. analogRead() returnerer 0 ved 0 V og 1023 ved 5 V, så halve spenningen, 2,5 V, gir omtrent 512. analogWrite() derimot tar en PWM-verdi fra 0 til 255, der 0 er alltid av, 255 er alltid på, og 128 gir 50 prosent på-tid -- altså 2,5 V i gjennomsnitt. Vil du for eksempel la et potmeter styre lysstyrken til en LED, leser du potmeteret med analogRead() på A0, deler verdien på 4 for å gå fra 0-1023 til 0-255, og sender resultatet til LED-en med analogWrite(). Vrir du på potmeteret, dimmer LED-en jevnt.

📝Oppgave Quiz 2

Å sanse verden og handle på den

Nå kommer det som gjør Arduino levende: sensorene som lar den sanse, og aktuatorene som lar den handle. På sensorsiden finnes mye å velge i. En temperatursensor som DHT11 eller DHT22 måler både temperatur og fuktighet. En ultrasonisk avstandssensor som HC-SR04 sender ut ultralyd og måler tiden til ekkoet kommer tilbake, og regner ut avstanden som avstand=(tid×lydhastighet)/2\text{avstand} = (\text{tid} \times \text{lydhastighet}) / 2 -- vi deler på 2 fordi lyden går fram og tilbake. En lysavhengig motstand (LDR) endrer motstand med lysnivået, og en knapp gir en enkel digital inngang.

Knapper fortjener et lite triks. En knapp trenger en pull-up- eller pull-down-motstand for å gi et stabilt signal, men Arduino har en innebygd løsning: pinMode(pin, INPUT_PULLUP). Den holder pinnen HIGH når knappen ikke er trykket, og når du trykker, kobles pinnen til jord og blir LOW. Derfor sjekker du if (buttonState == LOW) for å se om knappen er trykket -- og slipper en ekstra motstand på koblingsbrettet.

På utgangssiden har vi aktuatorene. LED-en er den enkleste, styrt av digitalWrite() for av/på eller analogWrite() for dimming. En servomotor posisjonerer seg presist mellom 0 og 180 grader; med Servo-biblioteket bruker du myservo.attach(pin) og myservo.write(vinkel). En DC-motor krever derimot en egen motordriver som L298N -- og her er det viktig å forstå hvorfor: en Arduino-pin leverer bare rundt 40 mA ved 5 V, mens en motor trenger 1-5 A og ofte høyere spenning. Driveren fungerer som en forsterker og beskytter samtidig Arduino mot tilbakeslag fra motoren. Til slutt lar et relé et lite 5 V-signal fra Arduino slå av og på et helt 230 V-apparat -- broen mellom den lille elektronikken og den store verden.

📝Oppgave Quiz 3

Oppsummering

Vi har gjort Arduino levende. Plattformen er en mikrokontroller med både hardware og software, der Arduino Uno har 14 digitale og 6 analoge pinner, og Mega har enda flere. Vi lærte at digitale pinner gir av/på, mens PWM-pinner kan simulere analoge verdier med 256 nivåer.

I programmet kjører setup() én gang og loop() i det uendelige, og vi bruker digitalWrite(), digitalRead(), analogRead() (0-1023) og analogWrite() (0-255) til å snakke med pinnene. Til slutt koblet vi på verden: sensorer som temperatursensorer, avstandssensorer, LDR-er og knapper -- gjerne med INPUT_PULLUP -- lar Arduino sanse, mens aktuatorer som LED, servo, DC-motor (via driver) og relé lar den handle. Med disse byggeklossene kan du lage alt fra en blinkende LED til avanserte roboter og IoT-løsninger.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.