Project in progress
IoT Command Center - Using Samsung ARTIK Cloud

IoT Command Center - Using Samsung ARTIK Cloud © CC BY-SA

IoT Command center allows you to monitor your home using the ARTIK cloud and automate your Hue light.

  • 3,759 views
  • 1 comment
  • 23 respects

Components and supplies

Necessary tools and machines

3drag
3D Printer (generic)
09507 01
Soldering iron (generic)
Hy gluegun
Hot glue gun (generic)

Apps and online services

About this project

IoT command Center, is a great way to monitor the conditions inside your home and upload data to ARTIK cloud for logging, which you can reference in the future. And also use the ARTIK rules engine to control Hue Light. There are two parts to the project --

  • The Arduino Yun and grove sensor as part of the main IoT Command Center, are used to post temperature , Humidity and Air Quality in the house,based on which various rules are created in the ARTIK cloud to control Hue light bulbs.
  • And a Raspberry Pi A+ is used to create a Key Less door entry mechanism, which sends data for the ARTIK cloud to turn On/Off the lights at home and save energy.

Here is a picture gallery of the features

Here are the Steps to follow to complete the build

IoT Command center -Circuit with Arduino Yun

As part of the Circuit mount the Grove connector shield on the Arduino Yun and make the following connections

  • Air Quality sensor is connected to A0
  • Potentiometer is connected to A1
  • Light Sensor connected to A2
  • Buzzer connected to D6
  • RGB Backlight LCD connected to I2C
  • Temperature and Humidity Sensor connected to I2C

3D print the 3 STL files attached

3D print the STL files ,here you have 3 STL files to print , in my case I am using a Flashforge Creator pro and here are some suggested 3D printer settings

  • 0.3 mm layer height
  • fill density of at-least 25%
  • Temperature -205 , in my case I am using Hatchbox 1.75mm black PLA

3D printing should take about 6 to 7 hours depending on you printer settings

Setup the Arduino Yun

Follow the link below to setup your WiFi details of your Arduino Yun

https://www.arduino.cc/en/Guide/ArduinoYun

In your browser go to http://yun.local as shown in the screen shot below

Remember to give your Yun a name and make a note of the IP address , which you will need to SSH into the Yun

SSH into Yun and Install the ARTIK cloud python library

Open a terminal App(putty in windows) and run the following command

ssh root@IPAddressOfYun

once you have entered you password , install pip package manager using the following commands

opkg update

opkg install distribute

easy_install pip

and then to install the ARTIK python library run

pip install artikcloud

ARTIK Cloud - Developer - Create Application and Device Type

Sign up for new account if you dont have a Samsung account already at https://developer.artik.cloud/

Once you have logged in create an application, under the Dashboard --Application , I am calling mine "YunHomeAutomation"

Once done Create a new Device Type called - "ArduinoYunHome"

And also create a Manifest with the Fields as shown in the screen shot below

ARTIK Cloud -My- add new ArduinoYunHome as a device

Now login to https://artik.cloud/my/devices , and use the connect another device to add the Device type you just created in the above step .

Once done hit the generate token button

ARTIK Cloud -My - Add Phillips Hue as a Device

Also add the Phillips Hue as a device using the connect another device , here you will see a configure button which will ask for your Phillips Hue account details.

Once done you should see all you Phillips Hue light , with the names that you have given them while setting them up using the Hue ios/android app. As you see in the screen shot below I have 3 Hue bulbs

Upload the code

Upload the code attached below and you are now done with you setup of the IoT command center , open the Serial monitor to test and also check out the data log section under my Artik cloud -> Data Logs to verify the the sensor values are logged.

Putting the Electronic components and 3D printed together

To add the electronic components you will need a Hot glue gun and at-least 16 2-56 screws and nuts as shown in the picture below

Create ARTIK cloud rules

