I'm planning on using SS495B hall effect sensor to measure close proximity of o8x5 magnet which will be moving back and forth by about 1mm. Magnet will be 4-5mm away from sensor, but I can put it closer.
It's possible with a careful choice of the magnet or hall sensor, and possibly with an amplifier for signal conditioning. Check yourself, whether your magnet is too strong for such a small distance.
The sensor is digital. It will switch on/off only, well suited to be used for interrupt control
Example with a similar sensor. It will print out time since 'last passing'
(your sensor may have different connections !!)
/* Eksempelprogram for magnetsensor
* Hall-elementet (sensoren) A3144 er brukt
* Tilkopling: -------
* || ||
* || ||
* || ||
* -------
* | | |
* 1 2 3
* Sensor Pin 1(Ucc) -> 5V
* Sensor Pin 2(Gnd) -> 0V (Gnd)
* Sensor Pin 3(Out) -> digital pin 2 (som er interrupt 0)
* utganen er 'open-collector' og må derfor ha pullup-resistor
* se databladet :https://www.mpja.com/download/a3144eul.pdf
* (som også ligger tå its..)
*
* Tanken bak: Hver gang sensoren trigges, setter den
* et 'flagg'. Det er hovedprogrammet som hele tiden må sjekke om
* flagget er satt.
* Dersom flagget er satt vil hovedprogrammet resette det, samt notere
* tidspunktet. For å kunne beregne tiden siden 'forrige' gang, må
* også 'forrige' tidspunkt lagres..
*/
unsigned long forrige, nu, tid; // skal lagre 'millisekunder'
volatile boolean harPassert; // volatile fordi den brukes av interruptrutinen
float sekPerRunde; // 'rundetid'(som er 1/tid)
void setup()
{
pinMode(2,INPUT_PULLUP); // OBS MÅ kople inn 30k resistor
Serial.begin(115200); // kun for testingen
attachInterrupt(0, tick, FALLING); // pinne 2 interrupt
}
void loop()
{
if (harPassert) // HVIS der har vært et interrupt.:
{
forrige = nu; // husk 'forrige' tid
nu = millis(); // notér ny tid
tid = nu - forrige; // finn differansen - altså tid fir én runde
sekPerRunde = tid/1000.0; // sek/runde (1000 fordi det er millisek)
Serial.println(sekPerRunde);
harPassert=false; // tilbakestill interruptflagget
}
// her er resten av programmet
// Du ser at seksjonen over blir utført KUN når magnetsensoren
// har varslet 'passert' (flagget er satt)
}
void tick() // interruptrutine.. slike rutiner SKAL være korte!
{
harPassert = true;
// sett 'flagget' for å vise at et intr. har skjedd
}