У меня есть одна территория, насчёт которой я хотел бы знать, если там кто-нибудь будет проходить. Самый простой способ отслеживания – создать устройство с инфракрасным датчиком движения на Ардуино.


Есть множество примеров того, как заставить самодельный датчик движения работать при помощи шилда Ethernet, но я хотел использовать дешевый новый модуль WiFi ESP8266. И так как этот модуль был новым, то по нему не было достаточной документации и подключение датчика движения к Ардуино своими руками стала настоящим испытанием.

Таким образом, моя цель: сделать датчик движения Arduino, который отправляет данные с ИК-датчика движения через PHP в базу SQL посредством WiFI модуля ESP8266.

Шаг 1: Список материалов

  • Аналог Ардуино Уно
  • ИК-датчик движения
  • Самый дешевый модуль WiFi ESP8266
  • Провода с джамперами
  • Макетная плата

Шаг 2: соединяем компоненты




Заметка: в документации к модулю вайфай я обнаружил, что ему нужно больше мощности, чем может обеспечить Ардуино 3.3V, но так как у меня не было вариантов, то я постарался запитать его от порта 3.3V и всё заработало.

Я использовал версию V090 модуля ESP8266 (посмотрите прикреплённое изображение). Так как этот модуль не очень дружит с макетными платами, то её использование необходимо только для того, чтобы запитать два пина чипа ESP8266 при помощи 3.3V.

ИК-датчик соединяется обычным образом, как это делается по умолчанию в образце программы для ИК в библиотеке Ардуино.

Схема соединения:
Arduino | ESP8266
RX (D0) | TX
TX (D1) | RX
3v3 | VCC and CH_PD
GND | GND

Arduino | PIR
D3 | OUT
5v | VCC
GND | GND

Заметьте, что ИК-датчик запитан от 5V, в то время как ESP8266 нужно всего 3.3V. Не соединяйте ESP8266 с 5V, иначе вы поджарите плату.

Шаг 3: PHP


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

В моём примере, я использую 3 страницы: dbconnect.php, add_data.php и review_data.php и у меня есть база данных ‘motion’, в которой есть одноименная таблица, в которой есть столбцы ‘id’, ‘event’ и ‘motion’,, где id и event (временной штамп) создаются автоматически при каждой записи в таблицу.

Github: dbconnect.php —> В этом файле мы создаём соединение с БД, код для этой страницы вы найдёте здесь.
Github: add_data.php —> в этом файле значения на самом деле добавляются в БД. По факту, если просто запустить add_data.php, то ничего не произойдёт и вместо этого нужно ввести add_data.php?motionornot=1 в случае движения, или 0, если движения нет. Этот параметр определяется Ардуино. Код можно найти здесь.
Github: data_review.php —> Эта страница, в зависимости от того, было движение, или нет, показывает таблицу с нулями и единицами. Эта таблица – наш финальный результат. Код для этой страницы вы найдёте здесь.

Шаг 4: Код Ардуино


Теперь, чтобы определить движение и записать 1 (или 0, если движения нет) в БД, на нужно запрограммировать Ардуино. Я написал код таким образом, что если движение было, то Ардуино не будет делать повторную проверку в течение следующих 5 минут. Затем Ардуино проверит движение на следующий 5-минутный интервал, но пока без записи 0 в БД.

Затем, если движения не будет, он отправит 0 в БД. Для более подробного изучения этой части, пройдите по этой ссылке.

Мой код для Ардуино можно найти здесь. Он спроектирован не саммым эффективным образом, но работает.

Для работы кода нужно внести в него некоторые изменения:

  1. В строках 6 и 7 введите настройки WiFi
  2. В строке 8 введите адрест хоста, где вы разместили файлы .php (например: example.com). Не нужно писать http, не ставьте никаких слэшей и т.д.
  3. В строке 22 вы определяете количество секунд, через которые будут производится измерения.
  4. В строке 98 вы определяете путь к файлу add_data.php file. Если он располагается в «example.com/arduino/add_data.php», то вы пишете: «/arduino/add_data.php»

Шаг 5: Результат

Теперь, если вы посетите страницу example.com/arduino/data_review.php, у вас появится таблица с графиком замеченного движения.