Showing posts with label home automation. Show all posts
Showing posts with label home automation. Show all posts

Thursday, October 23, 2014

Tah - Lego block for Internet of Things


TAH Main Board
In this blog post I am going to introduce the Tah platform and talk about some of the applications using it.

Tah is a hardware as well as a software platform.  The hardware has following characteristics
  1. An Arduino with Bluetooth Low Energy (BLE)
  2. Onboard USB (HID device) - emulating a keyboard and a mouse
  3. Great building block (like a LEGO) for your home automation systems using Arduino.

USB HID-Compatible
ATmega32u4 — the microcontroller at the heart of Tah — has onboard USB 2.0 support, that is used to directly program the Tah without having to use a USB-to-Serial converter. Tah can also act as a USB human interface device (HID), which enables you to create your own keyboard, mouse, joystick, or other input devices, all without the need for installing special software on the host computer. If you want to create a new smarter custom keyboard that communicates with your smartphone, you need not look beyond the Tah. It already has sample applications that allow you to control your PC, Mac, Linux, PlayStation and Xbox without ever needing to write any code for those platforms — all you need to do is program your Tah board and make a smartphone app, for which we’ve also provided open source examples for both iOS and Android to get you started.

Bluetooth Beacon

Each Tah board can serve as a Bluetooth beacon which tells your smartphone where exactly it is located based on the beacon’s unique identifier. This is amazing for indoor navigation, contextual notifications, and microlocalization.



Here are some of the interesting applications that can be built using the Tah and its shields.

Infrared Control (IR Transceiver Shield)

IR has been used for near range wireless communication for a long time. We have TVs, music systems, air conditioners and so many other things that have their own remote control  
We have created an IR shield which has a transmitter as well as a receiver on board. With this connected to your Tah, you have a universal remote that can be controlled from your smartphone. Forget keeping a bunch of remotes to control everything in your living room. You could do all of that from a single app on your phone. 

Relays (Relays + Sensors Shield)

Electronics is usually associated with low voltage DC appliances but so much of what we use everyday runs on 110V/220V AC. All our light bulbs, fans and everything else.  
To control these there is a Relay shield that translates signals between DC and AC so to speak. One can use the GPIO pins 2 and 3 from the Tah to control 2 relays. 
Bridge the gap between electronics and electrical with this relay plus sensor shield. It comes with its own app which you can use with some standard sensors such as the depth and temperature sensors among others.
  • Input working voltage: 7V to 12V DC
  • Two Relays rated 5V DC.
  • Load Capacity: 10A/120VAC, 10A/24VDC, 7A/250VAC
  • Relays are connected to Pin number 2 and 3 of Tah
  • Digital Pin Numbers 4 to 13 & Analog Pin Numbers A0 to A5 all are connected to 3 pin standard Grove connector

Arduino

That's why we have the Shield Shield which consists of the Arduino UNO R3 layout which let's you use the already available shields in their projects. This shield makes Tah compatible with all existing Arduino Shields, It means all your Arduino-compatible shields are also compatible with the Tah. (Input working voltage: 7V to 12V DC)

---
By no means is the above list comprehensive. There are many more amazing things that can be built using the Tah.  


Examples on the website. A forum to discuss more about this.

If you would like this device, you can grab them here.

(This is a product of Reavealing Hour Creations who run this blog and the IOT Community)


Wednesday, October 2, 2013

Home Automation with RaspberryPi Python - Django


Home Automation with RaspberryPi Python - Django

So after attending the 2 meet-ups for IOT-Pune. I got a Raspberry Pi and decided to play around with it a little bit. The following post will walk you through the steps needed to turn on/off a light bulb.

Things needed
1. Raspberry Pi
2. Relay switch
3. light bulb with wire to plug into main power supply

Lets us start!!!

  • sudo apt-get install python-dev python-setuptools
  • sudo pip install django
  • django-admin.py startproject mysite
  • cd mysite/
  • django-admin.py startapp ledblink
  • cd mysite
  • open file named setting.py and add the ledblink app in the INSTALLED_APPS so that it looks like this
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'ledblink',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)
  • add this to the templates dir make sure you  add import os at the top of the page
TEMPLATE_DIRS = (
     os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)
  • cd ledblink
  • open the views.py file and change it to this
from django.shortcuts import render
from django.http import HttpResponse
import RPi.GPIO as GPIO
import time


GPIO.setmode(GPIO.BOARD)
GPIO.setup(18,GPIO.OUT)


def blinker(request):
    if 'on' in request.POST:
        GPIO.output(18,1)
    elif 'off' in request.POST:
        GPIO.output(18,0)
    return render(request,'control_page.html')
    
  • Let us add the template control pages so go ahead and create a templates directory in your ledblink app and add the following html code and name it control_page.html
<!DOCTYPE html>
<html>
<head>

</head>
<body>

<form action="" method="post">{% csrf_token %}
<input type="submit" name="on" value="on" />
<input type="submit" name="off" value="off" />
</form>
</body>
</html>

  • now let us create a url that links to this view. Goto the urls.py file in mysite directory cd ../mysite
from django.conf.urls import patterns, include, url
from ledblink.views import blinker
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    url(r'^ledblink/$',blinker),
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^mysite/', include('mysite.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)
  • Goto main folder of the project where the manage.py file is located and run the following command
sudo python manage.py runserver 192.168.0.106:8000

open up a web browser and type http://192.168.0.106:8000/ledblink/ in the address bar and you should have the following result




now lets get to the part where we connect every thing to the raspberry pi.



  • Sorry I couldn't get a better picture even though Nishant suggested to take the book out. :P But yoy connect the 5V out of the Pi that is pin 2 to the positive on the relay . The ground pin 6 to the regative of the relay and finaly GPIO18 to the corresponding pin on the relay board.

  • Plug the bulb in the main power supply. Go ahead and try turning on the bulb from the web Browser


Saturday, July 13, 2013

Open Source Home Automation Project using Arduino UNO + Ethernet Shield



This is Open Source Home Automation Project based on Arduino Uno and Arduino Wiznet based Ethernet shield.





How Does it Work

The main brain for this project is Arduino UNO Board along with Arduino Ethernet Shield to give it a wireless connectivity.Arduino runs a code to control a Relay board according to the input and also serves a web page through which respective output to the relay board can be controlled.Through relay controller board we can control lamps, tubes or any AC power sockets.
You will be able to control all of your AC Appliances wirelessly with the help of any WIFI Enabled device.

STEP 1:


Relay Controller Board Build Tutorial:

Quantity of the components depends upon how many channels you want e.g. if you want to control more than one light then you will have to add that much number of relays on your controller board.
Here is the material list which will be needed to build the board: (Quantity of the components given for making 1 channel relay controller)


Sr.NoComponent NamesQuantity
1Relay (I have used GOODSKY RWH-SH-105D Relay)1
2Transistor 2N39041
31K Resistor2
410K Resistor1
51N4148 Diode1
6Red Led 3mm1
73 Pin PCB Mount Connector1
81 Pin PCB Mount Connector1


Above components are for making of single controller board you can multiply number of the components depending on how many relay controller you want.







Here in the circuit diagram Pin no.2 will be connected to the arduino control output pin and other two will be connected to +5V and Gnd accordingly.
After soldering all of your components according to the above circuit diagram the board should look like this.




Front View




Rear View



This is single relay controller board. You can extend this to as many as you want. I have made 5 channel relay controller board as below.







Note:

All the usual warnings apply: Mains voltage (120VAC or 220VAC) can kill you. This project, if done incorrectly, could certainly burn down your house. Do not work on or solder to any part of a project while it is plugged into the wall socket - just unplug it before modifying anything!


STEP 2:

Getting IP Address Of Arduino Ethernet Shield:


 Mount your Arduino Ethernet shield on Arduino Uno as shown:





Now connect your Uno Board to PC with USB cable and open Arduino IDE. After Opening up you will find blank Arduino window. Now go to File--> Example --> Ethernet --> dhcp address printer sketch. Your Ethernet shields MAC address is printed on back of it as follow you will need this in DHCP ADDRESS PRINTER code to get the IP address of your Ethernet shield.



In DHCP address printer sketch put your MAC address as given on back of the Ethernet shield and upload it to the Arduino board.




