Sitemap / Advertise

Introduction

Control your room lighting system and display weather information via specifically developed Android application and a uniquely designed PCB.


Tags

Share

Bluetooth Mobile Remote Lamp with Weather Station

Advertisement:


read_later

Read Later



read_later

Read Later

Introduction

Control your room lighting system and display weather information via specifically developed Android application and a uniquely designed PCB.

Tags

Share





Advertisement

Advertisement




    Components :
  • [1]Arduino Nano
  • [1]HC-06 Bluetooth Module
  • [1]DHT11 Module
  • [1]I2C LCD Screen (16, 2)
  • [1]L298N Motor Driver
  • [2]DC Motor
  • [1]9V Battery
  • [1]2-Way Relay
  • [1]RGB LED
  • [1]5mm Yellow LED
  • [1]5mm Blue LED
  • [1]5mm Green LED
  • [1]5mm Red LED
  • [7]220 ohm resistor

Description

I have created an electronics project named Remote Lamp two years ago, as my new room lighting system with adjustable RGB, LEDs, and some joyful features controlled by a TV remote control. However, I decided to improve the mentioned project since it has irritating redundant wiring due to the LCD screen connections and deficiencies in the user interface due to the TV remote control. So, I took my nascent idea of remote control of my room lighting system and turned it into a mobile remote lighting system controlled by an Android application developed by me. And, to get rid of the redundant wiring and add more features with limited pins on Arduino Nano, I designed a PCB (Printed Circuit Board) named Mobile Remote Lamp with Weather Station V2.0, which includes all built-in component connections.

Inspect my previous project.

PCBWay.com sponsored this project by providing me with the mentioned PCB (Mobile Remote Lamp with Weather Station V2.0) without a shipping cost. You can inspect their service from here.

project-image
Figure - 39.1

Step 1: Designing the Mobile Remote Lamp PCB

I designed a PCB for this project on KiCad, named Mobile Remote Lamp and Weather Station V2.0. All components and products I used in this project have built-in connections and pin outputs on the board. I used Arduino Nano as the center of the board due to its efficiency as compared to other alternatives. Check out the pin output instructions to see all supported components by the board.

You can inspect the board schematic on Schematics.

Also, you can buy and inspect my PCB design on PCBWay from here :)

project-image
Figure - 39.2

Pin Output:

Pins are representing Arduino Nano pin output for supported components on the board.

 PCB Connector                   Components

 HC-06                           HC-06 Bluetooth Module
 D4  --------------------------- TX 
 D5  --------------------------- RX
 5V  --------------------------- 5V
 GND --------------------------- GND

 BUS_1                           I2C LCD Screen (BUS)
 A4  --------------------------- SDA
 A5  --------------------------- SCL
 5V  --------------------------- 5V
 GND --------------------------- GND

 DHT11                           DHT11 Temperature and Humidity Sensor
 D2  --------------------------- Signal
 5V  --------------------------- 5V
 GND --------------------------- GND

 L298N_1                         L298N DC Motor Driver
 A0  --------------------------- IN_1
 A1  --------------------------- IN_2
 A2  --------------------------- IN_3
 A3  --------------------------- IN_4

 Relay_2                         2-Way Relay
 D12 --------------------------- IN_1
 D13 --------------------------- IN_2
 5V  --------------------------- 5V
 GND --------------------------- GND

 RGB1                            RGB LED
 D9  --------------------------- R
 5V  --------------------------- 5V
 D10 --------------------------- G
 D11 --------------------------- B

 D4                              5mm Yellow LED
 D8  --------------------------- +
 
 D3                              5mm Blue LED
 D7  --------------------------- +

 D2                              5mm Green LED
 D6  --------------------------- +

 D1                              5mm Red LED
 D3  --------------------------- +

 J1 Connector (Spare Pins) 
 A6
 A7
 VIN
 3V3
 GND

Warning: Under the Relay_2 connector on the board, I connected A6 and A7 pins as the output pins; but they cannot be used as outputs due to the chip settings. So, I used the spare pins - 12 and 13 - on the J1 connector as the output pins for the 2-Way Relay Module, and therefore A6 and A7 pins on the Relay_2 connector became spare pins.

project-image
Figure - 39.3

Soldering:

After the fabrication process and delivery of my PCB design, I soldered male and female connectors, 220 ohm resistors, LEDs, and an RGB on the board to attach all components properly.

project-image
Figure - 39.4


project-image
Figure - 39.5

Step 2: Developing an Android Application (Remote Lamp)

I wanted to control my lighting system and its joyful features using my mobile phone :) Hence, I developed an Android application named Remote Lamp with a user-friendly interface on MIT App Inventor 2. It transmits specific characters to the HC-06 Bluetooth Module for each command as explained in Commands. You can inspect the building blocks of the application by zooming in to the blocks figure.

You can download the application (Remote Lamp) on Google Play :)

For those who want to download it directly on their phone, I leave the application .apk file in Downloads.

project-image
Figure - 39.6

Commands:

- Clicking the Weather button, activate the Weather Screen - transmits 't'.

- Clicking Lamp (1) buttons, turn on or off Lamp (1) - transmits '5', '7'.

- Clicking Lamp (2) buttons, turn on or off Lamp (2) - transmits '6', '8'.

- Choosing options in the LEDs slider, turn on or off yellow, blue, green, red LEDs - transmits '0', '1', '2', '3', '4'.

- Choosing options in the RGB slider, change the RGB color as red, green, blue, yellow, purple, cyan, white, or off - transmits 'r', 'g', 'b', 'y', 'p', 'w', 'o'.

- Clicking Wheels buttons, turn right and left wheels or stop them - transmits 'a', 's', 'd'.

- Open the notification bar by clicking the Exit button:

- Clicking the Home Screen button, activate the Home Screen - transmits 'h'.

- Clicking the OK button, close the application and disconnect Bluetooth.

project-image
Figure - 39.7

Step 3: Programming Arduino Nano

Download the required libraries:

LiquidCrystal_I2C | Download

DHT | Download

- Include the SoftwareSerial library to communicate with the HC-06 Bluetooth Module.

- Initiate the bluetooth module. Connect the defined RX pin (4) to the TX pin on the bluetooth module.

- Include DHT.h library.

- Define the dht object.

- Include LiquidCrystal_I2C and Wire libraries to run I2C module.

- Set the LCD address to 0x27 for a 16 chars and 2 line display.

- Define custom characters for the LCD.

- Activate the bluetooth module and initiate the DHT11 module.

- You do not need to take any further action to define SDA and SCL pins in Wire library due to embedded SDA and SCL settings on Arduino Nano.

- Define the home screen settings.

- Adjust the RGB color to white at the home screen initializing.

- In getDataFromDHT11() function, get weather information - temperature (celsius / fahrenheit) and humidity - using built-in functions.

- Wait until the DHT11 module is ready.

- If the Weather Screen is requested by a command ('t'), print the weather information generated by the DHT11 Temperature and Humidity Sensor.

- If the Bluetooth module is available and receiving characters from the Android application, execute the requested command depending on the received character.

- In the changeColor() function, adjust the color of the RGB LED using the analogWrite() function.

Bonus: By uncommenting the changeBluetoothSettings() function, change the Bluetooth module defaults settings using AT Commands - Name: Remote Lamp, Password: 1234, Baud Rate: 9600.

project-image
Figure - 39.8


project-image
Figure - 39.9


project-image
Figure - 39.10


project-image
Figure - 39.11


project-image
Figure - 39.12


project-image
Figure - 39.13

Features

Before trying the following features, pair the HC-06 Bluetooth Module with your phone to connect to the board (Mobile Remote Lamp with Weather Station V2.0) with the application (Remote Lamp).

project-image-slide project-image-slide project-image-slide
Slide


1) Connect to the HC-06 Bluetooth Module.

project-image
Figure - 39.14


project-image
Figure - 39.15


project-image
Figure - 39.16

2) Adjust the color of the RGB LED on the board.

project-image-slide project-image-slide project-image-slide project-image-slide
Slide




project-image-slide project-image-slide project-image-slide project-image-slide
Slide


3) Turn on or off yellow, blue, green, red LEDs on the board.

project-image-slide project-image-slide project-image-slide
Slide




project-image-slide project-image-slide project-image-slide
Slide


4) Turn on or off the Lamp (1).

project-image
Figure - 39.17


project-image
Figure - 39.18


project-image
Figure - 39.19


project-image
Figure - 39.20

5) Turn on or off the Lamp (2).

project-image
Figure - 39.21


project-image
Figure - 39.22


