Съдържание:

Евтина безжична сензорна мрежа в обхват 433MHz: 5 стъпки (със снимки)
Евтина безжична сензорна мрежа в обхват 433MHz: 5 стъпки (със снимки)

Видео: Евтина безжична сензорна мрежа в обхват 433MHz: 5 стъпки (със снимки)

Видео: Евтина безжична сензорна мрежа в обхват 433MHz: 5 стъпки (със снимки)
Видео: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Декември
Anonim
Евтина безжична сензорна мрежа в обхват 433MHz
Евтина безжична сензорна мрежа в обхват 433MHz

Много благодаря на Тереза Раджба за любезното ми съгласие да използвам данните от техните публикации в тази статия

* На изображението по -горе - петте сензорни изпращача, които използвах за тестване

Какво представляват безжичните сензорни мрежи?

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

В днешно време безжичните сензорни мрежи могат да се използват по няколко начина, по -долу са само няколко примера:

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

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

В тази статия искам да покажа резултатите от експеримент с безжични сензорни мрежи, които са били използвани за наблюдение на данните за температурата и влажността, с бавни и относително предвидими вариации. За този експеримент избрах да използвам сензори-изпращачи, които създадох сам, като използвам достъпни модули. Приемникът също е DIY, комуникацията е еднопосочна (в радиочестотната лента 433 MHz), което означава, че сензорите само предават данните, а централното местоположение само приема. Няма комуникация между сензорите и от приемника до сензорите.

Но защо да изберете да използвате няколко предавателя и само един приемник? Очевидно първата причина би била „опростяване“. Колкото по -просто е сглобяването, толкова по -малка е вероятността да се повреди и определено е много по -лесно да се поправят и подменят отделните компоненти в случай на неизправности. Консумацията на енергия също е по -ниска, батериите ще издържат по -дълго (сензорите ще консумират само по време на наблюдение и приемане, през останалото време устройството ще бъде в режим на дълбок сън). Фактът, че е прост, прави устройството също евтино. Друг аспект, който трябва да имате предвид, е зоната на покритие. Защо? Много по -лесно е да се изгради и използва чувствителен приемник, отколкото да има чувствителен приемник и мощен предавател както на сензорите, така и на централния модул (това е необходимо за добра двупосочна комуникация). С чувствителен и качествен приемник е възможно да се получават данни от голямо разстояние, но излъчването на данни за същото разстояние изисква висока емисионна мощност и това идва с високи разходи, консумация на електроенергия и (да не забравяме) възможността да се преодолее законна максимална мощност на предавателя в обхвата 433 MHz. Използвайки приемник със средно качество, евтин, но с висококачествена антена (дори DIY) и евтини предаватели с антена с добро качество, можем да постигнем отлични резултати на малка част от цената на съществуващите безжични сензорни мрежи.

Стъпка 1: Теоретични съображения

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

Сега обаче ситуацията коренно се промени. Ние можем да намерим евтини и качествени сензори (температура и влажност), а също така имаме достъп до евтини предаватели и приемници в обхвата 433 MHz. Има само един проблем: ако имаме повече сензори (да речем 20), как да разрешим сблъсъците (моля, имайте предвид, че това е еднопосочна комуникация), което означава, припокриване на излъчването на 2 или повече сензора? Докато търсех възможно решение, попаднах на тези много интересни документи:

Безжичният сензор сближава гласове въз основа на процедура на произволни операции - от RAJBA, T. и RAJBA, S.

и

Вероятността от сблъсъци в безжична сензорна мрежа със случайно изпращане - от RAJBA S. и RAJBA. T

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

Извлечение от горния доклад изброява характеристиките на изследваната мрежа.

  • доста голям брой сензорно-изпращащи единици N;
  • сензорно-изпращащите устройства остават напълно независими и включването или изключването им не оказва влияние върху работата на мрежата;
  • всички сензорно-изпращащи устройства (или част от тях) могат да бъдат мобилни, при условие че са разположени в радиообхвата на приемащата станция;
  • бавно променящите се физически параметри се подлагат на измервания, което означава, че няма нужда да се предават данните много често (например на всеки няколко минути или няколко десетки минути);
  • предаването е еднопосочно, т.е.от сензорно-изпращащото устройство до точката на приемане на Т средни времеви интервали. Информацията се предава в протокола при tстр времетраене;
  • всеки избран сензор започва да предава на случаен принцип по време на Пуасон. PASTA (Poisson Arrivals See A Average Sens) ще се използва за оправдаване на изпращането на сонди в епохите на Poisson;
  • всички сензорни податели остават произволно независими и те ще предават информацията в произволно избран момент от време на tстр продължителност и средно време на повторение T;
  • ако един или повече сензори започнат да предават, докато протоколът на tстр продължителността се предава от друг сензор, такава ситуация се нарича сблъсък. Сблъсъкът прави невъзможно централната базова станция да получава информацията по правилен начин.

Пасва почти идеално на сензорната мрежа, която искам да тествам …

Почти.

Не казвам, че напълно разбрах математиката в статията, но въз основа на представените данни и на заключенията успях да разбера малко за какво става въпрос. Единственото нещо е, че стойността, използвана във вестника, малко ме притесни:). Това е променливата tстр - продължителност на предаването на данни, която се приема за 3.2x10-5 с. Така че времето за предаване на събраните данни би било 3,2 us! Това не може да се направи в обхвата 433 MHz. Искам да използвам или rcswitch или radiohead за програмиране на сензорите на предавателя. Изучавайки кодовете на двете библиотеки, стигнах до извода, че най -малкото време за предаване ще бъде 20 ms, много над стойността от 3,2 us. С 2.4 GHz предаватели е възможно tстр толкова малко време … но това е друга история.

Ако приложим формулата, предложена от авторите на тази статия, резултатът ще бъде:

Първоначални данни (пример):

  • Брой сензори N = 20;
  • Продължителност на предаване на данни tстр= 20x10-3 s (0.020s)
  • Среден интервал на предаване T = 180s

Формулата:

Вероятността за сблъсък на Т интервала е

Образ
Образ

ако вземем предвид първоначалните данни, вероятността от сблъсък на Т интервала ще бъде 0,043519

Тази стойност, която показва вероятността от 4,35 сблъсъка на 100 измервания, според мен е доста добра. Вероятността може да се подобри, ако увеличим средното време на предаване, така че при стойност от 300s бихме имали вероятност от 0,026332, т.е. 2,6 сблъсъка на 100 измервания. Ако считаме, че така или иначе можем да очакваме загуба на пакетни данни по време на работата на системата (в зависимост от метеорологичните условия например), тогава този брой е наистина отличен.

Исках да направя симулация на този тип мрежа, но и нещо като помощник при проектирането, затова направих малка програма на C, можете да намерите изходния код на github (също компилиран двоичен файл, който се изпълнява в командния ред на Windows - освобождаване).

Входни данни:

  • sensor_number - броят на сензорите в мрежата;
  • измервания_номер - брой измервания за симулиране;
  • среден_предавателен_интервал -средно време между последователните предавания на данни;
  • 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.5v батерии (в четвъртото отделение на държача за батерии има електронния модул). Както можете да видите захранването на предавателя и сензорът за температура-влажност е закачен към щифта PB0 на микроконтролера (предавателят и сензорът се захранват, когато щифтът е настроен на HIGH). Така че, когато микроконтролерът е в режим на дълбок сън, той може да достигне консумация на ток от 4,7uA. Като се има предвид, че времето за събуждане на сензора на предавателя ще бъде около 3 секунди (измерване, предаване и т.н.) и средното време между предаванията от 180 секунди (като пример в предишната глава), батериите трябва да устоят доста. С някои качествени алкални батерии (т.е. 2000 mAh), автономността може да бъде над 10 месеца, както е изчислено на omnicalculator.com (където общата консумация на ток е: сензор - 1.5mA, предавателен модул - 3.5mA и микроконтролер ATtiny85 - 5mA, общо 10mA).

На снимката по-долу можете да видите почти завършения монтаж на сензора-подател.

Образ
Образ

По -долу е снимката на тестовия приемник.

Образ
Образ

Стъпка 3: Практическо внедряване - Софтуер

Софтуерът, качен в микроконтролера attiny85, основният компонент на сензорно-изпращащите устройства, има за цел да прочете данните, предоставени от сензора, да ги преобразува за предаване по радио и да ги предаде в рамките на времената на Пуасон (експоненциално разпределение или PASTA - Poisson Arrivals See Average Time). Също така, използвайки проста функция, той следи състоянието на батериите и предупреждава, ако необходимото напрежение за сензора вече не се осигурява. Изходният код е достъпен на 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 температура = bitExtracted (данни, 7, 8); // следващи 7 бита от позиция 8 надясно и така нататък int v_min = bitExtracted (данни, 1, 15); int packet_id = bitExtracted (данни, 3, 16); // 3 бита - 8 идентификатора на пакети от 0 до 7 int sensor_id = bitExtracted (данни, 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 (unsigned long number, int k, int p) {return (((1 (p- 1)));}

Опитах се да включа възможно най -много коментари, за да направя нещата по -лесни за разбиране.

За отстраняване на грешки използвах софтуерната библиотека и платката за разработка на attiny85 с програмиста USBasp (вижте също моите инструкции за това). Серийната връзка е направена със сериен към 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 сензора, средно време 180s, време на предаване 110 ms) вероятността от сблъсък би била 0,015185 (1,52 сблъсъка/100 измервания). Практическите резултати са дори по -добри от теоретичните, нали?:)

Образ
Образ

Във всеки случай има и 18 загубени пакета през този период, така че сблъсъците всъщност нямат особено значение в това отношение. Разбира се, тестът трябва да се проведе за по -дълъг период от време, за да се получат най -убедителните резултати, но според мен е успешен дори при тези условия и напълно потвърждава теоретичните предположения.

Стъпка 5: Заключителни мисли

Незабавно приложение

В голяма оранжерия се отглеждат няколко култури. Ако напояването се извършва ръчно, без мониторинг на климата, без каквато и да е автоматизация, без записи на данни, съществува риск от прекалено или под напояване и също така консумацията на вода е висока, няма доказателства за оптимизиране на потреблението на вода, има риск за културите в общ. За да избегнем това, можем да използваме безжична сензорна мрежа:)

Сензори за температура, сензори за влажност на въздуха, сензори за влажност на почвата могат да бъдат поставени навсякъде в оранжерията и с помощта на предадени данни могат да се извършат няколко действия: стартиране-спиране на електрически клапани за пропускане на водата, където е необходимо, стартиране-спиране на електрически вентилатори за да се намали температурата в различни зони, при необходимост стартирайте и спрете нагревателите и всички данни могат да бъдат архивирани за бъдещ анализ. Също така системата може да осигури уеб интерфейс, който е достъпен навсякъде и аларми по имейл или SMS в случай на ненормално състояние.

Какво следва?

  • Тестване с по -голям брой сензори;
  • Тестване в реално време с дистанционни сензори в зоната на покритие;
  • Инсталиране и конфигуриране на локален IoT сървър (например на Raspberry Pi);
  • Тества се и с предавател (приемо-предавател) -сензори на 2.4Ghz.

така че … ще продължим …:)

ОТКАЗ ОТ ОТГОВОРНОСТ: Използването на честотната лента 433MHz във вашия регион може да подлежи на радиочестотни разпоредби. Моля, проверете законността си, преди да опитате този проект

Състезание за сензори
Състезание за сензори
Състезание за сензори
Състезание за сензори

Вицешампион в състезанието за сензори

Препоръчано: