Порой было бы удобно находясь в дали от дома получать электронные письма с условиями окружающей среды в нем, в том числе и информацию о возможных передвижениях с целью обеспечения безопасности жилища. Данный проект мы и реализуем с помощью Raspberry Pi Zero W, датчика температуры и влажности DHT11, а также ультразвукового датчика HC-SR04.

DHT11 представляет собой 4-контактный датчик температуры и влажности (один контакт не используется), способный измерять относительную влажность 20–90% и температуру от 0 до 50 °C. Датчик может работать при напряжении от 3 до 5,5 В постоянного тока и обменивается данными с использованием собственного проприетарного протокола OneWire. Этот протокол требует очень точного времени для получения данных от датчика. Низкий и высокий уровни кодируются на проводе по времени. Общее время считывания составляет не более 23,4 мс. Это включает задержку 18 мс, необходимую для начала передачи данных, и окно до 5,4 мс для данных. Отдельные сигналы могут быть от 20 мкс до 80 мкс.

Ультразвуковой датчик HC-SR04 использует механизм сонара для определения расстояния до объекта, как это делают летучие мыши. Он предлагает отличное бесконтактное определение дальности с высокой точностью и стабильными показаниями в простом в использовании корпусе.

Схема подключения компонентов приведена далее.

Далее приведена распиновка разъема GPIO на Raspberry Pi, которая может помочь вам в подключении датчиков.

Для управления датчиком мы будем использовать библиотеку Python Adafruit DHT11. Чтобы установить ее, мы клонируем репозиторий git. Войдите в терминал и выполните следующую команду в папке по вашему выбору
git clone https://github.com/adafruit/Adafruit_Python_DHT.gitПосле клонирования репозитория измените каталог во вновь загруженной папке:
cd Adafruit_Python_DHTУстановите зависимости библиотеки с помощью следующей команды:
sudo apt-get install build-essential python-devЗатем для установки библиотеки выполните следующую команду:
sudo python setup.py installКод написан на языке Python и имеет следующий вид:
#импортируем библиотеку RPi.GPIO с именем GPIO
import RPi.GPIO as GPIO
#импортируем модуль сна из библиотеки времени
import time
#импортируем клиент протокола SMTP
import smtplib
#Для управления датчиком мы будем использовать библиотеку Python Adafruit DHT11
import Adafruit_DHT
#Параметр GPIO.BCM означает, что вы обращаетесь к контактам по номеру "канал СнК Broadcom"
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#введем тип используемого датчика
type=Adafruit_DHT.DHT11
#объявим контакты, используемый датчиком, в форме GPIO
dht11=25
trig=23
echo=24
#установим контакт триггера как OUTPUT, а эхо как INPUT
GPIO.setup(trig,GPIO.OUT)
GPIO.setup(echo,GPIO.IN)
#установим датчик как INPUT
GPIO.setup(dht11,GPIO.IN)
#создаем один объект SMTP
server=smtplib.SMTP('smtp.gmail.com',587)
#запустить сервер
server.starttls()
#данные для входа в вашу учетную запись
server.login("username@gmail.com","password")
def calculate_distance():
#установим триггер HIGH
GPIO.output(trig,GPIO.HIGH)
#спать 0,00001 с и установить триггер в LOW
time.sleep(0.00001)
GPIO.output(trig,GPIO.LOW)
#сохранить время начала и окончания
start=time.time()
stop=time.time()
#изменим время начала так, чтобы оно было последним, пока эхо не станет HIGH
while GPIO.input(echo)==0:
start=time.time()
#изменим время остановки, чтобы оно было последним, пока эхо не станет LOW
while GPIO.input(echo)==1:
stop=time.time()
#получим длительность вывода эха как HIGH
duration=stop-start
#рассчитаем расстояние
distance=34300/2*duration
#вернем расстояние
return distance
#начинаем цикл, который никогда не заканчивается
try:
while True:
#считываем
humidity, temperature=Adafruit_DHT.read_retry(type,dht11)
#мы сохраним значения, только если они не равны нулю
if humidity is not None and temperature is not None:
#msg - это сообщение, которое будет отправлено
#msg содержит значения температуры и влажности
msg="Temperature = {:.1f} , Humidity = {:.1f}" .format(temperature, humidity)
if calculate_distance() <50:
#отправить сообщение
server.sendmail("username@gmail.com","receiver@gmail.com",msg)
print("E-mail sent !")
time.sleep(1)
except KeyboardInterrupt:
pass
#закрыть сервер
server.quit()
##очистить все используемые порты
GPIO.cleanup()
Чтобы запустить код, введите в командной строке следующую команду:
python project.pyЕсли ультразвуковой датчик обнаружит движение, будет выведено «E-mail sent», и мы получим электронное письмо со всей информацией.


© digitrode.ru