Простенький солнечный трекер на базе мотоподвеса

Borland
Offline
Зарегистрирован: 17.05.2012

Не знаю катит ли это на проект)) но темы похожей на этом форуме я не нашел.

Делал на контроллере сименс год назад за 5000 р эту игрушку, сейчас реализовал макет на Ардуине за 7 долларов.

Сразу оговорюсь, что механика и электроника используется готовая - мотоподвес от спутниковой тарелки, ардуино только дает команды

С помощью коллег с форума, спасибо leshak и maksim удалось заменить кнопку управления мотоподвесом пином ардуины.

техника работы с кнопкой такова

1 раз нажана отпущена - шаг влево

2 раза нажата отпущена шаг враво

1 раз нажата и неотпущена - длительный поворот налево

2 раза нажата и не отпущена длительный поворот вправо

на 2 аналоговых входа светорезисторы. головки светорезисторов разделяет зеркальная пластина, чем длиньше и тоньше тем точнее позиционирование

подпрограмма таймерного прерывания осуществляет движение ( Нажимание кнопок)
код не претендует на оригинальность, возможны ошибки , но вроде как трэккер усердно ищет солнце в окне))

Не могу почемуто вставить фото, жму на картинку но не вижу там ничего типа - browse file и тд, подскажите ? загружу

 



#include <TimerOne.h>

int volatile DirectionForTimer;
int volatile ManualStop;

int incomingByte=0;
int LDR7 = 7;       // пин к которому подключен датчик
int val7 = 0;       // переменная для значения с датчика
int LDR6 = 6;       // пин к которому подключен датчик
int val6 = 0;       // переменная для значения с датчика

void Move()
{

  
}


void setup() {
  pinMode(LDR7, INPUT);
  pinMode(LDR6, INPUT);
  pinMode(13, OUTPUT);
   digitalWrite(13, HIGH);
Timer1.initialize(200000);  ///100000
Timer1.attachInterrupt( timerIsr );

  Serial.begin(9600);
}
volatile int Step=0;
volatile int PreviousDirection;
int sign(int a) {
if (a > 0) 
      return 1;
   else if (a < 0) 
      return -1;
   return 0;
}   

void loop() {
  
  val7 = analogRead(LDR7);//считываем значение
  Serial.print("Left:");
  Serial.println(val7);//выводим его в терминал
  val6 = analogRead(LDR6);//считываем значение
  Serial.print("Right:");
  Serial.println(val6);//выводим его в терминал
  Serial.print("Step:");
  Serial.println(Step);//
  Serial.print("Dir:");
  Serial.println(DirectionForTimer);//
  // Positioning logic
  if(abs(val7-val6)>10) {
   DirectionForTimer=sign(val7-val6)*2;
     Serial.println(DirectionForTimer);//
    
  } else {
      if(abs(val7-val6)>2) {
         DirectionForTimer=sign(val7-val6);
         Serial.println(DirectionForTimer);//
      } else  DirectionForTimer=0;
   
  } 
  
  
  
  if(Serial.available()) {
   incomingByte = Serial.read();
   Serial.print("I received: ");
   Serial.println(incomingByte, DEC);
 
  
  
  switch(incomingByte) {
    case 'a':
    case 'A': 
          digitalWrite(13, HIGH);
          DirectionForTimer=-2;  // constant moving
          
             break;
    case 's':
    case 'S': 
          DirectionForTimer=-1;  //one step
             break;
    case 'd':
    case 'D': 
           DirectionForTimer=+1;  // to other side
            break;
    case 'f':
    case 'F': 
           digitalWrite(13, HIGH);
           DirectionForTimer=+2;
            break;
    case 'q':
    case 'Q': 
           DirectionForTimer=0;
            break;
    case 'z':
    case 'Z': 
           DirectionForTimer=0;
           ManualStop=!ManualStop;
            break;            
            
            
     default:
              break;     
    
    
  }  //case
 }  // if avaluable
 
   

 // digitalWrite(13, HIGH);

//  digitalWrite(13, LOW);
  delay(1000);
}