Now we are going setup a couple of ARTIK cloud rules to test our setup as shown in the video below, basically when we move the potentiometer dial to one end, we will post data to ARTIK cloud, which in turn will trigger a rule to turn on one lamp and the color of the other hue light to blue.

And when the potentiometer dial is moved to other direction we will turn off the one lamp and turn the color of the other light to red.

As part of the rule setup as shown in the screen shot below, you will have to decide the time the rule needs to be run, if you plan on giving a specific time(suggestion for testing keep this blank for your first rule)

Choose the Device Activity to monitor, here as you see in the screen shot below we are going to select ArduinoYunHome followed by homeon = 1

And then in the Send action section we are going to

  • select the Office Lamp to turn seton.
  • and the Color for living room lamp to blue =255

similarly create another rule and set

  • ArduinoYunHome :homeon = 0
  • In the action set Office Lamp to turn setoff
  • and the Color for living room lamp to red =255

For the second part of the project we are going to build a key less door entry mechanism , which will turn on/off the hue lights when the door is open/closed , using a ARTIK cloud rule. Here is a quick video demo of my setup

Keyless Door Entry -Circuit with Raspberry Pi A+

As part of the circuit

  • Connect the servo to GPIO pin number 18 on the Pi, which is a PWM pin
  • To power up the servo I am using 4 AA batteries (this is a temporary setup, but in the final setup we are going to cut a USB cable to power up the servo)
  • Connect the GND pin of the Pi to GND pin of battery pack and the servo.
  • I am also using a 1K ohms resistor to protect the GPIO pin from unexpected high current .

Test the Servo

Now lets write a small program to test the servo motor. Copy paste the code below into the nano editor

sudo nano servo.py

you will also have to create a file, servoState.txt to store the state of the servo, basically to check the position of servo, that is if the door is open or closed

import RPi.GPIO as GPIO  
import time  
import sys  
argVal = sys.argv[1]  
print argVal  
GPIO.setmode(GPIO.BCM)  
GPIO.setup(18, GPIO.OUT)  
pwm = GPIO.PWM(18, 50)  
pwm.start(7.5)  
try:  
#Reading the servo state value from the file to check if is Open/Closed 
       fRead = open('servoState.txt')  
       stateVal = fRead.read()  
print 'State value in file:'+ stateVal  
       fRead.close()  
if argVal == 'open' and stateVal == 'close': #Open the door 
print 'opening the servo lock' 
               pwm.ChangeDutyCycle(7.5)  # turn towards 90 degree #Open  
               fWrite = open('servoState.txt','w')  
               fWrite.write('open')  
               fWrite.close()  
               time.sleep(1)  
elif argVal == 'close' and  stateVal == 'open': #Close the door 
               pwm.ChangeDutyCycle(2.5)  # turn towards 0 degree 
               time.sleep(1) # sleep 1 second 
print 'closing the servo lock' 
#pwm.ChangeDutyCycle(12.5) # turn towards 180 degree 
               fWrite = open('servoState.txt','w')  
               fWrite.write('close')  
               fWrite.close()  
               time.sleep(1)  
else:  
print 'do nothing' 
#except KeyboardInterrupt: 
       pwm.stop()  
       GPIO.cleanup()  
except IOError as e:  
print "I/O error({0}): {1}".format(e.errno, e.strerror)  

you will also have to create a file, servoState.txt to store the state of the servo, basically to check the position of servo, that is if the door is open or closed

sudo nano servoState.txt

and type in open

Now to test type in, this will move the servo to one end

sudo python servo.py close

And to move the servo to the other end type in

sudo python servo.py open

Installing Flask on the Pi

Once you have ssh'ed into you Pi use the following commands to install flask, which is a micro web development framework for Python

sudo apt-get update

sudo apt-get upgrade

install pip , a python package management system using

sudo apt-get install python-pip

install flask , which we are going to use to build a simple web app

sudo pip install flask

Test the flask install

Setup a simple flask web app to check if the installation was successful, open the nano editor and copy paste the code below

