![](https://habrastorage.org/files/ca8/256/56c/ca825656c192477eadd9274c6dc04a2d.jpg)
Рассказ о попытках увидеть окружающий мир в совершенно ином свете и как это в итоге привело к созданию устройства, позволяющего «видеть» WiFi. В процессе будет использован популярный модуль ESP8266. Без Arduino, к сожалению, тоже не обойдется.
N-лет назад, группой молодых исследователей из Германии был описан концепт тепловизора, базирующийся всего-навсего на одном датчике. Суть работы устройства сводилась к следующему: с помощью конструкции из двух сервоприводов ИК-датчик последовательно наводился по вертикали и горизонтали на нужную область, постепенно сканируя изображение. Такое интересное решение позволяло резко сократить цену устройства, и получать занятные картинки распределения температуры, вроде этих:
![](https://habrastorage.org/files/2b6/3ac/755/2b63ac75524e4faeaa71d6a03b153ffd.gif)
Система механической развертки изображения — а именно этим конструкция из сервоприводов и является, оказалась крайне интересной вещью. Сразу же после постройки подобного устройства возникает вопрос — а почему бы не заменить ИК-датчик чем либо еще, что позволит используя тот же принцип, визуализировать например радиоволны?
Глаз человека, хоть и довольно сложный, но весьма ограниченный инструмент. Диапазон видимого нами света представляет собой ну очень маленькую часть спектра электромагнитного излучения.
![](https://habrastorage.org/files/69b/d24/fc9/69bd24fc9014471f8261476800c48393.jpg)
Оцените масштаб трагедии — большая часть информации об окружающем мире, просто-напросто скрыта от нас. Разумеется, было бы очень здорово расширить природные рамки и обрести способность видеть за пределами, очерченными природой. Потому и и были осуществлены нижеприведенные эксперименты с использованием системы механической развертки.
Для отработки технологии я сделал простую «однопиксельную» камеру, которая работает в уже привычном нам видимом диапазоне. В качестве датчика использовал солнечную батарею от китайской игрушечной машинки:
![](https://habrastorage.org/files/c00/308/440/c00308440ccc4a38a7a3d1d75242df45.jpg)
Конечно, площадь такого фотоэлемента очень большая, а значит надо как-то обеспечить узкое поле зрения, потому добавим к ней линзу от фонарика. Поставим на сервоприводы и подключим к Arduino.
![](https://habrastorage.org/files/3c9/b1c/57c/3c9b1c57cdbb4179a68db3c34ea3e841.jpg)
Солнечная батарея поворачивается к необходимому участку будущего изображения, после чего контроллер считывает сигнал, который пропорционален количеству света, падающего на батарею. Конечно такая камера в итоге выдаст черно-белое изображение.
Чтобы обрабатывать результаты сканирования, с помощью QT была реализована программка с простеньким интерфейсом. (Уроки по тому, как реализовать общение Arduino и Qt можно легко раздобыть на youtube). Программа состоит из пары кнопок для ручного управления сервоприводами и поля QGraphicsScene, где рисуются квадратики-пиксели, цвет которых зависит от величины сигнала в конкретной точке. Использование простое — сначала вручную приводы наводятся в левую верхнюю точку будущего изображения, после чего производится автоматическое сканирование области, во время которого строится картинка. Вот что из всего этого получилось в итоге:
![](https://habrastorage.org/files/493/a25/5f3/493a255f374f439fbbd6f865d9a2ac02.jpg)
Что-же изображено на данной визуализации? Конечно, это самый очевидный объект для съемки в случае, если ваша камера представляет собой солнечную батарею — это солнце.
Тем не менее, сигнал с батареи слишком слабенький, чтобы получать адекватные картинки при комнатном освещении, потому она была заменена на фоторезистор, а линза от фонарика уступила место половинке сломанного театрального бинокля.
![](https://habrastorage.org/files/a6b/680/417/a6b680417a6347d7a95ca8e3af23f370.jpg)
![](https://habrastorage.org/files/62b/8c6/b07/62b8c6b073e64fd88417b2a0cc3b667a.jpg)
Это творение оказалось более удачным, и уже появилась возможность делать более-менее узнаваемые фотографии:
Люстра
![](https://habrastorage.org/files/3ed/a70/796/3eda7079642044c08f4c4660df7a2d20.jpg)
Машина на дороге
![](https://habrastorage.org/files/58f/df4/483/58fdf44832be41a489363f0b980e84e6.jpg)
Вид из окна
![](https://habrastorage.org/files/d27/027/9ff/d270279ff97b44259b0675db5fc82521.jpg)
И даже облака на небе
![](https://habrastorage.org/files/7c0/c57/97f/7c0c5797fc80420299e53b22e8fa02eb.gif)
Удовлетворившись таким результатом, я решил, что пора наконец сделать полноценный радиовизор, заменив фоторезистор на направленную антенну. Самый подходящий диапазон для этого — это СВЧ, так как направленная антенна не занимает много места, да и в нашей жизни сегодня есть много устройств, заботливо излучающих в этом диапазоне.
Сначала задумал использовать рупорную антенну, которая есть в автомобильных радар-детекторах (они как правило работают в диапазоне 10,525 Ггц или 24,15 Ггц). Попытки вычленить из схемы такого детектора аналоговый сигнал, пропорциональный величине регистрируемого излучения не увенчались успехом, возможно из-за недостатка моих познаний, а возможно потому что такового там нет вовсе, так как он работает по принципу сравнения. (привет китайским братьям, собравшим это чудо). Хотелось конечно вытащить саму антенну и соорудить что-то свое, но ломать хороший прибор ради этого я не стал.
Второе, что пришло мне в голову — соорудить детектор поля по одной из схем, которые в изобилии водятся на радиолюбительских порталах и прицепить к нему самодельную направленную антенну, например очень популярный и довольно простой в изготовлении биквадрат Харченко. Но как оказалось, самый главный элемент — детекторный СВЧ-диод очень трудно найти, легко потерять и вообще он стоит дороговато, потому пришлось долго и упорно искать нужную детальку.
Через какое-то время, мне удалось раздобыть германиевый детекторный диод еще советских времен и собрать следующую схему:
![](https://habrastorage.org/files/938/cc7/d9c/938cc7d9c7f541738e97e24b7c82bd25.jpg)
Полученное устройство уверенно работало, но на очень маленьком расстоянии, где-то 5-10 см от мобильного телефона, выступающего в роли источника излучения. Этого разумеется было недостаточно для поставленной задачи.
После всех этих мытарств, в итоге ко мне попал модуль ESP8266, который умеет отображать RSSI (Показатель уровня принимаемого WiFi сигнала) найденных точек доступа. Для этого используется команда AT+CWLAP в стандартной прошивке модуля. Я решил применить эту функцию вкупе с самодельной направленной WiFi антенной-биквадратом, упомянутой ранее. Таким образом и появилось сие чудо техники:
![](https://habrastorage.org/files/5e6/608/d66/5e6608d66dff4b60bb256fdbe9ed6ddb.jpg)
![](https://habrastorage.org/files/193/2df/f2a/1932dff2a29247f682269bd2ddfa769b.jpg)
Сам ESP8266 закреплен на обратной стороне антенны и хорошенько экранирован медными листами. Светящиеся циферки показывают напряжение на выходе импульсного DC-DC преобразователя, который понижает 12В от блока питания до 3.3В, необходимых для работы модуля (он очень прожорливый, поэтому запитывать его от Arduino чревато нестабильной работой).
Arduino как и раньше управляет сервоприводами и кроме того посылает AT команды ESP8266 с применением библиотеки SoftwareSerial. Один из сложных моментов — вместо стандартных библиотек SoftwareSerial и Servo пришлось перейти на их аналоги, так как оригинальные конфликтуют при одновременном использовании.
Конечно, можно услышать упреки, что Arduino здесь вовсе является лишним элементом, так как ESP8266 и сам может справиться с таким функционалом. Но так уж исторически сложилось, что по ходу создания устройства я изначально ориентировался на Arduino как центральное звено итогового устройства, а ESP8266 играет роль своеобразного датчика.
Программа на QT, написанная еще для «солнечной камеры» подверглась значительной доработке.
![](https://habrastorage.org/files/193/444/1da/1934441da66842f8b728bb6d22fcf1cc.jpg)
По ходу сканирования области для каждой найденной точки доступа создается свой массив значений сигнала, что позволяет при завершении сканирования посмотреть как «светят» разные WiFi роутеры, и даже попробовать прикинуть их примерное месторасположение. Чем сильнее сигнал в конкретной точке, тем более яркий синий цвет будет у соответствующего пикселя.
Ну и наконец, поставив устройство в разные части своего жилища, я получил следующие изображения. К счастью в моем доме довольно много сетей wifi, а с подобной направленной антенной можно поймать даже весьма удаленные.
![](https://habrastorage.org/files/8a5/445/7f7/8a54457f77c246b289f1376f8a4add41.gif)
Диван и часть ковра. Если обратите внимание, очень качественное изображение по сравнению с остальными получается у точки «SkyNet» — это мой домашний роутер. Он находится ближе всех к месту съемок, что видимо играет не последнюю роль в процессе.
![](https://habrastorage.org/files/0da/39e/051/0da39e0513f54dbaa7e6c35c6508baec.gif)
Снова люстра. Сигналы некоторых сетей не отражаются от потолка, либо от люстры. Скорей всего по этим признакам можно попытаться определить физическое расположение передатчика.
![](https://habrastorage.org/files/6e6/adf/0f8/6e6adf0f85984c8097da5bbb18049ee3.gif)
Ванна, наполненная водой. Как всем известно, радиоволны под водой передаются плохо.
Стоит отметить, что фото в видимом диапазоне лишь примерно соответствуют отсканированной области. Также необходимо учесть, что при работе антенна как-бы описывает полусферу, а это тоже влияет на результат. Разрешение в принципе ограничено только ходом антенны и временем, которое нужно чтобы обвести всю область. При этом получение данных для каждого пикселя требует 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
Ну да, примерно вот так получается:
![](https://habrastorage.org/files/0bc/ae9/51f/0bcae951f85b49d0bb8de3efa161b981.jpg)