Мир глазами WiFi роутера

в 22:09, , рубрики: arduino, diy или сделай сам, esp8266, qt, wifi, Программирование, радиовизор, Электроника для начинающих

Мир глазами WiFi роутера - 1
Рассказ о попытках увидеть окружающий мир в совершенно ином свете и как это в итоге привело к созданию устройства, позволяющего «видеть» WiFi. В процессе будет использован популярный модуль ESP8266. Без Arduino, к сожалению, тоже не обойдется.

N-лет назад, группой молодых исследователей из Германии был описан концепт тепловизора, базирующийся всего-навсего на одном датчике. Суть работы устройства сводилась к следующему: с помощью конструкции из двух сервоприводов ИК-датчик последовательно наводился по вертикали и горизонтали на нужную область, постепенно сканируя изображение. Такое интересное решение позволяло резко сократить цену устройства, и получать занятные картинки распределения температуры, вроде этих:
Мир глазами WiFi роутера - 2
Система механической развертки изображения — а именно этим конструкция из сервоприводов и является, оказалась крайне интересной вещью. Сразу же после постройки подобного устройства возникает вопрос — а почему бы не заменить ИК-датчик чем либо еще, что позволит используя тот же принцип, визуализировать например радиоволны?
Глаз человека, хоть и довольно сложный, но весьма ограниченный инструмент. Диапазон видимого нами света представляет собой ну очень маленькую часть спектра электромагнитного излучения.
Мир глазами WiFi роутера - 3
Оцените масштаб трагедии — большая часть информации об окружающем мире, просто-напросто скрыта от нас. Разумеется, было бы очень здорово расширить природные рамки и обрести способность видеть за пределами, очерченными природой. Потому и и были осуществлены нижеприведенные эксперименты с использованием системы механической развертки.

Для отработки технологии я сделал простую «однопиксельную» камеру, которая работает в уже привычном нам видимом диапазоне. В качестве датчика использовал солнечную батарею от китайской игрушечной машинки:
Мир глазами WiFi роутера - 4
Конечно, площадь такого фотоэлемента очень большая, а значит надо как-то обеспечить узкое поле зрения, потому добавим к ней линзу от фонарика. Поставим на сервоприводы и подключим к Arduino.
Мир глазами WiFi роутера - 5
Солнечная батарея поворачивается к необходимому участку будущего изображения, после чего контроллер считывает сигнал, который пропорционален количеству света, падающего на батарею. Конечно такая камера в итоге выдаст черно-белое изображение.
Чтобы обрабатывать результаты сканирования, с помощью QT была реализована программка с простеньким интерфейсом. (Уроки по тому, как реализовать общение Arduino и Qt можно легко раздобыть на youtube). Программа состоит из пары кнопок для ручного управления сервоприводами и поля QGraphicsScene, где рисуются квадратики-пиксели, цвет которых зависит от величины сигнала в конкретной точке. Использование простое — сначала вручную приводы наводятся в левую верхнюю точку будущего изображения, после чего производится автоматическое сканирование области, во время которого строится картинка. Вот что из всего этого получилось в итоге:
Мир глазами WiFi роутера - 6
Что-же изображено на данной визуализации? Конечно, это самый очевидный объект для съемки в случае, если ваша камера представляет собой солнечную батарею — это солнце.

Тем не менее, сигнал с батареи слишком слабенький, чтобы получать адекватные картинки при комнатном освещении, потому она была заменена на фоторезистор, а линза от фонарика уступила место половинке сломанного театрального бинокля.

Схема подключения

Мир глазами WiFi роутера - 7

Мир глазами WiFi роутера - 8
Это творение оказалось более удачным, и уже появилась возможность делать более-менее узнаваемые фотографии:
Люстра
Мир глазами WiFi роутера - 9
Машина на дороге
Мир глазами WiFi роутера - 10
Вид из окна
Мир глазами WiFi роутера - 11
И даже облака на небе
Мир глазами WiFi роутера - 12
Удовлетворившись таким результатом, я решил, что пора наконец сделать полноценный радиовизор, заменив фоторезистор на направленную антенну. Самый подходящий диапазон для этого — это СВЧ, так как направленная антенна не занимает много места, да и в нашей жизни сегодня есть много устройств, заботливо излучающих в этом диапазоне.

