0
\$\begingroup\$

I'd like to make a 4x4 pressure ( force resistance) sensor grid to use with an arduino. But 16 sensors sure need a lot of pins. During my research on this topic I stumbled upon a couple of suggestions. An example I've seen at least 100 times is the one which generates a 4x4 LED-grid. But in this example, there is no sensordata to be read.

from the factorys manual

So, backed up by the factories manual on how to hook the sensor up and on how the 4x4 LED-grid tutorial suggested I created my own idea on how to wire the whole thing with one arduino.

My thoughts on that: Keep D1 to D4 defined as OUTPUT HIGH. Set D5 to D8 alternatly as ground. Gather analog information through A2 to A5 of the current selected row. Save data and look at next row.

My question now, before ordering all the components: Does that sound realistic from an electrical point of view?

! EDIT:

So the first answer got me thinking, and here is my new circuit plan:

updated circuit

Didn't I break the paralellity of the resistive sensors because I'm not measuring the resistance at the pins 5-8, instead I measure values at the analog pins 2 to 5. So now, if D5 is set to gound, the upper row of the sensors is powered and sensing data, which is gathered by analog pins 2 to 5. And then grounded in digital pin 5.

\$\endgroup\$
2
  • \$\begingroup\$ Can you provide a link to the pressure sensor? \$\endgroup\$ Commented Mar 28, 2017 at 16:43
  • \$\begingroup\$ Sure thing, there it is: coolcomponents.co.uk/en/… \$\endgroup\$ Commented Mar 28, 2017 at 22:04

2 Answers 2

0
\$\begingroup\$

Your schematic shows resistive sensors in parallel, so it will not work. You won't be able to distinguish the individual resistors when they are in parallel. This means some switching is needed.

http://sensl.com/downloads/ds/TN-Readout_Methods_for_Arrays_of_SiPM.pdf http://www.sensl.com/downloads/irp/2013_Goertzen_Design_and_Performance_of_a_Resistor_Multiplexing_Readout_Circuit_for_a_SiPM_Detector.pdf

You will need switches... lots of switches...

Personally, I would try to keep things simple, and use two of these 1x16 analog muxes:

http://assets.nexperia.com/documents/data-sheet/74HC_HCT4067.pdf

The first one would take a current source as an input, and send it to one of the 16 resistors. The second one would take the voltage on the resistor which is being read, and forward it to the ADC.

This allows to ignore the switches' internal resistance. And since the same current source is used for all measurements, you can invest a little more into it to make it more accurate.

\$\endgroup\$
1
  • \$\begingroup\$ Hello, I edited my question. Seems to me, that in the current state of the scematic, it's not paralell. Or is it still? \$\endgroup\$ Commented Mar 28, 2017 at 16:39
0
\$\begingroup\$

You really need to be able to draw a schematic, since your last edit/alteration it's even harder to read.

The basic idea you have is a reasonable one, but won't work as you have shown. I'll leave it an exercise for you to work out why it does can't function because of the phantom paths.

The problem you are trying to address is very much like a keyboard switch array scanning task. For a keyboard you have to be able to sense multiple simultaneous switch closures (N-Key rollover) which creates all sorts of difficulties. Usually you see solutions that involve diodes to isolate between lines (this is the same as your LED 4*4 where the LEDS themselves are the diodes), but diodes here would not be suitable.

In trying to scan 1 of 16 resistor values (or voltage dividers) as you have, the problem is much simplified by the fact that there is only ever one target pressure sensor to measure and you can only read one Analog pin at a time.

Let's draw an easier to interpret schematic in the same vein (a voltage divider solution) that you started with, and hopefully this should work for you:

schematic

simulate this circuit – Schematic created using CircuitLab

The NPIC6C595 has 8 open Drain output pins, so can be used to selectively Gnd only the one pressure sensor you want to read.

You would simply shift 0b1000000000000000 into the two shift registers using Data and SRClock, then parallel load into the output bits using ParClock. You then read your value, shift 0b0 into the register to move the '1' to the next bit, ParClock and read again ...etc Very simple to program. You don't need to use OE* and MR* at all, since you have to load the SR anyway.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.