LÆR ARDUINO

INTRODUKSJON TIL ARDUINO

Hva er Arduino?

En introduksjon til Arduino-kortet og komponentene.

ARDUINO KORT FORKLART

Introduksjon

Arduino ble opprinnelig laget for at det skulle være billig og enkelt å lage prototyper og kunstinstallasjoner. Den gjør det mulig å styre utganger (tenne lys, starte motorer) basert på målinger på innganger, styrt av et program som forteller hva som skal gjøres. Vanlige programmerbare logiske styringer (PLS) er dyre og vanligvis ikke så enkle å programmere, mens en Arduino er billig og programmerbar i språket C – eller, noe som minner om C. For oss i Norge er det litt morsomt å tenke på at hjertet i en Arduino, prosessoren Atmega328, er norsk. Den ble utviklet av to studenter ved NTH (nå NTNU).

Eksempel

Et eksempel på bruk av programmerbare styringer som ofte brukes er en vaskemaskin. For enkelhets skyld ser vi for oss en maskin med bare ett program. Dette er en jobb som egner seg godt for en Arduino. Vi trenger en føler på døra, en på vann-nivå og en på temperatur. Vi trenger en dørlås, ei motorstyring og ei pumpestyring.

Programmet blir omtrent slik

  • Sjekk om døra er lukket. Lås den.

  • Tapp inn vann til nivåsensoren slår ut.

  • Varm opp vannet til 40°C. Dersom temperaturen faller under 38°C skal varmen slås på igjen.

  • Gjenta i en time: Kjør motor i 5 sekunder. Vent 10 sekunder. Bytt retning.

  • Pump ut vannet.

  • Tapp inn vann til nivåsensoren slår ut.

  • Gjenta i fem minutter: Kjør motor i 5 sekunder. Vent 10 sekunder. Bytt retning.

  • Pump ut vannet.

  • Kjør motor på full fart i ett minutt mens pumpa går.

  • Vent ett minutt.

  • Lås opp døra.

Dette programmet vil gjentas hver gang maskinen slås på, og det er nettopp noe av det som gjør Arduino så anvendelig. Den kjører programmet når den får strøm, og det gjør den om og om igjen.

Den er langt fra ufeilbarlig. Om man begynner å leke med Arduino oppdager man at det er noe som heter støy. Vi oppdager måleusikkerhet, og at ting bare blir merkelig. Da er det at vi må tilpasse programmet. Kan vi gjøre målingen flere ganger, og så ta gjennomsnittsverdien?

Arduino mikrokontroller

Mikrokontrolleren

Det finnes en rekke ulike Arduino mikrokontrollere. Bildet under er et eksempel på ett Arduino UNO kort.

Arduino mikrokontroller
Arduino mikrokontroller

Sensorer

Dette er elektroniske enheter som innhenter informasjon fra omgivelsene. Eksempler på slike kan være temperatur-, lys-, fuktighets-, bevegelses- og røyksensorer med flere. Det kan også være en enkel bryter av den typen vi bruker til å slå på lyset eller en mikrofon som registrerer lyd eller en uendelighet av andre sensorer.

Aktuatorer

Dette er elektroniske enheter som utfører en oppgave. Dette kan være en motor som åpner en dør, en lyspære som gir lys, en høyttaler som gir lyd, et varmeelement som gir varme osv. Dvs. en enhet som utfører en aksjon.

Batteri og program

Dette er en elektronisk databehandlingsenhet som kan være svært enkel eller uhyre komplisert og som samler inn informasjon fra omgivelsene ved hjelp av sensorene, for så å gi aktuatorene beskjed om handling. Sensorene er tilkoblet innganger, mens aktuatorene er tilkoblet utganger. I tillegg tilføres enheten elektrisk energi fra batteri eller strømnettet. Noen ganger inneholder enheten en “timer” som holder rede på tiden. Dersom arbeidsoppgavene til enheten er sammensatt må den også inneholde en oppskrift (program) som beskriver hvordan den skal behandle informasjonen fra sensorene

Hentet fra Rossings og Stauslands NTNU-hefte "Grunnkurs programmering Arduino"

ARDUINO I 3D

Arduino i 3D

Hvordan navigere i 3D vinduet?

  1. Lukk bunnbanneret, ved å klikke på Xen i nedre høyre hjørne.

  2. Klikk så på "Click for 3D Model Viewer" i nedre venstre hjørne.

  3. Vent på at modulen laster inn.

  4. Klikk i bildet for å flytte på modellen.

  5. For fullskjerm trykk pilene i nedre høyre hjørne.

  6. For å få opp menyen trykker du på pila på høyre side av vinduet.

ARDUINO PROGRAMMERING

Arduino programmeringsspråk

Installering av Arduino IDE programmeringsmiljø.

Arduino programmering

En kort innføring i Arduino programmering.

Biblioteker

En kort innføring om bruk av biblioteker ved programmering.

ARDUINO KODING

Programmering i Arduino

Variabler og grunnoppsett

Det er vanlig å deklarere biblioteker man trenger øverst i programmet. Det gjøres på formen:

#include <LiquidCrystal.h>
				

Det er en av de ytterst få plassene man IKKE skal ha semikolon(;) på slutten av linja!

I programspråkene C og C++, og dermed også Arduino, må alle variabler deklareres før de kan brukes. Deklarasjonene må inneholde type og navn på variabelen og gjøres normalt i starten av programmet, før setup() rutinen. Siden den deklareres utenfor funksjonene, så blir de globale, dvs. at variablene kan brukes i alle funksjonene og beholder innholdet i variabelen. Som dette:

int tall;		// variabelen tall er nå av typen heltall. Den er 16 bit lang, og tar to byte RAM
float brok;		// variabelen brok (brøk) er et desimaltall – fire byte
			// Begge disse variablene vil være synlig for både setup() og loop()
void setup(){
int a;			// Denne varianten av a vil bare være synlig her. Om  vi sier a = 5, så vil a få verdien 0 // når loop() kjører
}

				

Deklarering kan også gjøres innenfor hver funksjon. Slike variabler gjelder da bare innenfor den funksjonen og kalles da lokale. Under er vist deklarasjon av de vanligste typer variabler. I dette tilfelle vil de bare gjelde innen funksjonen loop():

void loop() { 
int a;		 		// deklarasjon av 16 bit heltallsvariabel (word) 
char b;	 			// deklarasjon av 8 bit karaktervariabel (byte) 
char c, d; 			// deklarasjon av to 8 bits karaktervariabler (byte) 
float e; 			// deklarasjon av variabelen e som et desimaltall f.eks. 1,65 (32 bit, dobbel word) 
unsigned long f; 		// deklarasjon av 4 bytes heltallsvariabel f (32 bit) uten fortegn 
boolean g; 			// deklarasjon av en boolsk variabel g som kan ha verdiene 0 eller 1 
}
				

Se litt på deklareringene over, og tenk på at de forskjellige variablene tar plass i minnet. Du sparer minne på å bruke int i stedet for float. Husk at variabelminnet på en Arduino er begrenset!

Kodeeksempel

Kodeeksempelet er det samme eksempelet som i programmeringsvideoen. Her er det mulig å klippe ut og prøve selv, eller bare prøve å følge logikken.

int red = 4;

void setup() {
  // put your setup code here, to run once:
  pinMode(red, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(300);                       // wait for 0.3 second

  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for 0.5 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for 0.5 second
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for 0.5 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for 0.5 second
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for 0.5 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for 0.5 second
  
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);                       // wait for 0.2 second
  digitalWrite(red, LOW);    // turn the LED off by making the voltage LOW
  delay(1200);                       // wait for 1.2 second
}
				

TINKERCAD

Tinkercad

En introduksjon til hvordan bruke en virtuell Arduino i Tinkercad

SKISSER I TINKERCAD

Arduino i Tinkercad

Her er det mulig å koble en virtuell Arduino med ulike komponenter.

Brukertips

  • For å kjøre simuleringen av prosjektet, trykk på knappen start simulation i toppen av Tinkercad vinduet.

  • For å se koden trykk på knappen med code i Tinkercad vinduet.

  • Du kan få en oversikt over koblingskjema med den nest siste knappen oppe til høyre i Tinkercad vinduet.

Romskip

Prosjektet viser en avfyringssekvens for romskipet, grønt lys betyr at man er klart til å kjøre. Når simuleringen kjører og det lyser grønt kan du trykke og holde ned den svarte knappen på breadboardet.

Love-o-meter

