Improved efficiency of the Air Conditioner using the Internet of Things

by Nov 20, 2020Projects

The air conditioner tends to consume a lot of electricity. This project is the development of the Internet of Things platform to save the energy consumption of air conditioners by controlling the temperature of airflow and area temperature. The proposed system is designed for local temperature transmissions through the MQTT Protocol and uses the Temperature Analytics Algorithm to decide to switch off the compressor in the proper conditions.

The temperature of the supply air of the air conditioner and the room temperature of the actual operation area are taken into account to be the controlling factors. If the supply air temperature reflects that the evaporator is too cold, or the room temperature of the actual area is reached to the required temperature, the controller will then control the compressor to stop working. This causes the compressor to run less and save more energy.

Why make this project?

In the air conditioner, the compressor is the heart of the air conditioner that has a power consumption of up to 80%. Meanwhile, the other components have a power consumption of only 20%. The cycle time of the compressor is an important factor in the loss of energy in the cooling process.

Once the air conditioner starts cooling, the compressor will start working. The thermostat is installed at the return air of the air conditioner to read the room temperature. The compressor stops when the room temperature read from the thermostat reaches the set value. Then, the compressor will restart working again when the room temperature red from the thermostat is higher than the set value. The room temperature is gradually cooled down from transmitting the cool derived from the supply air while the compressor is running. The room temperature is gradually higher while the compressor stops working.

However, the operation of the traditional air conditioner measures the room temperature indirectly from the return air to the air conditioner. It does not measure the room temperature directly in
the actual location. There is no measure of supply air temperature to be a factor reducing the energy of the air conditioner.

#INDEX

  1. Demonstration
  2. Working
  3. Circuit hardware
  4. Circuit connections
  5. Online services used
  6. Code
  7. Credits

1. Demonstration

Demonstration video
Program execution at NodeMCU end.
Compressor off when set temperature is less than room temperature.
Room temperature less than set temperature(compressor off).

2. Working

Flowchart describing the working of project.

The working of the project is based on two approaches.

Approach 1

The required room temperature is set by the user using the HTML developed using Flask. The room temperature is measured by the LM35 temperature sensor and this data is published on the AWS IOT core topic using the NodeMCU. This data is then received by the Raspberry Pi, which subscribes to the data from the AWS. The Raspberry Pi is connected to the compressor of the air conditioner through a relay (here in the project, we use a dc motor to demonstrate the on/off operation performed by the Raspberry Pi through motor driver L293d as its not feasible to open the A.C. and interface with the compressor circuit). When the room temperature gets lower than the set temperature, the compressor is turned off. As soon as the room temperature passes the set temperature, the compressor is turned on again.

Approach 2

The DHT11 temperature and humidity sensor measure the temperature of the supply air from the A.C. This supply air is 15 to 16 degrees cooler than the room temperature. As the room temperature drops, the supply air temperature also drops. A stage is achieved that there is no further drop in the supply air temperature and an equilibrium is achieved (as the room temperature becomes nearly equal to the supply air temperature). At this moment the compressor is turned off.

3. Circuit hardware

i. LM35 temperature sensor

LM35 is a precession Integrated circuit temperature sensor, whose output voltage varies, based on the temperature around it. It is a small and cheap IC that can be used to measure temperature anywhere between -55°C to 150°C. It can easily be interfaced with any Microcontroller that has ADC function or any development platform like Arduino.

Power the IC by applying a regulated voltage like +5V (Vcc) to the input pin and connected the ground pin to the ground of the circuit.

>>Pin configuration

No.Pin NameDescription
1VccInput voltage is +5V for typical applications
2Analog OutThere will be increase in 10mV for raise of every 1°C. Can range from -1V(-55°C) to 6V(150°C)
3GroundConnected to ground of circuit

>>Specification

  • Minimum and Maximum Input Voltage is 35V and -2V respectively. Typically 5V.
  • Can measure temperature ranging from -55°C to 150°C 
  • The output voltage is directly proportional (Linear) to temperature (i.e.) there will be a rise of 10mV (0.01V) for every 1°C rise in temperature.
  • ±0.5°C  Accuracy
  • Drain current is less than 60uA  
  • Low-cost temperature sensor
  • Small and hence suitable for remote applications
  • Available in TO-92, TO-220, TO-CAN, and SOIC package

ii. DHT11 temperature and humidity sensor

The DHT11 is a commonly used temperature and humidity sensor. It comes with a dedicated NTC to measure temperature and an 8-bit microcontroller to output the values of temperature and humidity as serial data. The sensor is also factory calibrated and hence easy to interface with other microcontrollers.

It can measure temperature from 0°C to 50°C and humidity from 20% to 90% with an accuracy of ±1°C and ±1%. 

>> Pin configuration

No:Pin NameDescription
1VccPower supply 3.5V to 5.5V
2DataOutputs both Temperature and Humidity through serial Data
3NCNo Connection and hence not used
4GroundConnected to the ground of the circuit

>>Specification

  • Operating Voltage: 3.5V to 5.5V
  • Operating current: 0.3mA (measuring) 60uA (standby)
  • Output: Serial data
  • Temperature Range: 0°C to 50°C
  • Humidity Range: 20% to 90%
  • Resolution: Temperature and Humidity both are 16-bit
  • Accuracy: ±1°C and ±1%

iii. NodeMCU

NodeMCU is an open-source Lua based firmware for the ESP8266 WiFi SOC from Espressif and uses an on-module flash-based SPIFFS file system. It is implemented in C and is layered on the Espressif NON-OS SDK.

The firmware was initially developed as is a companion project to the popular ESP8266-based NodeMCU development modules, but the project is now community-supported, and the firmware can now be run on any ESP module.

>>Pin configuration

CategoryNameDescription
PowerMicro-USB, 3.3V, GND, VinMicro-USB: NodeMCU can be powered through the USB port 3.3V: Regulated 3.3V can be supplied to this pin to power the board GND: Ground pins Vin: External Power Supply
Control PinsEN, RSTThe pin and the button resets the microcontroller
Analog PinA0Used to measure analog voltage in the range of 0-3.3V
GPIO PinsGPIO1 to GPIO16NodeMCU has 16 general purpose input-output pins on its board
SPI PinsSD1, CMD, SD0, CLKNodeMCU has four pins available for SPI communication.
UART PinsTXD0, RXD0, TXD2, RXD2NodeMCU has two UART interfaces, UART0 (RXD0 & TXD0) and UART1 (RXD1 & TXD1). UART1 is used to upload the firmware/program.
I2C Pins NodeMCU has I2C functionality support but due to the internal functionality of these pins, you have to find which pin is I2C.

>>Specification

  • Microcontroller: Tensilica 32-bit RISC CPU Xtensa LX106
  • Operating Voltage: 3.3V
  • Input Voltage: 7-12V
  • Digital I/O Pins (DIO): 16
  • Analog Input Pins (ADC): 1
  • UARTs: 1
  • SPIs: 1
  • I2Cs: 1
  • Flash Memory: 4 MB
  • SRAM: 64 KB
  • Clock Speed: 80 MHz
  • USB-TTL based on CP2102 is included onboard, Enabling Plug n Play
  • PCB Antenna
  • Small Sized module to fit smartly inside your IoT projects

iv. Raspberry Pi

The Raspberry Pi is a series of small single-board computers developed in the United Kingdom by the Raspberry Pi Foundation. Early on, the Raspberry Pi project leaned towards the promotion of teaching basic computer science in schools and in developing countries. Later, the original model became far more popular than anticipated, selling outside its target market for uses such as robotics. It is now widely used in many areas, such as for weather monitoring, because of its low cost and high portability.

v. LCD display

16×2 LCD

LCD modules are very commonly used in most embedded projects, the reason being its cheap price, availability, and programmer-friendly. Most of us would have come across these displays in our day to day life, either at PCO’s or calculators. The appearance and the pinouts have already been visualized above now let us get a bit technical.

16×2 LCD is named so because; it has 16 Columns and 2 Rows. There are a lot of combinations available like 8×1, 8×2, 10×2, 16×1, etc. but the most used one is the 16×2 LCD. So, it will have (16×2=32) 32 characters in total and each character will be made of 5×8 Pixel Dots. 

>>Pin configuration

No:Pin Name:Description
1Vss (Ground)Ground pin connected to system ground
2Vdd (+5 Volt)Powers the LCD with +5V (4.7V – 5.3V)
3VE (Contrast V)Decides the contrast level of display. Grounded to get maximum contrast.
4Register SelectConnected to Microcontroller to shift between command/data register
5Read/WriteUsed to read or write data. Normally grounded to write data to LCD
6EnableConnected to Microcontroller Pin and toggled between 1 and 0 for data acknowledgment
7Data Pin 0  Data pins 0 to 7 form an 8-bit data line. They can be connected to Microcontroller to send 8-bit data. These LCDs can also operate on the 4-bit mode in such case Data pin 4,5,6 and 7 will be left free.
8Data Pin 1
9Data Pin 2
10Data Pin 3
11Data Pin 4
12Data Pin 5
13Data Pin 6
14Data Pin 7
15LED PositiveBacklight LED pin positive terminal
16LED NegativeBacklight LED pin negative terminal

>>Specification

  • Operating Voltage is 4.7V to 5.3V
  • Current consumption is 1mA without backlight
  • Alphanumeric LCD display module, meaning can display alphabets and numbers
  • Consists of two rows and each row can print 16 characters.
  • Each character is build by a 5×8 pixel box
  • Can work on both 8-bit and 4-bit mode
  • It can also display any custom generated characters
  • Available in Green and Blue Backlight

vi. L293D motor driver

The L293D is a popular 16-Pin Motor Driver IC. As the name suggests it is mainly used to drive motors. A single L293D IC is capable of running two DC motors at the same time; also the direction of these two motors can be controlled independently. So if you have motors that have an operating voltage less than 36V and operating current less than 600mA, which are to be controlled by digital circuits like Op-Amp, 555 timers, digital gates, or even Micron rollers like Arduino, PIC, ARM, etc.

>>Pin configuration

No.Pin NameDescription
1Enable 1,2This pin enables the input pin Input 1(2) and Input 2(7)
2Input 1Directly controls the Output 1 pin. Controlled by digital circuits
3Output 1Connected to one end of  Motor 1
4GroundGround pins are connected to ground of circuit (0V)
5GroundGround pins are connected to ground of circuit (0V)
6Output 2Connected to another end of  Motor 1
7Input 2Directly controls the Output 2 pin. Controlled by digital circuits
8Vcc2 (Vs)Connected to Voltage pin for running motors (4.5V to 36V)
9Enable 3,4This pin enables the input pin Input 3(10) and Input 4(15)
10Input 3Directly controls the Output 3 pin. Controlled by digital circuits
11Output 3Connected to one end of Motor 2
12GroundGround pins are connected to ground of circuit (0V)
13GroundGround pins are connected to ground of circuit (0V)
14Output 4Connected to another end of Motor 2
15Input 4Directly controls the Output 4 pin. Controlled by digital circuits
16Vcc2 (Vss)Connected to +5V to enable IC function

>>Specification

  • Can be used to run Two DC motors with the same IC.
  • Speed and Direction control is possible
  • Motor voltage Vcc2 (Vs): 4.5V to 36V
  • Maximum Peak motor current: 1.2A
  • Maximum Continuous Motor Current: 600mA
  • Supply Voltage to Vcc1(VSS): 4.5V to 7V
  • Transition time: 300ns (at 5Vand 24V)
  • Automatic Thermal shutdown is available
  • Available in 16-pin DIP, TSSOP, SOIC packages

vii. DC motor

A DC motor is any of a class of rotary electrical motors that converts direct current electrical energy into mechanical energy. The most common types rely on the forces produced by magnetic fields. Nearly all types of DC motors have some internal mechanism, either electromechanical or electronic, to periodically change the direction of current in a part of the motor.

