Programmering Shield
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
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:
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
Diagram
Diagrammet ligger i ZIP-filen sammen med boardet
Diagram over programmerings-shield
Software til test
Til at teste om shieldet fungerer som det skal kan man anvende denne test-kode.