Авторизация
Зарегистрироваться

Система слежения за солнцем на ESP32


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

После экспериментов на esp8266, я просто забил на аналоговый вход, т.к. там такой мусор был в показаниях. Может модуль мне попался не качественный, еще и напряжение надо было ограничивать в 1V.

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


Как заливать прошивку, есть много статей. Поэтому этот момент не описываю.

Опишу 2 варианта, оба работают прекрасно.

Первый способ.

Самый простой, что можно купить и сразу спаять.
Нам понадобится
1 блок питания на 5v 700mA ~110руб ссылка
2 стабилизатор напряжения 3.3v ~100руб. ссылка
3 модуль ESP32-WROOM 32 или что-то подобное, на практике выяснилось 16Мб самый раз модули прошивку можно большую грузить и для файлов место останется от 200 до 300 руб.
4 сервопривод ~110руб ссылка
5.2шт. сопротивления 10Ком, выпаял со старых блоков питания
6 2шт. фоторезистора, у меня под рукой были GL5549 (10lux 45~140K 25C), думаю фоторезисторы могут подойти любые. ~80руб за партию ссылка
7 для прошивки понадобится кабель ссылка
и провода. Я решил не спаивать все и навесным монтажом все подключил т.к. плата уже давно была спаяна.

Схема проста как барабан


//

int posX = 1; // множитель
int pos = 90; // начальное положение
int sens1 = 32; // вывод для первого светочувствительного резистора
int sens2 = 33; // вывод для второго светочувствительного резистора
int tolerance = 400;
int port_out = 16;
const int freq = 50;//50Гц
int resolution = 16;

void set_pos() {
  ledcWrite(port_out, 1638 + 6226/180*(pos/posX));// устанавливаем положение сервомотора
}

void setup() {
  pinMode(sens1, INPUT);
  pinMode(sens2, INPUT);                                   \

  if (ledcAttach(port_out, freq, resolution)) {
    set_pos();
  }
}

void loop() {
  int val1 = analogRead(sens1); // считываем значение первого датчика
  int val2 = analogRead(sens2); // считываем значение второго датчика
     
  if(val1 - val2 > tolerance)
    pos = --pos;
  if(val2 - val1 > tolerance)
    pos = ++pos;
     
  if(pos > 180*posX) { pos = 180*posX; } // устанавливаем на 180, если больше этого значения
  if(pos < 0) { pos = 0; } // устанавливаем в 0, если меньше этого значения
  set_pos();
  delay(50);
}
Так повелось давно, использование библиотек, не всегда удобно, они в большинстве своем не рассчитаны на динамическую и параллельную работу. По этому все делаю вручную и код не захламляется и не завишу не от кого. Свои грабли найти проще чем чужие.

Второй способ.

Естественно я с него и начал. Печатные платы заказаны в Китае. Сборка естественно ручная.
На модулях учтены нюансы и добавлены свои хотелки. Т.к. каждый контакт на счету приходится вертеться.
Это сменный модуль.
Заказывал модуль 4Мб флэш, думал в esp8266 хватает и в esp32 хватит. Оказалось маловато т.к. прошивка 1400Мб, а нужно обновление прошивки не по кабелю и файлы хранить где-то. Первым делом впаял 8Мб, но когда расширил возможности и доработал интерфейс, оказалось маловато места для файлов. И при перезаписи файлов начались глюки. В результате впаял 16Мб и забыл про глюки при нехватке места.

Заранее извиняюсь за следующее фото. Плата работает в тестовом режиме и отключать проводки не хочется. А камера фокус на провода все пытается навести.
Это вид сверху, собранной платы.
На борту
— 16ШИМ выходов внешних,
— 16 вход/выход внешних,
— 8 аналоговых
— 16 контактов esp32
— разъемы шин OneWire и i2c
— чип времени ds3231sn
— 4 канала MOSFET
— 3 для симисторов (не распевал, пока нужды не было)

Цель была с минимальными затратами и без создания прошивки сделать радар слежения за светом.

Нужно всего лишь добавить 3 порта и настроить их работу.
Потом добавить обработку сигналов для увеличения и уменьшения значений.

Картинки не вижу смысла делать, проще не большое видео, мышью насколько возможно, показываю какие поля заполнял.



Не большое разъяснение по цифрам при 50Гц, сервопривод в положении 0 на значении ШИМ 1638, положение 180 сервопривода соответствует значению ШИМ 8164, получается 8164-1638=6226 это шагов который может делать сервопривод.
Таким образом формула 1638+6226/180*(v/10) дает нам с точностью до 0.1 градуса поворачивать сервопривод, при желании точность можно увеличить еще в 3 раза вместо 10 написав 30 и получим точность 0.033 градуса.

Напряжение на портах 32 и 33 представлено 4096 значениями 12бит. Но я не вдавался в перевод значений в напряжение, значение 400 подобрал методом тыка, это если интересно 3.3/4096*400=0.3V

Ну и напоследок тест работы


если видео не видно, то ссылка

PS. Единственное что в esp32 не удалось побороть сеть жнет память безбожно и интерфейс начинает тормозить
Планирую купить +3 Добавить в избранное +16 +20
свернуть развернуть
Комментарии (44)
RSS
+
avatar
  • Nuts_
  • 04 октября 2024, 12:56
0
на схеме GND нарисовать надо бы
+
avatar
  • yg-25
  • 04 октября 2024, 13:00
+5
За рукоприкладство плюсанул, если я правильно понимаю, в большей части это для системы слежения за положением небесного (-ных) светил? Если следить только за одним источником, например солнцем, существуют ли системы по типу астротаймера, вбил свои координаты, дату и время, или определение по геолокации и оно само следит, без подключения к интернету, положение известно и оно изменяется по известному закону.
+
avatar
+1
да, есть готовые либы под это. Можете следить за чем угодно без проблем.
+
avatar
  • Sanja
  • 04 октября 2024, 13:42
+1
конечно существуют. Прикрепляете GPS-модуль копеечный и собсно вот оно у вас. Правда, время холодного старта так себе — пока оно дождётся сигнала от 4-5 спутников, пройдёт минуты четыре.
+
avatar
  • alisogor
  • 04 октября 2024, 14:21
0
как правило, это достаточная точность для небесных тел. А за кометами наблюдать надо совсем другими средствами
+
avatar
  • bstsoft
  • 04 октября 2024, 14:56
0
Готовые есть, вот на али https://aliexpress.ru/item/1005002066154404.html
Желание без особых затрать и автономно работающее. Так же простая настройка и при желании быстро можно изменить поведение удаленно. Причем значения с датчиков тоже можно корректировать сидя у монитора.
+
avatar
  • 00svd00
  • 04 октября 2024, 14:14
-1
Если честно, не очень понятна решаемая задача. Если нужно знать положение солнца — то оно доступно для каждой широты просто в сети, достаточно данные забрать. Если нужно просто вычислять положение пятна света — то возможно проще и дешевле будет взять тот же ESP32 CAM и получать координату программно? Да и точнее наверное. Если же нужно что-то типа надёжной системы самонаведения — то в реальной жизни применяется изощрённые конструкции
+
avatar
  • noob
  • 04 октября 2024, 14:45
+2
Если нужно просто вычислять положение пятна света — то возможно проще и дешевле будет взять тот же ESP32 CAM и получать координату программно?
ИИ не забудьте прикрутить.
Трекер солнца делается на 2 фотодатчиках и маленькой горстке рассыпухи.
+
avatar
  • 00svd00
  • 04 октября 2024, 14:52
+1
ИИ не забудьте прикрутить.
Вы будете удивлены, но мощностей самой еспшки хватает. В сети куча проектов, как с распознаванием лиц, так и просто по движению
Например
eloquentarduino.com/posts/esp32-cam-object-detection
+
avatar
  • noob
  • 04 октября 2024, 15:00
0
Честно? Даже не интересно. Пихают без разбора где надо и где не надо.
Мой посыл был в том, что задача отслеживания панелей решается без CMC и регистрации микроконтроллеров.
+
avatar
  • 00svd00
  • 04 октября 2024, 15:02
+1
Угу. А потом через пару лет харк-ки аналоговой схемы уплывают и вы бегаете по стенам и пытаетесь её отладить. Знаем, проходили, больше не хочется. Я в принципе не понимаю, зачем вычислять положение солнца, если оно(положение) заранее известно и вычислено.
+
avatar
  • noob
  • 04 октября 2024, 16:50
+1
Какие характеристики? Какая отладка? Там 2 датчика света + 2 ОУ + H-Bridge для двигателя. Чего там настраивать?
+
avatar
  • 00svd00
  • 04 октября 2024, 16:55
+3
Уровень сигнала с датчиков света, скорость движения двигателей, размер гистерезиса на ОУ. Это вот просто сходу. А потом ещё будете бороться с шумами и скачущим сигналом при переменной облачности. А потом на фоторезистор нагадит голубь и на крыше заведётся карусель(потому как ну-ка организуйте методами аналоговой схемотехники защиту от безумного сигнала). И весь этот геморрой вместо того чтобы поправить формулу в МК и залить прошивку по Wifi не отрывая задницы от кресла. Классные советы, просто блестящие)
И ещё раз, это всё при том что положение солнца давно рассчитано и вычисляемо в любой момент времени.
З.Ы. А, да, совсем забыл. Вечером солнышко сядет на западе и встанет на востоке — т.е. литералли со строго противоположной стороны, куда ваш сенсор вообще не смотрит. Как будем реализовывать алгоритм поиска? Держим в уме что подвижные контактные группы дорогие, ненадёжные и не очень приспособленные к тому чтобы жить на улице, т.е. бесконечно наматывать круги не вариант(к тому что мы тут пытаемся немножко вырабатывать электричество не для того чтобы напрасно жечь его ночью)
+
avatar
  • noob
  • 04 октября 2024, 22:28
0
Ну да, голубь рядом с ESP32 срать не присядет. Камеры испугается.
Единственная реальная проблема это вечером подготовиться к восходу. Остальное — фантазии.
+
avatar
  • 00svd00
  • 05 октября 2024, 00:32
0
голубь рядом с ESP32 срать не присядет
Да пусть хоть всю обосрёт. Не будет определения координаты — не будет движения — не будет карусели. Даже никакой специальной защиты писать не нужно. Кроме того, я камеру предлагал исключительно на момент, пока не совсем понимал что именно пытается добиться ТС. Для решения задачи позиционирования солнечных батарей по солнцу единственный датчик, который нужен — это часы реального времени. Всё. Нет никакого смысла вычислять положение солнца по датчикам, когда оно описано расчётом.
Единственная реальная проблема
Единственная реальная проблема — это при наличии копеечных МК пытаться героически изобретать очередной аналоговый велосипед.
+
avatar
  • bstsoft
  • 04 октября 2024, 15:09
0
Каждому свое, но полазив на крышу несколько раз, понимаешь пользу микроконтроллера.
Я не говорю пихать их куда угодно, если есть свободные контакты и это может осилить один микроконтроллер который уже стоит в доме, почему бы не применить его.
+
avatar
  • Latte
  • 04 октября 2024, 17:27
-1
А если солнца нет?)
+
avatar
  • aliex
  • 05 октября 2024, 01:45
0
Ну, примеры уже поприводили, но общий итог — всё надо делать на максимально высоком доступном уровне. ТЗ позволяет свалить на внешний сервис — сваливать. Не выходит — сервис на своём сервере. Не годится — на локальном компе. И так нельзя — микроконтроллер. Каждое сползание по уровню вниз усложнаяет жизнь и ограничивает возможности. А рассыпуха — это когда собрался выпускать изделие хотя бы тысячами и, соответственно, на себестоимости надо сильно экономить. И то не факт, потому что гибкость — она нынче всем важна.

Я понимаю, что эстетство — как же так, 100500 мегагерц делают то, для чего нужны два фототранзистора. А пофигу — если первое стоит 5 долларов, а второе — один, но на первом я сэкономлю час времени, то для единичного изделия — самое оно.
+
avatar
  • bstsoft
  • 04 октября 2024, 14:46
+1
Решаемая задача проста, прикрепить солнечные панели и максимально возможно их поворачивать к солнцу. При этом без наворотов, простыми способами. Насколько я понимаю в ESP32 CAM прошивку с моим интерфейсом не влить, а если влить, то смысл камера не работает и пины заняты. Сидеть изучать астрономию небесных тель тоже не хочется. Но каждому свое мы все всё по своему видим )
+
avatar
  • 00svd00
  • 04 октября 2024, 14:57
+2
Сидеть изучать астрономию небесных тель тоже не хочется
А и не надо. Если пользуетесь тем же Home Assistant, то там вообще из коробки есть датчик солнца(интернетный), который возвращает азимут и высоту над горизонтом, т.е. как раз те две координаты, которые вы вычисляете. Примерно так
Я например его использую, чтобы включать свет по датчику движения в разное время в зависимости от текущего времени года(не используя при этом датчики освещённости)
При этом без наворотов, простыми способами
Ваш способ чисто визуально конечно проще, однако соверешнно точно будет глючить в моменты переменной облачности и всяких прочих погодных казусов. ИМХО гораздо проще просто наводиться в заранее известную координату в каждый момент времени.
+
avatar
  • bstsoft
  • 04 октября 2024, 15:29
0
Эт. понятно. Такой штуковиной не пользуюсь.
Сейчас решаются простые задачи без расчетов и на том, что есть.
По сути, если вникнуть в расчеты, то их можно конечно и в котроллер просто прикрутить тоже.
И нужно будет только геолокацию внести и все посчитается само
+
avatar
  • 00svd00
  • 04 октября 2024, 15:23
+4
изучать астрономию небесных тел
Или даже ещё проще. Есть готовый проект
github.com/happytm/SunTracker/tree/master
Автор утверждает, что результаты сходятся с suncalc.org
Правда есть подозрение, что если хочется совсем безинтернетный проект — придётся тогда еспшку оснастить каким-нибудь модулем часов реального времени(встроенные нифига не точные), но это лирика.
+
avatar
  • bstsoft
  • 04 октября 2024, 15:38
0
Все esp всегда с часами ds3231sn. Нужно будет поэкспериментировать с этими расчетами. Эмулируя положения солнца дома )
+
avatar
  • 00svd00
  • 04 октября 2024, 15:45
+2
Все esp всегда с часами ds3231sn
На esp8266 у меня время точно убегало, причём прилично. Я тогда на него взгромоздил эмулятор сервера LG для телевизора и воткнул синхронизацию с NTP только на старте. Ну и короче не катит — за полгода часы чуть ли не на час убежали. Нужен внешний модуль, благо они копеечные.
+
avatar
  • aliex
  • 05 октября 2024, 01:47
0
Да проще синхронизироваться раз в сутки
+
avatar
  • 00svd00
  • 05 октября 2024, 01:50
0
Если вайвай добивает до крыши — безусловно. А если нет — rtc модуль с батареечкой таки мастхев)
+
avatar
  • SanekK
  • 04 октября 2024, 21:33
0
у AlexGyver тоже есть библиотека
github.com/GyverLibs/SunPosition
+
avatar
  • 00svd00
  • 05 октября 2024, 00:34
0
Что-то мне подсказывает, что код там тот же самый) Но да, с русскими комментариями очевидно проще для восприятия русскоговорящим населенем.
+
avatar
  • mmasco
  • 04 октября 2024, 15:45
+1
Решаемая задача проста, прикрепить солнечные панели и максимально возможно их поворачивать к солнцу.
На практике эта задача решается по другому — добавляется еще одна или две панели в систему. Конечный результат тот же, а геммороя на порядок меньше. Проверенно на личном опыте.
+
avatar
  • aliex
  • 05 октября 2024, 01:49
0
Хм, логично. Никаких тебе поворотных движков. Меньше движущихся частей — меньше проблем.
+
avatar
  • mrBlue
  • 04 октября 2024, 16:15
0
А что происходит меж закатом и восходом?
+
avatar
  • Vingrad
  • 04 октября 2024, 14:14
0
Она одномерная? Работает по одной координате?
+
avatar
  • bstsoft
  • 04 октября 2024, 14:38
0
Я собрал по одной оси, но никто не мешает еще 2 входа и 1 выход задействовать.
у esp32 34, 35, 36, 39 аналоговые
У меня цель была другая проверить, а могу ли я простыми действиями, просто в интерфейсе, добавить порты и управлять слежением.
+
avatar
  • OreSama
  • 04 октября 2024, 15:47
0
Так всё же, за Солнцем или за абстрактным «источником света»? Чтобы «следить» за Солнцем не нужно ничего, кроме компаса (чтобы один раз сориентировать конструкцию на север) и механизма, делающего один оборот за 24 часа. После чего чудо-прибор будет «отслеживать» положение Солнца даже под горизонтом. Если нужна прямо идеальная точность, придётся добавить ещё и календарь.
+
avatar
  • mrBlue
  • 04 октября 2024, 16:18
+1
А что именно календарем делать? Подкладывать под компас?
+
avatar
  • OreSama
  • 04 октября 2024, 18:09
0
Земля неравномерно движется по орбите. Из-за этого реальное положение Солнца от «среднего» может отличаться на 5 градусов.
+
avatar
  • mrBlue
  • 05 октября 2024, 02:24
0
Я это знаю. Вопрос был что именно предлагается делать с календарем.
+
avatar
  • bstsoft
  • 04 октября 2024, 16:19
0
По сути это получилась игрушка, а будет работать или нет.
Намек выше про тучи учел, сделал эмуляцию, да будет сбоить, но гистерезис можно и уменьшить.
Все же для солнца пойдет математический расчет., часы есть положение не проблема внести.
Но как радиолюбитель я прошел опыт которого не прошел в детстве. И может какой мальчишка это попробует и ему пригодиться.
+
avatar
+6
Система слежения за солнцем здорового человека:

+
avatar
  • aliex
  • 05 октября 2024, 01:50
0
Интерфейсы подключения только нигде не описаны…
+
avatar
0
А где платы заказывали?
+
avatar
  • bstsoft
  • 04 октября 2024, 18:01
0
последний раз тут app.pcbchina.ru/
+
avatar
  • LightCat
  • 04 октября 2024, 21:08
+3
Видели реализацию Гайвера?

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.