Solar tracker
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.
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.
Solar tracker
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.
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
Re: Solar tracker
... 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 ?!
Dále v originále je dvakrát pin A3
má být
přikládám oba sketche - bude to líp vidět
originál kod :
Váš upravený kod :
jen připomínky v rychlosti, nemám více času a bohužel jak otestovat
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
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
viděl jsem tam i jinak závorky v podmínkách dole ...Top Right LDR Voltage Divider Point to the A2 pin
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);
}
Re: Solar tracker
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
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
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Solar tracker
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Solar tracker
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,
kod je odsud https://create.arduino.cc/projecthub/na ... ker-a71f8e
škoda jen, že o zdroji nepadla žádná zmínka,
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Solar tracker
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é.Hanz píše: ↑16 bře 2021, 09:09tak 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,
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Solar tracker
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.
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.
Re: Solar tracker
Souhlas!
Princip zmiňovaný AstroMIKem nerozhodí ani oblačnost nebo náhodné zatmění Slunce.
Princip zmiňovaný AstroMIKem nerozhodí ani oblačnost nebo náhodné zatmění Slunce.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Solar tracker
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 ...
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů