I/O-porter
Et Arduino-brett har forskjellige typer I/O-porter som lar dem kommunisere med eksterne enheter og komponenter. 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 PWM-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 variable 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.
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 modus (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 returnere 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 protokoller.
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 inkluderer relevante biblioteker i programmene dine, kan du veldig enkelt dra nytte av ferdiglaga funksjoner og metoder for å handtere ulike typer I/O-enheter.
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 motstander 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.
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!