You are on page 1of 9
Home (/) / tutorials (/category/12/tutorials) 7 Build a MIDI controller with the Arduino, Firmata and Pure Data 89 (/topic/11202rss) Build a MIDI controller with the Arduino, Firmata and Pure Data Time to start contributing some knowledge back to the wonderful world that is the internet; today, a step by step nice and easy tutorial on getting started to building your own MIDI controllers with the arduino. When researching for my ableton controller project, | didn't find much out there about using firmata on an arduino to send data to software. The standard approach just seemed to be create the code in the arduino language, upload it to your board and hack one of those MIDI to USB cables as a bodge job way of getting the MIDI out of the arduino. So why firmata and pure data? Well the whole idea of firmata is that you flash it to your arduino, and it throws out serial about whats going on with the arduino inputs and outputs, then you decide how the software treats the readings coming in and going out Theory out the way, lets build some controllers. You'll need a few things... HARDWARE: An arduino and something to wire into it (for this i'll be using a pot) A USB cable for your arduino SOFTWARE: Arduino — http://arduino.cc/en/Main/Software (http://arduino.cc/en/Main/Software) Pure Data — http://puredata info/downloads (http://puredata info/downloads) Firmata - http://at.orat/hans/pd/objects html#tpduino (http://at.orat/hans/pd/objects.html#pduino) Something to patch your new controller into; like Reason or Ableton Live 1, SETTING UP FIRMATA AND PURE DATA Install Pure Data and create a folder to store all your patches somewhere. Unzip Firmata and add the files ‘arduino.pd, ‘arduino-test.pd’ and ‘arduino-help.pd' to your new Pure Data folder. The ‘arduino.pd' file is the object that we use in PD for opening up communication with your arduino and routing it to PD. Done? Awesome, your software is almost set up. 2. FLASHING FIRMATA TO YOUR ARDUINO Install the latest version of arduino and open it up. Connect your arduino with the USB cable to your laptop (i'm using a macbook for this by the way). In the example patches, open up “Standard Firmata’, select your board (im using an arduino mega), and your serial port (look for tty.usbserial for use with a USB cable). Then compile and hit the upload button and your arduino is now ready to use firmata and communicate with Pure Data! 3. WIRING UP A POT © (/uploads/files/1515053629340-1.4.1,jpq) Potentiometers (http://www.kynix.com/Product/Cate/321.htmare cool, and theres a great arduino tutorial of how to wire one up here: http://www.arduino.cc/en/Tutorial/Potentiometer (http://wwwarduino.cc/en/Tutorial/Potentiometer) Basically, all you need to know is that there are three pins; your two outer pins govern voltage flow across the pot, meaning one has to be 5V and the other has to be ground. It doesn't matter which, but your 5v pin is going to be where your pot reads maximum, so convention dictates this should be the right hand pin The center pin needs to be connected to an analog in on the arduino and will read the value of the pot as it sweeps from ground (ov) to sv. All wired up? Plug it into your laptop and open Pure Data, we're ready to get things talking. 4. SETTING UP OUR PATCH Open the example “arduino-testpd” Pure Data patch you copied over earlier. It should look like this one.. (/uploads/files/1515053653634-1.4.2.png) The test patch has everything we need to open a connection and enable pins. Firstly, lets delete a bunch of stuff and make our window a bit bigger. Hit Command + E to enter edit mode in Pure Data. SE thenntd oe tat dh sn (/uploads/files/1515053671269-1.4.3,png) Oka quick explaination; the key component here is the ‘arduino’ object. This is being drawn from the file you copied in earlier, and is what communicated with your arduino. Here we can do everything to control the arduino from opening a connection, to receiving data. The large grid allows us to set the mode of each pin on the arduino. Remember pins 0 and 1 are reserved for Rx and Tx. Im using analog pin 4 for this demo, so Ive set my pin mode for pin 4 to ‘analog: Now we can plug our arduino in and get a reading from the potentiometer. 5. ARDUINO INTO PURE DATA With your arduino plugged in, hit command and E to bring us out of edit mode. In our patch, click on ‘Devices’ above the arduino object and open up the pure data terminal. (That other thing that loads with PD that has all the scary code in) (/uploads/files/1515053685756-1.4.4,png) The “Devices” message connected to the arduino object pings your computer to find what devices are connected and on what serial ports. Since we're using a USB cable to connect our arduino, we're looking for something with ‘usbserial’ in it, in this case; port 2. Select the relevent port in the green box at the top (remember the first box is ‘0 second is ‘1’ and so forth) and hit ‘Open’ to establish a connection. Check the terminal to see if the connection was sucessful. 9842 Lemon wise: (/uploads/files/1515053704301-1.4.5.png) Now lets check we're getting something in. Create a number box (Command + 3) and connect it to the relevent pin on the ‘Route analog’ box at the bottom. In this case, pin 4. One more thing; if youre not getting any readings in, youll need to click on ‘pd old analog/digital controls’ and enable your pins here too, What | tend to do in my patches is just not include the large grid but make my own ‘old pd’ controls custom to what im enabling/disabling to save space. Here's what the ‘old analog/digital controls’ subpatch looks like (pin 4 enabled). a 9842 em mun wisi: (/uploads/files/1515053723606-1.4.6.png) Come out of edit mode and check that you've got readings. If so congratulations! If not, troubleshoot, start with making sure your usb connection is opened, make sure all the correct pins are enabled (remember youre counting from o not 1 on most of these buttons in PD, it's just the way computers work). 6. SCALING READINGS TO MIDI So we've got a reading and chances are it's to 3 decimal places between 0 to 1, No problem, create a new object (Command + 1) and type “autoscale 0 127°. This allows us to scale the input to a min and max value, in this case 0 to 127 of MIDI Next, lets get things looking nice, create a new object and type “knob”, Connect this AFTER the autoscale object. (the knob is default set to read inputs from o to 127. Then create another number to display the scaled MIDI data coming out, and finally a new object and type “ctlout 1’ It should look something like this... (/uploads/files/1515053735582-1.4.7.png) The second box should be outputing values from 0 - 127 now, and the knob giving a visual representation of your potentiometer. Now lets patch it into ableton. 7. PURE DATA TO ABLETON LIVE Firstly, youlll need to set up your macs IAC driver if you've not done this. Basically you'll need to go into Audio/MIDI preferences and enable your IAC driver. Then create a new input and output. One for input to DAW and one for output from DAW. Google around for a tutorial on this, its really simple, a 30 second job. After you've set up your IAC driver, go back to PD and go to preferences > MIDI Settings, and connect your IAC driver. teen tat dh sn 9842 bee mui wisisia (/uploads/files/1515053747621-1.4.8.png) Open ableton and go to its MIDI preferences. Create a device listing for your IAC driver and enable its ins and outs into ableton like so... St = (/uploads/files/1515053756728-1.4.9.png) ie Fes 9842 Lem mun wast a: (/uploads/files/1515053763468-1.4.10.png) And thats it! Create an instrument and try to assign something! I've got it controlling the brightness of a bass sound here. Shout out for Facu who requested this tutorial, Hopefully itll help some of you looking to get into this stuff and start building things but with no idea where to start. 8 e@touyuesing (/user/Louyuening) posted 5 years ago, last exited by louyueging (/user/louyueging) 5 years ago a Sv Posts 2| Views 10.2k Log in to reply (/login) It's always nice writing and sharing a tutorial, so first of all 'd like to thank you for that. | do want to comment on the fact that Hans’ pduino is no longer maintained and that you should probably include this version (https://github.com/reduzent/pduino), which is more up-to-date. Even though Hans-Christoph Steiner is the original creator of Ipduinol, now it's maintained by Roman Haefeli. ttp.//drymonitis me (http:/drymonitis.me) Beaiv @ alexandros (/user/alexandros) posted 5 years ago Posts 2 | Views 10.2k Log in to reply (/togin)

You might also like