Kennismaken met de Arduino

Kennismaken met de Arduino

Introductie

In deze serie opdrachten ga je leren werken met de Arduino. Wat is dat voor ding, wat zijn de mogelijkheden, maar vooral: wat kun jij er nou zelf mee doen?

Het doel is om een aantal vaardigheden aan te leren, zodat je de Arduino na deze module kunt gebruiken bij practica van de andere vakken. Daarvoor moet je met de Arduino kunnen meten en regelen, daarom is het einddoel om een basis meet-regelsysteem te kunnen bouwen.

Aansluiten van de Arduino

Deze handleiding bestaat uit 9 stappen die je moet doorlopen om met de Arduino te kunnen werken. De laatste stap is een test om te controleren of je alles goed hebt gedaan. 

  1. Leg een Arduino, een USB-kabel en een LED-lampje klaar

     
  2. Download de Arduino software
    http://arduino.cc/en/Main/Software
     
  3. Sluit de Arduino aan op de computer met de USB-kabel aan op de computer.
    Een groen LED-lampje (ON) op de Arduino zal gaan branden.

     
  4. Installeer de Driver
    Na stap 3 zal de computer zelf beginnen met de installatie van de driver software. De computer kan dit echter niet helemaal zelfstandig, je moet nu achtereenvolgens het volgende doen:
    Klik op het Start menu en open het Control Panel.


    In het Control Panel ga je naar ‘System and Security’.  


    Vervolgens selecteer je ‘System’.


    Open tenslotte de ‘Device Manager’.


    Klik in de Device Manager op ‘Ports (COM & LPT)’, hier moet nu de Arduino Uno (COM3) zichtbaar zijn. 
    Als de Arduino hier NIET bijstaat, zoek dan in ‘Other Devices’ naar ‘Unknown Device’.


    Klik met de rechter muisknop op ‘Arduino Uno (COM3)’ en selecteer de optie ‘Update Driver Software’.


    Selecteer nu de optie ‘Browse my computer for Driver software’.


    Je moet nu aangeven in welk mapje de Driver Software gezocht moet worden. Hiervoor klik je op ‘Browse’ en blader je via de map ‘Program Files’ naar de map met de naam ‘Arduino’, hierin staat de map ‘drivers’. Deze map moet je selecteren en vervolgens klik je op OK.
    LET OP: Selecteer NIET de map ‘FTDI USB Drivers’. 


    In het volgende scherm klik je op ‘Next’.


    Windows zal de installatie nu afmaken.
     
  5. Open de Arduino applicatie.
    Je krijgt nu het volgende scherm.

     
  6. Open het voorbeeld van het knipperende LED-lampje. 
    Ga in het ‘File’ menu naar ‘Examples’, kies vervolgens ’01. Basics’ en selecteer tenslotte ‘Blink’. Maximaliseer het gekregen scherm

     
  7. Selecteer het juiste type Arduino
    Ga in het 'Tools' menu naar 'Board' en selecteer nu 'Arduino Uno'

     
  8. Selecteer de juiste poort. 
    Ga in het ‘Tools’ menu naar ‘Port’ en selecteer nu ‘COM3’ (of hoger).

     
  9. Upload het programma
    Plaats het LED-lampje met de lange pin in poort 13 en de korte pin in de poort ernaast met de naam GND (afkorting van Ground).
    Upload het programma ‘Blink’ naar de Arduino door in de balk bovenaan op de tweede knop van links te klikken:

    Als je alle stappen goed hebt doorlopen heb je nu een knipperend LED-lampje.

    Je kunt nu zelf aan de slag met de Arduino!

 

Heb je nog een probleem met installeren van de drivers op Windows 8?
Volg dan de instructie op deze site: 
http://mytechblog.com/tutorials/arduino/install-arduino-drivers-on-windows-8/
 

Introductie aan de hand van ArduBlocks

De Arduino maakt gebruik van codes. Als je codes lastig vindt om mee te werken kun je gebruik maken van het programma ArduBlocks.
Uiteindelijk is het de bedoeling dat je programmeert in het Arduino programma.
Om aan het werken met codes te wennen kun je beginnen met ArduBlocks.
Een korte introductie van ArduBlocks vind je op de deze pagina.
Je mag natuurlijk ook gelijk beginnen met de codes. Lees dan verder op de volgende pagina.

Aan de slag met ArduBlocks

ArduBlocks is geen standaard Arduino onderdeel. Je kunt ArduBlocks downloaden via deze link.
Op deze site staat hoe je het moet installeren, je docent kan je hierbij helpen.

Na het installeren kun je ArduBlocks openen via het Arduino programma door naar Tools te gaan en vervolgens te kiezen voor ArduBlocks (zie onderstaande afbeelding)

Als je ArduBlocks geopend hebt kun je allerlei opdrachten naar het werkvlak slepen om een werkende 'code' te creëren.
Je gaat nu met behulp van ArduBlocks een code samenstellen om een LED lampje te laten knipperen.

De code zelf krijg je niet te zien in ArduBlocks, maar deze kun je vervolgens wel naar het Arduino programma uploaden.
Dit kun je doen door op de knop 'Upload' te drukken bovenaan in het scherm.

Maak nu het onderstaande programma door vanuit het linker menu opdrachten te slepen naar het werkvlak en eventuele waarden aan te passen in de blokken.

Met bovenstaande 'code' is de LED steeds één seconde aan en één seconde uit.
Deze code kun je uploaden naar de Arduino door bovenin het scherm op de knop 'Upload' te klikken.
Kijk eens in het Arduino programma hoe de code eruit ziet en of je de overeenkomsten ziet met de code in blokken.

Ga zelf eens proberen hoe je de 'code' aan kunt passen zodat de LED met andere aan/uit tijden gaat knipperen.
Door de waarden in de blokken aan te passen kun je de LED met andere aan/uit tijden laten knipperen.

Blokken uitbreiden

Programmeer codes kun je eindeloos uitbreiden. De bovenstaande 'code' kun je verder uitbreiden door de LED een S-O-S signaal te laten uitzenden.
Om dit te kunnen doen moet je waarden in de huidige blokken aanpassen, maar ook blokken toevoegen. 
Deze extra blokken heb je in de huidige 'code' ook al gebruikt om de LED te laten knipperen.

Ga eens verder experimenteren met de huidige 'code'.
Vergelijk de codes die je maakt eens met het volgende blokje in de introductie.

Knipperend LED-lampje

In het eerste stukje van de introductie heb je na het aansluiten van de Arduino een code geselecteerd waardoor er een LED lampje ging knipperen.

Hieronder staat die code en het aansluitschema nog een keer.

/* Het programma Blink laat een LED knipperen met 1 seconde aan en 1 seconde uit. Dit voorbeeld mag door iedereen gebruikt worden en is vrij toegankelijk. */
// Pin 13 is bij de meeste Arduino's standaard aangesloten op het LED lampje van de Arduino zelf. 
// Geef de variabele een naam (nu led):
int led = 13;
// De 'setup' opdracht wordt één keer uitgevoerd als op reset drukt:
void setup() {
// Definieer de digitale punt als uitgang signaal. 
pinMode(led, OUTPUT); }
// De 'loop' opdracht zorgt ervoor dat de onderdelen steeds opnieuw worden herhaald:
void loop() {
digitalWrite(led, HIGH);
// Zet de LED aan (HIGH is het spannings niveau)
delay(1000);
// Wacht één seconde
digitalWrite(led, LOW);
// Zet de LED uit door het spanningsniveau op laag (LOW) te zetten
delay(1000);
// Wacht één seconde
}

 

Met bovenstaande code is de LED steeds één seconde aan en één seconde uit.
Door de code aan te passen kun je de led met andere aan/uit tijden laten knipperen.

Ga zelf eens proberen hoe je de code aan kunt passen zodat de LED met andere aan/uit tijden gaat knipperen.

Code uitbreiden

Programmeer codes kun je eindeloos uitbreiden. De bovenstaande code kun je verder uitbreiden door de LED een S-O-S signaal te laten uitzenden.
Om dit te kunnen doen moet je dingen in de huidige code aanpassen, maar ook stukjes extra code toevoegen. 
Deze extra stukjes code kun je uit de huidige code halen om de LED te laten knipperen.

Ga eens verder experimenteren met de huidige code.

Sensoren

Sensoren zijn de zintuigen van een apparaat. Hiermee kunnen dingen uit de 'echte wereld' worden gevoeld en door de sensor omgezet worden in elektrische signalen die de Arduino kan verwerken.

In dit blok leer je een aantal sensoren kennen en gebruiken met de Arduino.

Zintuigen van de Arduino

Een sensor is dus een zintuig voor een apparaat. Voor de door mensen waar te nemen grootheden bestaan dus ook sensoren: 
 

Je ogen zien licht en kunnen onderscheiden of dit fel is of juist niet, en welke kleur het licht heeft. Voor de Arduino bestaan bijvoorbeeld lichtsensoren die de hoeveelheid licht meten dat op de sensor valt.


Fotoresistor


Licht-frequentie sensor

Je oren kunnen geluid horen in verschillende frequenties variërend van ongeveer 20 Hz tot 20.000 Hz, en kunnen ook onderscheiden of het om hard of zacht geluid gaat. Voor de apparaten bestaat een decibelmeter, waarmee je kunt bepalen hoe hard het geluid is, maar je kunt ook een microfoon gebruiken om geluid op te nemen.


Geluidsensor

Zo bestaan er dus voor alle zintuigen ook sensoren die hetzelfde kunnen 'voelen'. Maar er bestaan ook sensoren die meer kunnen voelen dan mensen. Denk bijvoorbeeld aan een infraroodsensor die warmte kan 'zien' of waarmee je het signaal van een afstandsbediening kunt detecteren. Of een ultrasoonsensor om afstand te bepalen tot een voorwerp, of juist de dichtheid zoals bij een echo.


Infraroodsensor


Ultrasoonsensor

Temperatuur bepalen

Sluit de temperatuursensor aan op de Arduino, met behulp van een breadboard. De middelste pin geeft de uitgangsspanning, die je omrekent naar temperatuur. Sluit die aan op analoge input 1 (A1). De andere twee pinnen voorzien de sensor van stroom, en worden aangesloten op 5V en GND (= ground = 0V). Let op, als je deze verkeerd aansluit brandt de sensor door!

De gebruikte temperatuursensor is de LM35, hieronder staat een plaatje uit de datasheet waarop je ziet hoe de pinnen moeten worden aangesloten.

 

Nu je de schakeling gebouwd hebt kun je verder met het computerprogramma naar de Arduino te uploaden.

 

int val;

int tempPin = 1;

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

void loop()
{
  val = analogRead(tempPin);
  float mv = ( val/1024.0)*5000; 
  float cel = mv/10;
 

  Serial.print("TEMPRATURE = ");
  Serial.print(cel);
  Serial.print("*C");
  Serial.println();
  delay(1000);
}

 

Upload het programma en open de Seriële monitor (onder Hulpmiddelen in het Arduino programma op de computer). Nu krijg je als alles goed gegaan is elke seconde de actuele waarde van de temperatuur die de sensor meet.

Oefening: De code leren kennen

Start

Afstand bepalen

Nu heb je net je eerste sensor aangesloten en de code daarvan beter bekeken. Om nu een andere sensor te gebruiken die net als de temperatuursensor een analoge waarde (spanning) geeft is min om meer de zelfde code nodig.

Kopiëer de code van net en sla deze op als een nieuw bestand met de naam ultrasoon_afstand. 

Sluit nu de sensor als hieronder aan.

Probeer de oude code zo aan te passen dat je de spanning van de twee ultrasoon-sensors kunt weergeven op de Serial Monitor. De afstand berekenen uit die spanning komt daarna.

