Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
avatar
Daniel Lukas
Mensagens : 62
Data de inscrição : 06/03/2020
Idade : 17
Escola : Rua Aníbal Silva
https://sayajin-gamers-store.myshopify.com/

Exercício 2.8 melhorado Empty Exercício 2.8 melhorado

Ter Jul 14, 2020 4:01 pm
/*
* CURSO DE ROBOTICA 2020
*
* Exercicio: 2.8
* Tema: Painel da Caldeira
* Atividade: Termometro e Alarme de Temperatura com Buzzer permitindo o Desacionamento
* Descrição: Essa encomenda é de um painel para caldeira, com temperaturas abaixo de 90 graus led verde, entre 90 e 120 led amarelo, acima de 120 led vermelho e buzzer
* Hardware: Ligar os leds e o buzzer em pinos digital configurado como SAÍDA e o NTC em uma entrada analógica e uma tecla numa entrada PULL_UP
* Comandos: pinMode, analogRead, digitalWrite,IF / ELSE / IF, millis(), tone()
* Dica1:Os alarmes necessitam de mecanismo para desligar a sinalização para sonora, isso ajuda o operador no controle do stress
* Dica2:Usar o termometro de leds para indicar o status da temperatura da caldeira
* Dica3:Usar a intermitecncia para gerar a sinalização sonora no buzzer, usar frequencias entre 500 e 3000HZ
* Dica4:Quando o alarme estiver ativo e a tecla pressionada deve silenciar o alarme sonoro, usar uma variável para controlar o estado do alarme
* Dica5:Caso a temperatura baixe, e em seguida torne a subir o alarme sonoro deve ser acionado novamente
*/

//DEFINICOES INICIAIS
#define ledVerde 2 //pino2 vai se chamar ledVerde
#define ledAmarelo 3 //pino3 vai se chamar ledAmarelo
#define ledVerm 4 //pino4 vai se chamar ledVerm
#define ntc A0 //pino A0 vai se chamar ntc
#define buzzer 5 //pino 5 vai se chamar buzzer
#define tecla  6

//DECLARAcAO DE VARIAVEIS GLOBAIS
int temperatura;
int som;
int tBuzzer;
int estadoBuzzer;
bool estadoLed = 0;
bool teclaPressionada = 0;
bool estadoLed1, estadoLed2 = 0;        //declaração de variavel
unsigned long tLed1, tLed2 = 0;             //declaração de variavel

//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600); //porta serial que abriu
pinMode(ledVerde,OUTPUT); //ledVerde configurado como saida
pinMode(ledAmarelo,OUTPUT); //ledAmarelo configurado como saida
pinMode(ledVerm,OUTPUT); //ledVerm configurado como saida
pinMode(tecla, INPUT_PULLUP);//
}

//FUNÇÕES COMPLEMENTARES
void debug(){
Serial.print("millis() = ");
Serial.print(millis());
Serial.print("tLed1 = ");
Serial.println(tLed1);
Serial.print("tLed1 = ");
Serial.println(tLed1);
 Serial.println(analogRead(ntc));
}
//PROGRAMA PRINCIPAL
void loop() {
 debug();
if(millis () > (tLed1 + 1000)){             //função if
tLed1 = millis();                         //led com millis
estadoLed1 = !estadoLed1;                //led com led negado
digitalWrite(ledVerde, estadoLed1);         //led com variavel
}
if (millis() > (tLed2 + 300)){         //função if
tLed2 = millis ();                   //led com millis
estadoLed2 = !estadoLed2;           //led com led negado
digitalWrite(ledAmarelo,estadoLed2);     //led acende com variavel
}
if(millis() > (tBuzzer + 500))   //função if
tBuzzer = millis();             //buzzer com millis
estadoBuzzer = !estadoBuzzer;  //estado buzzer
if(estadoBuzzer == 1){      //função if
tone(buzzer, 500);
}else{                      //função else
noTone(buzzer);          //buzzer com notone
}
digitalRead(tecla) == LOW && teclaPressionada;{// 0 && = 0; 0&&1=0 ; 1&&1=1;

teclaPressionada = 1;
estadoLed = ! estadoLed;
digitalWrite(ledVerm,estadoLed);
}
digitalRead(tecla) == HIGH && teclaPressionada;{
teclaPressionada = 0;
}
debug();                                       //debug ativo
temperatura = analogRead(ntc);                 //variavel que controla o pino
if(temperatura < 385) {                       //função if com a variavel
 digitalWrite(ledVerde, HIGH);              //pino acende
 digitalWrite(ledAmarelo, LOW);            //pino não acende
 digitalWrite(ledVerm, LOW);              //pino não acende
}
else if (temperatura <=563){             //função else if
 digitalWrite(ledVerde, LOW);          //pino apaga
 digitalWrite(ledAmarelo, HIGH);      //pino acende
 digitalWrite(ledVerm, LOW);         //pino não acende

}else{                              //função else
 digitalWrite(ledVerde, LOW);     //pino não acende
 digitalWrite(ledAmarelo, LOW);  //pino apaga
 digitalWrite(ledVerm, HIGH);   //pino acende
}
}


Última edição por Daniel Lukas em Seg Jul 27, 2020 3:47 pm, editado 2 vez(es)
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5021
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Exercício 2.8 melhorado Empty Re: Exercício 2.8 melhorado

Ter Jul 21, 2020 10:18 pm
Oi Daniel, legal que fez o exercício, esse vai ajudar a desenvolver a técnica, tem bastante amarração.
Testei e não funcionou, vou colocar os pontos que precisa corrigir.
1 - a variável tBuzzer não foi declarada
2 - a variável estadoBuzzer também não foi declarada
3 - No define o buzzer deve ser colocado numa saída digital e não na entrada analógica
4 - Faltou a tecla para desativar o alarme
5 - O alarme fica disparado o tempo todo, mesmo com a temperatura baixa, isso porque o bloco do buzzer deve ficar dentro do bloco que acende o led vermelho, se sair dali o buzzer deve parar
6 - Vai precisar de mais uma variável de controle para acionar o buzzer, e deve ligar se a temperatura estiver alta e o buzzer ativado, se ligou E
7 - Precisa também dos códigos de leitura de tecla para acionar e desacionar o controle do buzzer

Por enquanto a nota será 5.0, mas vai arrumando o programa que vou te ajudando e melhorando a nota.
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos