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

 

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

Автор: Mike(admin) от 11-10-2014, 13:35

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


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


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


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


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

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


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



    #include <Servo.h>
    Servo myservo;
    int pos = 90; // начальное положение
    int sens1 = A0; // вывод для первого светочувствительного резистора
    int sens2 = A1; // вывод для второго светочувствительного резистора
    int tolerance = 2;
    void setup()
    {
    myservo.attach(9); // контакт управления положением сервопривода на вывод 9 платы Arduino
    pinMode(sens1, INPUT);
    pinMode(sens2, INPUT);
    myservo.write(pos);
    delay(2000); // ждем две секунды, чтобы установить панель в начальное положение
    }
    void loop()
    {
    int val1 = analogRead(sens1); // считываем значение первого датчика
    int val2 = analogRead(sens2); // считываем значение второго датчика
     
    if((abs(val1 - val2) <= tolerance) || (abs(val2 - val1) <= tolerance)) {
    // ничего не делаем, если разница между значениями меньше величины tolerance
    } else {
    if(val1 > val2)
    {
    pos = --pos;
    }
    if(val1 < val2)
    {
    pos = ++pos;
    }
    }
     
    if(pos > 180) { pos = 180; } // устанавливаем на 180, если больше этого значения
    if(pos < 0) { pos = 0; } // устанавливаем в 0, если меньше этого значения
    myservo.write(pos); // устанавливаем положение сервомотора
    delay(50);
    }

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


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




© digitrode.ru


<Via>


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий