Biodata Sonification

Introduction: Biodata Sonification

Generate MIDI notes based on changes in Galvanic Conductance across two probes.

For the latest code version and updated tutorials please go to electricityforprogress.com/Forum and checkout my github project https://github.com/electricityforprogress/BiodataSonificationBreadboardKit

Step 1: Solderless Breadboard

A key tool in electronics experimentation is the Soldless Breadboard. Allowing users to connect components together and reconfigure easily, the Breadboard lets newcomers to electronics and seasoned engineers to prototype designs and connect electronic systems easily.

Breadboards have a series of holes which are electrically connected. Horizontal rows run across the Breadboard in Terminal Strips of 5 connected points points and are marked with the letters abcde and fghij. A large divide down the middle of the breadboard separates the horizontal rows, this facilitates the use of Dual Inline Package (DIP) microchips. On the sides of the breadboard are vertical columns of holes, usually marked with Red and Blue lines. These vertical columns are used most often for power connections (positive voltage and ground), and are called a 'Bus'. We will be attaching all of our Positive and Ground connections to these Buses on each side of the breadboard. In a later step we will tie together the Grounds and the Positive Buses on each side of the breadboard.

In order to 'connect' two electronic components, we simply place the leads (or 'legs') of the parts into adjacent horizontal holes. This allows a user to connect multiple components together using each horizontal row of 5 points.

Step 2: Insert 555 Timer

The 555 timer is an 8 pin DIP microchip, which we will configure as an astable multivibrator capable of measuring electrical conductivity. Orient the chip so that Pin 1 is at the top - you will see a small circle near pin 1 on the chip, also see the diagram which identifies each of the pins on the 555 Timer.

Place the 555 timer at the bottom of the Breadboard. The breadboard is arranged with a gap down the middle, the microchip should span across this gap. The rows of the breadboard are numbered, we will be inserting the 555 timer in rows 27, 28, 29, and 30, with pin 1 in row 27.

Step 3: Pin 1 to Ground

Attaching the 555 Pin 1 to Ground, add a jumper wire from row 27 column A to the Ground Bus.

Step 4: Timing Capacitor C1

Connect the timing Capacitor C1 (0.0042uF) between Pin 1 and Pin 2 of the 555 Timer. Insert the tiny blue capacitor into rows 27 and 28 in column B.

This capacitor sets the overall frequency range of the timer, here we use a very small value in order to get the highest resolution of pulses out of the 555 as we measure fluctuations in electric capacitance across the two probes.

Step 5: Decoupling Capacitor C2

Connect the high frequency decoupling capacitor C2 (1uF) across the 555 Timer's positive and ground, pins 1 and 8 in row 27, column D and G.

It can be helpful to trim the legs of the capacitor, for a better fit on the breadboard, but be careful to leave enough space for the legs to span the microchip and fully connect with the breadboard sockets.

Step 6: Decoupling Electrolytic Capacitor C3

Connect the low frequency decoupling Electrolytic Capacitor C3 (41uF) across the 555 Timer's positive and ground, pins 1 and 8 in row 27, column C and H.

Note that Electrolytic capacitors are polarized, identifying the negative end with a white stripe down the side of the cap; ensure that the negative side of the capacitor goes to Pin 1 (Ground) column C and the positive side of the capacitor goes to Pin 8 (Positive) column H.

Step 7: LED Output

Add the Red LED to the output pin 3 of the 555 Timer Row 29 pin A and across to the Ground Bus. Place the longer lead of the LED (anode) in Row 29 Column A, with the shorter leg of the LED in one of the Ground Bus holes.

**- LEDs are polarized and must be inserted in the correct orientation. The LED's Cathode leg (negative) can be identified by a flattened edge on the side of the LED, and the positive Anode can be identified by the longer leg. LED's polarity and color can be identified using a simple button battery, by sliding the battery in between the LED leads, you will either see the LED glow or not, try turning the battery the other direction. The LED will illuminate when the battery + (wide flat) end is connected to the Anode (longer leg) and the battery - (smaller button) is connected to the Cathode Ground leg. Grab a CR2032 3v button battery and try it out!

After you get everything working in the last step, you can come back and trim the legs of the LED if desired.

NOTICE: under all normal circumstances, a resistor would be added between the output pin and the LED. In order to simplify the build of this kit, the current limiting resistors have been omitted. We have included resistors for each LED in the kit. Modified instructions including current limiting resistors will be provided as an appendix.

Step 8: Jumper 555 Trigger to Threshold

Connect a Jumper wire between Pin 2 and Pin 6 of the 555 Timer Row 28 column D to Row 29 Column G.

This attaches the threshold and the trigger pins of the 555 timer, which form the input connection for the primary electrode.

Step 9: Jumper 555 Reset to V+

Connect Pin 4 of the 555 Timer to the Positive Bus using a Jumper wire Row 30 Column D to the Positive Bus

Connect Pin 8 of the 555 Timer to the Positive Bus using a Jumper wire Row 27 Column I to the Positive Bus

(add image and step for 555 VCC to V+)

Step 10: Resistor R1 100K 555 Discharge to Positive Bus

Connect Resistor R1 (100k) between Pin 7 of the 555 and the Positive Bus. Place one side of the Resistor in Row 28 Column J and the other side of the resistor to the Positive Bus.

Step 11: Probe Input Jack

The Probe input is an 3.5mm mono jack, which connects to the breadboard through two soldered pins. While its a tight spot, the header pins soldered to the jack will fit into Row 28 and 29 Column H.

The header pins have been added to the jacks to make it easier for the user to build the kit. Please note that excess stress on the jack or pins may cause damage to the solder connection. If your kit does not have the header pins soldered to the jack, please see the appendix for soldering instructions for the jack and header.

Step 12: Positive Bus Jumper

Connect the Positive Bus on both sides of the breadboard by inserting a Jumper wire between the top highest points on the left and right (red) Power Bus.

Step 13: Ground Bus Jumper

Connect the Ground Bus on both sides of the breadboard by inserting a Jumper wire between the top highest points on the left and right (blue) Ground Bus.

Step 14: Testing the Galvanometer

Now we are ready to hookup some batteries and test the Galvanometer we just built from the 555 Timer.

Insert 3 AA batteries into the black Battery box, ensure the power switch on the box is in the 'OFF' position. Attach the Battery box Red wire to the Breadboard Positive (red) Bus, attach the Battery box Black wire to the Breadboard Ground (blue) Bus. Now slide the power switch on the battery box to 'ON'. The LED should be illuminated, showing the 555 timer is powered on.

Attach the white electrode leads (don't bother using the sticky pads yet) to the 3.5mm jack connecting to the Galvanometer. By touching the metal button ends of the electrodes with your fingers, you will be able to see the LED flash based on changes in conductivity. Touching the electrodes very lightly can show the LED flash on and off slowly, by squeezing the electrodes really hard the LED flashes very fast, appearing like the LED remains lit or slightly dims.

Step 15: Insert ATMEGA328 28pin DIP

Your MIDIsprout Kit comes with a preprogramed ATMEGA328 micro controller, with fuses set to runn at 8Mhz on the internal oscillator (Fuses: Low-E2 High-D9 Ext-FF) , and preloaded with the MIDIsprout firmware. This 28 pin DIP has two parallel rows of 14 pins.

Insert the 328p chip at the top of the breadboard, identifying Pin 1 by the small circle on the chip, into Rows 1 - 14 spanning the DIP across the gap in Columns E and F.

**To easily reprogram and experiment, it is possible to add a 16Mhz oscillator on pins 9 and 10 of the breadboard, and program using an arduino Uno board with modifications of the MIDIsprout code. The ATMEGA328 can also be reprogrammed through ICSP with an external programmer (other arduino) and a maze of Jumper wires ;)

**Also as an addendum, MIDIsprout Kit can be built using the previous steps to assemble the Galvanometer, with the breadboard attached directly to an Arduino Uno! Stay tuned...

For reference, the code preloaded into the current version MIDIsprout :

Arduino Code:

Step 16: Power the ATMEGA328

