Solar tracker - Система орієнтування на Сонце
Модель системи орієнтування на Сонце.
Під час моїх сонячних дослідів постало питання так званої системи sun tracking, тобто системи орієнтування на Сонце. Такі системи використовують для автоматичної орієнтації таких приладів як сонячні теплові концентратори, сонячні батареї, тощо. У sun tracking системах використовують датчики освітлення, за допомогою яких визначається найбільш оптимальне положення до сонця. Обертання системи здійснює двигун з редуктором.
Для коррекціі положення по одній осі використовується два датчика освітлення, в даному випадку фоторезистори. Вони розташовані таким чином, щоб при оптимальній орієнтації на Сонце, рівень сигналів датчиків був однаковий. Якщо вісь пристрою орієнтовано на сонце не точно, відповідно, один з датчиків освітлюється менше. А різниця між рівнями сигналів датчиків визначає в яку сторону треба обертати систему (двигун).
Для орієнтування по двом осям я намагався використати три сенсора. Для нормальної роботи такої системи доводилося спочатку орієнтувати систему по одній осі, наприклад в горизонтальній. А після того, як рівень сигналів від двох сенсорів вирівняється, коригувати систему по вертикалі. Але такий підхід виявився хоча і цікавим, проте не зовсім технічно грамотним. Насправді, ціна ще одного сенсора настільки мала, що простіше зробити два незалежних канали з 4-ма сенсорами. Це прискорить орієнтування по двом осям.
Спочатку я розташував сенсори таким чином, щоб вони були направлені під кутом, як зображено на малюнку (а). Ідея полягала у тому, що тільки при оптимальному освітленні сигнали з сенсорів будуть рівними. Такий підхід виявився хибним. Особливої різниці між сигналами двох сенсорів не було. Стабільно система запрацювала тільки з використанням перегородки між двома сенсорами (малюнок б,в). Перегородка затіняє один з сенсорів при неправильному орієнтуванні, що суттєво змінює різницю між сигналами фоторезисторів. Для збільшення точності орієнтування сенсори повинні бути розташовані якнайближче один до одного, а перегородка бути якомога довшою (малюнок г, д). Також можливо використання двох перегородок дивись малюнок (є).
Перші експерименти я проводив, використовуючи сервомашинки. Але вони не зовсім підходять до цієї задачі. По-перше, сервомашинки досить багато споживають електроенергії, навіть коли не рухаються. По друге, вони мають внутрішній зворотній зв`язок за положенням, що тільки заважало. По-третє, керувати сервоприводами треба виключно мікроконтролером. Хоча схема і була технічно недосконалою, цяцька вийшла кумедна. За ліхтариком "головою" крутила дуже весело.
Логічно щоб система орієнтування на сонце працювала від сонячної енергії, тому рівень споживання електроенергії має бути якомога економічнішим. Хочу зауважити, що Сонце по небосхилу рухається неквапливо, тому вистачить малопотужного двигуна з редуктором, у якого передаточне число 200 та більше. Отже, справи пішли ліпше, коли у мене з`явився такий редуктор. До редуктора приєднав мініатюрного двигуна. Для керування напрямком обертання двигуна була виготовлена мостова система. Опитування фоторезисторів та керування двигуном виконує мікроконтролер. Вистачило б і простого компаратора, але в перспективі мікроконтролер мав виконувати ще деякі функції.
Отже, кінцева схема для орієнтування по дній осі така:
Перевага схеми у тому, що вона не потребує дотримання точних номіналів резисторів та налаштування. Недолік - наявність микроконтролера, який треба програмувати. Але цей недолік нівелюється коли мікроконтролер виконує додаткові функції.
Програма для мікроконтролера виглядає так:
#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;
}
}
}
}
Успіхів.
Дивись також:
Недавні записи
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
- U-FOC - Векторне керування безколекторними моторами
- FOC - своя реалізація векторного керування. Підбиваю підсумки 2022 року
- Конструктор регуляторів моторів. Підбиваю підсумки 2022 року.
- Чому трифазні мотори стали такими популярними?
Tags
html uart pmsm hih-4000 mpu-9250 soldering dc-dc ethernet mpx4115a foc programmator ssd1306 bmp280 examples java-script raspberry-pi tim servo books eb-500 mongodb nodemcu docker wifi lcd adc max1674 dht11 python ssd1331 mpu-6050 remap rtc piezo solar displays led web css options dma gpio usart sms rfid esp8266 i2c 3d-printer usb pwm bldc atmega sensors barometer rs-232 git websocket motor meteo encoder bluetooth brushless timer watchdog eeprom battery st-link ngnix nvic smd stm32 flask gps capture avr bme280 flash bkp exti
Архіви