Window Magnet Contact - (use with Arduino)

by kramerica on Tue Dec 21, 2010 7:46 pm

I have a window 'contact' used for Home security for alarming doors and windows when they are opened.
Contacts are closed when magnet and sensor are together.

I'm not exactly sure how to hook it up to my Arduino.
I want to know when the magnet is in front of the sensor - which would mean when the Sesor is "HIGH" right?
I have one side of the sensor hooked to 5volt and the other side to analog pin 0.



declare the pin as analog 0;
int magsensorPin = 0; // magnetic Sensor input pin
In the Progam:
int magsensorValue = analogRead(magsensorPin);
Serial.print("magsen:");
Serial.println(magsensorValue);
Serial.println("--------------");


When I hold the magnet in front of the sensor it reads 1020, of 1023 on the serial output.
When the magnet is not there it's all over the board, but usually less than 1000.

I thought I could just read it as 'HIGH' if the value was >1000.... but it doesn't appear to be reliable.
if (magsensorValue >1000)
{
digitalWrite(ledPin, LOW);
magcounter += 1;
Serial.print("Magnet Sensed!");
Serial.println(magcounter);
}
else
{
digitalWrite(ledPin, HIGH);
NOmagcounter += 1;
Serial.print("No Magnet: ");
Serial.println(magcounter);
}


To be perfectly honest I don't know 'EXACTLY' what this is? I assumed it was a hall-effect sensor, I've just been bumbling around to see how to use it correctly?
Attachments
magnet contact.jpg
Magnet window contact
magnet contact.jpg (31.04 KiB) Viewed 7339 times
kramerica
 
Posts: 28
Joined: Thu Oct 08, 2009 5:43 pm

Re: Window Magnet Contact - (use with Arduino)

by adafruit_support_bill on Tue Dec 21, 2010 8:32 pm

It could be a hall-effect sensor, but it is probably a reed-relay. In any case, it sounds like you need a pulldown resistor on the digital input. See lesson 5 in the Adafruit Arduino tutorials. http://www.ladyada.net/learn/arduino/lesson5.html
User avatar
adafruit_support_bill
 
Posts: 25556
Joined: Sat Feb 07, 2009 9:11 am

Re: Window Magnet Contact - (use with Arduino)

by franklin97355 on Tue Dec 21, 2010 11:34 pm

You are trying to get a digital response (HIGH) from an analog read. Try a digital pin and digital read. Also as mentioned a 10k resistor to ground will help.
User avatar
franklin97355
 
Posts: 2675
Joined: Mon Apr 21, 2008 1:33 pm

Re: Window Magnet Contact - (use with Arduino)

by kramerica on Wed Dec 22, 2010 11:10 am

I put the resistor on - and tried the digital pin 7.

One end of the sensor on 5v and the other with a 10k resistor on Digital pin 7.

NO MAGNETS are near the sensor - it should not be reading anything...


Code debug:
Mag sensor value:0 No Magnet keep waiting.... Counter: 37
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 37
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 37
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:38
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 38
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:39
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:40
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 40
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 40
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 40
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:41
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 41
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:42
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:43
__________________________________________________________
Mag sensor value:0 No Magnet keep waiting.... Counter: 43
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:44
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:45
__________________________________________________________
Mag sensor value:1 --------------------Magnet Sensed! Counter:46
__________________________________________________________

Code: Select all
/*
Goal:
Take a 2 wire window contact alarm - with a magnet, and sense when the magnet is present.


The circuit:
 
A single window Contact alarm with 2 wires (both wires appear to be the same? - no stripes)

1 wire is connected to 5volt pin on the arduino
the other wire is connected to the ANALOG 0 pin with a 10K resister=(brown/black/orange/gold)


analogRead() returns a number between 0 and 1023 that is proportional to the amount of voltage being applied to the pin.
Note: When the magnet is in front of the sensor and I connect my voltmeter to the ground and Analog 0 I get 5 Volts.



 */

int magsensorPin = 7;    // Magnetic Sensor input pin 
int ledgreenPin = 13;    // select the pin for the Green LED
int magsensorValue = 0;  // variable to store the value coming from the sensor
int magcounter =0;       // Number of times a magnet was sensed

void setup()
{
  Serial.begin(9600);
  pinMode(ledgreenPin, OUTPUT);     // declare LED as output GREEN
}

void loop()
{
  ////////////////////////////////////////////
  // READ the SENSOR                         /
  ////////////////////////////////////////////
 Serial.println("__________________________________________________________");
  magsensorValue = digitalRead(magsensorPin);
  Serial.print(" Mag sensor value:");
  Serial.print(magsensorValue);
  delay(1000); 
 
  ////////////////////////////////////////////
  // INCREMENT the magsensor counter.        /
  ////////////////////////////////////////////

  if (magsensorValue==HIGH)
     {
     digitalWrite(ledgreenPin, LOW); 
     magcounter += 1; 
     Serial.print(" --------------------Magnet Sensed!  Counter:");
     Serial.println(magcounter);
     }
     else
     {
      digitalWrite(ledgreenPin, HIGH);
      Serial.print(" No Magnet keep waiting.... Counter: ");
      Serial.println(magcounter);
     }
       
       
         
}




I changed the pin from Digital 7 back to Analog 0 -- and also edited the code to accomodate an analog read.
The sensor is reading something.. it's all over the place?


__________________________________________________________
Mag sensor value:934 No Magnet keep waiting.... Counter: 15
__________________________________________________________
Mag sensor value:138 No Magnet keep waiting.... Counter: 15
__________________________________________________________
Mag sensor value:1023 --------------------Magnet Sensed! Counter:16
__________________________________________________________
Mag sensor value:993 No Magnet keep waiting.... Counter: 16
__________________________________________________________
Mag sensor value:176 No Magnet keep waiting.... Counter: 16
__________________________________________________________
Mag sensor value:1023 --------------------Magnet Sensed! Counter:17
__________________________________________________________
Mag sensor value:978 No Magnet keep waiting.... Counter: 17
__________________________________________________________
Mag sensor value:162 No Magnet keep waiting.... Counter: 17
__________________________________________________________
Mag sensor value:1023 --------------------Magnet Sensed! Counter:18
__________________________________________________________
Mag sensor value:971 No Magnet keep waiting.... Counter: 18
__________________________________________________________
Mag sensor value:143 No Magnet keep waiting.... Counter: 18
__________________________________________________________
Mag sensor value:1023 --------------------Magnet Sensed! Counter:19
__________________________________________________________
Mag sensor value:994 No Magnet keep waiting.... Counter: 19
__________________________________________________________
Mag sensor value:206 No Magnet keep waiting.... Counter: 19
__________________________________________________________
Mag sensor value:1023 --------------------Magnet Sensed! Counter:20
__________________________________________________________
Mag sensor value:1023 --------------------Magnet Sensed! Counter:21
__________________________________________________________

Code: Select all
int magsensorPin = 0;    // Magnetic Sensor input pin 
int ledgreenPin = 13;    // select the pin for the Green LED
int magsensorValue = 0;  // variable to store the value coming from the sensor
int magcounter =0;       // Number of times a magnet was sensed

void setup()
{
  Serial.begin(9600);
  pinMode(ledgreenPin, OUTPUT);     // declare LED as output GREEN
}

void loop()
{
  ////////////////////////////////////////////
  // READ the SENSOR                         /
  ////////////////////////////////////////////
 Serial.println("__________________________________________________________");
  magsensorValue = analogRead(magsensorPin);
  Serial.print(" Mag sensor value:");
  Serial.print(magsensorValue);
  delay(1000); 
 
  ////////////////////////////////////////////
  // INCREMENT the magsensor counter.        /
  ////////////////////////////////////////////

  if (magsensorValue>1000)
     {
     digitalWrite(ledgreenPin, LOW); 
     magcounter += 1; 
     Serial.print(" --------------------Magnet Sensed!  Counter:");
     Serial.println(magcounter);
     }
     else
     {
      digitalWrite(ledgreenPin, HIGH);
      Serial.print(" No Magnet keep waiting.... Counter: ");
      Serial.println(magcounter);
     }
kramerica
 
Posts: 28
Joined: Thu Oct 08, 2009 5:43 pm

Re: Window Magnet Contact - (use with Arduino)

by adafruit_support_bill on Wed Dec 22, 2010 11:56 am

One end of the sensor on 5v and the other with a 10k resistor on Digital pin 7.

How do you have the resistor connected? Did you follow the tutorial? It should be between pin 7 and ground.
User avatar
adafruit_support_bill
 
Posts: 25556
Joined: Sat Feb 07, 2009 9:11 am

Re: Window Magnet Contact - (use with Arduino)

by kramerica on Wed Dec 22, 2010 5:25 pm

I was confused by only having 2 wires - after reviewing the tutorial, I believe that I have it hooked up correctly.

I am now seeing results! -- Only when the magnet is there . Thank you VERY much for your post, I really appreciate it.
Attachments
Windows Contact REED switch_bb.jpg
Windows Contact REED switch_bb.jpg (34.46 KiB) Viewed 7292 times
kramerica
 
Posts: 28
Joined: Thu Oct 08, 2009 5:43 pm