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

#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
}