In our previous post, we discussed the smart home automation with Arduino and NodeMCU. In this post, we will implement the smart home sensor design using Raspberry Pi.
Click here for the link for Smart home sensor development using Arduino Uno and NodeMCU
With Piezo electric sensor
The Piezoelectric Sensor connected to one of the analog pins in the MCP3008 chip with a 1Megaohm resistor connected series with the sensor. The threshold value calculated for the sensor, if the sensor reads values more than 200 then there is a flow of water in the pipe. The date and time set up to verify the flow in a particular time period.
After the successful connection of the sensors with the Raspberry Pi and the code implementation using Python, the results are obtained. The MCP3008 chip is low cost and easy to connect also doesn’t need any extra components. The SPI bus protocol is used which is supported by the Raspberry Pi’s GPIO pins. The SSH is enabled in the Raspberry Pi configuration and the whole system can be viewed in a remote desktop software application. The TightVNC is a free, open-source viewer used for the graphical desktop sharing.
Circuit
Code
# Importing modules
import spidev # To communicate with SPI devices
from time import sleep
import datetime
# To add delay
# Start SPI connection
spi = spidev.SpiDev() # Created an object
spi.open(0,0)
# Read MCP3008 data
def analogInput(channel):
spi.max_speed_hz = 1350000
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
# Below function will convert data to voltage
def Volts(data):
volts = (data * 3.3) / float(1023)
volts = round(volts, 2) # Round off to 2 decimal places
return volts
while True:
temp_output = analogInput(1) # Reading from CH0
temp_volts = Volts(temp_output)
x = datetime.datetime.now()
print("vibration : {} {} ({}V)".format(temp_output,x,temp_volts))
if (temp_output > 200):
print ("The tap is ON")
sleep(5)
Results
The calculated threshold value set to an analog value of 100. The sensor detects the flow every 5 seconds and prints the result. When the analog sensor reading is above the threshold value, it indicates water flow in the pipe and prints the line “The tap is ON”.
The table shows the results of the experiment which tests the accuracy of the sensor while the tap opened and closed for a few seconds. When the tap was opened at 02:39:10 pm, the output analog value shows 94 where the value is not as per the calculated threshold value. However, at 02:39:17 pm, the output analog value reaches the calculated threshold value and shows 152.
2. Raspberry Pi and Thermistor
In thermistor when the tap is ON and the temperature of the water changes irrespective of hot or cold, the analog value elevates to the range from 130 to 170. The value decreases to 0 when the tap is OFF. When there is no flow in the pipe it prints the line “There is no temperature change!” in the python shell. There is no delay in this experiment.
The resistance of 10K ohm connected series to the thermistor. It acts as a voltage divider. The analog data from the CH0 pin which also connected with a 10K ohms resistor. The values read from Python IDLE which provides information on the date and time of the water flow.
Circuit
Code
# Importing modules
import spidev # To communicate with SPI devices
from time import sleep
import datetime
# To add delay
# Start SPI connection
spi = spidev.SpiDev() # Created an object
spi.open(0,0)
# Read MCP3008 data
def analogInput(channel):
spi.max_speed_hz = 1350000
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
# Below function will convert data to voltage
def Volts(data):
volts = (data * 3.3) / float(1023)
volts = round(volts, 2) # Round off to 2 decimal places
return volts
# Below function will convert data to temperature.
def Temp(data):
temp = ((data * 330)/float(1023))-50
temp = round(temp)
return temp
while True:
temp_output = analogInput(0) # Reading from CH0
temp_volts = Volts(temp_output)
x = datetime.datetime.now()
if (temp_output < 4):
print("Temp : {} {} ({}V)".format(temp_output,x,temp_volts))
print ("The tap is ON")
sleep(5)
The table displays the experiment results of the thermistor with different temperatures. The time period for each trial is for 15 seconds. There are no errors in the first trial. The tap closed for 10 seconds from 04:10:40 pm to 04:10:49 pm and opened again. During this period of time,printed the line “There is no temperature change”. Also, there were no errors at this point. However, when the tap was opened again at 04:10:50 pm there was a minor error for a second as it didn’t reach the calculated threshold value (130-170) analog integer. This error neglected as the measurement reaches the threshold limits of the sensor in the next 5 seconds.