project-image
Figure - 39.23


project-image
Figure - 39.24

6) Activate the turning wheels attached to the L298N Motor Driver - right and left.

project-image-slide project-image-slide project-image-slide
Slide




project-image-slide project-image-slide project-image-slide
Slide


7) Activate the Weather Screen to display the weather information generated by the DHT11 Temperature and Humidity Sensor - temperature (in celcius and fahrenheit) and humidity.

project-image
Figure - 39.25


project-image
Figure - 39.26


project-image
Figure - 39.27

8) Open the notification bar to close the application or return to the home screen.

project-image
Figure - 39.28


project-image
Figure - 39.29


project-image
Figure - 39.30

Connections

Connect all supported components to the corresponding connector on the board (Mobile Remote Lamp with Weather Station V2.0).

project-image
Figure - 39.31


project-image
Figure - 39.32


project-image
Figure - 39.33


project-image
Figure - 39.34

Now, you can create your lamp design using the finished apparatus :)

I used a dilapidated flower pot from my previous project and affixed the board on it with the turning wheels by using a hot glue gun.

I connected bulb plugs to a 3-Way socket adaptor and used my old phone battery charger to supply Arduino Nano on the same adaptor.

To supply the turning wheels (attached to DC motors), I used a 9V battery.

project-image
Figure - 39.35


project-image
Figure - 39.36


project-image
Figure - 39.37

Conclusion

After completing each step, I fastened the contraption to the ceiling and connected the power cable :)

project-image
Figure - 39.38


project-image
Figure - 39.39


project-image
Figure - 39.40


project-image
Figure - 39.41

Videos

Demonstration

Board Features

Weather Screen

Code

Mobile_Remote_Lamp_with_Weather_Station.ino

Download



         ////////////////////////////////////////////////////  
        //   Mobile Remote Lamp with Weather Station      //
       //                                                //
      //          -------------------------             //
     //              Arduino Nano V3.0                 //           
    //               by Kutluhan Aktar                // 
   //                                                //
  ////////////////////////////////////////////////////

// Control your room lighting system and display weather information via specifically developed Android application and a uniquely designed PCB.
//
// You can find more information regarding the project from the link below:
// https://www.theamplituhedron.com/projects/Mobile-Remote-Lamp-with-Weather-Station/
//
// Connections
// Arduino Nano :           
//                                HC-06 Bluetooth Module
// D4  --------------------------- TX
// D5  --------------------------- RX
// 5V  --------------------------- 5V
// GND --------------------------- GND
//                                I2C LCD Screen (BUS)
// A4  --------------------------- SDA
// A5  --------------------------- SCL
// 5V  --------------------------- 5V
// GND --------------------------- GND
//                                DHT11 Temperature and Humidity Sensor
// D2  --------------------------- Signal
// 5V  --------------------------- 5V
// GND --------------------------- GND
//                                L298N DC Motor Driver
// A0  --------------------------- IN_1
// A1  --------------------------- IN_2
// A2  --------------------------- IN_3
// A3  --------------------------- IN_4
//                                2-Way Relay
// D12 --------------------------- IN_1
// D13 --------------------------- IN_2
// 5V  --------------------------- 5V
// GND --------------------------- GND
//                                RGB LED
// D9  --------------------------- R
// 5V  --------------------------- 5V
// D10 --------------------------- G
// D11 --------------------------- B
//                                5mm Yellow LED
// D8  --------------------------- +
//                                5mm Blue LED
// D7  --------------------------- +
//                                5mm Green LED
// D6  --------------------------- +
//                                5mm Red LED
// D3  --------------------------- +
//
// Spare Pins on the J1 Connector on the board:
// A6
// A7
// VIN
// 3V3
// GND


// Include the SoftwareSerial library to communicate with the HC-06 Bluetooth Module.
#include <SoftwareSerial.h>
// Initiate the bluetooth module. Connect the defined RX pin (4) to the TX pin on the bluetooth module.
SoftwareSerial Remote_Lamp(4, 5); // RX, TX

// Include DHT.h library.
#include "DHT.h"
// Define the dht object.
DHT dht;

// include LiquidCrystal_I2C and Wire libraries to run I2C module.
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Define custom characters for the LCD.
uint8_t bell[8]  = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};
uint8_t duck[8]  = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
uint8_t check[8] = {0x0, 0x1 ,0x3, 0x16, 0x1c, 0x8, 0x0};


// Define data holders.
float humidity, temperature, fahrenheit;

// Define the Weather_Screen boolean to activate the Weather Screen when requested by a command over the bluetooth module.
boolean Weather_Screen = false;

// Define the pins attached to LEDs.
#define RED 9
#define GREEN 10
#define BLUE 11
#define Yellow_LED 8
#define Blue_LED 7
#define Green_LED 6
#define Red_LED 3

// Define the pins attached to the L298N Motor Driver.
#define L_1 A0
#define L_2 A1
#define L_3 A2
#define L_4 A3

// Define the pins attached to the 2-Way Relay.
#define R_1 12
#define R_2 13


void setup(){

// You can change the default settings of the HC-06 Module by uncommenting the function below - Name: Remote Lamp, Password: 1234, Baud Rate: 9600.
// Serial.begin(9600); changeBluetoothSettings();

// Activate the bluetooth module.
Remote_Lamp.begin(9600);

// Initialize DHT11 Module on D2.
dht.setup(2);

// Initialize the LCD.
// You do not need to take any further action to define SDA and SCL pins in Wire library due to embedded SDA and SCL settings on Arduino Nano. 
lcd.begin();

// Create the predefined custom characters:
lcd.createChar(0, bell);
lcd.createChar(1, duck);
lcd.createChar(2, check);

// Home Screen.
lcd.clear();
lcd.home();
lcd.print("Remote Lamp V2.0");
lcd.setCursor(0, 1);
lcd.print("  ");
lcd.write(0);
lcd.print(" Waiting...");

// Set output pins.
pinMode(Yellow_LED, OUTPUT);
pinMode(Blue_LED, OUTPUT);
pinMode(Green_LED, OUTPUT);
pinMode(Red_LED, OUTPUT);
pinMode(L_1, OUTPUT);
pinMode(L_2, OUTPUT);
pinMode(L_3, OUTPUT);
pinMode(L_4, OUTPUT);
pinMode(R_1, OUTPUT);
pinMode(R_2, OUTPUT);


// Adjust the RGB color to white at the home screen initializing.
changeColor(255, 255, 255);

// Turn off relays at the home screen while initializing.
digitalWrite(R_1, HIGH);
digitalWrite(R_2, HIGH);

}

void loop(){

getDataFromDHT11();

// If the Weather Screen is requested by a command, print the weather information by the DHT11 Temperature and Humidity Sensor.
if(Weather_Screen){
    lcd.clear();
    lcd.print("Temp:" + String(temperature, 1) + "C " + String(fahrenheit, 1) + "F");
    lcd.setCursor(0, 1);
    lcd.print("Hum: " + String(humidity, 1) + "%");
}

// If the bluetooth module is receiving commands from the Android application:
if(Remote_Lamp.available()){
  char c = Remote_Lamp.read();
  // Commands:
  switch(c){
    // Return to the Home Screen:
    case 'h':
    lcd.clear();
    lcd.home();
    lcd.print("Remote Lamp V2.0");
    lcd.setCursor(0, 1);
    lcd.print("  ");
    lcd.write(0);
    lcd.print(" Waiting...");
    Weather_Screen = false;
    break;
    // Weather Screen Settings:
    case 't':
    Weather_Screen = true; // activate
    break;
    // LEDs settings:
    case '0':
    digitalWrite(Yellow_LED, LOW);
    digitalWrite(Blue_LED, LOW);
    digitalWrite(Green_LED, LOW);
    digitalWrite(Red_LED, LOW);
    lcd.clear();
    lcd.home();
    lcd.print("LEDs OFF => ");
    lcd.write(1);
    Weather_Screen = false;
    break;
    case '1':
    digitalWrite(Yellow_LED, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("Yellow LED => ");
    lcd.write(2);
    Weather_Screen = false;
    break;
    case '2':
    digitalWrite(Blue_LED, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("Blue LED => ");
    lcd.write(2);
    Weather_Screen = false;
    break;
    case '3':
    digitalWrite(Green_LED, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("Green LED => ");
    lcd.write(2);
    Weather_Screen = false;
    break;
    case '4':
    digitalWrite(Red_LED, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("Red LED => ");
    lcd.write(2);
    Weather_Screen = false;
    break;
    // Lamp settings (Relay):
    case '5':
    digitalWrite(R_1, LOW);
    lcd.clear();
    lcd.home();
    lcd.print("Lamp_1 => ON");
    Weather_Screen = false;
    break;
    case '6':
    digitalWrite(R_2, LOW);
    lcd.clear();
    lcd.home();
    lcd.print("Lamp_2 => ON");
    Weather_Screen = false;
    break;
    case '7':
    digitalWrite(R_1, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("Lamp_1 => OFF");
    Weather_Screen = false;
    break;
    case '8':
    digitalWrite(R_2, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("Lamp_2 => OFF");
    Weather_Screen = false;
    break;
    // Motor driver settings (L298N):
    case 'a':
    digitalWrite(L_1, LOW);
    digitalWrite(L_2, HIGH);
    lcd.clear();
    lcd.home();
    lcd.print("R_Wheel Turning!");
    lcd.setCursor(5, 1);
    lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);
    Weather_Screen = false;
    break;
    case 's':
    digitalWrite(L_3, HIGH);
    digitalWrite(L_4, LOW);
    lcd.clear();
    lcd.home();
    lcd.print("L_Wheel Turning!");
    lcd.setCursor(5, 1);
    lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);
    Weather_Screen = false;
    break;
    case 'd':
    digitalWrite(L_1, LOW);
    digitalWrite(L_2, LOW);
    digitalWrite(L_3, LOW);
    digitalWrite(L_4, LOW);
    lcd.clear();
    lcd.home();
    lcd.print("Wheels OFF!");
    lcd.setCursor(5, 1);
    lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);lcd.write(1);
    Weather_Screen = false;
    break;
    // RGB LED settings:
    case 'r':
    changeColor(255, 0, 0);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => Red");
    Weather_Screen = false;
    break;
    case 'g':
    changeColor(0, 255, 0);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => Green");
    Weather_Screen = false;
    break;
    case 'b':
    changeColor(0, 0, 255);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => Blue");
    Weather_Screen = false;
    break;
    case 'y':
    changeColor(255, 255, 0);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => Yellow");
    Weather_Screen = false;
    break;
    case 'p':
    changeColor(255, 0, 255);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => Purple");
    Weather_Screen = false;
    break;
    case 'c':
    changeColor(0, 255, 255);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => Cyan");
    Weather_Screen = false;
    break;
    case 'w':
    changeColor(255, 255, 255);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => White");
    Weather_Screen = false;
    break;
    case 'o':
    changeColor(0, 0, 0);
    lcd.clear();
    lcd.home();
    lcd.print("RGB => OFF");
    Weather_Screen = false;
    break;
    
  }
}

}

void getDataFromDHT11(){
  // Get weather information - temparature and humidity.
  humidity = dht.getHumidity();
  temperature = dht.getTemperature();
  fahrenheit = dht.toFahrenheit(temperature);
  // Wait until the module is ready.
  delay(2 * dht.getMinimumSamplingPeriod());
  
}

void changeColor(int red, int green, int blue){
  // Change the color of the RGB LED using the analogWrite() function.
  analogWrite(RED, 255 - red);
  analogWrite(GREEN, 255 - green);
  analogWrite(BLUE, 255 - blue);

}

void changeBluetoothSettings(){
  // Define the new settings.
  String Name = "Remote Lamp";
  int Password = 1234;
  String Uart = "9600,0,0";

  Remote_Lamp.print("AT+NAME"); // Change the name.
  Remote_Lamp.println(Name); 
  Serial.print("Name is changed: ");
  Serial.println(Name);
  delay(2000);
  Remote_Lamp.print("AT+PSWD"); // Change the password.
  Remote_Lamp.println(Password);
  Serial.print("Password is changed: ");
  Serial.println(Password);
  delay(2000);
  Remote_Lamp.print("AT+UART"); // Change the baud rate. If the bluetooth module is a HC-05, the default value of baud rate is 38400.
  Remote_Lamp.println(Uart);
  Serial.print("Baud rate is set: ");
  Serial.println(Uart);
  delay(2000);
  Serial.println("Task is completed."); // You can see in the terminal whether the task is completed correctly or not.

}


Schematics

project-image
Schematic - 39.1


project-image
Schematic - 39.2


project-image
Schematic - 39.3

Downloads

Remote Lamp APK

Download


PCB Gerber Files

Download