# A many photodiode system...

Hi all,

I’m wanting to assemble a grid of around 100-200 photodiodes BPW-34 and take measurements from a single Arduino. Could you please recommend how I can achieve this given the limit number of pins?

The system shall go through the entire N photodiodes and take measurements from each one (a complete Measurement Cycle).

Some constraints:

• Measurement Cycle duration <1ms
• Measurement Cycle Period, no more frequent than 1 Measurement Cycle per 5ms.
• An electronics noob, but a Physics grad. Ie simpler is better

Context
I’m building a system to measure the position of a laser dot in time.

If the data is ON or OFF you can use parallel to serial (input) shift registers to read many 8-bit registers at SPI speed whatever state they were in when latched. 256 pins would read as 32 chars. At default SPI speed of 1 byte every 2 microseconds, is that fast enough?

https://www.arduino.cc/en/Reference/SPI

This project would be quite difficult with an Arduino, given the single ADC, which by default takes 110 microseconds to make a single voltage reading.

The Arduino-compatible Pixy camera can follow a laser dot on a wall and report its coordinates. Or you could use linear CCD arrays, which have a serial readout.

The Arduino-compatible Pixy camera can follow a laser dot on a wall and report its coordinates.

But isn't capable of the required 200Hz capture requirement.

ADC is needed to read a laser dot on photodiode to get position? Why use analog?

200Hz is one full set read and evaluate every 5ms, very possible with binary data giving position.

Hi,
If its to detect if a laser is there or not, just arrange the photodiode bias to be either logic 1 or 0.

But we need to know..

Can you tell us your electronics, programming, Arduino, hardware experience?

Have you thought through the mechanics of the array, the photodiode will/may need associated amplifying circuitry?
Have you made a small array to see what response you get from the laser?

What is the application of your laser detector array?

Thanks.. Tom..

But isn't capable of the required 200Hz capture requirement

You misread the spec. That would be the maximum frequency, not the required frequency.

The general approach seems a bit silly, considering that there are many alternatives.

Do you want analog readings or just on/off readings for your array?

A high end arduino with external hardware could accomplish the second, but not the first.

Allan

Do laser dots have grayscale? Not normally. Normally they are ON or PWM or laser modem or bit-bang. OP wants to follow motion.

"A photodiode is ideal for very fast signals but gives a much lower output signal. The phototransistor is used in the kit as it provides an amplified signal output and the signals studied tend to be relatively slow."

https://www.quora.com/What-is-difference-between-phototransistor-and-photodiode

I dunno their idea of slow. My idea of slow is an LDR. Response time is 10ms or so.
Phototransistors I get are faster than Arduino 16MHz... pretty sure.

What else is slow but neat is sensing light with leds. With colored-bulb leds you can sense color bandwidths. Sensing liquids by bandwidth absorption has been done with leds as the sensors.

I think that you could do an array using 2 output registers to control which column to read (2 pins for I2C) and if you have 16 pins open to read the rows column by column then you can get away with only needing 2 of the cheap shift registers.

Guys thanks for your responses.

More context on project:
The purpose of my laser-sensor system will be to measure the spatial orientation of some industrial equipment (essentially a Cube shaped object) during it's operation.

The Cube moves slightly in it's operations, I want to analyse what it's exactly doing with respect to time. The Cube is CNC, so I can output a "list of operations vs time" and compare to my "spatial orientation vs time" and do some fabulous analysis.

So physically I'll have a laser strapped to the CNC cube and pointed at the BPW34 array. For the moment, a single laser-array system is fine to analyse what's happening in one axis.

So I need to measure what's happening in the array quickly to take a "snapshot" of the laser beam position. Low latency is important...

More context on me:
I'm a Physics graduate now software engineer. I understand electromagnetism, but haven't got any experience with electronic systems. I've played with Arduino eg NRF24, LCD screens - "plug and play" stuff TBH. My project is maybe a bit ambitious given my lack of experience but this is something I'm really excited about and want to build.

On Analog vs digital responses:
So the resolution of my array is about 5mm in one axis (the BPW34 is approx 5mm square) - not fantastic so analog will help me here... If the laser dot shines half way on one of the BPW34 cells, I can infer this by looking at the analog value (50% of the expected value implies 50% coverage of the laser - ignorant assertion to prove by experiment).

Response to one guys comments:
I'll put a small array together, shine the laser on it, and report back on the analog response with position.

Any help is appreciated Happy to consider different hardware or more hardware, but don't want to spend more than \$100.

So the resolution of my array is about 5mm in one axis (the BPW34 is approx 5mm square) - not fantastic so analog will help me here... If the laser dot shines half way on one of the BPW34 cells, I can infer this by looking at the analog value (50% of the expected value implies 50% coverage of the laser - ignorant assertion to prove by experiment).

That means analog conversions, which takes time. How fast is the expected movement? What is the overall area you expect to measure?

Is there not some mechanical way you can detect your cube movement?

Allan

Perhaps a TOF sensor can give you better resolution, and a whole lot easier to set up. Just 3 sensors gives you X,Y, and Z.

Or just point the laser on a white screen and film it using a camera.
You can fix the perspective and lens distortion in software, track the laser dot, and export its coordinates. IIRC, Blender can do such things.

Pieter

Thanks again - some responses…

tinman13kup:
That means analog conversions, which takes time. How fast is the expected movement? What is the overall area you expect to measure?

As per the OP, this gives you an idea of measurement resolution:

Measurement Cycle duration <1ms
Measurement Cycle Period, no more frequent than 1 Measurement Cycle per 5ms.

allanhurst:
Is there not some mechanical way you can detect your cube movement?

Allan

Thanks, but unfortunately no.

tinman13kup:
Perhaps a TOF sensor can give you better resolution, and a whole lot easier to set up. Just 3 sensors gives you X,Y, and Z.

Thanks, but unfortunately I can’t. I’m not wanting the hi-res spatial separation, but orientation. Lasers

Pieter, thanks. Not a direction I want to go down unfortunately.

A measurable array of photodiodes would get me very far on this project…

BeefSteakTom:
On Analog vs digital responses:
So the resolution of my array is about 5mm in one axis (the BPW34 is approx 5mm square) - not fantastic so analog will help me here... If the laser dot shines half way on one of the BPW34 cells, I can infer this by looking at the analog value (50% of the expected value implies 50% coverage of the laser - ignorant assertion to prove by experiment)

.

You can take a digital reading of a port in a small fraction of a microsecond or you can go with 105us analog (there is an 8-bit faster ADC read) with 1 ADC per AVR chip and when you switch ADC pins there is a settle time before you get a good read, ATMEL suggests you read twice and ignore the first one.

Smarter to widen the dot so it might illuminate more than 1 sensor at a time and get more than so-much-% on a single dot that tells you nothing else. With digital you get more precise time data on your positions plus you can read a whole array as it latches in a single moment.

Have you thought about using an accelerometer on the cube?