Boa noite pessoal. Sou novo aqui e achei muito interessante este forum. Sou profissional da área elétrica conheço o básico de programação e estou desenvolvendo um projeto de controle de um forno elétrico pelo arduíno. Estou querendo utilizar um potenciômetro para que através dele eu consiga incrementar o tempo que eu deseje que a saída esteja atuada (intervalo de 1 minuto e máximo de 5 horas) quero também adicionar um botão para selecionar automático/manual, um botão para iniciar a contagem, e um botão para acionamento manual. Tenho um código que busquei aqui no site e tentei adapta-lo, mas porém não deu muito certo pois não estou conseguindo fazer ele trabalhar com o tempo que eu quero. Se alguém puder ajudar agradeço.

O código é esse:  Obs. (onde se diz válvula é a saída para o relé do forno)

#define botao 4 // Port para botão
#define valvula 12 // Port par valvula
#define pot A0 // Port para entada analogica

int posPot = 0; // Posicao do potenciomentro
int duracao = 0; // Duracao do tempo opeada
int botaoPres = 0; // indicador se botao foi pressionado
unsigned long tempo = 0; // Guarda tempo que valvula devera ficar operada
unsigned long tempoAtual = 0;
//--------------------------------------------
void setup()
{
pinMode(botao, INPUT_PULLUP); // Define botao como entrada em pullup
pinMode(valvula, OUTPUT); // Define valvula como saida
}
//--------------------------------------------
void loop()
{
posPot = analogRead(pot); // Le posicao do potenciometro
duracao = map(posPot, 0 , 2, 0 , 10000); // Mapeia de 0 a 10.000 ( 0 a 10.000 milisegundos)
if (digitalRead(botao) == LOW) // Se botao foi preessionado
{
delay(30); // Delay para debouncing
if (digitalRead(botao) == LOW) // Se botao continua pressionado
{
botaoPres = 1; // Informa que botao foi pressionado
tempoAtual = millis(); // Restaura o tempoAtual
}
}
if (botaoPres == 1) // Se indicar informa pressionado
{
if ((millis() - tempoAtual) < duracao) // Ser ainda nao passou o tempo de operada
{
digitalWrite(valvula,HIGH); // Opera valvula
}
else // Se passou o tempo operada
{
botaoPres = 0; // Desliga indicador
}
}
else // Se indicador desligado
{
digitalWrite(valvula,LOW); // Desliga valvula
}

}

Exibições: 694

Responder esta

Respostas a este tópico

Minha sugestão é dar um up tecnológico e colocar um display...

Com o display vc consegue fazer maravilhas! Vai valorizar muito seu produto.

Ajustar de 1 minuto a 5 horas com precisão não é uma boa ideia.. Seria como ajustar de 1 a 300.. Confundir 3 com 6 fica super fácil num potenciometro com final em 300. Nada recomendável.

Sugiro ainda colocar um display OLED:

https://www.google.com/search?q=display+oled+0.96&source=lnms&a...

Tudo que seu cliente sempre sonhou comprar.. 

Ok, estou inspirado hj, mas enfim. É muito complicado ajustar de 1 a 300 em um pot, melhor digital. Isso agrega valor a seu produto sem pesar tanto no orçamento. 

Com certeza meu caro Eduardo seria muito mais interessante com o display, mas como é apenas um projeto, preciso fazer funcionar com as peças que tenho disponível no momento,. Com relação a precisão, neste projeto não tem muita importância se variar um pouco, e o valor máximo pode ser diminuído pela metade, sabendo que na maioria das vezes vai ser usado por menos de uma hora.

a sua variavel duração esta como "int" coloca como " unsigned long"

  Perfeito Tiago!!!!  Funcionou exatamente da maneira que eu desejava muito obrigado pela dica. Agora é só melhorar um pouco mais o programa e incrementar mais algumas coisas. Vou considerar a dica do amigo Eduardo em utilizar o display digital para melhorar o projeto que certamente irá agregar muito ao equipamento e termos de precisão e estética. Porém vou subir um degrau de cada vez pois estou conhecendo aos poucos a linguagem de programação. Obrigado.

Você pode incrementar um blink em um LED, para que ele diminua o intervalo de acionamento do led, de acordo com o valor lido do potenciômetro, isso daria um feedback visual, ou algumas opções, tem muito aparelhos que só possuem um botão e um led, e da para fazer varias coisas com ele.

mas um display ajuda, mas o segredo do arduino é indo por partes msm, busque displays I2C.

Bons projetos!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço