Оглавление:

Недорогая сеть беспроводных датчиков в диапазоне 433 МГц: 5 шагов (с изображениями)
Недорогая сеть беспроводных датчиков в диапазоне 433 МГц: 5 шагов (с изображениями)

Видео: Недорогая сеть беспроводных датчиков в диапазоне 433 МГц: 5 шагов (с изображениями)

Видео: Недорогая сеть беспроводных датчиков в диапазоне 433 МГц: 5 шагов (с изображениями)
Видео: Радиомодули EBYTE E22 LoRa 433мГц, обзор и тест дальности 2024, Ноябрь
Anonim
Недорогая сеть беспроводных датчиков в диапазоне 433 МГц
Недорогая сеть беспроводных датчиков в диапазоне 433 МГц

Большое спасибо Терезе Раджба за любезное согласие использовать данные из их публикаций в этой статье

* На изображении выше - пять датчиков-отправителей, которые я использовал для тестирования.

Что такое беспроводные сенсорные сети?

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

В настоящее время беспроводные сенсорные сети можно использовать несколькими способами, ниже приведены лишь несколько примеров:

  • Области экологического наблюдения за лесами, реками, озерами, морями и океанами;
  • Возможность оповещения в случае террористических, химических, биологических, эпидемических атак;
  • Системы мониторинга для детей, пожилых людей, пациентов или людей с особыми потребностями;
  • Системы наблюдения в сельском хозяйстве и теплицах;
  • Система мониторинга прогнозов погоды;
  • Наблюдение за городским движением, школами, автостоянками;

И многие, многие другие приложения.

В этой статье я хочу показать результаты эксперимента с беспроводными сенсорными сетями, которые использовались для мониторинга данных о температуре и влажности, с медленными и относительно предсказуемыми изменениями. Для этого эксперимента я решил использовать датчики-отправители, которые я построил самостоятельно с использованием доступных модулей. Приемник тоже самодельный, связь однонаправленная (в радиодиапазоне 433 МГц), это означает, что датчики только передают данные, а центральное устройство только принимает. Нет связи между датчиками и от приемника к датчикам.

Но зачем использовать несколько передатчиков и только один приемник? Очевидно, первая причина - «упростить». Чем проще сборка, тем меньше вероятность поломки, и, безусловно, намного проще отремонтировать и заменить отдельные компоненты в случае неисправности. Энергопотребление также ниже, батареи прослужат дольше (датчики будут потреблять только во время мониторинга и приема, остальное время устройство будет в режиме глубокого сна). Тот факт, что это просто, делает устройство дешевым. Еще один аспект, о котором следует помнить, - это зона покрытия. Почему? Гораздо проще построить и использовать чувствительный приемник, чем иметь чувствительный приемник и мощный передатчик как на датчиках, так и на центральном модуле (это необходимо для хорошей двунаправленной связи). С помощью чувствительного и качественного приемника можно принимать данные с большого расстояния, но для передачи данных на такое же расстояние требуется высокая мощность излучения, а это связано с высокими затратами, потреблением электроэнергии и (не будем забывать) возможностью превышения допустимая максимальная мощность передатчика в диапазоне 433 МГц. Используя приемник среднего качества, дешевый, но с высококачественной антенной (даже самодельной), и дешевые передатчики с качественной антенной, мы можем достичь отличных результатов за небольшую часть стоимости существующих беспроводных сенсорных сетей.

Шаг 1. Теоретические соображения

Идея создания беспроводной сенсорной сети для мониторинга температуры и влажности воздуха и почвы в различных помещениях теплицы пришла мне в голову давно, почти 10 лет назад. Я хотел построить 1-проводную сеть и использовать 1-проводные датчики температуры и влажности. К сожалению, 10 лет назад датчики влажности были редкостью и были дорогими (хотя датчики температуры были широко распространены), и поскольку разводка проводов по всей теплице не казалась мне вариантом, я довольно быстро отказался от этой идеи.

Однако сейчас ситуация в корне изменилась. Мы можем найти дешевые и качественные датчики (температуры и влажности), а также у нас есть доступ к дешевым передатчикам и приемникам в диапазоне 433 МГц. Есть только одна проблема: если у нас больше датчиков (скажем, 20), как мы разрешаем столкновения (пожалуйста, имейте в виду, что это односторонняя связь), то есть перекрытие излучения двух или более датчиков? В поисках возможного решения я наткнулся на очень интересные статьи:

Конвергентная трансляция беспроводных датчиков на основе процедуры случайных операций - RAJBA, T. и RAJBA, S.

а также

Вероятность коллизий в беспроводной сенсорной сети при случайной отправке - по RAJBA S. и RAJBA. Т

По сути, авторы показывают нам, что вероятность коллизий в беспроводной сенсорной сети может быть рассчитана, если пакеты излучаются в определенные моменты времени в соответствии с пуассоновским (экспоненциальным) распределением.

В отрывке из указанной статьи перечислены характеристики исследуемой сети.

  • достаточно большое количество датчиков-отправителей N;
  • блоки датчик-отправитель остаются полностью независимыми, и их включение или выключение не влияет на работу сети;
  • все блоки датчик-отправитель (или их часть) могут быть мобильными при условии, что они находятся в пределах радиодальности принимающей станции;
  • медленно изменяющиеся физические параметры подвергаются измерениям, что означает, что нет необходимости передавать данные очень часто (например, каждые несколько минут или несколько десятков минут);
  • передача односторонняя, то есть от блока датчик-отправитель до точки приема через T средних временных интервалов. Информация передается в протоколе в момент времени tп продолжительность;
  • любой выбранный датчик начинает передачу случайным образом во времена Пуассона. PASTA (Poisson Arrivals See Time A average) будет использоваться для обоснования отправки зондов в эпохи Пуассона;
  • все датчики-отправители остаются случайно независимыми и будут передавать информацию в случайно выбранный момент времени tп длительность и среднее время повторения T;
  • если один или несколько датчиков начинают передачу, пока протокол tп длительность передается с другого датчика, такая ситуация называется столкновением. Конфликт лишает центральную базовую станцию возможности правильного приема информации.

Он почти идеально подходит для сенсорной сети, которую я хочу протестировать …

Почти.

Я не говорю, что полностью понял математику, изложенную в статье, но на основе представленных данных и выводов я смог немного понять, о чем идет речь. Единственное, что значение, использованное в статье, меня немного обеспокоило:). Это переменная tп - продолжительность передачи данных предполагается равной 3,2х10-5 с. Таким образом, время передачи собранных данных составит 3,2 мкс! Это невозможно сделать в диапазоне 433 МГц. Я хочу использовать либо rcswitch, либо радиоголовку для программирования датчиков передатчика. Изучая коды двух библиотек, я пришел к выводу, что наименьшее время передачи будет 20 мс, что намного выше значения 3,2 мкс. С передатчиками 2,4 ГГц это возможно.п время так мало … но это уже другая история.

Если мы применим формулу, предложенную авторами этой статьи, результат будет:

Исходные данные (пример):

  • Количество датчиков N = 20;
  • Продолжительность передачи данных tп= 20x10-3 с (0,020 с)
  • Средний интервал передачи T = 180 с

Формула:

Вероятность столкновения на интервале T равна

Изображение
Изображение

с учетом исходных данных вероятность столкновения на интервале T составит 0,043519

Это значение, которое указывает на вероятность возникновения 4,35 столкновений на 100 измерений, на мой взгляд, довольно хорошее. Вероятность может улучшиться, если мы увеличим среднее время передачи, поэтому при значении 300 с у нас будет вероятность 0,026332, то есть 2,6 столкновения на 100 измерений. Если учесть, что мы можем ожидать потери пакетных данных в любом случае во время работы системы (например, в зависимости от погодных условий), то это действительно отличный показатель.

Я хотел смоделировать этот тип сети, а также своего рода помощника по дизайну, поэтому я сделал небольшую программу на C, вы можете найти исходный код на github (также скомпилированный двоичный файл, который работает в командной строке Windows - выпускать).

Входные данные:

  • sensor_number - количество датчиков в сети;
  • measure_number - количество измерений для моделирования;
  • average_transmission_interval - среднее время между последовательными передачами данных;
  • Transmission_time - эффективная продолжительность передачи данных.

Выход:

  • расчетное максимальное время измерения;
  • список коллизий между двумя датчиками;
  • количество столкновений;
  • теоретическая вероятность столкновений.

Результаты довольно интересные:)

Хватит теории, я бы не хотел больше настаивать на теоретической части, статьи и исходный код довольно красноречивы, поэтому я лучше перейду к практической, эффективной реализации беспроводной сенсорной сети и к результатам испытаний.

Шаг 2: Практическая реализация - оборудование

Для трансмиттеров-датчиков нам потребуются следующие компоненты:

  • Микроконтроллер ATtiny85 1.11 $;
  • Розетка для микросхем 8DIP 0.046 $;
  • Датчик температуры / влажности DHT11 0.74 $;
  • Модуль передатчика 433MHz H34A 0.73 $;
  • Батарейный отсек 4xAA с переключателем 1 $;

Итого 3.63 $;

Приемник, используемый для тестов, представляет собой Arduino UNO (только для тестирования) и приемный модуль H3V4F (0,66 доллара США) с дешевой дуговой антенной (0,32 доллара США).

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

Изображение
Изображение

Блоки трансмиттера-сенсора питаются от батареек 3xAA, 1,5В (в четвертом отсеке батарейного отсека находится электронная сборка). Как вы можете видеть, источник питания передатчика и датчик температуры-влажности подключены к выводу PB0 микроконтроллера (передатчик и датчик получают питание, когда вывод установлен в положение HIGH). Таким образом, когда микроконтроллер находится в режиме глубокого сна, потребление тока может достигать 4,7 мкА. Учитывая, что время пробуждения датчика-передатчика составляет около 3 с (измерение, передача и т. Д.), А среднее время между передачами составляет 180 с (как в примере в предыдущей главе), батареи должны выдерживать довольно много. С некоторыми щелочными батареями хорошего качества (например, 2000 мАч) автономность может составить более 10 месяцев, как рассчитано на сайте omnicalculator.com (где общее потребление тока составляет: датчик - 1,5 мА, модуль передатчика - 3,5 мА и микроконтроллер ATtiny85 - 5 мА, всего 10 мА.).

На фото ниже почти готовая сборка датчик-отправитель.

Изображение
Изображение

Ниже фото тестового приемника.

Изображение
Изображение

Шаг 3: Практическая реализация - Программное обеспечение

Программное обеспечение, загруженное в микроконтроллер attiny85, основной компонент блоков датчика-отправителя, предназначено для считывания данных, предоставляемых датчиком, преобразования их для передачи по радио и передачи в пределах временных рамок Пуассона (экспоненциальное распределение или ПАСТА - прибытие Пуассона см. Среднее время). Кроме того, с помощью простой функции он контролирует состояние батарей и выдает предупреждение, если необходимое напряжение для датчика больше не подается. Исходный код доступен на github. Код тестового приемника очень прост, я публикую его ниже.

// модифицированная библиотека rcswitch из https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// код представляет собой модифицированную версию из примеров исходной библиотеки rcswitch #include RCSwitch mySwitch = RCSwitch (); беззнаковые длинные данные = 0; void setup () {Serial.begin (9600); mySwitch.enableReceive (0); // Получатель прерывания 0 => это контакт №2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // вывод (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int влажность = bitExtracted (данные, 7, 1); // менее значимые 7 бит с позиции 1 - крайний правый первый бит int temperature = bitExtracted (data, 7, 8); // следующие 7 бит с позиции 8 вправо и так далее int v_min = bitExtracted (data, 1, 15); int packet_id = bitExtracted (данные, 3, 16); // 3 бита - 8 идентификаторов пакетов от 0 до 7 int sensor_id = bitExtracted (data, 6, 19); // 6 бит для 64 идентификаторов датчиков - всего 24 бита Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (температура); Serial.print (","); Serial.print (влажность); Serial.println (); mySwitch.resetAvailable (); }} // код из https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (длинное число без знака, int k, int p) {return ((((1 (p - 1)));}

Я постарался включить как можно больше комментариев, чтобы упростить понимание.

Для отладки я использовал серийную библиотеку программного обеспечения и плату разработки attiny85 с программатором USBasp (см. Также мои инструкции по этому поводу). Последовательная связь была сделана с помощью преобразователя Serial to TTL (с микросхемой PL2303), подключенного к изогнутым контактам (3 и 4) платы разработки (см. Рисунок ниже). Все это оказало неоценимую помощь в завершении кода.

Изображение
Изображение

Шаг 4: результаты тестирования

Результаты теста
Результаты теста
Результаты теста
Результаты теста

Я создал 5 датчиков-отправителей, которые собирают и отправляют значения, измеренные датчиками DHT11. Я записывал и сохранял измерения с помощью тестового приемника и программы эмуляции терминала (foxterm) в течение трех дней. Я выбрал для изучения 48-часовой интервал. Меня не обязательно интересовали измеренные значения (например, датчик 2 показывает неправильные значения), а количество столкновений. Кроме того, датчики были размещены очень близко (на расстоянии 4-5 м) от приемника, чтобы исключить другие причины потери пакетов. Результаты теста были сохранены в файле cvs и загружены (см. Файл ниже). Я также загрузил файл Excel на основе этого файла csv. Я сделал несколько снимков экрана, чтобы показать вам, как выглядит столкновение (в моих тестах, конечно), я также добавил комментарии к каждому снимку экрана.

Вы можете спросить, почему я не использовал службу загрузки данных, например ThingSpeak. Дело в том, что у меня много записей, множество датчиков и данные, поступающие часто с нерегулярными интервалами, а онлайн-сервисы IoT разрешают данные только с определенного количества датчиков и только с довольно большими интервалами. Думаю в будущем установить и настроить собственный IoT-сервер.

В итоге 4598 измерений на 5 блоках датчик-отправитель (примерно 920 на датчик) привели в общей сложности к 5 столкновениям в течение 48 часов (0,5435 столкновений / 100 измерений). Произведя некоторую математику (используя программу wsn_test с исходными данными: 5 датчиков, среднее время 180 с, время передачи 110 мс), вероятность столкновения составит 0,015185 (1,52 столкновения / 100 измерений). Практические результаты даже лучше теоретических, не так ли?:)

Изображение
Изображение

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

Шаг 5: Заключительные мысли

Немедленное применение

В большой теплице выращивают несколько культур. Если полив осуществляется вручную без мониторинга климата, без какой-либо автоматизации, без регистрации данных существует риск чрезмерного или недостаточного орошения, а также высокое потребление воды, нет данных об оптимизации водопотребления, существует риск для сельскохозяйственных культур в Общее. Чтобы этого не произошло, можно использовать беспроводную сенсорную сеть:)

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

Что дальше?

  • Тестирование с большим количеством датчиков;
  • Тестирование в реальном времени с удаленными датчиками в зоне покрытия;
  • Установка и настройка локального IoT-сервера (например, на Raspberry Pi);
  • Испытания также проводились с датчиками передатчика (трансивера) на частоте 2,4 ГГц.

итак… продолжение следует…:)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Использование диапазона 433 МГц в вашем регионе может регулироваться правилами радиочастот. Пожалуйста, проверьте свою законность, прежде чем пробовать этот проект

Конкурс датчиков
Конкурс датчиков
Конкурс датчиков
Конкурс датчиков

Финалист конкурса датчиков

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