Prosjektet viser en temperaturmåler for hvor "hot" du er, trykk på TMP (temperatur) sensoren på breadbordet å angi temperatur.

Fargeblanding

Prosjektet viser en krets som måler fargesammensetningen til fotoresistorene. Fotoresistorene styrer RGB innstillinger, trykker du på de runde komponentene på breadboardet kan du justere hvor mye rødt (R), grønt (G) og blått (B) de måler.

LÆR MER OM KODING

Nyttige ressurser

Her har vi samlet en rekke lenker for deg som vil lære mer om programmering generelt, og koding i Arduino spesielt.

Eksterne lenker

  • Lær kidsa koding En introduksjon til programmering, med mande oppgaver for å lære mer. Egne oppgaver for Arduino.

  • Arduino dokumentasjon Arduino dokumentasjon, en samling eksempler med bilder og kode.

  • Code Code er en side med prosjekter for å lære koding, bruker både blokk- og tekstkode.

PRAKTISK ARDUINO

Enkel elektronikk del 1

En introduksjon til enkel elektronikk.

Enkel elektronikk del 2

Introduksjon til enkel elektronikk.

Enkel elektronikk med Arduino

Dette er grunnsteinene i Arduino-universet. Breadboard (heter det fordi man brukte vanlige skjærfjøler eller andre trestykker for å lage prototyper før), Arduino og ledninger. De røde og blå strekene på breadboardet viser hvilken vei de er koblet. Vi kobler breadboardet til Arduinoen med ledninger. Det spiller ingen rolle hvilke farger du bruker, men vi bruker gjerne rød for pluss og svart for minus (ground, GND). Det letter feilsøking om ledningene ellers har forskjellig farge.

Breadboard
Arduino Uno

Motstander (resistors)

En motstand gjør to ting. Den begrenser strøm, og senker spenning.

Resistor
Motstander farger fire bånd

Over er en liten oversikt over fargemerkingen av motstander.

Begrensing av strøm bruker vi gjerne for å skåne komponenter, eksempelvis lysdioder. Dersom det går for mye strøm gjennom dem blir de for varme, og levetiden reduseres – eller de ryker med en gang. Under ser dere hva som skjer i Tinkercad om man kobler en LED direkte mellom 5V og GND. Vi ser at vi får opp en advarsel om at dette ikke er bra.

Motstander brukes ellers når vi kobler opp forskjellige sensorer. Sensorene gir gjerne resultatene sine som en motstand, mens Arduino ikke kan måle noe annet enn spenning.

Lysdiode med for mye strøm

Potensiometer – eller potmeter

Et potmeter er en variabel motstand. Det har en fast motstand mellom de ytterste beina, mens slideren får en varierende motstand, avhengig av sliderens posisjon. Vi ser den oftest som volumkontroll, men den har mange anvendelser.

Trykknapp

Dette er egentlig en impulsbryter. Så lenge knappen holdes inne er det forbindelse gjennom den, og den brytes når vi slipper. Vær oppmerksom på at to og to bein er kortsluttet – og det er ikke enkelt å se hvilke!

Potensiometer
Trykk knapp
Bilder hentet fra SparkFun SIK Guide"

Lodding

En praktisk gjennomgang av lodding av elektronikk.

Breadboard

Bruk av breadboard og koblingsmuligheter.

Mikroskop

Bruk av mikroskop.

Avmantling

En praktisk gjennomgang av avmantling av kabel.

Krymping

En praktisk gjennomgang av krymping.

Lysdioder

Bruk av lysdioder med Arduino mikrokontroller.

IDÈER TIL NYE PROSJEKTER

Inspirasjon til nye prosjekter

Trenger du mer inspirasjon til nye prosjekter? Det finnes utrolige mange nettsider med kule og interessante prosjekter. Her har vi samlet et lite knippe med nettsider og kilder til Arduino prosjekter.

Arduinoprosjekter på instagram

Eksterne lenker

FLERE RESSURSER

Nyttige ressurser

Her har vi samlet en rekke lenker for deg som vil lære mer om programmering generelt, og koding i Arduino spesielt.

Eksterne lenker

  • Lær kidsa koding En introduksjon til programmering, med mande oppgaver for å lære mer. Egne oppgaver for Arduino.

  • Arduino dokumentasjon Arduino dokumentasjon, en samling eksempler med bilder og kode.

OM OSS