void timerIsr()
{
if (ManualStop) {Step=0; digitalWrite(13, HIGH);return;}
if (PreviousDirection != DirectionForTimer) {PreviousDirection = DirectionForTimer;Step=0; digitalWrite(13, HIGH);return;}
if (!DirectionForTimer) { digitalWrite(13, HIGH); Step=0;}
  if (abs(DirectionForTimer)==2) {
    switch (Step){
      case 0:  // Very first Action bring signal to Low and make Next Step
           digitalWrite(13, LOW);  
           Step++;
           break; 
      case 1:  // If direction is + then we have to stay signal LOW
            if (DirectionForTimer==2) {
               digitalWrite(13, LOW);  
               // Nothing to do with Step;
            } else { // direction is - Set Step in 3 Phase 
                digitalWrite(13, HIGH);
                Step++;
              
            }
            break;
      case 2:  //  
              
              digitalWrite(13, LOW);
              Step++;
              break;
      case 3: 
               digitalWrite(13, LOW);
               break;     
    }  // end switch
  }    //endif
  if (abs(DirectionForTimer)==1) {
       switch (Step){
         case 0:  // Very first Action bring signal to Low and make Next Step
               digitalWrite(13, LOW);  
               Step++;
               break; 
         case 1:  // If direction is + then we have to stay signal LOW
            if (DirectionForTimer==1) {
               digitalWrite(13, HIGH);  
               
               Step=0;DirectionForTimer=0;
               // Nothing to do with Step;
            } else { // direction is - Set Step in 3 Phase 
                digitalWrite(13, HIGH);
                Step++;
              
            }
            break;
      case 2:  //  
              digitalWrite(13, LOW);
              Step++;

              break;
      case 3: 
               digitalWrite(13, HIGH);
               Step=0;
              
               break;     
            

       } // end case
  }
 PreviousDirection=DirectionForTimer;
 
    // Toggle LED
  //  digitalWrite( 13, digitalRead( 13 ) ^ 1 );
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Borland пишет:
Не могу почемуто вставить фото, жму на картинку но не вижу там ничего типа - browse file и тд, подскажите ? загружу

Сохранение картинок на форуме

Borland
Offline
Зарегистрирован: 17.05.2012

RainMan
Offline
Зарегистрирован: 21.06.2011

не совсем понял, что это вы сделали? 

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

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

RainMan пишет:

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

Если посчитать стоимость ветроустойчивой и прочной конструкции - сравнимо с тем, чтобы купить еще панелей и установить неподвижно.

По опыту эксплуатации небольших панелей, проблема оказывается не в том, чтобы собрать с панелей максимум, а в том, чтобы автоматически переключать нагрузку после того, как контроллер зарядил АКБ. На графике внизу видно, что АКБ быстро зарядилась до 14.4, после чего контроллер переключается в режим "буферизации" и снижает напряжение до 13.6-13.8 вольта, то есть солнце светит, панели могут давать ток до 2.5 ампер, но реально от них сейчас берется 150 миллиапмер на поддержку АКБ.

RainMan
Offline
Зарегистрирован: 21.06.2011

ну я пока решил не заморачиваться с контроллером а купил готовый - вот такой http://www.ebay.com/itm/221037069382?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Вот только возник вопрос как замерять параметры солнечного модуля? Вот у меня есть модуль на 12В 5Вт. Подключить его к нагрузке R=12/0,416=29 Ом и проверить, чтобы напряжение не упало менее 12В а ток потребления соответствовал I=5/12=0,416А?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

RainMan пишет:

ну я пока решил не заморачиваться с контроллером а купил готовый - вот такой http://www.ebay.com/itm/221037069382?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Надеюсь Вы в курсе, что для того, чтобы не спалить контроллер надо соблюдать порядок подключения: сначала аккумуляторы, затем солнечные панели, т.к. панели выдают 17-18 вольт на х.х...

RainMan пишет:

Вот только возник вопрос как замерять параметры солнечного модуля? Вот у меня есть модуль на 12В 5Вт. Подключить его к нагрузке R=12/0,416=29 Ом и проверить, чтобы напряжение не упало менее 12В а ток потребления соответствовал I=5/12=0,416А?

У каждой панели есть вольт-амперная характеристика, исходя из нее и подключайте. :) Обычно интересует напряжение на холостом ходу (чтобы не спалить контроллер) и ток, близкий к КЗ, чтобы вычислить мощность панели. Поскольку Вы планируете панели подключать к нагрузке через контроллер - остальное уже мало влияет... Хотя, если интересно, можно почитать про MPPT контроллеры. :)

RainMan
Offline
Зарегистрирован: 21.06.2011

Спасибо з апредупреждение с контроллером, сам бы не догадался сначала АКБ. А эффективност ьпанели надо расчитать, т.к я заказал 3 панели покрытые эпоксидной смолой (IP65), но при одинаковых условиях испытаний, одна выдает на ХХ 11,6В а другая 14,4. При детальнос рассмотрении на той что мало выдает обнаружил, элементы под эпоксидкой покрыты слоем пыли. А может плохо соединены солнечные модули модули, и какие-то не вносят своей лепты в общюю величину напряжения.

Батареи брал здесь http://www.eco-worthy.com/catalog/product_info.php?cPath=71_73&products_id=229

Подскажите как конкретно проверить эффективность конкретных батарей?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

RainMan пишет:

при одинаковых условиях испытаний, одна выдает на ХХ 11,6В а другая 14,4. При детальнос рассмотрении на той что мало выдает обнаружил, элементы под эпоксидкой покрыты слоем пыли. А может плохо соединены солнечные модули модули, и какие-то не вносят своей лепты в общюю величину напряжения.

Пыль - не мешает, тут, скорее всего, короткое ячеек: они же тоже, как АКБ, выдают напряжение ступеньками в зависимости от количества элементов в последовательной цепочке. Хотя, если на холостом напряжение одинаково - то брак в пластинах (grade A / grade B ): не вся площадь работает.

RainMan пишет:

Подскажите как конкретно проверить эффективность конкретных батарей?

Я бы нагрузил два модуля какой-то стандартной нагрузкой, вроде автомобильной лампочки, выставил рядом на свет и померял напряжение. Затем померял бы напряжение холостого хода (без нагрузки) и ток короткого замыкания - это амперметром закоротить панель. Зафотографировав эти параметры я обращался бы к продавцу, если сроки претензии еще не вышли. Просил бы частичного возмещения за дефектную панель (partial refund).

RainMan
Offline
Зарегистрирован: 21.06.2011

спасибо за совет.

cheese
Offline
Зарегистрирован: 08.05.2012
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Поинтересуйтесь при случае чем PWM отличается от MPPT ...

http://www.ebay.com/itm/MPPT-15A-Solar-Charge-Battery-Conteoller-12V-24V...

http://www.ebay.com/itm/10A-MPPT-Solar-Regulator-Charge-Controller-12V-2...

... и что такое Grid Tie Power Inverter:

http://www.ebay.com/itm/Brand-New-Grid-Tie-Power-Inverter-200W-Solar-Pan...

cheese
Offline
Зарегистрирован: 08.05.2012

У меня все это есть.

RainMan
Offline
Зарегистрирован: 21.06.2011

я присмотрел себе вот такие  Grid Tie Power Inverter: - http://www.eco-worthy.com/catalog/index.php?cPath=78

Брал у них и готовые панели и сами элементы - быстро отправляют, все четко. Только вот панель заявленная как 12В 5вт подключенная к контроллеру больше чем 3,5Вт не выдает.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Зачем Вам 5 Ватт энергии?

Я начал с 190 Ваттной панели, так при преобразовании 5-10 Ватт просто в тепло уходят.

Даже видел как панель 207 Ватт выдавала по постоянному току.

Обычно 150-170 на стороне входа и 145-160 в розетку.

Жалко что счетчик с блокировкой от обратного вращения...

cheese
Offline
Зарегистрирован: 08.05.2012

http://www.windpower-russia.ru/forum/showthread.php?t=538

Посмотрите по поводу счетчика.

Snubist
Offline
Зарегистрирован: 18.02.2013

trembo пишет:

