У меня есть одна территория, насчёт которой я хотел бы знать, если там кто-нибудь будет проходить. Самый простой способ отслеживания – создать устройство с инфракрасным датчиком движения на Ардуино.
Есть множество примеров того, как заставить самодельный датчик движения работать при помощи шилда 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 в БД. Для более подробного изучения этой части, пройдите по этой ссылке.
Мой код для Ардуино можно найти здесь. Он спроектирован не саммым эффективным образом, но работает.
Для работы кода нужно внести в него некоторые изменения:
- В строках 6 и 7 введите настройки WiFi
- В строке 8 введите адрест хоста, где вы разместили файлы .php (например: example.com). Не нужно писать http, не ставьте никаких слэшей и т.д.
- В строке 22 вы определяете количество секунд, через которые будут производится измерения.
- В строке 98 вы определяете путь к файлу add_data.php file. Если он располагается в «example.com/arduino/add_data.php», то вы пишете: «/arduino/add_data.php»
Шаг 5: Результат
Теперь, если вы посетите страницу example.com/arduino/data_review.php, у вас появится таблица с графиком замеченного движения.