Voice controlled Home automation using Arduino and Bluetooth

Published  February 25, 2022   2
Arduino based Home Automation using Bluetooth and Smartphone

I have built a model of a Modern Smart Home. These features demonstrate what a Smart Home would be like! A smart home refers to a convenient home setup where all the appliances and devices can be automatically controlled remotely. Devices in such a smart home are interconnected, allowing the user to control functions such as security access to the home, temperature, humidity, etc. It is one of the applications of Smart technologies within our home automation, in creating a comfortable home and an effective lifestyle. It improves automation control and monitoring of household devices and Connects via standard means of communication for its operation. In this Era of Technology, the next big thing after Smart Phones will be a Smart Home. I made this project because I wanted to create something which should be Futuristic and Future Proof. I made this project to show how we can implement the latest technologies in our homes to make our lives easier. To bring this next level experience of interacting with your home and appliances, to the people! I am using two Arduinos in my Project. The First Arduino which is the Slave Arduino is connected to all the sensors and when a Sensor gets triggered the Slave Arduino sends data to Master Arduino, which is connected to the HC-05 Bluetooth Module, Relay, and all the Servo Motors. The master Arduino then Computes the data and performs the Respective Operation. The App which I have made is connected to the master Arduino through Bluetooth. The App converts your speech to text and sends data to Master Arduino, which then performs the Respective Operation. The app constantly runs in the background and receives data from Master Arduino, computes the data, and gives you a Notification, a Voice Message, and a Text Message. 

Previously, we have built many home automation projects, you can check them out

What's New

  • It is inexpensive and easy to implement.
  • I have coded a timer in the App which can be used to automate time-dependent operations.
  • The App constantly works in the background and constantly notifies the user.

The Unique Selling Proposition(USP) of my Smart Home is-

  • User Interface easy to control.
  • Just one click to operate all the features.
  • Everything is Voice enabled.
  • A non-specialist can also use these features without any hassle.
  • Cheaper than other Smart Homes as there is no longer an elaborate system to control the Smart Home.

The Potential Applications of my Smart Home are-

  • Individual Houses
  • Offices
  • Big societies
  • Cars
  • Schools
  • Industries
  • Shops

Components for Futuristic Smart Home

Required Components for Smart Home

Project Used Hardware

  • Arduino UNO,
  • L298N Motor Driver,
  • Servo Motors,
  • Relay,
  • Sensors(Flame Sensor, IR Sensor, Rain Sensor)

Project Used Software

  • Arduino IDE,
  • MIT App Inventor

Project Hardware Software Selection

Arduino Uno(Brain of the Smart Home) - The Arduino Uno is one of the most common Arduino boards available, and it has some user-friendly features, including large 2.54mm pitched sockets for connecting to external devices, an onboard LED, inbuilt power handling (such as an external DC power jack), and a large USB B connector for connecting to a PC.

L298N H-Bridge Motor Driver - L298N is an integrated circuit multi-watt 15 package and capable of giving high voltage. It is a high current dual full-bridge driver that is designed to accept standard TTL logic levels. It can drive inductive loads e.g relays, solenoids, motors (DC and stepping motor), etc.

Servo Motor - Controlled Intelligent Motion

Sensors - I have used sensors that are compatible with Arduino Uno and user-friendly.

Arduino IDE - Arduino works perfectly with all Arduino Boards, it's Inexpensive and Open Source. MIT App Inventor - Everything is done through a select and drop manner, Easy to test your app.

Circuit Diagram

Voice controlled Home appliances using Arduino Circuit Diagram

I am using two Arduinos in my Project. The First Arduino which is the Slave Arduino is connected to all the sensors and when a Sensor gets triggered the Slave Arduino sends data to Master Arduino, which is connected to the HC-05 Bluetooth Module, Relay, and all the Servo Motors. The master Arduino then Computes the data and performs the Respective Operation. The App which I have made is connected to the master arduino through bluetooth. I am using the l2C Protocol for Communication between the two Arduinos.

For Arduino 1(Master Arduino):

  • The Temperature and Humidity Sensor is connected to pin 9.
  • The Main Gate Servo, Tank Servo and the Garage Servo are Connected to the pins 2,10 and 6 Respectively.
  • The Relay Module is connected to pin 4.

For Arduino 2(Slave Arduino):

  • The SDA, SCK, MOSI, MISO and RST Pins are Connected to the Pins 5,13,11,12 and 5 Respectively.
  • The Flame Sensor, IR Sensor, LDR and Rain Sensor are Connected to the pins A1,3,A3 and A2.
  • The Servo Motor is Connected to pin 8.
