Go Down

Topic: Contador de Produtos Esteira (Read 3068 times) previous topic - next topic

kandangobh

Ola a todos,

Estou querendo desenvolver um contador de produtos de uma esteira usando um LDR e um laser, fiz duas programações distintas uma para a esteira e outra para o contador, só que quando juntos as duas o contador não funciona....

sera que minha programação esta errada??

#include <LiquidCrystal.h> //Declaração da biblioteca do display
#define rele1 8 // Sentido de rotação direto
#define rele2 7 // Sentido de rotação reversa
#define chavesel 9    // Chave de seleção ligada ao pino 9 digital
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Saidas digitais a serem utilizadas para interface com o display

int LDR_Pin = A0; //analog pin 0
int cont=0;

  void setup (){
  Serial.begin(9600); //Ativando o serial monitor que exibirá os valores lidos no sensor.
 
//pinMode(chavesel,INPUT);    //Definindo a chave de sentido de rotação como de entrada.
//pinMode(rele1,OUTPUT);  //Definindo o sentido de rotação direto.
//pinMode(rele2,OUTPUT); // Definimos o sentido de rotação reverso
//digitalWrite(rele1,LOW);
//digitalWrite(rele2,LOW);
//int LDRReading = analogRead(LDR_Pin);



  }

void loop()
{

 
pinMode(chavesel,INPUT);    //Definindo a chave de sentido de rotação como de entrada.
pinMode(rele1,OUTPUT);  //Definindo o sentido de rotação direto.
pinMode(rele2,OUTPUT); // Definimos o sentido de rotação reverso
digitalWrite(rele1,LOW);
digitalWrite(rele2,LOW);

int LDRReading = analogRead(LDR_Pin);

int chave=digitalRead(chavesel);
Serial.println(chave);
if(chave==LOW){
  delay(4000);
   digitalWrite(rele2,LOW);
  delay(1000);
  digitalWrite(rele1,HIGH);
  lcd.clear();
  lcd.print(" Rotacao Direta");
}
 
  if (LDRReading==900){
  delay(200);
  Serial.println(LDRReading);
 
  delay(1000);
  cont=cont+1;
  Serial.println(cont);
 
}
  delay(800);
if(chave==HIGH){
   delay(1000);
  digitalWrite(rele1,LOW);
  delay(400);
  digitalWrite (rele2,HIGH);
  lcd.clear();
  lcd.print(" Rotacao Reversa");
}
  if (LDRReading==900){
delay(200);
Serial.println(LDRReading);
 
  delay(1000);
  cont=cont+1;
  Serial.println(cont);

  }


delay(100);

}



tecdiego

Uma pergunta: Qual é o intervalo médio de um produto para o outro em sua esteira ?
Já tentou fazer esse teste manualmente?jogar o laser direto no LDR para ver se ele conta?
Me passe mais detalhes sobre esse projeto.

Mortis

A não ser que você vá mudar o sentido da porta, é indicado manter essa parte no setup:
Code: [Select]

pinMode(chavesel,INPUT);    //Definindo a chave de sentido de rotação como de entrada.
pinMode(rele1,OUTPUT);  //Definindo o sentido de rotação direto.
pinMode(rele2,OUTPUT); // Definimos o sentido de rotação reverso
digitalWrite(rele1,LOW);
digitalWrite(rele2,LOW);


outo problema é o uso de "delay();", quando usas delay(4000) o teu código para por 4 segundos, então se o estado do LDR mudar dentro deste intervalo, você perderá a mudança, então arranca esses delay fora ^^ (com a quantidade de pausas que teu código tem, fica difícil pegar algo em movimento)

bubulindo

Com quase 9 segundos em delays só por milagre é que isto vai funcionar mesmo. :|

O que é que o programa não faz quando juntas os dois?
This... is a hobby.

hugo007

Quote
sera que minha programação esta errada??

Sim sem duvida
Quote
Com quase 9 segundos em delays só por milagre é que isto vai funcionar mesmo. smiley-neutral

Pensa assim tens de conseguir fazer isso tudo sem usar um unico delay.Quando o fizeres entao a programaçao estará correcta :smiley-mr-green:
O que te deve estar a acontecer e o teu arduino está a "descansar" demasiado porque tu o mandas parar com delays enormes e provavelmente nao estas a apanhar as janelas temporais que ele esta activo ...
Le isto a ver se te dá umas luzes
http://arduino.cc/en/Tutorial/BlinkWithoutDelay
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

kandangobh

Ola obrigado por me dar uma luz em relação aos delays vou retira-los.
 

bubulindo

Tens de contar as pecas no flanco e garantir que não contas repetidamente a mesma peca.  ;)
This... is a hobby.

joaquim_lopes


Tens de contar as pecas no flanco e garantir que não contas repetidamente a mesma peca.  ;)



Para que não contes a mesma peça sugeria o seguinte. Crias uma variavel, por exemplo "flag".

if (LDRReading==900 && flag==0){
Serial.println(LDRReading);
 cont=cont+1;
 Serial.println(cont);
flag=1;
 }

if (LDRReading != 900)
{
flag=0;
}

Assim garantes que mesmo que a peça se encontre á frente do sensor, não a vai contar mais que uma vez.

Go Up