Esse é um projeto de um chuveiro com temporizador e um sensor de presença. O que ele faz é o seguinte: Quando você dá um pulso em um botão para ligar o chuveiro, esse botão aciona uma válvula solenoide que libera a água . A válvula permanece ligada por 10 min. Porem a válvula só é ligada se um sensor óptico estiver acionado, caso contrario ela não liga. Isso que dizer que o chuveiro só liga se a pessoa estiver embaixo dele, para evitar desperdício de água. E existe uma ultima condição: caso o sensor óptico seja desativado durante o ciclo de 8 min,ou seja, a pessoa sai do chuveiro para se ensaboar a válvula desativa,cortando a água porém o tempo continua contando. Alguns usuários me deram várias dicas uteis para aprender como fazer essa programação. E no final consegui programar, porém não sei se fiz certo e não tenho como testar agora.

Eu fiz muita besteira, ou está mais ou menos certo? 

PS: Comecei a ter aulas de programação esse semestre. Então perdoem erros absurdos.

//PULSO NO BOTÃO TEMPORIZA A SAÍDA
#define botao = 10; //Define o pino do botão
#define sensor = 13; //Define o pino do sensor
const int solenoide = 12; //Define o pino da solenoide
int solenoideState = LOW; //Define o estado inicial da solenoide

long previousMillis = 0; //variável do controle do tempo
long solenoideInterval = 600000; //tempo em ms do da solenoide

void setup() {
// CONFIGURA AS PORTAS COMO ENTRADA E SAIDA
pinMode(solenoite, OUTPUT); //solenoide = saida
pinMode(sensor, INPUT); //sensor = entrada
pinMode(botao, INPUT); //botao = entrada
digitalWrite(botao, 1); //resistor interno do arduino

// GARANTE NIVEL LOGICO BAIXO/ALTO NAS IN/OUT
digitalWrite(solenoide, LOW);
digitalWrite(sensor, LOW);
digitalWrite(botao, HIGH);
}

void setup() {
// LÊ O BOTÃO E CASO SEJA PRESSIONADO LE O SENSOR
if (digitalRead(botao) == LOW) {
if (digitalRead(sensor) == HIGH) {
// SE O SENSOR + BOTÃO = LIGADOS, ACIONA O TEMPO
unsigned long currentMillis = millis(); //tempo atual em ms
if (currentMillis - previousMillis > solenoideInterval) {
previousMillis = currentMillis; //Salva o tempo atual

// AGORA ACIONA A SOLENOIDE VERIFICANDO COMO ELA ESTAVA ANTERIORMENTE
if (solenoideState == LOW) {
solenoideState = HIGH;

digitalWrite(solenoide, solenoideState); //DESATIVA A SOLENOIDE APOS O TÉRMINO DO TEMPO
}
}
}
}
}

void loop() {
if (digitalRead(sensor) == LOW) { // LOOP QUE VERIFICA SE O SENSOR DESATIVA, CASO SIM DESLIGA A ÁGUA MAS NÃO INTERROMPE O TEMPO.
solenoide = LOW;
} else {
solenoide = HIGH;
}
}

Exibições: 582

Responder esta

Respostas a este tópico

Tenta colocar todo o código que esta dentro de SETUP, e colocar dentro do LOOP.

O que esta dentro de SETUP executa uma unica vez.

Mas seu por no loop, ele não vai ficar reiniciando o timer o tempo todo?

na teoria, não vai ressetar.

tirado do site do arduino:

Description

Returns the number of milliseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 50 days.

Ou seja, depois de aproximadamente 50 dias, vai dar erro.

Para corrigir, teria que reiniciar o sistema todo dia, deve ter algum jeito automatico de fazer isso.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço