Home

Downloading - All IT eBooks

image

Contents

1. Once you have uploaded the sketch to the Arduino hook it up to your home network If you connect from your browser to its IP address 192 168 3 6 in our example you should see the humidity and temperature results Humidity 35 70 Temperature 14 90 degrees C Next we need to update the SQLite DB to include a column for humidity Once we have this in place we can record the value returned from the Arduino Uno 99 Water Damp Detection Check for Damp Flooding in Sheds and Basements Database updates On your Raspberry Pi use the following command to connect to the SOLite3 database that you created in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results Sqlite3 control db We are now going to add a humidity column Run the following SOL statement ALTER TABLE Temperature ADD COLUMN Humidity FLOAT 8 This code modifies the temperature table and adds a humidity column The column is set to accept values in float format Next we need to add the basement shed to our room table INSERT INTO RoomDetails Room VALUES Basement x Remember to update the Arduino sketch with the ID of the room you insert Now we have a place to store the humidity data Next we need to create a new version of the request py code from Chapter 4 Temperature Storage Setting Up a Database to Store Your Results to write the value to the database Python code The following Python code i
2. e Wecan now reconnect our photoresistor Connect the red wire to a 5V power pin the black back to a ground pin and finally the yellow wire to the analog 7 pin Our circuit is now complete Let s take a look at how we can make it work with a DC motor Curtain control application We will now write an application that leverages the photoresistor and uses it to control the motor There are a few concepts that we will cover quickly before we write the application in order to provide you with better understanding of how our software works Pulse width modulation Pulse width modulation PWM is a method that leverages the digital pins to create an analog result If a digital pin is switched on it has a value of 5V and if switched off it has a value of 0V PWM allows us to simulate a value between these two ends Using our software we can create what is known as a square wave This method involves switching a pin on and off to create a signal to the device connected to the digital pin In our project it s a DC motor Therefore varying the modulation that is changing the number of milliseconds that the pin is switched off versus on will result in a change of speed of the DC motor In order to create PWM in our application we will need to use threads We will look at these next Threads You may have noticed that when running our Makefile the compilation directives include a reference to 1pthread The pthread library all
3. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals However Packt Publishing cannot guarantee the accuracy of this information First published February 2013 Second edition February 2015 Production reference 1200215 Published by Packt Publishing Ltd Livery Place 35 Livery Street Birmingham B3 2PB UK ISBN 978 1 78439 920 7 www packtpub com www allitebooks com Credits Author Project Coordinator Andrew K Dennis Shipra Chawhan Reviewers Proofreaders Ed Baker Simran Bhogal R my B tus Chris Smith Piotr Kula Indexer Commissioning Editor Mariammal Chettiyar Akram Hussain Production Coordinator Acquisition Editor Melwyn D sa Richard Brookes Bland Cover Work Content Development Editor Melwyn D sa Prachi Bisht Technical Editor Mitali Somaiya Copy Editor Vikrant Phadke www allitebooks com About the Author Andrew K Dennis is the manager of professional services software development at Prometheus Research This company is a leading provider of integrated data management for research and is the home of HTSQL an open source navigational query language for RDBMS Andrew has a diploma in computing and a BS in software engineering He is currently studying for a second BS in creative computing He has over 10 years of experience in the software industry in the UK Canada and USA His
4. Unlike previous steps we will be making some small modifications to an Arduino shield Our motor shield uses pins 11 through 13 but the Raspberry Pi already has these pins set aside for SPI This means that we will need to disable some of the current pins on the motor shield You will also need to use your flathead screwdriver for some of these steps e Unplug the red black and yellow wires that connect your breadboard to the Raspberry Pi to Arduino shield Bend the metal legs on digital pins numbered 4 5 6 11 12 and 13 You do not need to remove the legs just ensure that they will not connect with the header on the bridge shield e You can connect the motor shield to the Raspberry Pi to Arduino shield We will now run some jumper wires to connect digital pins 11 12 and 13 on the motor shield to digital pins 4 5 and 6 on the Raspberry Pi to Arduino shield respectively Take your jumper wires and connect 11 to 4 12 to 5 and 13 to 6 e Our two shields are now wired together Next connect two wires to the A terminal on your shield you will need a small flathead screwdriver in order to open and close the connection Once these are in place join your battery connector to the ground and power connectors Ensure that the black wire connects to negative and the red wire to positive e Next connect your electric motor to the two wires connected to the A terminal This completes the motor shield setup 84 Chapter 6
5. is Ti ba We ri if I i EAN S Y yo aa ret q My l HI S t XA 4 it AE md c EN j 3 SN x 1 NC b NANNQ mmm NN SSS HI E IN LJ s Y i H rH 3 il e p ae Y j f LJ LJ LI Raspberry Pi Home Automation with Arduino Second Edition Unleash the power of the most popular microboards to build convenient useful and fun home automation projects Raspberry Pi Home Automation with Arduino Second Edition Unleash the power of the most popular microboards to build convenient useful and fun home automation projects Andrew K Dennis PACKT open source PUBLISHING BIRMINGHAM MUMBAI www allitebooks com Raspberry Pi Home Automation with Arduino Second Edition Copyright O 2015 Packt Publishing All rights reserved No part of this book may be reproduced stored in a retrieval system or transmitted in any form or by any means without the prior written permission of the publisher except in the case of brief quotations embedded in critical articles or reviews Every effort has been made in the preparation of this book to ensure the accuracy of the information presented However the information contained in this book is sold without warranty either express or implied Neither the author nor Packt Publishing and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book
6. client print humidity client print h client print client print setpoint client print setpoint client print client print client println break delay 1 client stop 10 This completes our program We can now save it and run the Verify process Click on the small check mark in a circle located in the top left corner of the sketch If you have added all of the code correctly you should see Binary sketch size 16 962 bytes of a 32 256 byte maximum Downloading the example code M You can download the example code files from your account at http www packtpub com for all the Packt Publishing books you have purchased If you purchased this book elsewhere you can visit http www packtpub com support and register to have the files e mailed directly to you Now that our code is verified and saved we can look at uploading it to the Arduino attaching the fan and testing our thermostat 36 Chapter 3 Testing our thermostat and fan We have our hardware set up and the code ready Now we can test the thermostat and see it in action with a device connected to the mains electricity We will first attach a fan and then run the sketch to switch it on and off Attaching the fan Ensure that your Arduino is powered down and that the fan is not plugged into the wall Using a wire stripper and cutters cut one side of the cable t
7. and place the second leg into the same row as you placed the resistor Finally connect one end of your yellow wire from the analog 7 A7 pin on your shield to the terminal strip you selected The following diagram will help you to understand the layout Arduino to Raspberry Pi Shield Breadboard Ground Now that we have the hardware in place we can write an application to test our setup Testing the photoresistor with software We will be using the arduPi template we installed earlier to create our test code Take a copy of arduPi template cpp and rename it as LightSensor cpp 81 Curtain Automation Open and Close the Curtains Based on the Ambient Light Next in a text editor of your choice open the new file and add the following code to it Include ArduPi library include arduPi h Include the Math library include lt math h gt define TH 690 Here we had the standard template header but we also added a new constant called TH This will represent the threshold Like the setpoint constant we declared for the thermostat the threshold is used to decide to perform an operation based upon whether the room gets lighter or darker Let s move on to add the next block of code Paste this block after the previous code you added to your file BRK k k KK k k k RR RR RR RRR RR RR RK RR RRR RR KK k k k k ke ke ke ke KK k k IF YOUR ARDUINO CODE HAS OTHER FUNCTIONS APART FROM set
8. email_sent notify parcel email_sent true else if check pressure lt THRESHOLD is delivered false reset system email sent false Serial println is delivered 65 Parcel Delivery Detector The setup function is used to set the analog pin to input mode and to set up our Ethernet connection Next is the 1oop function This contains the code that checks whether the force sensor has enough pressure on it to trigger an HTTP request Testing the result returned from the analog pin carries out this check We then compare this result to the THRESHOLD constant which we defined at the beginning of our sketch If the force exceeds the threshold we set is delivered to true and send an e mail We then disable sending e mails by setting the email sent variable to true This prevents the system from constantly sending new e mails When the parcel is removed from the sensor the value returned from the analog pin dips below THRESHOLD and we then reset the system Finally we need to add the code that sends the HTTP POST request to our Raspberry Pi Paste the following code in your sketch void notify parcel update raspberry Pi String data room data room data if client connect server 8081 Serial println connected client println POST HTTP 1 1 client println Host 192 168 3 6 client println Content Type application json charset ut
9. 1 GA You can read more about Arduino products at http arduino cc en Products Compare Next we shall look at the Raspberry Pi to Arduino connection bridge a method of connecting your Arduino shields to your Raspberry Pi Raspberry Pi to Arduino shield connection bridge For two of the projects in this book we will be using the Raspberry Pi to Arduino shield connection bridge This is produced by Cooking Hacks an offshoot of the Libelium wireless communications company based in Spain GA Their website can be found at http www cooking hacks com By connecting this device to our Raspberry Pi we get to reuse our Arduino shields and components and get the power and storage of the Raspberry Pi running behind it This opens up many options for complex home automation projects that may need to host databases or run memory intensive software The Cooking Hacks shield is connected to the Raspberry Pi s General Purpose Input Output GPIO pins With the inclusion of the arduPi software you will be able to communicate between your electronic devices the Raspberry Pi s operating system and web based projects 11 An Introduction to the Raspberry Pi Arduino and Home Automation The Cooking Hacks shield should look like this T 2700000000 DEEE 2 UART pins di EST ize Digital I O 2 9 cooking hacks com l SPI pins me ICSP Connector XBee socket cooking hacks CNCNEC iE o o C Connection Boa
10. AUTOINCREMENT RoomID INTEGER FOREIGN KEY RoomID REFERENCES RoomDetails ID The preceding command has created our second table called Temperature This table will be used to store each of our temperature readings The SOL command has created two columns the first being the ID which is an integer and is incremented automatically The second column created will be used to store the room IDs This column references RoomDetails and creates a foreign key link to it Now that we have the Temperature table we can add two more columns to it TemperatureC and Datetime For this task we can use the ALTER TABLE SQL command in order to add a new column to an existing database From within the SOLite3 shell enter this SOL command ALTER TABLE Temperature ADD COLUMN TemperatureC FLOAT 8 We have now updated our Temperature table and added the column to store the temperature readings from the sensor on the Arduino Uno This column accepts numeric float values that are eight characters long which means we can store decimal numbers such as 52 3 48 4 and so on Finally let s add the date stamp column to our database so that we can check when our temperature readings were stored Using the shell execute the following command ALTER TABLE Temperature ADD COLUMN Datetime DATETIME We have now added our final Datetime column to the table This column takes a date formatted value in the yyyY MM DD HH MM SS format With the two tables in p
11. Our final task will be to test the system again to confirm that we have installed it correctly The battery pack or power adapter should be hooked up to power your Arduino Ensure that its lights are on After this try the following steps 1 Place a heavy object in the parcel delivery box 2 Froma separate computer run the following HTSOL query http iphttp ip of rrp gt 8080 parcel 3 You should see an entry with a timestamp for now Next check your e mail account If you get an e mail this confirms that your setup works Congratulations You now have a working installed parcel detection system Let s consider some steps to improve the project further Next steps There is a range of features we can add to the system to expand its functionality Each of these has been listed here Upgrading from Ethernet to a wireless system Attaching an Ethernet cable to your system may be inconvenient for a number of reasons Therefore we could upgrade the system to use wireless technology One popular choice is XBee You can read more about XBee at http www digi com xbee GA There is also further information on using XBee with the Arduino Wireless shield at http arduino cc en Main ArduinoWirelessShield Checking the shipping details Currently we don t know which parcel has been delivered Therefore it would be useful to log into a shipping website to check which parcel has arrived A useful Python library
12. a web service placed a timestamp and the location where the parcel was delivered in our SQLite database Following this it sent an e mail to alert us that the parcel had arrived Next we took our completed system and installed it so that it was ready for use in our home and wrapped up with some ideas on improvements In the next chapter we will build a system to open and close curtains based on the light in the room For this we will be using the Raspberry Pi to Arduino bridge shield 75 Curtain Automation Open and Close the Curtains Based on the Ambient Light In this chapter we will be looking at how to use a photoresistor and a motor shield in conjunction with our Raspberry Pi Once these are combined into a single device it can be used to open and close blinds or curtains We will also introduce the use of the Arduino to Raspberry Pi connection bridge shield You will need the following for this chapter e The Raspberry Pi The Arduino to Raspberry Pi connection bridge shield e A breadboard e Wires resistor e A photoresistor e An Arduino motor shield e AOV battery and a battery connector e A flathead screwdriver e A flashlight A9V DC motor and an optional 12V DC motor e A12V wall wart if you use a 12V motor Curtain Automation Open and Close the Curtains Based on the Ambient Light Introduction to the Arduino bridge shield In this chapter we will be using the Arduino bridge shield We
13. able to read it via our web browser This combination of technologies leads us to all sorts of interesting possibilities We could expand the SOLite3 database to hold more information on each of the rooms we plan to store data about or we could expand our Python program to check whether the data being written to it is in the format we expect We could also store humidity data HTSQL provides a variety of ways to write interesting queries that we can use in our web browser to check out our temperature readings One of the benefits of HTSOL is that we can save these queries as bookmarks in our browser and use them whenever needed Hopefully this chapter has generated interest in you to learn more about Python HTSQL and SQLite so that you can expand your home thermostat project further Next we will look at setting up a parcel delivery detection device We will be using the combination of the Arduino Uno and the Raspberry Pi to alert us via e mail whenever a new package is delivered 60 Parcel Delivery Detector In this chapter we are going to build a device that will sense and trigger once a parcel is delivered This project will build upon our previous work of building the Raspberry Pi control device We will be editing the database that we created in the previous chapter to store information on deliveries We will then query this data via HTSQL We will be also be adding a functionality that will allow the Raspberry Pi to s
14. after the popular comedy show Monty Python s Flying Circus This language allows you to build web and database applications that can be used to process the output of Arduino programs We will be using Python to build a web application that can process data sent to it and then insert it via SOL into a SOLite3 database We will also be using SOL to build the database that our Python script connects to In conjunction with the SOLite database management system we will construct a repository to store some of the results from our projects for example temperature data 13 An Introduction to the Raspberry Pi Arduino and Home Automation Besides these languages we will also be using Hyper Text Structured Query Language HTSQL to provide a web interface to our database that is easy to access via the web browser and query via HTTP Now that we have looked at our tools to build home automation systems the Raspberry Pi and Arduino let s look at what home automation is What is home automation Having picked up this book you may already have an idea of what home automation is but just in case you don t we ll give you a brief overview of the subject and the open source technology that is driving many projects out there today Home automation is more than just a remote control for your TV Examples include programming your DVD to record your favorite shows setting the AC unit to turn on when the temperature reaches 76 degrees
15. already introduced the Arduino bridge shield in Chapter 2 Getting Started Setting Up Your Raspberry Pi and Arduino In the past you used an Arduino microcontroller connected to your Raspberry Pi over the Ethernet With the Cooking Hacks bridge shield we can use our Raspberry Pi for direct interaction with Arduino shields This provides us with an option of writing Arduino programs on the Raspberry Pi and reusing the existing shield hardware that we purchased Therefore your Raspberry Pi control unit can also double up as a microcontroller like device to interact with your home when you connect the hardware to its GPIO pins To start writing applications that can harness the bridge shield you need to install the arduPi library made by Cooking Hacks This library will allow us to write Arduino like applications and run them on the Raspberry Pi Installing arduPi Open the terminal window on your Raspberry Pi create a new directory in which you will install the arduPi library and then navigate to it mkdir arduPi cd arduPi 1 Using wget download the library from the command line wget http www cooking hacks com skin frontend default cooking images catalog documentation raspberry arduino shield arduPi 1 5 tar gz After wget has run a tar gz file will be saved in the current directory 2 From the terminal run the following command This will extract the entire zipped up file The revision version will be specific to the
16. application that handles sending e mails on the device it is installed on for example the Raspberry Pi There are various choices of external e mail services including Gmail GoDaddy Hushmail and similar Services such as Gmail also offer inexpensive monthly services where you can register a domain name and link multiple e mail accounts to it This will allow you to assign an account to each device that sends e mails if you wish Of course you can always use a single address and send e mails to yourself You will need the following information from your e mail provider e The SMTP service s address The SMTP service s port number e Your account name e Your account e mail address With this information we can now write our Python web service and send e mail updates when the parcel arrives Our Python application The Python application that we are about to write will handle the incoming GET and POST requests and will also be responsible for connecting to the SMTP server to send e mails Log in to your Raspberry Pi and create a new file called webservice py This is where we are going to write our code 68 Chapter 5 Let s start by adding to the file the list of libraries we wish to import usr bin env python import sqlite3 import smtplib import cgi import json from BaseHTTPServer import BaseHTTPRequestHandler HTTPServer from email mime text import MIMEText Here we will be importing the librari
17. called packagetrack is available for this purpose It can be found at https pypi python org pypi packagetrack 0 2 74 Chapter 5 With this package installed you can import it to your Python application The web service can then log into UPS for example and retrieve the shipping details Replacing the pressure sensor with a camera and image recognition Checking for a parcel with a pressure sensor is good but how about improving on this We could replace the sensor with a camera module that uses image processing to check whether a package has been delivered and then e mails a photo of it to us One option to achieve this is the Pixy cam from Charmed Labs http charmedlabs com default page id 211 Using this module hooked up to the Arduino we can check whether a parcel like object has been delivered to a location within the view of the camera and trigger the HTTP request e Further information on the Pixy cams software and setup can found Rs athttp cmucam org projects cmucam5 wiki This wraps up the next steps section let s review what we have learned in this chapter Summary In this chapter we built a package detecting system and built upon the work completed in earlier chapters We designed a circuit and attached it to the Arduino This circuit recorded if a package was placed on a sensor When a parcel was detected an HTTP POST request was made to the Raspberry Pi Then the Raspberry Pi through
18. created In the preceding example SQLite is the database type and the path follows it completed by the database filename Once you log in to the database via the HTSQL shell you can proceed with running a server 1 Quit the HTSQL shell From the command line create an HTSQL server htsql ctl server sqlite path control db As with the preceding shell connection the path should be replaced with the path to the database that we added to the home pi database folder or if you decide to use another directory use that path instead 2 Once the server has started you will see the following message in the command line Starting an HTSQL server on raspberrypi 8080 over database control db We can now check whether HTSQL is running as expected Load your web browser either on the Raspberry Pi or remotely and in the URL bar type http ip of raspberry pi 8080 You should seea message as shown in the following screenshot 58 Chapter 4 eoo 192 168 1 72 8080 Ww s 5 192 168 1 72 8080 Welcome to HTSQL Please enter a query in the address bar 3 Youcan then display the room table we created by typing http lt ip of raspberry pi 8080 roomdetails The database is now viewable via the web browser and the data can be seen in the Temperature table as it gets added 4 Inorder to query the data we can use the roomdetails id syntax You can place column IDs from your databa
19. creating our application When you attach your motor to the blinds or curtains you will need to calculate the number of seconds required to open and shut them You can also adjust the values in the pwm function to either speed up or slow down your motor Once you have set up the hardware try experimenting with these values until you adjust the settings to your preference For example you may decide you never want the blinds fully closed or open and can adjust the setting so that the closed and open state is 75 percent of the open and closed state of the physical curtain Attaching the hardware At this point you will need to attach the DC motor to the curtain drawstring The preferred method of doing this is by using a pulley A variety of grooved pulleys can be found online or in hardware and craft stores Select a pulley that fits the profile of your hardware M Make sure you are not running the curtain control application while attempting to attach the wheel and blinds as this may make things difficult 90 Chapter 6 Attach the wheel to the axle of your DC motor It should fit snuggly so that it does not fall off when the motor is switched on Try testing your configuration by launching the curtaincontrol program Once you are sure this works you can attach the drawstrings of your curtains or blinds to the wheel This setup will largely depend on how the blinds are opened or closed Commonly there is a drawstring
20. do not worry because there will be minimal soldering Also if you have any old PC hardware sitting around such as a graphics card that is no longer in use you can practice desoldering and resoldering the components until you become comfortable with the process This will also help you to get used to the soldering iron and desoldering tool Creating software for the Arduino After you have set up the Arduino microcontroller and Arduino shield and plugged it into the Raspberry Pi you will probably be wondering how to interact with it After all it has sensors and LEDs but these are nothing without applications to control them in a meaningful manner There are many software languages available for building projects with but we are interested in the Arduino programming language C Python SOL and HTSQL The Arduino programming language is a subset of C and provides us with a tool to program the Arduino microcontroller Arduino compatible shields and the components connected to them One benefit of using this technology is that there is a wealth of programs and libraries online that can be used for future projects You will be using this language in the Arduino IDE and on the Raspberry Pi to write the core applications that will be reading data from sensors attached to your projects e The next language that we will be using is Python Python is a high level programming language developed in the late 1980s by Guido Van Rossum named
21. e Soldering iron or a gun with solder optional AWindows Mac or Linux based machine optional e A television or monitor with HDMI or S video optional e A USB keyboard USB mouse cables for S Video to HDMI conversion and sponges all of these are optional e Tweezers and cable strippers optional Who this book is for If you are new to Raspberry Pi Arduino or home automation and you wish to develop some amazing projects using these tools then this book is for you Any experience in using the Linux operating system or Raspberry Pi will be an added advantage This book is a step by step guide that will help you in setting up components and software in each chapter Conventions In this book you will find a number of styles of text that distinguish between different kinds of information Here are some examples of these styles and explanations of their meanings Code words in text database table names folder names filenames file extensions pathnames dummy URLs user input and Twitter handles are shown as follows Once logged in we are going to run apt get to install SQLite3 A block of code is set as follows usr bin env python import sqlite3 import urllib2 import json Any command line input or output is written as follows cd mkdir database cd database 3 Preface New terms and important words are shown in bold Words that you see on the screen for example in menus or dia
22. field and under Connection type select SSH Finally click on Open You may see a pop up box with the title PuTTY Security Alert and a message explaining that the server s host key is not cached in the registry Select the Yes button In the terminal window you will now see the following message Login as Enter your Raspberry Pi username that is pi You will now see another message asking for the password like this pi 192 168 3 122 s password Enter the password and press the Enter key Q The default password is raspberry You will now be logged in to the Raspberry Pi Congratulations You can now connect to your Raspberry Pi from your Windows machine and set up your database using SQLite3 If you are a Mac or Linux user follow these steps Once you have your Terminal application ready you can connect to your Raspberry Pi via SSH using the following command ssh pi 192 168 3 122 1 You will be asked to enter your password and may see a message suggesting that the authenticity of the host can t be established like this The authenticity of host 192 168 3 122 192 168 3 122 can t be established RSA key fingerprint is f6 4a 38 4a 8b c6 04 a9 bc 51 c3 af fe cb 7 8 e6 Are you sure you want to continue connecting yes no 47 www allitebooks com Temperature Storage Setting Up a Database to Store Your Results 2 Type yes in the command line and press the Enter key 3 You wil
23. final with schematics pdf e eLinux Raspberry Pi Hub http elinux org RPi Hub References Raspberry Pi to Arduino bridge shield Information on the Cooking Hacks Raspberry Pi to Arduino bridge can be found at these links Cooking Hacks website http www cooking hacks com Raspberry Pi to Arduino tutorial http www cooking hacks com index php documentation tutorials raspberry pi to arduino shields connection bridge The arduPi library board revision 1 http www cooking hacks com Skin frontend default cooking images catalog documentation raspberry arduino shield arduPi_revl tar gz The arduPi library board revision 2 http www cooking hacks com skin frontend default cooking images catalog documentation raspberry arduino shield arduPi rev2 tar gz Linux There is a wide range of resources available for Linux online as well as via the Linux man command The following links provide overviews of commands and packages used in this book User s manual for screen http www gnu org software screen manual screen html Raspbian package information http elinux org Raspbian User manual for apt get http linux die net man 8 apt get User manual for wget http www gnu org software wget manual wget html Linux Kernel archive http www kernel org Geany IDE http www geany org Command manual for make http linux die net man 1 make Manual page for chmod http linux die net man 1 chmod Manu
24. from the web This can be extended to allow scanning and inventory management of products at home recording data such as consumption dates of products in the refrigerator and dynamically generating shopping lists This combination of hardware software and information now provides the potential for the home to become a part of the Internet of Things as quoted by Kevin Ashton Thanks to open source and open standard technology being used in these devices it is easy to combine home brewed projects built with the Raspberry Pi and commercial products by companies such as LG to build a smart home with a network of devices that can communicate with one another to combine the execution of tasks As we mentioned home brewed systems such as the Raspberry Pi can form part of this network Let s now look at the effects of the arrival of the Raspberry Pi on the world of home automation 17 www allitebooks com An Introduction to the Raspberry Pi Arduino and Home Automation Arrival of the Raspberry Pi With the arrival of the Raspberry Pi and the Raspberry Pi to Arduino shield there is now a set of open source technologies that combine the power of a PC the communication and multimedia technologies of the Web the ability to interact with the environment of a microcontroller and the portability of a mobile device Coupled with the existing Arduino microcontrollers we have the perfect set of tools to allow us to build cheap de
25. in the Arduino IDE and perform the following steps 1 Inside the sketch we are going to start by adding the code to include the libraries we need to use At the top of the sketch add the following code include DHT h Include this if using the AM2302 include lt SPI h gt include lt Ethernet h gt 2 Next we will declare some variables to be used by our application These will be responsible for defining o o o The pin the AM2303 thermistor is located on The relay pin The IP address we want our Arduino to use which should be unique The Mac address of the Arduino which should also be unique The name of the room the thermostat is located in The variables responsible for Ethernet communication 33 Central Air and Heating Thermostat 3 The IP address will depend on your own home network Check out your wireless router to see what range of IP addresses is available Select an address that isn t in use and update the 1PAddress variable as follows define DHTPIN 4 The digital pin to read from define DHTTYPE DHT22 DHT 22 AM2302 unsigned char relay 5 The relay pins String room library byte mac OxDE OxAD OxBE OxEF OxFE OxED IPAddress ip 192 168 3 5 DHT dht DHTPIN DHTTYPE EthernetServer server 80 EthernetClient client We can now include the setup function This is responsible for initializing some variables with their default values and setting the
26. loop that can be pulled to open or close the blinds This loop should be wound around the groove of the pulley wheel and fit tightly Now try changing the delay value in your application to 1 second Next run the make command again to recompile the application Our application will now run the open close cycle for 1 second Execute the application via the command line and note how far the curtain blind will open close in 1 second With this information you should be able to estimate how many seconds are required to open and close your hardware At this point you can try refining the numbers until you reach the desired result Debugging problems If the curtains aren t opening and shutting there could be one of the several problems listed here We have listed some steps you can take to debug the problem e Ensure that the pulley wheel is attached tightly to the axle e Ensure that the drawstring is attached to the pulley wheel and is tight enough to maintain its grip when the motor starts If the motor is facing problems opening the blinds and you are using a 9V motor try upgrading to the 12V motor e If the curtains are opening or shutting too quickly adjust the delay as described earlier in the chapter You now have an application and circuit that can control your curtains or blinds based on the ambient light in the room amp Remember to check the tension of the drawstring as it may change E over time and affect the accuracy o
27. one another across a home without needing to use the existing electrical wiring In the case of Wi Fi no extra cabling was required As protocols such as FTP and HTTP became the norm to access information across the Internet hardware developers saw the opportunity to leverage these communication technologies in open source hardware devices While X10 appliances had no way of knowing whether a signal had been successfully sent without the purchase of costly two way devices web technologies provided a whole framework to return error codes and messages At approximately the same time when the Arduino platform was being developed the first tablet computers were beginning to be released From 2005 until now there has been an explosion in mobile tablet and smartphone devices This growth has been commonly referenced to as the post PC era These devices have provided mobile computing platforms that can run complex software and be small enough to fit in the user s pocket As a result of this applications that allow the user to control consumer electronics such as the TV have been developed for the iPhone and Android Due to their size portability and low cost in some cases they have provided the perfect platform to interface with home appliances and devices and provided an extension to a medium the user is familiar with 16 Chapter 1 Alongside the explosion in hardware there was an equivalent explosion in software One
28. range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks n PACKTLif https www2 packtpub com books subscription packtlib Do you need instant solutions to your IT questions PacktLib is Packt s online digital book library Here you can search access and read Packt s entire library of books Why subscribe Fully searchable across every book published by Packt Copy and paste print and bookmark content On demand and accessible via a web browser Free access for Packt account holders If you have an account with Packt at www Packt Pub com you can use this to access PacktLib today and view 9 entirely free books Simply use your login credentials for immediate access www allitebooks com Table of Contents Preface 1 Chapter 1 An Introduction to the Raspberry Pi Arduino and Home Automation 7 History and background of the Raspberry Pi 8 History and background of the Arduino 9 Raspberry Pi to Arduino shield connection bridge 11 Soldering 13 Creating software for the Arduino 13 What is home automation 14 History of home automation 14 X10 a standard is born 15 The dot com boom and open source a new set of technologies 16 Commercial products 17 Arrival of the Raspberry Pi 18 Summary 18 Chapter 2 Getting Started Setting Up Your Raspberry Pi and Arduino 19 The SD card our Raspberry Pi s storage device 19 Preinstalled SD card versus a blank SD card 20 A note
29. tar gz file you downloaded tar xzf arduPi revision version tar gz In our case this will be version 1 5 Thus you need to type this command to extract the file tar xzf arduPi revl 5 tar gz 78 Chapter 6 3 Once the file has finished extracting you will find three new files in the directory Type the following command to list the directory s contents 1s 4 You will now see the arduPi cpp arduPi h and arduPi_template cpp files The arduPi cpp and arduPi h files contain code that will be used to provide support for interaction with your Arduino to Raspberry Pi shield The arduPi_template cpp file provides a basic template file You can use this file to create applications You might notice that it looks very similar to a basic Arduino sketch 5 Inorder to use the arduPi_template cpp file we need to compile the arduPi cpp file into an object file For this task we will be using a C compiler 6 To compile the C code we type the following g c arduPi cpp o arduPi o This command invokes the g compiler takes the arduPi cpp as an input file and outputs an object file called arduPi o Now that we have the code compiled we can look at hooking up our hardware and writing some software to control a circuit We will start by reviewing the hardware we need Photoresistors A photoresistor is similar to the thermistor in that the device s resistance changes as some ambient property of
30. the data generated by the photoresistor on A7 if analogReadingArduino gt TH amp amp open state false controlMotor true digitalWrite DIRECTION HIGH delay 5000 open state true controlMotor false eise if analogReadingArduino lt TH amp amp open state true controlMotor true digitalWrite DIRECTION LOW delay 5000 open state false controlMotor false 88 Chapter 6 Here we have a conditional statement that checks the light readings against the TH threshold constant If the curtains are shut and the light exceeds the threshold then we do the following 1 Callthe controlMotor function and pass the Boolean value of true 2 Switch pin 5 to HIGH which sets the direction of the motor to clockwise 3 Allow the motor to run for 5 seconds in order to open the curtain 4 Call the controlMotor function and pass the Boolean value of false which turns the motor off Let s now look at the next part of the i statement Here we check whether the reading from A7 is less than the threshold and whether the curtains are open If both are true it means the room is darkening and the blinds need to be closed 1 Once again we call the cont zolMotor function and switch the motor on 2 Next the direction of the motor is set to counterclockwise by writing Low to digital pin 5 Then we apply a 5 second delay to allow the blinds to close fully Finally we switch the mo
31. the room changes With the thermistor this property was temperature with the photoresistor it is light The most common application of photoresistors that you see in everyday life is in street lamps which switch on when it starts to get dark outside We can use a photoresistor as a part of our circuit to tell when it is getting dark outside and send this information to the Raspberry Pi The Raspberry Pi can then process this data and use it to control an electric motor Motor shield and motors For this project we choose the official Arduino motor shield This is a device that we can connect to our Raspberry Pi to Arduino shield Then we can use it to attach and drive DC motors 79 Curtain Automation Open and Close the Curtains Based on the Ambient Light SX The specifications for the shield can be found at http arduino D cc en Main ArduinoMotorShieldR3 The shield has an operating voltage in the range of 5V to 12V For our project we will connect a 9V battery to the screw terminal power connectors For testing purposes we will use a 9V battery However if you wish to install the motor shield based device you should consider attaching it toa wall wart or mains adapter A 9V battery in constant use will not GA last very long and will not power a 12V motor It is recommended that you disconnect the power pins on the shield if you wish to connect devices that require more than 9V We will start this pro
32. the time periods for which a given room is coldest A table to record our rooms The second table that we will create will store the name of the room in it This table can be expanded later to include extra details about the room To start with it however we will only need two columns ID This will be a unique ID for the room It will be incremented with every room added When we add data to the Temperature table we will insert this room ID This way if we decide to rename the room we only have to update a single value in one table rather than replace multiple instances which would be the case if we had recorded the name of the room next to each temperature reading in the Temperature table RoomName The second column is used to store the name of room Here we can store a value such as Bathroom or Kitchen Writing SQL queries With the designs of our two tables planned we can create them using SOL 1 From the SQLite3 shell enter the following SOL command CREATE TABLE RoomDetails ID INTEGER PRIMARY KEY AUTOINCREMENT Room VARCHAR 25 50 Chapter 4 This command creates a new table called RoomDetails and adds an ID column that takes integer values This column is the primary key of the table and with each new value that is added the ID is incremented by 1 Next we will create the Temperature table Type the following SOL command in the SQLite3 shell CREATE TABLE Temperature ID INTEGER PRIMARY KEY
33. to the Raspberry Pi Arduino and Home Automation This chapter provides an introduction to the Raspberry Pi Arduino Arduino to Raspberry Pi connection bridge and the subject of home automation We ll look at the history of the Raspberry Pi and how it came to being as well as the Arduino platform an open source microcontroller that provides developers with a means to interact with their surroundings through a variety of sensors and motors Next we will explore the Arduino to Raspberry Pi connection bridge a method of attaching an Arduino shield to the Raspberry Pi We will wrap up the chapter by covering home automation and how technologies such as the Raspberry Pi have put the ability to build complex sensor based systems in the hands of the open source community First let s start by looking at what we will be covering in the coming chapters of this book We have a number of exciting projects ahead that will slowly introduce home automation via technologies such as Raspberry Pi and Arduino These projects include Writing software to control hardware Building a thermometer using a thermistor Turning the thermometer into a thermostat using relays Controlling electric motors using a motor shield Writing software to store sensor data generated by your projects www allitebooks com An Introduction to the Raspberry Pi Arduino and Home Automation As you go through each chapter in this book you will gain a basic
34. you have the serial port correctly configured you can upload the code to the microcontroller Click on the play button icon in the sketch If everything was configured successfully your code should now be running on the Arduino The sketch we uploaded does not do anything However it is a good way of verifying that our setup is correct In Chapter 3 Central Air and Heating Thermostat we will dive into Arduino in more detail Next let s quickly look at the Arduino to Raspberry Pi connection bridge shield Using the Arduino to Raspberry Pi connection bridge The Arduino to Raspberry Pi connection bridge hardware provides a convenient method to connect our Raspberry Pi to some of the Arduino shields that are available Thus we can reuse hardware between our two devices 24 Chapter 2 The shield s YO Input Output options include e A socket for wireless modules e RX TX pins e i2C pins SDA and SCL e SPI pins SCK MISO MOSI and CS which can also be used as GPIO e An 8 channel analog to digital converter e Switch to enable external power supply You might remember seeing these in the diagram in the previous chapter For more information on their functionality you can go to the V Cooking Hacks website at http www cooking hacks com GA documentation tutorials raspberry pi to arduino shields connection bridge In Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient L
35. your projects data and explore it via your web browser Preface Chapter 5 Parcel Delivery Detector demonstrates a system using Arduino and Raspberry Pi that will alert you whenever a parcel arrives at your door Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light teaches you how to integrate motors with your projects to open and close blinds and curtains using the skills learned in previous chapters Chapter 7 Water Damp Detection Check for Damp Flooding in Sheds and Basements helps you build systems that can check for humidity and water to indicate dampness and flooding Chapter 8 Wrapping Up finishes the topic with some ideas for future projects Appendix References lists a collection of links to the resources used in this book and other interesting information What you need for this book Raspberry Pi version B ASDcard e Ardunio Uno e A Seeed Ethernet shield e Cooking Hacks Raspberry Pi to Arduino bridge shield e An Arduino motor shield A Pololu relay module An AM2302 combined thermistor humidity sensor e AnLED e A Seeed Grove Water sensor e A10K ohm resistor e A force resistor sensor e AOV or 12V DC motor A breadboard e Breadboard wires and power supply e USB cables e A Cat 5 Ethernet cable e An Internet connection with a home modem or router Asmallelectric fan 2 Preface Asmall wooden disc to wrap blind cords around
36. 0 digitalWrite 2 LOW delay 1000 else digitalWrite 2 LOW Here we have a variable called damp that would need to be declared at the beginning of our application This would be a Boolean variable that indicates that the value returned from the database is a cause of concern When the damp variable is set to True we trigger the LED to flash This variable can be set in the method you used to process the data returned from the database You can now expand this code to include a method that can stop the LED flashing programmatically for example you can think of a way to switch it off once you have checked the damp situation 105 Water Damp Detection Check for Damp Flooding in Sheds and Basements Adding an LED alert is not the only modification we could make to the system We could for example switch a dehumidifier on when the humidity is high to help address the problem The next section explores this idea Connecting a dehumidifier We now have a system that checks whether the humidity of a room is too high It would be great if this system could also react to the data it receives and attempt to help solve the situation One method is to connect a dehumidifier and then switch it on when needed We could reuse the code from Chapter 3 Central Air and Heating Thermostat and the relay module and integrate them with our damp detection sketch Taking this code we would change the setpoint to a va
37. 42 URL 41 Power over Ethernet PoE 73 preinstalled SD card versus blank SD card 20 pressure sensor replacing with camera 75 printed circuit board PCB 113 prototyping Pi Plate about 111 112 URL 111 pulse width modulation PWM 85 PuTTY about 46 URL for downloading 46 Python online resources 123 using 13 Python application creating 52 54 cron job adding 55 56 results checking 55 R Radio Frequency Identification RFID chips 118 119 Radio shack URL 72 Raspberry Pi Arduino IDE installing 23 history 8 9 reference link 121 used for home automation 18 Raspberry Pi to Arduino shield connection bridge about 11 12 reference link 122 Raspbian downloading 21 installing 22 reference link for installation 22 Secure Shell SSH setting up 22 23 URL for downloading 21 relay about 27 Common Connection points 30 Normally Closed points 30 Normally Open points 30 using 30 31 resistors 10K ohm resistor 63 about 62 fixed resistors 62 force sensing resistor FSR 62 variable resistors 62 S secure digital card SD card about 19 20 preinstalled SD card versus blank SD card 20 reference link 20 setting up 21 22 Secure Shell SSH about 22 46 48 setting up 22 23 Seeed Ethernet shield URL 30 setpoint 28 Shapeways URL 72 118 shield soldering reference link 112 Simple Mail Transfer Protocol SMTP setting up 68 software languages for Arduino projects Arduino programming language usin
38. ERE KR RR RR RR RR ede ke RR KK KK x x int main setup while 1 loop 1 return 0 This block of code is the standard arduPi template that tells the application to run in a loop We now need to add some code to switch pin 2 to the OUTPUT mode so that we can switch the LED on and off Add the following block of code to alert cpp void setup pinMode 2 OUTPUT 103 Water Damp Detection Check for Damp Flooding in Sheds and Basements 4 Thesetup function is responsible for switching the pin mode to output Next we will add the code that will cause the LED to blink to the 1oop function void loop digitalWrite 2 HIGH delay 1000 digitalWrite 2 LOW delay 1000 Here we switch pin 2 between HIGH and Low with a 1 second pause This creates the blinking effect 5 Wecan now compile and test the application Exit the text editor and run the following command g lrt lpthread alert cpp arduPi o o alert Q Remember that you can add this to a Makefile 6 The compiled alert program can be run from the command line alert You should now see the LED blinking on and off with a 1 second interval This program forms the basics of an alert system that will trigger the LED when damp is detected However we need a way to know when to switch the LED alert on and off We will look at this next Expanding the LED functionality In orde
39. Fahrenheit and installing a fancy alarm system that contacts the police in case of a break in Also known as domotics a portmanteau between domestic and informatics home automation can be summed up as a mechanism of removing as much human interaction as technically possible and desirable in various domestic processes and replacing it with programmed electronic systems It is essentially automation of home activities History of home automation Concepts for home and building automation were around for decades before becoming a reality and were featured in the writing of the 19th century science fiction author H G Wells comics and cartoons such as The Jetsons American industrialist George Westinghouse helped to pioneer the AC electrical system which the X10 home automation standard would later run on and in 1966 the company that bears his name Westinghouse Electric employed an engineer who developed what could arguably be called the first computerized home automation system ECHO IV The Electronic Computing Home Operator ECHO was featured in the April 1968 edition of Popular Mechanics and had been expanded from a set of spare electronics both in the physical sense and the literal sense to include computing its founder Jim Sutherland s family household finances and storing their shopping lists amid an array of other tasks 14 Chapter 1 m You can still read the original Popular Mechanics article online at
40. GA http books google com books id At QDAAAAMBAJ amp pg PA7 7 amp source gbs toc r amp cad 2iv onepage amp g amp f false The ECHO never went commercial and through the 1960s hobbyists and a number of large companies such as Honeywell toyed with the idea of computerizing homes However it was the 1970s much as with personal computing that saw the birth of the modern era of home automation technology X10 a standard is born The introduction of the X10 technology standard can be arguably described as the beginning of modern home automation technology Conceived in 1975 by Pico Electronics who later partnered with Birmingham Sound Reproducers X10 laid out the framework to allow remote controlled access of domestic appliances The X10 standard was designed to allow transmitters and receivers to work over existing electrical wiring systems by broadcasting messages such as turn off and turn on via radio frequency bursts In 1978 X10 products began to make their way into stores geared towards electronics enthusiasts and shortly after in the 1980s the CP 290 computer interface made its way to the market for the Mattel Aquarius computer The CP 290 unit allowed computers to communicate with X10 compatible home appliances Over the years support for Windows and Mac was included and it gave those interested in home automation the ability to program their lighting systems thermostats and garage doors from their home computers A
41. Lite homepage http www sqlite org e SQLite downloads http www sqlite org download html e SQLite Documentation http www sqlite org docs html e W3 Schools SQL guide http www w3schools com sql default asp HTSQL Here are the links that contain in depth coverage of the HTSOL query language Using these reference guides you can expand the complexity of the queries you write for your home automation projects e Official HTSOL website http htsql org e HTISQL tutorial http htsql org doc tutorial html e HTSQL downloads http htsql org download e HISQL Python page http pypi python org pypi HTSQL e HTSOL mailing list http lists htsql org mailman listinfo htsql users Electronics You can order the electronic components online from a variety of sources These URLs are for major suppliers who stock the components used in this book We have also provided some links to the basic electronic guides e Adafruit industries http www adafruit com e Cooking Hacks http www cooking hacks com e Makeshed http www makershed com e Elementl4 http www element14 com e RS Components http www rs components com e Wikipedia article on electronic symbols http en wikipedia org wiki Electronic symbol 124 Appendix Packt Publishing titles Packt Publishing offers a variety of books on many of the technologies used in this book We have provided links to titles that may interest you
42. Pi Plate The wiringPi library The wiringPi library written by Gordon Henderson interacts with the Raspberry Pi in a fashion similar to the arduPi library It provides an alternative to the software library you are currently using and it can be explored for future projects such as extending the functionality of your curtain automation device In the wiringPi library you will find not only support for the many Arduino functions that you are familiar with but also custom support for PWM 112 Chapter 8 A comprehensive guide to the available functions is accessible on the GS wiringPi webpage at http wiringpi com The download and installation instructions for this library can be found athttp wiringpi com download and install Once the installation is complete there are a number of examples you can try out One of them that may be of interest to you is test2 c in the example directory This program simulates PWM and if you connect an LED to pin 2 you will see the LED slowly fade on and off The prototyping Pi Plate and wiringPi library provide you with an interesting alternative to the Cooking Hacks shield Let s now look at another technology that is available for the Raspberry Pi the Gertboard The Gertboard The Gertboard is a device that connects to the Raspberry Pi s GPIO pins as we have seen with the previous shields It provides the user with a variety of tools to interact with electronic component
43. Pi setup complete let s test our system You will need a book or some other object to represent a package Take the pressure sensor and place your book or object on it Run the following HTSQL query from your browser http ip of raspberry pi 8080 parcel 3 You should now see an entry in your parcel table Next check your e mail If your application is working successfully you will have an e mail sent from the Raspberry Pi Our system is now complete We can install it so that it can be used with real life parcel deliveries Installing the parcel detector Now we have confirmed that our system is working The next task will be to hook up the system to your home If you plan to place the system outside you will need to ensure that it is covered so that it can be protected from the elements There are a number of options to do this such as e Purchasing an enclosure online Companies such as Radio shack http www radioshack com search q enclosuresiprefnl product Type amp q enclosures amp prefvl Project 20boxe s Rapid and Maplin offer a variety of project enclosures e Designing an enclosure and having Shapeways http www shapeways com 3D print it for you Building your own enclosure from wood or plastic Once you have completed or purchased the enclosure you will need a box a small bin or trash can or something similar for the parcels to be placed in 72 Chapter 5 Install your pa
44. Python code 100 Adding a cron job 101 Using the humidity reading 102 Adding an LED alert 102 Blinking LED code 103 Expanding the LED functionality 104 Connecting a dehumidifier 106 Water detection 106 Summary 108 Chapter 8 Wrapping Up 109 A brief review of the second edition of Raspberry Pi Home Automation with Arduino 110 Next steps 111 The prototyping Pi Plate 111 The wiringPi library 112 The Gertboard 113 Introduction to the Gertboard components 114 GPIO PCB expansion board 114 GPIO pins 114 Motor controller 114 The open collector drivers 115 Buffered I O 115 Atmel ATmega microcontroller 115 Convertors analog to digital and digital to analog 116 Creating software for the Gertboard 116 Ideas for future projects 116 Expanding the curtain automation tool to include temperature sensing 117 Changing the motor on the curtain automation project to a stepper motor 117 Switching lights on with a photoresistor 117 Holiday lights from LEDs 118 iv Table of Contents The future of home automation 118 3D printing 118 RFID chips 118 EEG headsets 119 Summary 119 Appendix References 121 Raspberry Pi 121 Raspberry Pi to Arduino bridge shield 122 Linux 122 Python 123 C C 123 Arduino 123 SQL 124 HTSQL 124 Electronics 124 Packt Publishing titles 125 Home automation technology 125 3D printing 126 Index 127 v Preface The world of home automation is an exciting field that has explode
45. Raspberry Pi Foundation was formed to develop and manufacture the Raspberry Pi computer By 2011 the first Alpha Models were being produced and tested and the public finally got to see what the Raspberry Pi was capable of Demos of Quake III Arena and full HD 1080px video showed that the tiny computer could pack a big punch for low cost Finally in 2012 the Raspberry Pi was ready for public consumption Two versions of the Raspberry Pi were manufactured namely Model A and Model B with B being released first Over the subsequent years both A and B were upgraded with the Models A and B being release and this was complemented with the introduction of the Raspberry Pi 2 in 2015 For the projects in this book you will need to use at least a Model B version of the board or the more powerful Model B or Raspberry Pi 2 Model B if available Next let s learn about the Arduino platform History and background of the Arduino One of the most popular open hardware products to have hit the market is the Arduino platform Developed in Italy by Massimo Banzi and David Cuartielles in 2005 Arduino is an open hardware technology coupled with a programming language and an Integrated Development Environment IDE based on the open source wiring software 9 An Introduction to the Raspberry Pi Arduino and Home Automation The Arduino platform allows the user to create custom hardware and applications that control it via its namesa
46. al page for chown http linux die net man 1 chown 122 Appendix Python Various Python resources that are useful to you including information on the WSGI technology are available at these links e Official Python website http www python org e Python documentation http docs python org e WSGl homepage http www wsgi org Python pip http pypi python org pypi pip e Downloading Python http www python org getit C C The following collection of links provides you with further information on the C and C programming languages e Cand C programming reference http www cprogramming com e POSIX threads https computing llnl gov tutorials pthreads e G compiler http 1inux die net man 1 g Arduino We have provided some useful resources on the Arduino hardware and software that you can use to explore this open source technology e Official Arduino homepage http www arduino cc e Official Arduino forum http arduino cc forum e Official Arduino store http store arduino cc e Arduino IDE downloads http arduino cc en Main Software e Arduino hardware http arduino cc en Main Products from Main Hardware e Makezine s Arduino blog http blog makezine com arduino 123 References SQL There are a variety of flavors of SOL The following URLs are geared towards SQLite which we used in this book for our temperature storage database SQ
47. apter will provide you with some ideas for future projects 108 Wrapping Up Throughout the previous chapters we looked at various tools and technologies used to build devices that will help us automate our homes The earlier chapters should have given you a good introduction to the Raspberry Pi and Arduino technologies which you can now expand upon In this chapter we will review what you ve learned and then look at how you can grow your skills and start designing your own shields for the Raspberry Pi We will look at a Raspberry Pi prototyping shield Then we will explore the GPIO pins of the Raspberry Pi so that we can interact with them via the shield Next we will look at the wiringPi library and the Gertboard both of which can be used for home automation projects Furthermore we will look at some projects that use the techniques you ve learned in this book In some cases we will build upon previous projects Finally we wrap up with a look into the future In order to complete the prototype board task you will need e The Raspberry Pi e An Adafruit Raspberry Pi prototyping shield AnLED e Asoldering iron Protective glasses e Solder JS The Gertboard is available via Newark Element14 at http www newark com Let s start by revising what we have covered so far Wrapping Up A brief review of the second edition of Raspberry Pi Home Automation with Arduino Those of you who read the first edi
48. ation json charset utf 8 so that the Arduino returns the temperature data in JSON We then make the HTTP request We store the data in a variable called result using a function called 1oad from the json library Following this we need extract the values we want to store in the database Next add the following block of code Remember to indent it using four spaces room result thermostat 0 location temperature result thermostat 1 temperature my query INSERT INTO Temperature RoomID TemperatureC Datetime VALUES s s CURRENT TIMESTAMP Room Temperature Here we have created room and temperature variables from the values stored in the results variable 53 Temperature Storage Setting Up a Database to Store Your Results 6 Next we create a small SOL query that inserts these two variables into the temperature table along with a timestamp We need to execute this query so we add this code try connection sqlite3 connect home pi database control db isolation level None cursor connection cursor cursor execute my query query results cursor fetchone my response Inserted s for room s temperature room except sqlite3 Error e my response There is an error s e finally print my response connection close These statements are responsible for connecting to the database and executing our query They rely on the functionality provided by the
49. ave and exit Next we are going to create a Python application that grabs data from the Arduino and writes it to the database Creating a Python application to write to our database The following Python application is going to connect to our Arduino through an HTTP request and process the JSON data in the response This will be achieved by setting the HTTP header in our request to the following application json charset utf 8 52 Chapter 4 As you may remember our Arduino application is specifically set up to look for incoming requests of this format 1 2 Start by creating a new empty file in the database folder called request py With your new file open add the following code to it usr bin env python import sqlite3 import urllib2 import json This block of code is responsible for importing libraries that we can use to Connect to a SQLite database Craft an HTTP request Convert JSON data into a Python dictionary After adding the import statements we can start writing our main function Add the following code below the import statements def main req urllib2 Request http 192 168 3 5 req add header Content Type application json charset utf 8 r urllib2 urlopen req result json load r Here we create an HTTP request to the Arduino You will need to change the IP address to that of your microcontroller As you can see we set the HTTP header to applic
50. boratory in 2006 struck upon the idea of producing a cheap educational microcomputer geared towards amateur computer enthusiasts budding students and children The aim was to help provide the skills for future computer science undergraduate applicants that many of the applicants in the 1990s possessed This was largely because home computers of the 1980s required programming and were open to hacking However it would be another two years before the project became viable and until 2012 before the Raspberry Pi was being shipped to the public 8 Chapter 1 The 2000s saw a huge growth in mobile computing technologies a large segment of which was being driven by the mobile phone industry By 2005 ARM a British designer of CPU core components and by product of the 1980s home computer company Acorn had grown to a state where 98 percent of mobile phones were using their technology This translated into around 1 billion CPU cores ARM technology later ended up featuring on the Raspberry Pi with the ARM1176JZF S processor core being used as a part of the Broadcom BCM2835 System on a Chip SoC During the same period Eben Upton designed several concepts for the Raspberry Pi and by 2008 thanks to a by product of the increasing penetration of mobile phone technology the cost of building a miniature portable microcomputer with many of the multimedia functions that the public was accustomed to was becoming viable Thus the
51. c inventor who worked in a variety of fields including electricity These electric room thermostats became a common feature in homes across the course of the twentieth century as larger parts of the world were hooked up the electricity grid Now with open hardware electronic tools such as the Arduino available we can build custom thermostats for a variety of home projects They can be used to control baseboard heaters heat lamps and air conditioner units They can also be used for the following e Fish tank heaters Indoor gardens e Electric heaters e Fans Now that we have explored the uses of thermostats let s take a look at our project Setting up our hardware In the following examples we will list the pins to which you need to connect your hardware However we recommend that when you purchase any device such as the Ethernet shield you check whether certain pins are available or not Due to the sheer range of hardware available it is not possible to list every potential hardware combination Therefore if the pin in the example is not free you can update the circuit and source code to use a different pin When building the example we also recommend using a breadboard This will allow you to experiment with building your circuit without having to solder any components Our first task will be to set up our thermostat device so that it has Ethernet access 29 Central Air and Heating Thermostat Adding the Ether
52. cumentation installation installing images linux md e Mac OS X http www raspberrypi org documentation installation installing images mac md e Windows http www raspberrypi org documentation installation installing images windows md Once the operating system is installed we can wrap up its configuration by ensuring that the Secure Shell SSH for remote connection to the Raspberry Pi is up and running Raspberry Pi SSH setup You have now successfully completed the Raspberry Pi setup and will see the Raspbian Linux desktop This desktop contains a number of icons that will load the programs installed by default including Midori a fast and light web browser and the Python programming language IDE integrated development environment both of which we will be using Also of note is the LXTerminal This icon launches the Linux Terminal window which allows us to run applications via the command line A final task that we can complete before moving on to installing our Arduino software is to check whether SSH is up and running We will be using SSH to connect to our Raspberry Pi remotely in future projects Perform the following steps to set up SSH 1 Opena Terminal window and type the following command ps aux grep sshd 2 You should see the following process running root 2067 0 0 0 2 6208 1060 Ss 18 17 0 00 usr sbin sshd 3 If you do not see the SSH process running enter the following command sudo etc init d ssh
53. d their history While Sutherland s ECHO IV filled a room in his house the Raspberry Pi occupies space not much larger than a credit card Home automation now seems to be taking the next step to becoming widely adopted and the Raspberry Pi neatly fits into this world by providing those who want to customize control of their devices with an easy and a cheap tool to achieve it and also by expanding what can be done with Arduino technology currently out in the marketplace With this in mind we will get started on our first project setting up the Raspberry Pi Here we will install the necessary software to get our Raspberry Pi up and running and install the Arduino IDE so that we can program our Arduino Uno 18 Getting Started Setting Up Your Raspberry Pi and Arduino This chapter aims to provide a quick overview on setting up the Raspberry Pi and Arduino In order to use your Raspberry Pi you need to start by installing an operating system on an SD card Once this is in place you can install extra software to write code Setting the up Arduino is much simpler All you need is to download the IDE and plug the Arduino into your computer via a USB cable We will start this chapter by walking through the Raspberry Pi setup The SD card our Raspberry Pi s storage device A secure digital SD card is a form of a portable high performance storage medium available for electronic devices ranging from cameras to PCs T
54. d over the past few years with many new technologies in both the commercial and open source worlds This book provides a gateway for those interested in learning more about this topic and building their own projects With the introduction of the Raspberry Pi computer in 2012 a small and powerful tool is now available for the home automation enthusiast programmer and electronic hobbyist It allows them to augment their home with sensors and software Combining Raspberry Pi with the power of the open hardware Arduino platform this book will take you through several projects in which you will build electronic sensors and introduce you to software that will record their data for later use We hope you will enjoy the second edition of Raspberry Pi Home Automation with Arduino What this book covers Chapter1 An Introduction to the Raspberry Pi Arduino and Home Automation introduces the technologies used in the book and provides a conceptual background to the world of home automation Chapter 2 Getting Started Setting Up Your Raspberry Pi and Arduino is a guide to your Raspberry Pi Arduino and the Cooking Hacks Raspberry Pi to Arduino bridge shield Chapter 3 Central Air and Heating Thermostat teaches you how to build a thermostat using the Arduino platform to control your central air conditioning and heating Chapter 4 Temperature Storage Setting Up a Database to Store Your Results shows you how to build a database to store
55. d the schematics and the source library for the board This will give you an idea if you have the free digital pins available to implement it amp Arduino offer their own LCD screen You can read more X about it at http arduino cc en Main GTFT Once you have hooked up the screen you will need to update your Arduino sketch If you purchased the ArduinoTFT screen you can see an example of y how to display text on itat http arduino cc en Tutorial TFTDisplayText It is easy to modify the block of code that returns the temperature to also output this data to the LCD screen This completes our list of future enhancements Let s now summarize the chapter 42 Chapter 3 Summary In this chapter we built a thermostat device We looked at thermistors and you learned how to set up an Ethernet connection To control our thermostat we wrote an Arduino sketch uploaded it to the microcontroller and then tested it with a fan plugged into the mains electricity Finally we reviewed some steps to expand the device so that it can accommodate an LCD screen and potentiometer to change the observed temperature Next we will look at building a database to store the values returned from our thermostat This will be done in our first project using the Raspberry Pi 43 Temperature Storage oetting Up a Database to otore Your Results In the next few chapters the Raspberry Pi will act as a central control d
56. d variables to the sketch include lt SPI h gt include lt Ethernet h gt define THRESHOLD 400 unsigned char fsr 0 The sensor pin int check pressure 0 int room 2 64 Chapter 5 boolean is delivered true boolean email sent false byte mac OxDE OxAD OxBB OxEF OxFE OxED char server 192 168 3 4 IPAddress ip 192 168 3 6 EthernetClient client In the preceding code we included the libraries we need You should recognize these from Chapter 3 Central Air and Heating Thermostat Next we define the sr variable to record which analog pin we are using The THRESHOLD check pressure and is delivered variables are used to test and record whether a package has been placed on the sensor The room variable is the ID of the room or location where the parcel sensor will be placed Later in this chapter we will add this room to our SQLite database on the Raspberry Pi Finally you will see several variables used to define the IP address and MAC address of the Arduino and the IP address of the Raspberry Pi Remember to update these IP addresses to reflect your local network s addressing scheme Next add the following functions void setup Serial begin 9600 Ethernet begin mac ip pinMode fsr INPUT void loop check pressure analogRead fsr Serial println check pressure if is delivered if check pressure gt THRESHOLD is delivered true if
57. e class WebService port 8081 def start server self Server HTTPServer self port RequestHandler server serve forever Xf name main webservice WebService webservice start server Here we start an HTTP service on port 8081 This is the port on your Raspberry Pi that the Arduino sketch connects to This wraps up our web service Save the file and exit We are now going to start the service Starting the web service Starting the web service is simple from the command line run this expression pythonwebservice py amp The application is now running on port 8081 and also as a background process on the Pi You will notice that the process number will be displayed on the command line for example 1 10813 The amp symbol in the preceding command places the process in the V background To view this process you can type ps aux grep webservice py You can test it by accessing the following URL http lt ip of raspberry pi gt 8081 The Raspberry Pi will return the following response to the browser Parcel sensor service running 71 Parcel Delivery Detector If you see a successful response then your web service is running successfully I gt If you wish to stop the web service you can kill the process using kill process number gt Testing our application We are almost done with our parcel detection system With the Arduino up and running and the Raspberry
58. e The second edition of this book saw this chapter simplified so that more time could be spent writing Python code and less in setting up web servers Chapter 5 Parcel Delivery Detector built upon the previous chapter by walking us through building an Arduino parcel detector that writes data to the Raspberry Pi This chapter introduced new components not seen in the first edition and also provided the opportunity to work with the Arduino further Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light brought together some of our techniques from the earlier chapters Like the first edition it introduced us to the bridge shield and demonstrated controlling a DC motor using an Arduino motor shield 110 Chapter 8 Finally Chapter 7 Water Damp Detection Check for Damp Flooding in Sheds and Basements showed you how to use a Cooking Hacks bridge shield to build a device that checks for flooding or dampness This was a new chapter in this edition of the book and introduced you to components we had not used in the first edition You should see from this review that you have slowly built up a set of techniques that use similar ideas but are transferable to devices that have different applications at home We can now use these methods to build custom devices Next steps We have refreshed ourselves on the subjects covered so far Let s look at future projects that you can try These will prov
59. e Packt Publishing homepage http www packtpub com e Expert Python Programming http www packtpub com expert python programming book e Linux Shell Scripting Cookbook http www packtpub com linux shell scripting cookbook book 0 e CherryPy Essentials Rapid Python Web Application development http www packtpub com CherryPy book Home automation technology For those interested in commercial and open source home automation applications and technology we have provided links to several resources including those related to X10 e X10 knowledge base http kbase x10 com wiki Main_Page e X10 com http www x10 com homepage htm e Nest Learning Thermostat http www nest com e Android operating system http www android com Android developer resources http developer android com index html e Open source automation Windows based http www opensourceautomation com e Open Remote http www openremote org display HOME OpenRemote e Honeywell for your home http yourhome honeywell com home e Hackaday blog http hackaday com e Tris Smart Kit http www lowes com cd Products 1337707661000 125 References 3D printing 3D printing provides home automation enthusiasts with the tools that they can use to build custom cases brackets gears and other tools for their systems The following links cover 3D printers and 3D printing services Makerbot 3D printers http www mak
60. e controlled via the motor controller s pins It also comes equipped with a fuse for current protection and internal temperature protection to help prevent overheating This removes the need to use a separate motor shield as we did in Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light The open collector drivers The open collector drivers OC drivers are used to turn the devices that are connected to the Gertboard on and off This is especially useful when the device connected requires a higher voltage than what is available via the Gertboard One common application of the OC drivers is to hook up the devices used to display visual data such as a Vacuum fluorescent display VFD These are the types of display that you may commonly find in home appliances such as your cooker or microwave They are used to communicate information such as cooking time and temperature Buffered I O The input output ports on the Gertboard are where you will connect your buttons and LEDs These are controlled via jumpers which set the port to input or output mode The button for example is an input mechanism and the LED is an output mechanism Switching an LED on will result in sending the command from the Raspberry Pi via an output to the Gertboard as an input A pushbutton works in an opposite way to this whereby an input from the button is sent to the Gertboard and an output from the Gertboard is received as an inpu
61. ectricity that you can use GA as a starting point at http en wikipedia org wiki Mains electricity Feel free to build the thermostat device and stop when it comes to the final steps of wiring it up if you don t feel comfortable with your ability You can always revisit this project at a later date if you wish With that said let s explore what a thermostat does Introducing the thermostat A thermostat is a control device that is used to manipulate other devices based on a temperature setting This temperature setting is known as the setpoint When the temperature changes in relation to the setpoint a device can be switched on or off For example let s imagine a system where a simple thermostat is set to switch an electric heater on when the temperature drops below 25 degrees Celsius 28 Chapter 3 Within our thermostat we have a temperature sensing device such as a thermistor that returns a temperature reading every few seconds When the thermistor reads a temperature below the setpoint 25 degrees Celsius the thermostat will switch a relay on completing the circuit between the wall plug and our electric heater and providing it with power Thus we can see that a simple electronic thermostat can be used to switch on a variety of devices Warren S Johnson a college professor in Wisconsin is credited with inventing the electric room thermostat in the 1880s Johnson was known throughout his lifetime as a prolifi
62. ed in a circuit can be used to measure temperature The device is a type of resistor that has the property whereby its resistance varies as the temperature changes It can be found in a variety of devices including thermostats and electronic thermometers There are two categories of thermistors available Negative Thermistor Coefficient NTC and Positive Thermistor Coefficient PTC The difference between them is that as the temperature increases the resistance decreases in the case of an NTC and on the other hand it increases in the case of a PTC We are going to use a prebuilt digital device with the model number AM2303 This can be purchased at https www adafruit com products 393 This device reads both temperature and humidity It also comes with a software library that you can use in your Arduino sketches One of the benefits of this library is that many functions that precompute values such as temperature in Celsius are available and thus don t require you to write a lot of code 31 Central Air and Heating Thermostat Take your AM203 and connect it to the GRD pin 5V pin and digital pin 4 The following diagram shows how it should be set up T Arduino fritzing You are now ready to move on to creating the software to test for temperature readings Setting up our software We now need to write an application in the Arduino IDE to control our new thermostat device Our software will co
63. ence link 12 Index Arduino to Raspberry Pi connection bridge using 24 25 Arduino Wireless shield URL 74 arduPi installing 78 79 motors 79 80 motor shield 79 80 photoresistors 79 Asynchronous JavaScript and XML AJAX request 38 Atmel ATmega microcontroller 115 B blank SD card versus preinstalled SD card 20 blinds curtains connecting to 90 hardware attaching 90 91 problems debugging 91 timing setting 90 buffered I O 115 buzzers Adafruit URL 108 C C C online resources 123 convertors 116 Cooking Hacks about 11 25 URL 11 25 cron job about 55 adding 55 56 curtain control application about 85 Arduino bridge shield 78 code writing 86 89 components wiring up 80 85 motor shield setting up 84 photoresistor mounting 92 photoresistor setting up 80 photoresistor testing with software 82 83 pulse width modulation PWM 85 requisites 77 stepper motor adding 92 threads 85 D DAC 116 damp detection system about 96 Arduino circuit building 96 97 building 95 cron job adding 101 Python code 100 101 sketch code adding 97 99 database SOLite creating 49 room table creating 50 Temperature table creating 50 updating 100 DHT library URL 33 direct current DC 115 E EEG headsets 119 electronic color code resistors URL 63 electronic components online resources 124 Electronic Computing Home Operator ECHO 14 Emotiv headset URL 119 Ethernet shield adding 30 Ethernet to wi
64. end us e mail alerts This functionality will also form the basis for alerts in Chapter 7 Water Damp Detection Check for Damp Flooding in Sheds and Basements For this project you will need An Arduino Uno An Ethernet shield A Cat 5 Ethernet cable A power adaptor wall wart battery pack A force sensing resistor pressure sensor Wires A breadboard A 10K ohm resistor Your Raspberry Pi control device Waterproof casing A bin or box to place parcels in Parcel Delivery Detector Wiring up the parcel sensor Our first task is to wire up the system This will involve hooking up the Ethernet shield to the Arduino and then building a circuit to connect the force based resistor to the Arduino s pins To start with we will briefly review what resistors are An introduction to resistors A resistor is an electronic component with two connection points known as terminals that can be used to reduce the amount of electrical energy passing through a point in a circuit This reduction in energy is known as resistance Resistance is measured in Ohms Q n i You can read more about how this is calculated at http en wikipedia org wiki Ohm s law You will find that resistors are usually classified into two groups Fixed resistors The fixed resistors that you will come across are usually made of a carbon film with the resistance marked in colored bands giving you the value in ohms e Variable resistors Components fa
65. eport this to us By doing so you can save other readers from frustration and help us improve subsequent versions of this book If you find any errata please report them by visiting http www packtpub com submit errata selecting your book clicking on the Errata Submission Form link and entering the details of your errata Once your errata are verified your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title To view the previously submitted errata go to https www packtpub com books content support and enter the name of the book in the search field The required information will appear under the Errata section Piracy Piracy of copyright material on the Internet is an ongoing problem across all media At Packt we take the protection of our copyright and licenses very seriously If you come across any illegal copies of our works in any form on the Internet please provide us with the location address or website name immediately so that we can pursue a remedy Please contact us at copyrightepacktpub com with a link to the suspected pirated material We appreciate your help in protecting our authors and our ability to bring you valuable content Questions You can contact us at quest ionsepacktpub com if you are having a problem with any aspect of the book and we will do our best to address it 5 An Introduction
66. erbot com Thingiverse http www thingiverse com Shapeways 3D printing on demand http www shapeways com Stratasys 3D printers http www stratasys com i materialise http i materialise com Next Engine 3D scanner http www nextengine com David 3D scanner http www david laserscanner com Here is a list of miscellaneous resources based on some of the topics touched upon in this book and other areas of interest Popular mechanics back issues at Google Books http books google com books id 49gDAAAAMBAJ amp source gbs all issues r amp cad 1 amp atm aiy 196048all issues anchor Wikipedia article on mains electricity http en wikipedia org wiki Mains electricity Wikipedia article on relays http en wikipedia org wiki Relay Wikibooks content on embedded systems http en wikibooks org wiki Embedded Systems Open Source Initiative http opensource org 126 Symbols 3D printing about 118 126 online resources 126 10K ohm resistor 63 A ADC 116 Android OS 17 Arduino components connecting 63 history 9 11 online resources 123 Raspberry Pi to Arduino shield connection bridge 11 12 soldering 13 URL 73 Arduino bridge shield about 78 arduPi installing 78 Arduino Ethernet shield URL 30 Arduino IDE about 23 24 installing 23 installing on Raspberry Pi 23 URL 23 URL for installation guide 116 Arduino motor shield URL 80 Arduino products URL 11 Arduino shields refer
67. ere are several example programs written for the Gertboard in C that you may be interested in checking out at http www element14 com community docs DOC 61025 1 gertboard application library for gertboard kit linux Gordon Henderson s website also provides a guide to install the Arduino IDE on the Raspberry Pi and configure it to work with the Gertboard The instructions can be found at https projects drogon net raspberry pi gertboard arduino ide installation isp So with two new boards to explore and some different libraries let s look at some future projects that can leverage your existing hardware an Arduino microcontroller or use one of the other shields we have looked at Ideas for future projects This book includes a variety of projects that provide tools to sense and automate your home environment Armed with knowledge after completing these projects you are now equipped with the skills to expand your existing projects and create exciting new devices The following is list that provides some potential projects for the future 116 Chapter 8 Expanding the curtain automation tool to include temperature sensing Your current application from Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light uses light to decide when to open and close the blinds or curtains You can now try combining the thermostat from Chapter 3 Central Air and Heating Thermostat with the curtain control de
68. es that will handle the incoming HTTP requests process the incoming JSON variables and connect to our SQLite database Next we will add to our file a class that handles the incoming HTTP GET and POST requests class RequestHandler BaseHTTPRequestHandler def do GET self self send response 200 self send header Content type text html self end headers self wfile write Parcel sensor service running return Here we handle an incoming GET request and respond with an HTML page to let the user know the system is up and running Next let s add the code for handling the POST request def do POST self data string cgi parse qs self rfile read int self headers Content Length keep blank values 1 room json loads data string keys 01 room my query INSERT INTO parcel roomid datetime VALUES s CURRENT TIMESTAMP room try connection sqlite3 connect home pi control db isolation level None cursor connection cursor cursor execute my query query results cursor fetchone my response New parcel delivered to room ID s room self send mail 69 Parcel Delivery Detector except sqlite3 Error e my response There is an error s e finally print my response connection close Here we accept an incoming POST request and extract the room value that is passed to the web service Next we take this value and write it to the SOLite databa
69. et We can run the Python script from the Raspberry Pi command line in the following way python request py You should see this output Inserted 13 1 for room 1 Having run the script to check your database start by opening the SQLite shell Sqlite3 control db Next run the following query SELECT from Temperature You will see something like this 1 1 13 1 2014 01 24 10 17 06 This confirms that our script is running correctly Each time you run the application you should see a new entry in your database This finishes our script that writes the temperature and room to the database We could also expand this to include the humidity value that is returned As useful as this script is it is not convenient to run it manually We can automate this process using a cron job Adding a cron job A cron job is a method that allows the operating system to periodically run scripts tasks and other programs without the user requiring to log in and run them themselves Cron is built into the Raspbian operating system so we have no extra software to install We simply have to edit the cron table crontab and add a timestamp and path to the script we want to run 1 Wecan see which cron jobs are currently running on our Raspberry Pi by typing this crontab 1 You may notice that there are no jobs in the list 2 To edit the file we use the e flag crontab e 55 Temperature Storage Setting Up a Database to Store Y
70. evice to read data from our Arduino devices control DC motors and send e mails In this chapter we will cover setting up a database on the Raspberry Pi using SQLite This SOL database will be a place to store the results from the temperature readings that we captured in the previous chapter We will also look at HyperText Structured Query Language HTSQL a language that allows us to query our database via HTTP requests Along with these technologies we will set up a Python script that grabs the temperature reading from the Arduino and writes it to the database This script will be run periodically via a cron job For this chapter you will need the following e The Raspberry Pi you set up e Optionally a monitor keyboard and mouse plugged into your Raspberry Pi if you don t plan to connect over SSH The Arduino thermostat you built in the previous chapter Let s get started Our first step will be to SSH into our Raspberry Pi install SQLite 3 x and set up our control database Temperature Storage Setting Up a Database to Store Your Results SSH In the first chapter we verified that SSH was up and running on Raspbian In order to connect to the SSH service that we started you will need the Raspberry Pi s IP address There are several ways of getting the IP address assigned to your Raspberry Pi one of which is to check out the DHCP table on your home modem or router However an easier method is to check it out on
71. experience includes Python and JavaScript development e learning CMS and LMS development SCORM consultancy web development in a variety of languages open source application development and a blog dedicated to maker culture and home automation His interests include web development e learning 3D printing Linux the Raspberry Pi and Arduino open source projects parallel computing home automation amateur electronics home networking and software engineering Many of these topics were covered in his previous book Raspberry Pi Super Cluster Packt Publishing I would like to thank my wife Megen for supporting me throughout this project and my parents for their support with my interest in technology while I was growing up I would also like to thank the team at Prometheus Research for making this a great and interesting place to work and helping to change the face of data management Finally I would like to thank everyone who bought the first edition of this book and the team at Packt Publishing for commissioning this second edition www allitebooks com About the Reviewers Ed Baker graduated with a BSc in Physics from Imperial College in 2007 and somehow ended up working in the Entomology Department of The Natural History Museum shortly afterwards His work focuses on how technology both hardware and software can improve the way research is performed from field data collection to final publication Outside the
72. f 8 client print Content Length client println data length client println client println data client println Connection close client println else Serial println connection failed 66 Chapter 5 The notify parcel function creates a simple HTTP post request containing some JSON data This data consists of the ID of the room in which the parcel sensor is located The port number 8081 is where we are going to serve our Python web service to take this incoming HTTP request data and turn it into a DB query and e mail Save the code and upload it to your Arduino This completes the Arduino sketch Let s now turn our attention to the Raspberry Pi Updating the Raspberry Pi database Our Arduino is now making HTTP requests when the pressure sensor is tripped Therefore we need to update the Raspberry Pi s database we created in the previous chapter to collect this information In order to write this data to the database we will also need to create a small web service that captures the HTTP request and generates a SOL query We will start by updating our SOLite database to include a table to capture sensor data Open control db in SQLite and run the following query CREATE TABLE Parcel ID INTEGER PRIMARY KEY AUTOINCREMENT RoomIDINTEGER DatetimeDATETIME FOREIGN KEY RoomID REFERENCES RoomDetails ID This creates a new table called Parcel In this table
73. f your open and close settings 91 Curtain Automation Open and Close the Curtains Based on the Ambient Light Next steps Now we have a simple curtain control device up and running in our room Let s look at some of the next steps Mounting the photoresistor outdoors You may have noticed that turning the lights on in the room trips the light sensor which is not good Therefore it would make sense to mount the photoresistor outside the house if you haven t done that already Your circuit should be easy to modify to include this feature All you will need to do is extend the length of the wires connecting the photoresistor to the bridge shield These wires could then be fed through a window allowing the Raspberry Pi to be stored inside so that it can be connected to the blinds Adding a stepper motor Another motor type we could consider using is a DC stepper motor A stepper motor divides a full revolution into an equal number of steps The motor can then be controlled to move through each of these steps and paused at a certain step if needed Therefore you can incrementally wind the curtain cord using this method a The Adafruit website provides a wide variety of stepper motor GA equipment including mountings and brackets at https www adafruit com search g 1 amp q stepper 20motor Adding a stepper motor will give you far more flexibility over the curtain control process than a simple DC motor and it i
74. fan using relays and a thermistor The principles used in this project can be applied to a desktop lamp or a similar lighting device Using the relay shield an Arduino Uno and a photoresistor we can write an application to switch on the lighting device when the room gets dark 117 Wrapping Up Holiday lights from LEDs One application of the PWM code we wrote in Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light is to cause LEDs to blink on and off This provides us with the technology to make holiday lights that can blink and fade in a pattern To build this project you can time the lights to switch on and off in synchronization with music to provide an even more interesting experience The future of home automation The Raspberry Pi and Arduino are two great technologies to create home automation projects As they continue to grow the tasks that we will be able to achieve at home using homebrew devices will grow even larger Let s take a look of some of the other tools that will become increasingly available to home enthusiasts 3D printing 3D printing is a method of taking a three dimensional image and then printing it in a substance such as plastic or metal The advent of cheaper 3D printing has provided home automation enthusiasts with a new tool for their arsenal 3D printing s ability to create custom cases and brackets for devices and then print these in plastic provides a gate
75. g 13 130 Hyper Text Structured Query Language HTSQL using 14 Python using 13 SOL using 13 software thermostat coding 33 36 setting up 32 33 soldering 13 SOL online resources 124 using 13 SQLite about 48 database creating 49 SOL queries writing 50 52 URL 48 using 45 sqlite3_close function 105 sqlite3_exec function 105 sqlite3_open function 105 SQLite Version 3 x installing 48 49 StackExchange about 24 URL 24 stepper motor adding 92 URL 92 System on a Chip SoC 9 T thermistor about 31 connecting 31 32 Negative Thermistor Coefficient NTC 31 Positive Thermistor Coefficient PTC 31 thermostat about 28 29 attaching to heating system 40 41 extra features adding 39 40 fan attaching 37 hardware setting up 29 JSON response testing 38 39 LCD screen adding 42 potentiometer adding 41 42 software setting up 32 33 starting 37 38 testing 37 usage 29 two wire system thermostat reference link 40 U Uno board using 10 US CDC URL 96 V Vacuum fluorescent display VFD 115 W water detection 106 107 web based Python application about 67 68 application testing 72 SMTP setting up 68 web service starting 71 wiringPi library about 112 113 URL 113 X X10 15 16 XBee URL 74 131 PACKT open source PUBLISHING Thank you for buying Raspberry Pi Home Automation with Arduino Second Edition About Packt Publishing Packt pro
76. grees C Humidity 35 70 Temperature 14 90 degrees C You can now stimulate the thermistor using an ice cube and hair dryer to switch the relay on and off and the fan will follow suit If you refresh your connection to the IP address you should see the change in the temperature output on the screen You can use the F5 key to do this Besides returning the HTML document our Arduino sketch also returns JSON data which we will use in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results Let s now test the JSON response Testing the JSON response A format useful in transferring data between applications is JavaScript Object Notation JSON e A You can read more about this on the official JSON Sd website at http www json org The purpose of us generating data in JSON format is to allow the Raspberry Pi control device we are building to query the thermostat periodically and collect the data being generated We can verify that we are getting JSON data back from the sketch by making an HTTP request using the application json header Load a web browser such as Google Chrome or FireFox We are going to make an XML HTTP request directly from the browser to our thermostat This type of request is commonly known as an Asynchronous V JavaScript and XML AJAX request It can be used to refresh data on a page without having to actually reload it 38 Chapter 3 In your web browser loca
77. hat connects the plug to the fan body Take the end of the cable attached to the plug and attach it to the NO point on the relay Use a screwdriver to ensure that it is fastened correctly Now take the other portion of the cut cable that is attached to the fan body and attach this to the COM point Once again use a screwdriver to ensure that it is fastened securely to the relay Your connection should look as follows fritzing You can now reattach your Arduino to the computer via its USB cable However do not plug the fan into the wall yet Starting your thermostat application With the fan connected to our relay we can upload our sketch and test it 1 From the Arudino IDE select the upload icon Once the code has been uploaded disconnect your Arduino board 2 Next connect an Ethernet cable to your Arduino Following this plug the Arduino into the wall to get mains power 37 www allitebooks com Central Air and Heating Thermostat 3 Finally connect the fan to the wall outlet 4 You should hear the clicking sound of the relay as it switches on or off depending on the room temperature When the relay switch is on or off the fan will follow suit 5 Using a separate laptop if you have it or from your Raspberry Pi access the IP address you specified in the application via a web browser for example http 192 168 3 5 6 You should see something similar to this Thermostat set to 25de
78. have our hardware in place we can take a look at our first project building a central air and heating thermostat In this project which will be in the next chapter we will be using an Arduino Uno along with a relay and thermistor to control a central heating or cooling device such as a boiler furnace or central air conditioning system 26 Central Air and Heating Thermostat In this chapter you will learn how to build a thermostat device using an Arduino You will also learn how to use the temperature data to switch relays on and off Relays are the main components that you can use for interaction between your Arduino and high voltage electronic devices The thermostat will also provide a web interface so that you can connect to it and check out the temperature Our example project will involve switching an electric fan on when the temperature rises above a set point of 25 degrees Celsius and then switching it off when the temperature drops We can use an ice cube and a hair dryer or a similar device to stimulate the thermistor The code that controls the Arduino will also be ready to return data in a format that will be easy to insert into a database We will create this database in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results Upon completion of the thermostat you will have a device that you can use in your home to control a variety of devices beyond the fan example To build the therm
79. he GRD and 5V pins When the potentiometer is twisted its resistance is changed Using the value returned from the analog pin you can update your setpoint value The Arduino website provides a simple introduction to understanding potentiometers at http www arduino cc en tutorial potentiometer Let s assume that you have set initialSetPoint as a constant at the top of your sketch The following code provides an example of how you could update the setpoint int potentiometer 2 int setpoint void setup 41 Central Air and Heating Thermostat void loop setpoint initialSetPoint analogRead potentiometer You may need to adjust the value being returned from the analogRead function to have it decrement or increment setpoint by a suitable amount For example if you are not running equipment such as a furnace you may want to scale down the value returned as analogRead returns a value between 0 and 1023 To do this you can use the map function setpoint initialSetPoint map analogRead potentiometer 0 1023 10 40 What if we wish to see the value being changed by the potentiometer This is where a screen becomes useful Adding an LCD screen An LCD screen provides a good way of displaying the temperature in real time There are many devices available from simple LCD screens to more complex devices with buttons and micro SD card ports Before purchasing a screen downloa
80. he Raspberry Pi comes equipped with an SD card slot allowing us to insert an SD card and use it as our device s main storage mechanism much like a hard disk on a PC While you can use other storage mechanisms such as a USB drive or USB external hard drive the SD card is small and thus lends itself better to embedded devices such as those found in home automation projects There are various brands of SD cards in the market and they come in a wide range of sizes The Raspberry Pi supports larger SD cards such as those with 64 GB of storage space For the projects in this book you should be using a card with a minimum of 2 GB storage Getting Started Setting Up Your Raspberry Pi and Arduino The official Raspberry Pi website provides a handy guide to SD WS cards at http www raspberrypi org documentation installation sd cards md We will now look at the options available with regards to purchasing an SD card preinstalled with an operating system and then we will learn how to format and install it ourselves Preinstalled SD card versus a blank SD card Since the Raspberry Pi was released a number of websites have been offering preloaded SD cards that come installed with one of the operating systems that are available for the Raspberry Pi These are a good option for amateur enthusiasts looking to get started with the Raspberry Pi who do not want to go through the setup process and are happy with a single preloaded operating sy
81. ide you with a few ideas on how you can expand existing projects and provide some starting points to build your own ideas from scratch First we ll review the prototyping Pi Plate Then we will look at the Gertboard and its background Finally we ll provide some ideas for future projects that could use the Cooking Hacks shield Gertboard Arduino or the prototype shield The prototyping Pi Plate The Raspberry Pi prototyping Pi Plate shield is a kit provided by Adafruit Industries You can find out more about it at http learn adafruit com adafruit prototyping pi plate overview It allows you to create a prototyping shield that connects to the GPIO pins on the Raspberry Pi You may be familiar with this principle from the Cooking Hacks shield which you used to build your previous projects Unlike the Raspberry Pi to Arduino shield this is a kit whose components need to be soldered together By building this shield you will get a platform that you can use for custom projects The prototyping Pi Plate consists of a single board divided between perfboard style and breadboard style pins Access to the Raspberry Pi GPIO pins is around the edge of board where a number of screw terminals are fixed and doubled up with standard pins located further in on the board The shield allows you to solder individual components to it and also place a miniature breadboard between the screw terminals for prototyping Using an example from Chapter 6 Curta
82. ight we will download the arduPi library in the Raspberry Pi The arduPi library provides us with a software library that allows us to write Arduino style C code in the Raspberry Pi that looks similar to Arduino sketches This code can then control the bridge shield I O pins and any Arduino shields or electronics connected to them There are several releases of the library available depending on which model of the Raspberry Pi you purchased You may be interested in checking out which version you have and making a note of this now Cooking Hacks provides a guide about this connection bridge amp at http www cooking hacks com documentation GA tutorials raspberry pi to arduino shields connection bridge step3 This overview covers the last of our hardware components We are now ready and can start using these devices First let s quickly recap what we covered 25 Getting Started Setting Up Your Raspberry Pi and Arduino Summary In this chapter we looked at what an SD card is setting it up to use it with the Raspberry Pi installing an operating system and loading our Raspberry Pi for the first time We also downloaded the Arduino IDE and uploaded a test sketch to ensure that our setup was correct In future chapters we will cover the IDE in depth Finally we took a brief look at the Arduino to Raspberry Pi connection bridge in preparation for future projects and touched upon the arduPi library Now that we
83. in 9600 Ethernet begin mac ip server begin dht begin void loop float h dht readHumidity float t dht readTemperature listen for incoming clients client server available if client an http request ends with a blank line boolean currentLineIsBlank true String result while client connected if client available char c client read result result c if result indexOf text html gt 1 client println HTTP 1 1 200 OK client println Content Type text html client println if isnan h isnan t client println Failed to read from DHT sensor return client println Humidity client println h client println t 98 Chapter 7 client println br Temperature client println t client println degrees C break if result indexOf application json gt 1 client println HTTP 1 1 200 OK client println Content Type application json charset utf 8 client println Server Arduino client println Connnection close client println client print thermostat location client print room client print client print temperature client print t client print client print humidity client print h client print client print client println break delay 1 client stop
84. in Automation Open and Close the Curtains Based on the Ambient Light we can solder our components directly to the prototype shield and thus have a compact device that uses a single shield 111 Wrapping Up A comprehensive guide to soldering the shield can be found at http learn adafruit com adafruit prototyping pi GS plate solder it n s gt Remember to use protective eyewear while soldering to avoid risk of injury to your eyes Also make sure you solder in a well ventilated area Let s look at the GPIO pin arrangement and naming convention on the Raspberry Pi so that you can cross reference these with the prototyping Pi Plate when you wire up your projects This layout is based upon looking at the Raspberry Pi with the GPIO pins located at the top right corner of the board e The schematic at https www adafruit com datasheets me pi2schem pdf may also help you The pins are located in two columns with each pin labeled with its role for example location 1 is the 3 3V pin M You will notice that a number of these are labeled as Not used These Q pins are currently not used and are set aside for future expansions of the Raspberry Pi s architecture With this information we can write custom code to interact with the pins or use other generic libraries that allow us to read and write data The wiringPi library which we will now look at provides a few software tools that we can use with our Raspberry
85. ing Up The Raspberry Pi community is growing by the day and the best place to share your projects and look for help is at the Raspberry Pi amp website forum at http www raspberrypi org forums Gs The Arduino community is well established and like the Raspberry Pi website has a lively forum where you can ask for help at http arduino cc forum We started the book by looking at the history of home automation and finished it by looking at the future With this information it is now over to you to continue your journey 120 References In this appendix we will be seeing some links and resources that will be useful for you for future projects and will help you to learn more about the technologies used in this book These links cover a variety of sites including commercial and open source You will also find URLs that provide additional information on some of the commands and programming languages that we have used Let s look at them one by one Raspberry Pi The following links provide information and support for the Raspberry Pi and Raspbian operating system e Official Raspberry Pi website http www raspberrypi org e Official Raspberry Pi forum http www raspberrypi org phpBB3 e Raspbian website http www raspbian org e ThewiringPi library http wiringpi com e Gertboard user manual http www element14 com community servlet JiveServlet downloadBody 51727 102 3 267366 Gertboard UM
86. ing similar The following projects are optional With the thermostat device you have built you can continue to follow the examples in the coming chapters skipping the following section if you wish You can always revisit these projects at a later date Attaching the device to your heating system or a similar appliance Your next step will be to attach the thermostat to another electrical system you wish to control for example a heating system or fish tank Some thermostats handle multiple systems such as heating and cooling and if you wish to replicate this functionality you will need to add more relays to your device and expand the sketch code to support switching multiple relays on and off The thermostat we built works with a two wire system e You can read more on this at http www electrical online Z com thermostat wiring explained Start by powering the Arduino down and disconnecting the fan from the relay Once this is done you can complete the following steps Remember that working with mains electricity is dangerous This section is purely for the purpose of information Many off the shelf M products are not safety rated for use with systems such as furnaces Always check out the documentation that accompanies your hardware Q to know whether it can be used safely for such a system If you do not have the skill to safely attach the thermostat to your heating system consider consulting a certified electrician 1 Next
87. is concerned with the process of generating pulse width modulation The while loop runs indefinitely and the code within it is responsible for switching pin 3 between HIGH and Low with a pause between each command to control the speed There is a conditional statement that checks whether the motor should be switched on or off If the variable is set to false then it means that the curtain is either fully open or shut Thus we switch the voltage applied to pin 3 to 0 Low Next we need a function to control the motor s state This function pauses the thread updates the on off state and then restarts the thread void controlMotor boolean state pthread mutex lock amp pwmmutex off on state pthread mutex unlock amp pwmmutex 87 Curtain Automation Open and Close the Curtains Based on the Ambient Light This allows us to switch off the PWM at any point in our application which in turn stops the motor int main void setup while 1 loop delay 100 return 0 1 void setup pthread_create amp pwmthread NULL amp pwm NULL pinMode DIRECTION OUTPUT We added two new statements to the setup function The first statement creates the new PWM thread and the second sets the direction pin stored in the DIRECTION constant to OUTPUT void loop float analogReadingArduino analogReadingArduino analogRead 7 Next we need to add code that uses
88. ject using a 9V motor You can always upgrade to a 12V motor once you have your application and circuit up and running Depending on the type of blinds you have using a motor in the range of 9V to 12V should provide enough torque Setting up the photoresistor We are going to start by wiring up our photoresistor and testing it with software that uses the arduPi library Once we have tested it we can hook it up with the motor shield and use the values it returns to turn the motor on and off Wiring up the components Our first task is to set up our circuit This process is very similar to the way you created the FSR circuit in Chapter 5 Parcel Delivery Detector You ll need your resistor photoresistor three wires black red and yellow are used in the explanation and the breadboard Follow these steps to wire up the components Take the red wire and connect it from the 5V pin on the shield to the supply voltage on the breadboard Next connect the black wire from the ground pin on the Raspberry Pi to Arduino bridge shield to the ground on the breadboard 80 Chapter 6 As we did with the FSR circuit before we will now connect a resistor to the breadboard Connect one pin of your resistor to the supply voltage strip that your red wire is connected to and then connect the other end to a terminal strip e We can now connect our photoresistor Insert one leg of the photoresistor into the ground on the bus strip
89. ke programming language Cheap and easy to use Arduino is an alternative to expensive programmable cards and closed commercial systems Therefore it helped pave the way for home enthusiasts to build their own home automation projects Currently there are several board models in the market with a wide range of sizes and components for example the Lily Pad allows enthusiasts to attach an Arduino board to clothing for textile based electronic projects These boards support a wide range of shields Arduino compatible electronic boards that can be plugged into it and expand its functionality One particular extension has been the introduction of Ethernet shields and wireless XBee devices that allow communication with home networks and the Web What makes Arduino suitable for amateur enthusiasts is that little or no knowledge of how electronic components are soldered is required to use its prebuilt shields As the user becomes more comfortable with the technology they can progress to building their own projects using the numerous kits and sensors available on the market This easy adoption has helped contribute to a number of websites and books dedicated to home automation projects that use this technology Throughout the following chapters you will explore the use of Arduino alongside the Raspberry Pi For the projects in this book we recommend using the Uno board pictured as follows IE COW Rym Arduino 10 Chapter
90. knowledge of building circuits and hardware for home automation projects You will then learn to write software to both control your hardware projects and record the data generated by them Finally we will consider future projects that you can build with your newly acquired skills Our next step is to learn a little about the background of the technologies that we are going to use We will start with the Raspberry Pi History and background of the Raspberry Pi From the first vacuum tube computers to the tape and punch card machines of the 1960s and the first microprocessor mainframes of the 1970s computing had very much been the preserve of large businesses and the research departments of universities However by the late 1970s with the release of Apple II and seeds planted earlier by technologies such as the TV Typewriter and Apple I this was rapidly changing By the 1980s the public could buy low cost home computers such as the ZX Spectrum and Commodore 64 which hit the market and subsequently gave birth to a whole generation of amateur programmers By the 1990s these programmers brought up on tinkering with their home computers and writing BASIC were heading to academia and the computer industry and helping to forge the dot com boom with game web and business technologies The genesis of the Raspberry Pi is linked to this in many ways A group of computer scientists led by Eben Upton at the University of Cambridge s computer la
91. l then see the following message Warning Permanently added 192 168 3 122 RSA to the list of known hosts 4 Once you have completed this and entered your password you should see the command line for your Raspberry Pi You have now successfully logged in to your Raspberry Pi via SSH Let s now set up SQLite SQLite SQLite 3 x is the latest version of the SQLite series of database technologies Written in the C programming language SQLite is a relational database management system that has continued to support more SQL standards as it progressed through several versions This means that many of the features you may be familiar with within SOL are available to use when creating a SQLite database SOLite has many uses which include creating databases to embed in applications such as web browsers or creating lightweight databases for embedded systems running on hardware such as the Raspberry Pi It is also practical for small projects that do not require a very complex and maintenance heavy RDMS such as Oracle or MS SQL and for those looking for a free and easy solution to store data e You can read more about the technology and the latest features it x supports at http www sqlite org Installing SQLite Version 3 x We will now walk through the process of installing SQLite on our Raspberry Pi You can either log in to your Raspberry Pi via SSH or connect over the desktop and open LXTerminal Once logged in run apt ge
92. lace let s add a room to the RoomDetails table This could be the room that you have your Arduino thermostat running in In the previous chapter we added the Library placeholder to the Arduino code We will go back and change this to the code of the room you have decided to use 51 Temperature Storage Setting Up a Database to Store Your Results In the following example we will use Library as the value 1 6 From within the SQLite3 shell execute the following command INSERT INTO RoomDetails Room VALUES Library Now you can check whether your room is present using this command SELECT FROM RoomDetails This command selects all the values from the RoomDetails table and displays them If you added Library as your room you should see this 1 Library Now we have a room in our database with an ID of 1 which we can use when writing data back from the Arduino application You can now exit the database From the shell type the following command to exit SQLite3 quit You next step is to update the Arduino code to use the ID that was just displayed Open the sketch from Chapter 3 Central Air and Heating Thermostat and modify the following lines client print thermostat location client print room Replace room with the value of 1 or create a new variable assign 1 to it and replace room with the new variable reference Save your Arduino code upload it to your Arduino s
93. le http localhost 8080 temperature An HTSQL server is very simple to set up on our Raspberry Pi so let s get started by installing the necessary packages Downloading HTSQL We are now going to install HTSQL but we will need to install Python pip first This is a Python based package management system that we will be using to install HTSOL sudo apt get install python pip A message will be displayed informing you that the installation will take 14 5 MB of disk space You can press Y and Enter to continue with the installation process Once the installation is complete we can use pip to install HTSQL Type the following in the command line sudo pip install HTSQL 57 www allitebooks com Temperature Storage Setting Up a Database to Store Your Results The HTSQL installation process will kick off and once it is complete we can check whether it was successful In the command line type this expression htsql ctl version You should see the terminal window of the version of HTSQL that you have installed However it will be the latest version in the case of pip Configuring HTSQL The next step is to configure HTSQL point it to our database and then set up a server to allow us to query the database via our web browser We can test our connection to the control database we created as follows htsql ctl shell sqlite path control db This creates a shell similar to the SQLite3 shell on the database we
94. lling under the variable resistance group are those with resistance properties that change when some other ambient property or input in their environment changes You will be exploring some of these throughout the book Let s now examine the two types of resistors we will be using in our circuit a pressure sensor and a 10K ohm resistor Pressure sensor force sensing resistor A force sensing resistor FSR is a type of variable resistor This means that if some input changes pressure or force in our case the resistance of the device also changes by a known amount These types of resistors are perfect for testing whether somebody has placed a parcel onto a specific location 62 Chapter 5 10K ohm resistor A 10K ohm unlike a pressure sensor is designed to have a constant resistance regardless of pressure temperature barometric change or any other change Resistors of this type fall under the fixed resistor category You can tell the value of a resistor by examining the colored bands located on its body When you purchase resistors you may find they come with a color coding guide You can also check the chart on Wikipedia http en wikipedia org wiki Electronic color codefdResistor color coding in order to ascertain what the value is e You will need a 10K ohm resistor as a part of the circuit in order to detect the change in resistance while reading values from the analog pin Connecting the component
95. loads There are a couple of options with regards to the method of downloading this file over a torrent or as a ZIP file Once the file is downloaded you can move on to the steps to set up the SD card and install the operating system Setting up the SD card and installing Raspbian Installing an operating system is a two step process This involves formatting the SD card to the FAT filesystem format and copying and pasting the image to the card File Allocation Table FAT is a method used for recording which sectors of a disk files are stored in and which sectors are free to be written to It has its origins in the 1970s when Bill Gates and Marc McDonald developed it for use on floppy disks Due to its robustness and simplicity it is still found on SD cards today and is the format we will need in order to install Raspbian When you purchase an SD card you might notice that it is already formatted to FAT as this format is popular with devices such as digital cameras Many manufacturers ship the card so that it is ready to go out of the box and no further formatting is required However we recommend formatting your card if you did not purchase the official SD card 21 Getting Started Setting Up Your Raspberry Pi and Arduino To format and copy the downloaded Raspbian image to your card follow the official steps at the Raspberry Pi website depending on your operating system Linux http www raspberrypi org do
96. log boxes appear in the text like this If you see the Getting darker message try shining your flashlight on the sensor GS Warnings or important notes appear in a box like this M Q Tips and tricks appear like this Reader feedback Feedback from our readers is always welcome Let us know what you think about this book what you liked or may have disliked Reader feedback is important for us to develop titles that you really get the most out of To send us general feedback simply send an e mail to feedback packtpub com and mention the book title via the subject of your message If there is a topic that you have expertise in and you are interested in either writing or contributing to a book see our author guide on www packtpub com authors Customer support Now that you are the proud owner of a Packt book we have a number of things to help you to get the most from your purchase Downloading the example code You can download the example code files for all Packt books you have purchased from your account at http www packtpub com If you purchased this book elsewhere you can visit http www packtpub com support and register to have the files e mailed directly to you 4 Preface Errata Although we have taken every care to ensure the accuracy of our content mistakes do happen If you find a mistake in one of our books maybe a mistake in the text or the code we would be grateful if you could r
97. lue for the location and components you use The DIRECTION constant stores the pin on the motor shield that is used to define which way the motor is running clockwise or counterclockwise We use the PWMPIN constant to store the pin number of the pin on which we create a square wave PWM Now add the following code pthread_t pwmthread pthread mutex t pwmmutex PTHREAD MUTEX INITIALIZER These declarations are used for the thread that we will be generated when we create PWM on pin 3 The thread is stored under the variable name of pwmthread Next we add two Boolean variables that act as flags boolean off on boolean open state 86 Chapter 6 The first variable is used to store the condition of the motor switched on or off and the second variable records the open or closed state of our blinds BRK RR KK k k k RR KR RR RR RR RR RR RK RR RR k k RK RRR k k k ke ke ke ke ke ke KK IF YOUR ARDUINO CODE HAS OTHER FUNCTIONS APART FROM getup AND loop YOU MUST DECLARE THEM HERE HK KR KK KR KK k k RK RR k k k k k k k k k k k RR RR KR ke k k ee e ke ke RK RRR RRR KKK KKK KR KK RK RK k k e ke k k YOUR ARDUINO CODE HERE KR RRR KR RR RRR RR RR KKK e x x void pwm void args while 1 if off_on true digitalWrite 3 HIGH delayMicroseconds 100 digitalWrite 3 LOW delayMicroseconds 1000 100 else digitalWrite 3 LOW return NULL This function
98. lue representing humidity Next we could check the humidity value read by the AM2302 and switch the relay on or off as needed For example the code would be changed to use the n variable if h setpoint digitalWrite relay HIGH else digitalWrite relay LOW As with the fan in Chapter 3 Central Air and Heating Thermostat the next task would be to splice the wires on the dehumidifier and connect them to the relay module When the humidity rises above the setpoint the relay will switch on and trigger the dehumidifier y Always remember to unplug devices when attaching them to the relay Now that we have a way to address damp issues using technologies we have already worked with let s explore some other options to test for more severe problems Water detection Of course testing for humidity might not alert us to a major leak problem During a severe rainstorm the basement could be flooded quickly if it relies on a sump pump and that breaks down 106 Chapter 7 One device we could use with an Arduino or attach to the Raspberry Pi via the bridge shield is a water sensor Seeed Studios offer such a device http www seeedstudio com depot Grove Water Sensor p 748 htm1 that can be connected to either the analog or digital pins on your microcontroller With this device hooked up the following example sketch can be run to check whether device is working correctly The example sketch i
99. n LED alert We are going to start by attaching the Cooking Hacks shield to the Raspberry Pi Once this is connected we will attach an LED to the shield s digital pin 2 The following diagram illustrates the setup Connection from ground pin to short pin on LED Connection from pin 2 to long pin on LED Connect the long pin of the LED to digital pin 2 on the Arduino bridge shield You can use a breadboard and two wires in order to complete this setup Next attach the other leg of the LED to the GRD pin on the bridge shield Once you have the LED attached you can consider writing an application to switch it on and off 102 Chapter 7 Blinking LED code The following application causes the LED to blink and it is very simple to implement T Create a new file on the Raspberry Pi in the same directory as your curtain control application Name it alert cpp touch alert cpp We will use the arduPi template as a base for this application as well Open the file in your text editor of choice Start by adding the following code Include ArduPi library include arduPi h ROR KK RK KK k ke RR RR RR RK kk k k RR KR RRR RRR RR KK RR e ke ke ke ke ke ke KK IF YOUR ARDUINO CODE HAS OTHER FUNCTIONS APART FROM setup AND loop YOU MUST DECLARE THEM HERE HR K k RR KR RR RR RRR RR k k RRR RRR RK RR k k k e ke ke RK RR KK RR KK k k k k k k k k RR k k k k e ke ke k YOUR ARDUINO CODE H
100. net shield The Arduino Uno does not contain an Ethernet port Therefore you will need a way for your thermostat to be accessible on your home network One simple solution is to purchase an Ethernet shield and connect it to your microcontroller There are several shields in the market including the Arduino Ethernet VIN shield http arduino cc en Main ArduinoEthernetShield P and Seeed Ethernet shield http www seeedstudio com wiki Ethernet Shield V1 0 These shields are plugged into the GPIO pins on the Arduino If you purchase one of these shields then we would also recommend buying some extra GPIO headers These are plugged into the existing headers attached to the Ethernet shield Their purpose is to provide some extra clearance above the Ethernet port on the board so that you can connect other shields in future if you decide to purchase them Take a board of your choice and attach it to the Arduino Uno When you plug the USB cable into your microcontroller and into your computer the lights on both the Uno and Ethernet shield should light up Later in this chapter we will write code that allows our thermostat to use the shield Now our device has a medium to send and receive data over a LAN Let s take a look at setting up our thermostat relays Relays A relay is a type of switch controlled by an electromagnet It allows us to use a small amount of power to control a much larger amount for example using a 9V power
101. nounced packed published its first book Mastering phpMyAdmin for Effective MySQL Management in April 2004 and subsequently continued to specialize in publishing highly focused books on specific technologies and solutions Our books and publications share the experiences of your fellow IT professionals in adapting and customizing today s systems applications and frameworks Our solution based books give you the knowledge and power to customize the software and technologies you re using to get the job done Packt books are more specific and less general than the IT books you have seen in the past Our unique business model allows us to bring you more focused information giving you more of what you need to know and less of what you don t Packt is a modern yet unique publishing company that focuses on producing quality cutting edge books for communities of developers administrators and newbies alike For more information please visit our website at www packtpub com About Packt Open Source In 2010 Packt launched two new brands Packt Open Source and Packt Enterprise in order to continue its focus on specialization This book is part of the Packt Open Source brand home to books published on software built around open source licenses and offering information to anybody from advanced developers to budding web designers The Open Source brand also runs Packt s Open Source Royalty Scheme by which Packt gives a royalty to each open source p
102. ntain the following e The code responsible for collecting the temperature data Methods to switch relays on and off based on this data e Code to handle accepting incoming HTTP requests so that we can view our thermostat s current temperature reading and change the setpoint e A method to send our temperature readings to the Raspberry Pi The next step is to hook up our Arduino thermostat with the USB port of the device we installed the IDE on m You may need to temporarily disconnect your relay from the Arduino This will prevent your thermostat device from drawing Q too much power from your computer s USB port which may result in the port being disabled 32 Chapter 3 We now need to download the DHT library that interacts with our AM2303 This can be found on GitHub at https github com adafruit DHT sensor library 1 Click on the Download ZIP link and unzip the file to a location on your hard drive 2 Next we need to install the library to make it accessible from our sketch 1 a e 8 N Open the Arduino IDE Navigate to Sketch Import Library Next click on Add library Choose the folder on your hard drive You can now use the library With the library installed we can include it in our sketch and access a number of useful functions Let s now start creating our software Thermostat software We can start adding some code to the Arduino to control our thermostat Open a new sketch
103. o communicate wirelessly using XBee Bluetooth and WiFi 3 Build seven exciting instruction based home automation projects with Arduino in no time Please check www PacktPub com for information on our titles PACKT open source PUBLISHING Raspberry Pi Cookbook for Python Programmers Raspberry Pi Cookbook for Python Programmers ISBN 978 1 84969 662 3 Paperback 402 pages Over 50 easy to comprehend tailor made recipes to get the most out of the Raspberry Pi and unleash its huge potential using Python 1 Install your first operating system share files over the network and run programs remotely 2 Unleash the hidden potential of the Raspberry Pi s powerful Video Core IV graphics processor with your own hardware accelerated 3D graphics 3 Discover how to create your own electronic circuits to interact with the Raspberry Pi Raspberry Pi for Secret Agents Stefan Sjogelid Raspberry Pi for Secret Agents ISBN 978 1 84969 578 7 Paperback 152 pages Turn your Raspberry Pi into your very own secret agent toolbox with this set of exciting projects 1 Detect an intruder on camera and set off an alarm 2 Listen in or record conversations from a distance 3 Find out what the other computers on your network are up to 4 Unleash your Raspberry Pi on the world Please check www PacktPub com for information on our titles
104. o view this data via the Web without having to log in to SOLite3 and write queries The tool that we are going to use for this is HTSQL 56 Chapter 4 HTSQL Hyper Text Structured Query Language HTSQL is a technology that allows us to write queries on the fly for our database and execute them via a URL Developed by Clark Evans and Kirill Simonov of Prometheus Research HTSQL is built upon the Python programming language and provides an HTTP based query language that is translated into SOL This allows us to write complex queries via the web browser and allows queries to be embedded in client side AJAX code without the need to write server side applications Unlike SOL and server side programming languages such as Java a database with an HTSQL server running on it can be accessed via JavaScript or a web browser such as Midori The benefit of using this technology is that it cuts down on the amount of server side code we have to write and also provides us with a simpler syntax than SOL to query a database You might remember that we wrote the following SOL query to return the values in our Temperature table SELECT FROM Temperature In order to execute this we need to be connected to our database via the SOLite3 shell or we need to write a Python application with the query in it To access the same data via HTSQL we can simply use temperature in the URL bar of our browser after the URL of our Raspberry Pi for examp
105. om Table of Contents Connecting the components to the Arduino 63 Writing our software 64 Updating the Raspberry Pi database 67 A web based Python application 67 Setting up SMTP 68 Our Python application 68 Starting the web service 71 Testing our application 72 Installing the parcel detector 72 Testing the complete setup 74 Next steps 74 Upgrading from Ethernet to a wireless system 74 Checking the shipping details 74 Replacing the pressure sensor with a camera and image recognition 75 Summary 75 Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light 77 Introduction to the Arduino bridge shield 78 Installing arduPi 78 Photoresistors 79 Motor shield and motors 79 Setting up the photoresistor 80 Wiring up the components 80 Testing the photoresistor with software 81 Makefiles 83 Setting up the motor shield 84 Wiring the components to the shield 84 Curtain control application 85 Pulse width modulation 85 Threads 85 Writing our code 86 Connecting to your blinds curtains 90 Setting the timing 90 Attaching the hardware 90 Debugging problems 91 Next steps 92 Mounting the photoresistor outdoors 92 Adding a stepper motor 92 Summary 93 iii www allitebooks com Table of Contents Chapter 7 Water Damp Detection Check for Damp Flooding in Sheds and Basements 95 A brief note on dampness 96 Damp detection system 96 Arduino circuit 96 Sketch code 97 Database updates 100
106. on Raspbian 21 22 installation SOLite Version 3 x 48 49 Integrated Development Environment IDE 9 Interaxon Muse URL 119 JavaScript Object Notation JSON about 38 URL 38 L LCD screen adding to thermostat 42 reference link 42 LED alert adding 102 LED blinking 103 104 LED functionality expanding 104 105 Linux online resources 122 loop function 86 M mains electricity reference link 28 Makefile 83 84 motor controller 114 motor shield setting up 84 N Negative Thermistor Coefficient NTC about 31 versus Positive Thermistor Coefficient PTC 31 Newark URL 109 New Out Of the Box Software Noobs about 20 21 reference link 21 O Ohms Q 62 open collector drivers OC drivers 115 open source technology 16 17 P parcel delivery detector Ethernet upgrading from 74 installing 72 parcel sensor wiring up 62 pressure sensor replacing 75 Raspberry Pi database updating 67 requisites 61 shipping details checking 74 web based Python application 67 parcel detector installing 72 setup testing 74 parcel sensor components connecting to Arduino 63 resistors 62 129 software writing 64 wiring up 62 photoresistor about 79 mounting 92 setting up 80 testing with Makefile tool 83 84 testing with software 81 83 Pixy cam URL 75 Pololu Basic SPDT Relay Carrier URL 30 using 30 Positive Thermistor Coefficient PTC 31 potentiometer adding to thermostat 41
107. on your Raspberry Pi and connect your microcontroller directly to the Raspberry Pi s USB drive A quick guide to the Arduino IDE The Arduino IDE is a graphical user interface that allows you to develop Arduino code and then upload it directly to the microcontroller 23 Getting Started Setting Up Your Raspberry Pi and Arduino When you launch the program you will be presented with a sketch This is where you will write your Arduino code 1 You will find a number of options in the top menu These include the examples that come bundled with the Arduino IDE which can be found by navigating to File Examples Try selecting this option 0 1 Basics BareMinimum To upload an example to your microcontroller ensure that it is plugged in Next you will need to set the board You can do this by navigating to Tools Board Here you will find a list of the Arduino microcontrollers and then you can select the model you have purchased for example Arduino Uno Next we need to select the USB port that the board is plugged into so that the IDE knows where to upload the sketch code If your Arduino IDE does not detect the USB port you may need M to run the application as root via sudo StackExchange provides Q some suggestions on fixing this issue at http arduino stackexchange com questions 739 arduino program only works when run as root The USB port list can be found by navigating to Tools Serial Port Once
108. on Noobs 20 Downloading Raspbian 21 Setting up the SD card and installing Raspbian 21 Raspberry Pi SSH setup 22 Arduino 23 Installing the IDE on your Raspberry Pi 23 A quick guide to the Arduino IDE 23 Using the Arduino to Raspberry Pi connection bridge 24 Summary 26 www allitebooks com Table of Contents Chapter 3 Central Air and Heating Thermostat 27 Safety first 28 Introducing the thermostat 28 Setting up our hardware 29 Adding the Ethernet shield 30 Relays 30 Connecting the thermistor 31 Setting up our software 32 Thermostat software 33 Testing our thermostat and fan 37 Attaching the fan 37 Starting your thermostat application 37 Testing the JSON response 38 Next steps 39 Attaching the device to your heating system or a similar appliance 40 Adding a potentiometer 41 Adding an LCD screen 42 Summary 43 Chapter 4 Temperature Storage Setting Up a Database to Store Your Results 45 SSH 46 SQLite 48 Installing SQLite Version 3 x 48 Creating a database 49 A table to record our temperature 50 A table to record our rooms 50 Writing SQL queries 50 Creating a Python application to write to our database 52 Checking the results 55 Adding a cron job 55 HTSQL 57 Downloading HTSQL 57 Configuring HTSQL 58 Summary 60 Chapter 5 Parcel Delivery Detector 61 Wiring up the parcel sensor 62 An introduction to resistors 62 Pressure sensor force sensing resistor 62 10K ohm resistor 63 ii www allitebooks c
109. on compilation directives and reuse them without having to type the command each time So create the following Makefile using a text editor of your choice Photo arduPi o g lrt lpthread LightSensor cpp arduPi o o lightsensor Once the Makefile is complete save the file and run make from the command line in the same directory as your code make From the command line we can now test the code like this lightsensor Now that the application is running we can try out our photoresistor Depending on the ambient light in the room you will see the Getting lighter or Getting darker message 83 Curtain Automation Open and Close the Curtains Based on the Ambient Light If you see the Getting darker message try shining your flashlight on the sensor Once the threshold is passed the message will change to Getting lighter If you see the Getting lighter message first you can try placing a finger over the sensor and once the threshold is passed the message will change to Getting darker Setting up the motor shield The first part of the circuit is now complete We have a device that can record the change in light and can send this information to our application via an analog pin Now we need to connect our photoresistor to the motor shield Once these are connected we will have a device that can be used to control curtains or blinds Let s start by setting up our hardware Wiring the components to the shield
110. ostat you will need e An Arduino Uno microcontroller and wall power unit e A Pololu Basic SPDT relay carrier An Ethernet shield such as the Seeed Ethernet shield An AM2302 thermistor device Asmall mains powered electric desktop fan www allitebooks com Central Air and Heating Thermostat Some wire cutters and strippers Away of stimulating the thermistor for both low and high temperatures for example some ice and a hair dryer Safety first In this chapter we will be using a device plugged into the mains electricity usually AC a fan We will also be cutting the cable that connects the fan to the plug socket This cable will be run through our relay circuit It is important to remind you at this point that working with mains electricity is dangerous You should attempt the fan portion of this project and hooking it up to your Heating Ventilation and Air Conditioning HV AC system only if you feel 100 percent confident in your ability to safely attach the thermostat device to the mains It is also important that you select the correct relays for your electrical system For example attempting to use a 130V AC relay on a 240V AC electrical system can result in melting your device or something worse Depending on your country of residence the mains voltage can be between 110V and 240V Before attempting this project we recommend reading up on your electric system Wikipedia provides an overview of mains el
111. our Results 3 Once it is open you should see a comment in the file showing the structure of a cron job m h dom mon dow command gt You can read more about the cron table format at GA http www adminschoice com crontab quick reference We want to take a reading once an hour However we can quickly test the script to ensure that the cron job is working To do this add the following code to your cron table and remember to update the path to point to where your request py is stored python path to request py The symbol is a wildcard and our script will run in very short time intervals for example every minute Log in to your SQLite database and run the following query SELECT FROM Temperature The query should return a group of results Each time you run the query you should start to see the list of results grow like this 1 1 13 1 2014 01 24 10 17 06 2 1 12 8 2014 01 24 21 30 02 3 1 12 8 2014 01 24 21 31 02 We can now update crontab such that it runs once an hour Exit SQLite and re open crontab Change the entry so that the first value is 0 Your cron job should look as follows 0 python lt path gt lt to gt request py Save and exit mc o a by adding gt output log to the end of the entry in crontab You can output any errors from the script to a file Our script will now run once an hour adding data to our SQLite database Now we need a method t
112. ows us to create threaded applications A thread is essentially a fork in the program that can continue to run while the application performs other tasks In the context of our program this allows us to generate PWM outside the Loop function which will run continuously until we tell it otherwise 85 Curtain Automation Open and Close the Curtains Based on the Ambient Light Consider the setup function In it we can create a thread that generates PWM on pin 3 of the shield In the 1oop function we can perform other tasks pause the PWM thread update the values used to generate PWM and restart it These new values will then be used in the PWM thread You will see this concept in action next in our curtain control application Writing our code Let s take the light sensor code we wrote and expand it to start controlling the motor shield Start up your favorite text editor and create a new file called CurtainControl cpp Add the following code to this file Include ArduPi library include arduPi h define TH 690 define DIRECTION 5 define PWMPIN 3 Here we have our standard template headers and the threshold we defined in LightSensor cpp After this we have added two new constants DIRECTION and PWMPIN The TH value will depend on a number of variables the type of amp photoresistor used the resistor used and location of the device GA Therefore you may need to experiment and tweak this va
113. particular product of interest that we will look at is the open source Android operating system Android OS is a Linux based operating system geared towards mobile devices As a part of the Open Handset Alliance a consortium of 84 companies operating in the mobile sphere Google backed and eventually purchased the Android mobile operating system The aim has been to create an open source operating system that can compete with companies such as Apple and provide a robust system that can work across multiple manufacturers devices As a result of this commercial manufacturers of home appliances have begun to embed the technology and software into their products and a generation of smart devices has started to appear in stores around the world Commercial products If you are interested in a smart refrigerator that can tell you the weather and keep track of your groceries or an oven that can be controlled via your smartphone then you are in luck Products such as the Samsung RF4289HARS refrigerator running Android and the LG smart washing machine are paving the way for smart homes by embracing open source and web based technologies It is also not just appliances that are getting the makeover Firms such as the Nest a company founded by ex employees of Apple are developing smart thermostats Barcodes and OR codes on products now allow the consumer to scan them with their smartphones and download information about the item directly
114. pin to which our relay is connected to output mode void setup Serial begin 9600 Ethernet begin mac ip server begin dht begin pinMode relay OUTPUT The next block of code we will add is the loop function This contains the main body of our program to be executed Here we will assign a value to the setpoint and grab our temperature readings void loop int setpoint 25 float h dht readHumidity float t dht readTemperature Following this we check whether the temperature is above or below the setpoint and switch the relay on or off as needed Paste this code below the variables you just added if t setpoint digitalWrite relay HIGH else digitalWrite relay LOW 34 Chapter 3 8 Next we need to handle the HTTP requests to the thermostat We start by collecting all of the incoming data The following code also goes inside the loop function client server available if client an http request ends with a blank line booleancurrentLineIsBlank true String result while client connected if client available char c client read result result c With the incoming request stored in the result variable we can examine the HTTP header to know whether we are requesting an HTML page or a JSON object You ll learn more about JavaScript Object Notation JSON shortly If we request an HTML page this is displayed in the brow
115. put the humidity value With our code in place we can set up a second cron job to execute the Python application on an hourly basis Adding a cron job Let s edit the crontab Run the following command crontab e We want to take a reading once every hour as we did with the thermostat To do this add the following code to your cron table 0 python damp py Save the file and then exit Once the cron job has been executed you can test whether the humidity data is being written by checking the database via HTSOL at http 1localhost 8080 temperature 101 Water Damp Detection Check for Damp Flooding in Sheds and Basements If you are not running the query from your Raspberry Pi you will have to replace localhost with the IP address of your device You should now see the humidity column present with a humidity value inserted into it This wraps up the Arduino damp detecting device and the changes required to the Raspberry Pi Let s take a look at a few more ways of using this data Using the humidity reading We now have a system that reads the humidity of the room in which the Arduino is located Based on the temperature and humidity data we can get to know whether the room is damp or there is a chance of flooding It would also be useful though if the Raspberry Pi could alert us in some manner that the room is experiencing high humidity Perhaps we could use this data to turn on a dehumidifier Adding a
116. r for the Raspberry Pi to know when to switch the LED on we need to query the SQLite database grab the temperature readings and then decide whether the result warrants alerting us to a problem To read from the database we can use the example C code from the SQLite3 website at http www sqlite org quickstart html on F3 104 Chapter 7 This code allows us to pass a query to the program It will then execute the query and output the results You can integrate the C code with your application by placing it in a separate method and removing any of the example code you do not need The functions we are most interested in are as follows e sqlite3 open This is responsible for opening the SQLite database connection e sqlite3 close The close function closes an open database connection e sqlite3_exec We use this function to execute a query In order to grab the latest temperature data you will need to use the following SOL query in your C code SELECT LAST TemperatureC LAST Humidity FROM Temperature Once we have the temperature and humidity values we can add a calculation to check whether the value indicates dampness A simple activity would be to check whether the humidity is above a certain value for example 60 percent If it is we trigger the LED to switch on We can modify the original blinking code in the following manner void loop if damp digitalWrite 2 HIGH delay 100
117. rcel detection device in the box If the enclosure allows for it you may want to attach it to the side of the box ensuring that the FRS is located at the bottom of the box As a power source you can use either a standard 12V DC power adapter or a battery power pack If you use an adapter you may need to use an extension cord as well Since we are using Ethernet you will also need to drill or cut a hole for the cable to run through You can then run the Ethernet cable to your switch or hub Some Ethernet shields come with Power over Ethernet PoE This is a great option if your shield supports it and it will save you on BC batteries PoE modules can also be purchased and soldered on your circuit they can be found at the Arduino store at http store arduino cc product X000002 Finally place a mat over the sensor This should be light enough so as not to trigger the system The following diagram will illustrate the layout of the installation 9939 I AA Battery ce n eec n ecce n Ethernet Cable ves cecce ern n SSS cores votos seess oc ce MOREM M E LIIT W 58E 1 1 Mat to cover pressure sensor EEEE n ADDE Sa ee ee ey oe eese c t t Project encolsure eese c t i m iN Box or bin trash can fritzing This completes the system installation 73 Parcel Delivery Detector Testing the complete setup Our system is now installed and ready to go
118. rd gt Raspberr 7 Power pins Arduino Shields H S TE Analog inputs 0 3 y E o ONERI i e m Bs GNO I2C pins Power source o Boo0000 t gt selector Coagariaio vin RBamber PI R s poe Analog inputs 4 7 Respoerry Pi is wedenert o N M Bespberry M F mreacien Image courtesy Cooking Hacks A wide range of Arduino shields can be used with the connection bridge At the time of writing this book the Arduino shield connection bridge was available for 40 Many of these shields can be found on the Arduino website at gt http arduino cc en Main Products Q DEA GA The shields specifications can be also be found at http www cooking hacks com documentation tutorials raspberry pi to arduino shields connection bridge By learning to use this shield you will discover how you can extend the functionality of your Raspberry Pi so that it can mimic the Arduino microcontroller and reuse components from other Arduino projects that you may have attempted in the past or will build in the future 12 Chapter 1 Soldering Soldering is the process of attaching electronic components using a heated metal filler the solder in order to allow electrical current to flow between them At this point it is worth mentioning that practicing some soldering before you start building the projects in this book is worth the effort but not strictly necessary If you are a novice
119. reless system upgrading from 74 F File Allocation Table FAT 21 force sensing resistor FSR 62 future projects ideas about 116 curtain automation tool expanding for including temperature sensing 117 holiday lights from LEDs 118 motor modifying on curtain automation project to stepper motor 117 photoresistor used for switching on lights 117 G General Purpose Input Output GPIO pins 11 Gertboard about 113 software writing for 116 URL for user manual 116 Gertboard components about 114 Atmel ATmega microcontroller 115 buffered I O 115 convertors 116 GPIO PCB expansion board 114 GPIO pins 114 motor controller 114 open collector drivers OC drivers 115 H hardware thermostat Ethernet shield adding 30 relay 30 31 setting up 29 thermistor connecting 31 32 Heating Ventilation and Air Conditioning HV AC system 28 home automation about 14 commercial products 17 dot com boom 16 17 history 14 15 online resources 125 128 open source technology 16 17 Raspberry Pi 18 X10 15 16 home automation future 3D printing 118 about 118 EEG headsets 119 RFID chips 118 119 humidity reading damp detection system dehumidifier connecting 106 LED alert adding 102 using 102 Hyper Text Structured Query Language HTSQL about 14 45 57 configuring 58 59 downloading 57 58 online resources 124 URL 59 using 14 installation Arduino IDE on Raspberry Pi 23 installati
120. roject about whose software a book is sold Writing for Packt We welcome all inquiries from people who are interested in authoring Book proposals should be sent to authorepacktpub com If your book idea is still at an early stage and you would like to discuss it first before writing a formal book proposal then please contact us one of our commissioning editors will get in touch with you We re not just looking for published authors if you have strong technical skills but no writing experience our experienced editors can help you develop a writing career or simply get some additional reward for your expertise PACKT open source PUBLISHING 4 Raspberry Pi Home Automation with Arduino Andrew K Dennis Raspberry Pi Home Automation with Arduino ISBN 978 1 84969 586 2 Paperback 176 pages Automate your home with a set of exciting projects for the Raspberry Pi 1 Learn how to dynamically adjust your living environment with detailed step by step examples 2 Discover how you can utilize the combined power of the Raspberry Pi and Arduino for your own projects 3 Revolutionize the way you interact with your home on a daily basis Arduino Home Automation Projects Marco Schwartz Arduino Home Automation Projects ISBN 978 1 78398 606 4 Paperback 132 pages Automate your home using the powerful Arduino platform 1 Interface home automation components with Arduino 2 Automate your projects t
121. s The Gertboard was developed by and named after Gert Van Loo Gert Van Loo while working with Ebon Upton at Broadcom took up the challenge of building a stripped down computer Using a multimedia optimized processor the BCM2835 he developed the prototype of the Raspberry Pi s alpha hardware Following the success of the Raspberry Pi he worked on a project that would further expand what the Raspberry Pi could do the Gertboard This is a printed circuit board PCB with a combination of components that can be soldered together and connected to the Raspberry Pi thus extending its capabilities via its GPIO pins Like its counterparts the Gertboard allows electronic components to be controlled via applications written on the Raspberry Pi While not an official product of the Raspberry Pi Foundation it has been given support by its members and distributed alongside the Raspberry Pi through Newark Element 14 Much like the Raspberry Pi to Arduino shield you will now be able to build embedded systems for your home that can perform a range of tasks from recording temperatures and controlling your thermostat to using ambient light sensors that open and close your blinds 113 Wrapping Up Thanks to the combination of components that come as part of the kit you will have sensors LEDS DACS and motors available for home projects These allow you to record analog data and convert it to digital information as well as move phy
122. s a modified version of the request py code that we used previously Create a new file damp py in a text editor of your choice and add the following code Remember to change the IP address given here to that of your Arduino usr bin env python import sqlite3 import urllib2 import json def main req urllib2 Request http 192 168 3 6 req add header Content Type application json charset utf 8 r urllib2 urlopen req result json load r room result thermostat 0 location temperature result thermostat 1 temperature 100 Chapter 7 humidity result thermostat 1 humidity my query INSERT INTO temperature roomid temperaturec datetime humidity VALUES s sS CURRENT TIMESTAMP room temperature humidity Here we can see that we are storing the humidity value returned in the json object in a variable called numidity Next we insert this value into the query that writes the data to our SOLite database try connection sqlite3 connect home pi control db isolation levelzNone cursor connection cursor cursor execute my query query results cursor fetchone my response Inserted s and s for room s temperature humidity room except sqlite3 Error e my response There is an error s e finally connection close qf name main main Our final edit to the code is to modify the response message to out
123. s an interesting method of upgrading your project 92 Chapter 6 Summary This chapter introduced several new concepts including pulse width modulation and using threads in our application You also learned how to use a photoresistor and read the values from it Another important step we performed was modifying our motor shield This provided an introduction to doctoring off the shelf Arduino shields to work with the Raspberry Pi Next we will examine how we can build a damp and water detection system This will incorporate both the Arduino Uno and the Raspberry Pi Using this device we can know whether high humidity has been detected which can be a sign of damp and send an alert to the Raspberry Pi to inform us that we potentially have a problem 93 Water Damp Detection Check for Damp Flooding in sheds and Basements In the previous chapter you learned how to control blinds and curtains In this chapter we will be building a damp detection device This will bring together some of the ideas from other chapters and teach you the next steps used to expand the system The purpose of the damp detection device is to alert you when an area becomes damp or is at risk of flooding A common method of checking for signs of flooding and dampness is to run a damp heat test This involves checking a combination of temperature and humidity to see whether an area is susceptible to dampness for example if some ins
124. s and columns we are going to need For this project we only need a simple data structure Two tables should be enough to record the data we want to store One table will be responsible for storing the temperature data and the other for recording the details of the room the Arduino is located in Let s look at the Temperature table first 49 Temperature Storage Setting Up a Database to Store Your Results A table to record our temperature The Temperature table will be responsible for storing the data written back from the Arduino shield We will need the following columns in this table ID This will be the unique ID for each temperature reading written to the database With each new value added it should increment automatically and should also be the primary key for our table RoomID This will serve the purpose of linking the temperature reading to a table containing information about the room it was taken from via a foreign key for example in our project we will store the name of the room there TemperatureC This column will be used to store our temperature reading in degrees Celsius This value will have been calculated by the Arduino and grabbed in JSON format for our Python script to insert into the database Datetime We will calculate a timestamp for each reading when inserting data into the table This can be useful when querying the database and trying to find out some special information for example
125. s available on GitHub at https github com Seeed Studio Grove Water Sensor Integrating this module with your existing damp detection circuit is simple Attach the device to one of the digital pins on your Uno Next add the following code to your damp detection device sketch boolean waterDetected if digitalRead WATER SENSOR LOW return true else return false Here the WATER_SENSOR variable is declared at the top of your sketch and it references the pin that the device is connected to In the loop function we can call this method and then store the result in a variable such as water_detected One possible approach would be to use the result in a modified version of the code that shows what the current temperature and humidity are client println Is water detected client println water detected Once we have readings coming back from the sensor there are a number of options on how we can be alerted to a water problem Wecanreuse our e mail code from Chapter 5 Parcel Delivery Detector and have an alert sent directly to us Integrate a buzzer The GitHub code for the Grove water sensor demonstrates how a buzzer can be triggered when water is detected 107 Water Damp Detection Check for Damp Flooding in Sheds and Basements AS Buzzers can be found on Adafruit at http www adafruit com products 160 gclid CL 80ZqxjcMCFc1i7Aod3BQAO0g e We can trigger
126. s revolutionary as X10 has been it unfortunately has a number of flaws These include Wiring and interference issues Commands getting lost in transmission Limited scope of products supporting X10 Limited scope of commands available Slow speed of signal transmission e Lack of encryption e Lack of confirmation messages without expensive two way devices 15 An Introduction to the Raspberry Pi Arduino and Home Automation By the late 1990s home automation still hadn t penetrated the home market on a truly wide scale However the technological advancements of the dot com boom were providing a whole new set of tools protocols and standards that addressed many of the flaws of the X10 standard The dot com boom and open source a new set of technologies With the explosion of technologies that followed the birth of the Web in the 1990s home computing and networking technologies were now available to the public and could be easily and cheaply installed at home These technologies would later provide an ideal candidate to push the boundaries of what could be achieved by home automation enthusiasts and provide the industry with the tools to build smart home appliances and systems It was only a small step from PC to PC communication to appliance to PC communication Home networks running on Ethernet and later on Wi Fi provided a mechanism that could allow computers and electronic appliances to communicate with
127. s the shed and the basement The Arduino thermometer humidity circuit is the same as what we built for the thermostat The following diagram illustrates it 96 Chapter 7 fritzing Building the circuit is simple and you should be familiar with it by now Attach your Ethernet shield to the Uno and then simply hook up the AM2302 to digital pin 4 the 5V pin and the GRD pin This completes the device s setup Now that we have built the circuit let s write the Arduino software Sketch code The following sketch is a simplified version of the code that we wrote in Chapter 3 Central Air and Heating Thermostat In this code we do not need to include a setpoint as we did with the thermostat Create a new sketch and add the following code to it include DHT h include lt SPI h gt include Ethernet h define DHTPIN 4 The digital pin to read from define DHTTYPE DHT22 DHT 22 AM2302 int room 3 97 Water Damp Detection Check for Damp Flooding in Sheds and Basements Later in this chapter we will add a new value to the room table in our SQLite database The ID of this new room will be the value you will assign to the room variable in the preceding block of code Then add the following byte mac OxDE OxAD OxBE OxEF OxFE OxED IPAddress ip 192 168 3 6 DHT dht DHTPIN DHTTYPE EthernetServer server 80 EthernetClient client void setup Serial beg
128. s to the Arduino We are now ready to build the circuit and hardware for our parcel detector To start with take your Arduino Uno and attach the Ethernet shield to it This will form a base to which we will be connecting other components Next follow these steps to attach the force sensor wires and resistor Take the breadboard and attach the force sensor to it e Take a wire Attach one of its ends to the GRD pin on the Arduino and the other to the GRD on the breadboard so that it connects with the force sensor e Next take another wire and attach one end to the 5V pin on the Arduino and the other end to the breadboard so that it connects to the power pin on the force sensor e We now need to attach the 10K ohm resistor Attach this to the breadboard such that one leg is lined up with the GRD pin of the force sensor and the other is attached to the GND wire for the Arduino Finally attach a wire from AO such that it connects to the GRD pin on the force sensor after the 10K ohm resistor 63 Parcel Delivery Detector The following diagram shows the setup 8888839 as IIL fritzing Writing our software With the hardware ready it is now time to write an Arduino sketch to test our circuit This sketch will be responsible for checking when the forced based resistor has enough pressure on it and then triggering an HTTP request Let s start by adding the include statements an
129. se between the braces separated by commas and only these columns will be returned when you execute the query roomdetails id 1 Placing a question mark after the table name or the braces allows us to provide conditional statements such as showing all of the data located in all the columns where the ID is equal to 1 In the case of our database this should return a single result and all the column values for that result 5 We can test whether our data has made its way through the system by querying the control database via HTSQL as we did with regular SOL For example if we want to see the room temperature and timestamp we can use the http lt ip of raspberry pi gt 8080 temperature room tem peraturec datetime roomid 1 query You should now see an HTML table listing the room data temperature and timestamp HTSQL has extensive syntax and allows you to write complex queries to return data in a variety of formats including JSON XML CSV text and YAML You can read more about these formats at the HTSOL website http www htsql org and get a better idea of other methods of querying the data in your control database You have now successfully set up your Raspberry Pi to store data from the Arduino and made it accessible via HTSQL for viewing 59 Temperature Storage Setting Up a Database to Store Your Results Summary We demonstrated a simple method to write data to a database and to then be
130. se with a timestamp After the query has been executed we call the send mai1 function Let s add this function next to our code def send mail self sender XXX XXXX com receivers XXX XXXX com password XXXXXX fromad Raspberry Pi Parcel Sensor lt XXX XXXX com gt toad Name lt XXX XXXX com gt subject A new parcel has been delivered body A new parcel was delivered msg MIMEText body msg From fromad msg To toad msg Subject subject We start the function by adding some variables that will be used to craft our e mail In this block of code you will need to replace xxxx with your own values This will include the SMTP details you collected earlier in this chapter and the e mail addresses you wish to send the parcel delivery alert to To this function we will now add the code to actually send the e mail try smtp smtplib SMTP XXXXX 587 smtp ehlo smtp starttls smtp ehlo smtp login sender password smtp sendmail sender receivers msg as string print Successfully sent email smtp close except smtplib SMTPException print Error unable to send email 70 Chapter 5 In this block of code we use a try and except statement to send the e mail If it is successful the code connects to our SMTP account and sends the e mail If it fails we print a message to the terminal informing us that the e mail could not be sent Let s add our final block of cod
131. ser Next add the following code to your sketch if result indexOf text html gt 1 client println HTTP 1 1 200 OK client println Content Type text html client println if isnan h isnan t client println Failed to read from DHT sensor return client print b Thermostat b set to client print setpoint client print degrees C lt br gt Humidity client print h client print t client print lt br gt Temperature client print t client println degrees C break The following code handles a request for the data to be returned in JSON format Our Raspberry Pi will make HTTP requests to the Arduino and then process the data returned to it At the bottom of this last block of code is a statement adding a short delay to allow the Arduino to process the request and close the client connection 35 Central Air and Heating Thermostat 9 Paste this final section of code in your sketch if result indexOf application json gt 1 client println HTTP 1 1 200 OK client println Content Type application json charset utf 8 client printl client printl Server Arduino Connnection close E client print thermostat location client print room n n in client printl client print client print temperature client print t client print
132. sical objects via motors and communicate error codes and states via LEDs Introduction to the Gertboard components The first wave of Gertboards was shipped as a kit of separate components that needed to be soldered together Subsequently an updated prebuilt kit was released The kit and pre soldered board includes the following components Buttons e AGPIO PCB board e Aribbon cable LEDs Analog to digital convertor Digital to analog convertor e A48V motor controller An ATmega microcontroller Let s now take a look at what each of these items does GPIO PCB expansion board The GPIO expansion board is a prepopulated PCB This is the item to which the components are soldered and it forms the foundation of the Gertboard This board is connected to the Raspberry Pi via its GPIO pins GPIO pins The Gertboard like the Raspberry Pi comes equipped with its own set of GPIO pins The ribbon cable provided in the Gertboard kit is used to hook up the Raspberry Pi to some of the GPIO pins in order to provide a physical medium of communication between the two devices Motor controller A motor controller can be used to control an electronic motor hooked up to it Some examples of its functionality include switching a motor on and off controlling its speed and changing its torque and direction 114 Chapter 8 The Gertboard s motor controller supports hooking up a direct current DC electric motor which can b
133. sqlite3 library You may notice this code is wrapped in blocks called try except and finally The way this works is we attempt to execute the code in the try block If this fails then the except block is executed Finally as the name suggests the finally block is executed regardless of whether there was an error or we ran our query successfully Let s look at the try block first You will need to update the path in the connect function to point to the SOLite database you created earlier in this chapter This creates the connection to our database so that we can run queries Following this we execute our query and assign a confirmation message that the temperature was inserted into the my response variable If this process fails then the except block is run It captures the error thrown by SQLite and assigns it to the my response variable with some text wrapped around it After either the try or except block has completed our finally block runs Here we output the message that we had stored in the my response variable and close our connection to the database This completes the main portion of our code We will wrap up the script with the following block of code This executes the main function when the script is called if name main main Save the code and go back to the shell 54 Chapter 4 Checking the results With our script complete it is now time to run it and see what results we g
134. start After this command has run try running the previous command again and check whether the sshd process is present We will learn about this in detail in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results 22 Chapter 2 1 gt You can use the ps command to show running processes on your Raspberry Pi With this task complete let s move on to installing the software we need to program the Arduino Arduino Our first task is to install the Arduino IDE The Arduino IDE is where we will write the code and upload it to the microcontroller main software GS This piece of software can be found at http arduino cc en Here you will find the installation instructions for your operating system including Linux Windows and Mac OS X It is also possible to install the Arduino IDE directly on the Raspberry Pi The following instructions will provide an overview of this process Installing the IDE on your Raspberry Pi If you wish to install the IDE directly on your Raspberry Pi you can do this via the command line This will be necessary if you don t have a second computer on which you can install the Arduino IDE Once you have the Terminal window open type the following command sudo apt get install arduino Accept any prompt that appears on the screen The installation takes up about 81 MB of space Now that the installation is complete you will be able to open the Arduino IDE
135. stem m The official Raspberry Pi store sells a preinstalled card You can find GA itat http swag raspberrypi org products noobs 8gb sd card preinstalled with New Out Of the Box Software Noobs Another option is to purchase a blank SD card and follow the instructions in this chapter With this in mind though if you do not have a home PC or Mac to use in order to format a blank SD card we recommend purchasing a preformatted card This should come loaded with the Debian Wheezy Raspbian OS as this is the version of Linux we will be using throughout the book A note on Noobs Noobs is an operating system installation manager that you can add to your SD card It makes the setup of your Raspberry Pi simple and provides you with an option to try out different operating systems If you decide to try out Noobs we recommend selecting Raspbian in order to follow along with the examples in this book 20 Chapter 2 The Raspberry Pi website provides an introduction and guide to Noobs at GA http www raspberrypi org help noobs setup You can also download Noobs from http www raspberrypi org downloads If you have not installed Raspbian via Noobs then keep reading Otherwise you can jump directly to the Raspberry Pi SSH setup section later in this chapter Downloading Raspbian The download links for the Raspbian operating system can be found on the Raspberry Pi download page at http www raspberrypi org down
136. supply to switch 220V wall power Relays are rated to work with different voltages and currents A relay has three contact points Normally Open Common Connection and Normally Closed Two of these points will be wired up to our fan In the context of an Arduino project the relay will also have a pin for ground 5V power and a data pin that is used to switch the relay on and off A popular choice for a relay is the Pololu Basic SPDT Relay Carrier amp This can be purchased from http www pololu E com category 135 relay modules 30 Chapter 3 This relay has featured in some other Packt Publishing books on the Arduino so it is a good investment Once you have the relay you need to wire it up to the microcontroller Connect a wire from the relay to digital pin 5 on the Arduino another wire to the GRD pin and the final wire to the 5V pin When working with the projects in this book you will be switching between using the Arduino and Raspberry Pi Therefore it is worth mentioning that the GPIO pins on the Raspberry Pi use 3 3V but the Arduino Uno has both 5V and 3 3V pins So you should be careful when you mix and match GPIOs This completes the relay setup In order to control relays though we need some data to trigger switching them between on and off Our thermistor device handles the task of collecting this data Connecting the thermistor A thermistor is an electronic component that when includ
137. t to the Raspberry Pi While using jumpers it is important to think of the above in the following terms An input jumper means an input to the Raspberry Pi and an output jumper means an output from the Raspberry Pi Atmel ATmega microcontroller The Atmel ATmega microcontroller device is the microcontroller for the Gertboard The microcontroller is a single integrated computer that controls the input and output of the devices on the Gertboard 115 Wrapping Up The development language for Arduino can be used with the Gertboard because the Arduino is also based on the ATmega series of microcontrollers Once you have this installed you can reuse Arduino specific applications with a few changes or write new ones to control the Gertboard s microcontroller Convertors analog to digital and digital to analog ADC and DAC are used to convert data from one format to another They have seen applications in music recording and videos They are also useful for converting analog readings from thermostats to digital readings For those interested in a more in depth look at the Gertboard the user manual is available at the Element14 website This manual provides an in depth look at the electronic components that come as parts of the kit and is available athttp www element14 com community servlet JiveServlet downloadBody 51727 102 3 267366 Gertboard UM final with schematics pdf Creating software for the Gertboard Th
138. t to install SQLite3 In the command line type this sudo apt get install sqlite3 48 Chapter 4 If yu run sudo apt get install sqlite it will only install SQLite 2 x Version 2 x does not support some of the commands we will be using such as ALTER TABLE So make sure you use sqlite3 when using apt get The terminal will show you the feedback as it installs SOLite Once the installation is completed navigate to your home directory if you are not there already and create a new directory within which we will work Type the following commands in your terminal window cd mkdir database cd database This database directory will be used to store our control database to test and demonstrate how to use SQLite Creating a database To load SQLite simply type sqlite3 followed by the database name and the db extension If the database does not exist sq1ite3 will create it for you for example mydatabase db For our project we will name the database control This database will also be used in other projects and will act as the main storage mechanism for our Raspberry Pi control device In the command line type the following Sqlite3 control db You will now be dropped into the SQLite3 shell From the SQLite shell we can type commands that will create tables in the database and assign to them columns within which we will store data Before creating anything in our database we should consider which table
139. te and open the developer tools The following link lists the location and shortcut keys in major browsers e http webmasters stackexchange com questions 8525 how to open the javascript console in different browsers In the JavaScript console portion of the developer tools type the following JavaScript code var xmlhttp xmlhttp new XMLHttpRequest xmlhttp open POST 192 168 3 5 true xmlhttp setRequestHeader Content type application json xmlhttp onreadystatechange function Call a function when the state changes if xmlhttp readyState 4 amp amp xmlhttp status 200 console log xmlhttp xmlhttp send Press the return key or run option to execute the code This will fire an HTTP request and you should see a JSON object return thermostat location library temperature 14 90 humidity 29 90 setpoint 25 This confirms that our application can return data to the Raspberry Pi We have tested our software and hardware and seen that they are working There are many ways to extend the thermostat s feature set the next section explores some of these Next steps Congratulations You have finished building a web based thermostat and creating software to control it 39 Central Air and Heating Thermostat Now that we have the basics in place we can add extra features and connect the device to our home heating system fish tank or someth
140. technology world he is fond of stick insects cockroaches and grasshoppers Recently Ed s work has focused on automated acoustic and environmental monitoring and protocols for sensor networks He has started a biodiversity technology company called Infocology co uk Ed s first book provisionally titled Arduino for Biologists will be published in 2015 with Pelagic Publishing I would like to thank Philippa for believing that writing and tinkering would bring rewards in the end R my B tus is a web developer in e commerce and he integrates open source solutions He s always been an enthusiast on the Arduino the Raspberry Pi and other DIY products He was also a member of the Fablab in his engineering school where he discovered all of these wonderful things He is also passionate about development networks telecommunication and science in general www allitebooks com www PacktPub com Support files eBooks discount offers and more For support files and downloads related to your book please visit www Packt Pub com Did you know that Packt offers eBook versions of every book published with PDF and ePub files available You can upgrade to the eBook version at www Packt Pub comand as a print book customer you are entitled to a discount on the eBook copy Get in touch with us at service packtpub com for more details At www Packt Pub com you can also read a collection of free technical articles sign up for a
141. the Emotiv headset http www emotiv com and the Interaxon Muse http www choosemuse com are carving the way for home EEG devices As software becomes widespread for EEG devices it will only be a matter of time before home automation projects are touched by this technology The ability to think the lights on is going to provide home automation enthusiasts with a plenty of exciting projects A benefit of this will also be for those with disabilities who will be provided with ways to interact with their home With technologies such as these on the horizon we believe there will be many great opportunities to leverage the power of the Raspberry Pi and many exciting projects for enthusiasts such as you Summary The Raspberry Pi and Arduino platforms are inexpensive computers with a lot of potential By choosing these technologies you have provided yourself with a fantastic tool set to build home automation projects In this book we aimed to provide you with examples that are useful and slowly build up in difficulty expanding your knowledge of the Raspberry Pi Arduino Linux and related technologies along the way Our projects covered the application of the Raspberry Pi in home automation and showed you how you can leverage the existing Arduino toolset to augment the Raspberry Pi s abilities As newer and more powerful versions are released we believe the future for this technology is indeed very bright 119 Wrapp
142. the LED to blink We do this by modifying the code from this chapter to enter in the database the information that flooding has been detected Then our code makes the LED blink This wraps up the projects for this chapter Let s revise what you ve learned so far Summary In this chapter we explored a number of ways to detect damp and flooding You were introduced to using the humidity functionality of the AM2302 Using this information we wrote the humidity values to the database we created in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results Next we used the Cooking Hacks shield to turn an LED on and off Following this we examined how we could use the LED to alert us about a dampness problem by checking the values stored in the database once an hour After building this system we considered reusing the relay functionality from Chapter 3 Central Air and Heating Thermostat This would then allow us to switch a dehumidifier on and off as needed Following this we looked at a method of testing for water This involved using a water sensor and modifying our code to send the concerned data back from the Arduino Finally we discussed a number of ways we could create an alert system to notify us that flooding could be taking place This completes the chapter and hopefully we have shown you how many of the technologies we introduced in earlier chapters can be combined to solve different problems The next ch
143. the Raspberry Pi itself M There are several types of IP address including public and Q private We will be using a private IP address range on our home network To do this power up your Raspberry Pi and load LXTerminal again Then type the following command ipaddr show eth0 You can find your IP address after Inet like this 1 gt Inet 192 168 3 122 24 brd 192 168 3 255 scope global eth0 You need the portion before It reads 192 168 3 122 An IP address is a way of assigning a unique identifier to a computer g or device on a local network or the Internet The most common form GA of IP addresses at the moment is IPv6 which takes a format similar to 2001 0ab1 25b9 0047 0000 8a2e 0110 7444 Once you have the IP address for your Raspberry Pi you can try connecting to it from another machine Mac and Linux users can use the terminal that comes shipped with their operating system Windows users can download a terminal executable file called PuTTY from http www chiark greenend org uk sgtatham putty download html PuTTY provides Windows users with a terminal style window that they can use to connect to Linux machines 46 Chapter 4 Windows users should follow these steps to set up PuTTY on their Windows machine Double click on the putty exe file to load the PuTTY configuration screen In the Host Name or IP address text entry field add the IP address of your Raspberry Pi Enter 22 in the Port
144. tion of this book may have noticed some changes We hope these have provided you with some new and exciting projects For first time readers we hope these changes have whetted your appetite for learning more Here is an overview of the topics covered in each chapter with some of the differences from the first edition Chapter 1 An Introduction to the Raspberry Pi Arduino and Home Automation and Chapter 2 Getting Started Setting Up Your Raspberry Pi and Arduino provided you with some background on the Raspberry Pi Arduino and the Cooking Hacks shield We saw that we can take a third party shield and attach it to the Raspberry Pi This provided us with the ability to control devices hooked up to the shield via the Raspberry Pi s GPIO pins as we would with an Arduino microcontroller In the second edition of the book we looked at the Arduino in more detail and this helped us to pave the way for projects in later chapters Chapter 3 Central Air and Heating Thermostat covered connecting devices via a breadboard to our Arduino We covered sketches that leverage this data and prepared the Arduino to accept HTTP requests to output the data collected Unlike the first edition of the book the thermostat here was built with an Arduino Uno Following this in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results we set up our Raspberry Pi to query the Arduino thermostat and store temperature data in a SOLite databas
145. tor off This wraps up the application We can now test it against our circuit 1 Create a Makefile for the curtain control application in your text editor and add the following directives Curtain arduPi o g lrt lpthread CurtainControl cpp arduPi o o curtaincontrol 2 Run the make command from the command line Then start the application curtaincontrol Now your curtain control application should be running If you try changing the light on the photoresistor you will notice that the motor changes direction and eventually stops Applying less and more light will cause the values returned by the photoresistor to pass the threshold and thus switch the motor on and off respectively 89 Curtain Automation Open and Close the Curtains Based on the Ambient Light Connecting to your blinds curtains The final step is to connect your motor to your blinds or curtain hardware This will largely depend on the product you are using and remember that heavy curtain and blind hardware will require a higher torque motor You may wish to switch over to a 12V motor at this point Q If you connect the 12V power supply and motor remember to disconnect the power pins on the motor shield Let s now look at the delay values that we have to set in the loop function Setting the timing Our application has a delay of 5 seconds in the conditional statement that opens and closes the blinds This was an arbitrary amount we set when
146. ulation has become wet For this project we will use e The Raspberry Pi e The Raspberry Pi to Arduino bridge shield e An Ethernet shield AnLED An Arduino Uno The AM2302 sensor e The Seeed Grove water sensor Water Damp Detection Check for Damp Flooding in Sheds and Basements A brief note on dampness Dampness in basements and sheds can lead to long term damage cause mold to grow and also be an indication of flooding as The US CDC website at http www cdc gov mold dampness _ GA facts htm recommends that humidity levels should be kept at about 50 percent in order to prevent molds from growing Therefore it stands to reason that a high humidity level in a basement may be a sign of a problem Thus checking humidity levels will be a major factor in our damp and flooding detection device Let s get started with building the damp detection system Damp detection system In this project we will build a thermometer and a humidity sensor using an Arduino Uno and the AM230 This device will write the recorded data to the Raspberry Pi and store it in our control database Once we have this system up and running we will look at some ideas on how we can expand the damp detection system to use the Cooking Hacks shield Let s start with building the Arduino circuit Arduino circuit Our damp detection system is scalable so we can build multiple damp detection units and place them in separate locations such a
147. up AND loop YOU MUST DECLARE THEM HERE KR KK RR KR KR RR RRR RK RRR RR RK RR ke k k eee ke ke RK RR KK RK KKK KKK KR KKK k k kk k KK ke k k YOUR ARDUINO CODE HERE KR KR RK RR RR RR RR KKK e x int main setup while 1 loop n return 0 void setup void void loop void float analogReadingArduino analogReadingArduino analogRead 7 82 Chapter 6 Here we set up analog pin 7 so that we can read the values returned by the photoresistor Next let s add the following code This displays a message depending on whether the photoresistor is detecting more or less light if analogReadingArduino gt TH printf Getting lighter n eise printf Getting darker n delay 3000 As you can see in the if statement we check whether light falling on the photoresistor is greater than the threshold value If it is then the program displays the Getting lighter message Otherwise it displays the Getting darker message Save the file and exit Following this we will look at a method used to compile our code so that we can run it Makefiles The next tool that we are going to use is a Makefile A Makefile is executed by the make Linux command The make command is a command line utility that allows you to compile executable files by storing the parameters in a Makefile and then calling it as needed This method allows us to store comm
148. vice and redevelop the software to incorporate temperature data Using the thermistor you can decide to open and close your blinds according to temperature changes in order to conserve heat By expanding the database written in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results we can also record the time when the curtains are opened or closed to give us an idea of how many hours of sunlight we received across a day in a certain month of the year This project would need no components other than those used in Chapter 4 Temperature Storage Setting Up a Database to Store Your Results and Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light Changing the motor on the curtain automation project to a stepper motor We are currently using a small DC motor in Chapter 6 Curtain Automation Open and Close the Curtains Based on the Ambient Light in order to control the blinds in the project We can replace the regular DC motor with a DC stepper motor as we suggested at the end of that chapter A stepper motor is a motor that divides a full revolution into steps This allows greater control over the revolutions of the motor while it is operating and thus greater accuracy in controlling the drawstring Attaching multiple stepper motors to your device will allow you to control multiple blinds in a room Switching lights on with a photoresistor You have learned how to switch on a
149. vices and systems for our homes These devices can then interface with their commercial counterparts and can also be tailored for our own needs while providing great tools to learn about technology For those familiar with the Arduino platform the Raspberry Pi combined with its shields provides an all in one medium to create devices without the need for a separate PC or Mac giving us an alternative to solutions that currently exist The ability of the Arduino Uno to communicate with the Raspberry Pi via an Ethernet shield over a LAN gives us flexibility in the types of projects that we can build You will see this in the coming chapters where an Arduino Uno writes information back to a Raspberry Pi that is hosting a database Also thanks to the Raspberry Pi s mission of providing an educational tool for those interested in programming the addition of the Arduino shield will provide a mechanism for those who wish to move from writing software that manipulates the Raspberry Pi to software that manipulates their environment and provides a pathway to learn about electronics This could have the positive effect of bolstering the ranks of Homebrew and Maker clubs with an eye towards home automation and lead to an ever increasing diversity of tools being produced for the public Summary In this chapter we provided an overview of the Raspberry Pi and Arduino platform We also looked at some of the existing technologies used in home automation an
150. way to a whole new world of exciting designs Printers such as the Makerbot have opened up 3D printing to the home market For those who can t afford a 3D printer at home there are services such as Shapeways http www shapeways com which allows the customer to upload a 3D image to the website Shapeways will take this 3D image print the object in a variety of materials and then ship it Also Raspberry Pi cases are a popular offer on their website RFID chips Radio Frequency Identification RFID is a method where microchips are embedded in items such as passports When these chips are read they provide the information encoded in them Consumer goods are increasingly approaching the realm where embedded RFID chips will become commonplace When this takes place home automation devices will be able to read the frequencies of products that enter the house and leave Thus a system can be built to read signals and add to an inventory the groceries you have brought home 118 Chapter 8 With respect to throwing out the empty cans and packaging the inventory system will be able to track these leaving the kitchen and remove them from the database Therefore inventory management of goods in the home will become an almost seamless process EEG headsets EEG headsets are devices that allow people to interact with their computers through thought This sounds like something from science fiction However products such as
151. we record where the parcel was delivered and the time stamp and also create a unique ID for the parcel Currently we have only one room in the database this is where you placed your Arduino thermostat We now need to insert the details of the room where the Arduino parcel sensor will be stored This will be where your packages are delivered for example it could be the porch garage or front step INSERT INTO RoomDetails Room VALUES Porch This completes the edits of the database Now we can write the web service that will insert values into the Parce1 table A web based Python application Python comes with a simple HTTP library that is perfect for creating a small web application The web application also known as a web service is designed to provide a simple set of functionality receive data store it and e mail to confirm that it has received the data 67 Parcel Delivery Detector In Chapter3 Central Air and Heating Thermostat we used the HTTP server functionality of the Arduino to query the thermostat for data In this chapter we will be reversing the actions where the Arduino will be posting to the Raspberry Pi Setting up SMTP We recommend using an external e mail service and connecting to it While you can host an SMTP server on your Raspberry Pi you may find spam blockers will prevent the email for reaching its target SMTP stands for Simple Mail Transfer Protocol An SMTP server is GA an
152. you will need to locate the existing thermostat on the device you wish to replace 2 With the power switched off at the fuse box you can now remove the existing thermostat Once it is disassembled make a note of the wiring and how it was attached to the old equipment If you wish to reattach your existing thermostat after you finish experimenting this note will come in handy 40 Chapter 3 3 You should see a white wire and a red wire These will be connected to the relay and when the relay closes it completes the circuit that turns your system on 1 Q You are advised not to attempt this process with baseboard heating units as these tend to have higher control voltages Attach the wires to your relay as you did with the fan You can use the guide at the link provided previously for help 5 Once the thermostat is wired up you can turn on the power again from the fuse box 6 Power up your Arduino and hook it up with your home network If you check out the IP address of your device in the browser you should see the current room temperature The Arduino thermostat should also switch whichever heating system you have plugged it into on and off as needed based on the setpoint value Adding a potentiometer A potentiometer is added so that you can change the temperature on the device manually A simple potentiometer can be connected to one of your analog pins for example analog 2 Then it is also connected to t

Download Pdf Manuals

image

Related Search

Related Contents

Correlación de parámetros de biometría hemática  Manuale d`Uso e Manutenzione Self Switch  GameOver  DMX-SCANNER  Flange Classe 150  Descargar  Référence - Business Satellite TV    Mode d`emploi Mondial Manager    

Copyright © All rights reserved.
Failed to retrieve file