RuiViana

prog_v02.ino

Jul 25th, 2018
154
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //PROGRAMA��O RASTREAMENTO SOLAR
  2.  
  3. #include <Servo.h>                                  // Inclui a biblioteca dos servos motores
  4. //                                                  // Configurando motores DC
  5. Servo servohori;                                    // Config do motor horizontal
  6. int servoh = 160;                                   // posi��o inicial do servo horizontal
  7. int servohLimitHigh = 160;                          // maxima angula��o
  8. int servohLimitLow = 20;                            // minima angula��o
  9.  
  10. Servo servoverti;                                   // Config do motor vertical
  11. int servov = 0;                                     // posi��o inicial do servo vertical
  12. int servovLimitHigh = 30;
  13. int servovLimitLow = 23;
  14. //                                                  // Atribuindo os sensores LDR's
  15. int ldrtopl = 2;                                    // Superior esquerdo LDR
  16. int ldrtopr = 1;                                    // Superior direito LDR
  17. int ldrbotl = 3;                                    // Inferior esquerdo LDR
  18. int ldrbotr = 0;                                    // Inferrior direito LDR
  19.  
  20. int topl = 0;
  21. int topr = 0;
  22. int botl = 0;
  23. int botr = 0;
  24.  
  25. int dtime = 10;
  26.  
  27. int avgtop   = 0;                                   // Media superior dos LDRs
  28. int avgbot   = 0;                                   // Media inferior dos LDRs
  29. int avgleft  = 0;                                   // Media esquerda dos LDRs
  30. int avgright = 0;                                   // Media direita dos LDRs
  31. //--------------------------------------------------
  32. void setup ()
  33. {
  34.   Serial.begin(9600);
  35.   pinMode(9, OUTPUT);
  36.   pinMode(10, OUTPUT);
  37.   servohori.attach(10);
  38.   servohori.write(servoh);
  39.   servoverti.attach(9);
  40.   servoverti.write(servov);
  41.   delay(300);
  42. }
  43. //--------------------------------------------------
  44. void loop()
  45. {
  46.   //                                                // capturando valores analogicos de cada LDR
  47.   topl = analogRead(ldrtopl);
  48.   topr = analogRead(ldrtopr);
  49.   botl = analogRead(ldrbotl);
  50.   botr = analogRead(ldrbotr);
  51.  
  52.   dtime = 10;
  53.   //                                                // calculando a m�dia
  54.   avgtop = (topl + topr) / 2;                       // Media superior dos LDRs
  55.   Serial.print("avgtop : "); Serial.println(avgtop);
  56.  
  57.   avgbot = (botl + botr) / 2;                       // Media inferior dos LDRs
  58.   Serial.print("avgbot : "); Serial.println(avgbot);
  59.  
  60.   avgleft = (topl + botl) / 2;                      // Media esquerda dos LDRs
  61.   Serial.print("avgleft : "); Serial.println(avgleft);
  62.  
  63.   avgright = (topr + botr) / 2;                     // Media direita dos LDRs
  64.   Serial.print("avgright : "); Serial.println(avgright);
  65.  
  66.   Serial.println(" ");
  67.  
  68.   if (avgtop < avgbot)                              // Se a media superior for menor que a m�dia inferior entra no loop
  69.   {
  70.     servoverti.write(servov + 1);                   // Servo vertical se move pra cima
  71.     if (servov > servovLimitHigh)                   // Se o servo vertical estiver maior que o limite superior:
  72.     {
  73.       servov = servovLimitHigh;                     // �ngulo se manter no �ngulo de limite superior
  74.     }
  75.     delay(dtime);
  76.   }
  77.   if (avgbot < avgtop)                              // Caso n�o, m�dia inferior menor que m�dia superior:
  78.   {
  79.     servoverti.write(servov - 1);                   // Servo vertical se move pra baixo
  80.     if (servov < servovLimitLow)                    // Se o �ngulo do servo vertical estiver menor que o limite inferior:
  81.     {
  82.       servov = servovLimitLow;                      // �ngulo vale o �ngulo do limite inferior
  83.     }
  84.     delay(dtime);
  85.   }
  86.   servoverti.write(servov);
  87.  
  88.   if (avgleft > avgright)                           // Se m�dia esquerda for maior que m�dia da direita:
  89.   {
  90.     servohori.write(servoh + 1);                    // Servo horizontal se move pra direita
  91.     if (servoh > servohLimitHigh)
  92.     {
  93.       servoh = servohLimitHigh;
  94.     }
  95.     delay(dtime);
  96.   }
  97.   if (avgright > avgleft)                           // Se m�dida da direita for maior que m�dia da esquerda
  98.   {
  99.     servohori.write(servoh - 1);                    // Servo horizontal se move pra esquerda
  100.     if (servoh < servohLimitLow)
  101.     {
  102.       servoh = servohLimitLow;
  103.     }
  104.     delay(dtime);
  105.   }
  106.   servohori.write(servoh);
  107.   delay(50);
  108.   //                                                // Caso ocorra erro nos LDRs
  109.   if (topl == 0 && topr == 0 && botl == 0 && botr == 0)
  110.   {
  111.     servov = 23;
  112.     servoh = 80;
  113.     servoverti.write(servov);
  114.     servohori.write(servoh);
  115.   }
  116.   delay(dtime);
  117. }
RAW Paste Data