Hopp til innhold
Fagartikkel

I/O-porter

For å kommunisere med omverdenen har Arduinoen flere ulike porter. De kalles for I/O-porter. En annen vanlig betegnelse for disse portene er pinner.

I/O-portene på en Arduino

Et Arduino-brett har forskjellige typer -porter som lar dem kommunisere med eksterne enheter og . Portene har ulike funksjoner og kan programmeres til å sende eller motta signaler. Å motta et signal kalles på programmeringsfagspråket å lese, mens det å sende et signal kalles å skrive.

De vanligste typene I/O-porter på en Arduino er digitale I/O-porter, analoge I/O-porter og -porter.

Digitale I/O-porter

Digitale porter kan motta og sende signaler. Når en port mottar signaler, sier vi at den er i inngangsmodus. Motsatt sier vi at porten er i utgangsmodus når den er programmert til å sende signaler.

En port i inngangsmodus kan lese digitale signaler fra eksterne enheter, for eksempel brytere eller sensorer. En port i utgangsmodus kan sende ut digitale signaler til eksterne enheter som skal skrus av eller på, for eksempel dioder eller reléer.

Digitale signaler kan kun være ett av to, nemlig 0 (Av, LOW) eller 1, (På, HIGH). Signalene kan også være kombinasjoner av flere nuller og enere. Digitale innganger og utganger leser eller skriver bare digitale signaler.

Analoge I/O-porter

Arduinoer har også analoge I/O-porter som kan sende eller motta analoge signaler innenfor et gitt område. Disse portene gjør det mulig å sende eller motta verdier fra sensorer eller andre analoge enheter.

Analoge porter kan for eksempel motta variable verdier fra volumbrytere, dimmere og mikrofoner. Motsatt kan vi bruke analoge porter som utganger, for eksempel når vi kopler en analog port til en høyttaler for å justere hvor høyt den spiller.

En analog inngang kan også gi en digital utgang (av/på). Et eksempel på dette er automatiske utelys. En analog lyssensor registrerer hvor lyst eller mørkt det er, og utelyset kommer på når en analog verdi fra lyssensoren når en bestemt grenseverdi på kvelden.

PWM-porter

Noen av de digitale I/O-portene på Arduinoer har også PWM-funksjonalitet (Pulse Width Modulation, på norsk pulsbreddemodulasjon). Pulsbredde kan enkelt forklares med hvor lenge en strømpuls varer, eller hvor mange ganger strømmen slår seg av og på, i løpet av et sekund.

PWM gjør det mulig å generere pulsforma signaler med forskjellige bredder. Denne funksjonen brukes ofte til å kontrollere lysstyrken til LED-lys eller hastigheten til motorer.

Programmering av I/O-portene til Arduinoen

Angi portmodus

Før du bruker en I/O-port, må du angi om den skal være i inngangsmodus (INPUT) eller utgangsmodus (OUTPUT).

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

Eksempel

  • pinMode(3, INPUT)

  • pinMode(4, OUTPUT)

Her forteller vi Arduinoen at pinne 3 skal benyttes til å motta (lese) et signal, og at pinne 4 skal benyttes til å sende (skrive) et signal.

Lesing av digitale inngangsverdier

Hvis en I/O-port er satt 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 enten HIGH eller LOW, avhengig av den digitale tilstanden til porten (på eller av). Verdier som leses, må lagres i en variabel du har definert i starten av programmet.

Eksempel

  • trykknapp1 = digitalRead(1)

I dette eksempelet leser Arduinoen verdien som kommer inn på pinne 1. I og med at dette er ei digital avlesning, vil resultatet være 0 eller 1, altså HIGH eller LOW.

Verdien som leses, lagres i variabelen vi her har valgt å kalle trykknapp1.

Skriving av digitale utgangsverdier

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

Eksempel

  • digitalWrite(1, LOW)

  • digitalWrite(2, HIGH)

Her vil Arduinoen på pinne 1 ikke sende ut noe signal fordi den er satt til LOW, og det betyr 0 (AV).

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

Lesing av analoge inngangsverdier

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

Denne funksjonen vil returnere en verdi mellom 0 og 1023, avhengig av spenningsnivået som leses. Verdien bestemmes av hvor stor spenning sensoren sender ut.

