Uploaded by zdedwflncbgbuucteg

Handout dag 1

advertisement
Arduino Workshop
Inhoudsopgave
Inleiding
2
TkkrLab
2
De cursus
2
Wat is Arduino?
3
Looplicht
4
De hardware
5
Een looplicht
9
Een looplicht met for loops
10
Knipperende LEDS zonder delay
13
Servo motor
15
Seriële monitor
18
Relais
22
LCD scherm
25
37 in 1 sensor kit
30
Basiskennis elektronica
31
Schemas
31
Weerstanden in serie en parallel
36
De wet van Ohm
37
Een enkele weerstand
37
Spanningsdeler
38
Een LED aan een Arduino
39
APPENDIX
40
Naslag / Internet bronnen
40
Variabelen type & waarden
40
Arduino schema zelfbouw
41
Arduino cheat sheet met C commando’s
42
Arduino Pin layout
43
Deze handleiding is geschreven door Renze Nicolai, Marco Geels en Dave Borghuis
TkkrLab - Arduino Workshop - 1 / 46
Inleiding
Arduino is een open-source elektronisch prototyping platform gebaseerd op flexibele,
gemakkelijk te gebruiken hardware en software. De Arduino is bedoeld voor kunstenaars,
ontwerpers, hobbyisten en iedereen geïnteresseerd in het maken van interactieve objecten
en omgevingen.
Voordeel van open source is dat de beschikbare hard- en software geheel naar eigen wens
kan worden aangepast, de schema’s en broncode is beschikbaar.
Tevens is er een grote en levendige Arduino community die vele projecten als open source
publiceren. Indien je een specifiek Arduino project wil maken en je google op “Arduino” en
wat je wil maken is de kans groot dat er al iemand is die iets soortgelijks heeft gemaakt. Je
kunt dan zijn project overnemen en aanpassen naar je eigen wensen.
TkkrLab
TkkrLab (Tukkerlab) is een hobbyplek voor techneuten. Voor de een is dit software maken of
met electronica bezig zijn of een 3D printer bouwen. Voordeel om dit in een groep fysiek bij
elkaar te doen is dat er altijd wel iemand aanwezig is die je verder kan helpen en het
natuurlijk ook een stuk gezelliger is dan dit alleen op een zolderkamertje te doen.
Onze space heeft ook een eigen werkplaats waar je kan solderen en projecten in elkaar kan
bouwen. Tevens verzorgen wij ook workshops over onderwerpen zoals de Arduino, open
source software, privacy, security, elektronica etc.
TkkrLab is iedere dinsdagavond open voor iedereen, je bent dan altijd van harte welkom om
een kijkje bij ons te nemen.
In nederland zijn er meer hackerspaces zoals TkkrLab, zie op ​http://hackerspaces.nl​ voor
een overzicht van de spaces en hun activiteiten.
De cursus
Tijdens de cursus leren we je hoe je de Arduino soft- en hardware kunt gebruiken om zelf
slimme apparaten te maken.
We beginnen de cursus met basiskennis over elektronica. In dit eerste deel van de cursus
zullen vragen als “Hoe moet ik alles aansluiten?”, “Hoe bereken ik de benodigde waarde van
een weerstand uit?” en “Waar moet ik rekening mee houden als ik elektronica bouw?”
worden beantwoord.
Daarna wordt een introductie gegeven over het Arduino platform: het installeren van de
software, het aansluiten van de Arduino Uno op uw computer en het programmeren van het
knipperlicht voorbeeld. Direct daarna krijgt je de mogelijkheid de zojuist opgedane
basiskennis over elektronica in de praktijk te brengen, met het bouwen van een looplicht.
TkkrLab - Arduino Workshop - 2 / 46
Nadat je bekend bent geraakt met het Arduino platform laten we je de uitgebreide
mogelijkheden van het Arduino platform zien: het aansturen van servo motoren, LCD
schermpjes en het communiceren met de computer over de seriële poort.
Wat is Arduino?
Arduino is een open source platform bestaande uit een stukje hardware en een
computerprogramma. Grote voordeel van de Arduino is dat er voor iedere doel een
geschikte Arduino versie beschikbaar is en dat er een grote community aanwezig is.
Tijdens deze cursus gaan we werken met een Arduino UNO. Dat is een printplaatje dat een
“ATMEGA328P” microcontroller van Atmel bevat. Voor die microcontroller kan je met de
Arduino software zelf een besturingsprogramma maken.
Een microcontroller is een soort mini-computertje. De ATMEGA chip bevat een stukje
opslaggeheugen, RAM, een processor. Daarnaast bevat de chip hardware om met de
buitenwereld te communiceren: via generieke in/uitgangs pinnen, meerdere soorten seriële
poorten en een analoog naar digitaal omzetter.
Met de Arduino software kunt je uw eigen besturingsprogramma maken, waarmee je kunt
bepalen wat de chip doet. Er draait geen besturingssysteem op de chip zoals bij een
normale computer, alleen jouw programma. Daardoor kan je met een microcontroller
sommige taken met veel meer precisie (realtime) en stabiliteit uitvoeren met een normale
computer.
Raspberry Pi kunt je ook gebruiken voor het aansturen van elektronica, maar dit is in feite
een kleine computer met een volledige (linux) os. Hierdoor is een Pi ook minder geschikt
voor het aansturen van een stepper motor omdat je hiervoor realtime aansturing nodig hebt.
Het komt ook wel voor dat je combinaties ziet van een Raspberry Pi en een arduino, zo heb
je de beste van beide werelden.
TkkrLab - Arduino Workshop - 3 / 46
Looplicht
In dit hoofdstuk leert je hoe je een looplicht van LEDs kunt bouwen met een Arduino bord.
Eerst leert je hoe je een LED aansluit op de Arduino, waarna de programmacode voor het
realiseren van een looplicht wordt uitgelegd.
Voor het uitvoeren van de les in dit hoofdstuk heeft je de volgende onderdelen nodig:
8 LEDs
8 weerstanden
Waarde: 1000 Ω
Te herkennen aan de ringen “bruin zwart rood goud”
1 breadboard
10 breadboard draden
Een Arduino Uno
TkkrLab - Arduino Workshop - 4 / 46
De hardware
In deze les gaat je een schakeling opbouwen op een breadboard. Een breadboard bevat
gaatjes die in een patroon met elkaar verbonden zijn, waardoor je elektrische verbindingen
kunt maken tussen de verschillende componenten die je er in plaatst.
De gaatjes van een breadboard zijn op de volgende manier met elkaar verbonden:
De zwarte lijntjes worden meestal gebruikt om componenten aan te sluiten, terwijl de rode
en blauwe lijn als voedingsrails gebruikt worden.
We gaan met de aan het begin van dit hoofdstuk genoemde componenten een schakeling
bouwen. Het schema van de schakeling ziet er zo uit:
In het echt ziet de schakeling er zo uit:
TkkrLab - Arduino Workshop - 5 / 46
Omdat we een looplicht gaan bouwen is het nodig de schakeling meerdere keren op te
bouwen. Op een breadboard komt dat er als volgt uit te zien:
We beginnen met het monteren van de leds op het breadboard:
In een schema wordt een led als volgt getekend:
Hierbij zien we direct dat een led een positieve en een negatieve aansluiting
heeft.
TkkrLab - Arduino Workshop - 6 / 46
De lange poot van de led is de + en de korte poort is de - In onze tekening moet de + (lange
poot) van de led richting de weerstand staan en de – (korte poot) in de – aansluiting van het
breadboard (bovenkant).
Nu ga je de weerstanden monteren:
In een schema wordt een weerstand getekend zoals hiernaast:
Weerstanden hebben geen + of – dus het maakt niet uit hoe je
deze monteert op je bord.
Ons bord ziet er nu zo uit:
Nu pakken we de Arduino erbij:
Met de breadboard draden maken we de verbindingen tussen de arduino en je breadboard
zoals op deze tekening :
TkkrLab - Arduino Workshop - 7 / 46
Begin met de rode draden aan te sluiten volgens de tekening pin 2 van de arduino op de
rechter weerstand, pin 3 op de weerstand er naast tot je bij pin 9 bent.
Daarna de blauwe draad van pin GND van de arduino naar de – aansluiting van het
breadboard.
De laatste blauwe draad heb je nodig om de onderbreking van het breadboard in het midden
van de – baan door te verbinden.
Je schakeling is nu klaar.
Om de schakeling te testen heeft een van onze vrijwilligers al een programma in de arduino
geladen.
Dit programma laat elke ledje van links naar rechts 1 seconde oplichten.
Vraag een vrijwilliger van Tkkrlab om je schakeling te controleren voordat je de
Arduino aansluit op de voedingsspanning.
De arduino software
Arduino software (te downloaden op​ http://arduino.cc/en/Main/Software​)
Op de laptops van TkkrLab zijn deze programma’s al voorgeinstalleerd.
We beginnen met een simpel programma dat je zelf moet overtypen in de arduino software.
Alle text achter de // doet niets en staat er als informatie voor jezelf of anderen die dit
programma moeten gebruiken. Ik gebruik deze optie dan ook om uit te leggen wat het
programma doet.
void setup() //begin met setup parameters
{
pinMode(9, OUTPUT); //initialiseer pin 9
}
void loop() //Hier begint het programma te lopen
{
digitalWrite(9, HIGH); //zet de led op pen 9 aan
delay(1000); //wacht 1 seconde
digitalWrite(9, LOW); //zet de led op pen 9 uit
delay(1000); //wacht 1 seconde
}
Test dit programma met de compile button
Als je de tekst goed overgetypt hebt zou het scherm er zo uit moeten zien als hieronder.
Mocht dit niet zo zijn controleer dan je programma nog eens op typ fouten.
Mocht je er dan nog niet uitkomen vraag dan een vrijwilliger van TkkrLab om je te helpen.
TkkrLab - Arduino Workshop - 8 / 46
Nu gaan we je programma uploaden naar de arduino hardware.
Sluit de arduino aan met de usb kabel en druk op de upload button
De eerste keer dat je een nieuwe Arduino aansluit is het nodig de juiste seriële poort te
kiezen. Dit kan je doen door vanuit het “tools” menu het “Port” menu te openen en de juiste
poort aan te klikken.
Een looplicht
De simpelste manier om van het knipperlicht voorbeeld hierboven een looplicht te maken is
door het herhalen van de pinMode en digitalWrite commandos.
De code komt er dan als volgt uit te zien:
void setup()
pinMode(2,
pinMode(3,
pinMode(4,
...
}
{
OUTPUT);
OUTPUT);
OUTPUT);
void loop() {
digitalWrite(2,
delay(1000);
digitalWrite(2,
digitalWrite(3,
delay(1000);
digitalWrite(4,
...
}
HIGH);
LOW);
HIGH);
LOW);
TkkrLab - Arduino Workshop - 9 / 46
Een looplicht met for loops
In plaats van het herhalen van de gebruikte functies is het ook mogelijk om gebruik te maken
van een “for loop”. Een for loop zorgt er voor dat een sectie (of blokje) code herhaald wordt
zolang een bepaalde conditie waar is.
Om een for loop te kunnen gebruiken is het nodig een aantal verschillende concepten uit te
leggen.
Variabelen
In een Arduino zit werkgeheugen. Je kunt informatie opslaan in het werkgeheugen door
variabelen te declareren.
Een voorbeeld van een type variabele waarin een getal kan worden opgeslagen is de
“integer”. Een integer wordt in de programmeertaal C (die gebruikt wordt om Arduino te
programmeren) afgekort tot “int”.
Het declareren van een variabele doe je door “<type> <naam>;” of “<type> <naam> =
<initiële waarde>;” op te nemen in het programma. Bijvoorbeeld: “int test = 3;”
Er is maar een beperkte ruimte voor variabelen, daarom is het belangrijk altijd een type
variabele te kiezen dat zo klein mogelijk is maar toch voldoende ruimte biedt voor de
gegevens die je op wilt slaan.
Een deel van de typen variabelen die je kunt gebruiken zijn:
Arduino ondersteunt ook het werken met tekst. Dit werkt met behulp van het String object.
Het werken met strings is geen onderdeel van deze workshop, maar online kan je een hoop
informatie vinden over het String object.
TkkrLab - Arduino Workshop - 10 / 46
De for loop
Een for loop bestaat uit drie statements, omvat door for().
for( <initialisatie>; <vergelijking>; <toename> )
De initialisatie is het stukje code wat één keer uitgevoerd wordt op het moment dat de for
loop begint. Je kunt het veld leeg laten, een variabele initialiseren (bijvoorbeeld “i = 0”) of
een variabele declareren (int i = 0).
De vergelijking bepaald of de for loop opnieuw uitgevoerd zal gaan worden of dat het
programma verder gaat. Zolang de vergelijking waar is zal de for loop zich blijven herhalen.
Een voorbeeld is “i < 10”, waarbij de for loop zichzelf zal herhalen zolang “i” lager is dan 10.
De toename zorgt er voor dat er iedere iteratie van de for loop een variabele aangepast
wordt. Je kunt het veld leeg laten, maar normaal gesproken wordt het veld gebruikt voor het
verhogen van de teller (in ons voorbeeld “i”). Dit kan worden gedaan door “i = i + 1” of “i++”
in te vullen. “I++” is een verkorte vorm van “i = i + 1” en doet exact hetzelfde. “I--” bestaat
ook en is gelijk aan “i = i - 1”.
Namespaces (ofwel “blokken” code)
Het is je waarschijnlijk al opgevallen dat de code die in functies, zoals setup() en loop() staat
omsloten is met “{” en “}”. Deze haken geven een namespace aan.
Hoewel een namespace nodig is om aan te geven dat code onderdeel is van een functie
worden namespaces ook op andere plekken gebruikt, bijvoorbeeld in loops als “while” en
“for”, maar ook om keuzes te maken op basis van vergelijkingen, met een “if” statement.
Een belangrijke eigenschap van een namespace is het volgende: variabelen die binnen een
namespace gedeclareerd worden zullen worden verwijderd zodra het programma de
namespace verlaat.
In de praktijk betekent dit het volgende:
int i = 5;
{
i = 6;
}
int j = i;
J is hier gelijk aan 6;
TkkrLab - Arduino Workshop - 11 / 46
int i = 5;
{
int i = 6;
}
int j = i;
J is hier gelijk aan 5, want de variabele i binnen de namespace is hier niet gelijk aan de
variabele i buiten de namespace.
{
int i = 6;
}
int j = i;
Dit programma zal niet gebouwd kunnen worden, want variabele i bestaat niet buiten de
scope van de namespace waarin hij gedefinieerd is.
Het looplicht met for loops
Onderstaande programma doet precies hetzelfde als het eerder gegeven voorbeeld: pin 2
tot en met 4 output maken en vervolgens een looplicht van pin 2 tot en met pin 4 laten lopen.
void setup() {
for (int i = 2; i < 5; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
for (int i = 2; i < 5; i++) {
digitalWrite(i, HIGH);
delay(1000);
digitalWrite(i, LOW);
}
delay(1000):
}
TkkrLab - Arduino Workshop - 12 / 46
Knipperende LEDS zonder delay
In de vorige lessen hebben we vaak de functie delay gebruikt.
Deze functie is in sommige gevallen erg handig maar delay kan ook erg lastig zijn als je
bijvoorbeeld 2 dingen "tegelijk" wilt doen. Stel je voor dat je 1 led wilt laten knipperen met
een tussenpauze van 100ms en de andere met een tussenpauze van een seconde.
Wanneer je een delay gebruikt zal de arduino elke keer een seconde staan wachten en krijg
je de 2de led nooit op een snelheid van 100ms.
De Arduino beschikt ook over een interne klok, hiermee kunnen we dus vergelijken en
bepalen wanneer er een seconde voorbij en is wanneer er 100ms voorbij zijn.
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
TkkrLab - Arduino Workshop - 13 / 46
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de Arduino IDE:
// constants won't change. Used here to set a pin number:
const int ledPin = 12;// the number of the LED pin
// Variables will change:
int ledState = LOW;
// ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;
// will store last time LED was
updated
// constants won't change:
const long interval = 1000;
// interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop() {
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the difference
// between the curr time and last time you blinked the LED is bigger than
// the interval at which you want to blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
Klik op de upload button.
We zien nu 1 led knipperen.
Opdracht: pas de code aan zodat je 2 leds met een verschillend interval kunt laten
knipperen.
TkkrLab - Arduino Workshop - 14 / 46
Servo motor
Dit is terug te vinden in de configuratie van je operating system
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Eerst gaan we testen of de servo werkt.
Typ de volgende code over of kopieer deze naar de arduino ide:
#include <Servo.h>
Servo myservo;
// create servo object to control a servo
void setup()
{
myservo.attach(9);
}
// attaches the servo on pin 9 to the servo object
void loop() {
myservo.write(0);
TkkrLab - Arduino Workshop - 15 / 46
delay(900);
myservo.write(90);
delay(900);
myservo.write(180);
delay(900);
}
Klik op de upload button.
De servo moet nu van 0 tot 90 graden draaien daar even wachten en dan door
draaien naar 180 graden.
Deel 2 :
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema :
We gaan de servo nu bedienen met een potmeter.
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:
#include <Servo.h>
TkkrLab - Arduino Workshop - 16 / 46
int servopin = 9;
int potmeterpin = A0;
Servo myservo; // create servo object to control a servo
int pos = 0;
// variable to store the servo position
void setup() {
Serial.begin(9600);
myservo.attach(servopin);
// attaches the servo on pin 9 to
// the servo object
}
void loop() {
int value = analogRead(potmeterpin);
pos = map(value, 0, 1023, 0, 160);
myservo.write(pos);
Serial.print("waarde potmeter = ");
Serial.print(value);
Serial.print("
Positie servo = ");
Serial.println(pos);
delay(10);
}
Klik op de upload button.
Wanneer je nu aan de potmeter draait zal de servo volgen.
TkkrLab - Arduino Workshop - 17 / 46
Seriële monitor
Dit is terug te vinden in de configuratie van je operating system
We hebben bij les 1 al gezien dat de arduino software beschikt over een serial
monitor.
Vandaag gaan we zien wat er met de serial monitor mogelijk is:
Deel 1:
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over:
int potmeterpin = A0; //set de pin waar de potmeter op aangesloten is.
int value = 0 ; //zet variabele waar we de waarde van de potmeter in kunnen
stoppen.
void setup() {
Serial.begin(9600);
}
void loop() {
value = analogRead(potmeterpin); //lees de waarde van de potmeter (A0)
Serial.println(value); //print de waarde value naar de serial monitor.
TkkrLab - Arduino Workshop - 18 / 46
}
Klik op de upload button.
Als de software klaar is met uploaden klik op de serial monitor button.
Als je nu aan de potmeter draait zul je zien dat de waarde in de serial monitor
veranderd. Dit kan er als volgt uitzien, bij jouw kunnen de waarden anders zijn.
10
23
56
109
63
42
Deel 2:
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over:
int potmeterpin = A0; //zet de pin war de potmeter op aangesloten is
int buttonpin = 2; //zet de pin waar de button op aangesloten is.
int value = 0; //zet een variabele waar we de waar van de potmeter is
kunnen stoppen
TkkrLab - Arduino Workshop - 19 / 46
void setup() {
Serial.begin(9600); //Start de serial monitor
pinMode(buttonpin,INPUT); //zet de buttonpin als input
digitalWrite(buttonpin,HIGH); //zet pin hoog
}
void loop() {
Serial.print("Potmeter = "); //print de text potmeter
value = analogRead(buttonpin); //lees de waarde van input pin potmeterpin
Serial.print(value); //print de waarde value naar de serial monitor
Serial.print("
"); //print aantal spaties
Serial.print("button = "); //print de tekst button
Serial.println(digitalRead(buttonpin)); //schrijf waarde van de button
}
Klik op de upload button.
Als de software klaar is met uploaden klik op de serial monitor button.
We hebben nu geleerd hoe om te gaan met de serial monitor, deze les is zeer
waardevol als je ooit een probleem hebt met een stukje hardware en je hebt geen
idee waar het fout gaat.
Lees alle waardes die binnen komen op het Arduino bordje uit en print ze naar de
monitor, je zult direct zien wat er binnen komt en of dat is wat je verwacht had.
Deel 3:
Je kunt ook waardes schrijven vanuit de serial monitor naar het arduino bord.
Bouw nogmaals de schakeling uit vorige les:
TkkrLab - Arduino Workshop - 20 / 46
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over:
int led1 = 13; //koppel led 1 aan pin 13
int led2 = 12; //koppel led 2 aan pin 12
String input = "";
void setup() {
Serial.setTimeout(10);
Serial.begin(9600);
pinMode(led1,OUTPUT); //set pin led1 als uitgang
pinMode(led2,OUTPUT); //set pin led2 als uitgang
}
Void handleSerialInput() {
if (input.startsWith("l")) {
digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
}
if (input.startsWith("r")) {
digitalWrite(led2,HIGH);
delay(1000);
digitalWrite(led2,LOW);
}
input = "";
}
void loop() {
while (Serial.available() > 0) {
char c = Serial.read();
if (c == '\n') {
handleSerialInput();
} else if (c != '\r') {
Input += c;
}
}
}
Klik op de upload button.
Als de software klaar is met uploaden klik op de serial monitor button.
Als je nu een “l” typt in de serial monitor gevolgd door enter gaat de linker led 1
seconde branden.
Typ je een “r” gevolgd door enter dan gaat de rechter led 1 seconde branden.
TkkrLab - Arduino Workshop - 21 / 46
Relais
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
De gebruikte transistor is de NPN uitvoering (in ons setje een BC547).
TkkrLab - Arduino Workshop - 22 / 46
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:
int relais1 = 12; // koppel relais 1 aan pin 12
void setup() {
pinMode(relais1, OUTPUT); //set pin1 (12) als uitgang
}
void loop() {
digitalWrite(relais1, HIGH); //set de uitganspin van relais1 (12) hoog
delay(1000);
//wacht 1 seconde (1000 ms)
digitalWrite(relais1, LOW); //set de uitganspin van relais1 (12) laag
delay(1000);
//wacht 1 seconde (1000 ms)
}
Klik op de upload button.
Als je deze opdracht goed uitgevoerd hebt gaan de leds om en om knipperen en
hoor je het relais klikken.
Deel 2:
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
TkkrLab - Arduino Workshop - 23 / 46
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:
int relais1 = 12; // koppel relais 1 aan pin 12
int ldr1 = A0; // koppel ldr 1 aan pin A0
void setup() {
pinMode(relais1, OUTPUT); //set relais1 (pin 12) als uitgang
}
void loop() {
int value = analogRead(ldr1); //lees de waarde van LDR1
if (value < 300) digitalWrite(relais1, HIGH); //Als de waarde van
LDR1 lager is dan 300 set de uitganspin van relais1 (12) hoog
if (value > 400) digitalWrite(relais1, LOW); //Als de waarde van LDR1
hoger is dan 400 set de uitganspin van relais1 (12) laag
}
Klik op de upload button.
Als je deze opdracht goed uitgevoerd hebt gaat het relais schakelen als je je hand
over de LDR beweegt. We hebben hiermee een schemer-schakeling gebouw om
bijvoorbeeld je tuinverlichting te schakelen.
TkkrLab - Arduino Workshop - 24 / 46
LCD scherm
Zorg er voor dat je alle voedingsspanningen
los koppelt (usb niet aangesloten op de pc en
geen power adapter aangesloten op de
voedingsplug).
sluit de Arduino aan volgens onderstaand
schema:
Start het Arduino programma en sluit de USB kabel aan.
Vanaf nu gaan we de code niet meer overtypen:
selecteer onderstaande code en kopieer deze naar de arduino software:
#include <LiquidCrystal.h> //laad de bibliotheek lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //stel de pinnen in
void setup() {
lcd.begin(16, 2); //vertel de arduino welk type scherm we gebruiken
lcd.setCursor(0, 0); //set de cursor op de eerste letter van de eerste
regel
lcd.print("Arduino workshop"); //print text
TkkrLab - Arduino Workshop - 25 / 46
lcd.setCursor(0, 1); //set de cursor op de eerste letter van de 2de regel
lcd.print("Tkkrlab"); //print text
}
void loop() {
}
Klik op de upload button.
Deel 2 :
We gebruiken hetzelfde ontwerp om een aantal opties uit te leggen.
#include <LiquidCrystal.h> //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //stel de pinnen in die we gebruiken voor het
scherm
void lcdprint(String line1, String line2) {
lcd.clear();
//maak het scherm leeg
lcd.print(line1);
//print text
lcd.setCursor(0, 1);
//set de cursor 2de regel
lcd.print(line2);
//print text
}
void setup() {
Serial.setTimeout(10);
Serial.begin(9600);
lcd.begin(16, 2);
//vertel de arduino welk type scherm we gebruiken
lcdprint("Arduino workshop", "TkkrLab"); //print text
delay(5000);
//wacht 5 seconden
lcdprint("hergebruik van", "dezelfde functie");//print text
delay(5000);
//wacht 5 seconden
lcdprint("type text:", "");
//print text
}
void loop() {
if (Serial.available() > 0) {
//kijk of er serial data binnen komt
String incoming_serial;
//maak een container voor de seriële data
incoming_serial=Serial.readString(); //stop de serial data in de container
lcdprint("type text:", incoming_serial); //print de text uit de container
}
}
In dit voorbeeld heb ik de aansturing van het scherm verwerkt in een functie, ook
gebruiken we hier de serial monitor functie uit les 3 om text op het lcd te schrijven.
Voordelen:
● je hoeft de code maar 1 keer in te typen.
● code beter leesbaar.
● code makkelijker aan te passen (alles op 1 plek in plaats van door het hele
programma).
● gebruikt minder flash geheugen van de arduino dus er is meer ruimte voor
andere code).
Deel 3:
TkkrLab - Arduino Workshop - 26 / 46
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de
pc en geen power adapter aangesloten op de voedingsplug).
Voeg 2 drukknoppen toe aan het schema:
Start het Arduino programma en sluit de USB kabel aan.
Code kunt je ook downloaden op
https://www.tkkrlab.space/Tkkrlab_Arduino_Workshop.zip
#include <LiquidCrystal.h>
//laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //aansluit pinnen voor het lcd scherm
int button1 = A4;
//aansluitpin eerste button
int button2 = A5;
//aansluitpin 2de button
int button = 0;
//waarde van de button (dit kan 0, 1 of 2 zijn)
int buttoncounter = 0; //counter voor de buttons
int menuoption = 0;
//waarde voor het menu
long frequencyvalue = 144000; //waarde van de frequentie
int powervalue = 10; //waarde van het vermogen
int micgainvalue = 10; //waarde van de micgain
int ctcssvalue = 0;
//teller voor de ctcss waardes
float ctcssvaluearray[] = {71.9, 77.0, 82.5, 88.5}; //ctcss waardes
int shiftvalue = 0;
//teller voor de repeater shift
float shiftvaluearray[] = {0, 600, 1600, 7600, -600, -1600,7600}; //repeatershift
waarde
void readbuttons() {
if (digitalRead (button1) == LOW) {
commando's uit
buttoncounter ++;
//functie om de buttons uit te lezen
//als button 1 laag is voer de volgende
//tel 1 bij de buttoncounter op
TkkrLab - Arduino Workshop - 27 / 46
if (buttoncounter == 2) button = 1;//als de buttoncounter 2 is zet de waarde
button op 1
else button = 0;
//anders zet de waarde button op 0
}
if (digitalRead (button2) == LOW) { //als button 2 laag is voer de volgende
commando's uit
buttoncounter ++;
//tel 1 bij de buttoncounter op
if (buttoncounter == 2) button = 2;//als de buttoncounter 2 is zet de waarde
button op 2
else button = 0;
//anders zet de waarde button op 0
}
if (digitalRead (button1) == HIGH && digitalRead (button2) == HIGH) buttoncounter
= 0; //als beide buttons hoog zijn zet de waarde van de buttoncounter op 0
}
void clearlcd() {
lcd.setCursor(0, 0);
regel
lcd.print("
lcd.setCursor(0, 1);
regel
lcd.print("
}
//set de cursor op de eerste letter van de eerste
"); //maak de regel leeg
//set de cursor op de eerste letter van de 2de
"); //maak de regel leeg
void lcdprint(String line1, float line2, String line3) {
lcd.setCursor(0, 0);
//set de cursor op de eerste letter van de eerste
regel
lcd.print(line1);
//print text 1
lcd.setCursor(0, 1);
//set de cursor op de eerste letter van de 2de
regel
lcd.print(line2);
//print text 2
lcd.print(line3);
//print text 3
}
void menu() {
if (button == 1) {
//als de waarde button 1 is voer de
commando's uit
menuoption ++;
//tel 1 bij de menuoption op
clearlcd();
//maak het lcd scherm, leeg
}
if (menuoption == 0) frequency();
//als de waarde menuoption 0 is run
frequency
if (menuoption == 1) ctcsstone();
//als de waarde menuoption 1 is run
ctcsstone
if (menuoption == 2) power();
//als de waarde menuoption 2 is run
power
if (menuoption == 3) micgain();
//als de waarde menuoption 3 is run
micgain
if (menuoption == 4) repeatershift();//als de waarde menuoption 4 is run
repeatershift
if (menuoption == 5) menuoption = 0; //als de waarde menuoption 5 zet de
menuoption terug naar 0
}
void frequency() {
lcdprint("Frequency", frequencyvalue, " KHz");
posities op het scherm (naam, waarde, eenheid)
if (button == 2) frequencyvalue = frequencyvalue + 25;
ingedrukt word tel 25 bij de frequency op
TkkrLab - Arduino Workshop - 28 / 46
volgende
functie
functie
functie
functie
functie
waarde
//functie frequency
//lcd print 3
//als button 2
if (frequencyvalue == 146000) frequencyvalue = 144000;
hoog wordt ga terug naar de beginwaarde
}
//als de waarde to
void ctcsstone() {
//functie ctcsstone
lcdprint("CTCSS tone", ctcssvaluearray[ctcssvalue], " Hz"); //lcd print 3
posities op het scherm (naam, waarde, eenheid)
if (button == 2) ctcssvalue ++;
//als button 2
ingedrukt word tel 1 bij de ctcssvalue op
if (ctcssvalue == 4) ctcssvalue = 0;
//als de waarde to
hoog wordt ga terug naar de beginwaarde
}
void power() {
lcdprint("Power", powervalue, " Watt");
posities op het scherm (naam, waarde, eenheid)
if (button == 2) powervalue ++;
ingedrukt word tel 1 bij de powervalue op
if (powervalue == 11) {
hoog is voer de volgende commando's uit
powervalue = 1;
begin waarde
clearlcd();
}
}
//functie power
//lcd print 3
void micgain() {
lcdprint("Mic gain", micgainvalue, " dB");
posities op het scherm (naam, waarde, eenheid)
if (button == 2) micgainvalue = micgainvalue + 1;
ingedrukt word tel 1 bij de migainvalue op
if (micgainvalue == 11) {
hoog is voer de volgende commando's uit
micgainvalue = 0;
begin waarde
clearlcd();
}
}
//functie micgain
//lcd print 3
//als button 2
//als de waarde to
//ga terug naar de
//wis het lcd scherm
//als button 2
//als de waarde to
//ga terug naar de
//wis het lcd scherm
void repeatershift() {
//functie micgain
lcdprint("repeater shift", shiftvaluearray[shiftvalue], " KHz"); //lcd print 3
posities op het scherm (naam, waarde, eenheid)
if (button == 2) shiftvalue ++;
//als button 2
ingedrukt word tel 1 bij de migainvalue op
if (shiftvalue == 6) {
//als de waarde
to hoog is voer de volgende commando's uit
shiftvalue = 0;
//ga terug naar
de begin waarde
clearlcd();
//wis het lcd
scherm
}
}
void setup() {
//deze functie wordt 1 keer uitgevoerd bij het opstarten
lcd.begin(16, 2);
//vertel de arduino welk type scherm we gebruiken
pinMode (button1, INPUT);
//set de buttonpin als ingang
digitalWrite (button1, HIGH); //set de buttonpin hoog zodat we deze laag kunnen
trekken naar GND
pinMode (button2, INPUT);
//set de buttonpin als ingang
TkkrLab - Arduino Workshop - 29 / 46
digitalWrite (button2, HIGH);
kunnen trekken naar GND
}
void loop() {
readbuttons();
menu();
}
//set de buttonpin hoog zodat we deze laag
//start de functie readbuttons
//start de functie menu
In dit programma hebben we een hele set aan extra functies toegevoegd.
Ik zal deze tijdens de workshop 1 voor 1 doorlopen en uitleggen.
37 in 1 sensor kit
Online zijn er ook diverse sensoren waarmee je op een eenvoudige en snelle manier
met Arduino kan combineren. Deze sensoren hebben dan al de eventueel
benodigde weerstanden en andere componenten dus kun je meestal rechtstreeks
aansluiten op de Arduino.
Meer informatie over deze sensoren kun je onder andere vinden op :
https://tkkrlab.nl/wiki/Arduino_37_sensors
TkkrLab - Arduino Workshop - 30 / 46
Domotica
We gebruiken in onze workshop de nodeMCU maar er zijn vele alternatieve boards
beschikbaar.
CH340 chip (en driver)
https://liudr.wordpress.com/2015/10/08/arduino-board-install-problems/
Meestal wil je bijvoorbeeld met je telefoon een schakelaar aan of uit zetten, dit kan via IoT
sensoren en schakelaars. Zolang deze alleen beschikbaar zijn in je eigen netwerk hoef je
niet al te veel zorgen te maken over beveiliging, maar als deze voor de hele wereld te
bereiken is moet je deze wel goed beveiligen. We besteden hier geen specifieke aandacht
aan in onze workshop maar wees hier bewust van.
ESP8266
De ESP is een wifi chip ontwikkeld door expressive en erg populair in IoT projecten. In deze
chip zit een microprocessor met een Wifi functionaliteit die je op de Arduino manier kunt
programmeren.
ESP32
Opvolger van de ESP8266 met mogelijkheid om ook via microPython programma’s te
maken.
nodeMCU
Deze gebruiken we in onze workshop. De nodeMCU is een ‘dev’ board met een USB
aansluiting (makkelijk voor het programmeren) en een ESP8266 chip.
Je kunt deze nodeMCU programmeren vanuit de vertrouwde Arduino IDE maar hiervoor zul
je een aantal hulptools moeten installeren. Om de tools voor de nodeMCU binnen de
Arduino IDE beschikbaar te krijgen moeten we deze hardware toevoegen aan de ‘boards
manager’.
Open binnen de Arduino IDE de voorkeuren / preferences en vul bij “Additional Board
Manager URLs” de waarde
“http://arduino.esp8266.com/stable/package_esp8266com_index.json”​ in.
Ga vervolgens naar menu “Tools -> Board” en installeer de esp8266 platform. Hiermee
worden de benodigde extra tools geïnstalleerd in de Arduino IDE.
Specificaties :
1 Mb memory
Processor : ATmega16U2 op 3.3V
TkkrLab - Arduino Workshop - 31 / 46
Voorbeeld webserver met LED’s aan/uit en lezen analoge pinnen
https://gist.github.com/igrr/3b66292cf8708770f76b
TkkrLab - Arduino Workshop - 32 / 46
Basiskennis elektronica
Afhankelijk van uw achtergrond kan het zijn dat je delen van dit hoofdstuk over kunt slaan.
Eerst zal de basistheorie voor het lezen van een schema worden besproken, waarna
eigenschappen van de verschillende componenten worden besproken. Dit hoofdstuk eindigt
met uitleg over de wet van Ohm.
Schemas
Elektrische schakelingen worden in documentatie vaak in een schematische weergave
getoond, omdat een schema vaak veel duidelijker de verbindingen in een elektrisch circuit
kan laten zien dan een foto.
Een voorbeeld van een schema dat laat zien hoe je een dobbelsteen zou kunnen bouwen
met een ATtiny2313 microcontroller ziet er als volgt uit:
In het elektrische circuit dat hierboven staat afgebeeld zijn verschillende componenten
gebruikt: een condensator, een chip (microcontroller), weerstanden en LEDs (Light Emitting
Diodes).
TkkrLab - Arduino Workshop - 33 / 46
De weerstand
Een weerstand is een component dat elektrische stromen kan
beperken. Doordat de weerstand de stroom limiteert ontstaat er een
spanningsval over de weerstand. De wet van Ohm, die we later zullen
behandelen beschrijft het lineaire verband (de verhouding) tussen de
aangeleverde spanning en de stroom die door een weerstand vloeit.
In schema’s ziet een weerstand er uit als een blokje of als een
zigzaggende lijn. Het blokje is het Europese symbool voor een weerstand, terwijl in
Amerikaanse schema’s vaak het zigzaggende lijntje wordt gebruikt.
Weerstanden hebben geen polariteit: het maakt niet uit in welke richting een weerstand
aangesloten wordt.
Aan de hand van de kleuren op de weerstand kun je aflezen welke waarde deze heeft.
De diode
Een didode is een halfgeleidercomponent dat slechts in één richting stroom laat vloeien: van
de anode (+) naar de cathode (-). Het component werkt dus als een terugslagventiel voor
stroom.
TkkrLab - Arduino Workshop - 34 / 46
Er zijn meerdere soorten diodes, welke voor veel verschillende doelen gebruikt worden. Een
aantal voorbeelden van het gebruik van diodes zijn: het gelijkrichten van spanning, het
limiteren van spanning of als lichtbron: de Light Emitting Diode.
De LED
Een LED (of Light Emitting Diode) is een diode die licht uitstraalt wanneer er stroom
doorheen loopt.
Net als een normale diode werkt een LED alleen wanneer er stroom loopt van de anode (+)
naar de cathode (-).
Spanningsbronnen en “ground”
Een spanningsbron (bijvoorbeeld een batterij of een voedingsadapter) kan op meerdere
manieren worden aangeduid: als “kale” spanningsbron, als pijltje met een spanning of als
batterijsymbool. De polariteit staat meestal aangegeven bij het symbool.
Het referentiepunt dat als nulpunt voor spanningen binnen het schema wordt gebruikt heet
het “ground” punt. Deze referentiepunten kunnen met de volgende symbolen worden
aangeduid:
TkkrLab - Arduino Workshop - 35 / 46
Chips / Integrated Circuits (ICs)
In moderne schakelingen worden vrijwel altijd chips gebruikt. Chips
zijn componenten die van binnen bestaan uit een groot aantal
componenten als transistors, condensatoren, spoelen en diodes.
Een chip bevat vrijwel altijd een stukje silicium wafer waarop de
componenten geetst zijn.
Chips worden in veel verschillende verpakkingen gestopt: van
relatief grote through-hole packages zoals het DIL (Dual-In-Line)
formaat tot te kleinste BGA (Ball-Grid-Array) verpakkingen.
Ieder type chip is anders: daarom heeft een chip geen vaste vorm in
een schema. Chips worden meestal aangeduid als een blok met
een hoop aansluitingen. Bij de aansluitingen staat vrijwel altijd de
functie aangegeven.
Condensator
Condensatoren bestaan uit twee metalen plaatjes die door een met elektrolyt doordrenkt
membraan gescheiden worden. Een condensator werkt als een soort batterij en zal de
spanning op zijn aansluitingen constant proberen te houden. Condensatoren worden veel
gebruikt voor spanningsstabilisatie, als anti-dender bescherming bij knoppen en als
onderdeel van passieve hoog- of laag doorlaatfilters.
Condensatoren bestaan in verschillende typen, waarvan sommige wel en sommige geen
gedefinieerde polariteit hebben. Een elektrolytische condensator (links) heeft een witte rand
op de zijkant: die rand geeft aan welke aansluiting de cathode (of negatieve) aansluiting is.
Spoel
Spoelen zijn lange draden die rond een kern gewonden worden. Een spoel werkt als opslag
voor stroom. Een spoel zal proberen de lopende stroom door de spoel constant te houden
wanneer de spanning over de spoel varieert.
Het effect wat een spoel laat zien ontstaat doordat de stroom die door de spoel loopt een
elektrisch veld opwekt. Wanneer de stroom door de spoel positief veranderd zal dat
elektrische veld zichzelf omzetten in een magnetisch veld. Wanneer de stroom vervolgens
TkkrLab - Arduino Workshop - 36 / 46
negatief veranderd keert het proces zich om en veroorzaakt het ontstane magnetische veld
een elektrisch veld en dus een stroom door de spoel.
Hoewel er in deze cursus geen gebruik gemaakt zal worden van dit component is het goed
te weten dat het effect van een spoel ook optreed in langere draden en draden waarin op
hoge snelheid veranderende stromen lopen. Het is daarom verstandig om bij digitale
communicatie tussen componenten de draden niet langer te maken dan nodig is. Wanneer
het gebruik van lange draden noodzakelijk is is het verstandig filters in te bouwen in het
circuit.
TkkrLab - Arduino Workshop - 37 / 46
Weerstanden in serie en parallel
De totale weerstand van in serie geplaatste weerstanden is de som van alle individuele
weerstanden. je kunt de weerstandswaarden dus gewoon bij elkaar optellen.
De totale weerstand van parallel geplaatste weerstanden is iets ingewikkelder. De totale
weerstand van parallel geplaatste weerstanden is namelijk de inverse van de som van de
inverse van iedere individuele weerstandswaarde.
De formule voor twee parallel geplaatste weerstanden kan ook worden omgeschreven tot de
volgende alternatieve formule:
Voorbeeld
R1 = 10 Ohm
R2 = 15 Ohm
In serie is de totale weerstand 10 + 15 = 25 Ohm
Parallel geplaatst is de totale weerstand 1 / 10 + 1 / 15 = 6 Ohm
De totale weerstand van in serie geplaatste weerstanden wordt dus groter dan de individuele
weerstandswaardes terwijl bij parallel geplaatste weerstanden de totale weerstand lager is
dan de individuele weerstanden.
TkkrLab - Arduino Workshop - 38 / 46
De wet van Ohm
In deze cursus gaan we een LED aansluiten op een Arduino. Daarnaast gaan we werken
met een potentiometer (variabele weerstand).
Om de benodigde waarden van-, de stroom door- of de spanningsval over een weerstand te
kunnen bepalen is het nodig de “wet van Ohm” te gebruiken.
De wet van Ohm ziet er in formulevorm zo uit:
Zoals je ziet is dit drie maal dezelfde formule, die ons vertelt dat de weerstand in Ohm gelijk
is aan de spanning in Volt gedeeld door de stroom in Ampère.
R [Ω] = weerstand in Ohm
V [V] = spanning in Volt
I [A] = stroom in Ampere
In een elektrisch schema zien de spanning(V), stroom (I) en weerstand (R) er als volgt uit:
Een enkele weerstand
Stel de batterijspanning is 10 volt en de stroom door het circuit is 2 Ampere, dan is de
weerstand 10 / 2 = 5 Ohm
Stel de batterijspanning is 10 volt en de weerstand heeft een weerstand van 1000 Ohm, dan
is de stroom die door het circuit loopt 10 / 1000 = 0,01 Ampere of 10 mA (milli Ampere).
TkkrLab - Arduino Workshop - 39 / 46
Stel er loopt een stroom van 1 Ampere door het circuit heen en de weerstand is 10 Ohm,
dan is de spanning over de weerstand 1 * 10 = 10 Volt
Spanningsdeler
Een spanningsdeler bestaat uit twee in serie geplaatste weerstanden. De spanningsval over
R1 + R2 is Vin en de uitgang is aangesloten op het verbindingspunt tussen de twee
weerstanden in. In deze situatie bepaalt de verhouding tussen R1 en R2 de spanning op de
uitgang.
De uitgangsspanning kan bepaald worden met de volgende formule:
Die formule kan worden afgeleid uit de wet van Ohm:
V out = I · R2
I =
V in
R1 + R2
( V out is gelijk aan de stroom door het circuit vermenigvuldigd met de weerstand van R2 )
(De stroom door het circuit is gelijk aan V in gedeeld door de totale weerstand)
Hieruit volgt dat V out =
V in · R2
R1 + R2
, ofwel V out = V in ·
R2
R1 + R2
Een spanningsdeler met R1 = 680 Ohm en R2 = 1300 Ohm kan bijvoorbeeld werken als
level-converter om 5 volt om te zetten naar 3.3 volt in een communicatielijn tussen twee
chips.
De waarden in dit voorbeeld zijn zo gekozen dat de stroom door het circuit 2,5mA is. Bij het
zelf ontwerpen van een spanningsdeler kiest je eerst de stroom die je door de
spanningsdeler wilt laten lopen, dit bepaalt de totale weerstand in de spanningsdeler.
Waarna de verhouding tussen de twee weerstanden de uitgangsspanning bepaald.
[Note: een spanningsdeler is niet geschikt als regulator voor de voeding van andere circuits omdat de load aan
de uitgang, die parallel staat aan R2, de uitgangsspanning zal be​ï​nvloeden]
TkkrLab - Arduino Workshop - 40 / 46
Een LED aan een Arduino
In deze cursus gaan we een LED aansluiten op een Arduino. Daarbij functioneert een
uitgang van de Arduino als spanningsbron.
Een LED is een stroomgestuurd component. Dit betekent dat de hoeveelheid licht die een
LED uitstraalt samenhangt met de stroom door de LED en niet met de spanning over de
LED.
Een LED heeft net als een normale diode een vaste spanningsval. De exacte spanningsval
per type LED verschilt en is in de datasheet te vinden.
De gemiddelde spanningsval van veel gebruikte soorten LEDs is meestal een waarde in de
volgende richting: Rood/infrarood: 1,9 volt , Groen: 2,1 volt, Geel: 2 volt, Blauw/wit: 3,6 volt
Een uitgang op de Arduino is verbonden aan de ground (0 volt) wanneer de uitgang LAAG
(uit) is en aan de voedingsspanning (5 volt) wanneer de uitgang HOOG (aan) is.
Het probleem
Direct aansluiten van de uitgangs-pin van de Arduino aan een rode LED zorgt er voor dat er
5 volt over een diode wordt gezet die een spanningsval van 1,9 volt heeft. Dit betekent dat er
ergens 3,1 volt moet worden verloren, in het pad naar de LED toe. Hoewel in theorie de
interne weerstand in een Arduino en van de aansluitdraden 0 ohm is is dat in de praktijk niet
het geval. Gelukkig, want dan zou de hoeveelheid stroom door het circuit oneindig hoog
worden. Helaas is zelfs met de interne weerstand en draadweerstand meegenomen de
stroom door het circuit nog steeds veel hoger dan de maximale stroom die een Arduino mag
leveren en door de LED gestuurd mag worden. Het resultaat is een kapotte of beschadigde
LED en Arduino.
De oplossing
Door zelf extra weerstand toe te voegen aan het circuit kan de stroom door het circuit
worden teruggebracht naar de gewenste hoeveelheid. Het schema van een LED aan een
spanningsbron komt er daardoor als volgt uit te zien:
De spanningsval over de weerstand is in dit geval de voedingsspanning (5 volt) min de
spanningsval over de led (1,9 volt): 3,1 volt dus. Stel we willen een stroom van 10 mA door
3,1
het circuit laten lopen, dan hebben we een weerstand van 0,01 = 310 ohm nodig.
TkkrLab - Arduino Workshop - 41 / 46
APPENDIX
Naslag / Internet bronnen
Arduino
Arduino - ​http://arduino.cc
Voorbeeld projecten - ​https://playground.arduino.cc/Projects/Ideas
Arduino forum nederlands - ​http://arduinoforum.nl
TkkrLab documentatie - ​https://tkkrlab.nl/wiki/Arduino
Sensor kit ‘37 in one’ - ​https://tkkrlab.nl/wiki/Arduino_37_sensors
Hardware voor Arduino
Kiwi Electronics (ook Adafruit & Sparkfun componenten) - ​https://www.kiwi-electronics.nl/
Floris.cc - ​http://floris.cc
Iprototype - https://iprototype.n
Conrad - http://conrad.nl
Variabelen type & waarden
TkkrLab - Arduino Workshop - 42 / 46
Arduino schema zelfbouw
TkkrLab - Arduino Workshop - 43 / 46
Arduino cheat sheet met C commando’s
TkkrLab - Arduino Workshop - 44 / 46
Arduino Pin layout
TkkrLab - Arduino Workshop - 45 / 46
Download