Attach the VCC pin on the 328 to the Positive Bus using a Jumper between Row 7 Column A and the Positive Bus.

Step 17: Ground the ATMEGA328

Attach the Ground pin on the 328 to the Ground Bus using a Jumper between Row 8 Column B and the Ground Bus.

Step 18: Power the ATMEGA328 (analog)

Attach the analog Voltage pin on the 328 to the Positive Bus using a Jumper between Row 9 Column J and the Positive Bus.

Step 19: Ground the ATMEGA328 (analog)

Attach the Ground pin on the 328 to the Ground Bus using a Jumper between Row 7 Column J and the Ground Bus.

Step 20: 555 Timer Output to ATMEGA328 Input

Connect the output pin from the 555 Timer to the Input Pin 4 on the 328 with a Jumper wire between 555 Timer pin 3 Row 29 Column D and Row 4 Column D.

Here the digital output of the 555 triggers an interrupt pin on the 328, INT0, which measures and compares pulse durations.

Step 21: Knob

The included knob should be prepared by gently bending its three legs (bend all three at the same time) so the knob can stand vertically. Insert the Knob onto the left side of the breadboard in Column A Rows 19, 20, and 21.`

Step 22: Knob Wiper to ATMEGA328 Analog Input

Connect the center pin of the Knob to the Analog Input (A0) of the 328 using a Jumper wire. Attach a jumper between the Knob Row 20 Column E and 328 (A0 pin) Row 6 Column G.

Step 23: MIDI Jack

Insert the MIDI Jack into the breadboard. Prepare the jack by identifying the two pointed mounting pins located at the front of the MIDI jack and bending them upward to point out the front of the MIDI jack. Place the MIDI jack on the right side of the breadboard, with the jack facing the right side. Insert the MIDI jack into Column I and J, Rows 18, 19, 21, 23, and 24. The five MIDI jack pins will fit (snuggly) into the breadboard, be careful not to push too hard.

Step 24: MIDI Data Pin to ATMEGA328 Tx

Connect the MIDI Data output pin to the ATMEGA328 serial Transmit (Tx) pin, by attaching a jumper between Column F Row 23 (MIDI Data pin 5) and Column B Row 3 (328 Tx).

Step 25: MIDI Power Resistor to V+

Connect a resistor between the MIDI power pin (4) and V+ using a 220 Ohm resistor connected to Column H Row 19 (MIDI power) and the Positive Bus on the right side of the board.

Step 26: MIDI Ground Jumper

Connect the MIDI Ground pin to the Ground bus using a Jumper wire between Column F Row 21 (MIDI Ground) and the Ground Bus.

Step 27: Knob Positive Voltage

Connect the Knob positive voltage pin to the Positive Bus using a jumper between Column D Row 19 and the Positive Bus.

Step 28: Knob Ground

Connect the Knob Ground pin to the Ground Bus using a jumper between Column D Row 21 and the Ground Bus.

Step 29: LEDs (red)

There are 5 colored LEDs in the MIDIsprout which provide a light show and indication of the state of the MIDI notes being played.

Connect the LED (red) Anode - long leg to Column A Row 5 and the LED Cathode to the Ground Bus.

**- For simplicity, we are omitting current limiting resistors in this build, please see the appendix for steps to include resistors with the LEDs.

Step 30: LEDs (yellow)

Connect the LED (yellow) Anode - long leg to Column A Row 11Connect the LED (red) Anode - long leg to Column A Row 5 and the LED Cathode to the Ground Bus.and the LED Cathode to the Ground Bus.

Step 31: LEDs (green)

Connect the LED (green) Anode - long leg to Column A Row 12 and the LED Cathode to the Ground Bus.

Step 32: LEDs (blue)

Connect the LED (blue) Anode - long leg to Column J Row 14 and the LED Cathode to the Ground Bus.

Step 33: LEDs (white)

Connect the LED (white) Anode - long leg to Column J Row 13 and the LED Cathode to the Ground Bus.

Step 34: 16MHz Crystal Oscillator PlaceHolder

The 16MHz crystal oscillator should be added on pins 9 and 10 of the ATMEGA328 Row 9 and 10 Column C. The part is not polarized and the crystal can be inserted into pins 9 and 10 in either orientation.

Step 35: Battery Pack

Attach the battery pack to the breadboard by placing the battery pack Red wire into the breadboard Positive Voltage Bus and the Back wire into the breadboard Ground Bus. Insert 3 AA batteries and switch on the battery box. With the power on the LED by the 555 Galvanometer should illuminate.

Connect the electrode leads to the jack at the bottom of the breadboard, and touch the two button ends of the leads. The Galvanometer LED should flash in response to the conductivity across your fingers.

Step 36: Biodata Sonification

When the electrode leads are touched or attached using gel pads, the MIDIspout program will detect small changes in conductivity and represent these changes as MIDI notes and colorful lights!

Connecting a MIDI cable from the MIDI jack on the bread board, the MIDIsprout Kit can be attached to synthesizers, keyboards, sound generators, and computers supporting MIDI to produce sounds in reaction to the MIDI notes.

By turning the knob, the Threshold/Sensitivity of the MIDIsprout can be adjusted. By decreasing the threshold, smaller fluctuations in conductance from the galvanometer can be detected; by increasing the threshold, larger changes are required in order to produce notes. During long term installations, I use a low threshold setting which produces a pleasant babbling stream of MIDI data. For public interactive events with multiple plants, I turn the threshold up rather high, which results in MIDI notes only being produced when a person gets very close or physically touches the plant.

1 Person Made This Project!

Recommendations

  • Mason Jar Speed Challenge

    Mason Jar Speed Challenge
  • Bikes Challenge

    Bikes Challenge
  • Remix Contest

    Remix Contest

43 Discussions

0
flighthub69
flighthub69

3 months ago on Step 4

Hi Samuel,
I do not have a very strong background in circuitry. I have sourced all the parts except for the 0.0042uf capacitor. I just cannot find it for the life of me.

Would you either have a link to a place I could find them, or an alternative solution?

Thanks so much!

0
electricityforprogress
electricityforprogress

Reply 3 months ago

The 555 timer circuit is a simple astable oscillator, the value of the timing capacitor sets the 'range' for the pulse lengths. Most any capacitor should actually work, you can just shoot for something small.
picofaradsnanofaradsmicrofarads3900 pF3.9 nF0.0039 uF4300 pF4.3 nF0.0043 uF4700 pF4.7 nF0.0047 uF5100 pF5.1 nF0.0051 uF

0
flighthub69
flighthub69

Reply 3 months ago

Thank you so much for replying!! I know PlantWave is now a product, so I appreciate you still tending to the Instructable and letting people tinker with the idea. I ended up with a 0.0047.

I have one more question for you. I'm building my version to bridge with Max/MSP. I used the Arduino code in this project, and after spending some time getting a rough grasp on what was going on in it, I gutted it down to everything sans MIDI, CV & LED code, and it compiles and runs. (I have almost /no/ background in C, so it took a bit to understand the syntax and what was happening.)

Do I understand correctly that these are the variables that are results of the galvanometer analyses and would be used to construct the MIDI messages?

"unsigned long averg = 0;
unsigned long maxim = 0;
unsigned long minim = 100000;
float stdevi = 0;
unsigned long delta = 0;
byte change = 0;"

Lastly, if so, is it possible to get them to print to Serial? I think this last question might be lazy on my part, if so that's ok hahaha, I hope to figure it out. Mainly I was wondering about the variables ^

Thanks again!


0
electricityforprogress
electricityforprogress

Reply 3 months ago

Well, while my open source designs and code were used as a basis for Plantwave, I do not do business with Data Garden any longer following the outcomes of the kickstarter. But they have a really great new developer (my friend Manuel https://leetronics.de/en/shop/) . Also sadly, my biodata forum died a horrible online death and i'm fighting to recover the many years of information and sharing which was there (you don't happen to be clever with SMF forums?)

Yep those are the variables which are used to calculate if a 'change' occurs and the stdevi and delta can be used to create specific notes/ccs. It is a very very simplistic method of identification, and the threshold value is used as a multiplier to 'thin' the change events.

So, you say you don't have much C experience but you then made extensive changes to the code, and it compiled ... and you are having trouble printing 'hello world'? Perhaps you should tell me what you are trying to do with the data and I can be of more assistance.

I am a teacher, so i will try to intuit/guess what you are doing ... You have decided that you want to access the 'raw' data and don't want to be bothered by the MIDI and CC data. You are planning to use MaxMSP/PureData to capture a serial data stream and then process those values, which is why you want to use Serial.print(stDevi); Serial.print(","); Serial.print(delta); Serial.print(","); Serial.print(change); Serial.println(); in order to provide a comma delimited list of the values "in real time".

You can do all that, and try to make a different analysis of the datastream ... but I would suggest using the MIDI notes and a MIDI-USB cable, or reprogram a proMicro or Uno as a USB-MIDI device. Or use a proMicro and read the Serial debug. Heck you could even send different data over MIDI, instead of notes use CC messages with a more precise 'value' could even use high resolution CC's for super detailed values.
I suggest that you try to leave the code as unmodified as possible, removing the midi and CC and led portions may have an effect on the outcome. Come to think of it, without the LEDs and MIDI there is almost no code left, just reading on/off messages on the input pin from the toggling 555 timer and calculating the avg/stdevi for change ;) Nevermind, you can easily hack this code down to a bare minimum.

Now, stepping back, isn't it amazing that such a simple setup can be used to extract complex invisible biological processes? Honestly i just stumbled into this by experimenting and playing with simple circuits, making LEDs flash.

good luck to you on your biodata adventure!
0
flighthub69
flighthub69

Reply 3 months ago

Aw man, I was not aware of that! I wasn't aware of what happened surrounding the Kickstarter either. That's too bad. You're right though, from what I understand of this system, it really is quite a simple concept that can scale to such complexity. Complex chaos systems are beautiful. It's an elegant project, and I'm very happy you're still around to advise! :)

Yes, well... it was hack and slash for sure. I was gleaning from the little that I know about syntax, and leaving what I knew I should leave alone intact. It did compile, but I realize now that it could /happen/ to compile but not exactly /function./

Yes, the idea was to capture whatever values your calculations were returning, and then passing them to Max and graphing them in Max and inventing my own rules for how MIDI notes are generated from that information.

I believe I have now found a way to pass the averg/maxim/minim/stdevi/delta/change values out of analyzeSample() to a void function that prints them, and call that function in loop(). It compiles, but the values aren't changing (but it's a new value each time!) so it seems like the values are passed the first time and then just duplicated after.

Ideally, at the end of the day, I just want to take the averg/maxim/minim/stdevi/delta/change values as they're coming out in real time and have them print to serial so I can take over in Max. I will probably take another hack&slash at your original code and leave more intact and see if I can still accomplish that.

The beautiful thing, and as a teacher you'll appreciate this, is that in trial & error'ing and hacking at this, I've actually picked up a lot about programming in Arduino, so while I'm frustrated, I'm happily frustrated! Bonus points: it got me to spend some time with my dad who is a programmer. He's not familiar with the particulars of Arduino though, sadly. Still nice bonding time, haha.

Thanks again for all your help!


0
electricityforprogress
electricityforprogress

Reply 3 months ago

Feel free to send me your code and i'd be happy to assist ;) samuel (dot) cusumano (at) gmailerama

The code is currently trying to send Serial MIDI data out of the Serial port at 31250 baud, so you will at least need to change the way serial is being used. I implemented my own MIDI handlers so it should be easy enough to change ( you may have already accomplished this).

If you see the printout in the serial monitor but the values aren't changing, then it is likely a 'scope' issue.

Here's another thought, my code only wants to output MIDI notes when it detects a change, and you are trying to have a constant data stream ... so very different goals. ...

hack hack ... tinker tinker ...

Its dangerous to go alone, take this:

/*------------
MIDI_PsychoGalvanometer v021
Accepts pulse inputs from a Galvanic Conductance sensor
consisting of a 555 timer set as an astablemultivibrator and two electrodes.
Through sampling pulse widths and identifying fluctuations, MIDI note and control messages
are generated. Features include Threshold, Scaling, Control Number, and Control Voltage
using PWM through an RC Low Pass filter.
MIDIsprout.com
This is a RAW Data modification for crazy folks and friends, completely untested, just how we like it!
-------------*/
const byte interruptPin = INT0; //galvanometer input
const byte knobPin = A0; //knob analog input
const byte samplesize = 10; //set sample array size
const byte analysize = samplesize - 1; //trim for analysis array
long batteryLimit = 3000; //voltage check minimum, 3.0~2.7V under load; causes lightshow to turn off (save power)
byte checkBat = 1;
volatile unsigned long microseconds; //sampling timer
volatile byte index = 0;
volatile unsigned long samples[samplesize];
unsigned long previousMillis = 0;
unsigned long currentMillis = 1;
unsigned long batteryCheck = 0; //battery check delay timer
//provide float map function
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
//debug SRAM memory size
int freeRAM() {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
} // print free RAM at any point
//interrupt timing sample array
void sample()
{
if(index < samplesize) {
samples[index] = micros() - microseconds;
microseconds = samples[index] + microseconds; //rebuild micros() value w/o recalling
//micros() is very slow
//try a higher precision counter
//samples[index] = ((timer0_overflow_count << 8) + TCNT0) - microseconds;
index += 1;
}
}
void analyzeSample()
{
//eating up memory, one long at a time!
unsigned long averg = 0;
unsigned long maxim = 0;
unsigned long minim = 100000;
float stdevi = 0;
unsigned long delta = 0;
byte change = 0;
if (index == samplesize) { //array is full
unsigned long sampanalysis[analysize];
for (byte i=0; i<analysize; i++){
//skip first element in the array
sampanalysis[i] = samples[i+1]; //load analysis table (due to volitle)
//manual calculation
if(sampanalysis[i] > maxim) { maxim = sampanalysis[i]; }
if(sampanalysis[i] < minim) { minim = sampanalysis[i]; }
averg += sampanalysis[i];
stdevi += sampanalysis[i] * sampanalysis[i]; //prep stdevi
}
//manual calculation
averg = averg/analysize;
stdevi = sqrt(stdevi / analysize - averg * averg); //calculate stdevu
if (stdevi < 1) { stdevi = 1.0; } //min stdevi of 1
delta = maxim - minim;
//**********perform change detection
// if (delta > (stdevi * threshold)){
// change = 1;
// }
//*********
Serial.print(averg); Serial.print(",");
Serial.print(stdevi); Serial.print(",");
Serial.print(delta); Serial.print(",");
Serial.print(minim); Serial.print(",");
Serial.print(maxim); Serial.print(",");
Serial.println();
// if(change){// set note and control vector
// int dur = 150+(map(delta%127,1,127,100,2500)); //length of note
// int ramp = 3 + (dur%100) ; //control slide rate, min 25 (or 3 ;)
// int notechannel = random(1,5); //gather a random channel for QY8 mode
//
// //set scaling, root key, note
// int setnote = map(averg%127,1,127,noteMin,noteMax); //derive note, min and max note
// setnote = scaleNote(setnote, scaleSelect, root); //scale the note
// // setnote = setnote + root; // (apply root?)
// if(QY8) { setNote(setnote, 100, dur, notechannel); } //set for QY8 mode
// else { setNote(setnote, 100, dur, channel); }
//
// //derive control parameters and set
// setControl(controlNumber, controlMessage.value, delta%127, ramp); //set the ramp rate for the control
// }
//reset array for next sample
index = 0;
}
}
void setup()
{
pinMode(knobPin, INPUT);
randomSeed(analogRead(0)); //seed for QY8
// Serial.begin(31250); //initialize at MIDI rate
Serial.begin(115200); //Raw data output
attachInterrupt(interruptPin, sample, RISING); //begin sampling from interrupt
}
void loop()
{
currentMillis = millis(); //manage time
if(index >= samplesize) { analyzeSample(); } //if samples array full, also checked in analyzeSample(), call sample analysis
previousMillis = currentMillis; //manage time
}

0
flighthub69
flighthub69

Reply 3 months ago

It compiles but nothing is returned to serial. It's blank. Hm. I will continue tinkering.

0
lucasnadalini
lucasnadalini

Question 6 months ago on Step 15

Hello @electricityfoprogress, I hope you're doing fine.

I'll try to do this project for using with my yamaha DX7 and Microbrute.
I just bought an ATMEGA328PU already with bootloader, and I'm planning to use a FTDI module to load the MIDI_PsychoGalvanometer.ino sketch into it (I'm aware how to use the FTDI and that I'll need some libraries). Would it be enough to work?
What about LEDFader.cpp, LEDFader.c and MIDISprout Firmware, what should I do with them? Any more usefull tips in this case?

By the way, you may find my electronic music project in Spotify and Instagram, looking for: Visiorama. I'd like to credit you there once it's done.

Thank you so much and congratulations for your impressive work.
Kind regards.

0
electricityforprogress
electricityforprogress

Answer 6 months ago

Yes you will need to use the library for LED fader. I suggest downloading the Arduino IDE, adding the LED fader library from library manager, and compiling as if it's a Uno. Then use your ftdi and choose 'upload using programmer' in Arduino. I suggest modifying the midi channel, scale, and midi cc control number to best control the synthesizer.

0
lucasnadalini
lucasnadalini

Reply 6 months ago

Thank you for the advices and quick answering.
I'll let you know once I got any news!

0
rdetiger
rdetiger

Question 7 months ago on Step 14

Also when I attempt the tutorial i get to step 14 and all looks good and the led light lights up but when touch the electrodes the light does not flash and basically nothing happens, could one of tmhy parts be defective?( I am using a 4.7 NF instead of 4.2NF capacitator ,would that make a difference? I am actually not able to find a 4.2 NF capacitator)

0
rdetiger
rdetiger

Question 8 months ago on Step 1

HI, Thanks for putting this amazing project up- I built it all following your pdf instructions, but are having a hard time adding the code to my arduino. It keeps on giving me error messages " no such file or directory" I am a newby, with a little experience with arduino. Are there any more specific instructions to upload the latest sketch version for sound- Just need the midi output for sound Thank you!

arduinoError.png
0
electricityforprogress
electricityforprogress

Reply 8 months ago

You will need to add a bunch of libraries in order to use my code, everything that is a #include statement requires the library to be installed. Try googling "install Arduino Libraries" and it is pretty easy to use the built in library manager, you just need to search for EEPROMex, Bounce2, and LEDFader.

Just a personal note, i had trouble getting this code running yesterday, so you are not alone if you are having trouble ;)

Also you can try to original MIDISprout code (without button modes) https://github.com/electricityforprogress/MIDIsprout version 021 but you will still need to install the LEDFader library.

good luck

0
rdetiger
rdetiger

Reply 8 months ago

Thanks!!

0
rdetiger
rdetiger

Reply 7 months ago

I got all the code up and the lights light up in sequence- but thereafter I am not getting any midi signals whatsoever- I do get some midi data when I upload the program- but that is it. I triple checked all the items on the breadboard and all seems correct.
Any other troubleshooting tips to try to get this going? I am now going to try to upload the atmega328 as well and see if that works, is this the code for that -MIDI_PsychoGalvanometer v021?? Is that the midi sprout firmware as mentioned in the tutorial?
Also you still have any kits available?
Thank you! I appreciate your help. I am just getting started with all this.

0
rdetiger
rdetiger

Reply 8 months ago

Thanks, i am having problems downloading the LED fader library to arduino, do you have a down load link to that? Thank you!

0
rdetiger
rdetiger

Reply 8 months ago

Ok, thanks- Sorry for all the questions, but i did go there and downloaded the whole zipfile and then addd that whole zipfile to my library- is that the correct way to do it?

0
electricityforprogress
electricityforprogress

Reply 8 months ago

No that's not the best way. You should search for how to add libraries in Arduino for instructions.

0
michelangelonasso
michelangelonasso

Question 11 months ago on Step 7

So, do I need resistors between the output pin and the LEDs? If yes, where is the appendix with the resistors' values?