Need ideas for additional features to my smart home project.

My smart home project for school will consist of a single floor house with 4 different rooms. 3 of the rooms are all the same dimensions and will have the same circuitry for all 3, the last rooms is larger and so far will only be used to open and close a door. My dilemma is that I cant think of any more features to add to the house.

Current features:

  1. Controlling LEDs for lighting the rooms
  2. Reading the temperature for the rooms
  3. Using a PC fan to cool down the rooms when they reach a certain temperature or manually enabling
  4. Rain detection sensor on the roof
  5. Soil moisture reader to see if plants need to be watered
  6. Opening and closing a door with a servo

Note that the soil sensor, servo, and pc fans haven't been implemented into the main prototype yet. Only got the PC fans working with if statements on a separate code so far.

Im just looking for some more ideas that I could add. I am researching into using GUI builder for processing to make a simple GUI rather then using the arduino serial monitor. Only did a quick search the other day but I read there are alternatives to the arduino serial monitor. Any ideas for project guidance or how to simplify my code please feel free to respond.

Warning I am an EET major not a CET so I never took any coding classes, everything below was self taught.

//Small leds Vf=2.8v
int LED1 = 8;  //Pin the White LED is connected to               (room-1)
int LED2 = 9;  //Pin the Red LED is connected to                (room-2)
int LED3 = 10; //Pin the Blue LED is connected to               (room-3)
char room_req[] = "______________________________________________________________________________\n"
                  "Room #1\t\t\t\t Room #2\t\t\t Room #3\n"
                  "1=Temp Read\t\t\t 4=Temp Read\t\t\t 7=Temp Read\n"
                  "2=Light On\t\t\t 5=Light On\t\t\t 8=Light On\n"
                  "3=Light Off\t\t\t 6=Light Off\t\t\t 9=Light Off\n"
                  "a=Turn all lights on\t\t b=Turn all lights off\n"
                  "c=Check for rain\n"
                  "______________________________________________________________________________\n\n";
void setup()
{
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  Serial.begin(9600);
  Serial.println(room_req);
  delay (200);
}



void loop() 
{ 
  //while((Serial.available()) this statement prevents the reprint of the menu
  if(Serial.available())
  {
    int input = Serial.read();
    if(input == '1')
    {
      readtemp1();
      input = 0;
    }
    if(input == '2')
    {
      light_on1();
      input = 0;
    }
    if(input == '3')
    {
      light_off1();
      input = 0;
    }
    if(input == '4')
    {
      readtemp2();
      input = 0;
    }
    if(input == '5')
    {
      light_on2();
      input = 0;
    }
    if(input == '6')
    {
      light_off2();
      input = 0;
    }
    if(input == '7')
    {
      readtemp3();
      input = 0;
    }
    if(input == '8')
    {
      light_on3();
      input = 0;
    }
    if(input == '9')
    {
      light_off3();
      input = 0;
    }
    if(input == 'a')
    {
      all_on();
      input = 0;
    }
    if(input == 'b')
    {
      all_off();
      input = 0;
    }
    if(input == 'c')
    {
      rain_check();
      input = 0;
    }
    
    delay (200);
  }
}


void readtemp1()
{
  int temp_pin_r1 = 15;
  int tempsense1 = analogRead(temp_pin_r1); //reads voltage on Pin A0
  float millivolts = (tempsense1 / 1024.0) * 5000;//convert pin A0 to millivolts
  float celsius_value = (millivolts / 10.0) - 273.15; //sensor output is 10mV per degree Celsius
  float fahrenheit_value = ((celsius_value)*(9.0/5.0)) + 32.0;//convert to fahrenheit

  Serial.print("Room #1 temperature is ");
  Serial.print(fahrenheit_value);
  Serial.print((char)176);   // 176 is ASCII number for degree sign
  Serial.print(" Fahrenheit\n");
  Serial.println();
}

void light_on1()
{
  digitalWrite(LED1,HIGH);
  Serial.println("Room #1 light is ON (White)");
  Serial.println();
}

void light_off1()
{
  digitalWrite(LED1,LOW);
  Serial.println("Room #1 light is Off (White)");
  Serial.println();
}

void readtemp2()
{
  int temp_pin_r2 = 7;
  int tempsense2 = analogRead(temp_pin_r2); //reads voltage on Pin A0
  float millivolts = (tempsense2 / 1024.0) * 5000;//convert pin A0 to millivolts
  float celsius_value = (millivolts / 10.0) - 273.15; //sensor output is 10mV per degree Celsius
  float fahrenheit_value = ((celsius_value)*(9.0/5.0)) + 32.0;//convert to fahrenheit
  
  Serial.print("Room #2 temperature is ");
  Serial.print(fahrenheit_value);
  Serial.print((char)176);   // 176 is ASCII number for degree sign
  Serial.print(" Fahrenheit\n");
  Serial.println();
}

