Szymon WozniakZach RogersJohn Tran
Published

Door Sensor

Measuring and predicting student attendance through the frequency of an opening door.

IntermediateFull instructions provided1,108
Door Sensor

Things used in this project

Hardware components

Photon
Particle Photon
×1
SparkFun Magnetic Door Switch Set
×1
Breadboard (generic)
Breadboard (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×1

Software apps and online services

Fritzing

Hand tools and fabrication machines

Laser cutter (generic)
Laser cutter (generic)

Story

Read more

Custom parts and enclosures

Box Schematics

Blueprints of our box in which we put our sensor

Blueprint

Schematics

Fritzing Diagram

Code

Door Switch Sensor

Arduino
// This #include statement was automatically added by the Particle IDE.
#include <SparkFunPhant.h>

double value1 = 0; 
double value2 = 0;

const char server[] = "data.sparkfun.com"; // Phant destination server
const char publicKey[] = "q5YZ7aN78LtYN3vZqyvr"; // Phant public key 
const char privateKey[] = "BV41ZGJZeoHJEnrRyor8"; // Phant private key
Phant phant(server, publicKey, privateKey); // Create a Phant object

const int POST_RATE = 3000; // Time between posts, in ms.
unsigned long lastPost = 0; // global variable to keep track of last post time

int magnetValState;
int magnetPin = D3; // Magnet part is connected to D3
int led1 = D1;

void setup()
{
    pinMode(magnetPin, INPUT_PULLUP);   // Initialize D3 pin as input with an internal pull-up resistor
    pinMode(led1, OUTPUT); //Initiates LED light
    Serial.begin(9600);
}

void loop()
{
    value1++;
    value2++;

    magnetValState = digitalRead(magnetPin);
    if(magnetValState == HIGH)      // Was motion detected
        {
            digitalWrite(led1, HIGH);
            postToPhant();
        }
    else
        {
            digitalWrite(led1, LOW);
            postToPhant();
        }
}

int postToPhant()
{    
    // Use phant.add(<field>, <value>) to add data to each field.
    // Phant requires you to update each and every field before posting,
    // make sure all fields defined in the stream are added here.
    if(magnetValState == HIGH)
        phant.add("door", 1); //0 - closed; 1 - open
    else
        phant.add("door", 0);
        	
    TCPClient client;
    char response[512];
    int i = 0;
    int retVal = 0;
    
    if (client.connect(server, 80)) // Connect to the server
    {
		// Post message to indicate connect success
        Serial.println("Posting!"); 
		
		// phant.post() will return a string formatted as an HTTP POST.
		// It'll include all of the field/data values we added before.
		// Use client.print() to send that string to the server.
        client.print(phant.post());
        delay(1000);
		// Now we'll do some simple checking to see what (if any) response
		// the server gives us.
        while (client.available())
        {
            char c = client.read();
            Serial.print(c);	// Print the response for debugging help.
            if (i < 512)
                response[i++] = c; // Add character to response string
        }
		// Search the response string for "200 OK", if that's found the post
		// succeeded.
        if (strstr(response, "200 OK"))
        {
            Serial.println("Post success!");
            retVal = 1;
        }
        else if (strstr(response, "400 Bad Request"))
        {	// "400 Bad Request" means the Phant POST was formatted incorrectly.
			// This most commonly ocurrs because a field is either missing,
			// duplicated, or misspelled.
            Serial.println("Bad request");
            retVal = -1;
        }
        else
        {
			// Otherwise we got a response we weren't looking for.
            retVal = -2;
        }
    }
    else
    {	// If the connection failed, print a message:
        Serial.println("connection failed");
        retVal = -3;
    }
    client.stop();	// Close the connection to server.
    return retVal;	// Return error (or success) code.
}

Credits

Szymon Wozniak

Szymon Wozniak

1 project • 1 follower
Zach Rogers

Zach Rogers

1 project • 1 follower
John Tran

John Tran

1 project • 0 followers

Comments