Gebruikersinput

Wat is gebruikersinput

Als je een systeem gaat ontwikkelen, dan wil je dat het systeem uiteindelijk de dingen doet die jij instelt. Dit noem je gebruikersinput. Er zijn verschillende manieren waarop je een systeem kan laten doen wat je wil. Enkele voorbeelden hiervan zijn het gebruik van schakelaars, knoppen of een numerieke waarde.

Drukschakelaar

Als je een systeem gaat ontwikkelen, dan wil je dat het systeem uiteindelijk de dingen doet die jij instelt. Dit noem je gebruikersinput.
Er zijn verschillende manieren waarop je een systeem kan laten doen wat je wil.
Enkele voorbeelden hiervan zijn het gebruik van schakelaars, knoppen of een numerieke waarde.

De Arduino maakt gebruik van codes.
Om een LED (of ander apparaat) aan te laten gaan door het drukken op een knop (een knop zonder geheugen in dit voorbeeld) kun je onderstaande code gebruiken:

// start de code
void setup() {
pinMode(12,OUTPUT); // Dit is de uitgang waarop de LED of het apparaat is aangesloten
pinMode(4,INPUT); // Dit is de ingang waarop de drukknop is aangesloten
}
// door het instellen van een loop blijven de volgende stappen zich eindeloos herhalen
void loop() {
// Als er een hoog signaal van de knop is treed de LED of het andere apparaat in werking, anders blijft hij uit.
if(digitalRead(4) == HIGH)
{
digitalWrite(12,HIGH);
}else
{
digitalWrite(12,LOW);
}
}

Ga zelf eens uitzoeken wat er gebeurt als je een waarde ( bijvoorbeeld HIGH/LOW) in de code verandert.

Code uitbreiden

Programmeer codes kun je eindeloos uitbreiden. De bovenstaande code kun je verder uitbreiden door de LED langer te laten branden dan dat je de knop indrukt.
Om dit te kunnen doen moet je dingen uit een vorige code toevoegen. 

Ga eens verder experimenteren met de huidige code.

POT-meter

Je kunt een POT-meter gebruiken om waarden in te stellen.
In onderstaande code wordt de spanning uitgelezen die als gevolg van het draaien aan een POT-meter verandert.
Deze spanning kun je vervolgens gebruiken om je systeem de dingen te laten doen die je wil.

// start de code
void setup() {
// maak verbinding met de computer met een gegeven snelheid. 
Serial.begin(9600); }
// door het instellen van een loop blijven de volgende stappen zich eindeloos herhalen
void loop() {
// vanaf de POT-meter uitgang komt er een draad op de analoge input 0.
int sensor = analogRead(A0);
// de input spanning is 5 volt en het wordt afgelezen in 2^10 stappen.
float voltage = sensor * 5 / 1023;
// de spanning na de POT-meter wordt doorgegeven aan de computer
Serial.println(voltage);
// wacht een halve seconde voor de volgende meting
delay(500);
}

 

Ga zelf eens uitzoeken wat er gebeurt als je een waarde in de code verandert.

Code uitbreiden

Programmeer codes kun je eindeloos uitbreiden. De bovenstaande code kun je verder uitbreiden.
Probeer de code eens zodanig te veranderen dat de 'output' op je scherm het percentage doorgelaten spanning is (hoe ver de POT-meter dus gedraaid is).
Om dit te kunnen doen moet je dingen in de huidige code aanpassen, maar ook stukjes extra code toevoegen. 
Deze extra stukjes code kun je maken door achter het float commando een berekening te maken.

Ga eens verder experimenteren met de huidige code.

Numerieke waarden

Soms wil je geen schakelaar, (draai)knop of een andere externe bron gebruiken om iets in te stellen, dan kun je ook een code gebruiken om een numerieke waarde in te vullen als gebruikersinput.
Hiervoor gebruik je de volgende coderegel in je bestaande programma:

int waarde = 999;

De naam 'waarde' kun je veranderen voor iets wat je zelf wil, bijvoorbeeld 'lichtsterkte'.
Dit is de naam van de variabele.
De waarde van de variabele (999 in dit voorbeeld) kun je naar je eigen wil veranderen.
Je kunt alleen gehele waarden instellen.

Decimale getallen gebruiken

Als je een decimaal getal in wil vullen kun je een andere code invoegen in je bestaande programma, namelijk de volgende:

float waarde = 10.5;

Ook hier kun je de naam van de variabele en de waarde weer veranderen.

Code verder uitbreiden

Dit soort codes kun je niet alleen gebruiken om input te geven aan het programma, maar ook om berekeningen uit te voeren, op dezelfde manier als beschreven bij de POT-meter.
Zo is het mogelijk om een nieuwe waarde te berekenen aan de hand van gegevens uit je gebruikersinput in combinatie met iets wat je Arduino meet met een sensor.
Een voorbeeld van een dergelijke code om toe te voegen aan je huidige programma staat hieronder:

int waarde = 12;
int sensor = analogRead(A0);
float factor = 10.5;
float uitkomst = waarde * factor * sensor;

 

 

Belangrijke opmerking bij het schrijven van een code

Let bij het gebruik van dit soort codes op het maken van typfouten.
Je vergeet snel een puntkomma of gebruikt een kleine letter in plaats van een hoofdletter.
Als je dat doet werkt je code niet meer. Een dergelijke fout heet een syntax fout.
De software van de Arduino kan zulke fouten vinden en benoemen als je de code checkt met de 'verify' knop (zie onderstaande afbeelding).

 

Actuatoren

Een actuator zet elektrische energie om in andere vormen van energie. Dit kan bijvoorbeeld licht, warmte, beweging of geluid zijn. Als de actuator hiervoor een commando krijgt zal hij overgaan tot actie. Je stuurt de actuator aan met behulp van de code, waarbij je eventueel gebruik maakt van een sensor.
Een actuator is de laatste schakel in je circuit, het zorgt voor een waarneembare output. Een lamp, een sirene, een beeldscherm, een luidspreker, een ventilator en een elektromotor zijn allemaal voorbeelden van actuatoren.

