фото резистор = навигатор

ddf637efef63747136e888247355ef80.JPG

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

b4e77b1a18b0b01a1b21a08ff38414bf.png

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

883ca8c063f34adba22e46169c4508ba.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Понятие

Пояснение

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

Угол между земной осью и отрезком, соединяющий Землю и Солнце. Зависит только от времени-даты. Меняется с периодом в год. Допустимые значения от -23,5…23,5 градусов

Местное солнечное время

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

Теория

Как вычислить долготу?

Надо найти момент времени максимальной освещенности. Однако это не всегда удобно из-за облаков. Можно вычислить время восхода и время заката. Из времени заката вычесть время восхода, поделить на 2 и прибавить это число к времени восхода. Так мы получим время полудня для данной долготы. Если время полудня совпало с 12:00 на UTC+0 то это значит, что мы на нулевом меридиане. За 1 час Солнце в кульминации заметает 15 градусов долготы на глобусе.

С долготой всё просто: даешь время кульминации Солна, получаешь долготу.

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

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

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

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

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

e26e6f3d5e1264d9fdfd2360f020daa2.png

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

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

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

99f3cb46fcb21aafb89a08617fec043e.gif

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

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

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

где 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.

beab5af7822c77478e42a4e253bd0b00.png

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

2--В пасмурные дни (типа 2 июня 2023) продолжительность светового дня вычисляется меньше чем есть на самом деле.

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

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

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

3--Способ навигации по фазам солнца поможет примерно ориентироваться для марсоходов и луноходов.

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

5--Как по мне, самое адекватное применение этой темы это встроить фоторезистор в наручные часы и часы сами, лежа на подоконнике определят свой часовой пояс и переключатся на местное время.

6--Можно встроить датчик освещения в портативные радиостанции для передачи примерного местонахождения в транкинговой сети.

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

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

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

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

Мой прототип такого навигатора, установленный на балконе, показывает ошибку по широте 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://лунник.рф/восход-заход-солнца
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

© Habrahabr.ru