Skip to content

Smart Room Controller

Smart Room Controller

Components

Hardware components

x 1


x 1


x 1


x 1


x 1


Project description

Code /*Project:Smart Room Controller Description:Smart Room Controller based on my mother and fathers heat concerns Author:Kalif Purce Date:6/28/21 */ #include #include #include #include #include "colors.h" #include #include #include #include #include #include #include #include #include #define LOGO_HEIGHT 1 #define LOGO_WIDTH 1 #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 unsigned long timeStamp; //Timestamp for current time unsigned long lastStamp; const int PIXELCOUNT = 12; //NEO PIXEL COUNT const int PIXELPIN = 17; //NEO PIXEL PINS SETUP float tempF = 0; // FOR BME float tempC; //FOR BME C TO F float pressinHg; //PRESSURE FOR BME float pressPA; //PRESSURE FOR BME CONVERSION float humidRH; //BME HUMIDITY float tempGuage = tempF; //FOR TEMP CONV bool buttonState; //FOR BUTTON FUNC bool buttonStateHold; //FOR HOLD FUNC bool status; bool status1; int heat; int position; //BME AND NEO int rot = 2; int clicks; //INTEGER FOR PRESS X2 int led = 13; // define the LED pin **FOR IR** int digitalPin = 21; // KY-026 digital interface **FOR IR** int analogPin = 20; // KY-026 analog interface **FOR IR** int digitalVal; // digital readings **FOR IR** int analogVal; //analog readings **FOR IR** wemoObj myWemo; Adafruit_BME280 bme; Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); EthernetClient client; Adafruit_NeoPixel pixel(PIXELCOUNT , PIXELPIN , NEO_GRB + NEO_KHZ800); OneButton button(23, false); //BUTTON SET TO FALSE

void setup() { Serial.begin(9600); pinMode(led, OUTPUT); //FOR IR pinMode(digitalPin, INPUT); //FOR IR pinMode(10, OUTPUT); digitalWrite(10, HIGH); pinMode(4, OUTPUT); digitalWrite(4, HIGH); status1 = Ethernet.begin(mac); //ETHER BEGIN TO MAC if (!status1) { Serial.printf("failed to configure Ethernet using DHCP n"); //no point in continueing while (1); } Serial.print("My IP address:"); for (byte thisbyte = 0; thisbyte < 4; thisbyte++) { //print value of each byte of the IP address Serial.print(Ethernet.localIP()[thisbyte], DEC); if (thisbyte < 3) Serial.print("."); } pixel.begin(); // NEOPIXEL SETTING pixel.show(); //NEOPIXEL SETTING pixel.setBrightness(15); //NEOPIXEL SETTING (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) ; //OLED status = bme.begin(0X76); //BME START display.display(); //DISPLAYS DISP display.setRotation(rot); //DISPLAY ROTATION button.attachClick(click); //BUTTON CLICK button.attachLongPressStart(longPress); //BUTTON LONGPRESS buttonState = false; //BUTTON STATE buttonStateHold = false; //BUTTON STATE FOR HOLD button.setPressTicks(250); //BUTTON TICKS } void loop() { timeStamp = millis(); // TIMESTAMP TO MILLISECONDS button.tick(); position = tempF; //SETS POSITION TO THE TEMP tempGuage = map(position, 10, 120, 0, 12); // Position based on 10-120 degrees being convered to 0-12(of available lights) heat = map(heat, 0, 1023, 1023, 0); //Switches heat value to min max instead of max min pixel.clear(); if (tempF < 68) { pixel.fill( 0x0000FF, 0, tempGuage); //COLD TEMP FOR NEO } else if (tempF >= 69 && tempF <= 80) { //MED TEMP FOR NEO pixel.fill( 0x808000 , 0, tempGuage); } else { pixel.fill(0xFF0000, 0, tempGuage); //HOT TEMP FOR NEO } pixel.show(); tempC = bme.readTemperature(); //deg C //TEMP CONVERSION tempF = (tempC * 1.8) + 32; pressPA = bme.readPressure(); //pascals pressinHg = (pressPA / 33.863886666667); //PRESSURE CONVERSION humidRH = bme.readHumidity(); //%RH if ((timeStamp - lastStamp) > 3000) { Serial.print("Temp="); //PRINTS FOR TEMP ON SM Serial.print(tempF); Serial.println("°F"); Serial.print("pressure="); //PRINTS FOR PRESSURE ON SM Serial.print(pressinHg / 100.0F); Serial.println("hPa"); Serial.print("Humidity="); //PRINTS FOR HUMIDITY ON SM Serial.print(bme.readHumidity()); Serial.println("%"); lastStamp = millis(); } oledtexttemp(); //OLED DISPLAY TEXT STYLE if ((timeStamp - lastStamp) > 3000) { //TEMP SET HUE BLUE if (tempF < 68 ) { setMyHue(true,HueBlue); } else if (tempF >= 69 && tempF <= 80 ) { //TEMP SET HUE YELLOW setMyHue(true,HueYellow); } else { (tempF <= 81); //TEMP SET HUE RED setMyHue(true,HueRed); } lastStamp = millis(); //MILLIS TIMESTAMP } // Read the digital interface digitalVal = digitalRead(digitalPin); if (digitalVal == HIGH) // if flame is detected { digitalWrite(led, HIGH); // turn ON Arduino's LED } else { digitalWrite(led, LOW); // turn OFF Arduino's LED } // Read the analog interface heat = analogRead(analogPin); if ((timeStamp - lastStamp) > 3000) { Serial.println(heat); // print analog value to serial lastStamp = millis(); } if (tempF >= 80 && buttonState == false) { myWemo.switchON (0); //temp over 80 "fan" on myWemo.switchON (2); } if (buttonState == true && tempF > 80) { //TEMP OVER 80 "FAN" OFF myWemo.switchOFF(0); myWemo.switchOFF(2); } if (tempF >= 69 && tempF <= 79 && buttonStateHold == false) { //If temp is between 69 and 80 "heater" on myWemo.switchON (1); myWemo.switchON (3); } if (tempF >= 69 && tempF <= 79 && buttonStateHold == true) { //If temp is between 69 and 80 "heater" OFF myWemo.switchOFF (1); myWemo.switchOFF (3); } } void oledtexttemp (void) { //VOID FOR OLED DISPLAY TEXT display.clearDisplay(); display.setTextColor(SSD1306_WHITE, SSD1306_BLACK); // Draw 'inverse' text display.setTextSize(1.5); display.setCursor(0, 0); //PRINT F BELOW PRINTS EVERYTHING TO SCREEN,TEMP,PRESSURE,HUMIDITY,HEAT READING display.printf("Temperature is=%f n Current Pressure=%f n Humidity Level=%fn Heat Level=%in", tempF, pressinHg / 100.0F, bme.readHumidity(), heat); display.display(); } void click() { //VOID FOR BUTTON CLICK buttonState = !buttonState; Serial.println("Single Press"); } void longPress() { //void for BUTTON HOLD CLICK buttonStateHold = !buttonStateHold; Serial.println("Hold Press"); } void setMyHue(bool Enabled, int color) { //HUE FUNCTIONN WORKS<3 int Sat = 247; int Bri = 103; int i; for ( i = 1; i <= 5; i++) { setHue(i, Enabled, color, Bri, Sat); } }

Documents

Comments

Similar projects you might like

Comments