Code
#include <DHT.h>
#include <Wire.h>
//including servo library
#include<Servo.h>
int x;
#define DHTPIN 9
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int pos = 0;
//creating servo object
Servo myservo;
Servo tank;
//automatic home lights
int led_ac = 4;
//automatic garage
Servo servo_garage;
void setup()
{
  pinMode(led_ac , OUTPUT);
  pinMode(11 , OUTPUT);
  pinMode(12 , OUTPUT);
  myservo.attach(2);
  tank.attach(10);
  servo_garage.attach(6);
  dht.begin();
  Wire.begin(8);
  Wire.onReceive(receive);
  myservo.write(0);
  servo_garage.write(30);
  digitalWrite(led_ac, HIGH);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available())
  {
    int a = Serial.read();
    Serial.println(a);
    //automatci home lights
    if (a == 6)
    {
      digitalWrite(led_ac, HIGH);
    }
    if (a == 7)
    {
      digitalWrite(led_ac, LOW);
    }
    //automatic garage
    if (a == 8)
    {
      servo_garage.write(140);
    }
    if (a == 9)
    {
      servo_garage.write(30);
    }
    //smart home gate
    if (a == 10)
    {
      for (pos = 0; pos <= 90; pos += 1)
      {
        myservo.write(pos);
        delay(15);
      }
      delay(5000);
      for (pos = 90; pos >= 0; pos -= 1)
      {
        myservo.write(pos);
        delay(15);
      }
    }
    //temperature and humidity measurment
    if (a == 11)
    {
      float h = dht.readHumidity();
      Serial.print(h);
      delay(3000);
    }
    if (a == 12)
    {
      float t = dht.readTemperature();
      Serial.print(t);
      Serial.println("°C ");
      delay(3000);
    }
    if (a == 19)
    {
      digitalWrite(11, HIGH);
      digitalWrite(12, LOW);
    }
    if (a == 20)
    {
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);
    }
  }
  else
  {
    if (x == 13)
    {
      for (pos = 0; pos <= 90; pos += 1)
      {
        myservo.write(pos);
        delay(15);
      }
      delay(5000);
      for (pos = 90; pos >= 0; pos -= 1)
      {
        myservo.write(pos);
        delay(15);
      }
    }
    if (x == 2)
    {
      tank.write(180);
    }
    if (x == 16)
    {
      tank.write(90);
    }
  }
}
void receive(int howMany)
{
  x = Wire.read();
  Serial.println(x);
}

............................................................................................................................................................................

#include<Servo.h>
#include <Wire.h>
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 5
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
//Smart Street Lights
int ldr = A3;
int led_street = 2;
//fire detector
int fire = A1;
//Rain detector
int rain = A2;
Servo servo_rain;
//SMART GATE
int sensor_gate = 3;
void setup()
{
  pinMode(fire, INPUT);
  pinMode(ldr, INPUT);
  pinMode(rain, INPUT);
  pinMode(sensor_gate, INPUT);
  servo_rain.attach(8);
  Serial.begin(9600);
  Wire.begin();
  servo_rain.write(90);
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  Serial.println("Put your card to the reader...");
}
void loop()
{
  //smart gate
  int sensor_gate_value = digitalRead(sensor_gate);
  if (sensor_gate_value == LOW)
  {
    Wire.beginTransmission(8);
    Wire.write(3);
    Wire.endTransmission();
    delay(2000);
    Wire.beginTransmission(8);
    Wire.write(16);
    Wire.endTransmission();
  }
  //fire detector
  int fire_value = digitalRead(fire);
  if (fire_value == LOW)
  {
    Wire.beginTransmission(8);
    Wire.write(1);
    Wire.endTransmission();
    delay(4000);
    Wire.beginTransmission(8);
    Wire.write(16);
    Wire.endTransmission();
  }
  //Rain detector
  int rain_value = digitalRead(rain);
  if (rain_value == LOW)
  {
    servo_rain.write(0);
    Wire.beginTransmission(8);
    Wire.write(2);
    Wire.endTransmission();
    delay(4000);
    Wire.beginTransmission(8);
    Wire.write(16);
    Wire.endTransmission();
  }
  else
  {
    servo_rain.write(90);
  }
  //Smart Street Lights
  int ldr_value = analogRead(ldr);
  if (ldr_value <= 48)
    digitalWrite(led_street, HIGH);
  else
    digitalWrite(led_street, LOW);

  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content = "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "89 A9 BB 98") //change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    Wire.beginTransmission(8);
    Wire.write(13);
    Wire.endTransmission();
    delay(5000);
    Wire.beginTransmission(8);
    Wire.write(15);
    Wire.endTransmission();
  }
  else
  {
    Serial.println("Access denied");
    Wire.beginTransmission(8);
    Wire.write(14);
    Wire.endTransmission();
    delay(4000);
  }
}

Video

Have any question realated to this Article?

Ask Our Community Members

Comments