Arduino things!
This book is a short introduction to working with Arduino microcontrollers and various sensors. The subject on this is very broad, but this book is hopefully a short introduction to get you exited to work with electronics.
- Arduino Introduction
- Arduino - Grove Sensor Kit
- Motion Tracking with Sensors for Microcontrollers
- Controlling LEDstrips with Arduino
- Arduino Simple Serial communication with multiple values
- Arduino script to Control LED strip via wifi
- UltraSonic of PIR sensor Arduino & Touchdesigner
- Learning & understanding Arduino through helpful projects
- Books
- LiDAR with Arduino - TF-Luna Sensor
- Touch (knock) sensor with Piezo
- Grove - Ear-clip Heart Rate Sensor
Arduino Introduction
What is Arduino?
Arduino is an open-source electronics platform based on easy-to-use hardware and software. Arduino boards are able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output - activating a motor, turning on an LED, publishing something online. You can tell your board what to do by sending a set of instructions to the microcontroller on the board. To do so you use the Arduino programming language (based on Wiring), and the Arduino Software (IDE), based on Processing.
Read more about Arduino here: https://docs.arduino.cc/learn/starting-guide/whats-arduino
Hardware & Software
With Arduino there's 2 mayor sides at work
Hardware
Hardware to work with Arduino generally consists of an Arduino microcontroller (available in different forms such as Arduino Uno, Nano (smaller size), Leonardo (bigger memory) etc. Also hardware components are things we use to measure or translate data into the physical world such as sensors and actuators and other electronic components.
We're working on a separate book for Electronic Components and Sensors and more in dept info as well
Software
Arduino IDE programming environment. With the software we program certain behaviours of what we want the Arduino to do. This can be reading out sensor data, but also it can be sending controls to motors and other physical moving elements such as solenoids or water/air pumps.
Screenshot of a piece code made in Arduino IDE 1.
If you want to get more information and basic knowledge it is recommended to visit the Arduino DOCS environment online. The basic Arduino website contains a lot of information, also regarding sales and projects, but the DOCS pages are a bit more structured towards getting started and beginners:
On the top left of this page, you will find the HARDWARE and SOFTWARE boxes with more info such as how to connect you're board for the first time, software updates and programming references.
Arduino Uno
The Arduino UNO board is the best board to get started with electronics and coding. If this is your first experience tinkering with the platform, the UNO is the most robust board you can start playing with.
The UNO is also the most used and documented board of the whole Arduino family.
Buy an Arduino Uno Board - Kiwi Electronics
Arduino UNO Setup Guide, Get Started, Pinout and Datasheet -> https://docs.arduino.cc/hardware/uno-rev3
Learning Arduino in different ways:
Method 1: Focus on 1 project at the time
Sometimes, students come to the Blackbox/Lab Pastoe with a clear project in mind and what components to get for it. This way is nice for beginners, because you have a clear goal in mind of what you want to make, and what components and/or sensors you need.
It is very easy for some to get overwhelmed sometimes with the amount of tutorials, projects and sensors that are available. Having one project at the time makes it easier to understand the basic building blocks of both the hardware and software.
Things to keep in mind with Arduino projects:
- For your first experiments, keep it small. For example, if you're project is "I want to connect 5 light sensors and a microphone to control different motors that move a big piece of fabric" First start out with connecting 1 light sensor and getting that to work, then control 1 motor, and if that works; Try to make the light sensor to control the motor and go from there in small steps.
- Keep in mind getting to know the programming side is not hard, but does take some time to think 'the way the machine thinks', make sure you have enough time planned in for research and debugging.
- Start with simple sensors such as the light sensor, motor, button etc. More advanced sensors such as gyroscopes, accelerometers and motion detect sensors sometimes are a bit more complicated to start with (not impossible, it depends per person really what 'clicks' in the beginning stages)
Method 2: Freeform Experiments with Random Sensors
Another approach is to buy a Grove Sensorboard online or rent one at the Blackbox/Uitleen IBB and Pastoe, and do some freeform experiments. The Grove Sensor kit contains another board with is ideal for those who have just started using Arduino to explore the vast space of electronics and programming.
Grove is an open-source, modulated, and ready-to-use toolset and takes a building block approach to assemble electronics. This Kit includes a Base Shield to which the various Grove modules can be connected both individually, or together in various combinations and the plus side of Grove connectors is that you do not need soldering.
All of the modules use a Grove connector, which connects each of the components to a Base Shield in just a few seconds. The Base Shield can then be mounted on to an Arduino UNO board and can be programmed using the Arduino IDE.
Instructions
The Grove Sensor Kit comes with a lot of handy Instructions and very approachable tutorials for any level:
Extra information:
Read more about the kit, available on Kiwi-Electronics
Method 3: Let us know!
Powering Arduino
Some tutorials links and tips:
Tutorials:
https://www.youtube.com/watch?v=I7MrL5Q7zvY
https://forum.arduino.cc/t/simplest-battery-power-to-arduino-nano-solution/530242
Links
https://forum.arduino.cc/t/simplest-battery-power-to-arduino-nano-solution/530242/2
Tips
If you want to use a powerbank in some cases depending on how much power the arduino needs from the bank it might turn off after 1 - a few minutes even though the powerbank is fully charged. It depends on the kind of powerbank. Some have a safety built in. But most of the time it is not mentioned in the description. Try different types of powerbanks.
If you use sensors or motors connected to your arduino it might work because they draw enough power. Also depends on the sensor.
Im still experimenting with this myself once i find more info i add it to this book.
At the moment i have tried 2 powerbanks (5000 & 10000 mAh) for Arduino Nano with seperate power for my small Neopixel Jewel (7 leds). Using batterypack 4xAA atm.
This might be interesting for Arduino Uno:
https://pmdway.com/collections/arduino-power-shield/products/rcr123a-16340-rechargeable-battery-power-shield-for-arduino
Arduino - Grove Sensor Kit
Another approach is to buy a Grove Sensorboard online or rent one at the Blackbox/Uitleen IBB and Pastoe, and do some freeform experiments. The Grove Sensor kit contains another board with is ideal for those who have just started using Arduino to explore the vast space of electronics and programming.
Grove is an open-source, modulated, and ready-to-use toolset and takes a building block approach to assemble electronics. This Kit includes a Base Shield to which the various Grove modules can be connected both individually, or together in various combinations and the plus side of Grove connectors is that you do not need soldering.
All of the modules use a Grove connector, which connects each of the components to a Base Shield in just a few seconds. The Base Shield can then be mounted on to an Arduino UNO board and can be programmed using the Arduino IDE.
Instructions
The Grove Sensor Kit comes with a lot of handy Instructions and very approachable tutorials for any level:
Extra information:
Read more about the kit, available on Kiwi-Electronics
Motion Tracking with Sensors for Microcontrollers
Research by Blackbox into various sensors that can used with microcontrollers to track persons, objects, colours or other motions. What kind of differents sensors are there to use and what are the pro’s and con’s of each sensor?
Sensors of Interest:
Sensing Distance and Proximity:
- Ultrasonic Sensor
- Infrared Sensors / IR
- PIR Motion Sensor
- Microwave Doppler Radar Sensor
More advanced sensing:
- LiDAR,
- ToF, Time-of-flight sensors
- HuskyLens AI Vision
Can also be used:
- LDR Photocell sensors
- Capacitance sensors
- PhotoDiodes
Ultrasonic Sensor
The Ultrasonic Sensor is arguably the most common distance measuring sensor, also known as the Sonar sensor. It detects the distance to objects by emitting high-frequency sound waves. The object needs to be in line with the sensors not so wide range. Used a lot in DIY distance measurement projects, robotics, smart cars, drones. Most common used sensor is the HC-SR04.
+
- not affected by colour object or transparency.
- Works well in dim places
-
- limited detection range
- Not good in tracking fast objects
- Unable to measure objects with extreme textures or surfaces.
Detection is good for example; knowing if someone ‘entered’ the space and switch on video. Not so good for when you want one or multiple persons tracked.
Infrared Sensor (IR)
IR distance sensors work through the principle of triangulation; measuring distance based on the angle of the reflected beam. Used a lot in TV’s, computers and laptops, distance measurement projects, security systems, monitoring and control applications.
Recommended sensor: 80cm Infrared Proximity Sensor - GP2Y0A21YK
+
- Small size
- Daytime and Nighttime usage
- Able to measure the distance of objects that have complex surfaces unlike ultrasonic sensors
-
- Limited measurement range
- Affected by environment conditions and hard objects
PIR Motion Sensor
Passive infrared (PIR) sensors are sensitive to infrared (IR) rays and are mostly used for motion detection where humans move in or out of the sensor range.
Used a lot in appliances and gadgets for home or business (room detection). Also in DIY projects.
All living objects, whose body temperature is more than 0°C, emit the heat in form of infrared radiation through their body, also called as thermal radiations. This Radiated energy is invisible to human eye. These Signals can be detected by using PIR sensor which is specially designed for such purpose.
PIR sensor i.e. Passive Infrared Sensor, passive word indicates PIR Sensor does not generate or radiate any energy for detection purposes. PIR Sensors don't detect or measure "HEAT"; they detect the infrared radiation emitted or reflected from objects.They are small, inexpensive, low power and easy to use. They are commonly found at home, medical, factories etc. areas.
Link to more info about PIR sensors
Microwave Doppler Radar Sensor
For most of our Arduino projects that require knowing if someone has left or entered the area, the PIR sensor is an excellent choice. However, because they only detect movement from living things, they will generate fewer false alarms.
This is where a microwave sensor like the RCWL-0516 comes in handy. The RCWL-0516 microwave sensor detects any movement from any object and does not rely on heat signatures, making it more reliable in hot environments where a PIR sensor may not be as effective.
More about Doppler Microwave sensors here
And a tutorial explaining the RCWL-0516 Microwave Doppler Radar sensor and running a beginner test can be found here by CircuitDigest .
Lidar Sensors and other motion sensors info coming soon! :)
Let us know if you worked with any of these sensors or want to know more about them via Blackbox.ibb-pastoe@hku.nl
Controlling LEDstrips with Arduino
LED Strips and Arduino
With the Adafruit Neopixel library, it is very easy to work with controlling different types of LED's using Arduino. Adafruit has a very extensive "Adafruit NeoPixel Überguide" available online, where you can follow a step-by-step guide for controlling LED strips, panels and individual led's.
NeoPixel options:
Strips | Rings |
|
|
Matrices |
Pins |
ETC... | |
Neon-Like Stips |
Images from Adafruit |
Basic NeoPixel LED strip setup
HARDWARE
Materials needed:
- Arduino Uno (or other available Arduino, but Nano is most beginner friendly)
- 1x 300 to 500 Ohm Resistor
- 5V power supply (this type is recommended for simple setup)
- 1x 500–1000 µF Capacitor
For controlling LED strips and Arduino you can build the following hardware:
SOFTWARE
Launch the Arduino IDE.
If you have not installed the NeoPixel Library for Arduino, first make sure to do that first.
Arduino IDE 2.0 (newest)
In the newest version of Arduino IDE 2.0, you can install Libraries automatic from the IDE itself.
Arduino IDE 1.0 (older)
If you want to understand more about Arduino and Libraries? Read more here...
Examples→Adafruit NeoPixel→strandtest
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
Powering NeoPixels in different ways
Other methods for powering ledstrips beside the simple standard power supply are:
- DC wall wart adapters (5v)
- lithium-polymer battery (Lithium Ion Polymer Battery - 3.7v 2500mAh)
- Three alkaline cells (such as AA batteries)
- Four nickel-metal hydride (NiMH) rechargeable cells
You must use a 3-5V DC power supply to power these strips, do not use higher than 6V or you can destroy the entire strip– yikes!
Example 1 AA or AAA = 1,5 V
When choosing any option for powering the ledstrips, always take into account that you have enough amperage provided for the strips. Checkout the Adafruit page for more details regarding power options.
Powering Arduino in different ways
If you want to use a powerbank in some cases depending on how much power the arduino needs from the bank it might turn off after 1 - a few minutes even though the powerbank is fully charged. It depends on the kind of powerbank. Some have a safety built in. But most of the time it is not mentioned in the description.
Try different types of powerbanks or use info from these links:
https://www.youtube.com/watch?v=I7MrL5Q7zvY
https://forum.arduino.cc/t/simplest-battery-power-to-arduino-nano-solution/530242
Im still experimenting with this myself once i find more info i add it to this book.
At the moment i have tried 2 powerbanks (5000 & 10000 mAh) for Arduino Nano with seperate power for my small Neopixel Jewel (7 leds). Both dont work. Using batterypack 4xAA atm.
Arduino Simple Serial communication with multiple values
Sending values from an Arduino to a computer can sometimes be a bit daunting... Sending only one value is pretty straightforward, but when it comes to sending multiple values, there are many scenario's on how to send out the values in a manner that enables you to distinguish them properly on the computer side.
This page offers an explanation and the example code (see the attachments to this post on the left side of the page) to prepare for this task in a simple, straightforward way.
Arduino communicates to other devices over USB (User Serial Bus) this means that, by default, everything that is sent out is Serialised: the communication contains only one message at a time, bigger messages or chunks of data will be split into pieces that are sent one at a time, after each other.
(as opposed to Parallel communication, where multiple messages are sent and transfer, parallel to each other, at the same time)
Before we can get to sending out any values, we first have to initialise Serial communication from the Arduino by putting the following command in void setup()
void setup() {
Serial.begin(9600); //start Serial communication with a speed of 9600 baud
}
Serial communication has a significant draw on both the computing power of the Arduino microcontroller ánd power consumption, that's why the Serial port on the board is off by default.
Now we're ready to start sending data!
So, when you want to send out values from, lets say, all Analog outputs, you can send out all the values one by one, using a for
loop in void loop()
like this:
void loop() {
for (int i = 0; i < 6; i++) { //iterate through all the analog inputs
int value = analogRead(i); //put the read value into and int variable
Serial.print(value); //and send the value out over Serial
}
The data that's been sent out to the computer is stored in a Serial memory buffer, until a program comes along and reads the data in that buffer. Once read, the data will be erased, so there's only one application at a time that can connect to, and read from the buffer. The simplest way to read the Arduino Serial buffer on a computer, is using the Serial Monitor in the Arduino IDE, found under the button in the right top corner of the program:
Let's test this on Arduino and have a look at the Serial Monitor to see what kind of data is coming in..
When sending the data out this way, all the incoming values are concatenated together in one big chunk of numbers... There's no way of distinguishing the separate analog values anymore.
The serial monitor is reading values in one row until it encounters a 'newline' character ('\n') since we never send a 'newline', all the numbers are read in one long oblivious stream.
We could easily fix this by changing the Serial.print(value);
line to Serial.println(value);
, The Serial.println()
command, forces the Arduino to send a 'newline' after each value, resulting in the values coming in into the console like this:
Now, at least all the different input values are shown separately, but now there's no way of distinguishing which number belongs to which input...!
Most computer software that can receive Serial data (Processing, Isadora, TouchDesigner, etc.) utilise routines to separate values from a Serial string using 'separating' characters. For example Processing has a function that is called split()
Processing Reference for split()
This function reads the incoming string and stores all characters it receives in between the separating characters in an array in memory.
The Processing routine to do this would look like this:
// the 'void serialEvent' function is triggered each time a '\n' is discovered
// in the Serial buffer. The function executes and passes the values
// stored in the memory of 'arduinoIn'
void serialEvent (Serial arduinoIn) {
// convert the incoming Serial value to a String and put in memory
String inString = arduinoIn.readStringUntil('\n');
// only continue if there's actually anything stored in the String
if (inString != null) {
//print the raw incoming string to the console
println(inString);
// trim off any whitespace:
inString = trim(inString);
// split the incoming string and put the values in the inputVals array
inputVals = int(split(inString, '-')); //you can choose a separating character that's logical to you
}
}
So: in order for Processing to be able to separate the values and put them in the inputVals[]
array, we need to format the messages we're sending out from Arduino like this:
valueA0-valueA1-valueA2-valueA3-valueA4-valueA5'\n'
This can be done by organising our Arduino send loop like this:
void loop() {
//iterate through all the analog inputs
//and send out over Serial
for (int i = 0; i < 6; i++) {
int value = ;
Serial.print(value);
if (i < 5) {
//send denominating '-' characters
//(except after the last value)
//technically not needed, but it makes the string look nicer in the console :)
Serial.print('-');
}
}
//end the string of values with a newline
Serial.println();
}
When inspecting the incoming data in the Serial Monitor, it looks like this:
Arduino is now sending out the values of all 6 Analog inputs, separated with '-' characters, as one 'sentence' at a time. Ready for Processing (or other applications) to be split up and used as separate values.
Please check the attached files (on the left side of the page) for different examples of using this wat of Serial communication.
Arduino script to Control LED strip via wifi
Dit is een scriptje om een ESP8266 arduino module te verbinden met wifi (via een wifimanager / hotspot) en zichzelf aan te bieden als ArtNetNode (wanneer de software dit ondersteunt). fijn script, werkt goed, wel even concentreren op de nodige libraries om te compilen.
in essentie kan je de data pin en het aantal leds invoeren en gaan met die banaan
Werkt met NodeMCU
het is bedoeld voor WS2812 LEDs / neopixels. maar kan zeer eenvoudig omgezet in andere soorten adresseerbare LEDS, mits RGB (niet RGBW)
------------------------------
download hier:
https://nextcloud.hku.nl/s/BH3SeoLtS4m7dy2
Deze informatie komt van Tony Schuite (docent IPD locatie theater)
UltraSonic of PIR sensor Arduino & Touchdesigner
Deze manual werkt voor PIR (passive infrared) bewegings sensor en ook voor de Ultrasonic sensor
Beschrijving PIR sensor (Duits)
https://www.reichelt.nl/nl/nl/raspberry-pi-infrarood-bewegingsmelder-hc-sr501-rpi-hc-sr501-p224216.html?PROVID=2809&gclid=CjwKCAjwzJmlBhBBEiwAEJyLu7b6GP911-3vaEA33hXK1vssSrwNGtU83omn4zjNUqw3wLPmZsHYzRoCQnEQAvD_BwE
Installatie PIR sensor:
https://randomnerdtutorials.com/arduino-with-pir-motion-sensor/
Beschrijving ultrasonic sensor:
https://randomnerdtutorials.com/complete-guide-for-ultrasonic-sensor-hc-sr04/
Installatie Ultrasonic sensor check volgende tutorial >>>
Data > touchdesigner:
https://www.youtube.com/watch?v=lkudxFrwPXU
Let op als je in Touchdesigner de input wilt testen dan moet je in Arduino je Serial Monitor uitzetten.
Anders kan TD niet communiceren met de USB poort
Deze tutorial is getest door Simone van Dordrecht (Blackbox medewerker IBB)
Learning & understanding Arduino through helpful projects
There are tutorials on most anything out there!
below is a selection of websites to make coding & debugging microcontrollers like Arduino easier
Neopixel Effect Generator
Create your animation for the Neopixel LED Strip and press "Generate Arduino Code" to get it as code to copy to the Arduino IDE.
wokwi: Arduino
Simulate IoT Projects in Your Browser
Tinkercad: Circuits
From blinking your first LED to reimagining the thermometer, we’ll show you the ropes, buttons, and breadboards of electronics.
Microsoft make code
Microsoft MakeCode is an open source platform for creating engaging computer science learning experiences that support a progression path into real-world programming.
including a simulator to debug your code & block coding
Books
Here you will find some suggestions for Arduino books
- Getting started with Arduino: https://www.oreilly.com/librar...
- Arduino Cookbook: https://www.amazon.com/Arduino...
- Make: Electronic: https://www.bol.com/nl/nl/f/ma...
- Making Things Talk: https://www.bol.com/nl/nl/f/ma...
LiDAR with Arduino - TF-Luna Sensor
Als je iets anders wilt dan Ultrasonic Sensor HC-SR04 kwa afstand namelijk meer afstand met minder ruis kun je kiezen voor de TF-Luna Sensor. Dit is een Lidar sensor die met behulp van een laser de afstand tot een object meet tussen 0,2 en 8 meter.
> De TF Luna LiDAR-afstandsmeter biedt een bereik van 0,2 m-8 m, een resolutie van 1 cm en een nauwkeurigheid van ±6 cm @ (0,2 m-3 m) <
Materiaal:
Arduino Nano + USB kabel
TF-Luna Sensor
Breadboard
Jumper wires male/male
kabel verbinders voor snel testen zonder solderen
Ik heb om dit aan de praat te krijgen de volgende bron gebruikt:
https://www.diyengineers.com/2022/06/02/lidar-how-to-use-with-arduino/
Op deze site kun je belangrijke documenten downloaden zoals datasheet en user manual maar die heb ik amper nodig gehad.
https://en.benewake.com/TFLuna/index.html
Lidar op voorraad op het moment van schrijven:
https://eu.robotshop.com/nl/products/benewake-tf-luna-8m-lidar-afstandssensor
Wat ik lastig vond bij deze is dat er geen JST GH1.25 - 4P naar Dupont verloopjes bij zaten dus heb ik de kabel gestript en waco verbindingsklemmen gebruikt om te testen. Solderen kan natuurlijk ook maar ook dat was me even teveel werk.
Kiwi Electronics verkoopt ze met de handige kabels maar niet op voorraad. https://www.kiwi-electronics.com/nl/tf-mini-s-lidar-module-10359?search=lidar
Ik heb een Arduino Nano gebruikt. In de tutorial wordt de Arduino Uno gebruikt en voor data overdracht de poorten ICSP2. Volgens bovenstaand schema kan je daarvoor IC2 pins Analog A4 & A5 gebruiken.
De 6e kabel hoef je niet te gebruiken.
Installeer Arduino software
https://www.arduino.cc/en/software
Arduino Library:
https://github.com/budryerson/TFLuna-I2C
Verbind de arduino met mini usb kabel aan je computer, kies links bovenin de Arduino software venster je type arduino board en de usb poort
Volg de aanwijzingen in de tutorial via link bovenaan dit document om de library via Arduino software te installeren.
Ga bovenin je menu balk in de arduino software naar Tools > Serial Monitor.
Zet rechts onderin 9600 Baud om naar 115200 Baud, anders krijg je rare resultaten.
Houd je hand boven de lidar sensor en zie de waardes veranderen.
Als je nog info mist in deze uitleg of iets is niet duidelijk laat het me dan weten dan pas ik het aan.
Simone.vandordrecht@hku.nl
Voorbeeld project: intensiteit licht LED pixel ring beïnvloeden door afstandmeting Lidar TF Luna sensor
Materiaal:
Neo pixel ring 12 of 16 pixels
Arduino Nano + USB kabel
TF-Luna Sensor
Breadboard
Jumper wires male/male
Resistor 330 Ω tot 470 Ω
Universal AC adapter 5V
Terminal block to 2.1mm DC barrel jack - Female
Bronnen voor testen:
https://www.diyengineers.com/2022/06/02/lidar-how-to-use-with-arduino/
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
https://medium.com/@elonskolnik/arduino-uno-tutorial-neopixel-ring-setup-9fafc099c89a
https://chatgpt.com/share/6787fc7b-e388-8006-98cc-3678b193ec44
Combineren:
Soldeer de kabeltjes van de TF Luna aan jumper wires en gebruik krimpkousjes voor bescherming
Power de Pixelring apart van de Arduino, zorg dat de ground wel doorlust naar de ground van arduino en TF Luna.
(Duidelijk schema hiervan moet ik nog maken)
Alternatief voor draadloos project: Gebruik een powerbank 5V voor stroom voor de arduino en een batterij pack bijvoorbeeld 4x AA voor de stroom voor pixelring. Foto hiervan volgt..
Meer info kun je hier vinden:
https://bookstack.hku.nl/books/arduino-things/page/controlling-ledstrips-with-arduino
Code:
Touch (knock) sensor with Piezo
If you want to make a simple touch sensor but you don't have the fancy ones around you can also use a piezo element, which come with a lot of basic arduino starter sets.
What you need:
piezo element ![]() |
breadboard
![]() |
resistor 1 M ohm |
piece of paper tape
|
some male/male jumper wires
|
This video explains it all. To make the input visual, open the serial Monitor from the Tools menu.
Grove - Ear-clip Heart Rate Sensor
|
Info & Arduino code
PartsGrove - Ear-clip Heart Rate Sensor Grove - Base Shield voor Arduino V2 Arduino uno |
Software to receive the data
If you get this device through blackbox employe the code is already installed on the Arduino board
Download the Isadora file, Communications > Enable serial ports
Output > force stage preview & go
Isadora file: heart_beat_visualisatie_isadora_mk2.izz (credits for this file: Tjerk Stoop)