Deze kleine Arduino lijkt wat op de Arduino Nano, maar zit propvol met allerlei sensoren en mogelijkheden: sensoren voor luchtdruk, temperatuur, vochtigheid, een sensor die gebaren kleuren en nabijheid registreert, een micro, een IMU (Inertial Measurement Unit) met een gyroscoop, accelerometer, magnetometer, een RGB-led. Je kan op deze Arduino ook Bluetooth gebruiken en je kan er zelfs Machine Learning models op installeren en gebruiken. Voor niet al te veel geld heb je dus een superveelzijdige Arduino.
Wat meer informatie over deze Arduino vind je ook op de 'getting started' pagina en de product pagina over de NANO 33 BLE Sense op de Arduino-site.
De microcontroller van de Arduino NANO 33 BLE Sense werkt op 3,3V! Je mag dus nooit meer dan 3,3V verbinden met de analoge of digitale pins. Anders beschadig je deze Arduino. Sommige sensoren of actuatoren die we gebruiken met een Uno zullen nu dus niet bruikbaar zijn.
De microcontroller werkt enkel op 3,3V, maar als voeding kan je de USB-aansluiting gebruiken of een externe voeding tussen 5V en 21V aansluiten op de Vin-pin (hiernaast linksonderaan).
De 5V-pin is aanwezig, maar om die te kunnen gebruiken moet er aan de onderkant een bruggetje gesoldeerd worden én de Arduino moet voeding krijgen via de USB-poort. De 3V-pin is wel standaard te gebruiken.
Er zijn 14 digitale pins (0 t.e.m. 12) maar we gebruiken vooral de pins aan de rechter zijde (D2 t.e.m. D12). Al de digitale pins zijn ook te gebruiken als PWM-pins. Aan de linkerzijde hebben we de 8 analoge IN pins.
Communicatie: Voor meer informatie over communicatie kan je terecht op de pagina over communicatie.
We geven hier enkel de belangrijkste pins.
Voor je kan gaan programmeren moet je wel nog deze Arduino toevoegen in de Boards Manager:
Hulpmiddelen > Board Beheer > Boards Manager In het venster zoek je dan op Nano 33 BLE Sense.
Waarschijnlijk krijg je dan 'Arduino Mbed OS Nano Boards' als eerste keus (regelmatig verschijnt er nieuwe software met een nieuwe naam voor de nieuwere boards). Je klikt dan op installeren.
Dat kan wel enkele minuten duren.
Hierna kan je je bord vinden bij Mbed OS Nano Boards in het menu onder hulpmiddelen.
Als dat gelukt is, kan je best even kijken of alles werkt zoals het hoort door even de blink-code te testen.
Hierboven een oudere versie van de software voor dit board. Sommige projecten werken enkel met deze software.
Om vlot te kunnen werken met de verschillende sensoren gaan we enkele libraries installeren via Hulpmiddelen > biliotheken beheren.
In het zoekvenster daar kan je één na één de bibliotheken ingeven, en daarna op 'installeren' klikken.
- Arduino_HTS221 (temperatuur en vochtigheid)
- Arduino_LPS22HB (luchtdruk)
- Arduino_APDS9960 library (nabijheid, kleur, gebaren)
- Arduino_LSM9DS1 (IMU)
- Harvard_TinyMLx (microfoon, IMU, camera)
- ArduinoBLE (BLE)
- Arduino_TensorFlowLite (Machine Learning)
- Phyphox BLE (Phyphox app)
De Nano 33 BLE Sense heeft naast de ingebouwde led ook een ingebouwde RGB-led, wat erg handig is om al snel een eenvoudige versie van je programma te testen waarbij je de LED op je Arduino met een bepaalde kleur laat reageren op een bepaalde variabele/input...
De voorbeeldcode hiernaast is meteen ook een goede manier om even te testen of je alles goed hebt kunnen installeren om een sketch naar je Arduino te sturen.
Bovenaan zie je dat de pins worden aangeduid met #define
#define RED 33 is in de Arduino IDE net hetzelfde als
int RED = 33;
Aangezien we de informatie van de interne sensoren ook via I2C binnenkrijgen, zullen we met een I2C-scanner flink wat resultaten krijgen als we alle adressen scannen. Alle 127 mogelijke adressen worden afgelopen dus dit kan wel even duren. Beweeg tijdens het scannen best ook af en toe met je Arduino.
Na een tijdje krijg je dan een lijst zoals hiernaast. Zoals je ziet verschijnen sommige adressen na een tijdje opnieuw en komen sommige pas later voor het eerst.
Voor de interne sensoren moeten we doorgaans geen I2C adressen ingeven. De library heeft die meestal al opgenomen.
Voor vochtigheid en temperatuur installeer je eerst de library Arduino_HTS221.h
Met de code hiernaast krijg je eenvoudig de vochtigheid en de temperatuur.
Je zal wel merken dat de weergegeven temperatuur vrij hoog ligt. Dat komt omdat de sensor op het bord zelf zit. Bij gebruik van ons bord zal dit ook wat opwarmen.
De thermometer lijkt dus eerder bedoeld om grote verschillen te registreren en om de temperatuur op het bord te bewaken, dan om de exacte temperatuur te meten. Voor een correcte temperatuur zal je de gegeven temperatuur moeten herrekenen door eerst even te kijken hoeveel verschil er is met de externe temperatuur.
In de praktijk zal deze sensor dus zelden een nauwkeurig resultaat maar eerder een indicatie geven.
Het resultaat van de vochtigheid zou wel altijd bruikbaar moeten zijn.
Hierboven het resultaat van de temperatuur en vochtigheidstest.
Voor de luchtdruksensor gebruiken we weer een nieuwe library: Arduino_LPS22HB
Die kan je opnieuw zoeken in het zoekvenster via: hulpmiddelen > biliotheken beheren , en dan installeren.
Van deze library kan je de voorbeeldcode ReadPressure gebruiken en je krijgt de luchtdruk in kPa.
Je vindt dit via: Bestand > Voorbeelden > Arduino_LPS22HB > ReadPressure
Hiernaast hebben we de voorbeeldcode aangepast zodat je de luchtdruk in hPa krijgt (gewoon pressure*10).
Je kan de luchtdruk ook gebruiken om de hoogte te meten, maar die berekening is vrij complex. Indien je de hoogte wil bepalen a.h.v. de luchtdruk, dan kan je daar best de BME280 voor gebruiken. In de voorbeeldcode krijg je daar meteen ook de hoogte, naast de temperatuur, vochtigheid en luchtdruk.
De APDS9960 is eigenlijk geen sensor, maar een chip die bestaat uit een IR-led en vier photodiodes die de weerkaatste energie van die led kunnen meten. Hiermee is het mogelijk om kleuren, voorwerpen of gebaren in de buurt van de chip te registreren. Boven op de foto is die chip aangeduid als 'bewegingssensor'. Voor de korte testen hieronder maken we steeds gebruik van de Arduino_APDS9960 library.
Kleuren registreren: hiervoor kan je de voorbeeldcode ColorSensor van de library gebruiken. Deze code gaat de gemeten waarde voor rood (R), groen (G) en blauw(B) geven in een getal tussen 0 en 4097 (zie hiernaast).
Nabijheid registreren: hiervoor kan je vertrekken van de voorbeeldcode ProximitySensor van de library. De sensor kan voorwerpen detecteren die dichterbij komen (vanaf ongeveer 25 cm).
Wanneer een voorwerp ongeveer 6 cm of dichter is, dan geeft de sensor een 0, rond de 25 cm geeft de sensor ongeveer 250.
Gebaren registreren: ook hier kan je vertrekken vanuit de voorbeeldcode GestureSensor van de library. Hiermee kan je eenvoudige gebaren vlakbij de Arduino detecteren. Wanneer je bijvoorbeeld je hand naar boven beweegt verschijnt er 'Detected UP gesture' in de Serial Monitor. Zo kan je UP, DOWN, LEFT en RIGHT registreren.
Onze interne microfoon gaan we testen met een voorbeeld uit de Harvard_TinyMLx library.
Moest je die nog niet geïnstalleerd hebben, doe dat dan eerst. Nadat die geïnstalleerd is kunnen we onze microfoon testen met de 'test_microphone' voorbeeldcode.
Bestand > voorbeelden > Harvard_TinyMLx > test_microphone
Je opent de Serial Monitor en krijgt dan de tekst zoals hiernaast te zien. Kijk onderaan in de Serial Monitor even of 'Zowel NL als CR' aan staat.
Wanneer je in de strook bovenaan 'click' noteert en daarnaast op verzenden klikt, dan zou je een reeks cijfers moeten zien verschijnen. Een tweede optie is dat je op de knop van het TinyML shield klikt. Je ziet dan in de Serial Monitor een reeks cijfers verschijnen zoals hiernaast. Die cijfers zijn momenten van de golf die onze microfoon gaat vormen wanneer hij geluiden registreert.
Die cijfers vertellen ons niet veel, maar wanneer we de Serial Plotter gebruiken, wordt het interessanter. We krijgen dan een grafiek van wat onze microfoon registreert.
Wanneer je een mooie volle toon neuriet of fluit, dan zou je hier een mooie sinus- golffunctie moeten kunnen zien.
De IMU is de 'Inertial Measurement Unit', een gyroscoop, accelerometer en magnetometer. Hiervoor gebruiken we opnieuw een stukje voorbeeldcode van de Harvard_TinyMLx library.
Bestand > voorbeelden > HarvardTinyMLx > test_IMU
Met deze voorbeeldcode gaan we onze IMU testen.
Wanneer je de code geïnstalleerd hebt en je opent de Serial Monitor, dan krijg je opnieuw enkele instructies.
Kijk opnnieuw of je Serial Monitor of Plotter onderaan op 'zowel NL als CR' staat.
Door nu 'a' (accelerometer), 'g' (gyrospope) of 'm' (magnetometer) in te geven haal je de bijhorende gegevens op.
Omdat ook hier een grafiek veel meer vertelt gaan we opnieuw naar de Serial Plotter. Onderaan in het veld naast de baudrate, geven we 'g' in en klikken daar op 'verzenden'. We krijgen dan de gegevens van de beweging over de X-as, de Y-as en de Z-as in graden.
Ga nu de Arduino heen en weer kantelen over de verschillende assen. Bij een regelmatige beweging over één as zou je dus ook een regelmatige grafiek moeten krijgen zoals hiernaast.
Probeer goed te begrijpen wat er gebeurt en probeer je de drie assen door de Arduino voor te stellen.
De drie onderdelen van onze IMU geven metingen door over de X-as, de Y-as en de Z-as.
De Accelerometer geeft metingen weer in 'g'.
De Gyroscoop geeft metingen weer in graden.
De Magnetometer geeft metingen weer in uT.
Op de TinyML Module hebben we ook een OV7675-camera bevestigd. Die testen we hier uit. We gebruiken hiervoor opnieuw een een stukje voorbeeldcode van de Harvard_TinyMLx library.
Bestand > voorbeelden > HarvardTinyMLx > test_camera
Net als bij de tests hierboven gaan we na het doorsturen van de code naar onze Arduino meteen naar onze Serial Monitor. Daar krijgen we weer een keuze.
In het veld bovenaan schrijven we 'single' en we klikken op verzenden. Onze camera stuurt nu de ruwe data naar onze Arduino. We krijgen dus een lange reeks hexadecimale bytes. Dat is al goed, want we willen vooral de data van onze camera gebruiken.
Live weergave:
Wanneer we nu in het veld bovenaan 'live' ingeven en op verzenden klikken, dan krijgen we opnieuw onze live data binnen in de Serial Monitor. Om deze data-stream te tonen als een beeld kunnen we gebruik maken van een Processing sketch.
Die vind je bij: Documenten > Arduino > libraries > Harvard_TinyMLx library > extras > CameraVisualizerRawBytes
Met deze sketch kan je de live-stream van je arduino afspelen in een klein venster.
1) In de Arduino-sketch 'test_data' in de Serial Monitor 'live' ingeven
2) Op verzenden klikken
3) Onze Serial Monitor sluiten (anders kan Processing de poort niet gebruiken)
4) De Processing sketch 'CameraVisualizerRawBytes' openen
5) In de Processing sketch in void setup de juiste poort ingeven
6) Je Processing sketch afspelen
Hierna zou je in een klein venster (176x144 pixels) een stream moeten krijgen van één beeld per seconde.
Rechts zie je hoe je de camera moet houden om beelden te maken, links het wat uitgerokken beeld van de live weergave.
BLE staat voor Bluetooth Low Energy. Met BLE kan je de Arduino verbinden met een netwerk of met een toestel. In deze eerste test verbinden we de Arduino Nano 33 BLE Sense met onze smartphone.
Wat moet je vooraf even doen:
- Kijk even na of je de AruinoBLE library al geïnstalleerd hebt
- Installeer de 'Nordic Semiconductors nRF Connect App' op je Smartphone
- Maak een UUID (Universally Unique Identifier) aan. Dat is een willekeurig combinatie van cijfers en letters die je nodig hebt om contact te maken. Die kan je bijvoorbeeld hier online aanmaken en nadien in je code kopiëren.
De nRF Connect app voor Android of voor iOS.
In dit voorbeeld proberen we onze Arduino BLE contact te laten maken met onze GSM. Wanneer we contact maken brandt de interne (oranje) LED, anders niet.
Na BLE.setLocalName moet je de naam van je BLE in te geven (hiernaast 'HelloBLE")
Na BLE.setAdvertisedServiceUuid geef je de UUID code in die je hebt aangemaakt.
Wanneer je nu op je Smartphone de nRF Connect App opent, dan zou je daar de naam die je hebt ingegeven bij BLE.setLocalName moeten zien verschijnen (zie afbeelding 'scanner').
Wanneer je daar op 'Connect' klikt, dan zal je zien dat de oranje interne led op de Arduino gaat branden, wanneer je op 'disconnect' klikt, dan gaat de led weer uit.
We proberen hier later nog meer voorbeelden te geven.
Onze BLE radio verschijnt op de smartphone.
Wanneer we gegevens willen tonen kunnen we gebruik maken van een scherm. Het typische LCD-scherm vraagt 5V en werkt dus niet op onze Nano 33 BLE Sense, we gebruiken hier een OLED-scherm dat ook op 3,3V werkt.
De schakeling: De communicatie van onze Arduino naar het scherm verloopt via I2C, dus SDL naar A5 en SDA naar A4.
De code voorbereiden: De eerste stap is dat we het I2C-adres van dit scherm vinden. Omdat onze Nano 33 BLE Sense wel wat sensoren heeft die al verbonden zijn kan het handig zijn om dit even op een Arduino zonder interne sensoren te testen, zoals een UNO. Ons scherm (128x32)had 0x3C als I2C-adres, een 128x64 scherm heeft doorgaans 0x3D als adres.
We installeren nog een library die het werken met ons scherm wat makkelijker maakt. Je kan die gewoon zoeken in het zoekvenster via: Hulpmiddelen > Bibliotheken beheren:
- Adafruit_SSD1306
Het kan zijn dat je gevraagd wordt om bijkomende libraries te installeren om met deze te kunnen gebruiken.
Het OLED scherm testen: uit de Adafruit SSD1306 library, nemen we het voorbeeld ssd1306_128x32_i2c en kijken even of het I2C-adres klopt.
Indien je scherm niet werkt, kijk dan eerst even de schakeling en het I2C adres in je code na. Kijk ook even of het aantal pixels in de code overeenkomt met jouw scherm.
Het is een goed idee om de voorbeeldcode even goed door te nemen, dan heb je meteen ook een idee van de mogelijkheden en beperkingen van het OLED-scherm.
De code: Als je al met een LCD hebt gewerkt, dan vind je in deze code niet veel verrassingen.
Kijk zeker dat je het juiste adres hebt ingegeven en de juiste maten van het scherm.
Omdat het scherm erg klein is en zowel temperatuur als luchtvochtigheid tot twee cijfers na de komma worden ingegeven, willen we het tweede cijfer na de komma laten wegvallen.
Dat doen we in de regel:
Sting temp = String((temperature),1);
We maken hier een nieuwe string 'temp' aan (een string is ook een variabele), die de waarde van de string 'temperature' bewaart maar met maar 1 getal na de komma (vandaar de parameter (1)).
De plaatsing van de letters gebeurt door de cursor te verplaatsen naar de coordinaat waar je wil beginnen.
De pixels zijn geen vierkanten, dus het kan wat zoeken zijn om je boodschap netjes te plaatsen. Het teken voor ° kunnen we niet weergeven, maar omdat we de temperatuur dubbel zo groot weergeven hebben we hier een kleine letter o gebruikt.
De kleuren van dit scherm kan je niet veranderen. Toch moet je de tekstkleur SSD1306_WHITE ingeven om de pixel te laten oplichten.
Omdat de temperatuur op de Nano 33 BLE Sense wordt beïnvloed door de warmte van andere onderdelen op het bord is die niet heel nauwkeurig. Voor nauwkeurigere metingen kan je dus best beroep doen op een externe sensor.
In dit voorbeeld voegen we de BME-280 toe aan de schakeling. Die heeft als voordeel dat de luchtdruk op deze sensor meteen ook wordt omgerekend naar de hoogte. De versie van de sensor die wij gebruiken werkt op 5V en op 3,3V.
Omdat de ruimte op het OLED-scherm wat beperkt is gebruiken we hier twee schermen na elkaar.
Het is ook mogelijk om meteen alle sensoren en de RGB-led via Bluetooth te bekijken/bedienen vanuit de browser. Je krijgt dan een dashboard met een volledig overzicht.
Dit deel werkt enkel met het oudere pakket nRF528x (Mbed OS). Dit pakket kan je nog vinden bij 'DEPRECATED' in de Boards Manager (zie afbeelding hieronder). Ook het installeren van de library 'arm_math.h' geeft vaak moeilijkheden. Het installeren wordt zo een heel gedoe, daarom gebruiken we het voorlopig niet in de klas.
Je moet wel enkele stappen volgen.
1) In de code hiernaast vind je een link naar de library 'arm_math.h' bij Github. Bovenaan de pagina moet je even op 'Code' klikken en de Zip downloaden.
2) Die Zip plaats je bij documenten > Arduino > libraries.
3) Kijk even na of je ook al de andere libraries geïnstalleerd hebt (normaal heb je die na de eerste testen al op je computer geïnstalleerd).
4) Ga via Hulpmiddelen > Board > boardbeheer in het menu naar nRF528x Boards (MbedOS) en installeer dit (normaal heb je dit ook al eerder gedaan).
5) Kies dit board bij hulpmiddelen en klik op 'verifiëren' in de Arduino IDE. Je code zou nu moeten werken.
6) De code hiernaast zet je in een sketch en installeer je op je Nano 33 BLE Sense.
7) Ga via Google Chrome naar de BLESense-test-dashboard pagina.
8) Klik bovenaan de pagina op de knop naast 'Click button to... ' en verbind met je Arduino.
Het vraagt wat werk, maar met het dashboard heb je op je computerscherm een volledig overzicht van alle data van alle sensoren en actuatoren op je Arduino Nano 33 BLE Sense.
De Phyphox app is een app waarmee je metingen en experimenten kan doen met de sensoren van je smartphone. De Phyphox app kan je nu ook via Bluetooth verbinden met je Nano 33 BLE Sense. Je kan zo data van de sensoren van je Arduino Nano 33 BLE Sense verzamelen en weergeven op je GSM. Zo kan je ook experimenten doen die je liever niet met je GSM doet of die daar niet mogelijk zijn.
De Phyphox app is een app waarmee je de gegevens van de sensoren van je smartphone kan verzamelen. Zo kan je je GSM gebruiken om metingen en experimenten te doen.
De Phyphox app kan je ook via Bluetooth verbinden met je Nano 33 BLE Sense. Je kan zo alle data van je sensoren verzamelen op je GSM. Zo kan je experimenten gaan doen die liever niet met je GSM doet.
Het stappenplan om de twee te verbinden vind je hier. Maar we overlopen het hier kort.
Je Arduino klaarmaken:
1) Download de code. (Zie ook hiernaast). In de code kan je de naam van je board (Arduino) aanpassen.
2) Installeer via Hulpmiddelen > Board > boardbeheer in het menu:
- Arduino_Mbed_OS_Nano_Boards
3) Installeer via Hulpmiddelen > Bibliotheken beheren:
- Phyphox BLE
De andere libraries heb je normaal al geïnstalleerd (zie belangrijke libraries).
4) Upload het programma naar de Arduino Nano (wat even kan duren). Wanneer de rode led brandt is het uploaden voltooid.
Je Smartphone klaarmaken:
1) Installeer de phyphox app. (gratis app voor Android of iOs).
2 Open de phyphox-app en druk op +, kies dan 'Voeg experiment toe van QR-code'. Je kan hiervoor de QR-code hierboven naast de titel gebruiken. Indien die QR-code niet zou werken, kijk dan even op de site naar het stappenplan daar.
3) Nu zou je het Arduino Nano 33 BLE Sense menu moeten zien verschijnen.
Nu zijn je Arduino en je app klaar om te gaan experimenteren en data te verzamelen. Je kan de data ook opslaan en doorsturen naar je computer om er bijvoorbeeld in Excel een grafiek van te maken.
Je smartphone verbinden met je computer: Wanneer je naar een experiment gaat, dan kan je op de drie puntjes rechtsbovenaan klikken. Je krijgt dan een menu waarin je 'Begin besturing op afstand ziet staan'. Wanneer je daarop klikt, dan krijg je onderaan een URL die je kan ingeven in je computer. Je computer maakt dan verbinding met je smartphone en je kan de meting nu ook vanaf daar starten, en je kan daar ook de grafieken groot bekijken.
Bovendien kan je dan ook de data van de metingen meteen downloaden naar een Excel-bestand.
Met de phyphox app kan je metingen doen met de sensoren van je Smartphone of je Arduino Nano 33 BLE Sense. Je kan wel nog geen metingen doen met meerdere sensoren samen. Daarvoor kan je wel gebruik maken van de SD-kaart module.
Het menu nadat je verbinding hebt gemaakt met de Arduino Nano.
Na een experiment kan je de data exporteren.
Rechtsboven via ... kan je hier 'Begin besturing..' selecteren.
Je krijgt dan onderaan een URL die je kan ingeven op je computer.