Jackson Bely
Published © GPL3+

Temperature Sensor Fan Project

For this project we used a temperature sensor to trigger a fan to turn on via the internet when the temperature exceeds a stated value.

BeginnerShowcase (no instructions)10 hours1,086
Temperature Sensor Fan Project

Things used in this project

Hardware components

Photon
Particle Photon
×2
Jumper wires (generic)
Jumper wires (generic)
×1
USB-A to Micro-USB Cable
USB-A to Micro-USB Cable
×1
Resistor 10k ohm
Resistor 10k ohm
×1
Relay
×1
Temperature Sensor
×1

Software apps and online services

Maker service
IFTTT Maker service

Story

Read more

Schematics

Temperature Sensor Circuit Diagram

Relay Circuit Diagram

Room Temperature Over Time

Temperature Sensor Hand Enclosure

IOT Log

Pull A Part

Code

Temperature Sensor Code

C/C++
int _version = 1;

#include <math.h>
#include "application.h"


#define THERMISTORNOMINAL 3000

#define TEMPERATURENOMINAL 21.11

#define NUMSAMPLES 5

#define BCOEFFICIENT 3950

#define SERIESRESISTOR 10000


#define READ_INTERVAL 5000
bool COLDROOM= false;
bool HOTROOM = false;

unsigned long interval = 0;
int samples[NUMSAMPLES];
int THERMISTOR = A0;

char temperature_str[64]; //String to store the sensor data
char temperature_ifttt[64];


bool useFahrenheit = true;

void setup() {

    Particle.publish("device starting", "Version: " + String(_version), 60, PRIVATE);

    interval = 0;
    Particle.function("status", status);
    pinMode(THERMISTOR, INPUT);
    
    Particle.variable("tmp", temperature_str, STRING);

}

void loop() {
   
    if( (millis() - interval >= READ_INTERVAL) or (interval==0) ) {
        temp();
        interval = millis();
    }
}


int status(String args)
{
 
 Particle.publish("temp", temperature_ifttt, 60, PRIVATE);
 return 0;
}


int temp()
{
    uint8_t i;
    float average;

   
    for (i=0; i< NUMSAMPLES; i++) {
        samples[i] = analogRead(THERMISTOR);
        delay(10);
    }

    
    average = 0;
    for (i=0; i< NUMSAMPLES; i++) {
        average += samples[i];
    }
    average /= NUMSAMPLES;

    
    average = (4095 / average)  - 1;
    average = SERIESRESISTOR / average;


    float steinhart;
    steinhart = average / THERMISTORNOMINAL;     // (R/Ro)
    steinhart = log(steinhart);                  // ln(R/Ro)
    steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
    steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
    steinhart = 1.0 / steinhart;                 // Invert
    steinhart -= 273.15;                         // convert to C


  
  
   





 if (useFahrenheit) {
    steinhart = (steinhart * 9.0)/ 5.0 + 32.0;
  }
 

    char ascii[32];
    int steinhart1 = (steinhart - (int)steinhart) * 100;

    
    steinhart1 = abs(steinhart1);

    sprintf(ascii,"%0d.%d", (int)steinhart, steinhart1);
    Particle.publish("Room_Temperature", ascii, 60, PRIVATE);

    char tempInChar[32];
    sprintf(tempInChar,"%0d.%d", (int)steinhart, steinhart1);

   
    sprintf(temperature_str, "{\"t\":%s}", tempInChar);

   
    sprintf(temperature_ifttt, "%s", tempInChar);
    
    
     if( steinhart > 78 ) {
      // if condition is true then print the following
       Particle.publish("HOTROOM", "True");
   } else {
      // if condition is false then print the following
       Particle.publish("COLDROOM", "True");
   }
  
     return 0;
}

Relay Circuit Code

C/C++
int fan = D7;

void setup() {

pinMode(fan, OUTPUT);

digitalWrite(fan, LOW);

Particle.subscribe("HOTROOM", FanON, "57003d001051353338363333");
void FanON(const char *event, const char *data)

  digitalWrite(fan, HIGH);
  
  
  Particle.subscribe("COLDROOM", FanOFF, "57003d001051353338363333");
void FanOFF(const char *event, const char *data)

  digitalWrite(fan, LOW);
   
  

Credits

Jackson Bely

Jackson Bely

1 project • 0 followers
UNCC MEGR
Thanks to Gustavo Gonnet.

Comments