LED-lampjes

LED-lampjes zetten elektrische stroom om in licht, en zijn dus ook actuatoren.

 

Benodigdheden:
- Jumper draden: Rood, zwart en nog een willekeurige draad
- Een LED-lampje
- Een 220 Ohm weerstandje (voor een overzicht van de kleurcodering kun je de volgende link gebruiken: http://www.esdsite.nl/elektronica/kleurcode.html)

                                                                                                          

 

Maak nu het volgende circuit:
Plaats de rode draad in de 5V uitgang op de Arduino en in de + kolom op het broodbord.
Plaats de zwarte draad in de Ground uitgang op de Arduino en in de - kolom op het broodbord.
Plaats het LED-lampje in het broodbord met de poten in 2 verschillende rijen van het broodbord. Plaats de lange poot in de rij boven de korte poot.
Verbind nu de lange poot van het LED-lampje met poort 2 met de draad die nog over is.
Plaats hiervoor het ene uiteinde van de draad in poort 2, het andere uiteinde plaats je op het broodbord in de rij waar ook de lange poot van het LED-lampje in zit.
Tenslotte plaats je de 220 Ohm weerstand op het broodbord. Het ene uiteinde van de weerstand plaats je in de rij waar ook de korte poot van het LED-lampje in zit.
Het andere uiteinde plaats je in de - kolom. Het circuit is nu rond.

              

 

Code:

void setup() {
  // declare the LED pins as outputs:
pinMode(2,OUTPUT);
}
void loop() {
 digitalWrite(2, HIGH);// turn the LED on pin 2 on
 delay(1000);//wait for a second
 digitalWrite(2,LOW);//turn the LED on pin 2 on
 delay(1000);//wait for a second
}

 

Je hebt nu weer een knipperend LED-lampje, zoals je al eerder hebt gezien. Nu hebben we het LED-lampje niet via poort 13 op de Arduino zelf ingeplugd, maar hebben we gebruik gemaakt van het breadboard.
Op deze manier kun je meer lampjes toevoegen. Je gaat hier in volgende oefening zelf mee experimenteren.

 

Oefening: LED-lampjes toevoegen

Start

Piezo

Een Piezo element kan gebruikt worden als een sensor, omdat het vibraties kan detecteren. Een Piezo element kan echter zelf ook geluid maken, je kunt het dus ook als actuator gebruiken. Het piezo element zet elektrische stroom dan om in geluid. Je kunt de toon bepalen door het opgeven van een frequentie. 

De volgende link geeft je een schema van tonen met de bijbehorende frequentie: http://phy.mtu.edu/~suits/notefreqs.html

Je gaat nu een deurbel maken. 

Benodigdheden:
- Jumper draden: Rood, zwart, 2 lange en 2 korte draden.
- Piezo element
- 10 kilo Ohm weerstandje
- Drukknopje

Je maakt hiermee het volgende circuit:

Code:

void setup() {
  //start serial communication
  Serial.begin(9600);
}
void loop() {
  // create a local variable to hold the input on pin A0
  int keyVal = analogRead(A0);
  // send the value from A0 to the Serial Monitor
  Serial.println(keyVal);
  // play the note corresponding to each value on A0
  if (keyVal == 1023) {
    // play the first frequency in the array on pin 8
    tone(2, 262);
  }
  else if (keyVal == 0) {
    // play the second frequency in the array on pin 8   noTone(2);
  }
}

 

Als je op de knop indrukt zal het Piezo element een toon produceren.

 

Oefening: Deurbel

Start

Servo motor

Een motor zet elektriche stroom om in beweging. Bij een servomotor is deze beweging een rotatie tot maximaal 180 graden. 
Servomotoren worden gebruikt in machines om bijvoorbeeld machine-onderdelen of producten in de juiste positie te brengen. Een bewakingscamera kan met behulp van een servomotor ook in verschillende posities gebracht worden.

We gaan nu bekijken hoe je de servomotor kunt aansluiten op de Arduino en hoe je de servomotor vervolgens kunt aansturen. 

Benodigdheden:
- Jumper draden: Rood, zwart, nog 1 andere draad
- Servomotor
- 3 male header pins (zie plaatje hieronder)



Maak hiermee het volgende circuit:



Met de rode draad zorg je ervoor dat het breadboard voorzien wordt van 5V, de zwarte draad verbindt het breadboard weer met Ground.
De drie male header pins zijn de verbinding tussen de servomotor en het breadboard. 
Let goed op dat je de zwarte draad van de servomotor met de - kolom (Ground) verbindt en de rode draad van de servomotor met de + kolom (5V) verbindt. 
De witte draad van de servomotor verbind je met poort 9 op de Arduino.

Code:

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                        // twelve servo objects can be created on most boards
 
int pos = 0;       // variable to store the servo position 
 
void setup() 

  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 

 
void loop() 

  for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                                  // in steps of 1 degree 
    myservo.write(pos);          // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);          // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
}

Met deze code laat je de servomotor een rotatie van 0 tot 180 graden en weer terug maken. 

Je kunt de positie van de arm van de servomotor ook zelf bepalen met behulp van een pot-meter.
Hiervoor gaan we de pot-meter toevoegen aan het eerder opgestelde circuit. 

Extra benodigdheden:
- POT-meter
- 3 lange jumper draden, 2 korte jumper draden

Je zet de pot-meter er op de volgende manier tussen:



Let erop dat de twee buitenste pinnetjes van de pot-meter met 5V en Ground verbonden zijn. 
Zorg dat je de middelste pin kunt laten aflezen door hem met een jumper draad te verbinden met analoge poort A0.

Code:

#include <Servo.h> 

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;             // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  Serial.print(val);
  val = map(val, 0, 1023, 0, 180);  // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                     // sets the servo position according to the scaled value 
  delay(15);                                  // waits for the servo to get there 