>>Specification

  • Standard 130 Type DC motor
  • Operating Voltage: 4.5V to 9V
  • Recommended/Rated Voltage: 6V
  • Current at No load: 70mA (max)
  • No-load Speed: 9000 rpm
  • Loaded current: 250mA (approx)
  • Rated Load: 10g*cm
  • Motor Size: 27.5mm x 20mm x 15mm
  • Weight: 17 gram

4. Circuit connections

>>At the NodeMCU end

The output pin of the LM35 temperature sensor is connected to the A0 pin of NodeMCU and the Vcc pin of the sensor is connected to the 3.3V supply pin of NodeMCU & the Ground pin to the GND pin of the NodeMCU.

>>At the Raspberry Pi end

We are using the GPIO pin configuration on the Raspberry Pi.

>LCD connections– RS=7, E=8, D4=25, D5=24, D6=23, D7=18

>DHT11 connections– Vcc pin to 5V, Ground pin to GND and Data o/p pin to 4.

>L293D connections–  Connect the pins 8 and 16 to 5V. Connect pin 4 to the GND. Then connect the pins 1, 2 & 7 of the L293D to the 2, 9 & 10 GPIO pins on the Rpi. Connect pin 3 and 6 to the dc motor.

5. Online services used

>>AWS- Amazon Web Services

Amazon Web Services (AWS) is a subsidiary of Amazon providing on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis. These cloud computing web services provide a variety of basic abstract technical infrastructure and distributed computing building blocks and tools. AWS’s version of virtual computers emulates most of the attributes of a real computer, including hardware central processing units (CPUs) and graphics processing units (GPUs) for processing; local/RAM memory; hard-disk/SSD storage; a choice of operating systems; networking; and pre-loaded application software such as web servers, databases, and customer relationship management (CRM).

As of 2020, AWS comprises more than 175 products and services including computing, storage, networking, database, analytics, application services, deployment, management, mobile, developer tools, and tools for the Internet of Things. Most services are not exposed directly to end users, but instead offer functionality through APIs for developers to use in their applications. Amazon Web Services’ offerings are accessed over HTTP, using the REST architectural style and SOAP protocol for older APIs and exclusively JSON for newer ones.

>>Flask

Flask is a micro web framework written in Python. It is classified as a micro framework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions. However, Flask supports extensions that can add application features as if they were implemented in Flask itself. Extensions exist for object-relational mappers, form validation, upload handling, various open authentication technologies and several common framework related tools.

6. Code

>>NodeMCU code

#include "FS.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

// Update these with values suitable for your network.

const char* ssid = "Wifi_Name";
const char* password = "Wifi_password";

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

const char* AWS_endpoint = "a1ttf08wevovu1-ats.iot.us-east-2.amazonaws.com"; //MQTT broker ip

void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();

}
WiFiClientSecure espClient;
PubSubClient client(AWS_endpoint, 8883, callback, espClient); //set MQTT port number to 8883 as per //standard
long lastMsg = 0;
char msg[50];
int value = 0;

void setup_wifi() {

delay(10);
// We start by connecting to a WiFi network
espClient.setBufferSizes(512, 512);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

timeClient.begin();
while(!timeClient.update()){
timeClient.forceUpdate();
}

espClient.setX509Time(timeClient.getEpochTime());

}

void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESPthing")) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");

char buf[256];
espClient.getLastSSLError(buf,256);
Serial.print("WiFiClientSecure SSL error: ");
Serial.println(buf);

// Wait 5 seconds before retrying
delay(5000);
}
}
}

void setup() {

Serial.begin(115200);
Serial.setDebugOutput(true);
// initialize digital pin LED_BUILTIN as an output.
pinMode(A0, INPUT);
setup_wifi();
delay(1000);
if (!SPIFFS.begin()) {
Serial.println("Failed to mount file system");
return;
}


// Load certificate file
File cert = SPIFFS.open("/cert.der", "r"); //replace cert.crt eith your uploaded file name
if (!cert) {
Serial.println("Failed to open cert file");
}
else
Serial.println("Success to open cert file");

delay(1000);

if (espClient.loadCertificate(cert))
Serial.println("cert loaded");
else
Serial.println("cert not loaded");

// Load private key file
File private_key = SPIFFS.open("/private.der", "r"); //replace private eith your uploaded file name
if (!private_key) {
Serial.println("Failed to open private cert file");
}
else
Serial.println("Success to open private cert file");

delay(1000);

if (espClient.loadPrivateKey(private_key))
Serial.println("private key loaded");
else
Serial.println("private key not loaded");

// Load CA file
File ca = SPIFFS.open("/ca.der", "r"); //replace ca eith your uploaded file name
if (!ca) {
Serial.println("Failed to open ca ");
}
else
Serial.println("Success to open ca");

delay(1000);

if(espClient.loadCACert(ca))
Serial.println("ca loaded");
else
Serial.println("ca failed");

Serial.print("Heap: "); Serial.println(ESP.getFreeHeap());
}

void loop() {

if (!client.connected()) {
reconnect();
}
client.loop();
  int v = analogRead(A0);
  float cel= (v*2.6*100)/1024;
  delay(5000);
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
++value;
snprintf (msg, 75, "%f degree celcius", cel); 
Serial.println(msg);
client.publish("outTopic", msg);
delay(5000);
}
}

>>Python code (for Raspberry Pi)

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import Adafruit_DHT
from time import sleep
import RPi.GPIO as G
from Adafruit_CharLCD import Adafruit_CharLCD
DHT_PIN = 11
DHT_SENSOR = Adafruit_DHT.DHT11



Motor1 = 2    # Input Pin
Motor2 = 9    # Input Pin
Motor3 = 10    # Enable Pin

Settemp =int(input('Enter the setted temperature: '))
lcd = Adafruit_CharLCD(rs=7, en=8, d4=25, d5=24, d6=23, d7=18, cols=16, lines=2)
G.setmode(G.BCM)
G.setup(DHT_PIN,G.IN)

G.setup(Motor1,G.OUT)
G.setup(Motor2,G.OUT)
G.setup(Motor3,G.OUT)

lcd.message("Welcome")
sleep(2)
lcd.clear()

host = "a1ttf08wevovu1-ats.iot.us-east-2.amazonaws.com"
certPath = "7703953849-certificate.pem.crt"
clientId = "Gautam"
topic = "outTopic"

a= AWSIoTMQTTClient(clientId)
a.configureEndpoint(host, 8883)
a.configureCredentials("AmazonRootCA1.pem.crt","7703953849-private.pem.key","7703953849-certificate.pem.crt")



def customCallback(client, userdata, Message):
	RoomTemp = Message.payload
	print("RoomTemp : ",RoomTemp)
	lcd.set_cursor(0,0)
        lcd.message("Room Temp: ")
        lcd.set_cursor(11,0)
        lcd.message(str(RoomTemp))
        sleep(2)

	if(RoomTemp < str(Settemp)):
                print("Compressor OFF")
		lcd.clear()
	        lcd.set_cursor(1, 0)
       		lcd.message("Compressor OFF")		
                G.output(Motor3,G.LOW)
	
        else:
                print("Compressor ON")
                lcd.clear()
                lcd.set_cursor(1, 0)
                lcd.message("Compressor ON")
		G.output(Motor1,G.HIGH) 
		G.output(Motor2,G.LOW)
 	        G.output(Motor3,G.HIGH)


supplytempprev = 0
a.connect()

while 1:
   humidity, supplytemp= Adafruit_DHT.read(DHT_SENSOR, DHT_PIN)
   if supplytemp is not None:
        #print("Temp={0:0.1f}C %".format(supplytemp))
	supplytemp = int(supplytemp)
	lcd.set_cursor(0,0)
	lcd.message("Sup Temp: ")
	lcd.set_cursor(11,0)
	lcd.message(str(supplytemp))
	sleep(2)
	if supplytemp == supplytempprev:
                print("Compressor OFF")
                lcd.clear()
                lcd.set_cursor(1, 0)
                lcd.message("Compressor OFF")
                G.output(Motor3,G.LOW)
        else:
                print("Compressor ON")
                lcd.clear()
                lcd.set_cursor(1, 0)
                lcd.message("Compressor ON")
                G.output(Motor1,G.HIGH) 
		G.output(Motor2,G.LOW)
		G.output(Motor3,G.HIGH)
   a.subscribe("outTopic",1,customCallback)
   humidity, supplytempprev= Adafruit_DHT.read(DHT_SENSOR, DHT_PIN)
   
   sleep(5)
a.disconnect()

>>Flask code

  • Python code
from flask import Flask, redirect, url_for, render_template, request, session, flash
from datetime import timedelta


app=Flask(__name__)
app.secret_key = "vaibhav"
app.permanent_session_lifetime = timedelta(minutes=30)

@app.route("/", methods=["POST","GET"])
def home():
	if request.method == "POST":
		return redirect(url_for("login"))
	else:
		if request.method == "GET":
			return render_template("index.html")

@app.route("/login", methods=["POST","GET"])
def login():
	if request.method == "POST":
		session.permanent = True
		user=request.form["nm"]
		session["user"] = user
		flash("Login Successful")
		return redirect(url_for("temp"))
	else:
		if "user" in session:
			flash("Already Logged In")
		return render_template("login.html")

@app.route("/temp", methods=["POST","GET"])
def temp():
	return render_template("temp.html")




app.run(debug=True)
  • CSS code
*
{
	margin: 0;
	padding: 0;
	font-family: 'Roboto', sans-serif;
}

body
{
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background : #101010;
}
.container
{
    position: relative;
    width: 900px;
    display: flex;
    justify-content: space-around;
    
    
}
.container .card
{
    position: relative;
    width: 250px;
    background: linear-gradient(180deg,#1b1b1b,#222,#1b1b1b);
    display: flex;
    justify-content: center;
    align-items: center;
    height: 300px;
    border-radius: 4px;
    text-align: center;
    overflow: hidden;
    transition: 0.5s;
    margin-left: 10px
}
.container .card:hover
{
    transform: translateY(-10px);
    box-shadow: 0 15px 35px rgba(0,0,0,.5);
}
.container .card:before
{
    content: '';
    position: absolute;
    top: 0;
    left: -50%;
    width: 100%;
    height: 100%;
    background: rgba(255,255,255,.03);
    pointer-events: none;
    z-index: 1;
    
}
.percent
{
    position: relative;
    width: 150px;
    height: 150px;
    border-radius: 50%;
    box-shadow: inset 0 0 50px #000;
    background: #222;
    z-index: 1000;
}
.percent .number
{
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 50%;
}
.percent .number h2
{
    color: #777;
    font-weight: 700;
    font-size: 24px;
    transition: 0.5;
}
.card:hover .percent .number h2
{
    color: #fff;
    font-size: 35px;
}
.percent .number h2 span
{
    font-size: 24px;
    color: #777;
}
.card:hover .percent .number h2 span
{
    color: #fff;
    transition: 0.5;
    
}
.text 
{
    position: relative;
    color: #777;
    font-weight: 700;
    font-size: 18px;
    letter-spacing: 1px;
    text-transform: uppercase;
    transition: 0.5s;
    margin-top: 10px;
}
.card:hover .text
{
    color: #fff;
    
}
svg
{
	position: relative;
	width: 150px;
	height:150px;
	z-index: 1000;
}
svg circle
{
	width: 100%;
	height: 100%;
	fill: none;
	stroke: #191919;
	stroke-width: 10;
	stroke-linejoin: round;
    transform: translate(5px,5px);
}
svg circle:nth-child(2)
{
    stroke-dasharray: 400;
    stroke-dashoffset: 400;
}
.card:nth-child(1) svg circle:nth-child(2)
{
   stroke-dashoffset: calc(440 - (440 * 35) / 100);
   stroke: #00ff43;
    
}
.card:nth-child(2) svg circle:nth-child(2)
{
   stroke-dashoffset: calc(440 - (440 * 800) / 100);
   stroke: #00a1ff;
    
}
.card:nth-child(3) svg circle:nth-child(2)
{
    stroke-dashoffset: calc(440 - (440 * 35) / 100);
   stroke: #ff04f7;
    
}
.button-success
{        
    background: #222;
    color: #fff;
    padding: 10px;
}
  • HTML code
<!DOCTYPE html>
<html>
<head>
	<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.3/build/pure-min.css" integrity="sha384-4ZPLezkTZTsojWFhpdFembdzFudphhoOzIunR1wH6g1WQDzCAiPvDyitaK67mp0+" crossorigin="anonymous">
	<title>Home Page</title>
</head>
<body>
	<p><h1>Welcome to my Website</h1></p>
	<form method="POST">
		<button class="pure-button pure-button-active">Get Started!</button>
	</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
	<title>Temprature</title>	
	<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}">
</head>
<body>
    
	<div class="container">
		<div class="card">
			<div class="box">
				<div class="percent">
					<svg>
						<circle cx="70" cy="70" r="70"></circle>
						<circle cx="70" cy="70" r="70"></circle>
					</svg>
					<div class="number">
						<h2>35<span>&#8451</span></h2>
					</div>
				</div>
				<h2 class="text">Temperature</h2>
			</div>
		</div>
		<div class="card">
			<div class="box">
				<div class="percent">
					<svg>
						<circle cx="70" cy="70" r="70"></circle>
						<circle cx="70" cy="70" r="70"></circle>
					</svg>
					<div class="number">
						<h2>500<span>kWh</span></h2>
					</div>
				</div>
				<h2 class="text">Power</h2>
			</div>
		</div>
		<div class="card">
			<div class="box">
				<div class="percent">
					<svg>
						<circle cx="70" cy="70" r="70"></circle>
						<circle cx="70" cy="70" r="70"></circle>
					</svg>
					<div class="number">
						<h2><span>&#8377</span>1200</h2>
					</div>
				</div>
				<h2 class="text">Cost</h2>
			</div>
		</div>
	</div>
</body>
</html>

7. Credits

>Adhyoksh Jyoti (Circuit design and Project documentation)

>Chandrima Mazumdar (LM35 + NodeMCU)

>Gautham Uppal (Project idea, AWS and Raspberry Pi)

>Vaibhav Balotra (Flask, HTML and CSS code)

Creating a multiplication Skill in Alexa using python

Written By Monisha Macharla

Hi, I'm Monisha. I am a tech blogger and a hobbyist. I am eager to learn and explore tech related stuff! also, I wanted to deliver you the same as much as the simpler way with more informative content. I generally appreciate learning by doing, rather than only learning. Thank you for reading my blog! Happy learning!

RELATED POSTS

How to Simulate IoT projects using Cisco Packet Tracer

How to Simulate IoT projects using Cisco Packet Tracer

In this tutorial, let's learn how to simulate the IoT project using the Cisco packet tracer. As an example, we shall build a simple Home Automation project to control and monitor devices. Introduction Firstly, let's quickly look at the overview of the software. Packet...

How to design a Wireless Blind Stick using  nRF24L01 Module?

How to design a Wireless Blind Stick using nRF24L01 Module?

Introduction Let's learn to design a low-cost wireless blind stick using the nRF24L01 transceiver module. So the complete project is divided into the transmitter part and receiver part. Thus, the Transmitter part consists of an Arduino Nano microcontroller, ultrasonic...

How to implement Machine Learning on IoT based Data?

How to implement Machine Learning on IoT based Data?

Introduction The industrial scope for the convergence of the Internet of Things(IoT) and Machine learning(ML) is wide and informative. IoT renders an enormous amount of data from various sensors. On the other hand, ML opens up insight hidden in the acquired data....

Smart Display Board based on IoT and Google Firebase

Smart Display Board based on IoT and Google Firebase

Introduction In this tutorial, we are going to build a Smart Display Board based on IoT and Google Firebase by using NodeMCU8266 (or you can even use NodeMCU32) and LCD. Generally, in shops, hotels, offices, railway stations, notice/ display boards are used. They are...

Smart Gardening System – GO GREEN Project

Smart Gardening System – GO GREEN Project

Automation of farm activities can transform agricultural domain from being manual into a dynamic field to yield higher production with less human intervention. The project Green is developed to manage farms using modern information and communication technologies....

How to build a Safety Monitoring System for COVID-19

How to build a Safety Monitoring System for COVID-19

It is expected that the world will need to battle the COVID-19 pandemic with precautious measures until an effective vaccine is developed. This project proposes a real-time safety monitoring system for COVID-19. The proposed system would employ an Internet of Things...

Air Quality Monitoring using NodeMCU and MQ2 Sensor – IoT

Air Quality Monitoring using NodeMCU and MQ2 Sensor – IoT

There have been many incidents like explosions and fire due to certain gases leakage. Such incidents can cause dangerous effects if the leakage is not detected at an early stage. Therefore, Measurement and control of these types of toxic gases present in the...

VIDEOS – FOLLOW US ON YOUTUBE

EXPLORE OUR IOT PROJECTS

IoT Smart Gardening System – ESP8266, MQTT, Adafruit IO

Gardening is always a very calming pastime. However, our gardens' plants may not always receive the care they require due to our active lifestyles. What if we could remotely keep an eye on their health and provide them with the attention they require? In this article,...

How to Simulate IoT projects using Cisco Packet Tracer

In this tutorial, let's learn how to simulate the IoT project using the Cisco packet tracer. As an example, we shall build a simple Home Automation project to control and monitor devices. Introduction Firstly, let's quickly look at the overview of the software. Packet...

All you need to know about integrating NodeMCU with Ubidots over MQTT

In this tutorial, let's discuss Integrating NodeMCU and Ubidots IoT platform. As an illustration, we shall interface the DHT11 sensor to monitor temperature and Humidity. Additionally, an led bulb is controlled using the dashboard. Besides, the implementation will be...

All you need to know about integrating NodeMCU with Ubidots over Https

In this tutorial, let's discuss Integrating NodeMCU and Ubidots IoT platform. As an illustration, we shall interface the DHT11 sensor to monitor temperature and Humidity. Additionally, an led bulb is controlled using the dashboard. Besides, the implementation will be...

How to design a Wireless Blind Stick using nRF24L01 Module?

Introduction Let's learn to design a low-cost wireless blind stick using the nRF24L01 transceiver module. So the complete project is divided into the transmitter part and receiver part. Thus, the Transmitter part consists of an Arduino Nano microcontroller, ultrasonic...

Sending Temperature data to ThingSpeak Cloud and Visualize

In this article, we are going to learn “How to send temperature data to ThingSpeak Cloud?”. We can then visualize the temperature data uploaded to ThingSpeak Cloud anywhere in the world. But "What is ThingSpeak?” ThingSpeak is an open-source IoT platform that allows...

Amaze your friend with latest tricks of Raspberry Pi and Firebase

Introduction to our Raspberry Pi and Firebase trick Let me introduce you to the latest trick of Raspberry Pi and Firebase we'll be using to fool them. It begins with a small circuit to connect a temperature sensor and an Infrared sensor with Raspberry Pi. The circuit...

How to implement Machine Learning on IoT based Data?

Introduction The industrial scope for the convergence of the Internet of Things(IoT) and Machine learning(ML) is wide and informative. IoT renders an enormous amount of data from various sensors. On the other hand, ML opens up insight hidden in the acquired data....

Smart Display Board based on IoT and Google Firebase

Introduction In this tutorial, we are going to build a Smart Display Board based on IoT and Google Firebase by using NodeMCU8266 (or you can even use NodeMCU32) and LCD. Generally, in shops, hotels, offices, railway stations, notice/ display boards are used. They are...

Smart Gardening System – GO GREEN Project

Automation of farm activities can transform agricultural domain from being manual into a dynamic field to yield higher production with less human intervention. The project Green is developed to manage farms using modern information and communication technologies....