void light_on2()
{
  digitalWrite(LED2,HIGH);
  Serial.println("Room #2 light is ON (Red)");
  Serial.println();
}

void light_off2()
{
  digitalWrite(LED2,LOW);
  Serial.println("Room #2 light is Off (Red)");
  Serial.println();
}

void readtemp3()
{
  int temp_pin_r3 = 0;
  int tempsense3 = analogRead(temp_pin_r3); //reads voltage on Pin A0
  float millivolts = (tempsense3 / 1024.0) * 5000;//convert pin A0 to millivolts
  float celsius_value = (millivolts / 10.0) - 273.15; //sensor output is 10mV per degree Celsius
  float fahrenheit_value = ((celsius_value)*(9.0/5.0)) + 32.0;//convert to fahrenheit

  Serial.print("Room #3 temperature is ");
  Serial.print(fahrenheit_value);
  Serial.print((char)176);   // 176 is ASCII number for degree sign
  Serial.print(" Fahrenheit\n");
  Serial.println();
}

void light_on3()
{
  digitalWrite(LED3,HIGH);
  Serial.println("Room #3 light is ON (Blue)");
  Serial.println();
}

void light_off3()
{
  digitalWrite(LED3,LOW);
  Serial.println("Room #3 light is Off (Blue)");
  Serial.println();
}

void all_on()
{
  Serial.println("All lights are on.");
  digitalWrite(LED1,HIGH);
  digitalWrite(LED2,HIGH);
  digitalWrite(LED3,HIGH);
}

void all_off()
{
  Serial.println("All lights are off.");
  digitalWrite(LED1,LOW);
  digitalWrite(LED2,LOW);
  digitalWrite(LED3,LOW);
}

void rain_check()
{
  int rain = 8;
  Serial.println(analogRead(rain));
  if (analogRead(rain)>'325');
  {
  Serial.println("Yes it is raining.");
  }
  
  if (analogRead(rain)<'325');
  {
  Serial.println("No it is not raining.");
  }
}

The rain detector seems to be quite pointless but might be integrated with other weather sensors, and perhaps servos to shut the relevant windows.

Yea was thinking of doing something like that by having it control the servo if it detects water. Even thinking of adding window control to for the exact reason.

There have been some home security systems on this forum.

You might also google Jonathon Oxer. Not only is he the Freetronics honcho, but he is also seriously into Arduino-controlled homes. I understand he has even had himself microchipped so that he can communicate with the controller by waving his arm about. That is something that would seriously impress your mates at school. It should also impress your cat.

humidity readings? also maybe volt/current load readings for each room? i was a facilities manager for a few years, we monitored load conditions and voltage, of course this was industrial so we had more than one phase. just a thought.

Hack a 5W or 7W LED light bulb and control it with either IR or RF . . . I did it, it was fun.

I even custom ordered my own IR remote :slight_smile:

Thank you guys for the ideas so far. The current/volt for my project wouldn't really be necessary as I can see so far. Spring break starts Monday for me and I was going to put in some work for the few other sensors I have. I'm also using the G4P GUI builder to start building a simple interface, just for polish. If anyone knows how I can use processing to read the serial analog of a certain pin(temperature sensor) then take that data and print it within a certain a processing object please let me know, been searching for a few hours and cant find anything on the subject.

EX:
Room #1 - This would just be a label.
Light - Toggle button that turns the light on/off.
Temperature - Once the user clicks this it would read the temperature from the pin and print it to a text field of box of some sorts to the right of it.

I also talked to the professor in charge of the senior projects, because my project is basically mostly coding I was wondering if anyone would be able to give me some ideas for adding some more electrical engineering aspects.

For example I could talk about and use psice to build a simulated RFID reader for a key card without actually having to build it physically. Another idea I was thinking of is to use an op amp or transistor to add more voltage and current so I can wire more maybe 3-5 leds per room, soley for the reason of having the transistor/amp to make the circuitry more complex.

We are required to do a worst case scenario and computations page for the project, and so far the only thing id write about in this section is basically min/max v-forward for the diode along with the resistance tolerance. I was even thinking about building the LM335 temperature sensor out of parts rather then the prefabricated.

As always thanks a lot guys, building this project has really made me appreciate the torture I have put myself through the past 2 years to finish my degree. I never would have thought Id enjoy building this, a few nights I stayed up to 6:00am because I just couldnt stop working on it XD

Can i please have the circuit model? how you did the connection with the arduino?? i cant actually do mine, my project is a bit different :/please