JCWeetje

Historische JCWeetjesWist-Je-DatjesRuimtekidsTechniek & WetenschapCultuurkriebelsKiddoeVariaarchief

Je PC binnenstebuiten

In deze tweede Arduino tutorial zullen we dieper ingaan op het programmeren. We zullen ons deze keer niet meer beperken tot het knipperen van een LED en maken het iets ingewikkelder. In het eerste gedeelte van deze tutorial zullen we eerst wat dieper ingaan op verschillende aspecten van het programmeren.

Variabelen

Variabelen worden in het programmeren vaak gebruikt om tussenresultaten op te slaan. Er zijn verschillende typen variabelen die elk dienen om een bepaald soort getal of tekst in op te slaan:

  • staat voor integer. In dit type variabele kan men natuurlijke getallen opslaan
  • in dit type kan men kommagetallen opslaan
  • in dit type kan men een tekenreeks opslaan. De reeks moet wel tussen “ “ geplaatst worden om ervoor te zorgen dat de tekst niet als code geïnterpreteerd wordt.

Er zijn nog meer typen variabelen, maar met deze drie kan men al wel een eindje verder.

De if-else structuur

De if-else structuur is een veelgebruikte programmeerstructuur. Deze wordt gebruikt om te reageren op een bepaalde voorwaarde. De structuur ziet eruit als volgt:

Tussen de () van de if-functie vullen we de voorwaarde in. In het voorbeeld is deze voorwaarde dat de variabele x kleiner moet zijn dan 10. Indien dit tijdens het uitvoeren van de code het geval is, zal de code tussen de {} na de if functie uitgevoerd worden. Indien dit niet het geval is, zal de code tussen de {} na de else uitgevoerd worden. Wanneer men een bepaald stuk code enkel wil uitvoeren als aan de voorwaarde voldaan is, en anders geen actie wil ondernemen, kan men de else{} ook weglaten.

Batterij tester

In dit voorbeeld gaan we een eenvoudige batterij tester maken. Hiervoor hebben we naast een Arduino ook nog 3 LEDs nodig. Bij voorkeur een groene, gele en rode. Om deze LEDs aan de Arduino te koppelen hebben we weerstanden nodig. Een weerstand van 560 Ohm volstaat voor deze LEDs. Om de batterijspanning op te meten hebben we een weerstand nodig van 2,2 kilo Ohm. In onderstaand vereenvoudigd schema zie je de schakeling.

Het + en - symbool op de tekening stellen losse draden voor die we gebruiken om tegen de + en - pool van de batterij te houden.

Het principe (algoritme) van de code ziet er als volgt uit:

1. Lees de waarde van analoge pin A0 in
2. Vermenigvuldig deze waarde met 0.0048
3. Afhankelijk van de waarde wordt een bepaalde LED ingeschakeld
a. > 1,6V: Groene LED
b. Tussen 1,4V en 1,6V: Gele LED
c. < 1,4V: Rode LED

Bovenstaand algoritme zullen we in de volgende stappen omzetten naar Arduino code.

In een eerste stap zullen we alle nodige variabelen aanmaken en voorzien van een standaard waarde:
int Analog waarde: Dit is de waarde die we inlezen van de pin A0
float BatterijSpanning: In deze variabele wordt het berekende batterijspanning van de bewaard
int RodeLED, GroenLED en GeleLED worden ingesteld op het juiste pinnummer

In de Setup() functie zullen de LEDs als uitgang geactiveerd worden. Dit doet men door hun pinmode op OUTPUT in te stellen.

In de loop() functie zal het programma uitgevoerd worden. Deze functie zal een oneindig aantal keren herhaald worden. In een eerste stap zal een analoge spanning worden ingelezen van pin A0. Vervolgens vermenigvuldigen we dit met 0.0048 om het voltage van deze spanning te bepalen. Daarna kan afhankelijk van de waarde beslist worden welke LED moet oplichten.

Het Inlezen gebeurt met de functie analogRead(). Tussen de haakjes geeft men mee van welke analoge pin men de waarde wil inlezen. In ons geval is dit analoge pin 0 (A0). Vervolgens vermenigvuldigt men dit resultaat en slaat men dit op in de variabele batterijspanning.

Hierna kan men overgaan tot het toetsen van de variabelen. Voor de Gele LED ziet de code er als volgt uit.

In de kop van de if-functie gaan we na of de BatterijSpanning kleiner is dan 1,6 en (&&) groter is dan 1,4. Er moet aan beide voorwaarden voldaan zijn om de code tussen de {} uit te voeren. Indien dit niet het geval is zal het stuk code worden overgeslagen. Tussen de {} zullen we eerst de gele LED laten oplichten, vervolgens 2000 ms (=2s) wachten door middel van de delay-functie, en dan de LED weer doven.
Voor de overige LEDs voorzien we gelijkaardige functies die voor de groene LED nagaan of de spanning goter is dan 1,6V en voor de rode LED nagaan of de spanning kleiner is dan 1,4V.

Tijdens het uivoeren van de code zal dus slechts één van de if-functies uitgevoerd worden.
Om de batteijtester te testen compileren we de Arduino code en maken we de schakeling. Vervolgens plaatsen we de code op de Arduino en houden we een batterij tussen de twee losse draden. Houd wel goed rekening met de + en - pool van de batterij!

Door Nick Steen, Emilie Laverge & Gert-Jan Andries