Меню

Ориентация солнечных панелей по солнцу ардуино

Солнечный трекер на Ардуино Очень Простой способ Solar Tracker

Собрать систему слежения за солнцем очень просто и сейчас буквально за 10 минут я вам расскажу как это можно сделать.
Что же такое Солнечный трекер? Это устройство позволяющее следить за перемещением солнца и всегда поворачиваться к нему лицом. Слежение за солнцем (Solar Tracker) соберём на Ардуино и подключим к нему солнечную батарею. Для движения за солнцем я использую шаговый двигатель 28BYJ-48 так как он дешёвый и часто применяется в Ардуино проектах. А ещё нам понадобятся 2 фоторезистора, но в конце я расскажу как можно и их убрать. Собрать прибор слежения за солнцем своими руками и использовать его как альтернативный источник энергии это в духе нашего времени.

Сегодня соберём Солнечный трекер. Если не знаете, что это, то это устройство, которое поворачивается за солнцем как подсолнух. Это может пригодиться, например для установки солнечной панели и она будет всегда направлена на солнце. В этом видео я покажу как собрать солнечный трекер своими руками.
Нам понадобятся только Ардуино, шаговый двигатель, и пара фоторезисторов. А в конце я расскажу, как можно обойтись и без фоторезисторов.
Давайте посмотрим, что у меня получилось, а потом разберёмся как можно этот пример повторить. Это совсем не сложно.
Сразу хочу извиниться за качество съёмки и собранную модель, но главное, что схема работает и видно, как солнечная батарея движется в сторону света.
Я специально взял не узконаправленный луч, а обычную лампу, так свет сразу попадает на оба фотоприёмника и это ближе к солнечному свету.
Теперь расскажу принцип работы.
Код программы считывает значения верхнего и нижнего фоторезистора и сравнивает их. Если на верхний попадает больший поток света, то мотор начинает движение вверх, и будет двигаться пока значения не сравняются. Тогда мотор остановится на десять секунд. Это значение можно поменять в скетче. А затем, если свет переместился, то начнётся движение в сторону света.
Скорость перемещения можно изменить. Я специально сделал маленькую скорость, так как свет явление статичное и солнце двигается медленно. Про десятисекундную задержку я расскажу дальше в видео. Просто скажу, что когда свет сравняется, то малейшее колебания света вызывает срабатывание мотора и он может дергаться в диапазоне 1 градус вверх, вниз. Эта задержка устранит эту неприятность.
А теперь отвечу на вопрос почему я использовал шаговый двигатель, а не сервопривод. Всё, просто, шаговик более дешёв, менее капризен, способен работать с большими нагрузками, и потребляет меньше электричества. Правда и у него есть недостатки, но для этого проекта они не так важны.
Ну, вот всё что хотел рассказал. А теперь, тем кто заинтересовался, милости просим в техническую часть.
Я разбил её на несколько примеров. Я расскажу, как правильно подключить и настроить фоторезисторы. Научу управлять шаговым двигателем, и в конце расскажу, как собрать себе такой же трекер.

Сначала надо проверить фоторезисторы.
Для этого подключаем их к Аналоговым входам Ардуино и считываем значения. Вначале я подключил их по схеме с постоянным резистором. Можно взять любые, но я обычно использую номиналом от 4,7 кОм до 10 кОм. Прошиваем скетч и смотрим какие значения выдают ваши фоторезисторы. Они должны быть приблизительно одинаковые, и чем меньше они отличаются, тем проще будет потом настроить скетч.
Сразу скажу. Такие значения вполне могли бы подойти, но потом я вспомнил, что я сжёг эти Аналоговые порты, а когда подключил на другие, то разница была намного больше.
Резисторы и фоторезисторы даже из одной партии, могут значительно отличаться. Можете посмотреть вот это видео, там я подробно рассказываю о фоторезисторах.
И так как разница оказалось очень большая, то я решил подключить фоторезисторы через переменные резисторы, и настроить их как можно точнее.
Смотрим скетч с подключенными переменными резисторами.

