Как стать автором
Обновить

Фоторезистор = Навигатор

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров13K

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

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

Таким образом фазы солнечного освещения естественным образом кодируют положения наблюдателя на земной сфере. Например, за северным полярным кругом (на широтах выше 66.5 градусов) световой день это полгода как и световая ночь.

В количественных величинах на 10 июня это такие продолжительности светового дня для разных широт

продолжительность светового дня для разных широт
продолжительность светового дня для разных широт

Также нам очень повезло, что в нашей солнечной системе существует всего одно Солнце, а не два, три или четыре. В связи с этим световые лучи падают на Землю параллельно, что существенно упрощает вычисления. Это вторая хорошая новость.

Причем на самой Земле человечеству до сих пор так и не удалось создать источников света, которые светят однородно широко и параллельно.

Учитывая эти обстоятельства можно назначить Солнцу настоящую работу, чтобы оно не просто так впустую светило каждый день, a ещё и делало хоть что-то реально полезное для общества.

Каков план?

Итак план таков... Если взять микроконтроллер, к ADC пину микроконтроллера подключить через делитель напряжения фоторезистор (или датчик света по интерфейсц I2C), потом целый день непрерывно записывать на SD карту показания солнечной освещенности вкупе с временными отметками из часов реального времени RTC, то спустя 24 часа можно оценить или даже вычислить широту (длительность светового дня) и долготу (фаза светового дня). То есть можно вычислить свои географические координаты!

Надо лишь накропать вот такой остроумный гаджет

Блок-схема солнечного навигатора
Блок-схема солнечного навигатора

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

этой инфы должно быть достаточно чтобы однозначно сказать где записан лог
этой инфы должно быть достаточно чтобы однозначно сказать где записан лог

Таким образом устройство-логер превратиться в навигационный приемник, который раз в 24 часа выдает навигационную координату!

Тут прежде чем двигаться дальше надо договориться о некоторой терминологии.

1. Терминология

В астрономии как нигде за сотни лет развития науки сформировалась очень красивая и чёткая система определений. Чтобы определить одно понятие надо определить ряд других понятий. И такое дерево из вложенных определений может достигать высоты 10 и более. Нам понадобятся вот эти определения.

1--Склонение Солнца (СС)- угол между Земной осью и отрезком, соединяющий Землю и Солнце. Или это угол между лучами Солнца и плоскостью Земного экватора. Солнечное склонение зависит только от положения Земли в плоскости орбиты. То есть времени и даты в календаре. СС меняется с периодом в год. Допустимые значения от -23.5 до 23.5 градусов. В каждый отдельный момент времени Солнечное склонение одинаково для всех обитателей Земли на всех континентах.

2--Местное Солнечное Время - время, определяемое в месте нахождения наблюдателя видимым положением Солнца на небесной сфере (например, истинный полдень в некоторой точке Земли наступает в момент верхней кульминации Солнца);

3--Часовой Угол Солнца (t) - это двугранный угол между плоскостью меридиана (содержащей ось Земли и зенит) и часовым кругом содержащим ось Земли и Солнце. Меняется то 180 ( к западу от плоскости меридиана) до -180 (к востоку от плоскости меридиана) градусов. Меняется от отрицательного к положительному. В солнечный полдень часовой угол равен нулю градусов. В сущности, солнечные часы как раз и показывают часовой угол солнца.

4--Двугранный Угол - это угол между двумя пересекающимися плоскостями или полуплоскостями.

5--Часовой Круг (Солнца)- это большой круг, проходящий через Солнце и два небесных полюса.

6--Большой Круг - это круговое пересечение сферы и плоскости , проходящей через центральную точку сферы.

7--Зенитный Угол Солнца (z)- угол между солнечными лучами и вертикальным направлением. В любом заданном месте в любой заданный день зенитный угол солнца, достигает своего минимума, в местный солнечный полдень, когда часовой угол солнца равен нулю. И в любом заданном месте в любой заданный день зенитный угол солнца, достигает своего максимума, в полночь по местному времени, когда часовой угол солнца -180 градусов. Закат и восход Солнца происходят (приблизительно), когда зенитный угол Солнца равен 90 градусов.

8--Горизонтальный параллакс - это угол, под которым со светила виден радиус Земли, перпендикулярный лучу зрения. Очевидно, что чем дальше расположено светило, те меньше его горизонтальный параллакс. Для Солнца это всего лишь 8.794" угловых секунд.

9--Высота светила (h)— угол между направлением на центр светила и плоскостью истинного горизонта. Отсчитывается в обе стороны от горизонта от 0 до 90° со знаком (+), если светило над горизонтом, и (-), если оно под горизонтом. h=90-z

10--Угловой Радиус Светила (R) - половина от углового размера. Для Солнца 16' угловых минут.

11--Угловой размер (диаметр) (иногда также угол зрения) — это угол между прямыми линиями, соединяющими диаметрально противоположные крайние точки измеряемого (наблюдаемого) объекта и глаз наблюдателя. Для Солнца 31'—32' угловые минуты.

Есть даже шутка, что в астрономии все - это угол. Кстати, в астрономии четко со временем. Если Вас спросят: "Что же такое время?", то можно смело ответить, что это часовой угол Солнца (LHA).

2. Теория

Как вычислить долготу (longitude)?
Тут я вижу как минимум три способа:

1--Зарегистрировать время максимальной освещенности

Надо найти момент времени максимальной естественной солнечной освещенности. Однако это не всегда удобно из-за облаков. Плюс желательно установить датчик освещения на крыше.

2--Вычислить среднее арифметическое между временим восхода и временем заката

Можно вычислить время восхода и время заката. Из времени заката вычесть время восхода, поделить на 2 и прибавить это число к времени восхода. Так мы получим время полудня для данной долготы.

3--Определить фазу первой гармоники в разложении сигнала освещенности в ряд Фурье

Надо взять измерения за 24 часа начиная с полночи по Гринвичу. Вычислить дискретное преобразование Фурье и проанализировать первую гармонику в разложении Фурье. По сути аргумент комплексного числа и будет линейным образом преобразовываться в долготу.

Подробнее про математику скрытую за методом DFT можно почитать тут https://habr.com/ru/articles/748334/

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

Надо околпачить датчик освещенности! В качестве колпака подойдет оболочка от 5Watt(ной) LED лампочки, купленной в ближайшем хозяйственном магазине.

Отделение светорассеивающего колпачка от LED лампы при помощи гравировальной машинки и алмазного режущего диска
Отделение светорассеивающего колпачка от LED лампы при помощи гравировальной машинки и алмазного режущего диска

Получается что если время полудня совпало с 12:00 на UTC+0 то это значит, что мы находимся где-то на нулевом меридиане. За 1 час Солнце в кульминации заметает 15 градусов долготы на глобусе. Один градус долготы Солнце заметает за 4 минуты. С долготой всё просто: даешь время кульминации Солнца, получаешь долготу.

 {Local^{Noon}}[s]={UTC_{+0}^{Noon}[s]}-longitude[Deg]*240[s]  \;\;\;\;\;\;\;\;\;\;\;\;(1)

Из (1), зная время кульминации Солнца линейно выражается сама долгота (longitude)

 longitude[Deg]=\frac{UTC_{+0}^{Noon}[s]-Local^{Noon}[s]}{240[s]} \;\;\;\;\;\;\;   (2)

Как вычислить широту?

Тут поинтереснее. Надо вспомнить школьную тригонометрию.

иллюстрация к выводу формулы вычисления длительности светового дня
иллюстрация к выводу формулы вычисления длительности светового дня

Существует упрощенная формула, которая вычисляет продолжительность светового дня по широте и солнечному склонению. Arccos вычисляется в радианах; если аргумент arccos меньше −1 — это полярный день, если больше 1 — полярная ночь. Результат не учитывает размера диска солнца и рефракцию.

D=\frac{24}{\pi }  arccos(-tan(\phi )tan(\delta) ) \qquad  \qquad  \qquad (1)

Тут

переменная

Назначение

единицы измерения

phi

широта наблюдателя

радианы

дельта

склонение солнца в момент вычисления

радианы

t

местный часовой угол солнца

радианы

D

долгота дня

часы

Вывод формулы (1) можно посмотреть тут https://pandia.ru/text/77/376/23564.php
Получается, даешь широту, солнечное склонение, получаешь продолжительность светового дня.

На графике функции зависимости долготы дня от широты (1) видно, что производная по широте не постоянная вдоль широт. Это значит, что, если вы ходит измерить широту с точностью 1 градус, то требования к точности измерения продолжительности светового дня выше на экваторе и ниже у полюсов. То есть в северных широтах измерить широту будет проще. Это особенно ярко выражено в недели с большим солнечным склонением в декабре и июне. Это хорошая новость для обитателей приполярных широт.