from flask import Flask  
app = Flask(__name__)  
@app.route('/')  
def doorlock():  
return 'Hello python flask!' 
if __name__ == '__main__':  
   app.run(host='0.0.0.0', port=80, debug=True)   

sudo nano demoFlaskApp.py

And then to run the web app

sudo python demoFlaskApp.py

To open the app in your browser type: http://ipaddressOfPi:80

3D Print the 4 STL files attached

3D print the STL files ,here you have 3 STL files to print , in my case I am using a Flashforge Creator pro and here are some suggested 3D printer settings

  • 0.2 mm layer height
  • fill density of at-least 35%
  • Temperature -205 , in my case I am using Hatchbox 1.75mm Silver PLA

3D printing should take about 3 to 4 hours depending on you printer settings

Adding 3D printed part Door Knob

To add the 3D printed parts to the door knob, you will have to remove the existing door mechanism, and also remove the metallic rod just behind the open/close knob,.We will use this metallic part to add to the 3D printed part which will then connect to the servo horn.

Link to the servo motor used - Standard Servo Motor (4.4KG*CM) and here is the link to mini breadboard which fits nicely in the Pi A+ enclosure.In addition as part of the setup , as you see in the pictures above I am using a 4AA batteries to drive the servo, but as part of the final setup I plan to use a USB cable cut at one end.

ARTIK Cloud - Developer - Create Device Type

Create a new Device Type called - "PiKeyLessDoorEntry"

And also create a Manifest with the Field "doorState" as shown in the screen shot below, and then activate the Manifest

ARTIK Cloud -My- add new PiKeyLessDoorEntry as a device

Now login to https://artik.cloud/my/devices , and use the connect another device to add the Device type you just created in the above step .

Once done hit the generate token button

Install the ARTIK cloud python library

To install ARTIK cloud python library, we are going to use pip

sudo pip install artikcloud

FTP the Web App Code to Pi

Download the code from the code section below and use a FTP tool like filezilla to upload code to the Pi

In the webApp folder run the following command to run the web-app

sudo python dooropen.py

Also check the Datalog section under My Artik Cloud , to validate that data is logged which we are going to use Rule as part of the next step

ARTIK Cloud -My - Create Rule

Create two simple rules to turn on the Hue light when the door lock is open and one for when the door lock is closed as shown in the screen shots below

Basically , set the Hue Light to ON when the door is opened and set if to off when the door is closed.

Testing Key Less Door Entry mechanism

As part of testing the code you will need to enter a password to open the door , as part of the code it is setup as "artikpi" and yes! you phone/tablet will have to be connected to your home WiFi to get to the web app.

Using the Pebble to Control your Hue lights

Use your pebble to control you Hue lights when you are feeling lazy and still in bed. For this you will have to install the Samsung ARTIK cloud app from the Pebble app store and then follow the instruction to enter you Samsung account details , that you used to log in into my Artik cloud web page above

For more device that you can easily use check out Works with page at

https://artik.cloud/works-with

Code

YunIoTCommandCenterArduino
//Create for the IoT command center project to post data to the ARTIK Cloud

#include "TH02_dev.h"
#include "Arduino.h"
#include"AirQuality.h"
#include "Wire.h" 
#include "rgb_lcd.h"
#include "Process.h"

rgb_lcd lcd;
const int colorR = 0;
const int colorG = 0;
const int colorB = 0;

const int lightPin = A2; 
const int gasPin = A0; 
const int potPin = A1; 
int potValue = 0;
AirQuality airqualitysensor;
int current_quality =-1; 
String airQualityCondition = "Not set";
//For testing only
int loops=2;//changes when sensor value is displayed.
int postArtik = 1; //set to 1 once you have determined your pot postoin
int homeon = 2;

void setup()
{  
  Bridge.begin();
  Serial.begin(9600);  
  pinMode(6, OUTPUT);
  airqualitysensor.init(14);
  delay(150);
  TH02.begin();
  delay(100);
  /* Determine TH02_dev is available or not */
  Serial.println("TH02_dev is available.\n");   
    // set up the LCD's number of columns and rows:
  lcd.begin(16, 2); 
  //lcd.setRGB(colorR, colorG, colorB); 
  // Print a message to the LCD.
  Serial.println("Sensors Intialized ....\n");
}
 

void loop()
{
  //Getting the value of the poentiometer, which will act as a dial to display the sensor values 
   potValue = analogRead(potPin);
   Serial.println("Potentiometer Value: ");   
   Serial.print(potValue);
   Serial.println("C\r\n");

   //Getting Temperature and Humidity value
    
   float temp = TH02.ReadTemperature(); 
   Serial.println("Temperature: ");   
   Serial.print(temp);
   Serial.println("C\r\n");
   
   float humidity = TH02.ReadHumidity();
   Serial.println("Humidity: ");
   Serial.print(humidity);
   Serial.println("%\r\n");
     

  //Getting value of the light sensor
  int lightValue= analogRead(lightPin);
  Serial.print(" Light Value :"); 
  Serial.print(lightValue);
  Serial.println("\r\n");
  
 
  //Getting the Air Quality sensor value
    current_quality=airqualitysensor.slope();
    Serial.println("current quality");
    Serial.println(current_quality);
    if (current_quality >= 0)// if a valid data returned.
    {
        if (current_quality==0)
           airQualityCondition = "Extreme pollution";
        else if (current_quality==1)
            airQualityCondition = "High pollution";       
        else if (current_quality==2)
            airQualityCondition = "Low pollution";
        else if (current_quality ==3)
           airQualityCondition = "Fresh air";
           
        Serial.println(airQualityCondition);
    }
   delay(200);

  //Posting values to the LCD screen based on the Pot Values
  if(potValue <200)
  {
     homeon =1;
     lcd.setCursor(0, 0);
     lcd.print("Turn ON Home");
     lcd.setCursor(0, 1);
     lcd.print("....................."); //"Humidity "+String(humidity)+"%"
     if(loops == 1){
      
      digitalWrite(6, HIGH);
      delay(analogRead(A4));
      digitalWrite(6, LOW);
      delay(analogRead(A4));
      delay(500);
      
      loops =2;
         if(postArtik==1){
            Process p;
             lcd.setCursor(0, 0);
             lcd.print("ARTIK Cloud !");
             lcd.setCursor(0, 1);
            // print the number of seconds since reset:
             lcd.print("Posting data........");
            Serial.println("Before calling the shell command");
            String cmd = "python /root/tutorial/app-send-message.py "+ String(int(temp))+String(" ")+String(int(humidity)) +String(" ")+ String(lightValue) +String(" ")+String(current_quality)+String(" ")+String(homeon);
            p.runShellCommand(cmd);
             // do nothing until the process finishes, so you get the whole output:
            while (p.running());
            
            Serial.println("After calling python program run to post to Artik Cloud");
            loops=2; //used for testing
             lcd.setCursor(0, 0);
             lcd.print("ARTIK Cloud !");
             lcd.setCursor(0, 1);
            // print the number of seconds since reset:
             lcd.print("Done .......");
          }
      digitalWrite(6, HIGH);
      delay(analogRead(A4));
      digitalWrite(6, LOW);
      delay(analogRead(A4));
      delay(500);
     }
  }
  else if(potValue >200 && potValue<400){
     loops=1;
     lcd.setCursor(0, 0);
     lcd.print("Temp "+String(temp)+"C");
     lcd.setCursor(0, 1);
     lcd.print("Humidity "+String(humidity)+"%"); //"Humidity "+String(humidity)+"%"
  }else if(potValue >400 && potValue<600){
     loops=1;
     lcd.setCursor(0, 0);
     lcd.print("Air Quality :");
     lcd.setCursor(0, 1);
     lcd.print(airQualityCondition);  //  airQualityCondition  
  }else if (potValue >600 && potValue<800){
     loops=1;
     lcd.setCursor(0, 0);
     lcd.print("Light Value:");
     lcd.setCursor(0, 1);
     lcd.print(lightValue);     //lightValue
  }else if (potValue >800){
    //Posting data to Artik Cloud by calling a python program value, and passing the sensor values as arguments
    //Currently setup to when the
     homeon =0;
     lcd.setCursor(0, 0);
     lcd.print("Turn OFF Home");
     lcd.setCursor(0, 1);
     lcd.print("...."); //"Humidity "+String(humidity)+"%"

      if(loops ==1)
      {
      //sounding the buzzer
      digitalWrite(6, HIGH);
      delay(analogRead(A1));
      digitalWrite(6, LOW);
      delay(analogRead(A1));
      delay(500);
          if(postArtik==1){
            Process p;
             lcd.setCursor(0, 0);
             lcd.print("ARTIK Cloud !");
             lcd.setCursor(0, 1);
            // print the number of seconds since reset:
             lcd.print("Posting data..");
            Serial.println("Before calling the shell command");
            String cmd = "python /root/tutorial/app-send-message.py "+ String(int(temp))+String(" ")+String(int(humidity)) +String(" ")+ String(lightValue) +String(" ")+String(current_quality)+String(" ")+String(homeon);
            p.runShellCommand(cmd);
             // do nothing until the process finishes, so you get the whole output:
            while (p.running());
            
            Serial.println("After calling python program run to post to Artik Cloud");
            loops=2; //used for testing
             lcd.setCursor(0, 0);
             lcd.print("ARTIK Cloud !");
             lcd.setCursor(0, 1);
            // print the number of seconds since reset:
             lcd.print("Done ...");
          }
       loops =2;
      //sounding the buzzer
      digitalWrite(6, HIGH);
      delay(analogRead(A1));
      digitalWrite(6, LOW);
      delay(analogRead(A1));
      delay(500);
    } 
  }
delay(1000);

}


ISR(TIMER1_OVF_vect)
{
  if(airqualitysensor.counter==61)//set 2 seconds as a detected duty
  {

      airqualitysensor.last_vol=airqualitysensor.first_vol;
      airqualitysensor.first_vol=analogRead(A0);
      airqualitysensor.counter=0;
      airqualitysensor.timer_index=1;
      PORTB=PORTB^0x20;
  }
  else
  {
    airqualitysensor.counter++;
  }
}
app-send-message.pyPython
Python code called from the ino file for the IoT command Center
#Python code which is called ino file
#Code based on code at https://github.com/artikcloud/tutorial-python-sdksample by yujingwu 
#Please git clone the repo to the Yun, and modify the device_message section
import artikcloud
from artikcloud.rest import ApiException
import sys, getopt
import time, random, json
from pprint import pprint

# SDK reference for more details
# https://github.com/artikcloud/artikcloud-python
def main(argv):

	DEFAULT_CONFIG_PATH = 'config/config.json'

	with open(DEFAULT_CONFIG_PATH, 'r') as config_file:
		config = json.load(config_file)['sampleFireSensor']
	print(config)

	# Configure Oauth2 access_token for the client application.  Here we have used
	# the device token for the configuration
	artikcloud.configuration = artikcloud.Configuration();
	artikcloud.configuration.access_token = config['deviceToken']

	# We create an instance of the Message API class which provides
	# the send_message() and get_last_normalized_messages() api call
	# for our example
	api_instance = artikcloud.MessagesApi()

	# Device_message - data that is sent to your device
	device_message = {}

	# We send random values to the 'temp' field for this FireSensor.
	# Let's send a random value between 0 and 200 for this demo.
	device_message['temp'] = sys.argv[1] ;
	device_message['humidity'] = sys.argv[3] ;
    device_message['photoresistor'] = sys.argv[2] ;
	device_message['airquality'] = sys.argv[4] ;
	# Set the 'device id' - value from your config.json file
	device_sdid = config['deviceId']

	# set your custom timestamp
	ts = None

	# Construct a Message object for your request
	data = artikcloud.Message(device_message, device_sdid, ts)

	try:
	    # Debug Print oauth settings
	    pprint(artikcloud.configuration.auth_settings())

	    # Send Message
	    api_response = api_instance.send_message(data)
	    pprint(api_response)
	except ApiException as e:
	    print "Exception when calling MessagesApi->send_message: %s\n" % e


