Mostrando postagens com marcador Projeto Interdisciplinar de Engenharia III. Mostrar todas as postagens
Mostrando postagens com marcador Projeto Interdisciplinar de Engenharia III. Mostrar todas as postagens

quinta-feira, 2 de junho de 2022

Seminário 3 do PI3: 02 de Junho de 2022

Link da apresentação:

Modelagem da curva dos motores servo:




Imagens do labview:










Código do  Arduino:

/*
  UCL - Faculdade do Centro Leste
  Projeto Interdiscipinar de Engenharia III
  Semestre 2022/01
  Curso: Engenharia Civil
  Aluno: Lucas Tiago Rodrigues de Freitas

  Referências: https://www.instructables.com/Arduino-Solar-Tracker/
  

*/

#include <Servo.h> // inclui a Servo library

Servo servolesteoeste; // Motor Servo leste-oeste
// stand leste-oeste servo

Servo servonortesul; // Motor Servo norte-sul
// stand norte-sul servo

// Conexões LDR nos pinos do Arduino
// nome = pino analógico;
int nordeste = A0; // sensor LDR Nordeste
int sudeste = A1; // sensor LDR Sudeste
int noroeste = A2; // sensor LDR Noroeste
int sudoeste = A3; // sensor LDR Sudoeste

int var = 0; // variável para contagem do while

//angulos iniciais
int angulolesteoeste = 83; // leste é 0 graus no motor // variável para contagem do angulo leste-oeste - de 3 a 165
int angulonortesul = 72; // norte é 0 graus no motor // variável para contagem do angulo na norte-sul - de 15 a 145

/*//erro dos motores para 90 graus
int erromotorlesteoeste = 25;
int erromotornortesul = 12;*/

//Início de curso
int inicioleste = 15;
int inicionorte = 15;

//Fim de curso
int fimoeste = 160;
int fimsul = 160;

// variável para comunicação Serial
int entradaserial;      // a variable to read incoming serial data into

int atraso = 50;

void aprumar(){
  //na direção leste-oeste
  for (angulolesteoeste; angulolesteoeste<fimoeste; angulolesteoeste+=1){ //angulos limites para movimento leste-oeste: 8 e 165
      servolesteoeste.write(angulolesteoeste);
      //Serial.print("Angulo do motor na direção leste-oeste: ");
      //Serial.println(angulolesteoeste);
      // enviando o valor das posições dos motores
                  Serial.print(angulolesteoeste);
                  Serial.print(";");
                  Serial.println(angulonortesul);
      delay(atraso);
        }
  for (angulolesteoeste; angulolesteoeste>65; angulolesteoeste-=1){ //angulos limites para movimento leste-oeste: 8 e 165
      servolesteoeste.write(angulolesteoeste);
      //Serial.print("Angulo do motor na direção leste-oeste: ");
      //Serial.println(angulolesteoeste);
      // enviando o valor das posições dos motores
                  Serial.print(angulolesteoeste);
                  Serial.print(";");
                  Serial.println(angulonortesul);
      delay(atraso);
        }
  //na direção norte-sul
  for (angulonortesul; angulonortesul<fimsul; angulonortesul+=1){ //angulos limites para movimento norte-sul: 8 e 165
      servonortesul.write(angulonortesul);
      //Serial.print("Angulo do motor na direção norte-sul: ");
      //Serial.println(angulonortesul);
      // enviando o valor das posições dos motores
                  Serial.print(angulolesteoeste);
                  Serial.print(";");
                  Serial.println(angulonortesul);
      //delay
      delay(atraso);
        }
  for (angulonortesul; angulonortesul>78; angulonortesul-=1){ //angulos limites para movimento norte-sul: 8 e 165
      servonortesul.write(angulonortesul);
      //Serial.print("Angulo do motor na direção norte-sul: ");
      //Serial.println(angulonortesul);
      // enviando o valor das posições dos motores
                  Serial.print(angulolesteoeste);
                  Serial.print(";");
                  Serial.println(angulonortesul);
      delay(atraso);
        }
}

/*void leitura(){
  Serial.print("LDR Nordeste: ");
      Serial.print(analogRead(nordeste));
      Serial.print(", ");
      Serial.print("LDR Sudeste: ");
      Serial.print(analogRead(sudeste));
      Serial.print(", ");
      Serial.print("LDR Noroeste: ");
      Serial.print(analogRead(noroeste));
      Serial.print(", ");
      Serial.print("LDR Sudoeste: ");
      Serial.println(analogRead(sudoeste));
}*/

/*void leituraangulos(){
  Serial.print(angulolesteoeste);
  Serial.print(";");
  Serial.println(angulonortesul);
  delay (10);
}*/

//funções de início e fim de curso
//Leste
void inicioleste20(){ //caso 1
  inicioleste = 15; //posição do motor para 20 graus;
  delay (10);
}
void inicioleste40(){ //caso 2
  inicioleste = 30; //posição do motor para 40 graus;
  delay (10);
}
void inicioleste60(){ //caso 3
  inicioleste = 45; //posição do motor para 60 graus;
  delay (10);
}
//Norte
void inicionorte20(){ //caso 4
  inicionorte = 3; //posição do motor para 20 graus;
  delay (10);
}
void inicionorte40(){ //caso 5
  inicionorte = 20; //posição do motor para 40 graus;
  delay (10);
}
void inicionorte60(){ //caso 6
  inicionorte = 38; //posição do motor para 60 graus;
  delay (10);
}
//Oeste
void fimoeste120(){ //caso 7
  fimoeste = 110; //posição do motor para 120 graus;
  delay (10);
}
void fimoeste140(){ //caso 8
  fimoeste = 130; //posição do motor para 140 graus;
  delay (10);
}
void fimoeste160(){ //caso 9
  fimoeste = 150; //posição do motor para 160 graus;
  delay (10);
}
//Sul
void fimsul120(){ //caso X
  fimsul = 99; //posição do motor para 120 graus;
  delay (10);
}
void fimsul140(){ //caso Y
  fimsul = 115; //posição do motor para 140 graus;
  delay (10);
}
void fimsul160(){ //caso Z
  fimsul = 132; //posição do motor para 160 graus;
  delay (10);
}

void rastrear(){
                 
      int ne = analogRead(nordeste); // Nordeste
      int se = analogRead(sudeste); // Sudeste
      int no = analogRead(noroeste); // Noroeste
      int so = analogRead(sudoeste); // Sudoeste
      
      int dtime = 50; // tempo de atraso
      int tol = 20; // tolerância de variação das médias dos LDRs combinados

      int medialeste = (ne + se) / 2; // média na direção leste
      int mediaoeste = (no + so) / 2; // média na direção oeste
      int medianorte = (ne + no) / 2; // média na direção norte
      int mediasul = (se + so) / 2; // média na direção sul

      int diflesteoeste = medialeste - mediaoeste; // Checa a diferença do leste para o oeste
      int difnortesul = medianorte - mediasul;// Checa a diferença do norte para o sul
    
      //posicionando o motor leste-oeste
      if (-1*tol > diflesteoeste || diflesteoeste > tol) // checa se a diferença leste-oeste está na tolerância, senão muda o angulo leste-oeste
      {
        if (medialeste > mediaoeste) //angulos limites para movimento vertical: 15 a 145
        {
          angulolesteoeste = --angulolesteoeste;
          if (angulolesteoeste < inicioleste) // 180 - restrição de movimento para proteger o motor
          {
            angulolesteoeste = inicioleste; //180
            }
            }
            else if (medialeste < mediaoeste)
            {
              angulolesteoeste= ++angulolesteoeste;
              if (angulolesteoeste > fimoeste) //0
              {
                angulolesteoeste = fimoeste;  //0
                }
                }
                servolesteoeste.write(angulolesteoeste);
                }

      if (-1*tol > difnortesul || difnortesul > tol) // checa se a diferença norte-sul está na tolerância, senão muda o angulo norte-sul
      {
        if (medianorte > mediasul) //angulos limites para movimento horizontal: 8 e 165
        {
          angulonortesul = --angulonortesul;
          if (angulonortesul < inicionorte) //0 - restrição de movimento para proteger o motor
          {
            angulonortesul = inicionorte; //era pra ser 0, mas o motor treme
            }
            }
            else if (medianorte < mediasul)
            {
              angulonortesul = ++angulonortesul;
              if (angulonortesul > fimsul) //180 - restrição de movimento para proteger o motor
              {
                angulonortesul = fimsul; // era pra ser 180, mas o motor treme
                }
                }     
                  servonortesul.write(angulonortesul);
                  }
                  // enviando o valor das posições dos motores
                  Serial.print(angulolesteoeste);
                  Serial.print(";");
                  Serial.println(angulonortesul);
                  //delay
                  delay(dtime);
                  // verificar se vai permanecer ou sair do while
                  
                  }

