Harold Pootjes en Simon Pauw, Workshop Arduino Uno

advertisement
Workshop Arduino Uno
Touw dag 6 juni 2015
Harold Pootjes en Simon Pauw
Arduino Uno
Pagina 2
Een programmeerbare
controller
• The Arduino Uno is a programmable
microcontroller board based on the ATmega 328.
It has 14 digital input/output pins (of which 6 can
be used as PWM outputs), 6 analog inputs, a
16 MHz ceramic resonator, a USB connection, a
power jack and a reset button.
• Kloksnelheid: 16MHz
• Voeding van Arduino: via USB-kabel of via
externe spanningsbron. Arduino werkt intern met
5Volts spanning
Pagina 3
Voorbeelden van toepassing
Arduino in de praktijk
Pagina 4
Blokschema
Pagina 5
Nuttige web adressen
• http://www.arduino.cc/
Moeder site
• https://www.adafruit.com/ Componenten, libraries
• https://www.sparkfun.com/ Idem
• http://www.aliexpress.com/ Goedkope componenten
• http://fritzing.org/home/
Pagina 6
Schakelingen grafisch
Spanning, stroomsterkte en
weerstand
• Een spanningsbron levert een
spanningsverschil over zijn
uitgang: b.v. 5 Volt
• Als deze uitgangen verbonden
zijn via een (stroom)geleidende
kring loopt er een stroom: b.v.
0,1 Ampère
Volta
Ampère
• De grootte van die stroom is
afhankelijk van de weerstand in
de kring: b.v. 470 Ohm
• De wet van Ohm zegt: I = U/R
Pagina 7
Ohm
Digitale en analoge spanning
• Analoge spanning kan iedere waarde aannemen
tussen 0 en Vmax (of tussen –Vmax en +Vmax)
• Als spanning > drempelwaarde => signaal = 1
anders signaal = 0 : Digitaal!
Pagina 8
Programmeren van de Arduino
• Met de PC kan een programma voor de Arduino
geschreven worden
• Programmeertaal is C++
• PC moet editor hebben die programma kan
compileren en doorsturen naar de Arduino of je
moet gebruik maken van een Web-applicatie
(Codebender)
• Communicatie met Arduino gaat via een serieel
kanaal, zowel voor input als output
• Een programma voor de Arduino wordt een
sketch genoemd
Pagina 9
Programmeercyclus
• Ontwikkel sketch op PC in IDE (Arduino API ,
Eclipse met Arduino Plugin of via het Web
Codebender)
• Compileer en doe een upload naar de Arduino
via USB-kabel
• Arduino kan nu volledig zelfstandig functioneren
• Pc kan eventueel gebruikt worden om resultaten
van de Arduino te tonen
Pagina 10
Arduino IDE Instellingen
• Arduino IDE installeren
• Driver ch341se installeren
• Arduino type
instellen
• Com-poort nr
instellen
Pagina 11
Eclipse kent ook een Arduino
plugin
• http://www.baeyens.it/eclipse/how_to.shtml#/a
Pagina 12
Digitale output
• Pin 0 t/m 14 van de Arduino kunnen als digitale
input of output geconfigureerd worden.
• Een digitale output 0 komt overeen met een
spanning van 0 Volt (=gnd) op die Uitgang
• Een digitale output 1 komt overeen met een
spanning van 5Volt op die uitgang.
Pagina 13
Visualisatie van digitale output
• Als output = 1, kan een lampje branden. Beter:
Light Emitting Diode (LED) in serie met een
weerstand van 220 Ohm.
Gnd = 0 Volt
= - kant
Pagina 14
a
k
Langste poot is
anode +
Breadboard
• Dient om schakelingen te kunnen maken zonder
te solderen
• Horizontaal aan boven en onderkant zijn alle
ingangen verbonden evenals de verticale in het
middelste deel. In het midden van breadboard is
een scheiding aangebracht
Pagina 15
Weerstanden en hun
waarden
Pagina 16
Hello world voor Arduino
Basis
Knipper
Pagina 17
Arduino IDE 2
Compileren
Compileren en
naar Arduino
oversturen
Pagina 18
Toepassing
• Voor opdracht 1
Pagina 19
Opdracht 1a : Blink
•
Gebruik het programma van sheet 14 om een knipperende
LED te realiseren, eerst met de ingebouwde (poort 13)
•
Verbind een LED in serie met een weerstand van 220 Ohm
en sluit aan op 5V en gnd. Ga na of de LED brandt
•
Bouw de schakeling van sheet 19
•
Wijzig uw programma zodat nu de eigen LED gaat
knipperen
Pagina 20
Nogmaals digitale output
•
Pin 2 t/m 13 van de Arduino kunnen
als digitale output geconfigureerd
worden waarbij de frequentie
geregeld kan worden: de tijd dat de
output 1 is en de tijd dat de output 0
is.
•
Door de tijd dat de uitgang 1 is te
variëren kan een analoge spanning
op de uitgang gesimuleerd worden:
Pulse Width Modulation
•
Met analogWrite kunnen we een
analoge waarde tussen 0 (=0 Volt)
en 255 (= 5Volt) op een output pin
simuleren
Pagina 21
Opdracht 1b: fade
• Gebruik dezelfde schakeling maar maak nu
gebruik van analogWrite om een LED te
realiseren die eerst niet brandt, dan steeds feller
gaat schijnen en dan weer langzaam uitdooft en
dit steeds opnieuw.
• Gebruik een delay omdat anders de verandering
van de intensiteit niet goed te zien is.
Pagina 22
Input lezen
• De Arduino kan met digitalRead(pin) de waarde
van een digitale input lezen. Resultaat is een int
met waarde 0 of 1
• Digitale input kan gerealiseerd worden met een
drukschakelaar. (Zie foto voor aansluiting)
• Met analogRead(pin) kan de waarde van een
analoge input gelezen worden. Resultaat is een
int met waarden tussen 0 en 1023 (= 5Volt)
Pagina 23
Problemen bij digitale input
• Als een pin als input is gedefinieerd maar niet
aangesloten is, kunnen allerlei stoorsignalen
opgepikt worden
• Als een drukschakelaar verbonden is met een
input en uitstaat, hebben zo’n situatie
• Als we op de knop
drukken moet de
ingang 0 worden maar
als deze niet ingedrukt
is, kan de waarde
onbepaald zijn
Pagina 24
Oplossing
• Extra weerstand opnemen
• Arduino heeft ingebouwde
weerstand hiervoor dus een
externe weerstand is niet nodig
• Gebruik: pinMode(11,INPUT_PULLUP);
Open levert waarde 1, gesloten 0
• Nieuw probleem: dender
Pagina 25
Opdracht 2a
• Sluit een drukschakelaar op een van de inputs
van de Arduino aan en op de 5Volt. Sluit een led
met weerstand aan op een van de outputs.
• De led moet aan zijn
• Als op de schakelaar gedrukt wordt moet de LED
uitgaan en blijven
• Als weer op de schakelaar gedrukt wordt, moet
de LED weer aangaan
• Hint: gebruik een boolean variabele status die
aangeeft of de LED brandt of niet
Pagina 26
Opdracht 2b
• Sluit drie LED’s (rood, geel en groen)
• Realiseer een stoplicht waarbij rood en groen
drie seconden branden en oranje een seconde
• Als dit gelukt is voeg je een drukschakelaar
aangesloten op een input toe
• Wijzig het geheel zo dat na drukken op de
drukschakelaar het stoplicht alleen nog geel
knippert. Nogmaals op de schakelaar drukken
herstelt de normale knipperlicht functie
Pagina 27
Servo: output in de
vorm van stand van servo
Pagina 28
Opdracht 3
• Sluit een servo aan op de Arduino (let op de
kleuren!) en maak een programma waarbij de
servo vanuit de neutraal stand langzaam 90
graden naar links draait , daarna 180 graden
naar rechts en dan weer terug naar de
neutraalstand.
• Vervolgens moet de servo 3 seconde niets doen
en dan moet het geheel zich herhalen
Pagina 29
Gegevens tonen op de pc
• De Arduino kan serieel gegevens naar de PC
sturen
• Hiervoor is een seriële monitor beschikbaar in de
vorm van een standaard object Serial
• Serial.begin(<baudrate>) meestal 9600
• Serial.print(<value>) of Serial.println(<value>)
• Op de pc moet de seriële monitor gestart worden
om de print-operaties zichtbaar te maken
• Let op! Je kunt geen samengestelde argument
gebruiken dus niet b.v. “temperatuur=“+temp;
Pagina 30
Output tonen via monitor
Pagina 31
Analoge input
• De Arduino Uno kent 6 analoge inputs
• Iedere input kan een analoge spanning meten tot
5 Volt
• Aan boord is een AD-converter die het analoge
signaal omzet naar een digitale waarde
• Methode analogRead(<pin>) leest het analoge
signaal en levert een getal tussen 0 en 1023
• Voor de pin moet je A0 t/m A5 invullen
• Omzetten naar werkelijke waarde: *5.0/1023
Pagina 32
Spanningsdeler
Wet van Ohm toepassen:
I = 5/(100+400) = 0,01 A
Nogmaals toepassen op de
afzonderlijke weerstanden:
U = 0,01 x 100 = 1 Volt
U = 0,01 x 400 = 4 Volt
(samen moeten ze gelijk zijn
aan de spanning van de bron
= 5 V)
De Voltmeter geeft dus 4 Volt aan
De spanning wordt verdeeld over de twee weerstanden en wel in de verhouding
van de groottes van die weerstanden: Spanningdeler
Pagina 33
LDR
• Een LDR is een weerstand waarvan de waarde
afneemt met toenemende lichtsterkte
• Een LDR kan opgenomen worden in een
spanningsdeler
• De gemeten spanning
is een maat voor de
lichtsterkte
Pagina 34
Opdracht 4a
• Maak een spanningsdeler met een 10 kOhm
weerstand en een LDR.
• Sluit deze aan op een analoge input van de
Arduino
• Laat iedere 0,5 sec de gemeten waarde van de
input via de seriële monitor zien
Pagina 35
Opdracht 4b
• We maken met de LDR een lichtschakelaar:
als de lichtsterkte onder een bepaald niveau
komt moet een LED gaan branden
Pagina 36
Opdracht 4c
• Gebruik de schakeling van opdracht 4a maar
verbind ook een servo met de Arduino.
• We gebruiken in plaats van de seriele monitor nu
de servo als uitvoer.
• We kunnen een schaalverdeling maken in de
vorm van een halve cirkel: van 0 tot 5V en de
arm van de servo geeft de grootte van de
spanning aan
• Beweeg uw hand om de grootte van de spanning
te beinvloeden
Pagina 37
Libraries
• Om het werken met
bepaalde componenten
eenvoudiger te maken,
bestaan er een grot aantal
libraries voor de Arduino
• Servo library was hier een
voorbeeld van
• Via Add .Zip Libraries kun
je zelf libraries toevoegen
of via Manage Libraries
beheren
Pagina 38
I2C communicatie
• Veel sensoren communiceren via het i2c
protocol, b.v. drukmeter bmp180
• Via library Wire kan gecommuniceerd worden
• Er zijn slechts twee signaaldraden nodig SDA en
SLC
• Er kunnen meerdere componenten in serie
geschakeld worden
• Voor de component zelf is soms ook een
bijbehorende library nodig
Pagina 39
Voorbeeld
Pagina 40
Opdracht 5
•
Verzin iets leuks en maak het
•
Je kunt gebruik maken van:
Eigen componenten
BMP 180 druk sensor
HCSR04 Afstandssensor
Zonnecel
DHT 11 Vochtigheid en temperatuur meter
ADXL345 3-as g-meter
BH1750 Lichtsensor
PIR bewegingsdetector
OLED display
Capacitieve piano
WS2812 Programmeerbare leds
Pagina 41
Download