Создание устройства автоматической ориентации солнечной батареи

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

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

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

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

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

Проводя эксперименты с солнечной батареей, я пришел к выводу, что наилучшие условия для генерации электроэнергии, при ярком солнце и при ориентации батареи перпендикулярно солнечному свету.

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

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

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

При разработке САО в проекте применены два  датчика-фоторезистора, серводвигатель, контроллер ATmega 168.

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

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

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

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

Скетчи (программа) для ATmega168.

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

 

#include <servo.h>

//IO Pins

int pinL = 5;              //IO Pin левого фоторезистора

int pinR = 4;              //IO Pin правого фоторезистора

int pinServo = 11;     //PWM pin серво

int leftValue = 0;      //Значение левого фоторезистора

int rightValue = 0;    //Значение правого фоторезистора

int error =0;              //Разница между показаниями двух датчиков

int errorAVG = 0;     //Error Average - Rolling 2 Point

int deadband = 10;     //Мертвая зона

Servo hServo;            //servo object

int Position = 45;       //Position to write out

int minPos = 5;          //Min позиция

int maxPos = 150;     //Max позиция

 float output = (maxPos - minPos) /2; 

В следующей части кода описывается функция Setup().

Данная функция выполняется только один раз при запуске программы или после сброса контроллера. Здесь вы можете вывести в Serial Monitor какие либо данные для отладки, или как в приведенном ниже примере сделать "прогон" серводвигателя по всей траектории до лимитов.

 

void setup()

{

 hServo.attach(pinServo);

hServo.write(minPos);

delay(5000);

hServo.write(maxPos);

delay(5000);

hServo.write(output);

delay(5000);

}

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

 

void loop()

{

  //Чтение значений с фоторезисторов

   leftValue = analogRead(pinL);

   rightValue = analogRead(pinR);

  //Расчет

  error = leftValue - rightValue;

  errorAVG = (errorAVG + error) / 2;

  float newOutput = output + getTravel();

  if (newOutput > maxPos)

 {   newOutput = maxPos; }

 else

 {    if (newOutput < minPos)   {     newOutput = minPos;  } }

  //Вывод команды управления серво

    hServo.write(newOutput);

    output = newOutput;}}

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

 

int getTravel()

{  // -1 = Влево; +1 = Вправо

 if (errorAVG < (deadband * -1))

 { return 1; }

 else

 { if (errorAVG > deadband)   { return -1; }

 else

   { 

//Ничего не делаем

   return 0;  } }}

Заключение.

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

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