Датчик движения своими руками на Arduino

Arduino

Вспомним, что основа данного проекта Arduino. Он выполняет ряд важнейших функций: считывает данные с ИК-датчика, обрабатывает сигналы, реагирует на движения, а USB оповещает компьютер о необходимости отправить сообщение. В этой статье рассмотрим два вопроса:

  • Подключение  PIR-датчика к Arduino;
  • Как настроить взаимосвязь между датчиком и автоматической отправкой e-mail.
  • Необходимо для проекта:

    • Arduino UNO (выбрать можно на Aliexpress).
    • PIR-датчик .
    • Бредбоард.
    • Связка проводов.

    Все перечисленные элементы для сборки можно увидеть на фотографиях:

     

    В первую очередь нужен ПК с подключением к интернету. Мы  использовали Raspberry Pi.

     

    Подключаем PIR-датчик к набору Arduino:

    Чтобы осуществить этот этап нужно взять провода, которые идут от датчика, и прикрепить их к платформе. Далее вам будет предоставлена фотография со схемой:

    Работа со скетчем

    При возникновении движения Arduino при помощи  USB Serial должен послать электронное сообщение. Конечно же, если при любом возникшем движении отправлять  e-mail, то почтовый ящик будет переполнен. Поэтому мы исправили это таким образом, если между двумя сигналами короткий промежуток времени, будет отправляться письмо с таким текстом:

    int pirPin = 7;
    int minSecsBetweenEmails = 60; // 1 min
    long lastSend = -minSecsBetweenEmails * 1000;
    void setup()
    {
    pinMode(pirPin, INPUT);
    Serial.begin(9600);
    }
    void loop()
    {
    long now = millis();
    if (digitalRead(pirPin) == HIGH)
    {
    if (now > (lastSend + minSecsBetweenEmails * 1000))
    {
    Serial.println("MOVEMENT"); lastSend = now;
    }
    else
    {
    Serial.println("Too soon"); }
    }
    delay(500);
    }
    

    «MinSecsBetweenEmails» – эта переменная может переключаться на другие значения, которые будут удобны пользователю. К примеру, можно установить интервал, который равен одной минуте – это будет означать, что следующий  e-mail будет отправлен только через 60 секунд.

    «LastSend» поможет отследить время, в которое было отправлено последнее сообщение. Инициализация данной переменной происходит с отрицательным числом, которое равно миллисекундам, что указаны в «MinSecsBetweenEmails». В итоге, мы получаем гарантию того, что после запуска скетча в Arduino сразу же запустится PIR-датчик.

    За счет чего мы можем высчитать миллисекунды, сравнить их число со временем последнего срабатывания датчика? Все благодаря встроенной функции под названием Millis. В том случае, если обнаружено движение, но прошло  мало времени с последнего активизации датчика будет отправлено письма с текстом «Too soon».

    Эту функцию сначала надо проверить. Для этого открывается Serial Monitor. Далее рассмотрим, как он выглядит:

    После того, как вы убеждены в исправной работе, можно записывать программу на Python, его используют для обрабатывания сигналов от платформы.

     

    Как установить PySerial и Python:

    Операционная система Linux имеет автоматически установленный Python. Система Windows не обладает такой характеристикой, поэтому программу необходимо установить самостоятельно. PySerial исполняет роль библиотеки, она поможет поддерживать связываться с Arduino.

     

    Установка Python:

    Python 3 нередко вызывает затруднения при работе с PySerial, особенно если вы используете Windows. Чтобы этого избежать, можно вместо третьей версии скачать Python 2.

    Завершив установку программы в меню «Пуск» можно обнаружить особую группу. Когда мы перейдем к процессу установки библиотеки, нам понадобится сотрудничество с Python, применив командную строку. Поэтому лучше сразу добавить к PATH нужный каталог. Далее можно увидеть вспомогательную фотографию:

    Для добавления каталога нам потребуется: открыть панель управления, в ней найти раздел «System Properties». Потом нажимаем клавишу, которая называется «Переменная среда» (Environment Variabes), перед нами всплывет окно. В его нижней части должен находиться «Path», который нужно выбрать. Теперь кликнем на «Edit» – Изменение и завершаем процесс нажатием «значения переменной». Нельзя удалять текст, который получили, к нему следует дописать такую надпись – «;C:Python27». Не забываем после каждой папки, что указана в тексте ставить «;». Теперь проверяем правильно ли осуществлен ввод «Path». Для этого в командную строку вводим слово «python». Если ошибок не возникло, то на экране появится следующая картинка:

    Установить  PySerial:

    Независимо от используемой операционной системы, скачиваем .tar.gz установочный пакет для PySerial 2.6 с . Этот сайт может помочь это сделать – //pypi.python.org/pypi/pyserial. Получаем файл с именем pyserial-2.6.tar.gz. Если используется Windows, то будет нужна распаковка файлов в выбранную папку. Это не стандартный файл формата ZIP, придется сделать дополнительные действия – скачать 7-zip (это можно сделать здесь – //www.7-zip.org/). Для системы Linux необходимо воспользоваться терминальной сессией, в ней дать команду «CD», указать название той папки, в которую скачали  pyserial-2.6.tar.gz. Чтобы выполнить распаковку нужно ввести:

    $ tar -xzf pyserial-2.6.tar.gz

    После этого потребуется выполнить команду:

     sudo python setup.py install

    Python

    Потребуется создать отдельную программу для работы с Python. Нужно скопировать код в файл с таким именем – «movement.py». В Linux можно использовать «нано» редактор, а для системы  Windows необходимо создать файл, используя редактор Python «IDLE ». Он доступен в меню «Пуск».

    import time
    import serial
    import smtplib
    TO = 'putyour@email.here'
    GMAIL_USER = 'putyour@email.here'
    GMAIL_PASS = 'putyourpasswordhere'
    SUBJECT = 'Intrusion!!'
    TEXT = 'Your PIR sensor detected movement'
    ser = serial.Serial('COM4', 9600)
    def send_email():
    print("Sending Email")
    smtpserver = smtplib.SMTP("smtp.gmail.com",587)
    smtpserver.ehlo() smtpserver.starttls()
    smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS)
    header = 'To:' + TO + 'n' + 'From: ' + GMAIL_USER
    header = header + 'n' + 'Subject:' + SUBJECT + 'n'
    print header
    msg = header + 'n' + TEXT + ' nn'
    smtpserver.sendmail(GMAIL_USER, TO, msg)
    smtpserver.close()
    while True:
    message = ser.readline()
    print(message)
    if message[0] == 'M' :
    send_email()
    time.sleep(0.5)
    

    Это показано на следующей картинке:

    После изменений, программа запуститься при помощи командной строки:

     python movement.py

    Итак, установка завершена.

    На этом возможности не заканчиваются, есть расширения, которые позволяют получать сообщения с отчетами о температуре или других сведениях.

    Прикрепленные файлы: Скетчи и коды.  

     

    Автор: Доронин Виталий, Липецк.

     

     


    Рекомендуем:

    Источник

    Оцените статью
    error: Материал защищен от копирования. С уважением, Администрация сайта