Arduinoen opererer med 5 volt spenning. Siden Arduinoen har kapasitet til å handtere 1024 mulige verdier, vil forskjellen i spenning for hver verdi være 0,0049 volt.

En standard Arduino Uno bruker cirka 0,0001 sekund på å lese og lagre et analogt signal, og verdien kan derfor oppdateres 10 000 ganger per sekund. Men dette vil gi ekstremt mye data, og det kan derfor være smart å programmere hvor ofte signalet skal leses.

Eksempel

  • temperatur = analogRead(6);

I dette eksempelet er Arduinoen tilkopla en temperaturføler og leser verdien fra denne på pinne 6.

Verdien blir lagra i variabelen temperatur.

Hvis da temperatursensoren sender ut en spenning på 0,49 volt, vil verdien Arduinoen leser, være 100.

Temperatur kan for eksempel programmeres til å bli lest en gang per sekund eller en gang per minutt. Det er ikke nødvendig med 10 000 avlesninger pr sekund.

Skriving av analoge verdier

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

Denne funksjonen vil en verdi mellom 0 og 1023, avhengig av spenningsnivået som skal skrives. Verdien som skal skrives, må være lagra i en variabel.

Arduinoen har som nevnt kapasitet til å handtere 1024 mulige verdier, og den opererer med 5 volt spenning. Derfor vil forskjellen i spenning for hver verdi også her være 0,0049 volt.

Eksempel

  • temperatur = analogWrite(6, lydstyrke);

I dette eksempelet vil Arduinoen skrive den verdien som er lagret på variabelen lydstyrke gjennom pinne 6.

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

Funksjoner og bibliotek

Det finnes også flere avanserte funksjoner og biblioteker som utvider funksjonaliteten til Arduino I/O-porter og gjør det enklere å jobbe med spesifikke enheter og .

Mange produsenter av tilleggsutstyr har laga egne filer der programkoden for den enkelte komponenten er delvis ferdigskrevet. Disse filene kan hentes inn i programmet.

Hvis du relevante biblioteker i programmene dine, kan du veldig enkelt dra nytte av ferdiglaga funksjoner og metoder for å handtere ulike typer I/O-enheter.

Kopling av I/O-portene til Arduinoen

For å kople komponenter og enheter til Arduino I/O-porter bruker du vanligvis tynne ledninger med spesialplugger i endene (jumper wires), enten direkte på komponentene eller via et koplingsbrett (breadboard).

Her er noen viktige punkter å huske på når du jobber med kopling av komponenter:

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

Kontroller at du kopler komponenten til riktig I/O-port på Arduinoen. Portene er vanligvis merka med nummer, og du kan bruke Arduino-dokumentasjonen for å identifisere portene.

Det er også viktig at du i programkoden har definert om porten skal brukes til skriving eller lesing.

Bruk motstander

Du bør bruke for å beskytte komponentene og sikre riktig strøm- og spenningsnivå. Motstander bør koples i serie med LED-lys, knapper eller andre komponenter for å begrense strømmen. Ved å bruke motstander slipper du kortslutninger og unngår at selve Arduinoen eller noen komponenter tar skade.

Jordingspunkt

For å opprettholde et felles jordingspunkt kopler du vanligvis GND (jord) på Arduino til GND-pinnene på komponentene du kopler til. Dette sikrer at alle enhetene har samme jording og dermed samme motstandsverdi.

Bruk rette kabler og adaptere

Komponentene og enhetene du jobber med, må kanskje koples til Arduinoen med spesifikke kabler eller adaptere. Sørg for å velge kabler og kontakter som passer til prosjektet ditt.

Følg alltid sikkerhetsprosedyrene og dobbeltsjekk koplingene dine før du bruker strøm på Arduinoen og de tilkobla enhetene.

Til slutt

Arduino I/O-portene gir deg muligheten til å kommunisere med eksterne enheter og komponenter i prosjektene dine.

Når du har forstått hvordan du programmerer og kopler til disse portene, kan du utnytte det fulle potensialet til Arduino-plattformen og skape spennende interaktive prosjekter. Utforsk Arduino-dokumentasjonen, og prøv deg fram med ulike komponenter for å lære mer om Arduino I/O-programmering og kobling!