ola boa tarde sou leigo no assunto ainda mais dr Rui escreveu este programa pra mim e eu gostaria de acrecentar este menu no display 

tecla4 menu a cada toque nesta  tecla menu1 temperatura tecla 2 e 3 aumenta e diminui o valor da temperatura  pra sair desta tela mais um toque na tecla4

 menu tela principal mostra a temperatura do sensor e a umidade 

menu1  ajusta a temperatura      /  saida a rele liga resistencia

menu2  ajusta umidade             / sida rele  liga secador

menu3  ajusta tempo de virar     saida rele   liga motor  

menu4  ajusta horas minutos

menu5 ajusta dias ligado

estou anexando o programa para ajuda tentei fazer mais sou leigo em arduino to comessando agora

 

*/
#include <LiquidCrystal.h> // Inclui a biblioteca do LCD
#include "DHT.h" // Inclui a biblioteca do DHT11

#define DHTPIN A1 // pino que estamos conectado
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd( 7, 8, 9, 10, 11, 12); // Pinos do LCD
const int Rele = 13; // Pino de Saída
const int Up = 2; // Pino do switch de Up
const int Dn = 3; // Pino do switch de Dn
const int DMenu = 4; // Pino do switch de Dn
float TempProg = 27; // Variavel com temperatura programada
long debouncing_time = 15; // Debouncing Time in Milliseconds
volatile unsigned long last_micros; // Variavel para deboucing
float celsius; // Varialvel para guardar valor de temperatura
byte humidade; // Varialvel para guardar valor de humidade


int contador = 0; // essa variavel vai controlar o loop do menu andando por ele opcões 0->1->2->3->0
int quantMenu = 3; // define quantas opcoes vao ter no menu


void setup()
{
lcd.begin(16, 2); // Inicia o LCD com dimensões 16x2(Colunas x Linhas)
pinMode(Rele, OUTPUT); // Port como saída
digitalWrite(Rele, LOW); // Desliga Rele
pinMode(DMenu, INPUT);
pinMode(Up, INPUT_PULLUP); // Port do switch Up como entrada e Pull-Up
pinMode(Dn, INPUT_PULLUP); // Port do switch Dn como entrada e Pull-Up
dht.begin(); // inicializa o Sensor
delay(1000); // Aguarda 1 seg antes de acessar as informações do sensor
attachInterrupt(1, PressUp, RISING); // Interrupt de botão ao ficar HIGH o pino 3
attachInterrupt(0, PressDn, RISING); // Interrupt de botão ao ficar HIGH o pino 2
}

//*************** Rotina PressUp *****************
void botaoMenu() // Rotina chamada pela interrupcao do botão de aumento
{
if((long)(micros() - contador) >= debouncing_time * 1000) // Tempo de debouncing
{
contador = contador + 1; // Incrementa temperatura em 0,01 oC

last_micros = micros(); // Tempo de debouncing
}
}
//*************** Rotina PressUp *****************
void PressUp() // Rotina chamada pela interrupcao do botão de aumento
{
if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing
{
TempProg = TempProg + 0.1; // Incrementa temperatura em 0,01 oC
lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
lcd.print(TempProg); // Imprime variavel
last_micros = micros(); // Tempo de debouncing
}
}
//*************** Rotina PressDn *****************
void PressDn() // Rotina chamada pela interrupcao do botão de reducao
{
if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing
{
TempProg = TempProg - 0.1; // Decrementa temperatura em 0,01 oC
lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
lcd.print(TempProg); // Imprime variavel
last_micros = micros(); // Tempo de debouncing
}
}
//*********************** Loop ********************
void loop()
{
celsius = dht.readTemperature(); // Le temperatura no DHT11
humidade = dht.readHumidity(); // Le humidade no DHT11

switch(contador){
case 0:
inicio();
break;
case 1:
opcao1();
break;
case 2:
opcao2();
break;
case 3:
opcao3();
break;
}
// Fim di Switch
delay(250);
}
// Fim do LOOP

// Inicio das opcoes do Menu
void inicio()
{

lcd.setCursor(11, 0); // Seleciona posição 0 da linha 0
lcd.print("H "); // Imprime texto
lcd.print(humidade); // Imprime humidade
if (celsius >= TempProg) // Faça se a temperatura for menor que a programada
digitalWrite(Rele, LOW); // Desliga Rele como entrada e Pull-Up
else // Ou se não for
digitalWrite(Rele, HIGH); // Liga Rele como entrada e Pull-Up
lcd.setCursor(0, 1); // Seleciona posição 0 da linha 0
lcd.print(celsius); // Imprime a gemperatura
lcd.setCursor(6, 1); // Seleciona posição 6 da linha 0
if (digitalRead(Rele) == 1) // Faça se o rele tiver operado
lcd.print("Lig "); // Imprime texto
else // Ou se não tiver
lcd.print("Desl"); // Imprime texto
delay(200);

}

// Funcao da opcao 1
void opcao1(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("jose");
lcd.setCursor(0,1);
lcd.print("menu1 ");
}

// Funcao da opcao 2
void opcao2(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("jose");
lcd.setCursor(0,1);
lcd.print("menu2 ");
}

// Funcao da opcao 3
void opcao3(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("jose");
lcd.setCursor(0,1);
lcd.print("menu3 ");
}

Exibições: 1583

Responder esta

Respostas a este tópico

Oi JE, boa tarde.

Conforme eu havia prometido, segue um código experimental para controle de sua chocadeira utilizando menus.

Não incorporei nele as rotinas de tempo (hh/mm/ss, dias), pois acho que você deverá usar um RTC

(real timer clock), pra manter estes dados mais confiáveis.

Mas isto é fácil de ser feito dentro do atual código.

Foi demorado, pois não encontrei disponível boas soluções de rotina de menu já escritas para o Arduino.

As que encontrei, estavam sem qualquer documentação ou muito grandes para serem estudadas,

Então resolvi escrever uma da minha própria cabeça, e à adaptei à sua necessidade.

Qualquer duvida fique à vontade.

 

Rui

Anexos

rui me ajudou muito.obrigado.

sou meio leigo então me desculpa em algumas perguntas:

Essa programação é PID?

e a constante inteiro giro é pra acionar o motor de girar a bandeja? se for como eu programo pra ela acionar  de 2 em 2 horas e parar de acionar ao 18 dias 

Oi OA, boa noite,

Não , não é PID.

eu indiquei este projeto pra você se basear nele ao fazer o seu.

O tempo de acionamento pode ser programado, mas pra isto recomendo o uso de um RTC.

Rui

como faco para adicionar uma rotina para girar os ovos?

Rui bom dia.

é possivel fazer um controle PID pelo arduino, baseado na programação que já fiz ou nesta que voce me indicou;havia feito uma programação onde o setpoint era 37, e a resistencia acionava em 36 e desligava em 38, mais acredito que isso não seja muito preciso e como é um trabalho academico precisaria de algo mais exato.
quanto ao motor existe algum outro modo de ligar e desliga a cada 2 horas sem a necessidade de RTC.

obrigado rui

Boa tarde José, estou fazendo uma chocadeira e estou com muita dificuldade em desenvolver o sistema, gostaria de saber se é possível me passar os códigos? Desde já agradeço. Abraço.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço