Создание сети беспроводных датчиков в вашем доме
В этом руководстве вы узнаете, как создать сеть из экономичных модулей беспроводных датчиков. Многие из готовых беспроводных модулей могут быть слишком дорогими для использования в нескольких сенсорных блоках. Хотя модули Wi-Fi и Zigbee популярны и просты в использовании, их стоимость может сделать их использование в ряде датчиков непрактичным. Однако существуют недорогие радиочастотные модули без всех дорогостоящих функций, которые отлично подходят для этих целей. Платформа Arduino может использовать радиомодули начального уровня для простой и надежной связи.
После сборки оборудования вы сможете использовать платформу Raspberry Pi для публикации данных в службе Интернета вещей Xively, где вы сможете отслеживать значения с течением времени и запускать их при пороговых условиях.
Соберите компоненты и инструменты
Этот проект будет включать три части, два блока передатчика и один блок приемника. Передатчики состоят из платы Arduino, датчика и RF-передатчика. Приемник состоит из платы Arduino, ВЧ-приемника, преобразователя логического уровня и Raspberry Pi.
Существует широкий спектр плат, совместимых с Arduino, которые можно использовать для этого проекта. Минимальные требования к плате для этого проекта - два цифровых вывода GPIO и один аналоговый вывод. Выберите плату, совместимую с Arduino, которая соответствует требованиям по стоимости и простоте для этого проекта.
В этом руководстве я использовал набор плат Arduino Nano, которые хорошо вписываются в макет и просты в программировании. Однако версии Arduino pro mini или Trinket на 5 В также будут работать хорошо и по гораздо более низкой цене. Однако для их программирования и использования требуется немного больше опыта. Выбирайте с умом.
Получатель
- Raspberry Pi - модель B с блоком питания, корпусом и SD-картой. Убедитесь, что контакты GPIO доступны в выбранном вами корпусе.
- Pi-совместимый адаптер Wi-Fi.
- Ардуино
- Перемычки макетной платы
- Провода для перемычки между мужчинами и женщинами
- Конвертер логических уровней
- РЧ-приемник 434 МГц
- Половина макета
Передатчики (два блока)
- 2 x Arduino
- 2 датчика температуры / влажности
- ВЧ передатчик 2 x 434 МГц
- 2 половинных макета
- 2 x 2,1 мм цилиндрических разъема постоянного тока для макетных плат.
- Адаптер питания 2 x 9 В с размерами 2,1 мм x 5
- Перемычки макетной платы
Инструменты
- ПК / Mac с установленной IDE для программирования Arduino
- USB-кабель для программирования плат Arduino
- USB-клавиатура и мышь. Либо в сочетании, либо с концентратором, поэтому оба могут использоваться с одним портом USB.
- Исходный пакет, связанный с этим руководством на вашей рабочей станции программирования.
Соберите передатчики
Сами передатчики представляют собой относительно простые схемы. Только один вывод используется для получения информации от датчика температуры и влажности, а один вывод используется для отправки этих данных на РЧ-передатчик. Макетная схема показана ниже.
Источник питания 9 В подключается к соединителю ствола, образуя нижние направляющие 9 В. Регулятор мощности в Arduino будет производить 5 В, которые можно безопасно использовать для радио и датчиков, верхней шины питания на схеме.
Датчик поставляется с резистором 10 кОм, который подключает вывод данных к источнику питания в качестве подтягивающего резистора, а другой провод подключает его к GPIO D3.
Будьте осторожны, следуя приведенной ниже настройке, и убедитесь, что вы дважды проверили таблицу данных для датчика и радиочастотного модуля, чтобы убедиться, что компоненты правильно расположены на макетной плате, а контакты питания, заземления и сигнала подключены к правильным контактам. Диаграмма фритзинга включена в исходный код для более подробной информации.
Антенна является важной частью платы, потому что модуль RF не имеет встроенной антенны. Я использовал 6-дюймовую перемычку между гнездом и штекером, подключенную к макетной плате, и она работала достаточно хорошо, чтобы обеспечить прием из всех частей моего дома и немного снаружи. Как указано на диаграмме, для этой антенны оптимально подходят 6,5 дюймов, если вам нужен дополнительный диапазон.
Замечание об использовании RF. В разных странах действуют разные законы и правила использования частот. Перед трансляцией убедитесь, что вы соблюдаете эти правила. При этом сигналов от этих модулей едва ли достаточно, чтобы пройти за пределы вашего дома. Однако в идеальных условиях эти модули могут передавать сигналы на расстояние до 500 футов.
Загрузить библиотеки для компонентов
Передатчик использует две библиотеки, которые не входят в комплект Arduino IDE. Загрузите библиотеки, как описано ниже, и распакуйте их в свой каталог эскиза в подкаталог с именем Libraries.
- Загрузите исходный пакет VirtualWire для этого руководства и распакуйте папку эскиза передатчика проводов в папку эскиза Arduino.
- В папке беспроводного передатчика создайте папку с именем "Библиотеки".
- Загрузите последнюю версию кода VirtualWire, 1.23 на момент написания этой статьи, со страницы проекта.
- Распакуйте папку VirtualWire в папку wirelesstransmitter / Libraries /, чтобы у вас была еще одна подпапка с именем VirtualWire.
- Загрузите библиотеку датчиков DHT со страницы проекта на github.
- Распакуйте папку DHT в папку "Библиотеки". Теперь у вас должны быть две необходимые папки библиотеки DHT и VirtualWire в папке Wirelesstransmitter / Libraries.
Программирование платы Arduino
В этом руководстве предполагается, что у вас есть некоторый опыт работы с Arduino и того, как их программировать с помощью Arduino IDE. Если вы этого не сделаете, на официальном сайте Arduino есть очень хорошие инструкции.
- Откройте эскиз беспроводного передатчика из исходного архива в среде Arduino IDE и сохраните копию локально.
- Убедитесь, что Arduino НЕ подключается к источнику питания через цилиндрический разъем.
- Подключите плату к рабочей станции программирования с помощью соответствующего кабеля USB.
- Установите тип платы на выбранную плату Arduino в меню "Инструменты"> "Плата".
- Установите последовательный порт на порт, обнаруженный при подключении платы Arduino в меню "Инструменты"> "Порт".
- Убедитесь, что для параметра MYID установлено значение 1, а TRANSPIN и DHTPIN правильно настроены на контакты, подключенные к модулю радиочастотного передатчика и датчику DHT соответственно. Если вы построили свою доску в соответствии с приведенной выше схемой, все это должно быть уже установлено. См. Пример кода ниже.
- Убедитесь, что ЕДИНИЦА установлена правильно в соответствии с вашими предпочтениями по Фаренгейту или Цельсию.
12345 | # определить MYID 1 // идентификационный номер этой платы. Измените это для каждой мигающей доски. // Идентификатор будет передан вместе с данными, чтобы вы могли определить, какое устройство передает # определить TRANSPIN 3 // какой вывод передавать # определить DHTPIN 4 // к какому выводу подключен DHT # определить UNIT 0 // 0 для Фаренгейта и 1 для Цельсия |
Определение MYID - это числовой идентификатор, который передатчик использует для уникальной идентификации. Поскольку у вас будет несколько передатчиков в разных местах, важно иметь уникальный идентификатор для каждого из них. Этот номер будет снова использован при настройке сценария приемника.
- Проверьте код, нажав Control-R, чтобы убедиться, что библиотеки включены и скомпилированы правильно.
- Вставьте код на доску, нажав кнопку "Загрузить" на панели инструментов.
- Откройте окна "Монитор последовательного порта", нажав Control-Shift-M.
Окно Serial Monitor сбрасывает Arduino, поэтому вы должны увидеть на экране строку кода, которая выглядит примерно так:
12 | Влажность:44,00% Температура:60,80 * F Отправка сообщения:ID:1:TS:23143:TF:60.79:RH:44.00 |
Сообщение состоит из пар Имя:Значение, которые будет обрабатывать получатель. Передатчик будет считывать и транслировать свой сигнал в длинном случайном интервале. Датчики не меняются очень часто и нечасто, поэтому трансляция чаще, чем раз в минуту, не приносит никакой пользы. Случайное время ожидания позволяет сосуществовать нескольким датчикам.
Даже если происходит удвоение и сигнал от обоих передатчиков теряется, случайный интервал гарантирует, что их следующие широковещательные передачи не будут перекрываться. Случайное начальное число для этого интервала устанавливается из analogRead на неиспользуемый аналоговый порт, который будет возвращать случайные значения, чтобы убедиться, что нет двух передатчиков с одинаковым шаблоном.
В приведенном выше примере кода, генерирующего выходные данные, используется значение по Фаренгейту. Вы можете увидеть идентификатор TF:60.79 в строке сообщения, указывающий, что в моей лаборатории действительно чуть меньше 61 градуса. Однако относительная влажность RH:44,00 - это комфортные 44%. По прохладной влажной среде можно сделать вывод, что моя лаборатория находится в моем подвале. Может быть, и прав.
По умолчанию передатчики настроены на ожидание от 2 до 5 минут между трансляциями. Если вы хотите ускорить это в целях отладки, измените значение delay () в конце скетча, чтобы оно было больше похоже на 5000 (мс). Настоятельно рекомендуется изменить это обратно и повторно загрузить код в свои передатчики, когда вы будете готовы к постоянному использованию.
- Соберите вторую плату передатчика.
- Измените эскиз передатчика так, чтобы определение MYID было равно 2.
- Загрузите код на вторую доску.
- Откройте окна Serial Monitor, нажав Control-Shift-M, и убедитесь, что вывод выглядит как первая плата передатчика, за исключением того, что переданное сообщение начинается с ID:2
Создайте плату приемника
Плата приемника будет отвечать за получение широковещательного сообщения на своем компоненте RF Receiver и отправку этого сообщения по последовательным проводам на Raspberry Pi. Плата Arduino используется для приема сигнала по нескольким очень важным причинам. Код VirtualWire использует природу Arduino в реальном времени для управления модуляцией и демодуляцией сигнала.
Это означает, что приемный блок должен работать на той же частоте. Кроме того, на принимающем процессоре мало места для джиттера, которому подвержен Raspberry Pi из-за его вытесняющей операционной системы, не работающей в режиме реального времени. Сравнение стоимости Arduino Pro Mini плюс модуль радиочастотного приемника со стоимостью модуля Zigbee, который мог бы общаться напрямую с Raspberry Pi, показало, что использование внешнего Arduino по-прежнему довольно экономично.
На этом этапе НЕ подключайте провода 5 В и заземления от Pi к макетной плате. Держите перемычки под рукой, но вы не хотите, чтобы Arduino питалась одновременно от USB-порта и Raspberry Pi.
Обратите внимание, что преобразователь логического уровня в приведенном выше списке материалов не совсем такой же, как преобразователь в библиотеке Fritzing, но выводы хорошо обозначены, только в разных местах. Убедитесь, что правильные провода подключены к правильным контактам на реальном преобразователе логического уровня.
Этот компонент необходим для преобразования последовательного сигнала 5 В Arduino в последовательный сигнал Raspberry Pi 3,3 В и не повредить Pi. Дополнительную помощь см. На изображении ниже.
Подробнее:Создание сети беспроводных датчиков в вашем доме
Производственный процесс
- Сети беспроводных датчиков:6 вещей, которые следует помнить при переключении технологий
- Что такое сеть беспроводных датчиков с низким энергопотреблением?
- Интерфейс для беспроводного датчика проезжей части
- Создание сенсорной сети для мельницы 18-го века
- Как кормить беспроводные сенсорные сети и ухаживать за ними
- Беспроводная магнитная передача данных
- Мониторинг CO2 с помощью датчика K30
- Какой ты рост?
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Беспроводная сенсорная сеть дальнего действия