Hello,
I am starting to plan a project where I want to make a non-magnetic external storage device based on depletions in fine grained sand, or possibly flour. Ideally, it should have an analog or very low-tech feel to it. The total storage capacity isn't important. I am aiming for a few bytes of storage, perhaps enough to store the current time.
I believe I can solve most of it using regular components, but I am struggling to come up with a simple and preferably robust sensor to detect the depletions.
Using a camera and to take a photo and then run the image through a bunch of filters to process it would perhaps be one approach, but not only is it light dependent (and light changes during the day), but also it also feels crude. A camera would not be in the analog/low-tech spirit of the project. Arduino + image processing isn't a great combination either.
Is there a simple approach that I might have overlooked?
If you're not using visual means, including image manipulation, what's left? Mechanical? Feel out the depletions?
LIDAR/RADAR? Sound echoes? Doesn't seem like you have much in the way of low tech choices that can detect without also causing more depletions. Like to see how this plays out for you. Please continue to post as you resolve this.
Ok,
That confirms my initial analysis. Sound doesn't have good enough resolution I think. Sand and flour also absorb sound quite well.
Feeling is tough too. As you say, it will most likely cause more depletion, or possibly destroy the real ones. For that to work, I would have to switch to a firmer material, such as clay, but then erasing becomes harder.
Do you think using a photo transistor or photo diode, possibly in combination with an LED could be worth exploring?
if you know the expected (approx) position of the dip you can scan a small area around it.
Or you scan line by line and build up an "image" of where the dots are..
Could you use something like clay rather than a powder and have a device that can feel the indentations?
Could you use a collection of round (or square) pegs that can be pushed down. You used to be able to buy gadgets that could show the imprint of your hand in a series of round wires.
Robin2:
Could you use something like clay rather than a powder and have a device that can feel the indentations?
Yes and no.
Anders2009:
I would have to switch to a firmer material, such as clay, but then erasing becomes harder.
Regarding pegs, yes, I have several alternative ideas (pegs, non-connected switches, perls, ...), but I like the ephemeral quality of the sand. It would contrast with the normal expectation of longevity of data in an external storage.
I think I will have a go with the monochrome intensity sensor. It looks like it could provide a viable path.
Can you have a mechanical device (a sort of gantry) that moves the detector over the indentations.
If so, maybe all you need is an Light Dependent Resistor that can "see" the difference in the light reflected from the flat surface and from the indentations. You could use a servo mounted on the gantry to press something into the sand to create the indents. Not sure how you would erase indents - pour a little sand into them? Or could you press something like a penny onto the indent - assuming the indent is the size of a pencil.
A simple one-axis gantry could support multiple sensors so that several rows of indents can be scanned at one time. If there were 8 sensors and 8 rows of indents then each column could be a byte.
Robin2:
maybe all you need is an Light Dependent Resistor that can "see" the difference in the light reflected from the flat surface and from the indentations.
Yes! This is my thinking as well. I don't really need the fine resolution of a luminosity sensor. I just need an on/off reading.
I will thinking that instead of a light-sensitive resistor, I could perhaps use a photo transistor or even a photo diode.
I guess one would have to somehow hook it up with a capacitor and then take a reading?
My fear is that it will be too unreliable though, due to influence from background light levels (daylight level or night).
Given that, it might be better to just buy two the ready-made sensors and use one to measure background levels and compensate for that in the measurment from an identical sensor.
If you read the light level on the area where there is no indent and then where there is an indent the difference should always be apparent unless the ambient light level is altogether too low. LDRs are very cheap so maybe you could have an extra one always checking the background light level. Maybe you could rig up a pair of LDRs as a potential divider and measure the voltage at their junction.
Some experimentation is called for - that's what Arduinos do best.
If you read the light level on the area where there is no indent and then where there is an indent the difference should always be apparent
You are right! It's of course only the difference in signal that matters (indent/no indent), not the actual level, so if there is sufficient light to make a reading, it should kind of work itself out. The ambient light won't change significantly during a read pass, so that is no factor at all (or shouldn't be).
Worst case, I could just reserve two spots for calibration; one with an indent and one without. I could then take two readings with known outcomes and calibrate the levels accordingly.
I think I have all the parts needed to make a simple test. Excited now. This might actually work!
Erasing will be the next challenge, but my plan there is simple enough: Always clear the full surface and then re-write the last values again. You can imagine it as having a long surface and then I advance it for each change in value and write the full bytes each time. Once I reach the end, I just rewind and "scrape" the surface to erase all previously written indents.
In a way, it will be like a small journaled file system, as you can trace each record change until you have to reset.
Imagine an array of infrared or better still ultraviolet LEDs covered by a transparent acrylic glass at the bottom of the area that is then covered by the sand.
The indentations ideally then permit a measurably higher amount of light that still is invisible to the eye and is not affected by visible light.
I like the LEDs under glass thing. Thin layer, poke down enough so some shines through. Modulate the LEDs and look for the modulation so ambient light has little effect. I'd go IR or just visible LEDs, I don't want UV LEDs shining up at me.
I reckon you are losin the low-tech concept if something else has to remember the data during an erase/rewrite.
One solution might be to have two memory surfaces and alternate between them.
I also think that an array of detectors under the sand spoils the low-tech concept - it would be more akin to a magic show. But that's a personal preference.