#include <LiquidCrystal.h> // inclui a biblioteca liquid crystal
#include "DHTesp.h"
/*
* PARTIDA ESTRE TRIANGULO ARDUINO MEGA ****
* UNIUBE POLO QUIRONOPOLIS - GO ***********
* PROJETO INTEGRADO 1 *********************
* PROFESSOR: LUCIO ROGERIO JUNIOR *********
* ALUNO: FABIO NEMBER DOS SANTOS MIRANDA **
* RA 1128096 ******************************
* POLO QUIRINÓPOLIS - GO ******************
*/
//definindo nomes para as portas do arduino, para facilitar a programação
#define botao_liga 23
#define botao_desliga 22
#define botao_interlock 21
#define saida_interlock 19
#define saida_buzzer 5
#define saida_falha 18
#define saida_contator3 4
#define saida_contator2 2
#define saida_contator1 15
#define DHT_motor 32
#define DHT_mancal 33
DHTesp dhtSensor_motor;
DHTesp dhtSensor_mancal;
int tela = 0; // variavel para controlar o que vai ser exibido na tela e o estagio de partida
int RA = 11000; // soma do RA 1128096
unsigned long tempo = 0; // controla o tempo de partida do motor
bool estrela = false; // liga motor em estrela
bool triangulo = false; // muda motor para triangulo
LiquidCrystal lcd(13, 12, 14, 27, 26, 25); // cria na variavel lcd atributos para enviar informaçãoes para o display.
// função da biblioteca para habilitar DHT para fazer a leitura do sensor
void setup() {
pinMode(DHT_mancal,INPUT); // define pino como entrada
pinMode(DHT_motor,INPUT); // define pino como entrada
pinMode(botao_liga,INPUT_PULLUP); // define pino como entrada em nivel alto (inibe utilizar resistor no circuito
pinMode(botao_desliga,INPUT_PULLUP); // define pino como entrada em nivel alto (inibe utilizar resistor no circuito
pinMode(botao_interlock,INPUT_PULLUP);// define pino como entrada em nivel alto (inibe utilizar resistor no circuito
pinMode(saida_interlock,OUTPUT); // define pino como saida
pinMode(saida_buzzer,OUTPUT); // define pino como saida
pinMode(saida_falha,OUTPUT); // define pino como saida
pinMode(saida_contator1,OUTPUT); // define pino como saida
pinMode(saida_contator2,OUTPUT); // define pino como saida
pinMode(saida_contator3,OUTPUT); // define pino como saida
lcd.display(); // inicia o display
lcd.begin(16, 2); // define o display com 16 colunas e 2 linhas
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print(" UNIUBE "); // os espacos antes e depois da mensagem é para centralizar
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" PROJ. INTEGR. 1");
digitalWrite(saida_buzzer,HIGH); //liga o buzzer por 200ms no inicio. bip curto
delay(200);
digitalWrite(saida_buzzer,LOW); //desliga o buzzer por 300ms no inicio. bip curto
delay(300);
digitalWrite(saida_buzzer,HIGH); //liga o buzzer por 200ms no inicio. bip curto
delay(200);
digitalWrite(saida_buzzer,LOW); // desliga o buzzer.
delay(2200);
lcd.clear();
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print("FABIO NEMBER");
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" RA: 1128096 ");
delay(3000);
lcd.clear();
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print("PARTIDA ESTRELA ");
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" TRIANGULO");
delay(3000);
lcd.clear();
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print(" SEJA BEM ");
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" VINDO(A) ");
delay(2300);
lcd.clear();
digitalWrite(saida_buzzer,HIGH); //liga o buzzer por 700ms no fim da mensagem.
delay(700);
digitalWrite(saida_buzzer,LOW);
lcd.clear(); // limpa tudo que foi escrito no visor
dhtSensor_motor.setup(DHT_motor, DHTesp::DHT22);
dhtSensor_mancal.setup(DHT_mancal, DHTesp::DHT22);
}
void loop() {
TempAndHumidity data_motor = dhtSensor_motor.getTempAndHumidity(); // chama a função que lê a temperatura do motor
TempAndHumidity data_mancal = dhtSensor_mancal.getTempAndHumidity(); // chama a função que lê a temperatura do mancal
switch(tela){ // este switch exibe mensagens do visor
lcd.clear();
case 0:{ // exibe temperaturas do motor e mancal
lcd.setCursor(0,0); //cursor coluna 1 e linha 1
lcd.print(" MOTOR | MANCAL "); // envia a mensagem para o visor
lcd.setCursor(1,1); // cursor para a coluna 3 e linha 2
lcd.print(data_motor.temperature, 2); //exibe a temperatura do motor
if ((data_motor.temperature) < 10); lcd.print(" ");
if ((data_motor.temperature) < 100); lcd.print(" ");
if ((data_motor.temperature) < 1000); lcd.print(" ");
lcd.setCursor(9,1); //cursor para a colina 10 na linha 1
lcd.print(data_mancal.temperature, 2); //envia a temperatura do mancal
if ((data_mancal.temperature) < 10); lcd.print(" ");
if ((data_mancal.temperature) < 100); lcd.print(" ");
if ((data_mancal.temperature) < 1000); lcd.print(" ");
break; // sai do switch
}
case 1: { // exibe a contagem de tempo da partida em estrela
lcd.setCursor(0,0); // cursor linha 1 coluna1
lcd.print("Tempo Partida");
lcd.setCursor(0,1); // cursor linha 2 coluna 1
lcd.print("Estrela: ");
lcd.print((RA-(millis()-tempo))/1000);
lcd.print("s ");
break;
}
case 2: // exibe a mensagem de erro do motor no visor
{
lcd.setCursor(0,0); // cursor linha 1 coluna 1
lcd.print("*Erro no Motor*");
lcd.setCursor(1,1); // cursor linha 2 coluna 1
lcd.print("Temp: ");
lcd.print(data_motor.temperature,2);
if ((data_motor.temperature) < 10); lcd.print(" ");
if ((data_motor.temperature) < 100); lcd.print(" ");
if ((data_motor.temperature) < 1000); lcd.print(" ");
break;
}
case 3: // exibe a mensagem de erro no mancal no visor
{
lcd.setCursor(0,0);
lcd.print("*Erro no Mancal*");
lcd.setCursor(1,1);
lcd.print("Temp: ");
lcd.print(data_mancal.temperature,2);
if ((data_mancal.temperature) < 10); lcd.print(" ");
if ((data_mancal.temperature) < 100); lcd.print(" ");
if ((data_mancal.temperature) < 1000); lcd.print(" ");
break;
}
}
if((data_mancal.temperature) > 79.99){ // verifica se a temperatura do mancal é maior que 80
tela = 3; // muda mensagem da tela para erro do mancal
digitalWrite(saida_falha, HIGH); // liga saida de falha
digitalWrite(saida_contator1,LOW); // desliga todos contatores do 1 ao 3
digitalWrite(saida_contator2,LOW);
digitalWrite(saida_contator3,LOW);
tempo = 0; // zera a contagem de tempo
estrela = false; // desliga a partida em estrela
triangulo = false; // desliga a partida em triangulo
}
else if((data_motor.temperature) > 59.99){ // verifica se a temperatura do motor é maior que 60
tela = 2; // muda mensagem da tela para erro do motor
digitalWrite(saida_falha, HIGH); // liga a saida de falha
digitalWrite(saida_contator1,LOW);// desliga todos os contatores do 1 ao 3
digitalWrite(saida_contator2,LOW);
digitalWrite(saida_contator3,LOW);
tempo = 0; // zera a contagem de tempo
estrela = false; // desliga a partida em estrela
triangulo = false; // desliga a partida em triangulo
}
else { // caso não tenha falha, desliga a saida de falha
digitalWrite(saida_falha, LOW); // desliga saida de falha
if( tela == 3 || tela == 2) // se a tela for igual a 1, quer dizer que o motor esta iniciando, então não precisa voltar a tela para inicial
tela = 0; // ao sair a falha, volta o visor para as temperaturas do motor e mancal
}
if(digitalRead(botao_liga) == LOW && digitalRead(saida_contator1)==LOW && !estrela){ // verifica se o botao liga foi pressionado
// se a saida_contator1= low, quer dizer que o motor esta desligado, então ele liga
digitalWrite(saida_contator1,HIGH); // liga contator1
digitalWrite(saida_contator2,LOW); // mantem contator2 desligado
digitalWrite(saida_contator3,HIGH); // liga contator3
tela = 1; // muda tela para contagem de tempo
tempo = millis(); // pega o valor do tempo do sistema e joga na variavel para comparaçção
estrela = true; // indica que a partida estrela iniciou
lcd.clear(); // limpa o lcd para mostrar a contagem regressiva
}
if(RA < (millis() - tempo) && estrela){ // verifica se atinge o tempo para desligar o contator 3
digitalWrite(saida_contator3,LOW); // desliga a saida_contator3
tempo = millis(); // reinicia o tempo para contar 500ms
estrela = false; // partida em estrela terminou
triangulo = true; // inicia a partida para triangulo de 500ms
lcd.clear();
}
if(500 < (millis() - tempo) && triangulo){ // verifica se atingiu o tempo de 500ms
digitalWrite(saida_contator2,HIGH); // liga saida_contator2
tela = 0; // volta o visor para exibir as temperaturas
tempo = 0; // limpa a variavel de tempo
triangulo = false; // após terminar a contagem, volto a variavel para false para não interferir no codigo
lcd.clear(); // limpa o visor para exibir as temperaturas
}
if(digitalRead(botao_desliga) == LOW){ // verifica se o botão_desliga foi pressionado
digitalWrite(saida_contator1,LOW); // desliga todos contatores do 1 ao 3
digitalWrite(saida_contator2,LOW);
digitalWrite(saida_contator3,LOW);
tela = 0; // volta a tela para exibição das temperaturas do motor e mancal
tempo = 0; // limpa a contagem de tempo
estrela = false; // desabilita as varivaies de controle da partida estrela e triangulo
triangulo = false;
}
if(digitalRead(botao_interlock) == LOW){
digitalWrite(saida_contator1,LOW); // desliga todos contatores do 1 ao 3
digitalWrite(saida_contator2,LOW);
digitalWrite(saida_contator3,LOW);
tela = 0; // volta a tela para exibição das temperaturas do motor e mancal
tempo = 0; // limpa a contagem de tempo
estrela = false; // desabilita as varivaies de controle da partida estrela e triangulo
while(digitalRead(botao_interlock) == LOW){ // enquanto o interlock estiver pressionado ele mantem a saida_interlock ligada
digitalWrite(saida_interlock,HIGH); // liga saida interlock
}
digitalWrite(saida_interlock,LOW); // desliga saida interlock, fica aqui porque após soltar o botão posso desligar.
}
}