Pages: [1]   Go Down
Author Topic: Contador de Produtos Esteira  (Read 930 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);

 }
 

Logged

Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Curioso
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 508
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A não ser que você vá mudar o sentido da porta, é indicado manter essa parte no setup:
Code:
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)
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3113
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

O que é que o programa não faz quando juntas os dois?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 28
Posts: 1434
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3113
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tens de contar as pecas no flanco e garantir que não contas repetidamente a mesma peca.  smiley-wink
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tens de contar as pecas no flanco e garantir que não contas repetidamente a mesma peca.  smiley-wink


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.
Logged

Pages: [1]   Go Up
Jump to: