Наверное сложно поверить, что этот косный электротехнический компонент как фоторезистор может в какой-то мере заменить дорогущие цифровые санкционные навигационные приемники. Но это в самом деле так.

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

Таким образом фазы солнечного освещения естественным образом кодируют положения наблюдателя на земной сфере. Например, за северным полярным кругом (на широтах выше 66.5 градусов) световой день это полгода как и световая ночь.
Также нам очень повезло, что в нашей солнечной системе существует всего одно Солнце, а не два, три или четыре. В связи с этим световые лучи падают на Землю параллельно, что существенно упрощает вычисления.
Причем на самой Земле человечеству до сих пор так и не удалось создать источников света, которые светят однородно широко и параллельно.
Учитывая эти обстоятельства можно назначить Солнцу настоящую работу, чтобы оно не просто так впустую светило каждый день, a еще и делало что-то по-настоящему полезное для общества.
Итак план таков. Если взять микроконтроллер, к ADC пину микроконтроллера подключить через делитель напряжения фоторезистор (или датчик света по I2C), потом целый день непрерывно записывать на SD карту показания солнечной освещенности вкупе с временными отметками из часов реального времени RTC, то спустя 24 часа можно оценить или даже вычислить широту (длительность светового дня) и долготу (фаза светового дня). То есть можно вычислить свои географические координаты!
Надо лишь накропать вот такой остроумный гаджет

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

Таким образом устройство-логер превратиться в навигационный приемник, который раз в 24 часа выдает навигационную координату!
Тут прежде чем двигаться дальше надо договориться о некоторой терминологии.
Терминология
Склонение Солнца-Угол между земной осью и отрезком, соединяющий Землю и Солнце. Зависит только от времени-даты. Меняется с периодом в год. Допустимые значения от -23,5....23,5 градусов
Местное солнечное время-время, определяемое в месте нахождения наблюдателя видимым положением Солнца на небесной сфере (например, истинный полдень в некоторой точке Земли наступает в момент верхней кульминации Солнца);
Теория
Как вычислить долготу?
Надо найти момент времени максимальной освещенности. Однако это не всегда удобно из-за облаков. Можно вычислить время восхода и время заката. Из времени заката вычесть время восхода, поделить на 2 и прибавить это число к времени восхода. Так мы получим время полудня для данной долготы. Если время полудня совпало с 12:00 на UTC+0 то это значит, что мы на нулевом меридиане. За 1 час Солнце в кульминации заметает 15 градусов долготы на глобусе.
С долготой всё просто: даешь время кульминации Солна, получаешь долготу.
Как вычислить широту?
Тут поинтереснее. Надо вспомнить школьную тригонометрию.

Существует формула которая вычисляет продолжительность светового дня по широте и солнечному склонению.

вывод этой формулы можно посмотреть тут https://pandia.ru/text/77/376/23564.php
Получается, даешь широту, солнечное склонение, получаешь продолжительность светового дня.
Как вычислить солнечное склонение?
Солнечное склонение меняется с периодом в один год от 23,45 градусов (22 июня )до -23,45 градусов (22 декабря).

Солнечное склонение это просто гладкая непрерывная периодическая функция от даты из календаря.

где n – порядковый номер дня в году, начиная от 1-го января
Практическая часть
Детали реализации солнечного навигатора
Я решил собрать свой солнечный навигатор из того, что было на балконе.
№ |
Компонент |
1 |
отладочная плата NUCLEO-F401RE с микроконтроллером STM32F401RE на борту |
2 |
модуль I2C часов реального времени DS3231 |
3 |
карта памяти SD micro 128MByte c SPI интерфейсом |
4 |
какой-то Фоторезистор 125kOm (свет) 2MOm(тьма) |
5 |
3х пиновые Wago зажимы |
6 |
кабель USB A-USB(mini) для подключения к PC или PowerBank |
7 |
PowerBank |
8 |
перемычки вилка-гнездо |
9 |
Оргстекло 3мм в качестве основы прототипа |
10 |
Пластиковые стойки с болтами и гайками |
11 |
модуль I2C датчика освещения на основе ASIC BH1750 |
12 |
двусторонний скотч |
Нашел отладочную плату, фоторезистор, модуль с часами реального времени и собрал прототип. Даже паять ничего не пришлось, только на 100W(ном) лазерном резаке основание пришлось вырезать из оргстекла, чтобы закрепить отладочные платы. Внешний вид прототипа такой

