Рассказ о попытках увидеть окружающий мир в совершенно ином свете и как это в итоге привело к созданию устройства, позволяющего «видеть» WiFi. В процессе будет использован популярный модуль ESP8266. Без Arduino, к сожалению, тоже не обойдется.
N-лет назад, группой молодых исследователей из Германии был описан концепт тепловизора, базирующийся всего-навсего на одном датчике. Суть работы устройства сводилась к следующему: с помощью конструкции из двух сервоприводов ИК-датчик последовательно наводился по вертикали и горизонтали на нужную область, постепенно сканируя изображение. Такое интересное решение позволяло резко сократить цену устройства, и получать занятные картинки распределения температуры, вроде этих:
Система механической развертки изображения — а именно этим конструкция из сервоприводов и является, оказалась крайне интересной вещью. Сразу же после постройки подобного устройства возникает вопрос — а почему бы не заменить ИК-датчик чем либо еще, что позволит используя тот же принцип, визуализировать например радиоволны?
Глаз человека, хоть и довольно сложный, но весьма ограниченный инструмент. Диапазон видимого нами света представляет собой ну очень маленькую часть спектра электромагнитного излучения.
Оцените масштаб трагедии — большая часть информации об окружающем мире, просто-напросто скрыта от нас. Разумеется, было бы очень здорово расширить природные рамки и обрести способность видеть за пределами, очерченными природой. Потому и и были осуществлены нижеприведенные эксперименты с использованием системы механической развертки.
Для отработки технологии я сделал простую «однопиксельную» камеру, которая работает в уже привычном нам видимом диапазоне. В качестве датчика использовал солнечную батарею от китайской игрушечной машинки:
Конечно, площадь такого фотоэлемента очень большая, а значит надо как-то обеспечить узкое поле зрения, потому добавим к ней линзу от фонарика. Поставим на сервоприводы и подключим к Arduino.
Солнечная батарея поворачивается к необходимому участку будущего изображения, после чего контроллер считывает сигнал, который пропорционален количеству света, падающего на батарею. Конечно такая камера в итоге выдаст черно-белое изображение.
Чтобы обрабатывать результаты сканирования, с помощью QT была реализована программка с простеньким интерфейсом. (Уроки по тому, как реализовать общение Arduino и Qt можно легко раздобыть на youtube). Программа состоит из пары кнопок для ручного управления сервоприводами и поля QGraphicsScene, где рисуются квадратики-пиксели, цвет которых зависит от величины сигнала в конкретной точке. Использование простое — сначала вручную приводы наводятся в левую верхнюю точку будущего изображения, после чего производится автоматическое сканирование области, во время которого строится картинка. Вот что из всего этого получилось в итоге:
Что-же изображено на данной визуализации? Конечно, это самый очевидный объект для съемки в случае, если ваша камера представляет собой солнечную батарею — это солнце.
Тем не менее, сигнал с батареи слишком слабенький, чтобы получать адекватные картинки при комнатном освещении, потому она была заменена на фоторезистор, а линза от фонарика уступила место половинке сломанного театрального бинокля.
Это творение оказалось более удачным, и уже появилась возможность делать более-менее узнаваемые фотографии:
Люстра
Машина на дороге
Вид из окна
И даже облака на небе
Удовлетворившись таким результатом, я решил, что пора наконец сделать полноценный радиовизор, заменив фоторезистор на направленную антенну. Самый подходящий диапазон для этого — это СВЧ, так как направленная антенна не занимает много места, да и в нашей жизни сегодня есть много устройств, заботливо излучающих в этом диапазоне.
Сначала задумал использовать рупорную антенну, которая есть в автомобильных радар-детекторах (они как правило работают в диапазоне 10,525 Ггц или 24,15 Ггц). Попытки вычленить из схемы такого детектора аналоговый сигнал, пропорциональный величине регистрируемого излучения не увенчались успехом, возможно из-за недостатка моих познаний, а возможно потому что такового там нет вовсе, так как он работает по принципу сравнения. (привет китайским братьям, собравшим это чудо). Хотелось конечно вытащить саму антенну и соорудить что-то свое, но ломать хороший прибор ради этого я не стал.
Второе, что пришло мне в голову — соорудить детектор поля по одной из схем, которые в изобилии водятся на радиолюбительских порталах и прицепить к нему самодельную направленную антенну, например очень популярный и довольно простой в изготовлении биквадрат Харченко. Но как оказалось, самый главный элемент — детекторный СВЧ-диод очень трудно найти, легко потерять и вообще он стоит дороговато, потому пришлось долго и упорно искать нужную детальку.
Через какое-то время, мне удалось раздобыть германиевый детекторный диод еще советских времен и собрать следующую схему:
Полученное устройство уверенно работало, но на очень маленьком расстоянии, где-то 5-10 см от мобильного телефона, выступающего в роли источника излучения. Этого разумеется было недостаточно для поставленной задачи.
После всех этих мытарств, в итоге ко мне попал модуль ESP8266, который умеет отображать RSSI (Показатель уровня принимаемого WiFi сигнала) найденных точек доступа. Для этого используется команда AT+CWLAP в стандартной прошивке модуля. Я решил применить эту функцию вкупе с самодельной направленной WiFi антенной-биквадратом, упомянутой ранее. Таким образом и появилось сие чудо техники:
Сам ESP8266 закреплен на обратной стороне антенны и хорошенько экранирован медными листами. Светящиеся циферки показывают напряжение на выходе импульсного DC-DC преобразователя, который понижает 12В от блока питания до 3.3В, необходимых для работы модуля (он очень прожорливый, поэтому запитывать его от Arduino чревато нестабильной работой).
Arduino как и раньше управляет сервоприводами и кроме того посылает AT команды ESP8266 с применением библиотеки SoftwareSerial. Один из сложных моментов — вместо стандартных библиотек SoftwareSerial и Servo пришлось перейти на их аналоги, так как оригинальные конфликтуют при одновременном использовании.
Конечно, можно услышать упреки, что Arduino здесь вовсе является лишним элементом, так как ESP8266 и сам может справиться с таким функционалом. Но так уж исторически сложилось, что по ходу создания устройства я изначально ориентировался на Arduino как центральное звено итогового устройства, а ESP8266 играет роль своеобразного датчика.
Программа на QT, написанная еще для «солнечной камеры» подверглась значительной доработке.
По ходу сканирования области для каждой найденной точки доступа создается свой массив значений сигнала, что позволяет при завершении сканирования посмотреть как «светят» разные WiFi роутеры, и даже попробовать прикинуть их примерное месторасположение. Чем сильнее сигнал в конкретной точке, тем более яркий синий цвет будет у соответствующего пикселя.
Ну и наконец, поставив устройство в разные части своего жилища, я получил следующие изображения. К счастью в моем доме довольно много сетей wifi, а с подобной направленной антенной можно поймать даже весьма удаленные.
Диван и часть ковра. Если обратите внимание, очень качественное изображение по сравнению с остальными получается у точки «SkyNet» — это мой домашний роутер. Он находится ближе всех к месту съемок, что видимо играет не последнюю роль в процессе.
Снова люстра. Сигналы некоторых сетей не отражаются от потолка, либо от люстры. Скорей всего по этим признакам можно попытаться определить физическое расположение передатчика.
Ванна, наполненная водой. Как всем известно, радиоволны под водой передаются плохо.
Стоит отметить, что фото в видимом диапазоне лишь примерно соответствуют отсканированной области. Также необходимо учесть, что при работе антенна как-бы описывает полусферу, а это тоже влияет на результат. Разрешение в принципе ограничено только ходом антенны и временем, которое нужно чтобы обвести всю область. При этом получение данных для каждого пикселя требует 4-5 сек. Хотелось бы получить менее размытые изображения, но для этого нужна антенна с более узкой диаграммой направленности.
Исходные коды, включая скетч для Arduino
Комментарии (45)
Meklon
04.04.2016 02:27+6Полный восторг) А нельзя диаграмму приема еще сильнее сузить?
Rumlin
04.04.2016 13:19Можно было бы баночную попробовать применить.
А для биквадрата такую диаграмму рисуют
telhin
04.04.2016 14:07Сделать съемку с синтезированной апертурой это может улучшить разрешающую способность в 10 раз и выше. Однако придется добавить еще сервоприводов и математики к сигнальной обработке.
rPman
04.04.2016 02:274 секунды на пиксель это особенность работы ESP8266?
Нет никакой возможности ускорить этот процесс?
Как выглядят изображения с большим разрешением? Поставьте на ночь, пусть крутится, и плевать что пока изображение строится характеристики сигнала изменятся.rechmp
04.04.2016 21:54Разрешение зависит от того, насколько остро направлен основной лепесток ДН антенны, а не от того, сколько крутит :)
Для хорошего "разрешения" нужна параболическая тарелка, или как минимум яги.
Mii
04.04.2016 03:17Интересно, а если вместо механической развертки подвести пару моделированных в слышимый диапазон к наушникам и походить так пару дней, то можно будет «слышать» объекты подсвеченные вайфаем через стену?..
engine9
04.04.2016 04:35Крутая задумка и реализация. Чудный пост.
Такую бы штуку в деревню где мало точек, посмотреть как они через окна домов светят.
Oigen
04.04.2016 06:07Очень интересно и познавательно! А что нужно, чтобы сделать картинку радиосигналов как в фильме "Люси", например, или это нереально?
Norno
04.04.2016 10:31+1Если вы про тот момент когда она «видела» уходящие сигналы от мобильников в… космос?.. то нет, так не получится, просто потому что оно так не «выглядит в жизни». Можно визуализировать (но не видеть) процесс распространения радиоволн, но это будет что-то типа волн на воде, либо именно видеть радиоволны, но тут будет как у автора — вы определяете интенсивность излучения приходящего с разных направлений (как и со светом).
RusikR2D2
04.04.2016 07:10+1А такой штуковине можно найти практическое применение:
Автонастройка "дальнобойного" wi-fi канала, или выбор, куда точно направить антенну 3G\4G за городом, или, даже в городе — какое-нибудь отражение может оказаться лучше.
А еще можно подобие радиотелескопа сделать.
А для более точного совмещения видимой картинки и "радио" можно одновременно (или по очереди) сканировать радиодатчиком и оптическим.
owniumo
04.04.2016 07:36+8А вот здесь товарищ катая ESP на координатном станке построил 3D карту, вокселями:
https://www.youtube.com/watch?v=aqqEYz38ens
Говорит, расстояния между экстремумами соответствуют полуволне 2,4 ГГц
thelongrunsmoke
04.04.2016 07:37+1Только идея гораздо старше, гуглите — сканирующий тепловизор "Сова". У него один болометрический датчик и механическая развёртка, первые изделия относятся к 50хх годам.
Yogami
04.04.2016 09:50Помогите найти пост на хабре/гике про некую камеру, снимающую в радиодиапазоне. Автор там снял ночное небо, в котором виднелись геостационарные спутники.
Beholder
04.04.2016 10:01+1Тут уже пытались, выходило круче.
https://habrahabr.ru/post/248969
https://habrahabr.ru/post/218805
https://habrahabr.ru/post/215331
Konachan700
04.04.2016 10:15+3А почему на шкале электромагнитного излучения, там где ДВ должны быть - внезапно ультразвук?Alexeyslav
04.04.2016 14:14Ультразвук это просто альтернативное обозначение диапазона частот, там поидее должны быть длинные и сверхдлинные волны, просто обывателю ближе «звуковые частоты» которые вполне можно себе представить и соотнести другие частоты шкалы.
К тому же частота и длина волны не имеет никакого отношения к способу передачи энергии и среде в которой происходят колебания. С таким же успехом практикуются электромагнитные волны частотой в 1...20Гц и механические упругие колебания частотой в 2...10Мгц(ультразвук) порождающие соответствующие волны.
Alexeyslav
04.04.2016 13:01+1Перед диодом надо было поставить СВЧ-усилитель. Хотя конечно с этим возникает очень много проблем, т.к. СВЧ схемы очень чувствительны к разводке.
У вас получился в принципе обыкновенный детекторный приёмник с соответствующей чувствительностью — напряжение на антенне должно быть больше 0.1В чтобы схема что-то почувствовала… а это соответствует очень сильному сигналу.
Есть кстати готовые RGB-оптические «однопиксельные» приёмники с выходом в виде ШИМ, который легко сопрягается с контроллерами и получаются данные практически сразу в цифре.
Можно кстати срисовать схему с распространённого «SAT Finder» и дополнить её схемой СВЧ-конвертора.
RSSI информация имеет довольно грубую шкалу и притом еще логарифмическая, не очень удобная для построения картинок(больше из-за грубости шкалы).
Кстати, можно использовать шаг сканирования меньше угла ДН антенны и применить методы восстановления размытых изображений, на хабре проскакивал подобный алгоритм. Поидее, такой алгоритм должен иметь математическое решение.
StrangerPin
04.04.2016 14:08А не пробовали совместить полученные снимки?) Что из этого вышло?
Astrei
04.04.2016 14:28Я думал над этим, но пока не реализовал практически. Наверное можно попробовать каждой точке доступа выдавать свой цвет, и смешать все в одном.
Seven-ov
04.04.2016 14:08Интересно поставить на улице и просветить многоквартирный дом, при этом для каждой точки использовать свой цвет =)
GBenG
04.04.2016 14:08«Сигналы некоторых сетей не отражаются от потолка, либо от люстры» — А если к твоему роутеру тоже подключить направленную антенну и установить его рядом с приемником, возможно, получится полноценный радар) И картинка не будет такой размытой…
SquareIronBox
05.04.2016 07:41+1Почитайте статью про увеличение резкости изображений методом обратной свёртки, как раз ваш случай) Из диаграммы направленности антенны можно получить функцию искажения, а на её основе улучшить резкость изображения.
Game_Rate_Com
06.04.2016 23:38Теоретически воспринимая сигнала wi-fi можно видеть сквозь стены или например человека насквозь в духе ренгена, вопрос с-но только в чувствительности датчиков и обработке результата.
Интересно было бы еще из сканов с разных точек, сделать например что-бы робот еще перемещался, реконструировать 3д модель того что он видит.u010602
07.04.2016 06:36Видеть сквозь стены можно очень условно, т.к. волны на частоте 2.4ГГЦ сильно рассеиваются, стены и человек будут как очень матовое мутное стекло. Различить детали будет не проще чем увидеть кости кисти подставив мощный фонарик к кисти. Можно посмотреть по спектру поглощения и отражения материалов, те что хорошо поглощают на этой частоте будут черными, те что хорошо отражают — белыми. Остальное будет размытой серой массой. Кроме того на этих частотах можно легко попасть в экстремумы волновой функции, т.е. яркость излучения будет сильно меняться от вашего положения в комнате, представьте вы идете по направлению к объекту а он то ярче, то темнее, то какой-то артефакт прилетел откуда-то. Я это представляю как зрение Фродо с надетым кольцом Всевластия.
Мне кажется более интересно для зрения в закрытом пространстве уходить в сторону более высоких частот, а не более низких.Rumlin
07.04.2016 08:03www.radioscanner.ru/info/article504
Данная технология основана на доплеровском эффекте ( изменении частоты при перемещении источника радиоизлучения ), где устройство пассивно, т.е оно ничего не излучает в отличие от вышеперечисленных, а лишь регистрирует чужое излучение, а именно отраженное от тушки человека излучение точек доступа WiFi, которое проходит сквозь стены.
u010602
07.04.2016 12:00Это я и имел в виду под «очень условно», это скорее будет датчик движения за стеной, с примерным направлением. И работать будет далеко не со всеми стенами. Кстати там есть видео работы, кляксы непонятной формы у них, по которым можно примерно рассчитать где есть подвижные объекты. Кроме того, думаю заглушить их не составит труда, они в радиодиапазоне, а в случае захвата заложников и так нужно глушить радиочастоты, что-бы исключить утечку данных. Думаю что можно настроить глушилку так, что поймать фазовые и частотные сдвиги от объектов будет сложно или не возможно.
Game_Rate_Com
09.04.2016 06:09Заглушить конечно можно, что угодно но не все бандиты имеют доступ к такому оборудованию и саму глушилку тоже можно вычислить и уничтожить.
С одного устройства толком можно увидеть немного, но если воспринимающих устройств будет много — сотни (+ можно добавить искусственных источников) и сигнал с них будет реконструироваться сервером — теоретически будет можно (весьма не просто, но все же возможно) восстановить картину объектов за стеной.u010602
11.04.2016 13:23+1Выходит что гипотетических бандитов будем ловить сотнями датчиков и соответственно большим штатом силовиков, но сами бандиты при этом придут технически не подготовленными, без глушилок и систем оповещения. Мне кажется что такой вариант не жизнеспособный т.к. из пушки по воробьям. А там где это реально будет подходить по калибру, бандиты принесут с собой глушилки ценой 20 баксов, в большом количестве и расставят по периметру. Выход из строя будет выдавать расположение силовиков. И может служить поводом для автоматического излучения ЭМИ большой энергии. Я это вижу в виде «гранаты», жмешь кнопку и бросаешь в углы помещения, 20 секунд и защита установлена от всех видов беспроводной связи, прослушки, и «подглядки».
От рентгеновских лучей уже так просто не защититься и можно в деталях увидеть у кого есть оружие у кого нет. Может часть бандитов притворится заложниками.
Jamato
А нет фото роутера? Или оно просто засветит всё?
Astrei
Ну да, примерно вот так получается: