Is there a way to read many(more than 30) photodiodes?

Hi. I'm new to the Arduino and hardwares. :|

I'm trying to build an array of laser-diodes and its photodiodes pairs so that I can use it as a photo-interrupter-array. When any interruption happens on any pair, I should be able to find out which one was interrupted.

I tried it with one pair and it worked fine, but the problem is the Arduino chip has limited number of analog-pins.

Is there any way to connect many such as 30 or even more photodiodes to be read via Arduino chip? Or maybe there's way to extend the number of readable analog pins?

Thank you for your response.

What's going to happen is that.. A quite fast moving water-drop will pass the line of array of photointerrupting detectors. One water-drop will be dropped at once, not multiple droppings will happen at the same time.

But, it's still quite fast dropping water-drop. Thus, if it's possible to collect all the data at the same time, it's the best. If it's not, then I guess I have to try to see if it's fast enough not to miss a water-dropping even when I installed more than 30 detectors. (I'm not 100% sure exactly how many detectors will be used. But, 30 is sort of minimum number.)

I guess the digital sensing is also ok. I just thought analog is better since it can sense the variance of interruption. But the most important thing is that it senses the passing water-drop. As long as it can detect that, digital sensor is fine too.

By the way, I'm using the Arduino Uno.

I'm not sure Arduino is up to that task. Do you even have the mechanics and optics worked out to reliably sense a falling drop? -> I already wrote that 'I tried it with one pair and it worked fine'. I meant I already tried to detect the falling water-drop with a pair of laser-beam and a photodiode. And it worked fine. It was just a broken cheap laser-pointer laser and a common photodiode.

Perhaps it would help if you explained WHY you are trying to do this? The principles of gravitational attraction and gravity, etc. have been pretty well understood for 100s of years. What is the purpose of this project? -> It has nothing to do with the gravity. I'm just testing it so that I'm just dropping a water-drop from a few 10 cm above the line of the detector. Also, discussing the purpose of the project is not really helpful for the crucial question.

Since. the crucial question is simply that if it's possible to connect a bunch of photodiodes and read information from it at the same time via Arduino.

Thank you.

I do not think that this is beyond the capabilities of the Arduino if he uses digital detectors. However you are right. Unless the desired time resolution is known it is unclear if this is a simple or a hard task.

[quote author=Udo Klein link=topic=69799.msg517821#msg517821 date=1313770935] I do not think that this is beyond the capabilities of the Arduino if he uses digital detectors. However you are right. Unless the desired time resolution is known it is unclear if this is a simple or a hard task. [/quote]

I am pretty sure it isn't; back when I went to High Tech Institute (I know, cheesy name) here in Phoenix, in 1991-92 - we built a pattern recognizer system using 64 phototransistors and a multiplexing system not unlike the LED grid projects you see people doing with the Arduino - just rather than driving the columns/rows of LEDs, we were switching 8 columns at a time per row to read the values via the parallel port of an Amiga 1000 (on which we had to write a 68000-based assembler code to read the port, and output whether the "mask" character we placed on the array matched a character in memory - crude form of OCR).

That Amiga was only running at 7 MHz. We did have more memory at our disposal, though. Even so, I don't think this project is out of the realm of possibility of working using an Arduino; maybe this weekend I can dig out my old papers and schematic of that system and post it here, if it would help.

On a different note, one guy for his "final project", with the help of an instructor - built and set up (breadboard style - rat's nest city!) a laser rangefinder using a linear array of LEDs as photodetector elements. The laser was an HeNe tube-based laser the school had (this was before cheap LED laser diode modules - such modules were available, but well outside our's or the school's price range); the rest of the system would detect the bounce of the laser off a mirror, with it's distance changing the angle the reflected beam back to the LEDs. Based on which LED was "lit" by the laser, a complex multiplexing and counter circuit would determine how to light up a pair of 7-segment LED arrays to form an output number, which was the "distance". No computer, microcontroller, or anything like that involved at all - just a bunch of breadboards, wires, and TTL logic. The guy got an "A" of course.


The issue is the resolution though. If the drops are falling for maybe 1m, they will have a velocity of ~4.5m/s. Thus a time resolution of 1ms is equivalent to a spatial resolution of 4.5mm. However a time resolution of 10us would be equivalent to a spatial resolution of 45um.

If the speeds are lower then the spatial resolution gets even more weight in the error equation. Most probably such precise alignment is completely out of reach. Thus a time resolution of 0.1ms is most probably sufficient --> this is easily possible with the Arduino.

Well the problem has the nice property that you know which detector to look at at any one time… First the uppermost detector, then when that has registered a drop you switch to the next one, etc etc.

So you need a way to multiplex all those detectors to one or more analog pins. CMOS 16-to-1 analog multiplexor chips can be stacked into larger arrays, two levels gives 256 channels… 2 levels of 8-to-1 multiplexor gives 64 channels…

The Arduino A-to-D conversion time is about 110us, which at 4.5m/s is about 0.5mm. You can speed it up a bit at the expense of some accuracy BTW.

Hmm, he did never state that they will be vertically aligned. Even if they would be it still could happen that not all of them would be triggered.