Сначала задумал использовать рупорную антенну, которая есть в автомобильных радар-детекторах (они как правило работают в диапазоне 10,525 Ггц или 24,15 Ггц). Попытки вычленить из схемы такого детектора аналоговый сигнал, пропорциональный величине регистрируемого излучения не увенчались успехом, возможно из-за недостатка моих познаний, а возможно потому что такового там нет вовсе, так как он работает по принципу сравнения. (привет китайским братьям, собравшим это чудо). Хотелось конечно вытащить саму антенну и соорудить что-то свое, но ломать хороший прибор ради этого я не стал.
Второе, что пришло мне в голову — соорудить детектор поля по одной из схем, которые в изобилии водятся на радиолюбительских порталах и прицепить к нему самодельную направленную антенну, например очень популярный и довольно простой в изготовлении биквадрат Харченко. Но как оказалось, самый главный элемент — детекторный СВЧ-диод очень трудно найти, легко потерять и вообще он стоит дороговато, потому пришлось долго и упорно искать нужную детальку.
Через какое-то время, мне удалось раздобыть германиевый детекторный диод еще советских времен и собрать следующую схему:
Мир глазами WiFi роутера - 13
Полученное устройство уверенно работало, но на очень маленьком расстоянии, где-то 5-10 см от мобильного телефона, выступающего в роли источника излучения. Этого разумеется было недостаточно для поставленной задачи.

После всех этих мытарств, в итоге ко мне попал модуль ESP8266, который умеет отображать RSSI (Показатель уровня принимаемого WiFi сигнала) найденных точек доступа. Для этого используется команда AT+CWLAP в стандартной прошивке модуля. Я решил применить эту функцию вкупе с самодельной направленной WiFi антенной-биквадратом, упомянутой ранее. Таким образом и появилось сие чудо техники:

схема подключения
Мир глазами WiFi роутера - 14

Мир глазами WiFi роутера - 15
Сам ESP8266 закреплен на обратной стороне антенны и хорошенько экранирован медными листами. Светящиеся циферки показывают напряжение на выходе импульсного DC-DC преобразователя, который понижает 12В от блока питания до 3.3В, необходимых для работы модуля (он очень прожорливый, поэтому запитывать его от Arduino чревато нестабильной работой).
Arduino как и раньше управляет сервоприводами и кроме того посылает AT команды ESP8266 с применением библиотеки SoftwareSerial. Один из сложных моментов — вместо стандартных библиотек SoftwareSerial и Servo пришлось перейти на их аналоги, так как оригинальные конфликтуют при одновременном использовании.
Конечно, можно услышать упреки, что Arduino здесь вовсе является лишним элементом, так как ESP8266 и сам может справиться с таким функционалом. Но так уж исторически сложилось, что по ходу создания устройства я изначально ориентировался на Arduino как центральное звено итогового устройства, а ESP8266 играет роль своеобразного датчика.
Программа на QT, написанная еще для «солнечной камеры» подверглась значительной доработке.

конечная версия программы

Мир глазами WiFi роутера - 16

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

Ну и наконец, поставив устройство в разные части своего жилища, я получил следующие изображения. К счастью в моем доме довольно много сетей wifi, а с подобной направленной антенной можно поймать даже весьма удаленные.
Мир глазами WiFi роутера - 17
Диван и часть ковра. Если обратите внимание, очень качественное изображение по сравнению с остальными получается у точки «SkyNet» — это мой домашний роутер. Он находится ближе всех к месту съемок, что видимо играет не последнюю роль в процессе.
Мир глазами WiFi роутера - 18
Снова люстра. Сигналы некоторых сетей не отражаются от потолка, либо от люстры. Скорей всего по этим признакам можно попытаться определить физическое расположение передатчика.
Мир глазами WiFi роутера - 19
Ванна, наполненная водой. Как всем известно, радиоволны под водой передаются плохо.

Стоит отметить, что фото в видимом диапазоне лишь примерно соответствуют отсканированной области. Также необходимо учесть, что при работе антенна как-бы описывает полусферу, а это тоже влияет на результат. Разрешение в принципе ограничено только ходом антенны и временем, которое нужно чтобы обвести всю область. При этом получение данных для каждого пикселя требует 4-5 сек. Хотелось бы получить менее размытые изображения, но для этого нужна антенна с более узкой диаграммой направленности.

Исходные коды, включая скетч для Arduino

Автор: Astrei

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js