Opkobling af Hardware

Fra HTX-Arduino
Skift til: navigering, søgning
Video med forklaring til kapitlet

Når man kobler hardware på en Arduino, så er der forskellige ting det er smart at tage højde for, bl.a. i forhold til strømforsyning.

Forsyning af Arduinoen

Til hovedparten af den test man skal foretage, så er det tilstrækkeligt at anvende USB-porten til at forsyne Arduinoen med. Den vil normalt også kunne trække en del tilsluttede moduler, men på et tidspunkt vil det være nødvendigt at skulle forsyne med andre kilder, hvor der er en del muligheder[1], hvor man i første omgang vil kunne klare sig med en ekstern adapter, der evt. kan levere en højere spænding.

Med en ekstern adapter som vist i figur 1 vil Arduinoen også kunne fungere som en selvstændig enhed uden at skulle have en computer tilsluttet.

Eksempel på 9V adapter der kan forsyne en Arduino UNO R3
Figur 1. Eksempel på 9V adapter der kan forsyne en Arduino UNO R3.

Forbrug på +5V

Uanset hvilken type forsyning man anvender kan man kun trække en begrænset mængde strøm ud af +5V benet på Arduinoen - typisk er grænsen omkring 250-300 mA, hvor enten USB-porten ikke kan følge med, eller at 5V regulatoren på Arduino boardet bliver for varm.

Forbrug på +3,3V

Inde på Arduino boardet sidder der en 3,3V regulator som kan forsyne eksterne kredsløb der skal køre på 3,3V forsyningsspænding. Denne forsyning kan kun trække 50mA.

Kobling mellem eksterne moduler og Arduino UNO

Uanset hvilke moduler man kobler på Arduinoen, så vil man altid skulle anvende fælles GND-forbindelse. Dette skal etableres for at alle signaler har det samme spændingsniveau at gå ud fra. Enkelte undtagelser er gennemgået under afsnittet Signaler uden stelforbindelsee.

Så længe Arduinoen kan levere den fornødne strøm til modulerne, og modulerne kan forsynes med +5V eller +3,3V, så trækkes forsyningen fra Arduinoen. Dette er illustreret i diagrammet på figur 2, hvor to moduler er forsynet med +5V fra Arduinoen og et modul er forsynet med 3,3V fra Arduinoen.


Arduinoen forsyner 2 moduler med 5V og et med 3,3V
Figur 2. Arduinoen forsyner 2 moduler med 5V og et med 3,3V.

Hvis de tilkoblede moduler trækker mere strøm end Arduinoen kan levere (fx servomotorer kan trække meget strøm), så skal de have en separat +5V forsyning (eller hvad de er designet til) fra en ekstern strømforsyning. I dette tilfælde skal Arduino og den eksterne GND stadig kobles sammen, så signalerne har samme reference, men de to +5V forsyninger skal IKKE kobles sammen. Dette er vist i figur 3.


Opstilling hvor 3 servoer får strøm fra en ekstern forsyning
Figur 3. Opstilling hvor 3 servoer får strøm fra en ekstern forsyning.

Signaler til 3,3V moduler

Når man anvender moduler der arbejder på 3,3V forsyning, så kan det være ødelæggende for modulerne, hvis signalerne kommer med +5V som høj værdi. Nogle moduler er designet til det, mens andre kan det være en fordel at beskytte.

De signaler der kommer fra 3,3V modulerne er normalt ikke et problem. De 3,3V vil blive tolket som høj, og 0V er selvfølgelig lavt.

De signaler der kommer fra Arduinoen med 5V signal vil kunne trække modulernes forsyning for højt. Dette skyldes at der sidder beskyttelsesdioder på indgangen, som er koblet op til 3,3V. Det man kan gøre er at sætte en modstand på 10kΩ ind i serie med signalet. På den måde vil den overskydende spænding falde over modstanden, uden at der løber en nævneværdig strøm.


Arduino tilkoblet BMP085 Barometer, der anvender 3,3V
Figur 4. Arduino tilkoblet BMP085 Barometer, der anvender 3,3V.

Et eksempel på en opkobling af et modul der anvender 3,3V forsyning er vist i figur 4 der er et BMP085 digitalt barometer. Barometeret anvender I2C kommunikation[2], hvor de to ben på modulet er tilpasset så man kan anvende 5V signaler til kommunikationen. Reset-signalet XCLR der kommer fra Arduinoens ben 4 er her beskyttet med en 10kΩ modstand, så der ikke løber for stor strøm, når man sætter ben 4 høj.

Signaler til større spændinger

Når man kommer til at arbejde med forskellige elektriske komponenter, så vil man ret hurtigt støde på komponenter der anvender andre forsyningsspændinger for at fungerer. Som omtalt ovenfor kan mindre forsyningsspændinger ret let håndteres.

