Programmerings-Shield

Fra Kommunikation-IT Holstebro HTX
Skift til: navigering, søgning
Det monterede Programmerings-Shield uden moduler på en Arduino - den kan lige netop anes under shieldet

Programmerings-shieldet kan anvendes i sin grundlæggende konfiguration oven på en Arduino UNO, og er designet så man kan udføre små grundlæggende programmer på shieldet uden andet er tilsluttet.

Der er også monteret stik til mange moduler, så de kan kobles på, uden at man skal til at rode med ledninger. Det er ikke alle moduler der kan monteres samtidigt – der kan være både fysiske begrænsninger, at de ikke kan sidde der samtidigt, og der kan være signalmæssige begrænsninger, at de er koblet på de samme input/output på Arduinoen.

Oversigt Programmerings-Shield

På siden med Modul oversigten er der en komplet fortegnelse over hvilke moduler der kan anvendes på programmerings-shieldet, og i oversigten er der også angivet hvilke moduler der ikke kan fungere samtidigt.

Der er ligeledes lavet en oversigt over alle moduler i bunden af hver side der har noget med programmerings-shieldet at gøre.

Montage af Shieldet

Printet er et dobbeltsidet print fremstillet professionelt, men tilpasset med leadede komponenter, så man selv kan montere det.

Printet og montagen er beskrevet på Hardware Prog Shield.

Grundlæggende funktioner

De grundlæggende funktioner kan man arbejde med ved blot at montere shieldet korrekt på en Arduino UNO. Vær forsigtig med at få alle ben korrekt i stikkene.

Udgange med Lysdioder

I højre side er der monteret 6 Lysdiode LED1 – LED6, som illustreret her:
Layout-LED.png
De 6 lysdioder på digitale udgange

Disse lysdioder er forbundet til 6 digitale udgange som følger:

Lysdiode Ben Yderligere
LED1 Pin 3 PWM
LED2 Pin 4
LED3 Pin 5 PWM
LED4 Pin 6 PWM
LED5 Pin 7
LED6 Pin 9 PWM

Udgangene mærket med PWM betyder at de kan styres med pulsbredde modulation, så de kan lave noget der svarer til et analogt output.

Der er en lysdiode mere på shieldet, LED7, der er tilslutte 5V, så den indikere blot at der er strøm til Arduinoen og Shieldet.

Software til Lysdioder

Der er lavet en lille test-software, der afprøver de 6 lysdioder, ved at lave et løbelys ned ad dem. Test-softwaren kan hentes i denne ZIP-fil.

For at få udgangene til at fungere som output, så de kan levere strøm til lysdioderne, så kodes i setup() at udgangene skal være output som vist her:

void setup() {
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  .
}

I loop() gennemløbes alle udgange i en for-løkke med n som variabel, så der kan skrives:

  digitalWrite(n, HIGH);
  delay(300);
  digitalWrite(n, LOW);

Den samlede kode er koblet sammen med test af indgangene, så når man betjener dem, så virker det lidt underligt at et ben er genbrugt til både input og output (ben 9, der sidder på LED6 og kontakt S13).

Trykknapper med digitalt input

Der er to trykknapper placeret som vist her:
Layout-kontakt.png
De 2 kontakter på digitale indgange

De to trykknapper der giver et direkte digitalt input. Det er S13 og S14, der er tilsluttet som følger:

Kontakt Ben Specielt
S13 Pin 9 Sammen med LED6
S14 Pin 8

Der er en svag pull-down på de to kontakter, så der skulle gerne kunne læses LOW når der ikke er trykket på kontakten, og HIGH når der trykkes på kontakten.

Software til Kontakter

I den lille test-software, der afprøver de 6 lysdioder, kan man også teste kontakterne, ved at tiden bliver forskellig når man trykker på kontakterne. Test-softwaren kan hentes i denne ZIP-fil.

For at få indgangene til at fungere som input, så de kan aflæse kontakterne, så kodes i setup() at indgangene skal være input som vist her:

void setup() {
  .
  pinMode(8, INPUT);
  pinMode(9, INPUT);
}

I loop() kan der i en if-sætning testes på om der er trykket på kontakten, eller om der ikke er trykket på den, så der kan skrives:

  if (digitalRead(8)) {
    delay(100);
  }
  if (! digitalRead(8)) {
    delay(300);
  }

Den samlede kode er koblet sammen med test af indgangene, så når man betjener dem, så virker det lidt underligt at et ben er genbrugt til både input og output (ben 9, der sidder på LED6 og kontakt S13).

Analoge input

Et analogt input kan konvertere en spænding i området fra 0 - 5V om til værdier mellem 0 og 1023, som beskrevet på Arduinos hjemmeside[1].

