Solar tracker

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
CepoSVK
Příspěvky: 1
Registrován: 14 bře 2021, 11:55
Reputation: 0

Solar tracker

Příspěvek od CepoSVK » 14 bře 2021, 12:09

Ahojte, pomaham svojej dcere s projektom do skoly. Nasli sme si na YT video solarneho trackera: https://www.youtube.com/watch?v=Cg3fhdAnp9I&t

Problem nastal po vytlaceni dielov a zapojeni do zostavy. Kod arduina prikladam v prilohe.

V principe si myslim, ze Kod podla mna nieje spraveny na ruzicu s LDR konektormi kde su LDR umiestnene do pismena X, ale kde su umiestnene do stvorca. Prejavuje sa to napr. tak, ze servo, ktore ma otacat zostavou horizontalne nereaguje na zmenu odporu v LDR ktore su vlavo a vpravo ale na zmenu odporu spodneho resp vrchneho LDR.

Prepojenie LDR do inych pinov nepomaha rovnako ako prehodenie serva z horizonatlneho na vertikalne. Jednoducho vsetko nasvedcuje tomu, ze kod je pisany nie na takuto zostavu (rozlozenie LDR) : https://www.youtube.com/watch?v=HB-rClhsuPo ale na taketo https://www.youtube.com/watch?v=_6QIutZfsFs&t.

Moja otazka znie, ci by mi bol niekto ochotny pomoct so zmenou kodu, tak aby to vo vysledku pracovalo ako na tomto videu: https://www.youtube.com/watch?v=HB-rClhsuPo , odmena je ista.
Přílohy
projekt_aktualny_v2.ino
(2.43 KiB) Staženo 103 x

Hanz
Příspěvky: 262
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Solar tracker

Příspěvek od Hanz » 15 bře 2021, 00:29

... tady je citace originálu zapojení LDR, ... ale pozor na A-piny, tedy analogové piny Una nikoliv na digitální ...

Connect bottom left LDR voltage Divider point to A1 pin of Arduino.
Again, Connect Top Left LDR voltage Divider Point to A0 pin of the Arduino.
Similarly, Top Right LDR Voltage Divider Point to the A2 pin.
Finally, Connect the Bottom Right Voltage Divider Point of LDR to the A3 pin of the Arduino.

...Vaše varianta je na digitální piny ?!

Kód: Vybrat vše

// LDR pin connections
// name = analogpin;
int ldrlt = 3; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = 2; //LDR top rigt - BOTTOM RIGHT
int ldrld = 1; //LDR down left - TOP LEFT
int ldrrd = 0; //ldr down rigt - TOP RIGHT
Dále v originále je dvakrát pin A3

Kód: Vybrat vše

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT
int ldrld = A1; //LDR down left - TOP LEFT
int ldrrd = A3; //ldr down rigt - TOP RIGHT
má být
Top Right LDR Voltage Divider Point to the A2 pin
viděl jsem tam i jinak závorky v podmínkách dole ...
přikládám oba sketche - bude to líp vidět
originál kod :

Kód: Vybrat vše

#include <Servo.h> 


Servo horizontal; // horizontal servo
int servoh = 180; 
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX

Servo vertical; // vertical servo
int servov = 45; 
int servovLimitHigh = 60;
int servovLimitLow = 1;

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT
int ldrld = A1; //LDR down left - TOP LEFT
int ldrrd = A3; //ldr down rigt - TOP RIGHT

void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol) 
 {
 if (avt > avd)
 {
 servov = ++servov;
 if (servov > servovLimitHigh)
 {servov = servovLimitHigh;}
 }
 else if (avt < avd)
 {servov= --servov;
 if (servov < servovLimitLow)
 { servov = servovLimitLow;}
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 delay(5000);
 }
 horizontal.write(servoh);
 }
 
 delay(dtime);
 
}

Váš upravený kod :

Kód: Vybrat vše

#include <Servo.h> // include Servo library
// 180 horizontal MAX
Servo horizontal; // horizontal servo
int servoh = 180; // 90; // stand horizontal servo
int servohLimitHigh = 170;
int servohLimitLow = 10;
// 65 degrees MAX
Servo vertical; // vertical servo
int servov = 180; // 90; // stand vertical servo
int servovLimitHigh = 179;
int servovLimitLow = 1;
// LDR pin connections
// name = analogpin;
int ldrlt = 3; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = 2; //LDR top rigt - BOTTOM RIGHT
int ldrld = 1; //LDR down left - TOP LEFT
int ldrrd = 0; //ldr down rigt - TOP RIGHT
void setup(){
Serial.begin(4800);
horizontal.attach(9);
vertical.attach(8);
horizontal.write(90);
vertical.write(45);
delay(3000);
}
void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt
Serial.print(avt);
Serial.print(" ");
Serial.print(avd);
Serial.print(" ");
Serial.print(avl);
Serial.print(" ");
Serial.print(avr);
Serial.print(" ");
Serial.print(dtime);
Serial.print(" ");
Serial.print(tol);
Serial.println(" ");
if (-1*tol > dvert || dvert > tol) // check if the diffirence is in the tolerance else change vertical angle
 {
 if (avt > avd)
 {
 servov = ++servov;
 if (servov > servovLimitHigh)
 {
 servov = servovLimitHigh;
 }
 }
 else if (avt < avd)
 {
 servov= --servov;
 if (servov < servovLimitLow)
 {
 servov = servovLimitLow;
 }
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 delay(5000);
 }
 horizontal.write(servoh);
 }
 Serial.print(" ");
 Serial.print(servoh);
 Serial.print(" ");
 Serial.print(servov);
 Serial.print(" ");
 delay(dtime);
}
jen připomínky v rychlosti, nemám více času a bohužel jak otestovat ;)

