Estrutura física

Para a estrutura física foi pensada em uma armação feita de cano PVC, como modelada na imagem abaixo.

projeto
Figura 1 – Projeto realizado no Solid Works

Nessa estrutura os motores DC se encontram entre as duas esteiras e as câmeras Pixy e RaspiCam se encontram na estrutura suspensa e numa estrutura a parte, respectivamente.
Para a construção da estrutura se optou utilizar canos PVC pela leveza, facilidade de manuseio, preço e pela possibilidade de se desmontar a estrutura. Dessa forma foram utilizados vários metros de cano PVC soldável de 25mm, 4 canos de 30cm de PVC soldável de 20mm, 17 juntas T de 25mm e 15 joelhos de 25mm.

WhatsApp Image 2017-04-25 at 01.12.36
Figura 2 – Parte dos materiais utilizados

Após a montagem dos materiais se obteve a seguinte base da esteira:

WhatsApp Image 2017-04-25 at 01.13.07
Figura 3 – Base da esteira

Após esse processo foi adicionado o suporte da câmera Pixy e construído o suporte da câmera RaspiCam, como exibido na Figura 3, completando assim a construção da estrutura física.

esteira
Figura 4 – Estrutura completa da esteira

Estrutura Eletrônica

Para acionamento e controle das velocidades dos motores DC utilizados utilizou-se um Arduino UNO, um módulo Ponte H com CI L298N e um controle remoto e sensor IR. A ligação entre o Arduino UNO, a Ponte H e os Motores é descrita na Figura 4(a), e a ligação do controle e sensor IR com o Arduino UNO na Figura 5(b).

WhatsApp Image 2017-04-18 at 18.30.35
Figura 5(a) – Esquemático para a montagem dos motores DC e da Ponte H
Circuito_Arduino_Uno_IR-1024x566
Figura 5(b) – Esquemático para a montagem do circuito de recepção do sinal do controle remoto

Com esses circuitos em mente foi montado o circuito em placa PCB universal e o resultado se encontra na Figura 6. Essas placas foram colocadas dentro de uma caixa para proteção.

WhatsApp Image 2017-04-26 at 02.00.14
Figura 6 – Circuito de Controle

Estrutura do Software

Para o funcionamento da estrutura física com a eletrônica foi realizado upload do código de controle abaixo no Arduino UNO e realizado os testes de velocidades de rotação da esteira. Esse código recebe o sinal do controle remoto e de acordo com a tecla acionada liga/desliga os motores ou aumenta/diminui a velocidade de rotação dos mesmos.

#include 
#include 

#define MOTOR_A 1
#define MOTOR_B 2

//MOTOR A
int IN1 = 2;
int IN2 = 9;
int vA = 6;

//MOTOR B
int IN3 = 4;
int IN4 = 7;
int vB = 5;

int RECV_PIN = 11; //Pino 9 Recebe Sinal Controle IR
int LED_EST1 = 10;
int LED_EST2 = 8;
IRrecv irrecv(RECV_PIN);  
decode_results results;  
float armazena_valor;

//velocidades dos motores
int velocidadeA = 0;
int velocidadeB = 0;

//inicializa pinos
void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();// Inicializa o receptor IR  
  
  for (int i = 2; i  0){
    digitalWrite(LED_EST1, HIGH); //LED indicador de funcionamento da esteira 1
  }else{
    digitalWrite(LED_EST1, LOW);
  }
  if(velocidadeB > 0){
    digitalWrite(LED_EST2, HIGH); //LED indicador de funcionamento da esteira 1
  }else{
    digitalWrite(LED_EST2, LOW);
  }
  if (irrecv.decode(&results))//Se algum sinal for recebido 
  {
    armazena_valor = (results.value);
    if(armazena_valor == 0xFF629D){ //LIGA MOTORES
        if(velocidadeA < 150 && velocidadeB <150){
        velocidadeA = 150;
        velocidadeB = 150;
        acionaMotor(MOTOR_A, velocidadeA);//255 é o maximo
        acionaMotor(MOTOR_B, velocidadeB);
        }
    }else if(armazena_valor == 0xFF02FD){ //AUMENTA V DE A
        if(velocidadeA == 0){
          velocidadeA = 150;
          mudaVelocidade(MOTOR_A, velocidadeA);
        }else if(velocidadeA  150){
          velocidadeA -= 50;
          mudaVelocidade(MOTOR_A, velocidadeA);
        }
    }else if(armazena_valor == 0xFFA857){//AUMENTA V DE B
        if(velocidadeB == 0){
          velocidadeB = 150;
          mudaVelocidade(MOTOR_B, velocidadeB);
        }else if(velocidadeB  150){
          velocidadeB -= 50;
          mudaVelocidade(MOTOR_B, velocidadeB);
        }
    }if(armazena_valor == 0xFFC23D){//DESLIGA A
        velocidadeA = 0;
        mudaVelocidade(MOTOR_A, velocidadeA);
    }if(armazena_valor == 0xFF906F){//DESLIGA B
        velocidadeB = 0;
        mudaVelocidade(MOTOR_B, velocidadeB);
    }if(armazena_valor == 0xFF6897){//DESLIGA A E B
        velocidadeA = 0;
        velocidadeB = 0;
        mudaVelocidade(MOTOR_A, velocidadeA);
        mudaVelocidade(MOTOR_B, velocidadeB);
    }if(armazena_valor == 0xFFA25D){//LIGA A
        if(velocidadeA < 150){
          velocidadeA = 150;
          mudaVelocidade(MOTOR_A, velocidadeA);
        }
    }if(armazena_valor == 0xFFE21D){//LIGA B
        if(velocidadeB < 150){
          velocidadeB = 150;
          mudaVelocidade(MOTOR_B, velocidadeB);
        }
    }
    irrecv.resume();
  }  
  delay(100);
}
 
//funcao para acionamento individual de cada motor
void acionaMotor(int motor, int velocidade){
 if (motor == MOTOR_A){
 digitalWrite(IN1,HIGH); //pino de acionamento do sentido 
 digitalWrite(IN2,LOW);//pino de acionamento do sentido 
 analogWrite(vA,velocidade);//pino para a velocidade
 }
 else if (motor == MOTOR_B){
 digitalWrite(IN3,LOW);//pino de acionamento do sentido 
 digitalWrite(IN4,HIGH);//pino de acionamento do sentido 
 analogWrite(vB,velocidade);//pino para a velocidade
 }
}


void mudaVelocidade(int motor, int velocidade){
  if (motor == MOTOR_A){
   analogWrite(vA,velocidade);//pino para a velocidade
 }
 else if (motor == MOTOR_B){
   analogWrite(vB,velocidade);//pino para a velocidade
 }
}

O vídeo a seguir demonstra o funcionamento das duas esteiras em velocidade máxima utilizando a câmera Pixy para reconhecimento de objetos e a câmera RaspiCam para a realização do streaming de vídeo.

Estrutura Geral Monitoramento de esteira industrial – Process Solution