Joshua Garcia
Published

Smart room controller

Imagine walking into a classroom where the lights adjust automatically, outlets power on only when needed.

BeginnerShowcase (no instructions)52
Smart room controller

Things used in this project

Hardware components

Photon
Particle Photon
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
sparkfun Rotary Potentiometer
×1
SparkFun ElectronicsBOB-11722
×1

Hand tools and fabrication machines

Laser cutter (generic)
Laser cutter (generic)

Story

Read more

Schematics

Smart room controller Schematic

Code

Code

C/C++
#include "Particle.h"
#include "Adafruit_BME280.h"
#include "Adafruit_SSD1306.h"
#include "Colors.h"
#include "Encoder.h"
#include "IoTClassroom_CNM.h"


// Let Device OS manage the connection to the Particle Cloud
SYSTEM_MODE(MANUAL);

const int trigPin = D16;  
const int echoPin = D9;
float duration, distance;

Adafruit_BME280 bme;
const int OLED_RESET=-1;
Adafruit_SSD1306 display(OLED_RESET);
int currentTime;
int lastSec;
int status;
int lastSecond;
int i;
int position;
const int brightness=255;

Encoder myEnc(D17,D15);
int inputValue;
int LEDSwitch;
const int Switch=D6;
const int REDLED=D4;
const int GREENLED=D5;
const int BLUELED=D7;


const int BULB=2; 
int perviousPosition;
int pp;
int color;
bool on,off;
const int ENCODERPIN=D6;
Button greybutton(ENCODERPIN);
int PP;

const int MYWEMO=1;
const int MYWEMO1=2;
int BUTTON_PIN=D14;
bool buttonstate;
Button whitebutton(BUTTON_PIN);

int mode;
int timer;
int CURRENTTIME;

void setup() {
    Serial.begin(9600); 
  waitFor(Serial.isConnected,15000);
    WiFi.on();
  WiFi.clearCredentials();
  WiFi.setCredentials("IoTNetwork");
  
  WiFi.connect();
  while(WiFi.connecting()) {
    Serial.printf(".");
  }
  Serial.printf("\n\n");

pinMode(trigPin, OUTPUT);  
	pinMode(echoPin, INPUT);
	Serial.begin(9600);

  status=bme.begin(0x76); 
 Serial.begin (9600);
 waitFor (Serial .isConnected ,10000);
 Serial.println ("ready to go");
if (status == false) {
Serial.printf("BME280 at address 0x%02X failed to start", 0x76); 
}
 waitFor(Serial.isConnected,10000);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);

pinMode(GREENLED,OUTPUT);
pinMode(REDLED,OUTPUT);

}

// loop() runs over and over again, as quickly as it can execute.
void loop() {
 digitalWrite(trigPin, LOW);
  delayMicroseconds(5000);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(5000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration*.0343)/2;
  Serial.print("Distance: ");
  Serial.println(distance);
  delayMicroseconds(5000);
   
    CURRENTTIME = millis();
if((CURRENTTIME-timer)>9000){ 
  timer = millis();
  if (distance<=100)
  {
  setHue(BULB,true,HueRainbow[color%7],pp,250);
    digitalWrite(GREENLED,LOW);
    digitalWrite(REDLED,HIGH);
    Serial.printf("led color = %i,\n",inputValue);
  }
  else
  {
     setHue(BULB,false,HueRainbow[color%7],pp,250);
     digitalWrite(REDLED,LOW);
     digitalWrite(GREENLED,HIGH);
    }
}



  currentTime = millis();
if((currentTime-lastSec)>2000){ 
  lastSec = millis();
 float tempC = bme.readTemperature();
 float tempF= 1.8*tempC+32;
  float pressPA = bme.readPressure();
  float inHg= 1/3386.0*pressPA+5;
  float humidRH = bme.readHumidity();
 Serial.printf("Temperature%0.2f\n,Pressure%0.2f\n,Humidity%0.2f\n" ,tempF,pressPA,humidRH );
 display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.printf("Temperature%0.2f\n,Pressure%0.2f\n,Humidity%0.2f\n" ,tempF,pressPA,humidRH );
  display.display();
  display.clearDisplay();
}

 position = myEnc.read();
     if (position!=perviousPosition)
{
              pp=2.6*position;
              Serial.printf("i = %d,\n",position);
     perviousPosition= position;
     setHue(BULB,true,HueRainbow[color%7],pp,255);
}
  if (position >brightness)
{
   position =brightness;
   myEnc.write(brightness);
         Serial.printf("i = %d,\n",position);
}
if (position <0)
{
   position=0;
   myEnc.write(0);
        Serial.printf("i = %d,\n",position);
}
   analogWrite(Switch,inputValue);
position =myEnc.read();
 inputValue = digitalRead(D3);
  Serial.printf("button state = %i,\n",inputValue);

      if(greybutton.isClicked()){
   on =!on;
 Serial.printf("Setting color of bulb %i to color %06i\n",BULB,HueRainbow[color%7]);
  setHue(BULB,true,HueRainbow[color%7],pp,255);
  color++;
   if (on)
  {
setHue(BULB,true,HueRainbow[color%7],pp,255);
  color++;
  }
    else
  {
setHue(BULB,false,HueRainbow[color%7],pp,255);
  }
    }
    
 if(whitebutton.isClicked()){
   on =!on;
        if (  mode>3)
        {
            mode=0;
        }
        if((mode==0)){
          wemoWrite(MYWEMO,HIGH);
          wemoWrite(MYWEMO1,LOW);
        }
         if((mode==1)){
          wemoWrite(MYWEMO,HIGH);
          wemoWrite(MYWEMO1,HIGH);
        }
         if((mode==2)){
          wemoWrite(MYWEMO,LOW);
          wemoWrite(MYWEMO1,HIGH);
        }
         if((mode==3)){
          wemoWrite(MYWEMO,LOW);
          wemoWrite(MYWEMO1,LOW);
         }
               mode++;
     Serial.printf("mode %i\n",mode);
     Serial.printf("Turning on Wemo# %i\n",MYWEMO);

  }

}

Code

Credits

Joshua Garcia
2 projects • 5 followers

Comments