Hanz
Příspěvky: 262
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Solar tracker

Příspěvek od Hanz » 16 bře 2021, 01:17

vyzkoušel jsem originál kod a zapojení - je plně funkční tak, jako na 10s videu ukazující grafickou simulaci.
Bohužel mám jen dva senzory, tak jsem použil 2ks tlačítkových spínačů jako náhradu za LDR, abych to nasimuloval.
A ano musí se opravit kod, viz výše o pinu A3, taky je zavádějící označení pinu v kodu, velice zbytečné je vertikální servo s hodnotou 179,náklon je velmi velký. Výpisy na serial monitoru vypisují hodnoty, ale moc se v nich nelze vyznat, pokud nevím o jaké hodnoty se jedná a neznám kod, navíc výrazně zpomalují rychlost přesouvání obou servo.
to jsou mé postřehy k zapojení a kodu, dále až budu mít komplet součástky
Obrázek
Přílohy
Solar trasker AForum 2021-03-16.png

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Solar tracker

Příspěvek od pavel1tu » 16 bře 2021, 07:36

Tak ten serial dej vyšší rychlost a nebude to tolik zdržovat, 9600 je opravdu málo když to vypisuje každý cyklus
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Hanz
Příspěvky: 262
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Solar tracker

Příspěvek od Hanz » 16 bře 2021, 09:09

tak jsem si myslel, že uvedený kod v prvním přízpěvku v příloze, je kod dotazovatele , ale ne ne ne ...
kod je odsud https://create.arduino.cc/projecthub/na ... ker-a71f8e
škoda jen, že o zdroji nepadla žádná zmínka, :(

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Solar tracker

Příspěvek od pavel1tu » 16 bře 2021, 14:20

Hanz píše:
16 bře 2021, 09:09
tak jsem si myslel, že uvedený kod v prvním přízpěvku v příloze, je kod dotazovatele , ale ne ne ne ...
kod je odsud https://create.arduino.cc/projecthub/na ... ker-a71f8e
škoda jen, že o zdroji nepadla žádná zmínka, :(
Nojo, setkávám se i stím, že lidi stáhnout z netu kod a hned editují v hlavičce své jméno, smutné.
Neodolal jsem, mám tu nové serva do větroně - je to super, když něco funguje na první dobrou ;)

A tento projekt známe na kroužku moc dobře, jen používáme Merkur, serva také Merkur a ten "X" - stačí ho udělat kratší a pootočit na "+" - funguje jak víno.
Po domácí malé meteostanici je toto a vozítko co sleduje čáru - nejoblíbenější projekt u dětí posledních 5 let.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Solar tracker

Příspěvek od AstroMiK » 16 bře 2021, 20:00

Já vůbec nechci ten projekt nějak shazovat, ale má to natáčení solárního panelu ve výsledku nějaký přínos?
Když si představím, že se musí trvale "živit" Arduino a k tomu ještě dvě neustále šíbující serva tak bych řekl, že to musí být naprosto ztrátové.
Spočtené ani vyzkoušené to nemám - je to jen osobní odhad.


Jak už jsem kdysi psal na nějakém fóru:
Dokázal bych si představit otáčení solárního panelu pomocí krokového motoru na ose, která bude sklopená tak, že bude mířit na Polárku (polární osa).
Tím bude natáčení panelu kopírovat obloukový pohyb Slunce po obloze.
Maximálně by se mohla po několika dnech druhým krokovým motorem korigovat měnící-se výška poledního Slunce nad jižním horizontem (deklinace) - v zimě by se panel nakláněl tak, aby mířil níže - v létě výše.
Hlavní (polární) osa by se otáčela přesně o 1 otáčku za den. Smozřejmě by se netočila pořád dokola, ale večer by rychle přejela ze severozápadu zpátky na severovýchod a čekala by do rána.
Otáčení hlavní osy by nemuselo být trvalé. Stačily by několikastupňové rychlé kroky prokládané třeba desetiminutovými pauzami, při kterých by Arduino přecházelo do SLEEP režimu - takže minimální odběr.

Astronomicky tohle není sice úplně přesné (googlujte pojmy jako "analema" a "časová rovnice"), takže panel by nebyl vždycky namířený úplně přesně na Slunce, ale těch pár stupňů rozdílu už nemá na výkon až tak velký vliv.

analytik
Příspěvky: 148
Registrován: 26 čer 2020, 12:48
Reputation: 0
Bydliště: Děčín

Re: Solar tracker

Příspěvek od analytik » 17 bře 2021, 06:27

Souhlas!
Princip zmiňovaný AstroMIKem nerozhodí ani oblačnost nebo náhodné zatmění Slunce.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Solar tracker

Příspěvek od pavel1tu » 17 bře 2021, 07:30

Souhlasím, nemá to žádný přínos, co se týče zisku energie ze sol.panelů.
Když už, natáčel bych to v cyklu třeba 15min a ne servy, která jsou určená na rychlou reakci, mají velký příkon - řešil bych to obyč.motorkem, převody a popřípadě mech. brzdou - krokové motory také žerou, když stojí. A asi podle času a výpočtu křivky slunce - jak se píše výše. Ale dle mne ten projekt toto nemá řešit.

Ten projekt v odkazu neřeší přínos ve formě více elektřiny ze solárních panelů. Je to projekt o ovládaní serv v reakci na nějaký podnět.
I na kroužku to berem jako vstup do ovládání serv, motorů atd. - ta radost, když se to otáčí za baterkou ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 23 hostů