У попавшегося фоторезистора во время восхода проводимость равна 1.474320....1.503056 MSimens. Время восхода для своего региона я взял с астрономических сайтов. Откалибровав получил такие значения водораздела.
Восход |
Закат |
1.462417, 04:02:27 24/5/2023 |
1.604962, 20:50:15 24/5/2023 |
1.460938, 04:02:47 24/5/2023 |
1.596703, 20:50:35 24/5/2023 |
1.474320, 04:03:07 24/5/2023 |
1.588496, 20:51:15 24/5/2023 |
1.495430, 04:03:27 24/5/2023 |
1.573853, 20:51:35 24/5/2023 |
1.503056, 04:03:47 24/5/2023 |
1.567398, 20:51:55 24/5/2023 |
1.532468, 04:04:07 24/5/2023 |
1.554585, 20:52:15 24/5/2023 |
продолжительность светового дня получилась 20:51:55 - 04:03:07=16:48:48. Калькулятор времени тут https://allcalc.ru/node/2277. По формуле такая продолжительность светового дня соответствует широте 56.5 градусов северной широты. Признаться это больше чем на самом деле. Видимо тот сайт указывал время восхода/заката учитывая рефракцию атмосферы, а формула которую я применяю рефракцию не учитывает.

Точное время для инициализации часов можно взять отсюда https://timeskaner.ru/utc.html. Лучше сразу прописывать в устройство время по Гринвичу UTC+0, прямо как в GNSS приемниках.
При подключении по SPI SD карта почему-то распознается только, когда Allocation Unit size настроен на 2048 байт. Данные на SD карту лучше писать в формате электронных таблиц в *.csv файл. Тогда их можно будет сразу импортировать и просматривать прямо в docs.google.com/spreadsheets.
Навигационное устройство можно сделать сверхлегким и сверх минималистичным. По сути надо только микроконтроллер, RTC, Light Sensor и опционально Flash-память.
Достоинства навигации по фазам солнечного освещения
1--это дешево. Всего три компонента: фоторезистор, часы реального времени, SD-карточка, микроконтроллер.
2--простота реализации оборудования.
3--малые габариты оборудования
4--малая масса оборудования
5--радио электронная борьба для GNSS не работают в этом случае. Никто не может выключить Солнце.
6--можно уточнять координату каждый день.
Недостатки навигации по фото-резистору
1--устройство надо калибровать. Надо указать явно какое сопротивление фоторезистора соответствует рассвету и закату.
2--Долго выдает навигационное решение. Долго ждать одного измерения 24 часа. Это подойдет в основном для стационарных предметов на открытом воздухе, метеостанции, контейнеры, вагоны.
3--устройство желательно должно быть неподвижным целый день.
4--Низкая точность. +/- 220 км. Особенно по широте большая ошибка 80-120 км. Зависит от погоды.
Неприятности навигации по фазам освещения
1--Сопротивление фоторезистора зависит не только от освещенности, но и ещё от температуры. Утром фоторезистор холодный, вечером - теплый. Поэтому и значения при той же освещенности разные. Вечером у фоторезистора при той же, что и утром освещенности сопротивление больше. Нужен не просто фоторезистор, а полноценный прецизионный датчик освещенности с термо компенсацией, например BH1750. Вот на этом графике показано сравнение фоторезистора и ASIC датчика освещения BH1750.

заметьте что проводимость фоторезистора пропорциональна логарифму от освещения, а не просто от освещения.
2--В пасмурные дни (типа 2 июня 2023) продолжительность светового дня вычисляется меньше чем есть на самом деле.
Возможные приложения навигации по фазам освещения:
1--Навигация по фоторезистору может быть полезна для вспомогательного отслеживания перемещения крупногабаритных товаров, которые в основном подолгу хранятся на открытом воздухе, таких как контейнеры, вагоны, корабли.
2--Также каждая метеостанция может вычислять свои координаты по датчику освещения. В условиях отключения GPS навигация по освещению окажется одним из решений.
3--Способ навигации по фазам солнца поможет примерно ориентироваться для марсоходов и луноходов.
4--Так как оборудование минимально (всего три компонента), то можно отслеживать перемещение диких животных (птиц).
5--Как по мне, самое адекватное применение этой темы это встроить фоторезистор в наручные часы и часы сами, лежа на подоконнике определят свой часовой пояс и переключатся на местное время.
6--Можно встроить датчик освещения в портативные радиостанции для передачи примерного местонахождения в транкинговой сети.
Шоурум графиков фаз освещения
Был очень яркий день. Облаков не было. Там не менее появились 2 непонятных проседания. Вероятно это Солнце зашло за многоэтажки.

Тут видно, что нагревание фоторезистора влияет на его сопротивление

Продолжительность дня: 17h 09m, Восход 00:52, кульминация 09:27, закат 18:02, 01/6/2023 максимальная освещенность 08:55:16

а это пасмурный день с грозой и молниями 2 июня 2023

Что с точностью измерения координат?
Мой прототип такого навигатора, установленный на балконе, показывает ошибку по широте 80км и ошибку по долготе 58,2 км...120км. Причем долгота определяется на порядок точнее чем широта. Но тут надо сразу отметить, что я пока еще ничего не начинал делать для увеличения точности. Пополнять лог результатов буду в этом реестре
https://docs.google.com/spreadsheets/d/1q1Q4BvpVELhuVvXNgQFRqmsdtKTIxMgbEzHBmkHPNc0/edit#gid=0
Как можно попробовать увеличить точность?
1--Использовать более точные формулы вычисления солнечного склонения, учитывать прецессию Земли.
3--Использовать несколько датчиков освещения для исключения бликов.
4--Использовать более точные часы. Например атомные часы.
5--автоматически определять направление тени от вертикального стержня и таким образом точнее определить долготу.
6--Установить солнечный навигатор выше. На крышу здания. Так как в формуле высота не фигурирует, зато график освещения будет более гладким, как следствие эксперимент чистым.
7--найти или вывести формулы продолжительности светового дня, для конкретной широты которые учитывают рефракцию атмосферы.
Выводы
Навигация по фазам освещения это вполне доступный вариант оценочной навигации. Первая точность -/+ регион. Можно по крайней мере автоматически определить свой часовой пояс.
Также появляются очень подозрительные всплески и проседания освещения во время дня. Может это связано с бликами от окон многоэтажек. Наверное лучше считывать данные освещения сразу с двух датчиков освещения.
При этом фоторезистор это очень плохой вариант для датчика освещения так как показания фоторезистора еще зависят и от температуры.
На точность вычисления широты сильно влияет точность измерения продолжительности светового дня.
Надо калибровать датчик освещения. Надо понимать какое показание светимости соответствует водоразделу ночь/день и день/ночь
Тема навигации по датчику освещения также может быть вариантом, например, для школьных кружков робототехники в качестве реальной учебной задачки. Всё оборудование доступно и дешево. При этом разработка такого прибора затрагивает много аспектов программирования: тестирование кода, делитель напряжения, триггер Шмитта, файловая система (например FatFs), шина I2C, часы реального времени, немного реальной тригонометрии, часовая арифметика, ряды Фурье, сбор логов, метрология и даже астрономия! При этом написанные и протестированные программные компоненты можно потом пере использовать в других проектах.
Это не просто датчик света. Это разговор с самой природой.
В общем эта тема позволила мне стать немножко более просвещённым.
Ссылки
https://timewek.ru/citysun.php
https://math.d3.ru/formula-dnia-i-nochi-2079568/?sorting=rating
https://ru.wikipedia.org/wiki/Долгота_дня
https://www.hmn.ru/index.php?index=41&value=1
https://pandia.ru/text/77/376/23564.php
https://www.youtube.com/watch?v=ZPUYBsI7Pp0
https://лунник.рф/восход-заход-солнца
https://www.hmn.ru/index.php?index=41&value=1
https://poznayka.org/s78818t1.html
Словарь
Акроним |
Расшифровка |
csv |
Comma-Separated Values |
RTC |
Real Time Clock |
GPS |
Global Positioning System |
UTC |
Coordinated Universal Time |
GNSS |
Global Navigation Satellite System |
ADC |
analog-to-digital converter |
SD |
Secure Digital |
I2C |
Inter-Integrated Circuit |
FAT |
File Allocation Table |
FS |
File system |
Автор:
aabzel