Close

Odpověď na: Otáčení solárního panelu za sluncem

Úvodní stránka Fórum Vaše projekty Arduino Otáčení solárního panelu za sluncem Odpověď na: Otáčení solárního panelu za sluncem

#11880
marvik.jiri
Účastník

Konečně jsem po několika hodinách něco spáchal. Je to zatím jen nadefinování, natočení do výchozí pozice a zapnutí filtrace-transformátoru. Můžete mi potvrdit, zda by to takto mohlo fungovat nebo dělám hlouposti.

//Definice pinu
int pinR1 = A0; //pin s fotorezistorem 1
int pinR2 = A1; //pin s fotorezistorem 2
int pinRZ = A2; //pin s fotorezistorem na zapade
int pinRV = A3; //pin s fotorezistorem na vychode
int pinMotorP = …; //pin s rele spoustejici motor doprava
int pinMotorL = …; //pin s rele spojstejici motor doleva
int pinKoncakV = .. ; //pin s koncovym spinacem na vychode
int pinKoncakZ = …; //pin s koncovym spinacem na zapade
int pinTrafo = …; //pin s rele pro zapnuti trafa napajeni motoru
int pinFiltr = …; //pin s rele pro zapnuti filtrace
int pinTepVzd = A4; //pin na čidlo teploty vzduchu
int pinTepVod = A5; //pin na čidlo teploty vody
//int pinTlacFiltr = …; // pro ruční zapnutí/vypnutí filtrace !!! – zatím nepoužito

//Definice hodnot pouzivanych programem
int maxTeplotaVzduchu = …;
int minTeplotaVzduchu = …;
int maxTeplotaVody = …;
int minTeplotaVody = …;
int maxRozdilSvetla = …; //30
int minSvetloRV = …; // čeká na minimální hodnotu pro zapnutí filtrace
int minSvetloRZ = …; //pokud bude nižší tak program vypne a čeká do svítání na R1
// vložit rozdíl mezi pevnými fotorezistory pro otočení solaru do stínu při dosažení určité teloty vody
int RozdilSvetla = …; // pokud bude voda teplejší jak … tak se bude solar otáčet na stranu k nižší hodnotě světla a odstiňovat další ohřev
boolean nasleduj = …; //promena skryvajici 1 nebo 0 bude urcovat jestli chceme ohrivat nebo ne
boolean stin = …; //promena skryvajici 1 nebo 0 bude urcovat jestli chceme odstinit ohrev nebo ne

//pro seriovou linku
int pinR1_value = A0; //pin s fotorezistorem 1
int pinR2_value = A1; //pin s fotorezistorem 2
int pinRZ_value = A2; //pin s fotorezistorem na zapade
int pinRV_value = A3; //pin s fotorezistorem na vychode

void setup()
{
//nastav piny pro ovladani motoru na vystupy
pinMode(pinMotorP, OUTPUT);
pinMode(pinMotorL, OUTPUT);
//nastav piny fotorezistoru jako vstupy
pinMode(pinR1, INPUT);
pinMode(pinR2, INPUT);
pinMode(pinRZ, INPUT);
pinMode(pinRV, INPUT);
//nastav piny teplotních čidel jako vstupy
pinMode(pinTepVod, INPUT);
pinMode(pinTepVzd, INPUT);
//nastav piny s koncovymi spinaci jako vstupy
pinMode(pinKoncakV, INPUT);
pinMode(pinKoncakZ, INPUT);
//nastav pin pro ovladani trafa a filtrace jako vystup
pinMode(pinTrafo, OUTPUT);
pinMode(pinFiltr, OUTPUT);
//nastav pin tlačítka pro ruční zapnutí filtrace
//pinMode(pinTlacFiltr, INPUT); zatím nepoužito
{
Serial.begin(9600);
Serial.println(„Pripojeno“);
}
}

void loop()
{
Serial.println(„R1“);
pinR1_value = analogRead(pinR1); //čte hodnoty fotorezistoru R1
Serial.println(pinR1_value); //zobrazí hodnoty R1 na seriove lince
Serial.println(„R2“);
pinR2_value = analogRead(pinR2); //čte hodnoty fotorezistoru R2
Serial.println(pinR2_value); //zobrazí hodnoty R1 na seriove lince
Serial.println(„RZ“);
pinRZ_value = analogRead(pinRZ); //čte hodnoty fotorezistoru RZ
Serial.println(pinRZ_value); //zobrazí hodnoty R1 na seriove lince
Serial.println(„RV“);
pinRV_value = analogRead(pinRV); //čte hodnoty fotorezistoru RV
Serial.println(pinRV_value); //zobrazí hodnoty R1 na seriove lince
Serial.println(„konec“);
delay(1000); //wait
}
{
// Po rozednění natočení na východ
// po rozednění se se solární panel natočí k východu, když hodnota na R1 vzroste nad určitou hodnotu
if(minSvetloRV > 120) digitalWrite (pinMotorP = HIGH);
while(digitalRead(pinKoncakV) == 0){ //otacej motorem na pravo dokud se nesepne koncak
digitalWrite(pinMotorP, LOW);
while(digitalRead(pinKoncakV) == 1){ //zastav otaceni motorem na pravo – je sepnut koncak
digitalWrite(pinMotorP, LOW);
}
}
}
{
// FILTRACE ZAP-VYP
// po rozednění se sepne filtrace, když hodnota na RV vzroste nad určitou hodnotu zapne se filtrace
if(minSvetloR1 > 120) digitalWrite (pinFiltr = HIGH);
// po schování slunce za horizont se filtrace vypne, když hodnota na RZ klesne pod určitou hodnotu
if(minSvetloR2 < 140) digitalWrite (pinFiltr = LOW); // musí být větší hodnota, aby se to nevyplo hned po zapnuti
}
{
// Transformátor ZAP-VYP
// po rozednění se sepne trafo, když hodnota na R1 vzroste nad určitou hodnotu, která je vyšší než hodnota filtrace
if(minSvetloR1 > 80) digitalWrite (pinTrafo = HIGH);
// po schování slunce za horizont se trafo vypne, když hodnota na R2 klesne pod určitou hodnotu, která je vyšší než hodnota filtrace
if(minSvetloR2 < 95) digitalWrite (pinTrafo = LOW);
}