How do we move from analogue to digital? There seems to be quite a number of ways including 2D & 3D scanning, photography, and sensors. For the purposes of intentionally limiting our options we’re going to create a physical interface with potentiometers and buttons. We’ll be using the LOP board with a Raspberry Pi.
Once we’ve soldered the potentiometers and header on the LOP board we have to install a few things and enable some of the system level software on the RPi.
Starting with enabling SPI
- Run sudo raspi-config .
- Use the down arrow to select 9 Advanced Options.
- Arrow down to A6 SPI .
- Select yes when it asks you to enable SPI,
- Also select yes when it asks about automatically loading the kernel module.
- Use the right arrow to select the <Finish> button.
Installing the Python Tools:
sudo apt-get update
sudo apt-get install python-setuptools
sudo apt-get install python-pip python-dev
Now we're ready to run the code, wait! we need to
#!/usr/bin/python
import spidev
import time
import os
import OSC
import RPi.GPIO as GPIO
# Open SPI bus
spi = spidev.SpiDev()
spi.open(0,0)
# Open osc
send_address = "127.0.0.1" , 9000
c = OSC.OSCClient()
c.connect(send_address)
# Function to read SPI data from MCP3008 chip
# Channel must be an integer 0-7
def ReadChannel(channel):
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
# Define sensor channels
l0 = 0
l1 = 1
l2 = 2
l3 = 3
l4 = 4
l5 = 5
l6 = 6
l7 = 7
# Define delay between readings
delay = 0.1
while True:
# Read the light sensor data
ll0 = ReadChannel(l0)
ll1 = ReadChannel(l1)
ll2 = ReadChannel(l2)
ll3 = ReadChannel(l3)
ll4 = ReadChannel(l4)
ll5 = ReadChannel(l5)
ll6 = ReadChannel(l6)
ll7 = ReadChannel(l7)
print("channel 1: ",ll0)
# send off the OSC message with sensor values
msg = OSC.OSCMessage()
msg.setAddress("print")
msg.append(ll0)
msg.append(ll1)
msg.append(ll2)
msg.append(ll3)
msg.append(ll4)
msg.append(ll5)
msg.append(ll6)
msg.append(ll7)
Leave a Reply