if __name__ == "__main__":
   main(sys.argv[1:])
index.htmlHTML
part of the flask App for the Key Less door entry mechanism, create a folder call templates in the webapp folder and place this file in it.
<!DOCTYPE HTML>
<html>
  <head>
    <title>Pi Door Opener</title>
  </head>
  <body>
    <form method="POST" action="">
      Please enter the password <input type="text" name="name">
      <p>	
      <input type="submit" name="buttonPress" value="Open" style = "height:50px;width:150px; color:#a7cb00; font-weight:bold;font-size: 100%">
      <input type="submit" name="buttonPress" value="Close" style = "height:50px;width:150px; color:#f00; font-weight:bold;font-size: 100%">
      </p>
    </form>
 	<div class="container" style="min-height:100% width:80%">
	{% with messages = get_flashed_messages() %}
	  {% if messages %}
	    {% for message in messages %}
		  <div class="alert alert-warning alert-dismissible" role="alert">
			{{message}}
		  </div>
		{% endfor %}
	  {% endif %}
	{% endwith %}
	
	{% block body %}{% endblock %}
	</div>
 </body>
</html>
config.jsonJSON
Modify your deviceId and deviceToken details. Create a folder called config in the webapp folder and place the file in it.
{
	"keyLessDoorEntry": {
		"deviceId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
		"deviceToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
	}
}
doorOpen.pyPython
File to be referenced in Crontab file , this python file need to place in the webapp folder created on the PI
import os
from flask import Flask, render_template, request, flash

app = Flask(__name__)
app.secret_key = 'ImpossibleToRemember'
password = 'artikpi'

@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    if request.method == 'POST': 
	buttonHit = request.form['buttonPress']
        #print "The button hit is :" + buttonHit
        if buttonHit == 'Open' and 'name' in request.form:
		name = request.form['name']
		print "The password entered is :" + name
		if name == password:
			os.system("sudo python servo.py open")
			flash('Door is Open,Dont forget to close it .. ')
		else:
			flash('The password you have entered is wrong')		
	if buttonHit == 'Close':
		print"Close the door"
		os.system("sudo python servo.py close")
		flash('Door Closed')
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80,debug=True)
servo.pyPython
File need to be create in the webapp folder on the Pi.Also remember to install the ARTIK cloud python library before running this file individually for testing..
import RPi.GPIO as GPIO
import time
import sys
import artikcloud
from artikcloud.rest import ApiException
import sys, getopt
import time, random, json
from pprint import pprint


argVal = sys.argv[1]
print argVal

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)

DEFAULT_CONFIG_PATH = 'config/config.json'

with open(DEFAULT_CONFIG_PATH, 'r') as config_file:
	config = json.load(config_file)['sampleFireSensor']
print(config)

	# Configure Oauth2 access_token for the client application.  Here we have used
	# the device token for the configuration
artikcloud.configuration = artikcloud.Configuration();
artikcloud.configuration.access_token = config['deviceToken']