Skal man derimod udnytte komponenter der skal have højere forsyningsspænding skal der laves et tilpasnings-kredsløb.

Opkobling af en mindre 12V motor til Arduinoen
Figur 5. Opkobling af en mindre 12V motor til Arduinoen.

Et eksempel på sådan en tilpasning er vist i figur 5 hvor det er en 12V motor, der trækker under 200mA. Her anvendes en lille transistor fx BC547 til at tilpasse signalet til de 12V (kommer fra en ekstern 12V adapter), og der tilføjes en kraft-diode fx 1N4004 for at beskytte transistoren mod motorens induktive virkning. Ud over dette er der lavet en spændingsdeler på det resulterende signal, så man kan måle spændingen på motoren.


Diagram over opstillingen med en lille motor
Figur 6. Diagram over opstillingen med en lille motor.

Diagrammet over opstillingen i figur 5 er vist som diagram i figur 6. Modstanden R1 skal dimensioneres efter hvor meget strøm motoren kan trække og transistoren Q1 skal selvfølgelig kunne håndtere denne strøm.

Som bemærket er der lavet så man kan måle spændingen over motoren. Målingen kræver en spændingsdeler (R2 og R3) for at man kan måle op til de 12V der kan ligge over motoren, og samtidigt beskytter R2 Arduinoen mod spændinger over 5V på indgangen A0. Spændingsdeleren leverer 31,25 % af den spænding der ligger på motoren ind på A0. Når A0 måler i området 0-1023 med analogRead(A0), så kan spændingen på motoren udtrykkes som:
Formel for spændingen over motoren

Spændingsmålingen kan udnyttes til at måle om transistoren tænder korrekt, men man kan også udnytte målingen til at estimere omdrejningshastigheden på motoren. Princippet er at hvis man slukker kortvarigt (1-10ms) for motoren, så vil motoren på grund af den mekaniske energi stadig løbe rundt med nogenlunde samme hastighed, og her vil den fungere som generator, hvor man så kan udnytte at generatorspændingen er proportionalt med omdrejningstallet. Man skal være opmærksom på at motoren også har en induktiv komponent, som først skal af med strømmen gennem dioden D1 - her vil spændingen ligge på over 12,7 - 13V kortvarigt, men herefter kan man udnytte at måle spændingen med analogRead(A0).

Hvis man ønsker det, så kan man faktisk laver en regulering, ved at man styrer outputtet på pin 3 med analogWrite(), så man styrer omdrejningshastigheden med PWM[3], og så etablerer en software reguleringen ud fra motoren spænding i friløb, så man på denne måde kan holde et fast omdrejningstal, uanset belastningen.

Styring af 230V AC

Hvis man ønsker at arbejde med 230V AC, så skal man sikre sig at man gør det under specielle sikrede forhold, hvor man anvender skilletransformator[4], og desuden sikrer at man ikke har løse uisolerede ledninger i opstillingen.

Styringsmæssigt vil det normalt være lettest at anvende et relæ, så man kan tænde og slukke for 230V komponenter med en udgang fra Arduinoen. Normalt vil denne type relæ skulle have en lidt større strøm, og måske også højere spænding end det Arduinoen leverer. Tilpasning kan ske efter ovenstående principper med en transistor, og man skal igen huske en diode over relæet for at beskytte transistoren mod induktionsspændingen.

Signaler til større strømme Svaert.png

Skal man arbejde med komponenter der trækker større strømme kan det være en fordel at anvende MOSFET transistorer, da de normalt kan håndtere større strømme (op til ca. 5 A) med en simpel spændings-styring.

Alternativet er at anvende kraft-transistorer, men de vil typisk skulle have en kraftig strøm på basisbenet, så man bliver nødt til at anvende en driver-transistor for at kunne styre kraft-transistoren.

Den traditionelle måde at placere de to transistorer er i en darlingtonkobling[5] der ser ud som på figur 7 - man kan også få transistorer hvor de er bygget sammen i samme hus, koblet som vist.


Motor styret af transistorer i en darlington-kobling
Figur 7. Motor styret af transistorer i en darlington-kobling.

Denne klassiske måde at koble transistorerne på gør at man kan betragte transistorerne som en komponent med en høj forstærkning (de to transistorers forstærkning ganget med hinanden). Der er dog også en ulempe ved koblingen, nemlig at spændingen på basisbenet at Q2 kommer til at bestemme hvor lavt spændingen på collector kan blive, da der altid vil være en lille positiv spænding (måske 0,1V) over collector-emitter på Q1. Det vil gøre at collectorspændingen sagtens kan komme op på ca. 1V når koblingen er tændt, hvilket vil brænde en del effekt af i transistoren.

Alternativt, så kan man forbinde Q1’s collector gennem en modstand R4 til en forsyning, det kunne være +5V som vist i figur 8, for at mindske den effekt der bliver afsat i modstanden R4.

Kobling af to transistorer som alternativ til darlington kobling
Figur 8. Kobling af to transistorer som alternativ til darlington kobling.

Måden at koble transistorerne op på betyder at Q2 i figur 8 kan tænde helt, så der kun ligger fx 0,2V over collector-emitter på Q2. I begge koblinger af transistorerne kan der være en fordel ved at koble en ekstra modstand R5 på basis af Q2, som det er vist i figur 9 med forbindelse til stel.


Modstand R5 til hurtig slukning af Q2
Figur 9. Modstand R5 til hurtig slukning af Q2.

Fordelen ved at koble modstanden R5 mellem basis af Q2 og stel er at Q2 kan være langsom til at slukke, så hvis man arbejder med frekvenser på bare 10-100 kHz kan man risikere at transistoren slet ikke bliver slukket ordentligt i de pauser man lægger ind. Årsagen er at Q1 bare slukker, og der er så ikke noget til at trække strømmen ud af den lille kapacitet der er i Q2’s basis-emitter-strækning. Dette kan R5 være med til at afhjælpe.

Signaler uden stelforbindelse Svaert.png

Som nævnt i afsnittet Kobling mellem eksterne moduler og Arduino UNO, så vil man normalt altid have de eksterne moduler forbundet til Arduinoen, om ikke andet så med fælles GND.

Der er dog undtagelser, hvor man ikke skal have GND med over. Et eksempel er det hvor man bevidst ønsker at isolere signalerne omkring Arduinoen for at mindske den støj der kan påvirke Arduinoen og måske forstyrre programafviklingen. Det kan gøres med en optokobler[6] som vist i figur 10, hvor signalet overføres med lys inde i optokobleren, men uden elektrisk forbindelse.

Arduinoen forbundet med en motor via en optokobler
Figur 10. Arduinoen forbundet med en motor via en optokobler.

Man kan også kommunikere over længere afstande med infrarødt lys, som man gør i en TV-fjernbetjening. Modtageren er et lille modul som vist i figur 11


IR Modtager modul, der kan modtage signaler fra en fjernbetjening
Figur 11. IR Modtager modul, der kan modtage signaler fra en fjernbetjening.

En fjernbetjening kommunikerer et digitalt signal ved at tænde og slukke for en 38 kHz modulation af en infrarød lysdiode. Dette kan man også lave med en Arduino[7] ved at anvende et bibliotek som angivet i kilden, eller ved at kode det direkte på benet. IR modtager modulet vist i figur 11 modtager det modulerede signal og genskaber det digitale signal, som man også kan modtage i en Arduino.

Sender man mellem to Arduinoer skal de ikke have fælles GND. Man skal dog være opmærksom på at de kan få det utilsigtet ved at de er tilsluttet hver sin USB-port på den samme PC - dette giver fælles GND ind gennem PC’en.

Til kommunikation over længere afstande, og hvor der ikke er visuel kontakt mellem objekterne der kommunikerer kan man anvende radiobølger. Der findes en del forskellige standarder til kommunikation med radiobølger:

  • Bluetooth
  • WiFi IEEE 802.11[8]
  • 433 MHz (fx. bilnøgler)
  • 2.4 GHz NRF24L01[9]
  • SMS

Fælles for alle standarder er at der ikke skal være fælles GND-forbindelse

Anvendelse af Shields

En lidt anderledes måde at tilkoble hardware til Arduinoen er at koble et Shield på, der fungerer ved at det har stikben der rammer ned i alle arduinos ben, og typisk har hun-stik modsat, så man kan koble videre med de ben som shield’et ikke udnytter.


Eksempel på et shield til Arduino UNO - her et GSM-modul
Figur 12. Eksempel på et shield til Arduino UNO - her et GSM-modul.

I figur 12 kan man se et typisk Shield til Arduino UNO, her er det et GSM-modul, der kan fungere som en mobiltelefon styret af Arduinoen, hvor man kan ringe op og tale gennem det jackstik der er i enden af modulet, men måske mere relevant for Arduino - så kan man sende SMS’er ved hjælp af modulet.

Fordelen ved at anvende shields er at det flytter fokus fra det elektriske til programmerings- delen. Det kan specielt være relevant, hvis man anvender Arduino i programmerings- undervisning. For at gøre shields mere universelle kan man fremstille et shield i stil med dette Programmerings-Shield (figur 13) der netop er fremstillet med henblik på undervisning i programmering.

Shield til programmeringsundervisning med stik til mange moduler
Figur 13. Shield til programmeringsundervisning med stik til mange moduler.

Referencer