Hi,
This is the first thread I've started in a while. Just wanted to share some pics of my Laser Harp controller (MkII) thus far and an earlier photo of my existing LH Frame in action.
As much as I have admired Stephen Hobley's LH design for some time now http://www.stephenhobley.com/blog/laser-harp-2009/ I don't have access to an Oscilloscope to justify making one. Also the cost to get the driver boards here are prohibitive so I decided to continue to refine what I already had essentially removing the PIC and replacing it with a Mega168.
Unlike a scanned laser and detector version of the LH, by using beam splitting optics and providing blanking (and safety to the human eye ball) the sensor setup is very straight forward essentially allowing beams to go in multiple directions with sensor being placed to match. As a musical instrument maker keeping it simple has opened up many creative possibilites.
My interest mainly lies in developing tools to input and feedback in a musical context and can safely say a Laser Harp is a wonderful way to explore some very interesting areas of creativity while extending general knowledge of the Arduino platform and digital electronics.
While what I have done is really nothing new the process for me has been. One nice little thing I found for reliability of the instrument is instead of having an often suggested separate LDR or Phototransistor measuring ambient light to offset changes that may affect the sensors, check each beam sensor instead. This is done by taking a few samples of each beam while they are all off, averaging them, putting them in an array and using this data to act as the low offset value. Then doing the same when all beams are on for the high offset value. This acts as an extra measure of anti-glitch proofing particularly if playing the instrument alongside other intelligent or unpredictable ambient lighting. This is useful if the sensors being
used are not all equal in resistance. Callibration can be called during downtime using Timer functions and/or when the player is not triggering essentially ensuring everything is OK once in a while. As the Laser is TTL controlled in my design measurement can be taken in between times (when the laser is on or off). The proviso of this though (works well for my particular sensors) is that what ever is on the input end of the circuit must be able to go HI and LOW within the
maximum blanking period of no more than 10us. Longer periods and the inputs will be ignored (the inputs only see one state) and the laser will start visibly frame dropping/flickering.
The reason I chose Analog logic over Digital on the beam sensors is so that I could then adapt each input for variable sensing eg. Ultrasonic and assign it to whatever MIDI note or control paramater I liked. In the code it is just a case of looking for a change on a particular input and the code deciding what MIDI event to execute based on a condition.
IN THE PICS - Below
Brain Board - iDuino running Mega168; MIDI Bus; Sensor Board Bus;
I/O Board - Dual 4051s Multiplex all 16 Analog Inputs; Dual 595s do all the LED, switch indicators etc.
LED Board - Acts as both beam sensor indicators and for setup; currently just retro cylon effect.
NOT SHOWN
Sensor Board - Voltage Divider Network of 10 resistors connected to 10 Phototransistors at the top of the LH frame via wire loom.
Button Board1 - 3 Momentary Buttons (UP, DOWN, SELECT)
Button Board2 - Laser Arm and LED Indicator; Mode Select Button and LED Indicator
150mW 532nM Laser with TTL mod
Tamper Switch - Drops Duty Cycle on Laser if cover opened or unit tipped over
TO DO
Make some room in my workshop so LH frame can be assembled again
Rewrite timing routine for TTL Laser Control using 16bit timer on Timer1, Test, solder header to Brain Board.
Remount Laser.
Solder Button and Sensor Boards to Brain.
Rewrite callibration routine.
Rewrite MIDI send routines.
External Footswitch (Patch Change)
Build Housing (Wood and Stainless Steel)
WISHLIST (on the drawing board)
Arduino1
Power/Laser Control; Cooling; TTL Control; Shutter Control
Multiplexers - 1 x 16 Analog In; 1 x 16 Analog Out;
Shutters x 12
DMX In/Out
I2C Slave
Arduino2
Multiplexers - 1 x 16 Analog In; 1 x 16 Analog Out; 1 x 16 Digital In; 1 x 16 Digital Out;
MIDI OUT, THRU
LCD I2C
Breath Sensor Input
Ultrasonic Input
Touch Sensitive Control Panel LEDs (buttons)
RGB Panel/Backlight
I2C master
RGB Laser Modules
Laser Power Supplies with TTL Modulation (x6 = 2 X RGB)
I hope to have my first prototype Mark III PCB done by the middle of the year. In the meantime Mark II is nearly complete. I will post more pics and code snippets as things progress.
MAIN BOARD
I/O BOARD
LED BOARD
MY HARP IN ACTION