Things used in this project

Hardware components:
Photon new
Particle Photon
×1
SparkFun Magnetic Door Switch Set
×1
12002 04
Breadboard (generic)
×1
11026 02
Jumper wires (generic)
×1
Software apps and online services:
Fritzing
Hand tools and fabrication machines:
Lasercutter
Laser cutter (generic)

Custom parts and enclosures

Box Schematics
Blueprints of our box in which we put our sensor
group410_veJPptJ4TV.ai
Blueprint
Group 410 blueprints ro5fzj98vk

Schematics

Fritzing Diagram
Fritzing qgl4ieb8a1

Code

Door Switch SensorArduino
// 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

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Lightweight Sliding Door Automator
Intermediate
  • 1,535
  • 7

Work in progress

Automate the opening and closing of a lightweight sliding door (e.g. a screen door), including remote controls on your phone.

Christmas Gift Box
Intermediate
  • 3,633
  • 595

Full instructions

Christmas Gift Box plays music and sends an email when it is opened.

Carbon Fiber Vacuum Chamber
Intermediate
  • 2,905
  • 94

Full instructions

Our project is a carbon fiber vacuum chamber that is monitored by multiple particle photons and various sensors.

ConnectTheDots with Particle Azure IoT Hub Integration
Intermediate
  • 841
  • 8

Protip

This project will allow you to connect your Particle device into an Azure IoT Hub for viewing data in real-time through an ASP.NET web app!

What should I wear outside?
Intermediate
  • 5,044
  • 67

Full instructions

A whimsical weather clock powered by Particle and forecast.io

Garage Door Opener with Blynk
Intermediate
  • 367
  • 2

Open, close and monitor a garage door opener with a smart phone using a Particle Photon and the Blynk application.

Add projectSign up / Login