spink0
DIY eurorack CLK / RST generator for Ableton LINK
After Ableton released the source code /SDK for, applications and devices that use it quickly started to appear.
The spink0 is a patchwork from shaduzlabs pink-0, a CLK / RESET generator based on the Rasperry Pi Zero W. His source code is the core of this project. After a lot of tweakin, tuning & changing, a working LINK connection could be established. I then squeezed the PiZero into its new dress, consisting of a set of three PCBs that all sandwich together to form a eurorack module.
Vive la mitraillette 🙂
Since the setup procedure of all the tools needed, to and for the build, is not a too trivial task. And on top of that you’d also need to make some changes/tweaks to the original source files to get everything running, since some pins and HW elements have changed. So I decided to distribute the adapted source directly embedded in the working OS-image for the raspberry, all set up.
I also added some bash scripts to easily switch between different network environments.
Disclaimer:
This thingy is a v0.1.0 patchwork. so please don’t except stability over centuries. There may be a slip here or there. but it is definitively a handy and very usable toy to jam freely together with your friends!
But hey – code is opensource. maybe someone comes along and implements the MIDI out or gets encouraged to compile a preemt_rt enabled kernel for the system… or other features get added/implemented.
Best operated in closed networks, updates, backups & Co. of other devices disabled!!!
Special thanks to shaduzlabs for this awewsome code!!
Parameters:
- Tempo
- Length
- PPQ
- Run/Stop
I/O:
- Clock Out
- Reset Out
- MIDI Out (isn’t implemented yet… but would round up functionality nicely)
- HDMI (on the side, from Pi)
- USB 2.0
- wireless LAN 802.11 b/g/n
Operation Modes
To conveniently switch between networks with the module i wrote some scripts that give the module two principal operational modes:
- Client mode (join other WLAN’s)
- AP mode (create a WLAN for others, manage your device)
you can switch between modes by pressing either the button of the encoder for 7s (switches to AP) or the the RUN/STOP button for 7s (will switch to Client mode). When you initiate a change the pink-daemon will be stopped (display may go dark or fancy), all networking stuff accordingly reconfigured and then the daemon will be launched again. The switch from either mode to the other takes around 5 to 15 seconds.
AP mode
creates a Wireless network with the SSID “spink”. Password is spinkspink. The device will have the IP 10.3.141.1, you can login to your SPINK with SSH or via HTTP.
Others can join the network or you can manage credentials for client mode.
To administer the access points settings you can use raspap-webgui under http://10.3.141.1 (user: admin/ pw:secret)
Or you can add network credentials of networks to join as a client. To do open the addnet script under: http://10.3.141.1/addnet.php
Client mode
in this mode the unit acts as a WLAN client and has to have a known network reachable and its credentials stored in the wpa_supplicant.conf, otherwise it will not work correctly. You’d have to switch it back to AP mode to check and re-enter credentials for the new network to be joined.
How to find your module in Client mode
If you need to login to your module while its in client mode, lets say you need internet access to download and compile the newest source. You have to find out the IP address it has received from your networks DHCP server. You can have a look at your computers ARP table to find out that address. In the ARP table the MAC Addresses and their according IP Addresses are listed. The Raspberry Pi foundation is big enough to have its own OUI, the MAC addresses start with b8:27:en:……. -> find the entry with the MAC that starts so and voila -> your IP address. (if it doesnt show up, open a LINK enabled application to make shure there has been communication with the module, after that the MAC address has been learned by your computer and stored in the arp table)
To list your ARP entries, on a linux system type:
arp -a
setup
Flash SDcard on linux / mac
I made my image from a 16Gigabyte card, but shrunk it the awesome pishrink.sh skript to 5.3G, so it should work on a 8Gig card, but i didnt test it.
First unpack the tar.gz file of the image with:
tar zxvf spink0_1_0.tar.gz
Insert the micro SDcard it into your computer, direct or via some adapter.
Open a command line interface and type:
df -h ( on mac: "diskutil list" )
this will show you a list with all “mounted” devices, search for your card and memorize the descriptor (/dev/disk1 or the like), then unmount the card with the following command to prevent further read/write actions:
unmount /dev/yourSDcard1 ( on mac: "diskutil unmountDisk /dev/yourSDcard1" )
then you can write the image onto the SDcard with dd (this task will take 10-30min):
sudo dd bs=1m if=spink0_1_0.img of=/dev/yourSDcard conv=sync
after that you can sync/eject the disk:
sync ( on mac: "diskutil eject /dev/yourSDcard" )
operate
AP mode
- Turn module on and let it boot, (120bpm should appear in the display after about a minute)
- Push the encoders button for 7s to put module into AP mode (display will flicker a bit and come back)
- Connect to it’s WLAN SSID (default spink / pw: spinkspink)
- at this point everything is ready and you can play
- (optional step) If you want to add credentials -> navigate to 10.3.141.1/addnet.php
- (optional step) Enter credentials of the network to join, check the output if everything is OK
- (optional step) Push the run/stop button for 7s to put the module into client mode
Client mode (credentials already known)
- Turn module on and let it boot, (120bpm should appear in the display after about a minute)
- Push the run/stop button for 7s to put the module into client mode. (the module will try to connect to all already stored networks credentials sequencially)
Schematics
the schematics are divided into two sheets, the first sheet is the mainboard which will host all connectors, discrete circuitry and the PiZeroW. The second board is for the Userinterface, its got the encoder, pushbutton, LED’s and the ACSA02 7segments on it.
They get connected together by two 10pin 1.27mm wire-to-board connectors.
Source & Image
source files, installerscipt & stuff: seismic industries github
Preconfigured raspbian stretch Image download: spink0_1_0.tar.gz (2Gigabyte, 5,3Gigabyte expanded)
Preconfigured RT_PREEMPT enabled raspbian Image download: spink0_1_0_rt.tar.gz (2.2Gigabyte, 16Gigabyte expanded) (thanks lucky lukas) (i noticed that “sometimes” the daemon won’t start at boot automatic, but you have to switch mode at least once anyway)
Hint: if you knot a little sewing thread around your sd card before inserting it (like in the pic on the right) it’s gonna be a lot easier to pull it out of your spink again in case needed. (thanks nils)
buy a prebuilt module: SOLD OUT a.t.m.
In case we are sold out > boards and/or prebuilt units are most of the time also available from synthcube, loops&bits, pusherman productions.
build
Use the pick and place sheet to populate the individual boards first
(Thanks Henri, Jethro & Ashburn for all the inputs and corrections!)
put some isolation layer on the mainboards topside and the dislayboards bottomside. like in the pictures. i use stickers i had laying around. just cover all the vias and the job is done.
put the PI on top of the mainboard and slide the pinheader in from underneath trough both boards. And solder two pins of it from the topside of the PI first. Adjust the pins that they don’t stick out too much on the PI’s topside, just enough to be soldered, like 0,5mm.
then solder all pins from the topside of the pi. Dont use too much solder and also check the the two boards don’t stick together from solder flowing down to the spink mainboard. The PI Z W takes quite a bit of energy from your iron to solder.
Eventually wiggle the shrouding plastic a bit further away with tweezers to gain some pinlength (gently please), Then cut each pin as far away as possible.
You’ll end up with pins sticking out of the PI, ready to be put on the mainboard tightly and then soldered from the other side.
Make shure that the PI is absolutely tight on the mainboard, no gap in between!
-> otherwise you’ll not be able to mount the displayboard on top of it. And it would be very hard to desolder the PI.
Then position the displayboard on top of it. Check that it does only gently touch the PI (on the card reader and the “big” inductor). Also check that you will be able to put the frontpanel on top, without squeezing things. (note: the lumberg minijack connectors have 1mm less height then the green thonkis, so with the lumberg’s you may also adjust it a bit so everything is parallel..)
Also don’t forget to solder the extra GND wire between displayboard and mainboard, otherwise the encoder/button and the LED’s will not work.