I am making magnetic data storage with neodymium magnets and a hall effect sensor.

The sensor detects the strength of the magnet with current flow. If at anytime the south pole is near the sensor, the current flow is negative which turns into a 0 V output.

This project works by reading the magnetic poles of each magnet and giving it a value, 0 or 1, accordingly. Then the data is stored in an array of some sort and then the program will hopefully output a binary code.

So... I was thinking of a loop that reads the data from the sensor at a given time. The void would have to have some sort of delay OR... an conditional that makes the sensor read a north and a south pole or a south and a north pole in oder to store the data and then pass to the next magnet so that the sensor won't output a million values.

Any ideas? Pls help.


Sounds like you need to study the State Change example. It is all about finding State changes from a button, but the same concept could be used to make sure that you only respond to a north or south once.

If you are referring to the problem of synchronizing the bits, real life disks use a PLL that gets timing initially from a series of training pulses that precede a block of actual data. The PLL has a provision to remain locked to the data transitions after that, regardless of whether they are 1 or 0. The data encoding scheme is set up to maximize the number of 0-1 transitions to ensure that a long string of 1 or 0 will not occur, because it would allow the PLL to lose synch.

May be some guidance here: magnetic memory

How are you going to change the polarity of a neo on the fly? This thread will be too scattered if you don't explain your hardware. Can you post a diagram?

So, there are actually 3-states, right? North, South, and Nothing? If you're using digital inputs, of course that takes 2 inputs (North & South) and your hardware will have to take care of that.

You just need some hysteresis, and maybe some delay to read the rising (or falling) edge to avoid multiple reads of the same magnet.

...I don't know how real hard drives keep the bits straight, but I think there's some kind of encoding. One bit gets read a time (it's serial) , but it doesn't get decoded/validated until a byte is assembled & verified, maybe with a parity check, or something. (The internet is serial too, and there's lots of potential for errors/corruption, so it relies on error detection/correction and it pretty-much all works-out perfectly.)

First of all, thank you all (Delta_G, aarg, doup, DVD doug) for taking the time and having patience to explain a noob like me how to do stuff.

I think I'm going to use a servo motor to move the sensor and do the readings just once. For instance having a separation between the magnets of say... 5 inches. And read at 4 inches, the next reading will be at 9 in (+magnets' width) and so on, hopefully the sensor will only read the left side of the magnet (supposing the whole thing is moving from left to right) and store the data in the array.

Thank you all so much!

I still have doubts on how to program this whole thing though. I will surely will be making some trial and error. Thanks again for the help.

In effect this project, which I had some involvement with, ( I built the wind mechanism and the magnetic reading head ) is a magnetic memory system.

Grumpy_Mike that is really interesting! thanks! The projects work in a similar manner.