De POT-meter fungeert nu als een draaiknop waarmee je de positie van de arm kunt bepalen.

LCD scherm

Aan sluiten van een standaard LCD scherm.

Het aansluiten van een LCD display

Het aansluiten van een LCD display was vroeger erg ingewikkeld, maar tegenwoordig is dat een fluitje van een cent. De Arduino software kent een flink aantal libraries (bibliotheken) die al het moelijke werk uit handen nemen. 




 

Kijk maar eens naar het onderstaande programma. Je ziet in het programma bovenin het commando #include <LiquidCrystal.h> Dat betekent niets anders dan dat de software straks een beetje extra code mee upload naar de Arduino, zodat je alleen nog maar de tekst hoeft in te typen die je wilt laten zien na het commando lcd.print("Elektrotechniek!");

 

Je gebruikt een normaal 4 bits (geen seriëel) display zodat zodat het commando LiquidCrystal wil weten waar de pennen rs, rw, d4 t/m d7 zijn aangesloten. Wil je meer weten van displays bekijk dan eens een datasheet.

Het commando lcd.setCursor(0, 1); zorgt er voor dat de nieuw te plaatsen tekst op de tweede regel komt. Zou je een display hebben met vier regels dan zou de start van de derde regel dus plaats vinden op regel 0,2. Dat klinkt vreemd, maar de positie 0,0 is namelijk de eerste positie op de eerste regel.

Je kunt de sketch ook hier downloaden.


 

 

Als je ook nog een video wil zien over hoe je het LCD scherm aansluit op een Arduino, kijk volgende video:

 

 

Combineren van LCD met Sensor


Het koppelen van de temperatuur sensor aan een Arduino met een LCD scherm, waarbij de temperatuur wordt weergegeven in graden Fahrenheit.
 
 

Deze les laat op een interessante manier zien hoe je met de Arduino de temperatuur van de omgeving kunt meten en zichtbaar kunt maken op een LCD 16X2 scherm in graden Fahrenheit door gebruik te maken van delen van de programmatuur en de LM35DZ temperatuursensor. 

 

Hiervoor zijn de volgende componenten nodig:

- 1 Arduino board

- 1 LCD 16x2 scherm

- 1 10K potentiometer

- 1 Temperature LM35 sensor

- Jumpers 

Deze sensor meet de externe temperatuur en converteert deze in een bijbehoorende spannings waarde.  In deze schakeling koppelen we de output Vvan de sensor aan de Arduino pin A0, die verandert het in de floatwaarde van de temperatuur, daarna, laten we het zien op het LCD scherm.  De 10K potentiometer kan het contrast van het scherm aanpassen.

 

Maak de onderstaande schakeling met de Arduino en de benodigde componenten:

 

 

Open de Arduino's IDE en voeg de volgende code toe:

 

#include  <LiquidCrystal.h>         // Include the library to use a LCD display

#define          sensor           0        // Define the A0 pin as “sensor”

 

int  Vin;           //  Variable to read the value from the Arduino’s pin

float  Temperature; //  Variable that receives the converted voltage value to temperature

float     TF; // Variable to receive the converted value from  ºC to ºF

 

LiquidCrystal  lcd    (12, 11, 5, 4, 3, 2); 

/* The function above declares which Arduino’s pins will be used for controlling the LCD */

void  setup()

{

  lcd.begin(16, 2);                            //  It tells the Arduino that the display is a 16x2 type

  lcd.print("Temperature: ");           //  Send the text to the screen of the display.

}

void  loop()

{

  Vin = analogRead (sensor);  /*   Tells the Arduino to read the pin and stores the value in “Vin” */

  Temperature=(500*Vin)/1023;  /* Converts the voltage value into temperature and stores it into the “Temperature”  variable  (in  ºC)*/

TF = ((9*Temperature)/5)+32; // Converts  ºC to ºF

  lcd.setCursor(0, 1);           // Moves  the cursor of the display to the next line

  lcd.print(TF);    // Exhibits the value of the temperature on the display

  lcd.print(" F");         // Writes “F” to indicate that it is in Fahrenheit scale.

 

  delay(1000);  //  Waits for a second to read the pin again

}

 

Als laatste stap laad je de code naar je Arduino.

 

 

Je project om de temperatuur te laten zien is bijna klaar. De temperatuur wordt op het scherm getoond in graden Farenheit. Kijk in je code om dit te veranderen naar graden Celcius.

 

Note: de LM35DZ sensor heeft een temperatuur range van waarde van tussen -55ºC to 150ºC.

Als je geineresseerd bent in de uitleg hoe de programmatuur dit om rekent van spanning naar temperatuur lees dan het volgende door:

In deze sensor, voor elke 1 graden Celcius ontvangen, de V0 output is verhoogt met 10mV, in de range van 0 tot 5V, met 10 bits resolutie voor Analoog/Digitaal conversie (1024 verschillende waardes om de temperatuur te presenteren).

 

Dus de maximum waarde (1023, omdat het is van 0 tot 1023) is dan 5V.  De helft komt dan overeen met 511 of 2,5V en zo voort.

Voor de berekening, is het 5V output van de sensor overeenkomen met 5000C (Wat verschillend is van de realiteit).

Alhoewel, dit voorbeeld geeft het ons de volgende generieke relatie:

 

Temperatuur  ----- Vin

         500ºC  ----- 1023              (maximale waarde)

 

Dit geeft ons:

Temperatuur = (500*Vin)/1023, maar omdat het in ºC is en we het in ºF willen, zullen we het converteren:

TF = ((9*Temperatuur)/5)+32, en dit is de waarde die getoond wordt op het LCD scherm.

 

Met deze uitleg zou je ook in staat moeten zijn om de temperatuur in Kelvin op het scherm te laten komen.

Tenslotte: maak de oefening af zodanig dat de temperatuur in Kelvin op het scherm komt te staan.

 

Je kunt ook nog de volgende video bekijken:

 

Meet- en regelsysteem

Eindopdrachten

In de eindopdracht ga je sensoren, gebruikersinput en actuatoren combineren tot een meet- en regelsysteem.
Je kunt hierbij gebruik maken van de gegeven codes in de modules.
Als het eindproduct af is geef je hierover een presentatie aan de rest van de groep waarin je jouw eindproduct presenteert en laat je zien hoe je hebt gezorgd dat het werkt. In de beoordeling worden ook originaliteit en de moeilijkheidsgraad van het door jou gemaakte eindproduct meegewogen.

Je mag zelf een project bedenken dat je wilt maken, je mag ook kiezen voor een van de hieronder omschreven eindopdrachten.

Weerstation

Maak een weerstation dat van de volgende grootheden de gemeten waarden laat zien:
- Temperatuur
- Luchtvochtigheid

Je kunt deze waarden op een computerscherm laten zien of op een LCD-scherm. Als je nog andere dingen wilt toevoegen (bijvoorbeeld de tijd), dan mag dit natuurlijk ook.

Verkeerslicht(en)

Maak een werkend verkeerslicht waarbij je door middel van een sensor of een drukknop zorgt dat het verkeerslicht op groen springt. Breidt de opdracht eventueel uit tot het maken van een functionerend kruispunt.

Automatische fietsverlichting

Een automatische fietsverlichting heeft een lichtsensor en een bewegingssensor. Wordt het donker en beweegt de fiets, dan gaat het achterlicht vanzelf branden. In het achterlicht zelf bevinden zich drie LED-lampjes. De lichtsensor geeft een spanning van 1,5V af als het donker begint te worden. De bewegingssensor geeft een tweewaardig signaal af. Het signaal is hoog als de fiets beweegt en laag als de fiets stilstaat.

Binaire klok

Maak een binaire klok met de Arduino. Maak gebruik van het web om ideeën op te doen om tot een creatief prototype te komen. Er zijn veel varianten mogelijk.

Stopwatch

Een stopwatch bevat drie drukschakelaars. Elke drukschakelaar geeft een hoog signaal aan de teller als de knop even wordt ingedrukt. De eerste drukschakelaar zorgt voor het starten van de stopwatch. De tweede stopt de stopwatch. De derde zet de stopwatch op nul.

Lichtautomaat

In een lokaal is een automatisch systeem om de lampen aan en uit te schakelen.
De lampen zijn aan als tegelijkertijd aan de volgende twee voorwaarden is voldaan: er is weinig licht in het lokaal en er is beweging, of er is beweging geweest gedurdende de laatste 8 minuten terwijl er weinig licht was. Zo niet, dan zijn de lampen uit.
Het signaal van de lichtsensor wordt groter als er meer licht op valt.
De bewegingssensor geeft een hoog signaal als er iemand beweegt in het lokaal.
De pulsgenerator geeft één puls per minuut. De LED stelt de verlichting in het lokaal voor.

Plantenwatermachine

Met de Arduino, een bodemvochtigheidssensor en een pompje kun je eenvoudig een 'plantenwatermachine' maken. De spullen die je zou kunnen gebruiken zijn goedkoop op internet te krijgen:


- Pompje voor aquarium: 
http://www.banggood.com/Mini-Submersible-DC-Motor-Pump-3V-120LH-Low-Noise-Max-Lift-p-87235.html
- Stukje slang voor aan de pomp  (kies 7*10mm)
http://www.banggood.com/2M-Food-Grade-Medical-Silicone-Hose-Inner-Diameter-from-2-7MM-p-967089.html
- Bodemvochtigheidssensor
http://www.banggood.com/Soil-Hygrometer-Humidity-Detection-Module-Moisture-Sensor-For-Arduino-p-79227.html

Je kunt er zelfs zoiets van maken als je een echte uitdaging wilt.

 

Docenten Handleiding

Docentenhandleiding Arduino

Handleiding voor bij de lessenserie Kennismaken met Arduino.

De Arduino is ruim 10 jaar geleden ontwikkeld en wordt tegenwoordig steeds vaker ingezet in het onderwijs.  De orginele Arduino UNO komt uit Italie als handig applicatie device dat kan omgaan met output- en inputsignalen.  Met een Arduino kun je eenvoudig een meet- en regelsysteem bouwen.  Het kan LED's laten knipperen of reageren op temperauur, licht en/of beweging, maar dat is nog maar het begin. De mogelijkheden zijn onbeperkt en het is nog goedkoop ook.

De Arduino-community is sterk aan het groeien.  Voor bijna iedere applicatie kun je wel een voorbeeld of tutorial vinden. Google je op "Applicatie's met Arduino" vind je ongetwijfeld iets van instructables.com.  Niet alles wat je vindt kun je direct gebruiken, maar onderschat de leerlingen niet.

Om met een Arduino te kunnen werken moeten de leerlingen twee dingen kennen.  Een stukje basiselectronica en programmeren.  Van basiskennis over electronica is nodig: Stroomkring, spanning, schakelaar, plus/minpool, weerstanden en LED's aansluiten.  Indien je met de analoge ingangssignalen wilt werken, is kennis van het principe van spanningsverdeler nodig.  Inzake programmeren is er een standaard Arduino IDE software dat werkt via tekstregels, de in te voeren tekst regels lijken veel op de C++ programmeer taal.  Ook kun je gebruik maken van de modulaire programmeer taal Ardu-blocks.  Communicatie van PC naar de Arduino wordt met software geregeld en loopt via een USB poort.

 

Betadidactische benadering

We hebben geprobeerd deze lesmodule zo veel mogelijk constructivistisch in te richten. Wij willen de leerlingen onderzoekend laten leren door codes aan ze te presenteren, waarmee ze zelf kunnen experimenteren. Op die manier kunnen ze leren omgaan met programmeren, zonder dat het aanvoelt als een cursus programmeren.

Daarnaast hebben we geprobeerd de stukken tekst zo kort mogelijk te houden, zodat leerlingen zelf op zoek moeten als ze nog meer informatie nodig hebben.

De eindopdracht zullen we probleemgestuurd inrichten. Leerlingen moeten zelf onderzoeken welke codes uit het lesmateriaal ze nodig hebben, ze moeten deze codes nu zelf gaan aanpassen en hun eigen opstelling maken.

 

Hoe ga je van start?

Na wat uitleg over het lessen pakket en de opbouw er van, kunnen de leerlingen aan de slag met de eerste oprachten.

Naast de Arduino-lessen kunnen de leerlingen het geheel afsluiten met een eigen gekozen project. Aan het einde zijn verschillende project ideeën geformuleerd. Hieruit kan gekozen worden of een van de aantal goede Nederlandstalige voorbeelden, die de komende tijd zeker ontworpen zullen gaan worden.

Voor de gehele module is ongeveer 12 uur nodig. De bedoeling is dat de leerlingen homogene groepjes van twee gaan formeren. Het project bestaat uit een applicatie systeem ontwerp, een concrete proto-type toepassing naar aanleiding van het ontwerp, de bijbehorende documentatie/beschrijving en een presentatie. Voor de beoordeling van het project kan gebruik gemaakt worden van het volgende beoordelingsschema.  Uiterard kan ook een eigen matrix/rubriks gebruikt/gemaakt worden.

 

Lessen

De modules zijn gemaakt om leerlingen zelfstandig op een constructivistische manier te laten werken. Zorg dat u een aantal van de oefeningen zelf ook al eens gedaan hebt.

Als leerlingen eenmaal begrijpen dat er digitale en analoge pinnen zijn welke als input of output gedefinieerd kunnen worden om waardes naar toe te schrijven of mee uit te lezen, kunnen ze op een cognitivistische leerstyle heel veel leuke projecten uitvoeren.  He is de bedoeling dat het project met twee-tallen gedaan wordt zoals eerder beschreven.

 

Niveau

De module is geschikt voor HAVO en VWO leerjaar 4 (voor DNS ontworpen op niveau VWO 4). Het is niet noodzakelijk dat leerlingen basis programmeer concepten al kennen. Het Arduino platform is zeker heel geschikt om basis programmeer vaardigheden aan te leren.

 Talen zoals Python, Pascal, C# of C++ zijn erg geschikt als basis voor deze module, hoewel het met Visual Basic of eventueel iets als PHP ook al wel zou moeten kunnen.

 

Een Arduino is....

een platform bestaande uit:

- Een Atmel AVR microcontroller
- Een Arduino bordje waarmee je de chip kunt gebruiken
- Een programmeertool + taal waarmee de Arduino wat kan doen!
- Het ‘shield’ concept zodat extra functionaliteit in een handomdraai toegevoegd wordt aan de Arduino basis

 

Leveranciers en hardware

Een paar tips over leveranciers e.d. Ten eerste staat op arduino.cc een lijst van hardware leveranciers (ook voor Nederland). Freeduino.eu heeft kits gemaakt voor een Hogeschool en daar zijn positieve ervaringen mee.
A-blocks.org heeft handige kits om zonder solderen (of alleen éénmalig solderen) sensoren en actuatoren meerdere malen toe te kunnen passen. Bij andere kits zullen LED’s e.d. bij verkeerd gebruik soms vervangen moeten worden.
Het is ook handig om voldoende breadboard draadjes in voorraad te hebben. Deze raken in de praktijk snel op bij opdrachten zoals het verkeerslicht.
Soms is het handig als leerlingen bepaalde sensoren (bijv. voor de bumper) solderen. Dit kunt u natuurlijk ook als docent doen.
Zorg ook dat u wat tangetjes, schoevendraaiers e.d. in de klas heeft zodat leerlingen snel aan de gang kunnen.

Goedkope (maar goede) Arduino klonen en ander gerelateerd materiaal is zeer goedkoop te krijgen op Chinese webshops. Let hierbij wel op dat een bestelling 3 tot 4 weken onderweg zal zijn.
http://www.banggood.com/buy/Arduino.html
http://www.dx.com/s/arduino

 

Software en klasgebruik

Op Arduino.cc is de Arduino omgeving als Open Source te downloaden. Deze is op zich prima als netwerkversie te installeren. Leerlingen moeten soms wel bij de libraries map kunnen als zij bepaalde sensoren willen gebruiken of zelf de bibliotheek willen uitbreiden. Eventueel kunt u ook zelf eerst zo veel mogelijk uitbreidingen doen aan de bibliotheek en deze aan systeembeheer leveren. Arduino is overigens platform onafhankelijk en het uitpakken van de ZIP naar een USB stick is ook al voldoende om Arduino aan de praat te krijgen.

 

Bij de eindopdrachten

Stimuleer leerlingen  in twee tallen zo veel mogelijk om zelf een eindopdracht te verzinnen. Er worden (in de eerste fase) twee eindopdrachten aangedragen:

Er zijn tal van andere toepassingen mogelijk, zo bedachten leerlingen uit de testgroep een kubus (gemaakt in een zogenaamd FabLab met Plexiglas) met een acceleratiesensor welke verandert van kleur bij het detecteren van beweging.(Tip: Google: “resistor color code calculator”) 

 

Veel voorkomende syntax errors

Fout bij uploaden
avrdude: ser_open(): can't open device "\\.\COM6": Het systeem kan het opgegeven bestand niet vinden.

De Arduino is waarschijnlijk niet goed aangeloten op de PC. Kijk of de USB kabel is aangesloten.
Kies onder Hulpmiddelen > Poort de COM poort waar (Arduino) achter staat.

Fout bij compileren
link.ino: In function 'void loop()':
Blink.ino:29:1: error: expected ';' before '}' token
Fout bij compileren.

