Hopp til innhald
Fagartikkel

I/O-portar

For å kommunisere med omverda har Arduinoen fleire ulike portar. Dei blir kalla for I/O-portar. Ei anna vanleg nemning for desse portane er pinnar.

I/O-portane på ein Arduino

Eit Arduino-brett har ulike typar -portar som lar dei kommunisere med eksterne einingar og . Portane har ulike funksjonar og kan programmerast til å sende eller motta signal. Å motta eit signal kallar vi på programmeringsfagspråket å lese, mens det å sende eit signal blir kalla å skrive.

Dei vanlegaste typane I/O-portar på ein Arduino er digitale I/O-portar, analoge I/O-portar og -portar.

Digitale I/O-portar

Digitale portar kan motta og sende signal. Når ein port mottek signal, seier vi at han er i inngangsmodus. Motsett seier vi at porten er i utgangsmodus når han er programmert til å sende signal.

Ein port i inngangsmodus kan lese digitale signal frå eksterne einingar, til dømes brytarar eller sensorar. Ein port i utgangsmodus kan sende ut digitale signal til eksterne einingar som skal skruast av eller på, til dømes diodar eller relé.

Digitale signal kan berre vere eitt av to, nemleg 0 (Av, LOW) eller 1, (På, HIGH). Signala kan òg vere kombinasjonar av fleire nullar og einarar. Digitale inngangar og utgangar les eller skriv berre digitale signal.

Analoge I/O-portar

Arduinoar har også analoge I/O-portar som kan sende eller motta analoge signal innanfor eit gitt område. Desse portane gjer det mogleg å sende eller motta verdiar frå sensorar eller andre analoge einingar.

Analoge portar kan til dømes motta variable verdiar frå volumbrytarar, dimmarar og mikrofonar. Motsett kan vi bruke analoge portar som utgangar, til dømes når vi koplar ein analog port til ein høgtalar for å justere kor høgt han speler.

Ein analog inngang kan også gi ein digital utgang (av/på). Eit døme på dette er automatiske utelys. Ein analog lyssensor registrerer kor lyst eller mørkt det er, og utelyset kjem på når ein analog verdi frå lyssensoren når ein bestemd grenseverdi på kvelden.

PWM-portar

Nokre av dei digitale I/O-portane på Arduinoar har også PWM-funksjonalitet (Pulse Width Modulation, på norsk pulsbreiddemodulasjon). Pulsbreidde kan enkelt forklarast med kor lenge ein straumpuls varer, eller kor mange gonger straumen slår seg av og på, i løpet av eit sekund.

PWM gjer det mogleg å generere pulsforma signal med ulike breidder. Denne funksjonen blir ofte brukt til å kontrollere lysstyrken til LED-lys eller hastigheita til motorar.

Programmering av I/O-portane til Arduinoen

Bestem portmodus

Før du bruker ein I/O-port, må du oppgi om han skal vere i inngangsmodus (INPUT) eller utgangsmodus (OUTPUT).

Det gjer du ved å bruke pinMode-funksjonen i Arduino-programmet ditt, der pin er nummeret på I/O-porten og Mode er ønskt (inn eller ut).

Døme

  • pinMode(3, INPUT)

  • pinMode(4, OUTPUT)

Her fortel vi Arduinoen at pinne 3 skal nyttast til å motta (lese) eit signal, og at pinne 4 skal nyttast til å sende (skrive) eit signal.

Lesing av digitale inngangsverdiar

Viss ein I/O-port er sett i inngangsmodus, kan Arduinoen lese den digitale inngangsverdien ved å kalle digitalRead(pin)-funksjonen, der pin er nummeret på I/O-porten.

Denne funksjonen vil returnere anten HIGH eller LOW, avhengig av den digitale tilstanden til porten (på eller av). Verdiar som blir lesne, må lagrast i ein variabel du har definert i starten av programmet.

Døme

  • trykknapp1 = digitalRead(1)

I dette dømet les Arduinoen verdien som kjem inn på pinne 1. I og med at dette er ei digital avlesing, vil resultatet vere 0 eller 1, altså HIGH eller LOW.

Verdien som blir lesen, blir lagra i variabelen vi her har valt å kalle trykknapp1.

Skriving av digitale utgangsverdiar

Viss ein I/O-port er sett i utgangsmodus, kan du skrive ein digital utgangsverdi ved å kalle digitalWrite(pin, value)-funksjonen, der pin er nummeret på I/O-porten og value er den ønskte digitale verdien (HIGH eller LOW).

Døme

  • digitalWrite(1, LOW)

  • digitalWrite(2, HIGH)

Her vil Arduinoen på pinne 1 ikkje sende ut noko signal fordi han er sett til LOW, og det betyr 0 (AV).

På pinne 2 derimot vil Arduinoen sende ut eit signal fordi pinnen er sett til HIGH, og det betyr 1 (PÅ).

Lesing av analoge inngangsverdiar

For å lese analoge inngangsverdiar frå ein analog I/O-port bruker du analogRead(pin)-funksjonen, der pin er nummeret på den analoge I/O-porten.

Denne funksjonen vil returnere ein verdi mellom 0 og 1023, avhengig av spenningsnivået som blir lese. Verdien blir bestemd av kor stor spenning sensoren sender ut.

Arduinoen opererer med 5 volt spenning. Sidan Arduinoen har kapasitet til å handtere 1024 moglege verdiar, vil forskjellen i spenning for kvar verdi vere 0,0049 volt.

Ein standard Arduino Uno bruker cirka 0,0001 sekund på å lese og lagre eit analogt signal, og verdien kan derfor oppdaterast 10 000 gonger per sekund. Men dette vil gi ekstremt mykje data, og det kan derfor vere smart å programmere kor ofte signalet skal lesast.

Døme

  • temperatur = analogRead(6);

I dette dømet er Arduinoen tilkopla ein temperaturfølar og les verdien frå denne på pinne 6.

Verdien blir lagra i variabelen temperatur.

Viss då temperatursensoren sender ut ei spenning på 0,49 volt, vil verdien Arduinoen les, vere 100.

Temperatur kan til dømes programmerast til å bli lesen ein gong per sekund eller ein gong per minutt. Det er ikkje nødvendig med 10 000 avlesingar per sekund.

Skriving av analoge verdiar

For å skrive ein verdi på ein analog I/O-port, bruker du analogWrite(pin)-funksjonen, der pin er nummeret på den analoge I/O-porten.

Denne funksjonen vil ein verdi mellom 0 og 1023, avhengig av spenningsnivået som skal skrivast. Verdien som skal skrivast, må vere lagra i ein variabel.

Arduinoen har som nemnt kapasitet til å handtere 1024 moglege verdiar og opererer med 5 volt spenning. Derfor vil forskjellen i spenning for kvar verdi også her vere 0,0049 volt.

Døme

  • temperatur = analogWrite(6, lydstyrke);

I dette dømet vil Arduinoen skrive den verdien som er lagra på variabelen lydstyrke gjennom pinne 6.

Full lydstyrke vil ha verdien 1023, mens "ingen lyd" vil ha verdien 0.

Funksjonar og bibliotek

Det finst også fleire avanserte funksjonar og bibliotek som utvidar funksjonaliteten til Arduino I/O-portar og gjer det enklare å jobbe med spesifikke einingar og .

Mange produsentar av tilleggsutstyr har laga eigne filer der programkoden for kvar enkelt komponent er delvis ferdigskriven. Desse filene kan hentast inn i programmet.

Viss du relevante bibliotek i programma dine, kan du veldig enkelt dra nytte av ferdiglaga funksjonar og metodar for å handtere ulike typar I/O-einingar.

Kopling av I/O-portane til Arduinoen

For å kople komponentar og einingar til Arduino I/O-portar bruker du vanlegvis tynne leidningar med spesialpluggar i endane (jumper wires), anten direkte på komponentane eller via eit koplingsbrett (breadboard).

Her er nokre viktige punkt å hugse på når du jobbar med kopling av komponentar:

Pass på å kople til rett I/O-port

Kontroller at du koplar komponenten til rett I/O-port på Arduinoen. Portane er vanlegvis merkte med nummer, og du kan bruke Arduino-dokumentasjonen for å identifisere portane.

Det er òg viktig at du i programkoden har definert om porten skal brukast til skriving eller lesing.

Bruk motstandar

Du bør bruke for å verne komponentane og sikre rett straum- og spenningsnivå. Motstandar bør koplast i serie med LED-lys, knappar eller andre komponentar for å avgrense straumen. Ved å bruke motstandar slepp du kortslutningar og unngår at sjølve Arduinoen eller nokre av komponentane tek skade.

Jordingspunkt

For å halde oppe eit felles jordingspunkt koplar du vanlegvis GND (jord) på Arduino til GND-pinnane på komponentane du koplar til. Dette sikrar at alle einingane har same jording og dermed same motstandsverdi.

Bruk rette kablar og adapterar

Komponentane og einingane du jobbar med, må kanskje koplast til Arduinoen med spesifikke kablar eller adapterar. Sørg for å velje kablar og kontaktar som passar til prosjektet ditt.

Følg alltid sikkerheitsprosedyrane og dobbelsjekk koplingane dine før du bruker straum på Arduinoen og dei tilkopla einingane.

Til slutt

Arduino I/O-portane gir deg høve til å kommunisere med eksterne einingar og komponentar i prosjekta dine.

Når du har forstått korleis du programmerer og koplar til desse portane, kan du utnytte det fulle potensialet til Arduino-plattforma og skape spennande interaktive prosjekt. Utforsk Arduino-dokumentasjonen, og prøv deg fram med ulike komponentar for å lære meir om Arduino I/O-programmering og kopling!