Category: Fab Academy AS220 – Providence, RI
For Fab Academy, Shawn Wallace put together a basic example of getting the Arduino to make music using Pure Data.
- First, get the extended version of Pure Data here: http://puredata.info/community/projects/software/pd-extended
- NOTE: You need the exended version with the comport object, used to talk to the serial port.
- Next, flash your Arduino with the following code:
void setup() { Serial.begin(9600); } void loop() { for (int i=0; i<255; i++) { Serial.write(i); delay(100); } for (int i=255; i>0; i--) { Serial.write(i); delay(100); } }
- Then, save this Pure Data patch to a text file, name it SimpleExample.pd, and open it up in Pure Data:
#N canvas 644 73 523 614 10; #X obj 186 309 dac~; #X obj 110 182 r left; #X obj 298 180 r right; #X obj 36 150 osc~; #X obj 80 151 osc~; #X obj 39 194 *~ 0.2; #X obj 235 181 *~ 0.2; #X obj 266 227 *~ 1; #X obj 90 226 *~ 1; #X obj 35 47 comport 9600; #X msg 36 17 devices; #X msg 95 19 open 2; #X floatatom 35 70 5 0 0 0 - - -; #X obj 35 102 * 10; #X obj 75 103 * 20; #X connect 1 0 8 1; #X connect 2 0 7 1; #X connect 3 0 5 0; #X connect 4 0 6 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 0 1; #X connect 8 0 0 0; #X connect 9 0 12 0; #X connect 10 0 9 0; #X connect 11 0 9 0; #X connect 12 0 13 0; #X connect 12 0 14 0; #X connect 13 0 3 0; #X connect 14 0 4 0;
A nice feature of Pd is that all the patches are in a simple text format.
To Get this Example Working:
- Open Pure Data
- Open the “SimpleExample.pd” file in Pure Data
- Click on the “devices” message box: This will list any available serial ports in a numbered list.
- On my Mac, the usb port connected to the microcontroller was on port 2; (it may be different on your computer)
- Find the correct port number and change the “open” message from “open 2” to “open (your port # here)”. To do that, enter Edit mode under the Edit menu. Now you can type directly into the message boxes. After you change the “open” message, leave edit mode and do the following:
- 1. Select “compute audio” in the main Pd window
- 2. Click on the “open” message to open the serial connection
You should see output of the comport changing, and should hear a rising and falling tone.
For reasons I haven’t uncovered yet, I was unable to use the Arduino IDE to burn the bootloader to a fabbed Arduino board. For my first attempt at this, see the Fabkit / Fabduino post. Also see Ed Baafi’s Fabkit / Fabduino page for how to program an fabbed Arduino without an external clock through the Arduino IDE. In both OS X and Ubuntu I was unable to connect to the board through the IDE. Shawn Wallace suggested that I use the following code. (See “To Program Your Arduino” section below) The code below worked for me in Ubuntu. NOTE: This code below works for a using an external 8MHZ resonator, see the links to the .png files.
Download the Files
Download Files to Mill
Get the files from the Fab Academy site
Download the Arduino Bootloader File for the Atmega168
Right click to save the files
To Program Your Arduino:
Set the fuses with:
Paste code is all in one line
avrdude -c usbtiny -p m168 -B 5 -u -U lock:w:0x0F:m -U efuse:w:0x00:m -U hfuse:w:0xdd:m -U lfuse:w:0xf6:m -P usb
Burn the bootloader with:
Paste code is all in one line
avrdude -P usb -c usbtiny -p m168 -u -U flash:w:ATmegaBOOT_168_pro_8MHz.hex -U lock:w:0x0F:m -B .2
The options used:
- -u –> Disable safemode, default when running from a script.
- -U :r|w|v:[:format] –> Memory operation specification. Multiple -U options are allowed, each request is performed in the order specified.
This board is a “hello world” for running a basic stepper motor board.. To make it yourself – download the Fab Academy board diagrams / .pngs and code.
To Program the Board / Motor to Do a Half Turn
sudo make -f hello.stepper.44.half.make program-usbtiny
To Program the Board / Motor to Do a Full Turn
sudo make -f hello.stepper.44.full.make program-usbtiny
To Program the Board / Motor to Do a Wave
sudo make -f hello.stepper.44.wave.make program-usbtiny
I had trouble getting this board to work at first, the motor would turn back and forth only a small amount, not the full or half turn that the program specified. Then I checked the jumper wires. One of the wires was bad (the header was not connected). After replacing the faulty wire, the motor ran.