Жалко что счетчик с блокировкой от обратного вращения...

В России выпускаются двунаправленные счетчики, занесенные в гос. реестр.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Snubist пишет:

В России выпускаются двунаправленные счетчики, занесенные в гос. реестр.

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Не из России я...

Совсем забыли о начале темы- позиционере.

Купил напобаловться вот подобную штучку:

http://www.best-price.lv/index.php?page=shop.product_details&product_id=...

Угол поворота (реально) 170 градусов. То есть годится.

Наверху стоит индикатор этого угла. Работает, кажет угол.

Про управление:

Нажимаешь и держишь одну кнопку- крутится в одну сторону, соответственно и с другой кнопкой.

Даже программу сделал, датчик...

Сначала думал на реле, но проще поставить в мотор два оптрона со встечно включёнными входами

и вывести всего два провода управления и два на  питание, да и развязка не помешает.

Всё встало из-за того, что надо противостоять ветровой нагрузке, а то выломает всё это с крыши к ...

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

trembo пишет:

Всё встало из-за того, что надо противостоять ветровой нагрузке, а то выломает всё это с крыши к ...

Народ ставит актуаторы помощнее, чем для тарелок-сателлитов. :) А Вы хотите такую игрушку на крышу поставить.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Куда уж мощьнее, 140 сантиметров тарелки- 80 км в час, 85 см- 140 км в час.

Проблемма поднять ось мотора на полметра над крышей. На каком-то треугольнике.

Крыша  45 градусов на Юг, лежит бетонная черепица, которая никак не закреплена,

пластины держат друг-друга по бокам и сверху, вес каждой около 5 кг.

Их можно свободно сдвигать вверх, под верхнюю.

http://www.citym.ru/services/stroitelstvo/krovlya/cherepitsa-peschano-ts...

Под ней только рейки 40х40 за которые она держится от съезжания вниз. ЗакрепИться можно только за них,

подсунув тонкую (4-5мм мах) металлическую пластину вверх до рейки, а это 30 сантиметров.

И так 4 раза. Нежёсткая конструкция получается...

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

trembo пишет:

Проблемма поднять ось мотора на полметра над крышей. На каком-то треугольнике.

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

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

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

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

Всё это дело будет крутиться канечто же на ATtiny13.

Вот что-то похожое на код:



#include <avr/sleep.h> 
int main( void )
{
  DDRB = 0b10111;  // порти PB0-PB2 и PB4 встановленні на вихід, PB3 на вхід.
  while(1)
  {
    char value = ADC_READ()/64; // 1024/64=16
    if(value == 8 ) // мы на солнце
    {  
      system_sleep();
    }
    if(value < 7 && value < 3 ) // крутимся в одну сторону
    {
      PORTB &= ~(1<<1);
      analogWrite(0, map(value, 3, 7, 255, 64)); 
    } 
    if(value > 9 ) // крутимся в другую сторону
    {
      PORTB &= ~(1<<0);
      analogWrite(1, map(value, 9, 16, 64, 255));
    } 
    if(value < 2 ) // ночь, уснём-ка
    {
      system_sleep();
    }
  } 
  return 0;
}

unsigned int ADC_READ(){  // ініціалізуємо АЦП
  ADMUX = 3; // ADC pin
  ADCSRA |= 1<<ADEN;
  ADCSRA |= 1<<ADSC;
  while(!(ADCSRA & (1<<ADIF)));
  ADCSRA |= 1<<ADIF; 
  byte low  = ADCL;
  byte high = ADCH;
  ADCSRA &= ~(1 << ADEN);  // вимикаємо АЦП
  return (high << 8) | low;
}
void system_sleep() {
  ADCSRA &= ~(1 << ADEN);  // вимикаємо АЦП
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // повністю засинаємо
  sleep_enable(); // сон дозволено
  sleep_cpu(); 
}





Как-то так да не так, нужно с фоторезисторими играться...

Возможно кто-то что-то подскажет?

Siraam
Offline
Зарегистрирован: 26.07.2014

Уважаемый Borland. Интересный проект. Только мне неясно каким макаром мотоподвес подключен к ардуине?