Jeremy SamsonTyler SewardRohan Kelkar
Published

MEGR 3171 - Group 23 Apartment Monitoring System

Mercury thermometers are lame, use a Photon Particle 2 instead.

IntermediateShowcase (no instructions)6 hours169
MEGR 3171 - Group 23 Apartment Monitoring System

Things used in this project

Hardware components

Photon 2
Particle Photon 2
×3
ELEGOO Upgraded 37 in 1 Sensor Modules Kit V2.0
ELEGOO Upgraded 37 in 1 Sensor Modules Kit V2.0
x1 photo resistor sensor, x1 digital temperature sensor, x1 flame sensor, and x1 LCD 1602 module
×1
ELEGOO 3pcs MB-102 Breadboard 830 Point Solderless Prototype PCB Board Kit
ELEGOO 3pcs MB-102 Breadboard 830 Point Solderless Prototype PCB Board Kit
x4 breadboards
×2
SparkFun Beginner Parts Kit
SparkFun Beginner Parts Kit
x1 10k Trimpot
×1

Software apps and online services

Particle Build Web IDE
Particle Build Web IDE

Story

Read more

Schematics

Photo Resistor Sensor Circuit Diagram

LCD Circuit Diagram

Flame and Digital Temperature Sensors Circuit Diagram

Temperature vs. Time Data from Digital Temp Sensor

Code

Flame Sensor & Digital Temperature Code

C/C++
#include <math.h>
#define SERIESRESISTOR 2500
#define NOMINAL_RESISTANCE 10000
#define NOMINAL_TEMPERATURE 25
#define BCOEFFICIENT 3950

int flamePin = A0;
int flameLED = D3;

int tempPin = A1;
int tempLED = D5;
int flame;
void setup()
{
    Serial.begin(9600);

    pinMode(flamePin, INPUT);
    pinMode(flameLED, OUTPUT);

    pinMode(tempPin, INPUT);
    pinMode(tempLED, OUTPUT);

    Particle.subscribe("Group23_IOT_Project", combinedHandler);
}

void loop()
{
    // Flame Sensor
    int flameValue = digitalRead(flamePin);

    if (flameValue == HIGH)
    {
        digitalWrite(flameLED, HIGH);
        flame=1;
    }
    else
    {
        digitalWrite(flameLED, LOW);
        flame=0;
    }
    flame = flameValue;
    Particle.publish("Flame_Status", String(flame), PUBLIC);

    // Temperature Sensor
    float tempADC = analogRead(tempPin);
    float tempResistance = (1023 / tempADC) - 1;
    tempResistance = SERIESRESISTOR / tempResistance;

    float steinhart = tempResistance / NOMINAL_RESISTANCE;
    steinhart = log(steinhart);
    steinhart = (steinhart / BCOEFFICIENT);
    steinhart += (1.0 / (NOMINAL_TEMPERATURE + 273.15));
    steinhart = 1.0 / steinhart;
    steinhart -= 273.15;

    Serial.print("Temperature: ");
    Serial.println(steinhart);

    Particle.publish("Temperature", String(steinhart), PRIVATE);

    delay(5000);
}

void combinedHandler(const char *event, const char *data)
{
    flame = atoi(data);

}

LCD Code

C/C++
#include <Particle.h> // Include this line
#include <Adafruit_DHT.h>
#include <LiquidCrystal.h>
#define DHTPIN D6
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(5, 4, 3, 2, 1, 0);

int flame;
int resistance;
int steinhart;

void setup() {
    lcd.begin(16, 2);
    
}

void loop() {
    delay(5000);
    Particle.publish("Group 23 IOT project", PUBLIC);
    
    lcd.setCursor(13,1);
    Particle.subscribe("Temperature", steinhartHandler);
    
    delay(2000);
    lcd.clear();

    Particle.subscribe("Flame_Status", flameHandler);
    
    lcd.clear();

    if (flame == 1)
    {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("House is not on");
        lcd.setCursor(0,1);
        lcd.print("fire.");
    } else if (flame == 0) 
    {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("HOUSE ON FIRE!");
        lcd.setCursor(0,1);
        lcd.print("RUN!");
    }
    delay(3000);
    lcd.clear();
    
    Particle.subscribe("resistance_data", resistanceHandler);
    
    if (resistance == 0){
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Lights are off");
    } else if (resistance == 1){
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Lights are on");
    }
    delay(3000);
}
void steinhartHandler(const char *event, const char *data){
    steinhart = atoi(data);
    lcd.setCursor(14, 1);
    lcd.print(data);
    lcd.setCursor(16, 1);
    lcd.print("C     ");

    digitalWrite(D7, HIGH);
    delay(2000);
    digitalWrite(D7, LOW);
    delay(500);
}
void flameHandler(const char *event, const char *data){
    flame = atoi(data);
}
void resistanceHandler(const char *event, const char *data){
    resistance = atoi(data);
}

Photoresistor Code

C/C++
const int photoResistorPin = A1;

int resistance;

void setup(){
  Serial.begin(9600);
  Particle.subscribe("Group 23 IOT project", standard);
}

void loop(){
  int photoResistorValue = analogRead(photoResistorPin);

  float resistance = (10000.0 * (4095.0 - photoResistorValue)) / photoResistorValue;

  Serial.print("Resistance: ");
  Serial.print(resistance);
  Serial.println(" ohms");
  if(resistance>700){
        resistance=1;
    }
    else{
        resistance=0;
    }
  Particle.publish("resistance_data", String(resistance), PUBLIC);

  delay(5000);  
}
void standard(const char *event, const char *data){
    digitalWrite(A0,HIGH);
    delay(2000);
    digitalWrite(A0,LOW);
    delay(500);
}
void resistanceHandler(const char *event, const char *data){
    resistance = atoi(data);
}

Credits

Jeremy Samson
1 project • 2 followers
sup
Tyler Seward
1 project • 2 followers
Mechanical Engineering with a concentration in energy student at UNC Charlotte.
Rohan Kelkar
1 project • 1 follower

Comments