/*
*Autor: Rivon Silvério Data: 22 set. 2023 Microcontrolador: ESP32 - 30 Pinos
*Obejetivo: Controlar uma esteira atráves de um sensor contador de peças, sensor de presença e
*um sensor de peso. O limite do contador é nove e deve ser indicado por um display de 7 segmentos.
*O sensor de presença é responsável ver se a caixa está em posição para o recebimento dos objetos.
*O sensor de peso está ajustado para uma relação de 0.01g/bit.
* ~~~~~Código incompleto~~~~~
*/
//-----------------------------------------Definição dos pinos-----------------------------------------
#define botao_ativar 4 // Inicia o processos da esteira (Switch direito)
#define motor_esteira 19 // Representado por um led roxo
#define sensor_peso 35 // Potenciômetro
#define sensor_caixa 5 // Sensor para ver se a caixa está em posição para receber o objeto (Switch esquerdo)
#define sensor_objeto 34 // Sensor para saber quantos objetos estão passando na esteira (Bt. Vermelho)
#define luz_alerta 21 // Led verde
#define luz_erro 22 // Led vermelho
#define zerar 18 // Zerar o contador de objetos (Bt. Preto)
#define a 25 // Pino do display
#define b 26
#define c 27
#define d 14
#define e 12
#define f 33
#define g 32
//-----------------------------------------Declaração das variáveis-----------------------------------------
int unsigned quantidade, estado = 0;
//-----------------------------------------Código principal-----------------------------------------
void setup() {
//Define os pinos de saída e entrada
Serial.begin(115200);
pinMode(botao_ativar, INPUT);
pinMode(sensor_peso, INPUT);
pinMode(sensor_objeto, INPUT);
pinMode(sensor_caixa, INPUT);
pinMode(motor_esteira, OUTPUT);
pinMode(luz_alerta, OUTPUT);
pinMode(luz_erro, OUTPUT);
pinMode(zerar, INPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop() {
while(true){ // O botão de ativação foi colocado em cada condição para garantir a interrupção geral quando acionado
if(digitalRead(sensor_caixa) & quantidade < 9 & digitalRead(botao_ativar)){ // Se a caixa estiver em posição e o contador estiver menor que nove
digitalWrite(motor_esteira, 1); // Ativa a esteira
digitalWrite(luz_erro, 0); // Garante que o alarme está desligado
digitalWrite(luz_alerta, 0); // Garante que o alerta esteja desligado
while(digitalRead(sensor_caixa) & digitalRead(botao_ativar)){ // Enquanto a caixa estiver em posição
if(digitalRead(sensor_objeto)){ // Se o sensor detectar um objeto
quantidade++; // Adiciona um no contador
//Serial.println(quantidade);
delay(100); // Delay para evitar contabilizar mais de um pulso
}
switch(quantidade){
case 0:
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 0);
break;
case 1:
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
break;
case 2:
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 1);
break;
case 3:
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 1);
break;
case 4:
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
break;
case 5:
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
break;
case 6:
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
break;
case 7:
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
break;
case 8:
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
break;
case 9:
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
break;
}
if(quantidade == 9){ // Se o limite for atingido
break; // Sai do laço
}
}
}
if(quantidade >= 9 & digitalRead(sensor_caixa) & digitalRead(botao_ativar)){ // Se o contador estiver no limite e a caixa estiver em posição
digitalWrite(motor_esteira, 0); // Desliga o motor para não sobrecarregar a caixa
digitalWrite(luz_erro, 0); // Garante que o alarme está desligado
while(digitalRead(botao_ativar) & digitalRead(sensor_caixa)){
estado = !estado;
digitalWrite(luz_alerta, estado); // Liga a luz de alerta indicando a necessidade de troca da caixa
delay(500);
if(digitalRead(zerar)){
quantidade = 0; // Simula um operador trocando a caixa cheia
break;
}
}
}
if(digitalRead(sensor_caixa) == 0 & digitalRead(botao_ativar)){ // Se não houver nenhuma caixa posicionada
estado = !estado;
digitalWrite(luz_erro, estado); // Pisca a luz de alerta de erro
digitalWrite(motor_esteira, 0); // Para a esteira
digitalWrite(luz_alerta, 0);
delay(500);
}
while(analogRead(sensor_peso) <= 1400 || analogRead(sensor_peso) >= 2700 & digitalRead(botao_ativar)){
estado = !estado;
digitalWrite(motor_esteira, 0);
Serial.println("!!! Fora da faixa de peso !!!");
digitalWrite(luz_alerta, estado);
delay(200);
}
digitalWrite(motor_esteira, 0);
digitalWrite(luz_erro, 0);
digitalWrite(luz_alerta, 0);
}
}