Tips til anvendelse af ben på Arduino UNO
Et Arduino UNO R3 board har 32 connectorer, hvoraf de 22 kan bruges til at kommunikere til omverdenen med. På figur 1 ses Arduino UNO boardet hvor connectorerne er opdelt i funktion. Som det ses, har nogle af portbenene flere funktioner. Dette uddybes i de kommende afsnit.
De fleste ben kan anvendes til flere formål, men som det beskrives i de følgende afsnit, skal man være opmærksom på hvilke ben man anvender til hvad, for ikke at “ødelægge” mulighederne for at anvende specifikke funktionaliteter.
Figur 1 Arduino Uno boardet med forklaringer til connectorerne.
I nedenstående tabel ses tekniske specifikationer for Arduino UNO R3 boardet.
Arduino UNO[1] | |
Antal digitale porte | 14 |
Antal analoge porte | 6 |
Max. analog input spænding | 5 V |
Max. strømtræk pr. port | 40 mA |
Mikroprocessor | ATmega328 |
Hukommelse: Flash SRAM EEPROM |
32 kB 2 kB 1 kB |
Fysisk størrelse: Printplade Total |
69 x 54 mm 75 x 54 mm |
Digitale input
Et digitalt input kan registrere digital ”høj” (+5V) og digital ”lav” (0V). Der er 11 porte på Arduino UNO R3, der kan bruges som digitalt input. Det er portbenene: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 og 12.
Bemærk at portben 0 og 1 normalt ikke kan anvendes, da de allerede er forbundet med RX og TX (UART kommunikation) der har forbindelse til USB delen på boardet. Man kan dog i særlige tilfælde anvende de to ben, men man skal være opmærksom på at man kan komme til at ødelægge muligheden for kommunikation med seriel monitor, og man kan gøre det mere besværligt at uploade nye programmer til Arduinoen.
Bemærk at portben 13 er forbundet til en LED gennem en modstand. Det betyder, at man ikke kan bruge benet som et input, da det er i brug, med mindre man er opmærksom på, at denne LED sidder parallelt over udgangen i nogle versioner af Arduino
Portbenene A0 til A5 kan også anvendes til digitale input, men man vil normalt reservere dem til analoge input, da det er deres specielle egenskab. A4 og A5 har også en vigtig rolle til I2C kommunikation, så dem er det også en fordel at reservere.
Opsætning og brug
Under void setup()
sættes portben 10 til digital input ved at skrive:
pinMode(10, INPUT);
Under void loop()
læses der fra portben 10, og resultatet gemmes i variablen resultat, ved at skrive:
resultat = digitalRead(10);
Hvis man ønsker at forbinde en trykkontakt til Arduinoboardet, anvendes en ”pull-down” modstand på 10 kΩ. Formålet med modstanden er, at få defineret spændingen på porten når der ikke trykkes på knappen. Figur 2 viser hvordan kontakten og modstanden forbindes til Arduinoboardet (her er benyttet port 10). Når man trykker på trykkontakten, er der 5V på porten. Når kontakten ikke trykkes ned, er der 0V på porten.
Figur 2 Diagram hvor man kan se trykknap og modstand forbundet til portben 10 på Arduino UNO boardet.
Opkoblingen af trykknappen kan ses i figur 3 hvis man bygger det op med et Bread board.
Figur 3 Trykknappen tilsluttet portben 10, som det kobles op på fumlebræt.
Digitale output
Et digitalt output kan fra mikroprocessoren sættes enten digital ”høj” (+5V) eller digital ”lav” (0V). Der er 18 porte på Arduino UNO, der kan bruges som digitalt output. Det er portbenene: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 og 13, samt A0, A1, A2, A3, A4 og A5.
Bemærk at portben 0 og 1 normalt ikke kan anvendes, da de allerede er forbundet med RX og TX (UART kommunikation) der har forbindelse til USB delen på boardet.
Portbenene A0, A1, A2, A3, A4 og A5 regnes som analoge, men det er kun når de anvendes som input. De kan sagtens bruges som digitale outputs. Det vil dog igen være en fordel at reservere A4 og A5 til I2C kommunikation.
Opsætning og brug
Under void setup()
sættes portben 10 til digital output ved at skrive:
pinMode(10, OUTPUT);
Under void loop()
sættes portben 10 digital ”høj”, ved at skrive:
digitalWrite(10, HIGH);
Analoge input
Et analogt input er en spænding der ligger mellem 0V og +5V. Spændingen oversættes inde i mikroprocessoren til en talværdi mellem 0 og 1023, da spændingen konverteres med en 10-bit analog-til-digital converter.
Følgende portben på Arduino Uno kan anvendes som analogt input: A0, A1, A2, A3, A4 og A5. Her skal igen bemærkes at A4 og A5 også er lavet til at kommunikere med I2C moduler, og det kan være en fordel at reservere denne funktion til det, med mindre man har brug for alle 6 analoge input.
Opsætning og brug
Under void setup()
sættes portben A0 til analog input ved at skrive:
pinMode(A0, INPUT);
Under void loop()
læses der fra portben A0, og resultatet gemmes i variablen resultat, ved at skrive:
resultat = analogRead(A0);
Pulse Width Modulation (PWM) output
På en Arduino UNO er der seks portben, der kan anvendes med pulse width modulation (PWM). Et PWM signal er digital, dvs. enten 0V eller +5V, og skifter mellem disse to niveauer med en meget høj frekvens. Hvis signalet skifter mellem 0V og +5V med samme tidsrum 0V som +5V, så vil middelspændingen være 2,5 V. Man kalder dette forhold mellem tidsrummet som spændingen er 0V og +5V, for duty cycle, så hvis forholdet er 50/50, er duty cyclen 50 %. Dette ses på figur 4.
Figur 4 PWM med periodetid på 2 msec og 50 % duty cycle.
Man kan vælge duty cyclen som en værdi mellem 0 og 255, hvor 0 svarer til 0 %, og giver 0V på outputtet Værdien 255 svarer til 100 %, og giver 5 V på outputtet. En værdi på 128, svarer til 50 %, og giver en spænding på 2,5V på outputtet.
Alle portben mærket med ~ kan sættes op til at køre PWM. Det vil sige portbenene 3, 5, 6, 9, 10 og 11.
Opsætning og brug
Under void setup()
sættes portben 3 til output ved at skrive:
pinMode(3, OUTPUT);
Under void loop()
sættes portben 3 til en værdi mellem 0 og 255: Her sættes den til 128, hvilket giver en gennemsnitlig spænding på 2,5V på portben 3, ved at den skifter mellem 0V og 5V, og er lige lang tid på hvert niveau.
analogWrite(3, 128);
I2C / TWI seriel databus
Den serielle databus I2C eller TWI (kaldes begge dele), gør brug af ét portben til data (SDA) og et portben til clock (SCL).
SDA forbindes til portben A4
SCL forbindes til portben A5
Det vil sige, at når man anvender I2C/TWI bussen, så kan A4 og A5 ikke anvendes som analog input eller digital output.
Opsætning og brug
Når man skal bruge I2C/TWI bussen til at kommunikere med et hardwaremodul, så kan man oftest finde et driverbibliotek til modulet. I dette driverbibliotek er opsætningen af I2C/TWI bussen lavet.
Det eneste man skal huske på, er, at man ikke anvender portben A4 og A5 til andre formål, hvis man anvender I2C/TWI bussen.
SPI databus
Den serielle databus der hedder SPI, anvender en clock (SCK), samt data master input slave output (MISO), data master output slave input (MOSI) og chip select (SS). Forbindelserne på Arduino Uno boardet er som følger:
Portben 10 = SS = Chip select
Portben 11 = MOSI = Master Output Slave Input
Portben 12 = MISO = Master Input Slave Output
Portben 13 = SCK = Clock
Når SPI er i anvendelse, kan disse fire portben ikke anvendes som digital input/output.
Portbenene 11, 12 og 13 kan man ikke ændre på i opsætningen af SPI databus, men Chip select kan man vælge til et andet ben, i nogle anvendelser af SPI, for eksempel er portben 4 standard til SD-kortet i nogle anvendelser.
Opsætning og brug
Når man skal bruge SPI bussen til at kommunikere med et hardwaremodul, så kan man oftest finde et driverbibliotek til modulet. I dette driverbibliotek er opsætningen af SPI bussen lavet.
Det eneste man skal huske på, er, at man ikke anvender portben 10, 11, 12 og 13 til andre formål, hvis man anvender SPI bussen.
UART seriel databus
UART porten er en seriel databus. Der er både en TX og en RX port, hvor TX transmitter (sender) data fra Arduinoboardet, mens RX receiver (modtager) data til Arduinobordet.
RX og TX benene er forbundet til USB connectoren på Arduinoboardet. Så når man sender data frem og tilbage mellem en PC og Arduinoboardet, så vil data også være at måle på RX og TX benene. Man bør derfor ikke anvende RX og TX benene (digital port 0 og 1) til andet end kommunikation.
Opsætning og brug
Man kan anvende den indbyggede funktion Serial()
til at sende og modtage data via UARTen på Arduinoen. Først skal kommunikationen sættes op. Dette gøres under void setup()
, hvor kommunikationshastigheden sættes. Standard bruges 9600 baud, men højere hastigheder kan også vælges. Under void setup()
skrives:
Serial.begin(9600);
Under void loop()
skrives følgende hver gang man ønsker at skrive data ud til UARTens TX ben:
Serial.println(data);
… hvor data er det data man ønsker at sende. Det kan være en fast tekst som Tilstand 1, og så kan man skrive:
Serial.println("Tilstand 1");
Det kan også være værdien af en variabel. Hvis man har en variabel der hedder count
, så skriver man:
Serial.println(count);
Hvis man ikke ønsker at få et linjeskift sendt med hver gang, bruges print
i stedet for println
.