På arduinoen er der 6 analoge indgange, hvor de 4 anvendes til analoge formål her, mens de to sidste (A4 og A5) anvendes til I2C.

De analoge input er tilkoblet komponenter som vist her:
Layout-analoge-input.png
Placeringen af komponenterne der kan give analoge input

A0 til A2 har tilsluttet komponenter der kan give et analogt input til Arduinoen.

A0 er koblet til et potentiometer der på sine 300° område giver 0-1023 i konverteret værdi.

A1 er koblet til en LDR (Lysfølsom modstand), så den giver en lav værdi når der er lidt lys på LDR’en og en høj værdi når der er meget lys på LDR’en.

A2 anvendes til det analoge tastatur som beskrevet.

A3 anvendes til eksterne analoge målinger.

Software til test af de analoge indgange

For at teste de analoge indgange er der skrevet noget test-software til de analoge indgange. Test-softwaren kan hentes i denne ZIP-fil, der er lavet med kraftig inspiration fra Arduinos eksempler[2].

Til definitioner sættes en del ting op:

// These constants won't change.  They're used to give names
// to the pins used:
const int potPin = A0;  // Analog input pin that the potentiometer is attached to
const int LDRPin = A1;  // Analog input pin that the LDR is attached to
const int anaKeyPin = A2;  // Analog input pin that the Analog Keyboard is attached to
const int extPin = A3;  // Analog input pin that the External sensor is attached to

const int analogOutPin = 3; // Analog output pin that the LED is attached to

int potmeter = 0;        // value read from the pot
int LDRValue = 0;        // value read from the LDR
int keyValue = 0;        // value read from the Analog Keyboard
int extValue = 0;        // value read from the external sensor
int outputValue = 0;        // value output to the PWM (analog out)

I setup() startes den serielle port, så den serielle monitor kan modtage et output:

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

Selve loop() funktionen laver målingerne og outputter på et PWM-ben og skriver til den serielle monitor:

void loop() {
  // read the analog in value:
  potmeter = analogRead(potPin);
  LDRValue = analogRead(LDRPin);
  keyValue = analogRead(anaKeyPin);
  extValue = analogRead(extPin);
  // map it to the range of the analog out:
  outputValue = map(potmeter, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);

  // print the results to the serial monitor:
  Serial.print("Potmeter = ");
  Serial.print(potmeter);
  Serial.print("\t LDR = ");
  Serial.print(LDRValue);
  Serial.print("\t anaKey = ");
  Serial.print(keyValue);
  Serial.print("\t Ext = ");
  Serial.println(extValue);

  delay(200);
}

Outputtet til Serial Monitor bliver som vist her:

Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 79
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 82
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 80
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 99
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 108
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 94
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 79
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 80
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 81
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 81
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 99
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 108
Potmeter = 507	 LDR = 96	 anaKey = 0	 Ext = 93

Analogt tastatur

Der er opbygget er tastatur med 12 taster, så det kan bruges som numerisk keyboard til indtastning af tal-værdier. Tastaturet giver en analog værdi ind på A2, alt afhængigt af hvilken tast der er trykket på.

Værdierne ligger med ca. 85 for hver tast, så man kan regne sig frem til hvilken tast der er trykket på.

Tast AD-værdi på A2
Ingen 0
0 85
1 170
2 255
. .
11 1023

Hvis man trykker flere taster ned samtidigt, så vil tastaturet stadig give en analog værdi, men det er ikke muligt at aflæse hvilke to taster det er der er trykket ned.

Der er skrevet et bibliotek til det analoge tastatur, med yderligere beskrivelse under Arduino Analog Keyboard.

Analoge moduler

Der er kun et enkelt stik til at tilkoble analoge moduler på shieldet. Det er stikket markeret her på printet:
Layout-analog.png
Stik til den analoge indgang, hvor en LM35 eller en afstands-sensor kan placeres

Umiddelbart lægger den analoge indgang op til to ting:

  • Man kan placere en LM35 i soklen – VIGTIGT – den skal vende rigtigt, så den buede del er som vist på tegningen.
  • Man kan tilslutte en analog afstandsmåler, hvor de 3 ledninger skal tilsluttes som følger: Den røde til R den gule til Y og den sorte til B.

Det analoge signal kommer ind på A3, og giver en værdi fra 0 til 1023 for en spænding på 0 til 5V som standard.

Man kan i princippet slutte mange forskellige analoge komponenter til inputtet, hvor forbindelserne er som følger:

Funktion Bogstav
+5V R
Signal (A3) Y
GND B

Bemærk at på version 2.0 af printet er teksten forskubbet, så B står langt væk fra stikket, mens Y'et står ud for det ben der er B. R står rigtigt.

Referencer

  1. Beskrivelse af analogt input på Arduinos hjemmeside
  2. Arduinos eksempel på analogt input og output