Waarschijnlijk is dit de meest voorkomende syntax fout, de vergeten puntkomma na een functie.
Er staat bij in de hoeveelste regel van de code (hier29). 

Link naar overige syntax errors voor Arduino en C++
http://womble.decadent.org.uk/c++/syntax-errors.html

 

Andere links en/of referentie sites

NVON.tk/fun-electro  voor lespakk1etten en cursussen

NVON.tk/beta-steun  cursus en DOT over de Arduino ban Betasteunpunt Zuid-Holland

NVON.tk/verdiep  Cursussen beginners en gevorderen van de Verdiep (Be).

NVON.tk/ardui-forum  forum voor als je er niet uit komt.

 

Beoordelingsmodel

Voor de praktisch opdracht kan het volgende model gebruikt worden.

De beoordeling ( kan gebeuren) gebeurt op basis van een groot aantal punten, die hierna vermeld worden. Zij wordt mede bepaald door de vorm van je toepassing/ applicatie. Onder elk punt worden een aantal criteria vermeld, waarop (indien van toepassing) de beoordeling voornamelijk gebaseerd is. Achter elk beoordelingscriterium is tussen haakjes de bijbehorende mogelijke score vermeld. De score wordt per onderdeel vermeld en levert een maximale totaalscore van 100 op. Het cijfer wordt berekend door het totaal aantal behaalde punten te delen door 10.

Het niet op tijd inleveren van onderdelen, zoals aangegeven een vooraf afgesproken het tijdpad, betekent per te laat ingeleverd onderdeel 5 punten in mindering op het totaal van 100 punten.

 

Beoordelingssysteem

Keuze applicatie (1-3)

Hoort de applicatie bij het thema?
Past de applicatie bij de gekozen vakken ?

Voldoende inhoudelijk niveau (1-5)

Diepgang / Complexiteit
Originaliteit
Onderzoeksvraag
(Relevante) deelvragen    

Plan van aanpak (1-10) 

Duidelijkheid
Uitvoerbaarheid
Deelactiviteiten
Geeft het antwoord op de onderzoeksvraag ?
Tijdsplanning
Maken van afspraken met docent en TOA
Veiligheid    

Verzamelde gegevens (informatiebronnen) (1-5)

Voldoende
Variatie
Relevant
Betrouwbaar

Mate van zelfstandigheid (1-7)

Bij het verzamelen van gegevens
Bij keuze van de applicatie
Bij opstellen van het systeem ontwerp
Bij problemen oplossen
Bij nemen van (juiste) beslissingen
Bij meedenken
Creativiteit, inventiviteit

Kwaliteit van het logboek(1-5)

Soort informatie
Overzichtelijkheid

Uitvoering van het systeem ontwerp (in relatie met plan van aanpak) (1-8)

Tijdsplanning
Afwijken van aanpak
Veiligheid

Gegevens(verwerking)(1-8)
Voldoende relevante informatie/waarnemingen/metingen
Leesbaarheid
Relatie met theorie
Kwaliteit

Afwerking (1-5)

Op basis gegevens
complexiteit

Mate van zelfstandigheid(1-8)

Bij het verwerken van de gegevens
Bij opstellen conclusie
Bij het oplossen van problemen
Bij het nemen van (juiste) beslissingen
Bij meedenken
Creativitet, inventiviteit
Evt. functioneren in de groep

Inzet(1-8)

Werkverdeling onder de team leden
Betrokkenheid van de team leden

Logboek(1-5)

Soort informatie
Overzichtelijkheid
Volledigheid
Inhoudelijke keuzes en motivering
Diepgang

Bronvermelding(1-4)

Aanwezig
Notatie

Presentatie(1-3)

Educatie gehalte
Creativiteit
Detailering

Structuur / Opbouw (1-4)

Introductie / inleiding
Logische vervolg van presentatie
Afsluiting / afronding

Vormgeving (1-3)

Duur van de presentatie
Consistentie van het verhaal
Gebruik van audiovisuele middelen

Taalgebruik (1-4)

Correct Nederlands
Gericht op doelgroep
Woordenschat
Creativiteit

Stemgebruik (1-3)

Verstaanbaarheid
Stemgebruik / intonatie / muziek
Vlotheid van de spreker

Non verbale communicatie (1-3)

Enthousiasme
Houding
Uitstraling

 

 

  • Het arrangement Kennismaken met de Arduino is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteurs
    Hans Kolk Je moet eerst inloggen om feedback aan de auteur te kunnen geven.
    Laatst gewijzigd
    2015-06-24 13:48:39
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 3.0 Nederlands licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 3.0 Nederland licentie.

    http://fritzing.org/home/

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Toelichting
    Deze opdracht volgt uit de evaluatie van het NLT-thema ‘meten en regelen’. In dit thema hebben de leerlingen van 5VWO de arduino toegepast bij een zelfgebouwde klimaatkamer. In de evaluatie geven de leerlingen aan dat zij enorm geholpen zouden zijn (te beginnen in het 2 de semester van klas 4) met een overzichtelijk, beknopt, lesprogramma over de arduino, eenvoudig programmeren in C+, en enkele duidelijke toepassingen met uitwerkingen. Zij willen hun ervaringen dan ook graag delen met de ESoE-studenten en het project ook verder ondersteunen.
    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
  • Downloaden

    Het volledige arrangement is in de onderstaande formaten te downloaden.

    Metadata

    LTI

    Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI koppeling aan te gaan.

    Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.

    Arrangement

    Oefeningen en toetsen

    De code leren kennen

    LED-lampjes toevoegen

    Deurbel

    IMSCC package

    Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.

    QTI

    Oefeningen en toetsen van dit arrangement kun je ook downloaden als QTI. Dit bestaat uit een ZIP bestand dat alle informatie bevat over de specifieke oefening of toets; volgorde van de vragen, afbeeldingen, te behalen punten, etc. Omgevingen met een QTI player kunnen QTI afspelen.

    Meer informatie voor ontwikkelaars

    Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op onze Developers Wiki.