void setup() {
  // initialize serial communication:
  Serial.begin(9600);

  // Conexões dos motores servos
  // nome.attach(pin);
  servolesteoeste.attach(5); 
  servonortesul.attach(6);


  //aprumando o rastreador solar
  angulolesteoeste = servolesteoeste.read();
  
  

  // Entrada de dados dos LDRs das portas A0, A1, A2, A3
  pinMode(A0,INPUT); // LDR Nordeste
  pinMode(A1,INPUT); // LDR Sudeste
  pinMode(A2,INPUT); // LDR Noroeste
  pinMode(A3,INPUT); // LDR Sudoeste
}

void loop() {
  // see if there's incoming serial data:
  //if (Serial.available() > 0) {
    // read the oldest byte in the serial buffer:
    entradaserial = Serial.read();
    switch (entradaserial){
    // if it's an L (ASCII 76) turn off the LED:
    // if it's an L (ASCII 76) turn off the LED:
    //if (entradaserial == 'A') {
      case 'A':
      aprumar();
      break;
      /*case 'G':
      //leitura();
      break;*/
      case 'R':
      rastrear();
      break;
      //case 'L':
      //leituraangulos();
      //break;
      case '1':
      inicioleste20();
      break;
      case '2':
      inicioleste40();
      break;
      case '3':
      inicioleste60();
      break;
      case '4':
      inicionorte20();
      break;
      case '5':
      inicionorte40();
      break;
      case '6':
      inicionorte60();
      break;
      case '7':
      fimoeste120();
      break;
      case '8':
      fimoeste140();
      break;
      case '9':
      fimoeste160();
      break;
      case 'X':
      fimsul120();
      break;
      case 'Y':
      fimsul140();
      break;
      case 'Z':
      fimsul160();
      break;
      default:
      // enviando o valor das posições dos motores
                  Serial.print(angulolesteoeste);
                  Serial.print(";");
                  Serial.println(angulonortesul);
      //delay
      delay(atraso);
      break;            
    }
    /*/if (entradaserial == 'G') {
      Serial.print("LDR Nordeste: ");
      Serial.print(analogRead(nordeste));
      Serial.print(", ");
      Serial.print("LDR Sudeste: ");
      Serial.print(analogRead(sudeste));
      Serial.print(", ");
      Serial.print("LDR Noroeste: ");
      Serial.print(analogRead(noroeste));
      Serial.print(", ");
      Serial.print("LDR Sudoeste: ");
      Serial.println(analogRead(sudoeste));
    }
    
    // Para acionar o rastreador solar
    if (entradaserial == 'R') {
      rastrear();
    }*/
            
  }      


Agradeço sua leitura. Lembre-se de deixar seu comentário, caso seja necessário realizar alguma correção ou melhoria na postagem. Com dedicação, Lucas Tiago Rodrigues de Freitas, M.Sc.

quinta-feira, 12 de maio de 2022

Seminário 2 do PI3

Seminário 2 do PI3: 12 de maio de 2022


Agradeço sua leitura. Lembre-se de deixar seu comentário, caso seja necessário realizar alguma correção ou melhoria na postagem. Com dedicação, Lucas Tiago Rodrigues de Freitas, M.Sc.

quinta-feira, 24 de março de 2022

PI-3 Seminário 1 - 24/03/2022 - Projeto Solar Tracker

PI-3 Seminário 1 - 24/03/2022 - Projeto Solar Tracker

Apresentação disponível em:

Agradeço sua leitura. Lembre-se de deixar seu comentário, caso seja necessário realizar alguma correção ou melhoria na postagem. Com dedicação, Lucas Tiago Rodrigues de Freitas, M.Sc.

terça-feira, 13 de março de 2018

PI 3 - 13/03/2018

PI 3 - 13/03/2018





Lucas Tiago Rodrigues de Freitas -- // -- Definite Chief Aim: "Viver tecnologicamente, cientificamente, trabalhando em parceria com Deus, melhorando o meio ambiente e gerando prosperidade."