Programmering Shield

Fra HTX Arduino
Spring til navigation Spring til søgning
Arduino Shield med LCD Display monteret

Dette er en gammel version

Den nye ligger på Programmerings-Shield.

Arduino shieldet er udviklet til programmerings-undervisningen på UC Holstebro HTX, for at kunne understøtte koblingen mellem programmering og den fysiske verden, altså at programmering har en interaktion med den fysiske verden, her i første omgang ved hjælp af knapper og lysdioder.

Arduino shieldet kan også anvendes til grundlæggende opstillinger i teknologi og computer og el-teknik.

De grundlæggende funktioner

Helt grundlæggende har man med det rå shield adgang til to trykknapper, 3 lysdioder og to analoge indgange.

Rent fysisk sidder de placeret på shildet som vist her:

Grundlæggende layout af Arduino Programmerings Shield
Grundlæggende layout af Arduino Programmerings Shield

Trykknapper

De to trykknapper kan fungere som input og har følgende tilslutning:

Markering på Shield Pin-nummer Læsning
S1 12 HIGH når der er trykket på knappen
S2 13 HIGH når der er trykket på knappen

For at få fornuftig læselig kode kan man definere hvilke ben knapperne sidder på som følger:

const int knap1Pin = 13;     // the number of the pushbutton pin
const int knap2Pin = 12;     // the number of the pushbutton pin

For at sikre at knapperne er input, så skal man i setup() sætte indgangene op som følger:

  pinMode(knap1Pin, INPUT);
  pinMode(knap2Pin, INPUT);

På denne måde kan man så teste om der er trykket på en knap ved at man i loop() kan skrive følgende:

  if (digitalRead(knap2Pin)) {
    // Kode der skal afvikles når der er trykket på knappen
  }

Lysdioder

De 3 lysdioder fungerer efter følgende tabel:

Markering på Shield Pin-nummer Farve Funktion
LED1 11 Rød Lyser ved HIGH output
LED2 10 Gul Lyser ved HIGH output
LED3 9 Grøn Lyser ved HIGH output

For at få fornuftig læselig kode kan man definere hvilke ben lysdioderne sidder på som følger:

const int ledGreen =  11;      // the number of the LED pin

For at sikre at lysdioderne er output, og at de ikke lyser fra starten, så skal man i setup() sætte udgangene op som følger:

  pinMode(ledGreen, OUTPUT);
  digitalWrite(ledGreen, LOW);

På denne måde kan man tænde og slukke lysdioden ved at man i loop() kan skrive følgende:

    digitalWrite(ledGreen, HIGH);
    delay(500);
    digitalWrite(ledGreen, LOW);
    delay(500);

Analoge indgange

De analoge indgange fungerer efter følgende tabel:

Markering på Shield Pin-nummer Funktion Område Lave værdier Høje værdier
R1 A0 Lysfølsom modstand 0-1023 Lidt lys Meget lys
R5 A1 Potentiometer (drejemodstand) 0-1023 Mod højre Mod venstre

For at få fornuftig læselig kode kan man definere hvilke ben de analoge indgange sidder på som følger:

const int LDRPin =  A0;      // the number of the LDR pin

For at sikre at de analoge indgange er input, så skal man i setup() sætte indgangene op som følger:

  pinMode(LDRPin, INPUT);

På denne måde kan man aflæse værdien ved at man i loop() kan skrive følgende:

  LDR = analogRead(LDRPin);
  Serial.print("LDR: ");
  Serial.println(LDR);

I denne kode bliver værdien skrevet ud til den serielle monitor.

Tilgængelige udviklings-stik

Når man har det rå programmerings-shild, så kan man få fat i 3 forskellige stik, hvor man kan bygge ekstra elektriske ting på f.x. ved at koble det op på fumlebræt.

SV8 har følgende forbindelser:

Grundlæggende layout af Arduino Programmerings Shield


