#include <EEPROM.
h>
#include <elapsedMillis.h>
//Biblioteca para o LCD no arduino
#include <LiquidCrystal.h>
//Pinos de comunicação LCD e Arduino
const int rs = 8, e = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, e, d4, d5, d6, d7);
//declaração das variáveis
int RA = 5+1+2+9+7+4+3;
int LED_Interlock = 29;
int Chave_ON_OFF = 21;
int LED_Falha = 30;
int Chave_INTERLOCK = 20;
int BUZZER = 25;
int Rele_k1 = 26;
int Rele_k2 = 27;
int Rele_k3 = 28;
bool Bloqueio_Temperatura;
bool Motor_Bloqueado;
bool Motor_Ligado;
bool Chave_Bloqueio;
bool botaoPressionado;
float TMANCAL;
float TMOTOR;
float TMAXMANCAL = 80;
float TMAXMOTOR = 60;
unsigned long tempo = 0;
// saídas digitais
void setup(){
pinMode(LED_Interlock, OUTPUT);
pinMode(LED_Falha, OUTPUT);
pinMode(Chave_ON_OFF, INPUT);
pinMode(Chave_INTERLOCK, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(Rele_k1, OUTPUT);
pinMode(Rele_k2, OUTPUT);
pinMode(Rele_k3, OUTPUT);
Chave_Bloqueio = false;
Motor_Bloqueado = false;
Motor_Ligado = false;
botaoPressionado = false;
//configuração pontos LCD
lcd.begin(16, 2);
//configuração das paralizações de contatores
attachInterrupt(digitalPinToInterrupt (20), Interlock , CHANGE);
//Apresentação do aluno
Apresentacao();
//Entrada dos sensores de temperatura
TMANCAL = analogRead(A8)/2.10;
TMOTOR = analogRead(A9)/2.10;
//função de espera
void espera(int msegundos){
tempo=millis();
while(millis() < tempo + msegundos){}
}
//função de interlock
void Interlock()
{
Chave_Bloqueio = !Chave_Bloqueio;
delay (10);
}
void loop()
{
if (Chave_Bloqueio || Bloqueio_Temperatura)
{
Motor_Bloqueado = true;
}
if (!Chave_Bloqueio && !Bloqueio_Temperatura)
{
Motor_Bloqueado = false;
digitalWrite (LED_Interlock, LOW);
digitalWrite (LED_Falha, LOW);
//bloqueio temperatura
if (TMANCAL > TMAXMANCAL || TMOTOR > TMAXMOTOR)
{
Bloqueio_Temperatura = true;
}
if (TMANCAL < TMAXMANCAL && TMOTOR < TMAXMOTOR)
{
Bloqueio_Temperatura = false;
}
if (digitalRead(Chave_ON_OFF))
{
if (!botaoPressionado)
{
botaoPressionado = true;
if (Motor_Ligado)
{
Desliga_Motor();
} else if (!Motor_Bloqueado && !Bloqueio_Temperatura)
{
Liga_Motor();
}
}
} else {
botaoPressionado = false;
}
//partida do motor
if (!Motor_Ligado && !Motor_Bloqueado)
{
lcd.setCursor(0, 0);
lcd.print(" Motor Desligado ");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite (LED_Interlock, LOW);
digitalWrite (LED_Falha, LOW);
}
//Mansagem bloqueio
if (Motor_Bloqueado)
{
lcd.setCursor(0, 0);
lcd.print(" Motor Bloqueado ");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(LED_Interlock, HIGH);
Desliga_Motor();
}
// Mensagem Bloqueio temperatura
if (Bloqueio_Temperatura)
{
lcd.setCursor(0, 0);
lcd.print(" Motor Bloqueado ");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(LED_Falha, HIGH);
Desliga_Motor();
}
//Leitura de temperatura
TMANCAL = analogRead(A8)/2.06;
TMOTOR = analogRead(A9)/2.06;
if (Motor_Ligado)
{
lcd.setCursor(9, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print(" T.MANCAL ");
lcd.print(TMANCAL);
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" TMOTOR ");
lcd.print(TMOTOR);
}
}
void Liga_Motor()
{
digitalWrite(Rele_k1, HIGH);
digitalWrite(Rele_k3, HIGH);
for (int i=0; i<=RA; i++)
{
lcd.setCursor(0, 0);
lcd.print("PARTINDO O MOTOR");
lcd.setCursor(0, 1);
lcd.print("EM ESTRELA");
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(RA - i);
delay(1000);
}
lcd.setCursor(0, 0);
lcd.print("FECHANDO O MOTOR");
lcd.setCursor(0, 1);
lcd.print("EM TRIANGULO");
digitalWrite(Rele_k3, LOW);
delay(1000);
digitalWrite(Rele_k2, HIGH);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
Motor_Ligado = true;
}
void Desliga_Motor()
{
digitalWrite(Rele_k1, LOW);
digitalWrite(Rele_k2, LOW);
digitalWrite(Rele_k3, LOW);
Motor_Ligado = false;
void Apresentacao()
{
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(50);
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(50);
lcd.setCursor(0, 0);
lcd.print(" UNIUBE ");
lcd.setCursor(0, 1);
lcd.print("Proj.Integrado I");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ENG. ELETRICA ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SAMUEL PACHECO ");
lcd.setCursor(0, 1);
lcd.print(" RA 5129743 ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" RELE ELETRONICO");
lcd.setCursor(0, 1);
lcd.print("PART. EST-TRIANG");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SEJA BEM VINDO ");
delay(2000);
lcd.setCursor(0, 0);
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(50);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
}