FYS3240- 4240
Data acquisition & control
Arduino and Arduino Nano 33 BLE
sense
Spring 2021– Lecture #5
                             Bekkeng 12.01.2021
What is Arduino:
• Arduino is an open-source electronics platform based on easy-
  to-use hardware and software
Why Arduino in the course?
•   Easy to get stated!
     – Many examples available
     – Ready made interfaces to sensors
     – Data communication with a computer is easy
     – Call C/C++ functions
     – Easy-to-use for beginners, but flexible enough for advanced
       users.
•   Can be used for professional applications
     – But the Arduino environment hide much details about what’s under
       the hood.
     – The course focus is not microcontroller programming alone, but
       the collection of sensor data, processing of sensor data and how
       they are used in a system with feedback (control).
We will use Arduino Nano 33 BLE sense
 • ARM Cortex M4
 • Inertial measurement unit (IMU)
     – 3-axis accelerometer
     – 3-axis rate gyroscope
 • 3-axis magnetometer
                                                                     BLE
 • Bluetooth low energy (BLE)
                                                      USB
 • + many other sensors
                                                              PC with
                                                              LabVIEW
 Small size, low cost, powerful and many sensors!
                                   https://www.arduino.cc/en/Guide/NANO33BLESense
                                               If you get an error or unexpected
                                               behaviour (for instance not able to
Nano 33 BLE sense                              upload sketch), try to press the reset
                                               switch
Figure from Arduino Nano 33 BLE Sense Review - What's New and How to Get Started? (circuitdigest.com)
ARM® Cortex®-M
                                        The criteria of selecting a
                                        microcontroller device are mostly
                                        heavily dependent on the cost and
                                        peripherals available.
Suggested reading:
White paper “ARM® Cortex®-M for
Beginners”, particularly section 1 to
2.4.
ARM® Cortex®-M
• Almost everything can be programmed in high-level language like C
    – easy to use
• The consistency of the architecture make it easier to start using a new
  Cortex-M processor once you have experience with one of them.
 Optional:
 See the White paper “ARM®
 Cortex®-M for Beginners”
https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
Arduino code example
• Take a value in between 0 and 1023 (e.g. 10 bit input from an
  ADC) and map it with in the 0 to 100 range:
       int value2 = map(value, 0, 1023, 0, 100);
   Arduino language references
• https://www.arduino.cc/reference/en/
Examples for Nano 33 BLE sense in
IDE
              Under Files:
                                    IMU
Arduino libraries
• https://www.arduino.cc/en/Guide/Libraries#toc3
In Arduino IDE:
   For IMU (Lab 3–5)
For lab5
Arduino libraries
IMU an magnetometer library for the
Nano 33 BLE sense board
• https://www.arduino.cc/en/Reference/ArduinoLSM9DS1
                         119 Hz set default
LSM9DS1 data sheet
Have a look! Without the Arduino
library you had to know “all of this” to
implement communication with the IMU
Float vs. integer vs. string.
                                                      Assumed
We need to understand the basics:
                                                      known, or
• Float (double) vs. int.                             google! See
• Floating point (decimal) numbers                    also Arduino
  vs. fixed point number                              cookbook
• Digital sensors deliver data as integers (2n) !
• If we measure e.g. voltage or rotation rate we need to get a
  decimal number before using the data
    – 3.14 V
    – 20.32 deg/sec
  In this course we will send sensor data as float values
  converted to strings. This is not the most efficient way, but it is
  easy to write/read and to debug.
Accelerometer
example
This example reads the acceleration
values from the LSM9DS1 sensor and
continuously prints them to the Serial
Monitor or Serial Plotter in the IDE
LSM9DS1.cpp (source code) – snap shots
Interface between Arduino & LabVIEW
• LINX make it easy to interact
  with Arduino
   – Does not support the Nano 33
• We will use standard serial
  communication
   – Transmit/receive ASCII data
   – Transmit/receive binary data
https://www.arduino.cc/reference/en/language/functions/communication/serial/print/
Regional settings
• Change decimal symbol to “.”
    – Under Additional settings (see next slide for how to navigate there)
• Decimal symbol is standard “,” in Norwgian, but “.” in English.
• Sometimes decimal
  symbol “.” is required!
• For instance the Spreadsheet
  string to Array function in
  LabVIEW is affected!
    – Important for lab 3 and 4
Settings
https://www.arduino.cc/en/Reference/ArduinoBLE
BLE examples
• https://rootsaid.com/arduino-ble-example/
• https://www.okdo.com/project/get-started-
  with-arduino-nano-33-sense/
                                 And Nano 33 setup …
BLE connection to phones and
computers
• To send/receive data or for control.
• Apps for test available for Android and IOS
• ArduinoBLE library does not support pairing (optional security
  feature in BLE)
   – ArduinoBLE can not connect to Windows 10 operating
      system.
   – Can use a BLE USB dongle and drivers (see lab 5)
• Can have range/stability issues …
Interrupts
https://www.arduino.cc/reference/en/language/functions/external-
interrupts/attachinterrupt/
Common protocols for data transmission
• JSON (JavaScript Object Notation) - ASCII (text) based
   – name–value pair (key–value pair)
       • {‘x’ : 0.66, ‘y’ : 0.59, ‘z’ : -0.49}
   – See page 136-137 in course book
   – Supported in both Arduino and LabVIEW
   – Self Descriptive protocol
• BSON (binary protocol - binary version of JSON)
• MQTT (Message Queuing Telemetry Transport)
   – Publish subscribe
   – Common in IoT devices
   – (More info from page 607 in course book)
• Google Protocol buffers (binary protocol)
                                What is MQTT? A practical introduction. (opc-router.com)
Nano 33 BLE Sense - Project Hub
https://create.arduino.cc/projecthub/products/nano-33-ble-sense
ARM Mbed OS
• Possible to run on Nano 33 BLE sense!
• We will not use it in this course