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á.
}
}
Tags:
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!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por