/*Projeto de Instrumentação Emmanuele e Marcos Esse programa lê a entrade de temperatura de um NTC e controla a temperatura de uma caldeira, atuando em uma resistência de aquecimento.
O circuito: Um transdutor de entrada do sinal no pino A3, e saída digital PWM 6, com resultados mostrados em um LCD e atuaçao humana através dos botões desse shield.
Projeto feito para a Disciplina de Instrumentação do Professor Márlio Bonfin Criado 2013 Marcos C Matos
*/
#include <LiquidCrystal.h>
// Funciona o LCD
#include <LCDKeypad.h>
// Funciona os botões
// LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // ativa o lcd LCDKeypad lcd;
const int sensor = A1; const int saida = 9; const int aliment = A2;
// sensor NTC // Saida PWM // alimentaçao
int sens1 = 0;
// variavel sensor
int sens2 = 0; int sens3 = 0; int sens4 = 0; int sens5 = 0; int sensFinal = 0;
float tensao = 0; float temperatura = 0;
// variavel tensao // variavel da temperatura
//criando os caracteres especiais
byte c_up[8] = { B00100, B01110, B10101, B00100, B00100, B00100, B00100, B00100, };
byte c_down[8] = { B00100, B00100, B00100, B00100, B00100, B10101, B01110, B00100, };
byte c_select[8] = { B00000, B01110, B11111, B11111, B11111, B11111, B01110, B00000, };
byte c_left[8] = { B00001, B00110, B01100, B11111,
B11111, B01000, B00110, B00001, }; byte c_right[8] = { B10000, B01100, B00010, B11111, B11111, B00010, B01100, B10000, };
// fim dos caracteres
void setup () { set.pinMode (A1,INPUT); set.pinMode (A2,OUTPUT);
lcd.createChar(1,c_select); lcd.createChar(2,c_up); lcd.createChar(3,c_down);
lcd.createChar(4,c_left); lcd.createChar(5,c_right); lcd.begin(16, 2); lcd.clear (); lcd.setCursor (3,0); lcd.print ("Projeto de"); lcd.setCursor (1,2); lcd.print ("Instrumentacao"); delay (3000); lcd.clear (); lcd.setCursor(2,0); lcd.print ("Emmanuele L."); lcd.setCursor (3,1); lcd.print ("& Marcos C."); delay (3000); lcd.clear ();
lcd.setCursor (3,0); lcd.print ("Calibracao?"); lcd.setCursor (3,1); lcd.print ("Sim ou Nao"); lcd.setCursor (1,1); lcd.write (4); lcd.setCursor (14,1); lcd.write (5); int buttonPressed; waitButton();
waitReleaseButton(); do { buttonPressed=waitButton(); } while(!(buttonPressed==KEYPAD_LEFT || buttonPressed==KEYPAD_RIGHT )); lcd.setCursor(0,1); lcd.write(buttonPressed==KEYPAD_LEFT?4:' '); lcd.write(' '); lcd.write(buttonPressed==KEYPAD_RIGHT?5:' '); lcd.write(' '); delay(50); waitReleaseButton(); if (buttonPressed==KEYPAD_LEFT) { lcd.clear (); lcd.print(" Calibrando"); lcd.setCursor (10,1); lcd.print ("V"); lcd.setCursor (1,1); calibracao();
} else if (buttonPressed==KEYPAD_RIGHT); { lcd.clear (); lcd.print ("ATUAL OBJET ER");
if (buttonPressed==KEYPAD_SELECT); { lcd.setCursor(3,1); lcd.write (223); lcd.print ("C"); lcd.setCursor(10,1); lcd.write (223); lcd.print ("C"); } }
// botão pra esquerda, entra na calibraçao // calibracao > le o analog 2 e coloca na tela o valor em tensao lido. botao seleciona finaliza e termina o setup +//botão pra direita, acaba o void setup ok
}
void loop () // aonde ele lê a temperatura atual, pede a temperatura objetivo e através de controle, finalmente alcança
{ lcd.setCursor (0,1); lcd.print(millis()/1000);
lcd.setCursor (7,1); lcd.print(millis()/2000);
}
int waitButton() // rotina de esperar o bot達o { int buttonPressed; waitReleaseButton; lcd.blink(); while((buttonPressed=lcd.button())==KEYPAD_NONE) { } delay(50); lcd.noBlink(); return buttonPressed; }
void calibracao() // nao funcionando direito, verificar pq { int buttonPressed; do { LeSensor(); tensao = sensFinal; lcd.setCursor (3,1);
lcd.write (tensao); delay (100); } while(buttonPressed=lcd.button()!=KEYPAD_SELECT); {
} } int LeSensor()
// rotina para ler o sensor, é puxada toda vez que precisa
{ sens1 = analogRead (sensor); delayMicroseconds(150); sens2 = analogRead (sensor); delayMicroseconds(150); sens3 = analogRead (sensor); delayMicroseconds(150); sens4 = analogRead (sensor); delayMicroseconds(150); sens5 = sens1+sens2+sens3+sens4; sensFinal = sens5 << 1; }
void waitReleaseButton() // acho que é para esperar soltar o botão { delay(100); while(lcd.button()!=KEYPAD_NONE) {
} delay(100); }