Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Antonio Artimon
Published

Motion Detection Info System via Gmail

In this project we use ultrasonic sensor, and if the distance is less than 50cm, sensor will send and e-mail with temperature and humidity

BeginnerProtip571
Motion Detection Info System via Gmail

Things used in this project

Hardware components

Raspberry Pi Zero Wireless
Raspberry Pi Zero Wireless
×1
Breadboard (generic)
Breadboard (generic)
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
DHT11 Temperature & Humidity Sensor (4 pins)
DHT11 Temperature & Humidity Sensor (4 pins)
×1
Through Hole Resistor, 5.1 kohm
Through Hole Resistor, 5.1 kohm
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
×5
Jumper wires (generic)
Jumper wires (generic)
×5

Software apps and online services

Raspbian
Raspberry Pi Raspbian

Story

Read more

Schematics

Circuit Diagram(RPi)

Code

Python 2.7.16

Python
#we import the RPi.GPIO library with the name of GPIO
import RPi.GPIO as GPIO
#we import the sleep module from the time library
import time
#we import SMTP protocol client
import smtplib
#To control the sensor we are going to use the Adafruit DHT11 Python library
import Adafruit_DHT
#GPIO.BCM option means that you are referring to the pins by the "Broadcom SOC channel" number
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#name the type of sensor used
type=Adafruit_DHT.DHT11
#declare the pin used by the sensor in GPIO form
dht11=25
trig=23
echo=24
#set the trigger pin as OUTPUT and the echo as INPUT
GPIO.setup(trig,GPIO.OUT)
GPIO.setup(echo,GPIO.IN)
#set the sensor as INPUT
GPIO.setup(dht11,GPIO.IN)
#create one SMTP object
server=smtplib.SMTP('smtp.gmail.com',587)
#start the server
server.starttls()
#login data for your account
server.login("username@gmail.com","password")

def calculate_distance():
  #set the trigger to HIGH
	GPIO.output(trig,GPIO.HIGH)
  #sleep 0.00001 s and the set the trigger to LOW
	time.sleep(0.00001)
	GPIO.output(trig,GPIO.LOW)
  #save the start and stop times
	start=time.time()
	stop=time.time()
  #modify the start time to be the last time until the echo become HIGH
	while GPIO.input(echo)==0:
		start=time.time()
  #modify the stop time to be the last time until the echo becomes LOW
	while GPIO.input(echo)==1:
		stop=time.time()
  #get the duration of the echo pin as HIGH
	duration=stop-start
  #calculate the distance
	distance=34300/2*duration
  #return the distance
	return distance
    
#we start a loop that never ends
try:
	while True:
    #make the reading
		humidity, temperature=Adafruit_DHT.read_retry(type,dht11) 
    #we will save the values only if they are not null
		if humidity is not None and temperature is not None:
    #msg is the message that will be sent 
    #msg has temperature and humidity values
            		msg="Temperature = {:.1f} , Humidity = {:.1f}" .format(temperature, humidity)
		if calculate_distance() <50:
      #send the message    
			server.sendmail("username@gmail.com","receiver@gmail.com",msg)
			print("E-mail sent !")
		time.sleep(1)
except KeyboardInterrupt:
	pass
#close the server    
server.quit()
##clean all the used ports
GPIO.cleanup()

Credits

Antonio Artimon
1 project • 0 followers
Contact

Comments

Please log in or sign up to comment.