SV8 pin Arduino pin Funktion
1 GND Stel, reference, GND
2 2 Digital IO / Interrupt
3 3 Digital IO / PWM / Interrupt
4 4 Digital IO
5 5 Digital IO / PWM
6 6 Digital IO / PWM
7 7 Digital IO
8 8 Digital IO

SV6 har følgende forbindelser:

SV6 pin Arduino pin Funktion
1 GND Stel, reference, GND
2 GND Stel, reference, GND
3 A2 Analog input
4 A3 Analog input
5 A4 Analog input / I2C SCL
6 A5 Analog input / I2C SDA

SV5 har følgende forbindelser:

SV5 pin Arduino pin Funktion
1 Vin Ureguleret forsyning (9V / 12V)
2 GND Stel, reference, GND
3 GND Stel, reference, GND
4 5V +5V Forsyning
5 5V +5V Forsyning
6 5V +5V Forsyning

Display

Som det kan ses på billedet i toppen er der også en mulighed for at koble et display på Shieldet. Dette giver selvfølgelig andre muligheder rent programmeringsmæssigt.

For at anvende displayet, så bruger man naurligvis nogle digitale udgange, så på shildet er det stik SV8 med en del af de digitale ind og udgange placeret under displayet.

Man kan stadig anvende de analoge ben som almindelige digitale I/O, hvor man blot kalder dem A2-A5.

Displayet skal defineres for at man kan anvende det. Det gør man på følgende måde, hvor man henter biblioteket ind og derefter angiver hvilke ben der anvendes til displayet:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

Displayet skal initialseres i setup() for at man kan anvende det. Det gør man på følgende måde:

  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
  delay(1000);

Efter initialiseringen skrives der lige en besked i displayet

Når man har fået sat displayet op, så kan det anvendes til at skrive forskellige oplysninger som vist her:

  lcd.setCursor(0,1);
  lcd.print("LDR: ");
  lcd.print(LDR);

Hvis man ønsker at slette alt indholdet i displayet er der en funktion der hedder clear:

  lcd.clear();

Man kan læse mere om displayet og hvordan det kobles op på denne side

I2C Display

Hvis man ikke ønsker at anvende så mange digitale ben til et display, så kan det kobles op via I2C kommunikation, så man anvender A4 og A5 til at skrive i displayet med.

Til dette er der lavet et stik SV9 hvor I2C displayet kan sættes til direkte.

Dette betyder at der er lavet en omskrevet kode, der retter op på dette. Dette er placeret i Denne ZIP-fil med biblioteksfiler, som man kan installere ind i Arduinos Biblioteker ved at pakke ZIP-filens indhold ud, så mappen LiquidCrystal_I2C kommer til at ligge inde under stien "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C" - det er ikke meningen at der skal ligge en mappe inde i LiquidCrystal_I2C der hedder LiquidCrystal_I2C.

På denne måde får man adgang til SV8, så man kan bruge de digitale IO der er i det stik.

Displayet skal defineres for at man kan anvende det. Det gør man på følgende måde, hvor man henter biblioteket ind og derefter angiver hvilken adresse og størrelse der anvendes til displayet:

// include the library code:
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

Displayet skal initialseres i setup() for at man kan anvende det. Det gør man på følgende måde:

  lcd.init();                      // initialize the lcd 
  lcd.backlight();  // Print a message to the LCD.
  lcd.print("hello, world!");
  delay(1000);

Efter initialiseringen skrives der lige en besked i displayet

Når man har fået sat displayet op, så kan det anvendes til at skrive forskellige oplysninger som vist her:

  lcd.setCursor(0,1);
  lcd.print("LDR: ");
  lcd.print(LDR);

Man kan læse mere om I2C-displayet og hvordan det kobles op på denne side

Hardware

Selve boardet ligger i en ZIP-fil med diagrammer og Layout der er lavet i Eagle, så man selv kan fremstille shieldet.

Komponentlisten er som følger:

