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
24.6.2017 v 13:56
#11862
Vojtěch Vosáhlo
Účastník
Tak jo, máte to hezky nastrukturované, vzal jsem to a trochu poupravil. Nejdůležitější jsou asi ty proměnné, pokud je budete používat místo pevného definování pinů tak můžete pak cokoliv jednoduše měnit. Definice pinu by tedy teď měla vypadat třeba takto: int pinR1 = 11;
Pak jsem vzal kód který jste si jen tak předepsal a hodil ho do reálně funkčího kódu.
Opět se ptejte na vše co vás napadne.
//Definice pinu
int pinR1 = ...; //pin s fotorezistorem 1
int pinR2 = ...; //pin s fotorezistorem 2
int pinRZ = ...; //pin s fotorezistorem na zapade
int pinRV = ...; //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 pr zapnuti trafa a napajeni motoru
//Definice hodnot pouzivanych programem
int maxTeplotaVzduchu = ...;
int minTeplotaVzduchu = ...;
int maxTeplotaVody = ...;
int minTeplotaVody = ...;
int maxRozdilSvetla = ...;
boolean ohrivej = ...; //promena skryvajici 1 nebo 0 bude urcovat jestli chceme ohrivat nebo ne
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 s koncovymi spinaci jako vstupy
pinMode(pinKoncakV, INPUT);
pinMode(pinKoncakZ, INPUT);
//nastav pin pro ovladani trafa jako vystup
pinMode(pinTrafo, OUTPUT);
}
void loop(){
//urcete si podminky kdy chcete aby se ohrivalo a kdy ne, podle toho se pak bude spoustet program dole
if(neco a neco je splneno){ //treba pokud (teplotaVzduchu > teplotaVzduchuMin && teplotaVody < maxTeplotaVody)
ohrivej = true;
}else{
ohrivej = false;
}
if(ohrivej){ //spust program pouze pokud chceme ohrivat
digitalWrite (pinTrafo,HIGH); // zapni filtraci a napájení transformátoru (půjde zapínat i samostatně přes vypínač)
while(digitalRead(pinKoncakV) == 0){ //otacej motorem na pravo dokud se nesepne koncak
digitalWrite(pinMotorP, HIGH);
}
digitalWrite(pinMotorP, LOW); //potom co se sepne koncak se smycka rozpadne a motor se vypne
if(abs(rozdilRezistoru) > maxRozdilSvetla){ //pokud je rozdil svetla mezi rezistory (absolutni hodnota, chceme znat jen rozdil, ne ne kterem je vic a na kterem mene) vetsi nez maxRozdil svetla pokracuj dale
//kod pro pohybovani panelem dokud se rozdil mezi rezistory nezmensi
}
}
}
int rozdilRezistoru(){
int R1 = analogRead(pinR1); //Přečtu napětí na prvním fotorezistoru
int R2 = analogRead(pinR2); //Přečtu napětí na druhém fotorezistoru
int rozdil = R1 – R2; //Rozdíl napětí
return rozdil; //Vrátím rozdíl napětí jako hodnotu
}