Skip to content

4. FSR

Seriele monitor

Sunglasses Seriele monitor: de plek waar je de Arduino kunt laten praten via een seriele poort

Met de seriele monitor kunnen we de Arduino laten praten. Of precies: dat deze tekst naar de seriele monitor stuurt. De seriele monitor laat deze tekst op je computer zien.

Alleen Arduino aansluiten

Eerst sluiten we alleen een Arduino aan:

Bild

Ik denk dat dit wel moet lukken :-)

Sunglasses De seriele monitor gaat via het USB snoer tussen Arduino naar computer

Code: seriele monitor

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println("Hallo");
  delay(1000);
}
Computer Smiley
Serial.begin(9600); 'Lieve computer, laat de Arduino praten met 9600 bits per seconde'
Serial.print("Hallo"); 'Lieve computer, laat de Arduino het woord Hallo zeggen'
Serial.println("Hallo"); 'Lieve computer, laat de Arduino het woord Hallo zeggen en een nieuwe regel beginnen`'

Opdrachten 1

De seriele monitor zit hier

De seriele monitor met getallen

  1. Upload het programma. In de Arduino IDE, klik rechtsboven op 'Seriele Monitor'. Wat zie je?
  2. Kun je de tekst veranderen naar 'Hallo Richel' (of je eigen naam?)
  3. Verander Serial.println naar Serial.print. Wat zie je?
  4. Verander de tekst Serial.begin(9600) naar Serial.begin(4800). Wat zie je? Waarom?

Antwoorden 1

  1. De seriele monitor laat elke second een extra regel zien, met de tekst 'Hallo'
  2. Verander de regel Serial.println("Hallo"); naar Serial.println("Hallo Richel");
  3. De woorden komen na elkaar, in plaats van onder elkaar
  4. Nu laat de seriele monitor onleesbare tekst zien. Dit komt omdat de Arduino langzamer tekst stuur naar je computer (4800), dan je computer de tekst leest (9600)

Aansluiten FSR zonder LED

Sunglasses FSR betekent 'Force Sensitive Resistance'

Eerst sluiten we alleen een FSR aan:

Stroomschema

Bowtie Is er geen FSR, gebruik dan een LDR

Code: lezen FSR met seriele monitor

Met deze code meten we de waarde van de FSR:

void setup()
{
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println(analogRead(A0));
  delay(100);
}
Computer Smiley
Serial.println(analogRead(A0)) 'Lieve computer, laat de waarde van pin A0 op de seriele monitor zien'

Opdrachten 2

  1. Upload het programma. In de Arduino IDE, klik rechtsboven op 'Seriele Monitor'. Wat zie je?
  2. Druk de FSR in met je vingers (of, met een LDR: houd je vinger boven de LDR) terwijl je de seriele monitor bekijkt. Wat zie je?
  3. Verander Serial.println naar Serial.print. Wat zie je?
  4. Verander de tekst Serial.begin(9600) naar Serial.begin(4800). Wat zie je? Waarom?
  5. Haal de draad naar A0 weg. Ja, haal de draad tussen A0 en de LDR weg. Kijk op de seriele monitor. Wat zie je?
Sunglasses De weerstand tussen A0 en LDR een 'Pull Down' weerstand genoemd

Oplossingen 2

  1. Je ziet een getal van nul tot 1024, afhankelijk van de waarde van de FSR
  2. Je zit de getallen veranderen
  3. Alle getallen komen na elkaar
  4. Nu laat de seriele monitor onleesbare tekst zien. Dit komt omdat de Arduino langzamer tekst stuur naar je computer (4800), dan je computer de tekst leest (9600)
  5. Nu zie je het getal willekeurig veranderen. Dit wordt een zwevende input genoemd
Sunglasses Een 'Pull Down' weerstand voorkomt een zwevende input

Aansluiten FSR met LED, aan/uit

Sunglasses 'Force Sensitive Resistance' betekent 'Kracht afhankelijke weerstand'

Nu sluiten we ook een LED aan:

Stroomschema

Reageren op FSR, aan/uit

Nu gaan we het LEDje laten reageren op de LED:

void setup()
{
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
}

void loop()
{
  if (analogRead(A0) < 512)
  {
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(13, LOW);
  }
  delay(100);
}
Computer Smiley
if (analogRead(A0) < 512) {} 'Lieve computer, als op A0 minder dan 2,5 Volt staat, doe dan datgeen tussen accolades'

Opdrachten 3

  1. Wat gebeurt er als je 512 hoger zet? Wat gebeurt er als je 512 lager zet?
  2. Zorg dat de seriele monitor ook A0 meet en laat zien. Welk getal meet de FSR in rust?
  3. Zorg dat de seriele monitor het woord AAN laat zien als de LED aan gaat, en het woord UIT als de LED uit wordt gezet

Oplossingen 3

  1. Als 512 wordt veranderd naar een te hoog getal, is het lampje altijd aan, hoe hard/zacht je ook drukt. Als 512 wordt veranderd naar een te hoog getal, is het lampje altijd uit, hoe hard/zacht je ook drukt
  2. Hiervoor gebruik je de code van de vorige opdracht: voeg in de setup function toe Serial.begin(9600);, in de loop functie voeg je Serial.println(analogRead(A0)); toe. De waarde die je gaat zien is afhankelijk van de weerstand, FSR en situatie
  3. Dit kan door Serial.println("AAN"); in het eerste gedeelte van het if statement te zetten. Zet Serial.println("UIT"); in het tweede gedeelte van het if statement.
void setup()
{
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println(analogRead(A0));
  if (analogRead(A0) < 512)
  {
    digitalWrite(13, HIGH);
    Serial.println("AAN");
  }
  else
  {
    digitalWrite(13, LOW);
    Serial.println("UIT");
  }
  delay(100);
}

Reageren op FSR, dimmen

Nu gaan we het LEDje laten reageren op de LED. Dit keer dimt het LEDje.

void setup()
{
  pinMode(A0, INPUT);
  pinMode( 9, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  const int fsr_waarde = analogRead(A0);
  Serial.print("FSR: ");
  Serial.println(fsr_waarde);
  const int led_waarde = map(fsr_waarde, 0, 1023, 0, 255);
  Serial.print("LED: ");
  Serial.println(led_waarde);
  analogWrite(led_waarde, 9);
  delay(100);
}
Computer Smiley
analogWrite( 0, 9) 'Lieve computer, zet pin 9 uit'
analogWrite(128, 9) 'Lieve computer, zet pin 9 halfvol aan'
analogWrite(255, 9) 'Lieve computer, zet pin 9 vol aan'
map(analogRead(A0),0,1023,0,255) 'Lieve computer, lees de spanning van A0. Dit is een waarde van 0 tot en met 1023. Bouw de gelezen waarde om tussen 0 en 255.'.

Opdrachten 4

  1. Het LEDje zit op een andere pin. Kijk in de code en sluit de LED aan op de juiste pin
  2. Welke pinnen kunnen we gebruiken om een LEDje te dimmen?

Oplossingen 4

  1. Het LEDje moet nu op pin 9 aangesloten worden
  2. Alle pinnen met een golfje (~) voor het getal. Dit zijn 3, 5, 6, 9, 10, 11.

Opdracht 5

Sluit twee LEDjes aan op pinnen 12 en 13. Als de FSR in rust is, moet er geen LEDje branden. Als je de FSR zacht indrukt, gaat er een LEDje branden. Als je de FSR hard indrukt twee.

Bowtie Tip: gebruik twee if statements

Oplossing 5

De getallen in de if statement moeten goed ingesteld worden.

void setup()
{
  pinMode(A0, INPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println(analogRead(A0));
  if (analogRead(A0) < 256)
  {
    digitalWrite(13, HIGH);
  }
  if (analogRead(A0) < 512)
  {
    digitalWrite(12, HIGH);
  }
  delay(100);
}

Opdracht 6

Je kunt een LEDje ook laten reageren op een FSR door deze te faden/dimmer

  1. Met welk commando deed je dat ook alweer?
  2. Kan dat met elke pin? Zo nee, met welke wel/niet?
  3. Wat is de hoogste waarde waarmee je een LEDje kunt laten branden?
  4. Wat is de hoogste waarde die de FSR kan meten?
  5. Stel je wil een LED laten branden afhankelijk van een FSR waarde. Hoe zou je dit kunnen doen?
  6. Hoe laat je code een deling doen?
  7. Laat de LED branden afhankelijk van de FSR waarde

Oplossingen 6

  1. Een LEDje kun je laten faden met analogWrite, bijvoorbeeld analogWrite(11, 255);
  2. Je kunt een LEDje alleen laten dimmen met PWM pinnen. Dit zijn de pinnen met een golfje (~) naast hun getal. Op de Arduino Uno zijn dit de pinnen 3, 5, 6, 9, 10 en 11
  3. Met analogWrite kun je maximaal 255 geven, bijvoorbeeld analogWrite(11, 255);
  4. Met analogRead kun je maximaal 1023 meten
  5. Je leest een waarde, deelt deze door vier (1024 gedeeld door 256 is vier) en laat de LED zo hard branden
  6. Met de deelstreep, /.
  7. Zie hieronder. Vergeet niet een LEDje op pin 11 te zetten
void setup()
{
  pinMode(A0, INPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  analogWrite(11, analogRead(A0) / 4);
  delay(100);
}
Computer Smiley
analogWrite(11, analogRead(A0) / 4) 'Lieve computer, dim pin 11 op de waarde van pin A0 (dit moet je delen door vier)'

Eindopdracht

  • Sluit vier LEDjes aan: een witte, een rode, een gele en een groene
  • Als de FSR in rust is, moet er geen LEDje branden.
  • Als je de FSR zacht indrukt gaat het groene LEDje branden
  • Als je de FSR harder indrukt gaan de groene en gele LEDjes branden
  • Als je de FSR hard indrukt gaan de groene, gele en rode LEDjes branden
  • Het witte LEDje gaat harder en zachter branden afhankelijk van de FSR

Als je geen wit LEDje hebt, gebruik dan een andere kleur.

FSR eindopdracht