Komponent Værdi Kommentar
C1 10 uF elektrolyt Monteres liggende (Aksial) - skal vendes rigtigt
LED1 5mm Lysdiode Rød skal vendes rigtigt
LED2 5mm Lysdiode Gul skal vendes rigtigt
LED3 5mm Lysdiode Grøn skal vendes rigtigt
R1 5mm LDR Lysfølsom modstand
R2 680 680 ohm modstand
R3 680 680 ohm modstand
R4 680 680 ohm modstand
R5 10k trimmepotentiomer Stående potentiometer til A1
R6 10k 10 kilo ohm modstand
R7 10k 10 kilo ohm modstand
R8 10k 10 kilo ohm modstand
R9 47k trimmepotentiomer Liggende potentiometer til LCD Kontrast
S1 Tast Trykknap til input 13
S2 Tast Trykknap til input 12
SV1 6 polet pin-række Klippes af 40x1 pinrække - Monteres på loddesiden
SV3 8 polet pin-række Klippes af 40x1 pinrække - Monteres på loddesiden
SV4 6 polet pin-række Klippes af 40x1 pinrække - Monteres på loddesiden
SV5 6 polet hun-stik Klippes af 20x1 hunstik-række
SV6 6 polet hun-stik Klippes af 20x1 hunstik-række
SV7 8 polet pin-række Klippes af 40x1 pinrække - Monteres på loddesiden
SV8 8 polet hun-stik Klippes af 20x1 hunstik-række
SV9 4 polet hun-stik Klippes af 20x1 2-benet hunstik-række
U$1 16 polet hun-stik Klippes af 20x1 hunstik-række til Displayet
U$1 Display Display print der monteres med 16 pins stik
Lus 2 stk laves af enten komponentben eller monteringstråd

Print med programmerings-shield
Print med programmerings-shield

Diagram

Diagrammet ligger i ZIP-filen sammen med boardet

Diagram over programmerings-shield
Diagram over programmerings-shield

Software til test

Til at teste om shieldet fungerer som det skal kan man anvende denne test-kode.

Programmering
Programmeringsbegreber Initialisering - Sekvens - Algoritme - Hexadecimal - Det Binære Talsystem - HEX-fil - ASCII - Interrupt - Events - Styresystem - Autocomplete - Selvstudie Programmering - Hour Of Code - Stepwise Improvement - Syntaks - Prog-links - Microcontroller
Grundlæggende C C float - C double - C-løkker - Datatyper - Konstanter - Regnearter - Funktioner - Return - Returværdi - Rekursion - Semikolon
Variabel Typer boolean - byte - int - unsigned int - word - long - unsigned long - short - float - double - char - unsigned char - string - char array - String - object - Array - 2-dimensionelt Array - void
Program-klassikere Polling - State-machine - Trykknap - Forkant - Bagkant - Prel
Arduino Arduino til Programmering - C til Arduino - Programmering Shield - Arduino PC-software - Arduino Udviklingsmiljø - Arduino Pin Library - Funktion - Arduino Seriel - Arduino String - Arduino String Split - Arduino StateChangeDetection - setup() - loop() - Compilerdirektiver - Asynkron kommunikation - millis() - micros() - Scratch for Arduino - Send fra Arduino til Excel - [[]] - [[]]
Processing Grafik i Processing‎ - Keyboard i Processing - Mus i Processing‎ - Tid i Processing‎ - Draw() - Setup() - Tal Input til Processing - Syntaksfarvning - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino
javaScript Javascript input‎ - Javascript output‎ - Javascript strukturer‎ - Javascript syntaks‎ - Tid i javaScript - Objekt‎ - AJAX
Serverprogrammering PHP - MySQL - Task Scheduler - WeMOS
PIC JAL - [[]]
Scratch for Arduino S4A Installation - S4A programmering - S4A undervisningsforløb - S4A begrænsninger
Program Dokumentation Algoritme - Flowchart - Pseudokode - Datastruktur - Dataabstraktion - Pulsplaner - Program-kommentar - Teori - Test - UML