Olá pessoal,

Fiz um sistema que ascende a luz ao entrar no quarto e apaga ao sair, ou seja, quando alguem passa ele inverte o estado da lampada (ligado/desligado). Porém se a pessoa fica na frente do sensor de ultrassom ele fica invertendo constantemente o estado. Queria uma soluçao no código para que acionasse a inversão do estado quando o sensor detecta a diminuiçao da distancia e volta para a distancia anterior, assim evitando oque está acontecendo.

Fico no aguardo galera. Abaixo está meu código:

const int Trig = 12; // O pino do Trig é o 12.
const int Eco = 13; // O pino do Eco é o 13.
int Rele = 8;
int estadoRele = LOW;

void setup()
{
Serial.begin (9600); // Vai imprimir na serial monitor os valores lidos.
pinMode (Trig, OUTPUT); // O pino 12 será de saída.
pinMode (Eco, INPUT); // O pino 13 será de entrada, ou seja, leitura.
pinMode (Rele, OUTPUT);

}
void loop ()
{
digitalWrite (Trig, LOW); // Pino de saído do Trig inicia-se baixo.
delayMicroseconds (2); // Tempo de 2 microssegundos.
digitalWrite (Trig, HIGH); // Pino 12 de saida do Trig, alto, ligado.
delayMicroseconds (10); // Tempo lógico alto de 10 microssegundos.
digitalWrite (Trig, LOW); // Voltar ao estado baixo. Isso irá disparar o módulo para que faça os 8 pulsos internamente, o cálculo, a média.
unsigned long duracao = pulseIn(Eco, HIGH); // Variável grande que é a duraçao do nivel logico do pino 12 do Trig, com função pulseIn que faz a verificação automática.
int distancia = duracao / 58;
Serial.println ("Distancia em cm:"); // imprime este nome no serial monitor.
Serial.println (distancia); // imprime os valores das distancias.
delay (50); // Le o sensor a cada 50 milissegundos. Bom para pegar todo movimento, se alguem passar correndo ainda pega.

digitalWrite (Rele, estadoRele); // Escreve na porta digital 8 do rele, que o estado é baixo (desligado).
if (distancia < 100) // Se a distância do sensor e do obstáculo que passar for menor que 100 centímetros.
{
delay (1100); // espera-se meio segundo para poder inverter o estado do led. Este tempo é para dar tempo da pessoa passar sem a luz ligar e desligar.
estadoRele = !estadoRele; // Inverte o estado atual do rele.
digitalWrite (Rele, !estadoRele); // E escreve na porta digital do rele, o estado contrario do que está.
}


}

Exibições: 616

Responder esta

Respostas a este tópico

Cara, Quando você estiver parado na frente do sensor o IF vai entrar em verdadeiro, certo? ou seja, mudará o estado do rele...Continuando na frente do sensor o if será verdadeiro novamente assim que o estado do rele se modificar, ou seja, ele vai apagar apos isso. Por isso fica piscando, entendeu?

Nao é isso, é um sensor ultrassonico, observo o codigo:

if (distancia <100) , e o sensor ultrassonico faz uma leitura periodica a cada 50 milissegundos, entao cada leitura ele inverte o estado se estiver menor que 100 centímetros. Eu precisava de um código que diz o seguinte:

quando a distancia reduzir abaixo de 100 e voltar ao estado inicial, ele inverte o estado da porta. assim simularia exatamente a passagem de uma pessoa pela porta com o sensor.

Obrigado.

if ( (dist < 100 ){
digitalWrite(rele, HIGH);
else{
digitalWrite(rele, LOW);

}

isso resolve porque quando você ficar na frente vai se manter menor que 100 e dessa forma manterá sempre ligado...só irá desligar quando sair da distância :)

Abraços!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço