Простенький солнечный трекер на базе мотоподвеса
- Войдите на сайт для отправки комментариев
Не знаю катит ли это на проект)) но темы похожей на этом форуме я не нашел.
Делал на контроллере сименс год назад за 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 );
}
Сохранение картинок на форуме
не совсем понял, что это вы сделали?
Систему слежения за солнцем? Это здорово, я как раз получил на днял 2 солнечные панели по 5 вт. Теперь тоже не мешало бы сделать систему слежения за солнцем, хотябы в одной плоскости. Но не будеть ли избытоно использовать в качестве поворотного механизма привод от тарелки? Я попробую на серве. А вы не ткнете меня на ссылочку каким образом вы отслеживаете положение солнца?
Систему слежения за солнцем? Это здорово, я как раз получил на днял 2 солнечные панели по 5 вт. Теперь тоже не мешало бы сделать систему слежения за солнцем, хотябы в одной плоскости.
Если посчитать стоимость ветроустойчивой и прочной конструкции - сравнимо с тем, чтобы купить еще панелей и установить неподвижно.
По опыту эксплуатации небольших панелей, проблема оказывается не в том, чтобы собрать с панелей максимум, а в том, чтобы автоматически переключать нагрузку после того, как контроллер зарядил АКБ. На графике внизу видно, что АКБ быстро зарядилась до 14.4, после чего контроллер переключается в режим "буферизации" и снижает напряжение до 13.6-13.8 вольта, то есть солнце светит, панели могут давать ток до 2.5 ампер, но реально от них сейчас берется 150 миллиапмер на поддержку АКБ.
ну я пока решил не заморачиваться с контроллером а купил готовый - вот такой 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А?
ну я пока решил не заморачиваться с контроллером а купил готовый - вот такой http://www.ebay.com/itm/221037069382?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Надеюсь Вы в курсе, что для того, чтобы не спалить контроллер надо соблюдать порядок подключения: сначала аккумуляторы, затем солнечные панели, т.к. панели выдают 17-18 вольт на х.х...
Вот только возник вопрос как замерять параметры солнечного модуля? Вот у меня есть модуль на 12В 5Вт. Подключить его к нагрузке R=12/0,416=29 Ом и проверить, чтобы напряжение не упало менее 12В а ток потребления соответствовал I=5/12=0,416А?
У каждой панели есть вольт-амперная характеристика, исходя из нее и подключайте. :) Обычно интересует напряжение на холостом ходу (чтобы не спалить контроллер) и ток, близкий к КЗ, чтобы вычислить мощность панели. Поскольку Вы планируете панели подключать к нагрузке через контроллер - остальное уже мало влияет... Хотя, если интересно, можно почитать про MPPT контроллеры. :)
Спасибо з апредупреждение с контроллером, сам бы не догадался сначала АКБ. А эффективност ьпанели надо расчитать, т.к я заказал 3 панели покрытые эпоксидной смолой (IP65), но при одинаковых условиях испытаний, одна выдает на ХХ 11,6В а другая 14,4. При детальнос рассмотрении на той что мало выдает обнаружил, элементы под эпоксидкой покрыты слоем пыли. А может плохо соединены солнечные модули модули, и какие-то не вносят своей лепты в общюю величину напряжения.
Батареи брал здесь http://www.eco-worthy.com/catalog/product_info.php?cPath=71_73&products_id=229
Подскажите как конкретно проверить эффективность конкретных батарей?
при одинаковых условиях испытаний, одна выдает на ХХ 11,6В а другая 14,4. При детальнос рассмотрении на той что мало выдает обнаружил, элементы под эпоксидкой покрыты слоем пыли. А может плохо соединены солнечные модули модули, и какие-то не вносят своей лепты в общюю величину напряжения.
Пыль - не мешает, тут, скорее всего, короткое ячеек: они же тоже, как АКБ, выдают напряжение ступеньками в зависимости от количества элементов в последовательной цепочке. Хотя, если на холостом напряжение одинаково - то брак в пластинах (grade A / grade B ): не вся площадь работает.
Подскажите как конкретно проверить эффективность конкретных батарей?
Я бы нагрузил два модуля какой-то стандартной нагрузкой, вроде автомобильной лампочки, выставил рядом на свет и померял напряжение. Затем померял бы напряжение холостого хода (без нагрузки) и ток короткого замыкания - это амперметром закоротить панель. Зафотографировав эти параметры я обращался бы к продавцу, если сроки претензии еще не вышли. Просил бы частичного возмещения за дефектную панель (partial refund).
спасибо за совет.
http://www.cerebralmeltdown.com/2011/05/30/open-source-arduino-sun-trackingheliostat-program/#comment-6680
Треккер на Ардуинке.
Поинтересуйтесь при случае чем 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...
У меня все это есть.
я присмотрел себе вот такие Grid Tie Power Inverter: - http://www.eco-worthy.com/catalog/index.php?cPath=78
Брал у них и готовые панели и сами элементы - быстро отправляют, все четко. Только вот панель заявленная как 12В 5вт подключенная к контроллеру больше чем 3,5Вт не выдает.
Зачем Вам 5 Ватт энергии?
Я начал с 190 Ваттной панели, так при преобразовании 5-10 Ватт просто в тепло уходят.
Даже видел как панель 207 Ватт выдавала по постоянному току.
Обычно 150-170 на стороне входа и 145-160 в розетку.
Жалко что счетчик с блокировкой от обратного вращения...
http://www.windpower-russia.ru/forum/showthread.php?t=538
Посмотрите по поводу счетчика.
Жалко что счетчик с блокировкой от обратного вращения...
В России выпускаются двунаправленные счетчики, занесенные в гос. реестр.
В России выпускаются двунаправленные счетчики, занесенные в гос. реестр.
Законодательная база для физлиц - отсутствует. При ощутимой отдаче энергии в сеть, будет расбаланс показаний с вышестоящим прибором учета.
Не из России я...
Совсем забыли о начале темы- позиционере.
Купил напобаловться вот подобную штучку:
http://www.best-price.lv/index.php?page=shop.product_details&product_id=...
Угол поворота (реально) 170 градусов. То есть годится.
Наверху стоит индикатор этого угла. Работает, кажет угол.
Про управление:
Нажимаешь и держишь одну кнопку- крутится в одну сторону, соответственно и с другой кнопкой.
Даже программу сделал, датчик...
Сначала думал на реле, но проще поставить в мотор два оптрона со встечно включёнными входами
и вывести всего два провода управления и два на питание, да и развязка не помешает.
Всё встало из-за того, что надо противостоять ветровой нагрузке, а то выломает всё это с крыши к ...
Всё встало из-за того, что надо противостоять ветровой нагрузке, а то выломает всё это с крыши к ...
Народ ставит актуаторы помощнее, чем для тарелок-сателлитов. :) А Вы хотите такую игрушку на крышу поставить.
Куда уж мощьнее, 140 сантиметров тарелки- 80 км в час, 85 см- 140 км в час.
Проблемма поднять ось мотора на полметра над крышей. На каком-то треугольнике.
Крыша 45 градусов на Юг, лежит бетонная черепица, которая никак не закреплена,
пластины держат друг-друга по бокам и сверху, вес каждой около 5 кг.
Их можно свободно сдвигать вверх, под верхнюю.
http://www.citym.ru/services/stroitelstvo/krovlya/cherepitsa-peschano-ts...
Под ней только рейки 40х40 за которые она держится от съезжания вниз. ЗакрепИться можно только за них,
подсунув тонкую (4-5мм мах) металлическую пластину вверх до рейки, а это 30 сантиметров.
И так 4 раза. Нежёсткая конструкция получается...
Проблемма поднять ось мотора на полметра над крышей. На каком-то треугольнике.
Не мучайтесь с трекером, положите панели на крышу ( на проставки 10см ) и над панелями - гребенку для снегоудержания. По деньгам, что трекер нормальный сделать, что докупить на это же количество денег дополнительных панелей... На форумхаузе это не раз пережевывали. :)
Вот и я хочу сделать что-то похоже на трекер, в целом алгоритм понятен, спрашиваем два датчика где солнце, крутим туда панель и засыпаем на 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(); }Как-то так да не так, нужно с фоторезисторими играться...
Возможно кто-то что-то подскажет?
Уважаемый Borland. Интересный проект. Только мне неясно каким макаром мотоподвес подключен к ардуине?