Для вычисления требуемой точности следует вычислить дифференциал от формулы (1). Получается функция (1.1). Тут Phi задается в градусах.

d D= \frac{\frac{2}{15} tan\ (\delta_{rad}) \ sec^{2}(\frac{\pi}{180}\varphi)])}{\sqrt{1-tan^{2} \ (\delta_{rad})  \ tan^{2}(\frac{\pi}{180}\varphi )   }} d\varphi   \qquad \qquad \qquad \qquad (1.2)

По формуле (1.2) можно посчитать, что для Москвы (phi=55.7522 deg), когда солнечное склонение 21,1 градус, чтобы вычислить широту с точностью 1 градус надо вычислить долготу дня с точностью +- 5,7 минут.

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

Однако нам же интерес представляет именно широта. Поэтому надо выразить из формулы (1) широту. Получается формула (1.3)

\varphi  = artan(-cos \frac{\pi D}{24} ctg\ \delta ) \qquad\qquad\qquad(1.3)

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

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

double calc_latitude_fast(double day_length_duration_h, 
                          double sun_declination_deg) {
    double latitude_deg = 0.0;
    double latitude_rad = 0.0;
    double sun_declination_rad = 0.0;
    LOG_INFO(PLANETARIUM, "CalcLat:DayDur:%f H,SunDec:%f Deg", 
             day_length_duration_h, sun_declination_deg);
    if(0.0 < day_length_duration_h) {
        bool res = is_double_equal_absolute(0.0, sun_declination_deg, 0.001);
        if(false == res) {
            sun_declination_rad = DEG_2_RAD(sun_declination_deg);
            double atan_arg = -(   (cos(M_PI * day_length_duration_h )/24.0) /
                                   tan(sun_declination_rad)    );
            latitude_rad = atan(atan_arg);
            latitude_deg = RAD_2_DEG(latitude_rad);
            LOG_INFO(PLANETARIUM, "Latitude %f Deg", latitude_deg);
        }
    }
    return latitude_deg;
}

Также дважды в год в дни равноденствия, когда солнечное склонение равно нулю, то знаменатель (1.1) обращается в ноль. Каков у этого физический смысл? В эти дни надо отбросить в сторону формулу (1.1) и выполнять численное решение формулы (1). Оно простое и равно 12 часов для всех широт. Поэтому, к сожалению, в дни равноденствия (22–23 сентября) и весеннего (20–21 марта) мы ничего не можем сказать про свою широту. Увы. Это своего рода плата за циничное использование Солнца в качестве навигатора.

Одновременно с этим склонение Солнца достигает своего максимального значения в дважды в год в дни солнцестояния. Поэтому 21 или 22 декабря и 21 или 22 июня солнечный навигатор будет показывать самые точные значения широты.

Для оценки точности вычисления широты при известной точности измерения продолжительности светового дня выводится формула (1.4).

d \phi(D) = \frac{\frac{\pi D}{24}ctg(  \delta) sin(\frac{\pi D}{24})}{[ctg(\delta) \ cos(\frac{\pi D}{24}]^{2}+1} dD \qquad \qquad \qquad \qquad (1.4)

Это график функции (1.3) и её производной (1.4)

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

Формула долготы дня, учитывающая рефракцию земной атмосферы

В советских учебниках по астрономии также есть формула (1.59), которая учитывает рефракцию земной атмосферы. Это уравнение восхода и захода небесного светила. Вывод формулы (1.59) я не нашел. Придется проверять её натурными экспериментами.

cos(t) = \frac{cos(  90^{\circ} + \rho +R - p)-sin(\phi)  sin(\delta) }{cos(\phi)  cos(\delta)}  \qquad  \qquad  \qquad (1.59)

тут

переменная

назначение

единицы
измерения

для Солнца

ро

Рефрация в горизонте. Зависит от высоты.

угловые минуты

35' у поверхности земли

R

Угловой радиус светила

угловые минуты

16'

p

горизонтальный параллакс светила

угловые секунды

8.794"

учитываю формулу косинуса суммы

\\ cos(\alpha +\beta ) =cos(\alpha)cos(\beta) -sin(\alpha)sin(\beta) \qquad  \qquad  \qquad  \qquad \qquad (2) \\ cos(90^{\circ} + \rho +R - p ) =cos(90^{\circ})cos(\rho +R - p ) -sin(90^{\circ})sin(\rho +R - p ) \qquad (3) \\  cos(90^{\circ} + \rho +R - p ) =0 * cos(\rho +R - p ) -1*sin(\rho +R - p ) \qquad \qquad (4) \\  cos(90^{\circ} + \rho +R - p ) = -sin(\rho +R - p ) \qquad \qquad\qquad\qquad\qquad\qquad (5) \\

Для Солнца формула (1.59) вырождается в (1.61). Тут суточный горизонтальный параллакс не учитывается.

cos(t) = \frac{-sin( {51}')-sin(\phi)  sin(\delta) }{cos(\phi)  cos(\delta)}  \qquad  \qquad  \qquad (1.61)

К слову, sin(51')=0.01483475447. Графическое решение уравнения восхода и заката Солнца

Графическое решение уравнения восхода и заката Солнца
Графическое решение уравнения восхода и заката Солнца

Из формулы (1.61) можно выразить формулу (6) для продолжительности светового дня для данной широты и даты из календаря, выраженную в радианах часового угла.

 {Day_{Duaration}^{rad}} = 2 \ acos( \frac{-sin \ {51}'-sin \ \phi   \ sin \ \delta }{cos \ \phi \  cos \ \delta} ) \qquad  \qquad  \qquad (6)

Однако мы то знаем, что Земля делает один оборот за 24 часа. Получается скорость движения часового угла солнца составляет 15 градусов (pi/12 радиан) в час. Нам людям проще измерять время в часах, а не часовых углах солнца. Поэтому надо преобразовать часовые углы в привычные нам часы. Это делается по этой формуле (7)

 {Day_{Duaration}^{hour}} = \frac{2}{\pi/12} \ acos( \frac{-sin \ {51}'-sin \ \phi   \ sin \ \delta }{cos \ \phi \  cos \ \delta} ) \qquad  \qquad  \qquad (7)   \\  {Day_{Duaration}^{hour}} = \frac{24}{\pi} \ acos( \frac{-sin \ {51}'-sin \ \phi   \ sin \ \delta }{cos \ \phi \  cos \ \delta} ) \qquad  \qquad  \qquad (8)

Графически формулу (8) можно представить в виде такого графика.

Величину продолжительности светового дня можно измерить фоторезистором.

 {Day_{Duaration}^{hour}}

Формулы (8) уже достаточно, для численного решения уравнения с целью найти широту (phi). Это монотонная функция. А монотонная функция - это просто подарок судьбы для численного решателя методом градиентного спуска.

Если сравнить вычисление продолжительности светового дня с учётом рефракции (8) и без учета рефракции (1), то результаты долготы дня отличаются от 7.2 до аж 50 минут!

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

Рефракцию надо однозначно учитывать.

Как вычислить солнечное склонение (дельта)?

Солнечное склонение меняется с периодом в один год от 23.45 градусов (22 июня )до -23.45 градусов (22 декабря).

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

склонение Солнца
склонение Солнца

где n – порядковый номер дня в году, начиная от 1-го января. Эта формула не учитывает прецессию земной оси. Однако прецессией Земной оси можно пока пренебречь.

Практическая часть
Я решил собрать свой солнечный навигатор из того, что было на балконе. Вот список деталей.

Компонент

1

отладочная плата NUCLEO-F401RE с микроконтроллером STM32F401RE на борту

2

модуль I2C часов реального времени DS3231

3

карта памяти SD micro 128MByte c SPI интерфейсом

4

какой-то фоторезистор

125 kOm ( 8 uSim ) (свет)

2MOm( 0.5uSim )(тьма)

5

3х пиновые Wago зажимы

6

кабель USB A-USB(mini) для подключения к PC или PowerBank(а)

7

PowerBank.

8

перемычки вилка-гнездо

9

Оргстекло 3мм в качестве основы прототипа

10

Пластиковые стойки с болтами и гайками

11

модуль I2C датчика освещения на основе ASIC BH1750

12

двусторонний скотч

Нашел отладочную электронную плату, советский фоторезистор, модуль с кварцевыми часами реального времени и собрал экспериментальный образец. Даже паять ничего не надо было, только чтобы закрепить отладочные платы пришлось из оргстекла вырезать основание 100W(ным) лазерным лучом. Внешний вид экспериментального образца получился такой

внешний вид экспериментального образца солнечного навигатора
внешний вид экспериментального образца солнечного навигатора

Или вот второй вариант на основе отладки Olimex-H407 и датчика освещения BH1750. Про датчик BH1750 можно почитать тут https://habr.com/ru/articles/739660/

В плате Olimex-H407 SD карта прямо к микроконтроллеру подключена по шине SDIO, поэтому появилось место для монохромного дисплея SSD1306. Про дисплей SSD1306 можно почитать тут https://habr.com/ru/articles/741164/

Солнечный навигатор на боевом дежурстве
Солнечный навигатор на боевом дежурстве

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

Способ №1: Триггер Шмитта

У фоторезистора во время восхода проводимость равна 1.474320....1.503056 uSimens. Время восхода для своего региона я взял с астрономических сайтов. Откалибровав получил такие значения водораздела.

Восход

Закат

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 градусов северной широты. Это больше, чем на самом деле. Видимо тот сайт указывал время восхода/заката учитывая рефракцию атмосферы, а упрощенная формула, которую я применяю рефракцию не учитывает.

Проводимость (в милиСименсах) фоторезистора от времени
Проводимость (в милиСименсах) фоторезистора от времени

Моменты времени восхода и заката можно определить не только триггером Шмитта по освещенности 100 люкс.

*Способ №2. Две Камеры Обскура

В моменты восхода или заката зенитный угол Солнца (z) равен 90 градусов. Факт того, что зенитный угол Солнца (z) равен 90 градусов можно зарегистрировать камерами Обскура со щелевым горизонтальным отверстием у которого на противоположной щели стенки массив из фоторезистов или ПЗС матрица. Вот только эти камеры обскура надо установить над крышей: одну повернутую на восток для регистрации времени восхода и вторую - на запад для регистрации времени заката.

Точное время для инициализации часов можно взять отсюда https://timeskaner.ru/utc.html. Лучше сразу прописывать в устройство время по Гринвичу UTC+0, прямо как в GNSS приемниках. Просто для определенности и простоты вычислений.

При подключении по SPI SD карта почему-то распознается только, когда Allocation Unit size настроен на 2048 байт. Данные на SD карту лучше писать в формате электронных таблиц в *.csv файл. Тогда их можно будет сразу импортировать и просматривать прямо в Google SpreadSheets docs.google.com/spreadsheets. Про то что такое CSV и как распознавать CSV формат можно почитать тут: Синтаксический разбор CSV строчек https://habr.com/ru/articles/765066/

Навигационное устройство можно сделать сверхлегким и сверх минималистичным. По сути надо только микроконтроллер, RTC, Light Sensor и опционально Flash-память.

Достоинства навигации по фазам солнечного освещения

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

  2. Это дешево. Всего три компонента: фоторезистор, часы реального времени, SD-карточка или SPI-Flash и микроконтроллер.

  3. Отсутствуют подвижные части. Это значит, что тут нечему изнашиваться и ломаться.

  4. Простота реализации оборудования.

  5. Малые габариты оборудования.

  6. Малая масса оборудования.

  7. Радио электронная борьба для GNSS не работают в этом случае. Никто не может выключить Солнце.

  8. Можно уточнять координату каждый день. Или 2 раза в день, если рассчитывать еще и по длительности ночи.

Недостатки навигации по фазам освещения

  1. Устройство надо калибровать. Надо указать явно какое сопротивление фоторезистора соответствует рассвету и закату.

  2. Долго выдает навигационное решение. Долго ждать одного измерения от 7 до 24 часа. Поэтому эта технология подойдет в основном для стационарных предметов на открытом воздухе: маяки, метеостанции, контейнеры, вагоны, автомобили.

  3. Устройство желательно должно быть неподвижным целый день.

  4. Низкая точность. +/- 220...262 км. Особенно по широте большая ошибка 80-120 км. Зависит от погоды, угла наклона датчика освещения.

  5. В дни равноденствия, когда солнечное склонение равно нулю продолжительность светового для равно 12 часов для всех широт. Поэтому к сожалению в дни равноденствия (22–23 сентября) и весеннего (20–21 марта) мы ничего не можем сказать про свою широту. Увы. Это своего рода плата за циничное использование Солнца в качестве навигатора.

  6. Очень трудно точно измерить истинную продолжительность светового дня. Для точности измерения широты в 1 градус нужна точность измерения светового дня вплоть до +\- полторы минуты. Изо дня в день для одного и того же места порог естественной освещенности для начала и конца продолжительности светового дня разный. Он буквально плавает в атмосфере. В пасмурные дни (как 2 июня 2023) продолжительность светового дня вычисляется меньше, чем есть на самом деле. Правдоподобные измерения широты это вопрос удачи.

Дата

Порог освещенности, Lx

Склонение
Cолнца, Deg

Расчётная продолжительность
светового дня, часов

12 Sep 2023

226

3.52

12.1

13 Sep 2023

236

3.12

12.08

19 Sep 2023

71

0.71

12.004

20 Sep 2023

105

0.3

12.0009

7--Сопротивление фоторезистора зависит не только от освещенности, но и ещё от температуры. Утром фоторезистор холодный, вечером - теплый. Поэтому и значения при той же освещенности разные. Вечером у нагретого фоторезистора при той же, что и утром освещенности сопротивление больше. Нужен не просто фоторезистор, а полноценный прецизионный датчик освещенности с термо компенсацией, например BH1750. Вот на этом графике показано сравнение фоторезистора и ASIC датчика освещения BH1750.

Заметьте, что проводимость фоторезистора пропорциональна десятичному логарифму от освещения, а не просто от освещения.

Возможные приложения навигации по фазам естественного освещения:

  1. Как по мне, самое адекватное применение этой технологии это встроить датчик света в наручные часы и часы сами, лежа на подоконнике ночью определят свой часовой пояс и переключатся на местное время.

  2. Можно встроить этот солнечный навигатор в спасательную шлюпку. И лодка сможет автоматически вычислять и транслировать свои примерные координаты по радио.

  3. Можно встроить датчик освещения в портативные радиостанции для вычисления передачи примерного местонахождения в транкинговой сети, например, по DTMF интерфейсу. Тогда базовая станция шаговым двигателем сможет наводить направленную антенну (параболическую или яги) в на тот азимут (bearing), где с большей вероятностью находится абонент. Тем самым можно получить более устойчивую радиосвязь.

  4. Также каждая метеостанция может вычислять свои координаты по датчику освещения. В условиях отключения GPS навигация по освещению окажется одним из решений.

  5. Навигация по фоторезистору может быть полезна для вспомогательного отслеживания перемещения крупногабаритных товаров, которые в основном подолгу хранятся на открытом воздухе, таких как контейнеры, вагоны, корабли (баржи, танкеры), самолеты, вертолеты.

  6. Способ навигации по фазам Солнца поможет примерно ориентироваться для марсоходов, луноходов, где отсутствуют спутниковые навигационные системы. На Марсе угол наклона оси на 1 градус больше 25.1919 градусов. Поэтому там эта технология будет работать особенно эффективнее.

  7. Так как оборудование минимально (всего три компонента), то можно собрать трекер и отслеживать перемещение диких животных (например птиц).

  8. Везде, где есть солнечные батареи можно применить эту технологию. Дом с солнечными батареями может оценивать свои координаты, и передавать гео данные в техподдержку.

  9. Тема навигации по датчику освещения также может быть вариантом, например, для школьных уроков астрономии или городских кружков робототехники в качестве реальной многогранной учебной задачки. Всё оборудование тут максимально доступно безвредно и дёшево. При этом разработка такого прибора затрагивает много аспектов программирования: тестирование кода, обновление прошивки загрузчиком с SD карты, делитель напряжения, триггер Шмитта, файловая система (например FatFs), шина I2C, часы точного времени, немного тригонометрии, часовая арифметика, ряды Фурье, комплексные числа, численные методы, сбор логов, база данных времен рассветов и закатов, метрология, анализ больших данных, красивые графики и даже астрономия!

    При этом написанные и протестированные таким образом программные компоненты (BootLoader/SD/FatFs/SchmittTrigger/MCAL/RTC/DFT/CSV) можно потом пере использовать в других проектах просто переписав конфиг.

5. Шоурум графиков фаз освещения

Как только Вы записали лог освещенности, то можно посмотреть, что получилось на PC. График можно построить по этой методичке на Python https://habr.com/ru/articles/748282/

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

29 мая 2023
29 мая 2023

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

30 мая 2023
30 мая 2023

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

1 июня 2023
1 июня 2023

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

2 июня 2023
2 июня 2023

А это график в логарифмическом масштабе по основанию 2 (14 июня 2023)

14 июня 2023
14 июня 2023

Что с точностью измерения координат?

Мой прототип такого навигатора, установленный на балконе, показывает погрешность по широте 80км и погрешность по долготе 58,2 км...120км. Причем долгота часто определяется на порядок точнее чем широта. Но тут надо сразу отметить, что я пока еще ничего не начинал делать для увеличения точности. Пополнять лог результатов буду в этом реестре

https://docs.google.com/spreadsheets/d/1q1Q4BvpVELhuVvXNgQFRqmsdtKTIxMgbEzHBmkHPNc0/edit#gid=0

Плотность вероятности для широты (65 измерений).
Плотность вероятности для широты (65 измерений).

И вот еще гистограмма для 59ти измерений долготы.

Плотность вероятности для долготы. (59 измерений)
Плотность вероятности для долготы. (59 измерений)

Как можно увеличить точность навигации?

  1. Найти или вывести формулы продолжительности светового дня, для конкретной широты которые учитывают рефракцию атмосферы.

  2. Установить на датчик освещения светорассеивающий колпачок.

    Это отчистит сигнал от оконных бликов и позволит точнее определить долготу методом анализа спектра первой гармоники DFT.

  3. Попробовать заменить датчик видимой освещенности на датчик ультрафиолета (например ASIC LTR390-UV-01). Вероятно будет более чётко выраженная граница заката и восхода Солнца. Или вовсе измерять не свет, а интенсивность радио излучения от Солнца антеннами.

  4. Автоматически определять направление тени от вертикального стержня и таким образом точнее определить долготу.

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

  6. Использовать несколько датчиков освещения для исключения бликов.

  7. Использовать более точные формулы вычисления солнечного склонения, учитывать прецессию Земли.

  8. Широту точки наблюдения можно также оценить если научиться измерять азимут точки восхода или заката Солнца.

Итоги

Как видите, чтобы разработать простенький солнечный навигатор надо мыслить не иначе как в планетарном масштабе!

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

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

Надеюсь, что этот текст сподвигнет кого-то ещё собрать свой собсвенный солнечный навигатор. Это не просто датчик света. Это разговор с самой природой!

В общем, эта тема позволила мне стать чуть более просвещённым...

Учебники по теме

--1 Курс общей астрономии, П.И. Бакулин, Э.В., Кононович, В.И. Мороз, 1977г, 5-е издание
--2 Что и как наблюдать на небе, Цесевич В.П , 1984г, 6-е издание
--3 Астрономический календарь, В.К. Абалакин, 1981г, 7-е издание

Ссылки, Links, URLs

Вывод формулы для долготы дня https://pandia.ru/text/77/376/23564.php

Астрономическая рефракция https://en.wikipedia.org/wiki/Atmospheric_refraction

Редактор формул на языке Latex https://latex.codecogs.com/eqneditor/editor.php
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://www.youtube.com/watch?v=ZPUYBsI7Pp0

https://лунник.рф/восход-заход-солнца

https://www.hmn.ru/index.php?index=41&value=1
https://www.hmn.ru/index.php?index=41&value=1
https://poznayka.org/s78818t1.html

https://en.wikipedia.org/wiki/Gravity_of_Earth

https://www.astronet.ru/db/msg/1191675
https://habr.com/ru/articles/97749/

https://www.youtube.com/watch?v=QK8u2wKIKt8
(начало на 7:00)

https://habr.com/ru/articles/736482/

http://latex.codecogs.com/eqneditor/editor.php

Синтаксический разбор CSV строчек https://habr.com/ru/articles/765066/

Словарь

Акроним

Расшифровка

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

DFT

Discrete Fourier Transform

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали SD карты?
36.64% да48
63.36% нет83
Проголосовал 131 пользователь. Воздержались 13 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали часы реального времени?
50.37% да68
49.63% нет67
Проголосовали 135 пользователей. Воздержались 12 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы делали навигацию по фазам естественного освещения?
2.33% да3
97.67% нет126
Проголосовали 129 пользователей. Воздержались 12 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы использовали в прошивках Триггер Шмитта?
31.62% да37
68.38% нет80
Проголосовали 117 пользователей. Воздержались 20 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы использовали в прошивках разложение сигнала в ряд Фурье?
31.09% да37
68.91% нет82
Проголосовали 119 пользователей. Воздержались 15 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали датчики освещения?
45.9% да56
54.1% нет66
Проголосовали 122 пользователя. Воздержались 14 пользователей.
Теги:
Хабы:
Всего голосов 67: ↑62 и ↓5+83
Комментарии127

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань