Artikel top billede

(Foto: Computerworld)

Arduino, programmering af hjemmeelektronik - del 1

Der er elektronik overalt i din hverdag, og mange ting er styret af små computere. Denne artikel er første afsnit i en serie på tre artikler om physical computing, en platform hvor du kan bygge elektronik og programmere det.

Af Kenneth Geisshirt, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Begrebet physical computing lyder, første gang du hører det, en smule underligt. Det er svært at forestille sig, at køre et program uden en computer. Men tænk lidt mere over det, de fleste programmer afvikles på meget forskellige computere.

Måske har du Linux på din pc, men har du tænkt over at dit access point nok også kører Linux, og måske gør dit tv det også (Sony har en del Linux-baserede modeller) eller din telefon. Det betyder, at hardware er mindre vigtig for programmer, og computing er ikke afhængig af en bestemt fysisk platform.

Samtidig er du vant til, at hardware ikke er noget, som kan ændres. Når din vaskemaskine eller bil kommer fra fabrikken, kan du ikke pille ved den eller ændre den i nævneværdig grad. Der medfølger sjældent dokumentation, som er så detaljeret, at det er muligt at foretage ændringer.

Samspillet mellem den fysiske platform og software er så kompleks, at du ikke har en chance for at gennemskue, hvordan mange af dagligdagens elektroniske produkter fungerer.

Med physical computing får du kontrollen tilbage. Det handler om, at du kan ændre på både hardware og software. Physical computing bruges af kunstnere til at bygge kunstinstallationer, idet de kan ændre på værkerne, indtil de har det ønskede udtryk.

Arduino-platformen

I denne artikel og de to næste artikler i serien, vil du stifte bekendtskab med en særlig platform til physical computing: Arduino. Arduino-platformen består af to dele. Den første del er elektronik i form af et Arduino- board samt en række forskellige valgfrie elektroniske komponenter.

Den anden del er et udviklingmiljø (Integrated Development Environment eller blot IDE) som sætter dig i stand til at skrive små programmer til dit Arduino-board. Du kan læse mere om de særlige licensbetingelser omkring Arduino-platformen i infoboksen »Alt er open source«.

En af de største praktiske fordele ved Arduino-platformen er, at du ikke behøver at lodde. Det giver dig en større frihed til at eksperimentere med opstillingerne og flytte rundt på komponenter. Du kan sige, at Arduino-platformen er en slags LEGO-platform for voksne legebørn med hang til elektronik og programmering. Uden lodning kan du også skille din opstilling ad og bygge en ny i morgen.

Eftersom Arduino-platformen er helt åben, har flere elektronik-virksomheder set et – omend lille – marked for komponenter til platformen. Det er i dag muligt at købe udvidelser til platformen i form af shields. Der findes shields, som giver dig Ethernet, ZigBee (trådløst kommunikation til husautomatisering), usb og trykfølsom skærm.

Arduino boards

Der findes flere Arduino boards på markedet i dag. Et af de mere udbredte boards er Arduino Duemilanove. En del Arduino-forhandlere har et begyndersæt, hvor du køber en pakke bestående af et Arduino-board og en række komponenter. Det er et godt sted at begynde din udforskning af physical computing.

Kernen på et Arduino-board som Duemilanove er en microprocessor. Der er tale om en Atmel AVR processor (ATmega328), som er en 8bit RISC-baseret cpu med en clockkfrevens på 16MHz og med 1kB ram.

Det betyder, at cpu’en på et Arduino-board minder mest om cpu’en i en hjemmecomputer fra midten af 1980’erne. Det lyder nok ikke voldsomt imponerende, men du skal huske på, at sådanne cpu’ere bruger meget lidt strøm og er meget billige i indkøb. Der er en grund til, at så mange af vores hverdagsting har indbyggede microprocessorer.

Et Arduino board kan heldigvis meget mere. Der er hele 14 digitale porte, og du kan i softwaren selv bestemme, om de skal være input- eller output-porte. Det giver dig mulighed for at styre en del komponenter.

Endvidere er der seks analoge input-porte. Opløsningen på disse porte er begrænset, og de kan give dig en værdi mellem 0 og 1023. 6 af de 14 digitale porte kan omprogrammeres til at være analoge output porte.

For at gøre det lettere at bruge dit board, kan det sættes direkte til usb-porten i din computer. Det tjener to formål: Strømkilde og overførsel af programmer. Det er også muligt at få strøm fra en adapter, men skal du kun lege med dit Arduino-board, kommer du nok primært til at have det tilsluttet en usb-port.

Der er en boot loader indbygget. Den tager imod programmer, som overføres fra din computer og starter programmerne. Der er hele 32kB flash-ram til programmer, dog bruges 2kB til boot-loaderen. Det betyder, at dine programmer skal være mindre end 30kB for at kunne afvikles på dit Arduino-board.

Installation af IDE

Den anden del af Arduino-platformen er udviklingsmiljøet eller IDE. IDE’en findes til både Linux, Windows-familien og Mac OS X. Selve applikationen er en Java-applikation, der giver dig et grafisk udviklingsmiljø, som du kender fra så mange andre programmeringssprog.

Udover selve udviklingsmiljøet, skal du have en compiler og en række biblioteker til ATmega168 microprocessoren. GNU Compiler Collection (GCC) understøtter AVR-familien, som ATmega168 er en del af, så også disse underliggende software-komponenter er open source.

Grunden til at du får brug for GCC til dit Arduino-board er, at programmering sker i et programmeringssprog som er tæt på C.

Er du bruger af Ubuntu Linux, er installationen yderst let – andre Linux-distributioner er også godt dokumenteret (se http://www.arduino.cc/playground/Learning/Linux). I Ubuntu Linux kan du med fordel udføre følgende tre kommandoer:

sudo add-apt-repository ppa:arduino-
ubuntu-team
sudo apt-get update
sudo apt-get install arduino

Du får tilføjet et nyt pakke-område til din Ubuntu-installation. Det har den fordel, at du altid vil få opdateret dit udviklingsmiljø i takt med nye versioner af det.

Brug af IDE Da Arduino-platformen bruger usb-porten til at sende nye programmer fra din computer til boardet, skal du vide lidt om dine usb-porte, før du kaster dig ud i programmeringen. Du kan starte en terminal og sætte dit Arduino-board til en usb-port.

Med kommandoen dmesg finder du en linje i slutningen i stil med FTDI USB Serial Device converter now attached to ttyUSB3. Her kan du se hvilken TTY dit board er forbundet til. Sagen er nemlig den, at Arduino-boardet har indbygget en usb/serial-konvertering, så set fra Linux, sidder boardet til en klassisk seriel indgang.

For at kunne sende og modtage på en TTY, skal du i Ubuntu Linux tilføje din brugerkonto til TTY-gruppen. Det gør du med kommandoen sudo adduser navn tty hvor navn er dit brugernavn.

Efter installationen vil du finde en ny applikation i Ubuntu’s menusystem under punktet programmering. Har du sat dit Arduino-board til usb-porten, kan du starte udviklingsmiljøet op. Du mødes af et tomt vindue med en række menupunkter øverst.

De to første handlinger, du skal udføre, er, at angive hvilket Arduino-board du ejer, samt hvilken TTY, boardet er tilsluttet. I menupunktet Tools finder du undermenuen Board. Det er vigtigt, at du vælger det rigtige board, da boot-loadere og lignende er en smule forskellige. Endvidere skal du i Serial port angive hvilken TTY, som dit board er til- sluttet.

Som allerede nævnt, er programmeringssproget meget i stil med C. Der er dog en række forskelle, men de er emne for afsnit 2 i serien. I Arduino-verdenen omtales programmer som sketches, og du finder også menupunktet Sketch.

Når du skal oversætte et program til noget, som microprocessoren på boardet kan afvikle, vil IDE’en først oversætte dit program til C og derefter bruge GCC til at oversætte og linke programmet til et binært program.

Der er en række ikoner under menupunkterne. Det er genveje til de mest anvendte funktioner. De to vigtigste genveje er nok den længst til venstre (ligner en Afspil-knap) og næstsidst (set fra højre). Den første oversætter dit program, mens den anden sender programmet til dit Arduino board.

I menupunktet File kan du gemme og hente filer. Men du kan også indlæse en lang række eksempler. Eksempler findes også på Arduino-platformens hjemmeside, og i infoboks »Første program« finder du en modificeret udgave af det ene af dem.

Den første prøveopstilling

Den første opstilling skal helst være hurtig at bygge. Du kan nøjes med at sætte en lysdiode på ben 13 og GND. Ved at lade ben 13 være en digital output port, kan du tænde og slukke lysdioden ved henholdsvis at sætte og fjerne spændingen på ben 13.

Programmet, som skal afvikles på boardet, er ganske enkelt. Det skiftevis tænder og slukker for lysdioden.

Første program:

int ledPin = 13; // LED sidder på ben 13
// setup() sætter boardet op
void setup() {

pinMode(ledPin, OUTPUT);
randomSeed(analogRead(5));
}
// loop() kaldes hele tiden
void loop() {
digitalWrite(ledPin, HIGH); // tænd LED
delay(random(100, 200)); // vent mellem 0,1 og 0,2 sekund
digitalWrite(ledPin, LOW); // sluk LED
delay(1000); // vent 1 sekund
}

Først gives en variable værdien 13. Det gøres kun for at programmet er lettere at læse.

Funktionen setup afvikles en gang af microprocessoren på boardet, når programmet startes op. Allerede her kan du se afvigelserne fra C. I C vil funktionen main være den, som afvikles først. Du bruger setup til at konfigurere boardet, det vil sige primært de forskellige porte.

I det lille eksempel her, sættes ben 13 til at være output gennem kaldet til pinMode. Funktionen readAnalog læser værdien på en analog input port. Da der intet er tilsluttet de analoge porte, må det antages at værdien er tilfældig og kan derfor bruges til at starte generatoren af tilfældige tal op med.

Funktionen loop kaldes fra microprocessoren hver gang den afsluttes. Det vil sige, at loop er hovedløkken i programmet. I eksemplet loop til at tænde og slukke for lysdioden. Den er tændt i et tilfældigt tidsrum på mellem 100 og 200 millisekunder, mens den er slukket i 1 sekund (1000 millisekunder). Funktionen digitalWrite sætter en værdi på en digital output port og konstanterne HIGH og LOW repræsenterer henholdsvis høj og lav spænding.

Næste gang

Denne artikel har vist dig, hvordan du får Arduino-platformen klar – både med hensyn til software og hardware. I næste afsnit i serien kommer du til at se meget mere til programmering af boardet i det C-lignende sprog. Arduino-platformen er en ganske alsidig platform, og det er kun din fantasi, som sætter grænserne for, hvad du kan bruge den til.

[themepacific_accordion]
[themepacific_accordion_section title="Fakta"]

Få mere at vide

[/themepacific_accordion_section]
[themepacific_accordion_section title="Fakta"]

Alt er open source

[/themepacific_accordion_section]
[/themepacific_accordion]