Após essa longa busca por conhecimento podemos afirmar que conseguimos alcançar nossas metas e ainda acrescentar, nossa busca está só no começo pois grandes ideias estão por vir! Obrigado á todos !
Olá pessoal, Este Blog tem como objetivoo a exposição de projetos acadêmicos realizados durante o curso de engenharia elétrica, aceitamos criticas, sugestões e conselhos. Sejam bem vindos.
segunda-feira, 11 de novembro de 2013
Chegamos ao fim
Esse é o último post referente ao nosso projeto onde o intuito era entender melhor os sensores e explicar como foi possível realizar o trabalho.Com nosso projeto de controle de iluminação, análise de temperatura e manipulação por controle remoto, pudemos aprofundar o conhecimento referente à alguns sensores, abrindo assim a mente de todos da equipe, nos permitindo uma visão mais ampla da utilização e aplicação do nosso projeto.
Após essa longa busca por conhecimento podemos afirmar que conseguimos alcançar nossas metas e ainda acrescentar, nossa busca está só no começo pois grandes ideias estão por vir! Obrigado á todos !
Após essa longa busca por conhecimento podemos afirmar que conseguimos alcançar nossas metas e ainda acrescentar, nossa busca está só no começo pois grandes ideias estão por vir! Obrigado á todos !
Circuito Impresso
Vamos fazer o circuito impresso para nosso projeto ficar bem apresentável para o grande dia...
Podemos fazer de varias formas, tanto a mão quanto através de software específicos para isso, nos iremos usar o Fritzing já citado anteriormente, hoje vamos aprender a função para criar a PCB(placa de circuito impresso).
1° Passo criar a Placa
Podemos fazer de varias formas, tanto a mão quanto através de software específicos para isso, nos iremos usar o Fritzing já citado anteriormente, hoje vamos aprender a função para criar a PCB(placa de circuito impresso).
PCB
Criando a placa
por padrão o software vai fazer 100 rotas alternativas antes de chegar a rota final.
Gerando o PDF
Final
Agora já criado a placa podemos passar para o próximo passo.
2° Imprimir a placa
Nosso processo vai ser em gravar a placa para corroer através de processo térmico, onde iremos utilizar uma impressora laser e uma folha de impressão de foto.
podemos melhor entender através desse vídeo:
retocando alguns pontos
cuidado para não esquentar demais a placa e o cobre descolar do fonolite
3° Corroendo a placa
Agora vamos utilizar de percloreto de ferro para fazer a corrosão da placa onde o produto ira atacar o material q não tiver a película de tinta em cima.
percloreto de ferro
Placa de molho mais ou menos 20 minutos
Com uma palha de aço tiramos a marca da tinta
4° Furando a placa
Nesse processo podemos utilizar de uma furadeira ou um furador de PCB proprio para o serviço.
5° Soldar os componentes
Agora só soldar os componentes e pronto.
Sensores adicionais
LM35
Entre os sensores de temperatura o LM35 é o mais simples, usamos os sensores de temperatura em grande escala para processos industriais ou comerciais onde existe a necessidade de controlar ou monitorar a temperatura. O LM35 é fabricado pela National Semicondutores, fabricado na forma de um transistor tem como finalidade fornecer uma saida de tensão proporcional a temperatura absoluta que age sobre ele, este tipo de sensor de temperatura pode trabalhar e fornecer temperaturas entre -55 a 150°C.
- Fornece tensões de 10mV/ °C
- Precisão de 0,5°C
- Opera entre 4 a 30 volts
- Baixa impedancia de saida 0,1ohm para cargas de 1mA
Receiver IR TSOP4838
O receiver IR trabalha em uma fequencia especifica de varredura de 38KHz uma varredura padrão para televisores e rádios o que nos possibilita usar diversos controles de fácil acesso. Muito fácil de utilizar o receptor pode ser implementado no arduino sem muitos problemas, e o o que torna mais fácil é descobrir qual o código de cada tecla do nosso controle remoto, para isso o Arduíno ira nos ajudar muito.
Para descobrir o código de cada teclado controle remoto através do arduino, veja:
Projeto Final
Programação
Toda a programação esta comentada.
Nossa programação teve algumas mudanças para melhor atender a parte física como por exemplo mudança dos pinos de sinal do LCD e outros sensores, e uma mudança no software para melhorar o processamento.
//
// Software V1.7(Final) Hardware V1.4(Final)
//
// - Sensor de temperatura LM35
// - Sensor de iluminação LDR
// - Sensor de receptor Infra vermelho para controle remoto
//
//*******************************************************************************
#include <LiquidCrystal.h>
#include <IRremote.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);// Define os pinos do LCD
const int SensorLDR = A0; // Entrada do sensor LDR em porta analogica
const int LedLCD = 6; // Pino de saida Led do LCD com saida PWM
const int LM35= A5; // Pino de entrada LM35
float temperatura; //Variavel para armazenar
float temperaturafinal; //Variavel para armazenar valor final
int SensorValorLDR = 0; // Variavel que armazena o valor do LDR
int SaidaValorLDR = 0; //Variavel que armazena o valor para colocar na saida
int SaidaLedLCD = 0; //Variavel que armazena o valor para colocar na saida
int AC_LOAD = 3; // Pino de saida para o Optoacoplador >> TRIAC
int dimming = 120; // valor inicial de Dimming
int countsala = 1; // Valor para contragem da nossa chave
const int AtivaOptoZero = 5; // Declara q no pino 13 sera para o Opto
int SensorIR = A4; //Entrada sensor infra vermelho
float armazenavalor; // Armazena valor IR
IRrecv irrecv(RECV_PIN);// Analise do IR
decode_results results; //decodificador do sinal do IR
void setup()
{
lcd.begin(16, 2); // Inicia o LCD 16x2
pinMode(13, OUTPUT); // Defino o pino 13 como saida
Serial.begin(9600); // Inicia comunicação com a serial
irrecv.enableIRIn(); // Inicializa o receptor IR
pinMode(AC_LOAD, OUTPUT);// Declara AC_LOAD como saida
attachInterrupt(0, zero_crosss_int,RISING);// Ativa interrupção para passagem por zero da senoide
pinMode(AtivaOptoZero, OUTPUT); // declara AtivaOptoZero como saida
pinMode(LedLCD, OUTPUT);// declara LedLCD como saida
digitalWrite(LedLCD, HIGH);// declara LedLCD como "1"
lcd.setCursor(0, 0);// seta cursor do LCD linha e coluna zero
lcd.print("LumenClass "); // Escreve "LumenClass "
lcd.setCursor(0, 1);// seta coluna zero linha um
lcd.print("Eng.Eletrica ");// Escreve "Eng.Eletrica "
//== Efeito para correr o letreiro==================================================
for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
lcd.scrollDisplayLeft();
delay(180);
}
for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
lcd.scrollDisplayRight();
delay(180);
}
for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
lcd.scrollDisplayLeft();
delay(180);
}
delay(5000);
//==================================================================================
}
void zero_crosss_int(){ // Função da passagem por zero
// Calculo do angulo da senoide :: 60Hz-> 8.33ms (1/2 Ciclo)
// (8333us - 8.33us) / 128 = 65 (aproximado)
int dimtime = (65*dimming);
delayMicroseconds(dimtime);
digitalWrite(AC_LOAD, HIGH);// Disparo TRIAC
delayMicroseconds(8.33);// Triac ligado em 8.33us, atraves da nossa base de calculo
digitalWrite(AC_LOAD, LOW);// Corte do TRIAC
}
void loop(){
lcd.clear();// Apaga LCD
leitura();// Chama função
if (irrecv.decode(&results))// se receber sinal no IR...
{
Serial.print("Valor lido : "); //Escreve na serial "Valor lido : "
Serial.println(results.value, DEC);//Escreve na serial o valor do IR
armazenavalor = (results.value);// Armazena o valor do IR na variavel "armazenavalor"
if (armazenavalor == 233 ) //Verifica se a tecla 1 foi pressionada
{
countsala++; //soma mais uma unidade "+1"
delay(100);// espera de 100 mili segundos
}
irrecv.resume(); //Le o próximo valor
}
switch (countsala) {
case 1: //1° opção do menu
lcd.setCursor(0, 0);//seta o LCD
lcd.print("LAMPADA");//Escreve
lcd.setCursor(0, 1);//seta o LCD
lcd.print("Desligada");//Escreve
digitalWrite(AtivaOptoZero, LOW); // Liga o pino 13 : AtivaOptoZero
delay(100);// espera de 100 mili segundos
lcd.clear();// apaga o LCD
break;
case 2: //2° opção do menu
lcd.setCursor(0, 0);//seta o LCD
lcd.print("LAMPADA");//Escreve
lcd.setCursor(0, 1);//seta o LCD
lcd.print("ligada");//Escreve
dimming= 10;// lampada no maximo
digitalWrite(AtivaOptoZero, HIGH); // Liga o pino 13 : AtivaOptoZer
delay(100);// espera de 100 mili segundos
lcd.clear();// apaga o LCD
break;
case 3: //3° opção do menu
digitalWrite(AtivaOptoZero, HIGH); // Liga o pino 13 : AtivaOptoZer
lcd.setCursor(0, 0); //seta o lcd na linha zero coluna zero
lcd.print("AUTO "); // e escreve
SensorValorLDR = analogRead(SensorLDR);// Lê o valor do LDR e salva em SensorValorLDR
SaidaValorLDR = map(SensorValorLDR, 0, 1023, 0, 100); //Pega o valor de SensorValorLDR cria um map de 0 a 100 e salva na SaidaValorLDR
lcd.print(SaidaValorLDR); //escreve SaidaValorLDR no LCD
lcd.print(char(37)); // escreve o caracter % no LCD
SaidaValorLDR = SensorValorLDR; // Pega o valor do SensorValorLDR novamente e salva em SaidaValorLDR
SaidaLedLCD = map(SaidaValorLDR , 0, 1023, 0, 110); //min=0 max=128 // Cria um map de 0 a 110 << para melhor ajustar a lampada
dimming = SaidaLedLCD; //Pega o valor do map SaidaLedLCD e salva em dimming
analogWrite(LedLCD, SaidaLedLCD); // Escreve o valor de SaidaLedLCD no LedLCD
for(int i=0;i<50;i++)//for para ler 50 vezes para fazer media
{
temperatura=temperatura+analogRead(LM35);
}
temperatura=temperatura/50; ;//divide toda a soma por 50 para tirar a media
temperaturafinal = (5.0 * temperatura * 100.0) / 1024;//formula para converter o sinal do LM35
lcd.setCursor(9,0);//seta o LCD
lcd.print(temperaturafinal,0);// ,0 sem nenhuma casa depois da virgula
lcd.print(char(223));//escreve "º" no LCD
lcd.print("C");//Escreve
delay(50); // delay para não carregar o processamento
lcd.clear();// apaga o LCD
break;
case 4: //4° opção do menu
lcd.setCursor(0, 0);//seta o LCD
lcd.print("AJUSTE FIXO");//Escreve
lcd.setCursor(0, 1);//seta o LCD
digitalWrite(AtivaOptoZero, HIGH); // Liga o pino 13 : AtivaOptoZer
delay(100);// espera de 100 mili segundos
lcd.clear();// apaga o LCD
break;
case 5: //5° opção do menu
countsala = 1;// Chama a 1° opção do menu
break;
}
}
void leitura(){
SensorValorLDR = analogRead(SensorLDR);// Lê o valor do LDR e salva em SensorValorLDR
SaidaValorLDR = map(SensorValorLDR, 0, 1023, 0, 100); //Pega o valor de SensorValorLDR cria um map de 0 a 100 e salva na SaidaValorLDR
SaidaValorLDR = SensorValorLDR; // Pega o valor do SensorValorLDR novamente e salva em SaidaValorLDR
SaidaLedLCD = map(SaidaValorLDR , 0, 1023, 0, 110); //min=0 max=128 // Cria um map de 0 a 110 << para melhor ajustar a lampada
analogWrite(LedLCD, SaidaLedLCD); // Escreve o valor de SaidaLedLCD no LedLCD
}
Hardware
Montagem para prototipagem.
Esquema elétrico.
Assinar:
Postagens (Atom)