Fundamentals
Export Targets
Code Export
Patcher UI
Special Topics
RNBO Raspberry Pi OSCQuery Runner
Working with Photoresistors (LDRs) on the Raspberry Pi with RNBO
In this article we'll cover how to use Photoresistors with RNBO on the Raspberry Pi target. Before attempting these, make sure you're familiar with the basics of exporting your RNBO patchers to the RPi and that your audio interface is working correctly with it.
Current Bug with recent Raspberry Pi Image : This example is currently broken. A bug has been introduced to the gpiozero dependency which result in issues with the most recent RNBO images of 1.3.0. and 1.3.2.
NOTE: This article is intended as a guide to help you extend the use of the RPi. Though the information here is accurate and correct, when working with electronics there is always the risk of damaging your device or components. While the voltage in the RPi is low enough not to pose any threat to your physical safety, the device itself could be damaged. Cycling 74 cannot be held responsible for any damages resulting from attempts to complete the following project. We also cannot provide technical support for RPi beyond basic setup of the image and loading RNBO patchers. Please proceed with caution and at your own risk.
Before attempting this tutorial, make sure you’re already familiar with the basics of exporting your RNBO patchers to the RPi and that your audio interface is working correctly with it.
Things you'll need
- 1 x 1uf capacitor
- 1 x Light Dependent Resistor (aka Photoresistor)
- Breadboard
- Hook up wires
We'll start by exporting the following patcher to the Raspberry Pi target:
To control the cutoff
parameter of this patcher with an LDR, we'll write a quick python script on the Raspberry Pi to use alongside the rnbo runner - ssh in, or connect up a keyboard. We'll use a library called gpiozero
and another for communicating with the runner via OSC. You can use any OSC library you like, this example will use liblo
.
To install liblo
and gpiozero
your RPi will need to be internet connected and you will need access the terminal on your RPi. The simplest way to to do this is to ssh in from your primary computer's terminal, but you can also hook up a mouse, keyboard and monitor to your RPi and do it natively. Once you are in the RPi terminal, run the following command. You may need to confirm the command and wait for the installation process to complete.
$ sudo apt-get install python3-liblo python3-gpiozero
Now create a file called RNBOPi_LDR.py
by using nano
or any other text editor you prefer
$ nano RNBOPi_LDR.py
Paste in the following script, then save the file.
from gpiozero import LightSensor import liblo as OSC import sys # send all messages to port 1234 on the local machine try: target = OSC.Address(1234) except OSC.AddressError as err: print(err) sys.exit() # start the transport via OSC OSC.send(target, "/rnbo/jack/transport/rolling", 1) # read the sensor from GPIO sensor = LightSensor(4) while True: light_level = sensor.value print(light_level) OSC.send(target, "/rnbo/inst/0/params/cutoff/normalized", light_level)
Now sudo poweroff
the RPi, and disconnect the power. Let's create our circuit:
- 3.3v (red) from the RPi connects to one side of the LDR
- GND (black) from the RPi connects to the ground bus rail
- The 1uf capacitor connects the shorter leg to the ground bus rail, the longer leg connects to the terminal strip inline with the LDR
- RPi GPIO 4 (blue) connects in between the LDR and the capacitor
The sensor.value
from the LDR is already normalized - so we can use this directly to control the cutoff
parameter via the normalized
osc address. If you take a look in the patcher, you will see there is some logarithmic scaling of this via @fromnormalized
which makes it feel more natural.
Switch the Pi back on, ssh back in and run the script:
$ python RNBOPi_LDR.py
Now grab a flashlight and voila! You should be opening up and closing the filter with your light source.
Materials in this article