Hieronder maak je kennis met enkele sensoren. Eerst en enkel eenvoudige, nadien worden ze wat complexer.
Veel sensoren zijn eigenlijk complexe weerstanden. Door de eigenschappen van bepaalde materialen te gebruiken en te combineren wordt een weerstand gecreëerd die afhankelijk is van externe factoren zoals licht, temperatuur, vochtigheid...
Bij de eerste sensoren is de code daardoor vergelijkbaar met de code voor een potmeter. Ook hier wordt een analoog signaal gelezen, en eventueel omgerekend naar een eenheid die ons meer informatie geeft, zoals °C.
De lichtsensor:
Onze lichtsensor (5528 LDR) is dus een lichtgevoelige weerstand. Hoe minder licht erop valt, hoe groter de weerstand.
Wanneer we deze sensor willen aansluiten op onze Arduino, dan moeten we gebruik maken van een spanningsdeler. Dat is schakeling waarbij we onze sensor combineren met een weerstand van 1000Ω (=1KΩ).
In de opstelling zoals hiernaast krijg je een lage waarde bij veel licht, wanneer je de 5v en GND omwisselt krijg je een hoge waarde bij veel licht.
De middelste draad gaat naar de Arduino-pin die we in onze code hebben aangeduid om het signaal te lezen met de analogRead functie.
Schema van een spanningsdeler:
Hieronder zie je de schakeling van een lichtsensor en een Arduino UNO. Daarnaast zie je de code om de gemeten waarde op de lichtsensor weer te geven op de Serial Monitor. De schakeling is gemaakt in Tinkercad, maar op je Brainbox of een UNO blijft alles hetzelfde. De code is gemaakt in Tinkercad en de Arduino IDE. Je merkt dat dit eigenlijk even eenvoudig is als de code voor de potmeter.
1) Maak een nieuwe schakeling in Tinkercad (Oef5_Naam_Voornaam) en ga nu zelf een lichtsensor met een spanningsdeler aansluiten op een Arduino.
2) Maak de code zoals hierboven. Zorg dat je elke stap begrijpt.
3) Maak je schakeling zo, dat je een lage waarde krijgt bij veel licht en kijk op je Serial Monitor of dat lukt. Eventueel draai je 5V en GND om, zodat je de omgekeerde waarde krijgt.
4) Voeg nu een gele LED met weerstand toe aan je schakeling.
5) Voeg nu de code toe zodat je LED harder brandt wanneer er minder licht op de sensor valt, en zachter brandt wanneer er meer licht op de sensor valt. De schakeling en de code hiervoor zijn erg vergelijkbaar met die van oef 4 met de potmeter. Ook hier zal je een map functie moeten gebruiken.
6) Let op de details: Bestandsnaam, commentaren, kleuren van draden, correcte weerstanden, Analog IN pin voor sensor, PWM-pin voor LED?
Temperatuursensor:
Dit type temperatuursensor wordt ook vaak een thermistor genoemd. Het is immers een soort van weerstand (resistor) waarvan de waarde in (Ohm) afhankelijk is van de temperatuur. Hoe hoger de temperatuur, hoe lager de weerstand en hoe meer spanning er binnenkomt op de signaalpin van onze Arduino.
Er zijn verschillende types (MCP9700, LM35, TMP36) die allemaal erg gelijkaardig zijn. In de Tinkercad omgeving vind je de TMP36, in de nieuwe Arduino boxen op school met de Uno vind je de LM35 en in de oudere boxen met de Brainbox vind je de MCP9700.
De MCP9700 kan temperaturen meten tussen -40 en 150°C, met een nauwkeurigheid van 4°C.
De TMP36 kan meten tussen -40en 125°C met een naukeurigheid van 2°C.
De LM35 kan meten tussen -55 tot 150°C met een nauwkeurigheid van 0,5°C. Een moeilijkheid bij deze sensor is dat je bij negatieve temperatuur ook een negatieve spanning krijgt van deze sensor. Dat maakt het programmeren wat moeilijker.
Bij onze lichtsensor was het voldoende dat we konden registreren of het licht of donker was. Bij onze temperatuursensor willen we natuurlijk de temperatuur meten in °C.
In onze code hieronder zie je dat dat in enkele stappen gebeurt.
1) In regel 10 van de code wordt onze spanning op de sensorpin gelezen en bijgehouden (als een getal tussen 0 en 1023) in de variabele 'tempWaarde'.
2) In regel 11 wordt dit getal (tussen 0 en 1023) terug omgerekend naar de gelezen spanning in Volt (tussen 0V en 5V).
3) In regel 12 wordt de gelezen spanning omgerekend naar de temperatuur in °C. Die berekening gebeurt op basis van informatie van de technische fiche van de sensor. Daar kunnen we lezen dat elke graad verschil in onze sensor wordt omgezet naar een verschil van 10 mV en dat de sensor begint op 500mV. Deze berekening hoef je zeker niet van buiten te kennen. Je mag hiervoor steeds je fiches gebruiken. Zorg dat je wel van elke regel code begrijpt wat er gebeurt.
Een temperatuursensor aansluiten:
Met de platte kant aan de voorzijde gaat de linkse pin naar 5V, de rechtse pin naar GND en de middelste pin naar de Arduino-pin die we in onze code hebben aangeduid om het signaal te lezen met de analogRead functie.
De schakeling:
Hieronder zie je de schakeling met een vergelijkbare temperatuursensor (TMP36) en een Arduino UNO in Tinkercad.
De schakeling op de Brainbox met de MCP9700 en de code zijn net hetzelfde. Met de bijhorende code hiernaast wordt de gemeten temperatuur weergegeven in de Serial Monitor.
De code voor de MCP9700 of TMP36:
Hiernaast vind je eerst de code om de MCP9700 of TMP36 te gebruiken.
In die code worden enkele berekeningen uitgevoerd om de gelezen waarde op de sensorPin om te zetten naar de juiste temperatuur.
Zoals je weet, slaat onze Arduino de gemeten spanning meteen op als een getal tussen 0 en 1023. Dat gebeurt in regel 10.
In regel 11 wordt die waarde terug omgerekend naar de gemeten spanning.
In regel 12 wordt die gemeten spanning dan weer omgerekend naar de temperatuur in °C.
De code voor de LM35:
In de code voor de LM35 gebeurt grotendeels hetzelfde. Hier wordt de spanning eerst omgerekend naar milliVolt. Nadien wordt een andere omrekening gebruikt omdat deze sensor een andere spanning geeft in vergelijking met de andere sensors.
De code voor de MCP9700 en de TMP36:
De code voor de LM35:
1) Maak een nieuwe schakeling in Tinkercad (Oef6_Naam_Voornaam) en ga nu zelf een temperatuursensor aansluiten op een Arduino.
2) Maak de code zoals hierboven. Zorg dat je elke stap begrijpt. Test met de Serial Monitor of je code werkt.
3) Ga je schakeling nu uitbreiden met een rode LED en een blauwe LED en de juiste weerstanden.
4) Ga je code nu uitbreiden, zodat de rode LED harder brandt naarmate het warm wordt en minder brandt wanneer het kouder wordt. Je zal hier net als bij de potmeter en de lichtsensor een map functie en analogWrite moeten gebruiken. Kijk best even in de Serial Monitor welke waarden je Arduino krijgt van de sensor, zo kan je de getallen in je map functie nog verfijnen. De sensor gebruikt immers niet alle waarden tussen 0 en 1023.
5) Ga nu je code verder uitbreiden, zodat de blauwe LED harder brandt naarmate het kouder wordt en minder brandt wanneer het warmer wordt.
6) Controleer de details van je schakeling:
- Werden de juiste weerstanden gebruikt (zie fiches of site: Weerstanden berekenen )
- Werden alle stappen in je code verduidelijkt met commentaar?
- Werden voor de draden de afgesproken draden gebruikt? (Zie site: afspraken bij het maken van schakelingen)
- Gaf je je opdracht de juiste bestandsnaam?
1) Dupliceer je schakeling van opdracht 6 en geef ze een nieuwe naam: Oef7_Naam_Voornaam
2) Vervang de twee LED's nu door één RGB-LED. Let erop voor elke kleur die je gebruikt de juiste weerstand te gebruiken. Kijk eerst even bij Onderdelen of in je fiches als je nog niet vertrouwd bent met de RGB-LED
3) Test je code opnieuw en kijk of alles werkt met de RGB-LED.
4) Ga nu je code uitbreiden zodat bij 0°C de rode kleur van de RGB-LED uit staat (variabele voor rode kleur = 0) en bij 100°C de rode kleur van de RGB-LED maximaal brandt (variabele voor rode kleur = 255). Dit kan je doen door met een map-functie de temperatuur tussen 0 en 100 °C om te zetten naar een waarde tussen 0 tot 255 (of 255 tot 0).
5) Ga je code verder uitbreiden zodat bij 0°C de blauwe kleur van de RGB-LED maximaal brandt (variabele voor blauwe kleur = 255) en bij 100°C de blauwe kleur van de RGB-LED helemaal uit staat ( de variabele voor blauwe kleur = 0).
6) Je zal nu wel moeten zorgen dat de variabele voor je LED tussen 0 en 255 blijft. Er zijn immers ook temperaturen hoger dan 100 en lager dan 0 mogelijk. Dat kan eenvoudig door een stukje code toe te voegen waarmee de variabele voor je LED 'wanneer die hoger is dan 255 ' (if >255) weer op 255 wordt gezet. Hetzelfde doe je wanneer je variabele onder 0 gaat.
7) Ga nu ook code toevoegen voor de zones onder 0°C en boven 100°C: bij alle temperaturen die lager zijn dan 0°C moet het blauwe licht knipperen (variabele voor blauwe kleur afwisselend 255 en 0), en bij alle temperaturen die hoger zijn dan 100°C moet de rode LED knipperen (variabele voor rode kleur afwisselend 255 en 0). Dit kan je doen zoals je gewoon bent uit Processing: bijvoorbeeld if( ... < ...) {...}
8) Je zorgt ervoor dat in de SerialMonitor steeds een duidelijk leesbaar overzicht te zien is van: 1) de temperatuur, 2) de waarde van de variabele van de rode led, 3) de waarde van de variabele van de blauwe led. Bijvoorbeeld:
58.89 graden C - ledValR = 147 - ledValB = 108
9) Noteer bij elk deel van je code betekenisvolle commentaren zodat bij elke stap duidelijk is wat er daar gebeurt.
10) Controleer nog even de details in je schakeling (bestandsnaam, correcte weerstanden, kleuren van draden, commentaren, keuze van de pins)
Misschien heb je intussen al met een thermistor gewerkt. Die geeft een analoog signaal door dat je moet omrekenen om de temperatuur in °C te kennen. Er zijn verschillende andere sensoren die meteen de temperatuur in °C weergeven en daarbij ook nog andere zaken meten.
Hieronder zie je enkele veelgebruikte temperatuursensoren. Zoals dat altijd gaat, heeft elke sensor zijn voor- en nadelen. Wie wat meer wil lezen over de verschillende temperatuursensoren vindt hier een overzichtelijke vergelijking.
DHT22 zonder board
Deze sensoren zijn erg eenvoudig aan te sluiten op een digitale input pin, 5V en GND. Naast de temperatuur geven ze ook de vochtigheid. De DHT11 is wat ouder en kleiner. Hij is een pak trager (om de twee seconden een meting ) en minder nauwkeurig dan de DHT22, maar is ook wel een stuk goedkoper.
Stap 1) Libraries installeren: Wanneer je deze sensoren wil gebruiken zal je een library moeten installeren: 'DHT sensor library'.
Als die al niet geïnstalleerd was zal je ook de 'Adafruit Unified Sensor' library moeten installeren.
Een library installeren doe je via: Hulpmiddelen > Bilbliotheken beheren > in het zoekvenster de gewenste library (DHT sensor library) ingeven en op installeren klikken. De library zorgt ervoor dat de data (temperatuur en luchtvochtigheid) gewoon via een digitale IN pin kan gelezen worden.
Deze library is van Adafruit.
DHT11 op een board
Stap 2) De sensor aansluiten:
Hiernaast vind je een schema waarin je kan zien hoe je de DHT11 of 22 moet aansluiten op je Arduino.
DHT11/22 zijn op dezelfde manier opgebouwd en de pins staan in dezelfde volgorde. Let wel op:
de sensor zonder board: hier moet je een weerstand van 10K Ohm verbinden tussen de 5V en de signaalpin,
de sensor met een board (DHT-module): hier moet je controleren of jouw versie van sensor+board identiek is. Bij varianten kan ook de volgorde van de pins veranderen.
De DHT-module verbinden met de Arduino
DHT zonder board
DHT-module
Stap 3) De code voor de DHT(11 of 22):
Hiernaast zie je de code om de data (temperatuur en vochtigheid) van de de DHT11 of 22 door te sturen naar de Serial Monitor. Overloop rustig even alle stappen en de commentaren.
Bovenaan worden vooral Libraries opgehaald.
In void setup wordt de communicatie met Serial Monitor en sensor gestart.
In void loop worden de waarden doorgestuurd naar de Serial Monitor. De waarden van de sensor worden voorafgegaan door het woord dat ze aankondigt, en gevolgd door de eenheid.
Hieronder zie je het resultaat in de Serial Monitor:
De BME280
De BME280 is een sensor die de luchtdruk kan meten. Daarnaast geeft hij ook de luchtvochtigheid en de temperatuur. Hij is behoorlijk nauwkeurig (vochtigheid ±3%, luchtdruk ±1hPa, temperatuur ±1°C), niet duur en bovendien verbruikt hij erg weinig stroom. Aangezien je met de luchtdruk de hoogte kan meten, kan je deze sensor ook als een hoogtemeter gebruiken. Hij is dan ongeveer op 1m nauwkeurig. Omdat de luchtdruk dagelijks schommelt moet je in dat geval in je code wel de luchtdruk van die dag ingeven op zeeniveau. Die kan je elke dag vinden op de site van het KMI. De metingen van de BME280 zijn erg precies, maar omdat de sensor zelf wat opwarmt meet hij vaak 1 of 2 graden te hoog.
De aansluiting is iets complexer omdat de sensor met de Arduino communiceert via I2C. Dat is een systeem waarmee een Arduino via twee draden met een ander toestel kan communiceren. In het schema hiernaast kan je zien hoe je de pins moet verbinden. VIN mag zowel aan 5V als aan 3,3V verbonden worden. Let op dat is niet bij alle varianten van dit bordje mogelijk! Er zijn versies die je enkel op 3,3V mag aansluiten en die onbruikbaar worden als je ze op 5V aansluit. Als je deze sensor zelf aankoopt zal je wel nog even de pins moeten solderen aan het plaatje.
Stap 1) De libraries installeren: Ook bij deze sensor zal je twee libraries moeten installeren: 'Adafruit_Unified_Sensor' en 'Adafruit_BME280'.
Een library installeren doe je via: Hulpmiddelen > Bilbliotheken beheren > in het zoekvenster de gewenste library ingeven en op installeren klikken.
Stap 2) De sensor aansluiten:
Hiernaast vind je een schema waarin je kan zien hoe je de BME280 moet aansluiten op je Arduino.
Op de Brainbox (Leonardo) staan de SCL en SDA pins duidelijk aangegeven.
Op de Uno en Nano 33 BLE Sense gebruik je hiervoor pin A5 voor SCL en A4 voor SDA. Op nieuwe versies van de Uno kan je ook de SCL en SDA pin gebruiken (naast de AREF-pin).
Meer informatie over I2C en het schema met een voorbeeld van een schakeling vind je op deze site bij communicatie
Stap 3) De code voor de BME280:
Vergeet niet vooraf de twee libraries te installeren (zie info hierboven):
Adafruit_Unified_Sensor
Adafruit_BME280
Hiernaast zie je de code om de gegevens van de BME280 naar de serial monitor te sturen. Hier gebeurt eigenlijk bijna hetzelfde als bij de DHT:
Bovenaan worden de Libraries opgehaald.
In void setup wordt de communicatie met Serial Monitor en de sensor gestart.
In void loop worden de waarden doorgestuurd naar de Serial Monitor. De waarden van de sensor worden voorafgegaan door het woord dat ze aankondigt, en gevolgd door de eenheid.
Hieronder zie je het resultaat dat je krijgt in de Serial Monitor.
De BMP280 is een wat goedkopere variant en er is vaak verwarring tussen de twee, zelfs bij verkopers op het internet. Al twee maal hebben we de BME280 besteld en kregen de BMP280 geleverd. Omdat de sensor op hetzelfde bord zit en het verschil klein is valt dit nauwelijks op. De BMP kan ook de luchtdruk en de temperatuur meten, maar geen vochtigheid.
De BMP-280 modules die we op school hebben, werken niet met de Adafruit libraries.
We gebruiken hiervoor de BMP280_DEV library.
De code waar we van vetrekken vind je bij: Bestand > Voorbeelden > BMP280_DEV > BMP280_I2C_Alt_Normal
Wanneer je echt de hoogte wil meten, dan kan je beter gebruik maken van de BME280 met e Adafruit library. Bij de BMP280 en deze library kan je de luchtdruk immers niet ingeven in je programma. Hiervoor moet je echt op zoek gaan naar de 'header file' in je library: Documenten > Arduino > Libraries > BMP280_DEV > BMP280_DEV.h
Die kan je openen met Visual Studio of een teksteditor. Daarin kan helemaal onderaan de luchtdruk op zeeniveau ingeven.
BMP280 of BME280?
Links zie je de BMP280 (temp + luchtdruk). De sensor op het bord is eerder rechthoekig en het gaatje zit bovenaan.
Rechts zie je de BME280 (temp + luchtvochtigh + luchtdruk). De sensor op het bord is vierkant en het gaatje zit onderaan.
Op de sensor zelf staat ook steeds een opdruk met 5 tekens. Die kan je zonder vergrootglas nauwelijks lezen. Bij de BME is het voorlaatste teken een 'U' bij de BMP is dat een 'K'.
De SEN0232 Sound-level sensor: Dit is een sensor die de geluidshoeveelheid kan meten zodat deze eenvoudig omgezet kan worden in decibels. Goedkopere sensoren kunnen vaak wel een geluidsverschil meten, maar zijn niet nauwkeurig genoeg om dit signaal ook om te zetten naar decibels. Bij deze sensor kan dat wel. Bovendien is de aansluiting en de code erg eenvoudig. De sensor kan geluid meten tussen 30dB en 130dB met een nauwkeurigheid van 1,5dB.
Opgelet: Dit is een dure en erg gevoelige sensor. Zorg dat je de onderdelen van de sensor nooit aanraakt met je vingers of met een voorwerp. Vooral de micro (de metalen cilinder met een zwart laagje) is erg kwetsbaar. Neem de sensor enkel vast aan de zijkanten van het plaatje. Gebruik best ook ESD-handschoenen en leg de sensor niet op een geleidende ondergrond.
De SEN0232 aansluiten: De sensor wordt geleverd met een kabel met drie draden. Die is erg vergelijkbaar met de aansluiting van een servo:
De zwarte gaat naar GND
De rode gaat naar 3,3V of 5V
De blauwe gaat naar een analoge IN pin (in dit voorbeeld pin A0)
De code: We gebruiken hieronder letterlijk de voorbeeldcode van de sensor. De belangrijkste variabele voor ons is natuurlijk dbValue, die geeft het aantal decibels aan dat werd gemeten.
De SenseAir S8 CO2-sensor: Deze sensor meet het CO2 gehalte in de lucht (±3%). Dit wordt wordt weergegeven in ppm (parts per million). Voorzie steeds voldoende ruimte boven en onder voor luchtcirculatie. De sensor moet steeds even opwarmen en geeft pas na 5 weken echt correcte metingen.
Let op: deze sensor is erg gevoelig! Je mag nooit de sensor aanraken met je blote handen of met een voorwerp. Je mag enkel het uiteinde met de pins boven en onder aanraken. Zelfs dan mag je de sensor enkel vastnemen met ESD-handschoenen (statische elektriciteit vermijden). De sensor mag niet op geleidend materiaal liggen en moet bewaard worden in een ESD-zak.
Hoewel dit een erg nauwkeurige sensor is lijkt hij in Arduino projecten niet zo vaak gebruikt te worden. Op het internet is het wat zoeken maar de library. Via deze link: www.co2meters.com kan je de library meteen downloaden.
Hier komt ook de voorbeeldcode van die we gaan gebruiken. Je kan ze vinden bij de documenten in Smartschool en ze wordt ook hieronder in het document getoond.
De code voor communicatie via UARt ziet er wat ingewikkeld uit. Laat je daardoor niet afschrikken. De hele functie void sendRequest regelt alles wat me de communicatie via UART te maken heeft. In void loop vind je alles wat je nodig hebt om je code te kunnen aanpassen aan je eigen projecten.
In het document hieronder kan je lezen hoe je bijvoorbeeld je voor deze sensor mee verwerkt in de code voor data-logging van hierboven.
Meer informatie over deze sensor en de code ervoor vind je in het stukje 'communicatie via UART' op deze site.
De SenseAir S8 CO2-sensor aansluiten op de Brainbox Arduino. De schakeling:
Een ultrasone afstandssensor meet afstanden zoals een vleermuis of een duikboot: een geluid wordt verzonden, en de Arduino meet de tijd tot de echo aankomt.
Berekening: Geluid in een kamer heeft een snelheid van ongeveer 340 m/s. Omdat onze Arduino meet in microseconden (1/1.000.000 sec) en in centimeter krijgen we 0,0340 cm/uS. In een breuk komt dit ongeveer overeen met 1/29,4.
Aangezien ons geluid heen en weer gaat mogen we de duurtijd halveren om de afstand te bepalen. Vandaar de omrekening: distance = ((duration / 2)/29,4).
De sensor kan afstanden meten van 2 cm tot zo’n 4,5m met 0,5cm nauwkeurigheid.
Werking: Onze Arduino stuurt een signaal naar de ‘Trig-pin’ op de sensor, en geeft via de ‘Transmitter’ een onhoorbaar geluid (boven 20kHz). Nadien wordt via de ‘Echo-pin’ gemeten hoe lang het duurt voor de echo weer binnenkomt via de ‘Receiver’. Op basis van die tijdsduur kan je meten hoe ver een voorwerp van de sensor staat. Het voorwerp moet wel recht voor de sensor staan.
Aansluitingen:
Vcc - naar 5V op Arduino
Trig - naar signaalpin op Arduino (hier 18)
Echo - naar echopin op Arduino (hier 19)
(OUT - niet verbinden met Arduino)
GND - naar Ground op Arduino
Grondvochtigheidssensor: Met deze sensor kan je de vochtigheid van de grond meten. Dit maakt het mogelijk om bijvoorbeeld een signaal te geven wanneer grond te droog of te vochtig wordt, en zelfs het bewateren van planten volledig te automatiseren.
Aansluiting: De aansluiting van deze sensor is erg eenvoudig:
Pin S gaat naar je signaalpin (hier A0)
Pin + gaat naar 5V
Pin - gaat naar GND
De twee punten mag je gewoon in de grond steken.
De code: de code is erg eenvoudig. Er wordt enkel een analoog signaal gemeten en hier wordt dat dan doorgegeven aan de Serial Monitor.
Opdracht automatische bewatering van planten: Met behulp van enkele eenvoudige darmpjes, een PET-fles en een servo kan je nu zelf een volledig automatisch bewaterings-systeem maken.
Aanpak: Bekijk de voorbeeldcode. Sluit de sensor aan op je Arduino en ga op zoek naar de ideale vochtigheid voor je grond. Je PET-fles is het waterreservoir. Van hieruit vertrekt een darmpje dat het water naar de grond voert. Met je servo kan je de toevoer van water starten of stoppen wanneer bepaalde grenswaarden bereikt worden.
IR-sensor: Met deze sensor kan je detecteren of er infra rode stralen aanwezig zijn. Deze elektromagnetische straling is niet zichtbaar voor het blote oog. IR-stralen worden toegepast in o.a. afstandsbedieningen.
Aansluiting: Zoals in de afbeelding te zien is, moet je de drie beentjes juist verbinden.
OUT: gaan naar een digital pin naar keuze (in het voorbeeld pin 9)
GND: gaat eerst naar een weerstand van 220 ohm (BELANGRIJK), vervolgens naar de GND
VCC: gaat naar 5V
ter info: IR-stralen zijn tevens warmtestralen. Hoe hoger de temperatuur van een voorwerp is, hoe meer IR-stralen dat er uitkomen. Inbraakalarmen maken daar gebruik van (de lichaamstemperatuur van een dief zal meer zijn dan die van de kamer/omgeving).
De schakeling:
Er wordt een rode LED gebruikt als uitvoer. Deze zal een seconde branden van zodra de sensor een IR-straal heeft opgevangen. De LED wordt aangestuurd met pin 3 (als OUTPUT)
De sensor is verbonden met pin 9 (als INPUT) en zal een 1 of 0 doorsturen naar de arduino van zodra het programma start. De + of - van de sensor moet eerst passeren via een weerstand van 220 ohm. Hier is de weerstand geschakeld bij de + kant, maar dat mag je dus kiezen.
De code:
Je kan in de commentaren (de //* stukjes) van bovenstaande code lezen wat de bedoeling is van een bepaald commando. De structuur gaat als volgt:
eerst de woorden 'sensor' en 'led' koppelen aan de juiste pin
in void setup toewijzen dat sensor een input zal zijn, de led wordt voor de veiligheid op uit gezet
in void loop uitlezen wat het signaal van de sensor is, en de led laten branden als er een signaal is gedetecteerd
Een voordeel van IR (=infrarood) licht is dat het weinig hinder ondervindt van ander licht (tenzij rechstreeks zonlicht).
Met een IR-emitter LED die infrarood licht kan uitzenden en een IR-receiver LED die infrarood licht kan ontvangen kunnen we een sensor maken die bijvoorbeeld afstanden kan inschatten op basis van het weerkaatste IR-licht.
Op basis van het weerkaatste licht kan je ook kijken of een ondergrond bijvoorbeeld wit of zwart is. Hiermee heb je meteen de basis voor een lijnvolgende robot.
De schakeling:
De transparante IR-LED is de zender, de zwarte is de ontvanger. In het schema hiernaast wordt de zender blauw afgebeeld.
De zender: Aangezien de zender best veel stroom verbruikt mag je die op de Brainbox enkel aansluiten op de PWM-pins D5, D6, D9 of D10. We gebruiken dan de H-brug, wat betekent dat we de Brainbox aansluiten op een adapter en dat we de jumper op '5V from adapter' moeten zetten.
We schakelen daarna twee weerstanden van 100Ω parallel en na de LED gaan we naar GND.
De ontvanger: De werking van de ontvanger is wat te vergelijken met een lichtsensor. Hoe meer licht op de LED valt, hoe beter hij zal geleiden. Meer licht geeft dus meer spanning.
Je sluit de LED aan op 5V. De draad van 5V loopt naar het korte beentje (cathode) van de LED. Vanuit het lange beentje vertrekken twee draden. Eén gaat via een weerstand van 1KΩ naar GND, de tweede gaat via een weerstand van 220Ω naar je analoge IN-pin.
De code: Met de voorbeeldcode hieronder kan je je schakeling testen. Je IR-ontvanger zou bij meer IR-licht een hogere waarde moeten geven. Dat kan je testen met wit en zwart papier, of hetzelfde papier op een andere afstand.
Een IMU staat voor Inertial Measurement Unit. Dit is een elektronisch onderdeel dat bestaat uit 3 accelerometers, 3 gyroscopes en meestal ook 3 magnetometers. Daarmee kan het beweging, oriëntatie en draaiing meten.
Een AHRS systeem kan hetzelfde maar kan bovendien op basis van de bovenstaande gegevens ook nog informatie doorgeven over oriëntatie en de koers (richting van de beweging).
De NXP Precision 9DoF Breakout
Door twee sensoren op een module te combineren heeft Adafruit een goedkoop en precies AHRS-systeem gemaakt.
De module kan werken op een Uno (ATmega328), maar een zwaardere processor geeft wat meer mogelijkheden.
De schakeling: Hiernaast zie je een voorbeeld van de schakeling met een ander board, maar op een Arduino kan je dezelfde schakeling maken:
GND-GND
Vin naar 5V of 3V op de Arduino
SCL naar SCL
SDA naar SDA
Libraries: Deze libraries heb je nodig en kan je installeren via de Arduino Library Manager:
Adafruit_FXOS8700
Adafruit_FXAS21002C
Adafruit Unified Sensor (Adafruit_Sensor)
Adafruit AHRS - Bij deze laatste mag je alle bijhorende libraries mee installeren.
Na het installeren van deze libraries sluit je Arduino even af om het weer op te starten.
Zowel van de FXOS8700 (accelerometer) als van de FXAS21002c (gyrosensor) kan je nu voorbeeldcode vinden om de sensoren te testen. Bij beide heet die 'sensorapi'. In de Serial Monitor kan je nu de output van de sensor aflezen.
Kijk wat de resultaten zijn als je de sensor beweegt, kantelt, draait...
Meer info over deze module vind je op de pagina van Adafruit hierover.
Met deze sensor kan je een hartslag en de waarde van de zuurstofsaturatie in het bloed meten.
De werking van de sensor is erg eenvoudig, maar de sensor is erg gevoelig aan de hoeveelheid druk die wordt uitgeoefend. Wanneer je je vinger op de sensor legt kan je zeker al een test doen, maar voor nauwkeurige resultaten kan je de sensor best met een rubberen band op je huid vastmaken, zodat de druk gelijk blijft.
De schakeling: aangezien de sensor gegevens doorgeeft via I2C is de schakeling opnieuw erg eenvoudig:
GND-GND
VIN-5V op de Arduino
SCL-SCL
SDA-SDA
De library: voor deze sensor kan je best de 'Sparkfun MAX3010x Pulse and Proximity Sensor Library installeren'
De code: Eens je de library hierboven geïnstalleerd hebt kan je bij de voorbeelden in de library voldoende voorbeeldcode vinden om te gaan experimenteren. Je kan bijvoorbeeld een hartslag aflezen in de Serial Monitor of plotten in de Serial Plotter of de zuurstofsaturatie meten.
Meer info: In deze Youtube video vind je meer informatie en enkele voorbeeldprojecten om je op weg te helpen met deze sensor.