Digitaal IN/OUT: Op de pagina 'digitaal OUT/IN' kon je lezen dat digitale signalen slechts twee mogelijkheden hebben. Een lamp kan aan of uit zijn. Een schakelaar kan ingedrukt zijn of niet ingedrukt zijn. Hier kan je al heel wat toepassingen mee bedenken en maken. Bijvoorbeeld: als het raam wordt geopend, dan moet het alarm afgaan.
Wanneer onze Arduino via de digitalRead functie signalen leest, dan kijkt onze Arduino dus enkel of er wel of geen spanning is op een pin. Wanneer hij via digitalWrite signalen doorgeeft naar een pin, dan is dat dus enkel AAN - HIGH (5Volt) of UIT - LOW (0Volt).
Wanneer een digitaal signaal enkel aan of uit kan zijn, dan kan een analoog signaal uit veel meer toestanden bestaan.
Analoog IN: Wanneer onze Arduino analoge signalen gaat lezen, dan gaat hij heel nauwkeurig de spanning meten op een bepaalde pin. Deze spanning tussen 0V en 5V wordt dan omgezet naar een getal tussen 0 en 1023 dat in een programma gebruikt kan worden.
Analoog OUT: Eigenlijk kan onze Arduino geen echte analoge signalen doorgeven. Hij gebruikt wel een trucje ('PWM' waarover hieronder meer in deel 5) om een analoog signaal na te bootsen. Een waarde tussen 0 en 255 wordt doorgegeven als een spanning tussen 0V en 5V.
Zowel bij de Brainbox als bij de UNO kan je de digitale pins als INPUT en als OUTPUT gebruiken. Bij de analoge pins is gebruik je andere pins voor INPUT dan voor OUTPUT.
Analog-IN pins op je Brainbox Arduino: Hier kan je de digitale contactpunten ook gebruiken als analoge IN-pins. Voor de nummer moet je dan wel naar het eerste nummer kijken: A0/18 is dus pin A0 en A5/23 is dus pin A5.
Analog-IN pins op de Arduino UNO: Hier kan je pin A0 tot A5 gebruiken.
De pins zijn op de afbeeldingen aangeduid met een rode kader.
Wanneer onze Arduino een analoog signaal leest, dan meet hij erg nauwkeurig de spanning op een pin. Zo wordt het mogelijk om heel wat sensoren aan te sluiten op onze Arduino. In het eerste voorbeeld gebruiken we een potentiometer als invoerorgaan. Meer uitleg over de potentiometer vind je bij Onderdelen. Lees dat zeker nog even voor je aan de oefening begint!
De code:
Stap 1) Voor welke pin gebruik je liever een naam?
const int potmeter = A0;
Stap 2) Welke variabelen gebruik je om een waarde bij te houden?
int potVal = 0;
Stap 3) Welke pin is een input welke pin is een output?
pinMode (potmeter, INPUT);
Stap 4) Code voor Serial Monitor?
Serial.begin (9600);
Stap 5) Wat moet er gebeuren in je programma?
int potVal = analogRead (A0);
Serial.println (potVal);
Aansluiting op een Brainbox
Op je Brainbox kan je de drie pins van je potmeter meteen vastschroeven.
De Serial Monitor vind je rechts bovenaan wanneer je binnen de Arduino IDE (programmeeromgeving) werkt. Wanneer je op het vergrootglas klik opent er een nieuw venster waar je de waarde van je potmeter kan lezen.
Aansluiting op de Arduino UNO (in Tinkercad)
Bij een Arduino UNO zal je een breadboard en enkele snoeren moeten gebruiken. De middelste pin van je potmeter moet altijd naar je signaalpin gaan. Dat is de analoge IN pin die je gebruikt om je signaal te lezen.
De andere pins gaan naar GND en 5V.
Indien je in Tinkercad werkt kan je de Serial Monitor vinden onder het veld waar je je code schrijft.
Binnen Tinkercad kan je ook simulaties maken met sensoren. Je kan dan testen of je code en schakeling ook werken zoals dat zou moeten.
In dit filmpje zie je welke stappen je daarvoor moet doorlopen.
Je kan ook zien hoe je de Serial Monitor binnen Tinkercad gebruikt.
Lees delen 1 tot 4 hierboven grondig en zorg dat je alles goed begrijpt. Lees ook even het stukje over de Serial Monitor op de Arduino pagina.
Maak in Tinkercad een nieuwe schakeling en bouw stap voor stap de code op zodat de waarde van je potmeter leesbaar is in de Serial Monitor.
Verander de naam van je schakeling in Oef3_Naam_Voornaam.
Test je code door de potmeter langzaam van links naar rechts te draaien en kijk of je de juiste waarde kan lezen op je Serial Monitor. Noteer de beginwaarde en de eindwaarde die je krijgt op je Serial Monitor.
In je schakeling ga je nu de twee snoeren die naar de GND en 5V van de potmeter gaan, van plaats wisselen. Open nu je Serial Plotter en draai opnieuw je potmeter langzaam van links naar rechts. Noteer opnieuw de beginwaarde en de eindwaarde die je kan aflezen op je Serial Plotter.
Herlees nog even deel 1 tot 4 hierboven. Controleer nadien met de lijst hieronder of je alle onderdelen begrijpt en kan toepassen.
Ga naar de bookwidget in Smartschool en maak de test over Analog IN.
Heb je vragen? Zet ze in het forum op Smartschool.
Wat zou je na dit deel moeten kennen en kunnen? Je kan...
Zoals gezegd kan onze Arduino geen echt analoog signaal uitsturen. Om toch analoge signalen te kunnen geven wordt een trucje gebruikt: PWM (Pulse Width Modulation). Door heel snel na elkaar te wisselen tussen AAN (5V) en UIT (0V) signalen en de verhouding tussen de tijdsduur AAN en de tijdsduur UIT te verlengen of te verkorten wordt een analoog signaal nagebootst.
Bij analoge INPUT zagen we dat onze Arduino bij het lezen van de spanning tussen 0 en 5V, 1024 verschillende waarden kan lezen. Die spanning wordt dus vertaald naar een getal tussen 0 en 1023.
Bij analoge OUTPUT kan onze Arduino maar 256 verschillende waarden doorsturen. Een getal tussen 0 en 255 wordt dan omgezet naar een PWM signaal.
Hieronder zie je met een rode stip welke pins je als Analog OUT pins of PWM pins kan gebruiken op de Brainbox of de UNO:
Bij de UNO zijn dat alle pins met een tilde (~): 3, 5, 6, 9, 10, 11.
Bij de Brainbox zijn dat pins: 5,6,9,10 en 3.
Let op, op de Brainbox moet je, behalve bij pin 3, ook je adapter aansluiten wanneer je PWM pins wil gebruiken. Je moet dan ook de jumper in het paarse vlak versteken naar '5V from adapter'. De jumper bovenaan mag zowel op USB als op adapter staan. Bovenaan en onderaan moet en mag slechts één jumper staan.
In het voorbeeld hieronder willen we met een potmeter een LED aansturen. Een potmeter is eigenlijk een draaiknop die bij het draaien een steeds grotere weerstand wordt. Hoe groter de weerstand op de potmeter, hoe minder licht onze LED mag geven, hoe kleiner de weerstand hoe meer licht de LED mag geven.
De code:
Stap 1) Voor welke pin gebruik je liever een naam?
const int potmeter = A0;
const int LED = 3;
Stap 2) Welke variabelen gebruik je om een waarde bij te houden?
int potVal = 0;
int LEDVal = 0;
Stap 3) Welke pin is een input welke pin is een output?
pinMode (LED, OUTPUT);
pinMode (potmeter, INPUT);
Stap 4) Code voor Serial Monitor?
Serial.begin (9600);
Stap 5) Wat moet er gebeuren in je programma?
Lees de waarde van de potmeter en sla dat getal op in variabele potVal:
int potVal = analogRead (A0);
De waarde van potVal is een waarde tussen 0 en 1023. Om deze waarde door te sturen naar een PWM-pin moeten we die waarde omzetten naar een verhouding tussen 0 en 255. Dat kan door een map-functie te gebruiken.
De waarde LEDVal is de waarde van potval tussen 0 en 1023 die omgezet is naar een waarde tussen 0 en 255:
LEDVal = map(potVal, 0, 1023, 0, 255);
Noteer de waarde van LEDVal in de Serial Monitor:
Serial.println (potVal);
De map functie:
Met een map() functie kan je een getal binnen een bepaalde verhouding omzetten naar een andere verhouding. Bijvoorbeeld:
LEDVal = map(potVal, 0, 1023, 0, 255);
Hier wordt de waarde potVal die tussen 0 en 1023 ligt, omgezet naar een waarde die tussen 0 en 255 ligt. Deze omgezette waarde is de waarde LEDVal.
Wanneer de potmeter halverwege staat, zal ook de LED maar 2,5V krijgen.
De aansluiting op de Brainbox en op de UNO is eigenlijk hetzelfde. Hieronder zie je de aansluiting op de UNO in Tinkercad.
In Tinkercad kan je tijdens een simulatie aan de potmer draaien om een hogere of lagere weerstand te geven.
Lees stappen 5, 6, 7 en 8 hierboven en zorg dat je alle stappen goed begrijpt.
Ga nu in Tinkercad zelfstandig een nieuwe schakeling met de bijhorende code maken waarbij je een LED aanstuurt met een potmeter. De naam van je nieuwe schakeling is Oef4_Naam_Voornaam.
Noteer de toestand van je LED wanneer je potmeter helemaal naar links staat (brandt de LED niet, zacht of hard?) en de toestand van je LED wanneer je pometer helemaal naar rechts staat (brandt de LED niet, zacht of hard?).
Ga nu in je code de twee laatste getallen in je map functie omdraaien. Doe dezelfde test. Wat gebeurt er nu?
Noteer je resultaten in de bookwidget.
Heb je vragen? Zet ze in het forum op Smartschool.
Analoog betekent dat er een nauwkeurige waarde tussen 0V en 5V gelezen en doorgegeven kan worden.
Met de analogRead() functie leest onze Arduino op een pin de spanning tussen 0V en 5V, en zet die om naar een getal tussen 0 en 1023.
Met de analogWrite() functie zal onze Arduino een getal tussen 0 en 255 omzetten naar een spanning tussen 0V en 5V die aan een pin wordt doorgegeven.
Om een verhouding tussen 0 en 1023 om te zetten naar een verhouding tussen 0 en 255 kan je gebruik maken van de map() functie.