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

#11921
marvik.jiri
Účastník

Díky za vysvětlení.

Asi se v tom začínám plácat… Mám to opravené správně?

Asi ještě přidám na A4 ten potenciometr pro změnu výchozích hodnot.

//Definice pinu
#define pinR1 A0 //pin s fotorezistorem 1
#define pinR2 A1 //pin s fotorezistorem 2
#define pinRZ A2 //pin s fotorezistorem na zapade
#define pinRV A3 //pin s fotorezistorem na vychode
#define pinTepVzd 3 //pin na čidlo teploty vzduchu
#define pinTepVod 4 //pin na čidlo teploty vody
#define pinKoncakV 5 //pin s koncovym spinacem na vychode
#define pinKoncakZ 6 //pin s koncovym spinacem na zapade
#define pinMotorP 7 //pin s rele spoustejici motor doprava
#define pinMotorL 8 //pin s rele spojstejici motor doleva
#define pinTrafo 9 //pin s rele pro zapnuti trafa napajeni motoru
#define pinFiltr 10 //pin s rele pro zapnuti filtrace
#define pinTlacFiltr 11 // pro ruční zapnutí/vypnutí filtrace

//Definice hodnot pouzivanych programem
int minTeplotaVzduchu = 25; //°C
int maxTeplotaVody = 28; //°C
int maxRozdilSvetla = 20; //20 = zatím odhad

// sem ještě dát zda je vyšší hodnota na R1 než // svítání
int minSvetloRV = 150; // čeká na minimální hodnotu pro zapnutí filtrace
int minSvetloRZ = 180; //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; //pin s fotorezistorem 1
int pinR2_value; //pin s fotorezistorem 2
int pinRZ_value; //pin s fotorezistorem na zapade
int pinRV_value; //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);
pinMode(pinTlacFiltr, INPUT);
//nastav pin tlačítka pro ruční zapnutí filtrace
//pinMode(pinTlacFiltr, INPUT); zatím nepoužito
}
{
Serial.begin(9600);
Serial.println(„Spojeno“);
}

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);
}