Здесь я подключил фоторезисторы к аналоговым входам А3 и А4 и в выводе указал, какой из них будет нижний, а какой верхний. Прошиваем и смотрим.
Сначала у меня получились вот такие значения. Они не пригодны для работы в скетче управления движением за солнцем. Поэтому надо их подогнать.
Сначала я настрою нижний фоторезистор. Вращением переменного резистора, вы можете настроить любые начальные значения. Желательно настраивать в полутёмном помещении, чтобы сразу указать порог, при котором у вас отключится мотор и не будет искать солнце. Какой смысл искать, то, чего нет. Например, вечером.

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

Рассмотрим скетч.
Он, как всегда, прокомментирован, и лежит в архиве на моём сайте. Ссылка в описании.
Первое условие означает, что если предыдущая команда выполнена, или ничего другое не выполняется, то сделать 2 оборота против часовой стрелки, со скоростью 15 оборотов в минуту.
После окончания поменять значение переменной на TRUE.

Читайте также:  Что земле дат солнце

Затем сразу же изменить скорость на 5 оборотов в минуту и сделать поворот на 360 градусов по часовой стрелке. После выполнения изменить значение переменной на TRUE.

Последнее условия – это вращение со скоростью 15 оборотов в минуту против часовой стрелки до тех пор, пока другая команда не отменит это условие.
И последняя команда – это запуск шагового двигателя. Это обязательная команда, без неё мотор не будет работать.

Рассмотрим ещё один скетч.
Я назвал его качели. Для слежения за солнцем, необязательно устанавливать фоторезисторы. Достаточно просто установить солнечную батарею в нужное время в нужное место. И вам необязательно даже устанавливать для этого часы. Можно взять один из моих примеров, где я делал часы без модуля часов. Так, как большая точность здесь не важна, то этот пример как нельзя лучше сюда подойдёт.

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

Ну и наконец дошло дело до главного скрипта дня.
Как подключить шаговик, вы уже знаете. Фоторезисторы сверху и снизу от солнечной батареи так и называются. BOTTOM и UP, то есть низ и верх.
Всё остальное как и в предыдущем скетче, только скорость я сделал 5 оборотов в минуту.

В цикле LOOP происходит вся основная магия слежки.
Сначала считываем данные с фоторезисторов и присваиваем переменным.
Чтобы не работать с большими числами, я в функции map перевёл значения от 0 до 1023 в диапазон от 0 до 100. Это более грубые данные и с ними проще работать. Меньше будет дёрганий мотора.
Вычисляет абсолютную величину (модуль) числа.

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

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

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

Схема подключения
Фоторезистор с постоянным резистором подключается вот так. Это обычная схема делителя напряжения, где один вывод фоторезистора подключается к питанию, а второй, через дополнительный резистор подключается к другому полюсу питания. Не важно, как вы подключаете фоторезистор к плюсу или к минусу, просто в скетч будут приходить данные от 0 до 1023 или от 1023 до 0. Вам надо будет только написать другое условие. Величина резисторов также не важна. Я использую резисторы 4,7 ком или 10 кОм, так как они самые распространённые в работе с микроконтроллерами.

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

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

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

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

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

Все что нам потребуется кроме платы Arduino: один сервомотор, два светочувствительных резистора и два резистора номиналом 10 КОм.

На изображении ниже представлена схема проекта системы слежения за солнцем на основе платы Arduino.

Стандартные сервопривода имеют желтый провод, который используется для управления вращением. Этот провод должен быть соединен с выводом 9 платы Arduino UNO. Два светочувствительных резистора (LDR), которые подключаются к выводам A0 и A1, должны быть расположены примерно так же, как в статье об аналоговой системе слежения за солнцем. Если ход серводвигателя не очень плавный, то попробуйте добавить конденсатор 470мкФ/10В между линией питания и землей.

Ниже представлен код функционирования системы слежения за солнцем на основе платы Arduino. Этот скетч довольно простой и достаточно комментирован. Для управления серводвигателем в нем используется библиотека Servo.h.

Сначала мы присваиваем переменной pos значение 90, чтобы при запуске устройства установить исходное положение сервомотора в 90 градусов (среднее положение). Переменная tolerance используется для создания небольшого запаса по регулированию, иначе регулирование положения солнечной панели будет безостановочным.

Читайте также:  Солнце ты светишь везде

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

Источник

Солнечный трекер

Солнечный трекер — система, предназначенная для слежения за перемещением солнца, чтобы получить максимальный КПД от солнечных батарей.
Концепция трекера предельно проста — по двум датчикам контроллер заставляет серводвигатель поворачивать платформу с солнечной батареей в ту сторону, где больше света.
Домашний прототип рабочего трекера показан на фото ниже:

В проекте используется два датчика-фоторезистора, которые направлены в разные стороны от плоской поверхности на 45°, т.е. относительно друг-друга фоторезисторы сориентированы на 90°. На сами датчики надеты колпачки, чтобы поток света, падающий на них был узконаправленным.

В проекте используется контроллер Arduino. Контроллер периодически считывает значения с двух датчиков и сравнивает их. Если значения с датчиков одинаковы, значит панель наведена на солнце. В случае, если значение одного из датчиков отличается от другого, контроллер дает команду на серводвигатель для поворота платформы. Команда на серво работает до тех пор, пока значения с датчиков не сравняются.

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

Скетчи для Arduino

В начальной секции программы описываются подключаемые библиотеки (в нашем случае servo.h), определяются пины и константы

В следующей части кода описывается функция Setup(). Данная функция выполняется только один раз при запуске программы или после сброса контроллера. Здесь вы можете вывести в Serial Monitor какие либо данные для отладки, или как в приведенном ниже примере сделать «прогон» серводвигателя по всей траектории до лимитов.

Финальная часть кода выполняется в циклической функции loop(). Здесь считываются значения с датчиков, производятся все расчеты и выдаются команды на серводвигатель.

Также, в программе используется вспомогательная функция getTravel(), которая используется для вычисления, куда поворачивать серво — влево, вправо или вообще ничего не делать. Функция просто возвращает значение: 0 — ничего не происходит, -1 поворот влево, +1 поворот право.

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

Источник

Солнечная панель на Arduino, отслеживающая местоположение Солнца

В этой статье мы рассмотрим проектирование солнечной панели на основе платы Arduino, отслеживающей местоположение Солнца (следующей за Солнцем) с целью максимизации количества энергии, вырабатываемой солнечной панелью (поскольку она всегда будет развернута в сторону света). Схема нашего устройства будет основана на использовании двух фоторезисторов (LDR — Light dependent resistor) для обнаружения света и сервомотора для автоматического поворота солнечной панели в направлении солнечного света.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Сервомотор sg90 (купить на AliExpress).
  3. Солнечная панель.
  4. Фоторезистор (2 шт.) (купить на AliExpress).
  5. Резистор 10 кОм (2 шт.) (купить на AliExpress).
  6. Батарея (от 6 до 12 В).

Как будет работать проект

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

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

Сборка конструкции

Для сборки конструкции нашего проекта необходимо выполнить следующую последовательность шагов.

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

Читайте также:  Белые карлики образуются при эволюции звезд массы которых 2 5 раз больше массы солнца

Шаг 2. Соедините вместе два небольших куска картона в форме буквы «V» с помощью клея. Прикрепите их к солнечной панели как показано на следующем рисунке.

Шаг 3. Затем прикрепите нижнюю часть этих скрепленных в форме буквы «V» кусков картона к тому куску картона, в котором вы ранее сделали отверстие.

Шаг 4. Затем через сделанное отверстие прикрепите к этому куску картона сервомотор с помощью шурупа (обычно данный шуруп идет в комплекте с сервомотором когда вы покупаете его).

Шаг 5. Теперь поместите сервомотор на другой кусок картона. Размер этого куска картона должен быть больше чем предыдущих использованных кусков картона чтобы на него могли поместиться собранная макетная плата с батареей.

Шаг 6. Прикрепите фоторезисторы по обоим сторонам солнечной панели с помощью клея. Припаяйте соединительные провода к их выводам, в дальнейшем к ним нужно будет подсоединять резисторы.

Шаг 7. Теперь поместите плату Arduino, батарею и макетную плату на лист картона и сделайте соединения, показанные на схеме, приведенной далее в этой статье. Финальный вид нашей конструкции показан на следующем рисунке.

Работа схемы

Схема устройства представлена на следующем рисунке.

В рассматриваемой нами конструкции солнечной панели, следующей за Солнцем, плата Arduino запитывается от батареи 9V, а вся остальная часть схемы запитывается от Arduino. Рекомендованное напряжение для питания платы Arduino составляет от 7 до 12 Вольт (хотя на самом деле можно подавать от 6 до 20 Вольт), поэтому наши 9 Вольт вполне укладываются в этот диапазон. Соедините положительный вывод батареи к контакту Vin платы Arduino, а отрицательный вывод батареи – к земле платы Arduino.

Затем соедините положительный контакт сервомотора с контактом 5V платы Arduino, а землю сервомотора – с землей Arduino. Сигнальный контакт сервомотора подсоедините к цифровому контакту 9 платы Arduino. Более подробно о подключении сервомотора к плате Arduino можно прочитать в этой статье.

Далее соедините один контакт фоторезистора с одним концом сопротивления 10 кОм и также соедините этот конец к контакту A0 платы Arduino, а другой конец резистора подсоедините к земле, а другой контакт фоторезистора – к 5V Arduino. Аналогично и для другого фоторезистора, только с использованием контакта A1 платы Arduino.

Исходный код программы

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

#include //подключение библиотеки для работы с сервомотором
Servo sg90; //даем имя нашему сервомотору, назовем его sg90
int initial_position = 90; //переменная для хранения начальной позиции сервомотора
int LDR1 = A0; //контакт, к которому подключен первый фоторезистор
int LDR2 = A1; // контакт, к которому подключен второй фоторезистор
int error = 5; //переменная для хранения ошибки
int servopin=9;

Команда sg90.attach(servopin) «подсоединяет» сервомотор к контакту 9 платы Arduino. Далее устанавливаем контакты, к которым подключены фоторезисторы, в режим ввода данных. Затем устанавливаем сервомотор в начальную позицию (90 градусов).

void setup()
<
sg90.attach(servopin); // присоединяет сервомотор к контакту 9
pinMode(LDR1, INPUT); // на ввод данных
pinMode(LDR2, INPUT); // на ввод данных
sg90.write(initial_position); //поворачиваем сервомотор в начальную позицию (90 градусов)
delay(2000); // задержка 2 секунды
>

Затем мы будем считывать значения с фоторезисторов и сохранять их в переменных R1 и R2. Далее мы будем вычислять разницу между этими значениями чтобы определить направление, в котором мы будем поворачивать серводвигатель. Если разница между ними будет равна 0 это будет означать что на оба фоторезистора будет падать одинаковое количество света, поэтому солнечную панель в этот момент времени поворачивать нет необходимости. Ранее мы объявили переменную для хранения ошибки и ее значение равно 5, назначение ее будет следующим – если разница между значениями двух фоторезисторов будет меньше значения этой переменной (5), то сервомотор не будет двигаться (изменять свое положение). А если больше – то сервомотор будет вращать солнечную панель в направлении того фоторезистора, на который падает больше света. То есть значение этой переменной как бы регулирует чувствительность нашего устройства и определяет ту минимальную границу, при превышении которой нам следует начинать вращать серводвигатель.

int R1 = analogRead(LDR1); // считывание значения с фоторезистора 1
int R2 = analogRead(LDR2); // считывание значения с фоторезистора 2
int diff1= abs(R1 — R2); // расчет разницы между значениями с фоторезисторов
int diff2= abs(R2 — R1);
if((diff1
//если разница меньше величины ошибки/погрешности (error) то не делаем ничего
> else <
if(R1 > R2)
<
initial_position = —initial_position; //поворачиваем серводвигатель в направлении 0 градусов
>
if(R1
<
initial_position = ++initial_position; //поворачиваем серводвигатель в направлении 180 градусов
>
>

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

Источник

Adblock
detector