try:
	#Reading the servo state value from the file to check if is Open/Closed
	fRead = open('servoState.txt')
        stateVal = fRead.read()
        print 'State value in file:'+ stateVal
        fRead.close()
	api_instance = artikcloud.MessagesApi()
	device_message = {}
	device_sdid = config['deviceId']
	ts = None

        if argVal == 'open' and stateVal == 'close': #Open the door
		print 'opening the servo lock'
		pwm.ChangeDutyCycle(2.5)#7.5  # turn towards 90 degree #Open 
	        fWrite = open('servoState.txt','w')
        	fWrite.write('open')
        	fWrite.close()
		device_message['doorState'] = 1;
		data = artikcloud.Message(device_message, device_sdid, ts) 
		try: 
	    	# Debug Print oauth settings
	    		pprint(artikcloud.configuration.auth_settings())
	    	# Send Message
	    		api_response = api_instance.send_message(data)
	    		pprint(api_response)
		except ApiException as e:
	    		print "Exception when calling MessagesApi->send_message: %s\n" % e
		time.sleep(1)
        elif argVal == 'close' and  stateVal == 'open': #Close the door
		pwm.ChangeDutyCycle(7.5)#2.5  # turn towards 0 degree
		time.sleep(1) # sleep 1 second
		print 'closing the servo lock'
                #pwm.ChangeDutyCycle(12.5) # turn towards 180 degree
		fWrite = open('servoState.txt','w')
        	fWrite.write('close')
        	fWrite.close()
                device_message['doorState'] = 0;
                data = artikcloud.Message(device_message, device_sdid, ts)
                try:
                # Debug Print oauth settings
                        pprint(artikcloud.configuration.auth_settings())
                # Send Message
                        api_response = api_instance.send_message(data)
                        pprint(api_response)
                except ApiException as e:
                        print "Exception when calling MessagesApi->send_message: %s\n" % e

		time.sleep(1)
        else: 
		print 'do nothing'
 
#except KeyboardInterrupt:
	pwm.stop()
	GPIO.cleanup()

except IOError as e:
    print "I/O error({0}): {1}".format(e.errno, e.strerror)

Custom parts and enclosures

IoT command center Bottom
Bottom part of the command center to House the Yun and the sensors
IoT command center Top
Top part of the command center that holds the Potentiometer and LCD
IoT Command Center Sensor Holder
Sensor Holder which will be screwed to the Top 3D printed part
Key Less Door Entry- Pi A+ Holder base
Key Less Door Entry - Pi A+ Lid
Key Less Door Entry - Servo Horn Holder
Key Less Door Entry - Door bolt Servo Holder

Schematics

IoT Command Center - with Arduino Yun
As part of the Circuit
- Air Quality sensor is connected to A0
- Potentiometer is connected to A1
- Light Sensor connected to A2
- Buzzer connected to D6
- RGB Backlight LCD connected to I2C
- Temperature and Humidity Sensor connected to I2C
Img 2893
Key Less Door Entry- with Raspberry Pi A+
-Connect the servo to GPIO pin number 18 on the Pi, which is a PWM pin
-To power up the servo I am using 4 AA batteries
-Also use a 1K ohms resistor to protect the GPIO pin from unexpected high current
Keylessdoorentry

Comments

Similar projects you might like

AirLock with Artik Cloud

Project tutorial by Akash Ravichandran and Prabhakaran Senthilnathan

  • 2,892 views
  • 0 comments
  • 9 respects

BLE Sharp Dust Sensor - ARTIK IoT Cloud

Project tutorial by Elijah Scheele

  • 4,322 views
  • 1 comment
  • 21 respects

Water Quality Monitoring Using MKR1000 and ARTIK Cloud

Project tutorial by Team Animo!

  • 7,076 views
  • 12 comments
  • 30 respects

Octopod: Smart IoT Home/Industry Automation Project

Project tutorial by Saksham Bhutani

  • 7,024 views
  • 8 comments
  • 30 respects

Monitor Fire and Temperature Using ARTIK Cloud

Project tutorial by Samsung IoT

  • 2,733 views
  • 0 comments
  • 21 respects

BLE Motion Detector - ARTIK Cloud

Project tutorial by Elijah Scheele

  • 2,222 views
  • 0 comments
  • 4 respects
Add projectSign up / Login