After finished uploading connect Arduino Ethernet shield to internet with Ethernet cable once connected then open up you serial monitor of Arduino IDE the IP address allotted to your Ethernet shield will be displayed e.g. (xxx.xxx.x.xxx) note it down somewhere because you are going to need this in further codes.


STEP 3:


BuildingMainCircuitConnection :

Now we are ready with our Relay controller board. So, it’s time to move on to the Main Circuit Connections. Here I have given the pin configuration for the whole Autohome Project.

Arduino Digital Pin No.Pin Usage
4will be used for Infrared Receiver
5used as Output Pins to control Relays
6used as Output Pins to control Relays
7used as Output Pins to control Relays
8used as Output Pins to control Relays
9used as Output Pins to control Relays
10will be used by Arduino Ethernet Shield
11will be used by Arduino Ethernet Shield
12will be used by Arduino Ethernet Shield
13will be used by Arduino Ethernet Shield

Note: For relays it is recommended to power it from separate source not from Arduino (I have powered it from Arduino only but since here we are working with single board. As board number increases Arduino won’t be able to supply sufficient power to the boards.)
Here is the connection diagram:



In this way you can do necessary soldering work to make following connection.
You can also make your own protoshield which can easily fit on top Arduino like this:






Once you finish soldering stuff, now you are ready for your main code upload.


STEP 4:

Uploading Arduino AutoHome code to the Board:

Here is the Arduino AutoHome code just copy and paste it into your Arduino IDE sketch.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html
//for use with W5100 based ethernet shields
// this project is hosted at
// http://code.google.com/p/arduino-autohome/
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x78, 0xE0 }; // <------- PUT YOUR MAC Address Here
byte ip[] = { 192, 168, 1, 102 }; // <------- PUT YOUR IP Address Here
byte gateway[] = { 192, 168, 1, 254 }; // <------- PUT YOUR ROUTERS IP Address to which your shield is connected Here
byte subnet[] = { 255, 255, 255, 0 }; // <------- It will be as it is in most of the cases
EthernetServer server(80); // <------- It's Defaulf Server Port for Ethernet Shield
String readString;
//////////////////////
void setup()
{
  pinMode(6, OUTPUT); // Pin Assignment through which relay will be controlled
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  
  
  //start Ethernet
  
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  
  //enable serial data print
  
  Serial.begin(9600);
  Serial.println("server LED test 1.0"); // so that we can know what is getting loaded
}
void loop()
{
   
  
  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        
        //read char by char HTTP request
        if (readString.length() < 100) {
          //store characters to string
          readString += c;
          //Serial.print(c);
        }
        //if HTTP request has ended
        if (c == '\n') {
          ///////////////
          Serial.println(readString); //print to serial monitor for debuging
          /* Start OF HTML Section. Here Keep everything as it is unless you understands its working */
          
          client.println("HTTP/1.1 200 OK"); //send new page
          client.println("Content-Type: text/html");
          client.println();
          //client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
          client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
          client.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://arduino-autohome.googlecode.com/svn/trunk/autohome.css\" />");
          
          
          client.println("</HEAD>");
          client.println("<body bgcolor=\"#D0D0D0\">");
          
          client.println("<hr/>");
          client.println("<hr/>");
          client.println("<h4><center><img border=\"2\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7D936U9HueV3OmYSI_yfSMGiFYI9L5gDeW2ydPt9eTugpNaUxyr_ABI4QjhPSRt3bhA4v_eLg3GYq133qd9QDqu5v7x9OwdsDSfQZyy2fc9bWrEneR1WpAN7LWgdTfMOpehMpzShvW7U/s960/Logo.jpg\" /></center></h4>");
          client.println("<hr/>");
          client.println("<hr/>");
          
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
         
         // Relay Control Code
          client.println("<a href=\"/?relay1on\"\">Turn On Light 1</a>");
          client.println("<a href=\"/?relay1off\"\">Turn Off Light 1</a><br />");
          
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          
          client.println("<a href=\"/?relay2on\"\">Turn On Light 2</a>");
          client.println("<a href=\"/?relay2off\"\">Turn Off Light 2</a><br />");
          
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          
          client.println("<a href=\"/?relay3on\"\">Turn On Light 3</a>");
          client.println("<a href=\"/?relay3off\"\">Turn Off Light 3</a><br />");
          
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          
          client.println("<a href=\"/?relay4on\"\">Turn On Light 4</a>");
          client.println("<a href=\"/?relay4off\"\">Turn Off Light 4</a><br />");
          client.println("<br />");
          client.println("<br />");
          
          
          
         
            // control arduino pin via ethernet Start //
          
          
          if(readString.indexOf("?relay1on") >0)//checks for on
          {
            digitalWrite(6, HIGH); // set pin 4 high
            Serial.println("Led On");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />");
            //client.println("Light 1 Is On");
            client.println("<br />");
        }
          else{
          if(readString.indexOf("?relay1off") >0)//checks for off
          {
            digitalWrite(6, LOW); // set pin 4 low
            Serial.println("Led Off");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />");
            //client.println("Light 1 Is Off");
            client.println("<br />");
        }
          }
          
          if(readString.indexOf("?relay2on") >0)//checks for on
          {
            digitalWrite(7, HIGH); // set pin 4 high
            Serial.println("Led On");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />");
            //client.println("Light 2 Is On");
            client.println("<br />");
          }
          else{
          if(readString.indexOf("?relay2off") >0)//checks for off
          {
            digitalWrite(7, LOW); // set pin 4 low
            Serial.println("Led Off");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />");
            //client.println("Light 2 Is Off");
            client.println("<br />");
          }
          }
          
           if(readString.indexOf("?relay3on") >0)//checks for on
          {
            digitalWrite(8, HIGH); // set pin 4 high
            Serial.println("Led On");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />");
           // client.println("Light 3 Is On");
            client.println("<br />");
          }
          else{
          if(readString.indexOf("?relay3off") >0)//checks for off
          {
            digitalWrite(8, LOW); // set pin 4 low
            Serial.println("Led Off");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />");
            //client.println("Light 3 Is Off");
            client.println("<br />");
          }
          }
          
          
           if(readString.indexOf("?relay4on") >0)//checks for on
          {
            digitalWrite(9, HIGH); // set pin 4 high
            Serial.println("Led On");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />");
            //client.println("Light 4 Is On");
            client.println("<br />");
          }
          else{
          if(readString.indexOf("?relay4off") >0)//checks for off
          {
            digitalWrite(9, LOW); // set pin 4 low
            Serial.println("Led Off");
            client.println("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />");
            //client.println("Light 4 Is Off");
            client.println("<br />");
          }
          }
          
         // control arduino pin via ethernet End //
         
         
         
          // Relay Status Display
          client.println("<center>");
          client.println("<table border=\"5\">");
          client.println("<tr>");
          
          if (digitalRead(6))
          {
           client.print("<td>Light 1 is ON</td>");
           
          }
          else
          {
            client.print("<td>Light 1 is OFF</td>");
           
          }
          
          
          client.println("<br />");
          
          if (digitalRead(7))
          {
           client.print("<td>Light 2 is ON</td>");
           
          }
          else
          {
            client.print("<td>Light 2 is OFF</td>");
            
          }
          
          client.println("</tr>");
          client.println("<tr>");
          
          if (digitalRead(8))
          {
           client.print("<td>Light 3 is ON</td>");
           
          }
          else
          {
            client.print("<td>Light 3 is OFF</td>");
            
          }
          
         
        
         
          if (digitalRead(9))
          {
           client.print("<td>Light 4 is ON</td>");
          
          }
          else
          {
            client.print("<td>Light 4 is OFF</td>");
           
          }
          
          client.println("</tr>");
          client.println("</table>");
          
          client.println("</center>");
          
          
          
          //clearing string for next read
          
          readString="";
          client.println("</body>");
          client.println("</HTML>");
          delay(1);
          //stopping client
          client.stop();
        }
      }
    }
  }
}




Upload this code to your UNO board. Now you are ready to your your Automation Project, just plug your Ethernet shield to router and and you will be able to find the control page on the IP Address specified by in in the Arduino Code. So directly enter the  IP address in the web browser of the the device which is on the same network as that of your Arduino.

So you will have the control page as shown below:





As you understand the code you can modify to your need.
So enjoy controlling things wirelessly..