Solar tracker - Система ориентирования на Солнце


13.08.2014

Модель системы ориентирования на Солнце.

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

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

solar tracker solar tracker

Для ориентирования по двум осям я пытался использовать три сенсора. Для нормальной работы такой системы приходилось сначала ориентировать систему по одной оси, например в горизонтальной. А после того, как уровень сигналов от двух сенсоров выровняется, корректировать систему по вертикали. Но такой подход оказался хотя и интересным, однако не совсем технически грамотным. На самом деле, цена еще одного сенсора настолько мала, что проще сделать два независимых канала с 4-мя сенсорами. Это ускорит ориентирование по двум осям.

solar tracker

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

solar tracker solar tracker solar tracker solar tracker solar tracker solar tracker

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

Логично чтобы система ориентирования на солнце работала от солнечной энергии, поэтому уровень потребления электроэнергии должно быть как можно более экономичным. Хочу заметить, что Солнце по небосводу движется неторопливо, поэтому хватит маломощного двигателя с редуктором, у которого передаточное число 200 и больше. Итак, дела пошли лучше, когда у меня появился такой редуктор. К редуктору присоединил миниатюрного двигатель. Для управления направлением вращения двигателя была изготовлена ​​мостовая система. Опросы фоторезисторов и управления двигателем выполняет микроконтроллер. Хватило бы и простого компаратора, но в перспективе микроконтроллер должен выполнять еще некоторые сопутствующие функции.

Итак, конечная схема для ориентирования по дной оси такая:

solar tracker scheme

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

Программа для микроконтроллера выглядит так:


#include <stdio.h>
#include <avr/io.h>

//========================= ADC ============================
void adc_init(void){
  ADCSRA = _BV(ADEN) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2);
}

uint16_t adc_read(uint8_t ch){
  // set channel (VREF = VCC)
  ADMUX = _BV(REFS0) | (ch & 0x1F);
  // clear hardware "conversion complete" flag
  ADCSRA &= ~_BV(ADIF);
  // start conversion
  ADCSRA |= _BV(ADSC);

  // wait until conversion complete
  while(ADCSRA & _BV(ADSC));

  // read ADC (full 10 bits);
  return ADC;
}
//==========================================================
// Output PINs
#define OFF0 PORTB |= _BV(PINB0)
#define OFF1 PORTB |= _BV(PINB1)

#define ON0 PORTB &= ~_BV(PINB0)
#define ON1 PORTB &= ~_BV(PINB1)

int main( void )
{
  uint16_t adc0, adc1;

    // Enable Output PINs
	DDRB |= _BV(PINB0) | _BV(PINB1);

	adc_init();
	adc_read(0);

	while(1){
		// ADC reading
		adc0 = adc_read(0);
		adc1 = adc_read(1);

		// Compare ADC results
		if (adc0 > (adc1+100)) {
			OFF1;
			ON0;
		}
		else {
			if (adc1 > (adc0+100)) {
				OFF0;
				ON1;
			}
			else {
				OFF0;
				OFF1;
			}
		}
	}
}

Успехов!

Смотри также:

Коментарі:
Teh говорить:
06.02.2020 12:59
Доброе время суток! Подскажите по fuse , их оставить по умолчанию?
andre говорить:
08.02.2020 16:58
Да, фьюзы можно не трогать.

Додати коментар

* - обов'язкові поля

Архіви