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.
Nesse nosso novo passo iremos fazer o controle de uma lampada incandescente através do arduino, para isso sera executado alguns passos, e vamos explicar tudo, vamos então....
Para controlar a intensidade da nossa lampada vamos mudar um pouco o processo, como a lampada incandescente trabalha com corrente alternada e como é de conhecimento o modo mais fácil e sensato é controlar o disparo da senoide, controlando assim a intensidade da lampada, esse circuito chamado de Dimmer controla a luz a partir do disparo que é feito por um TRIAC que é controlado por um DIAC que é controlado pelo potenciômetro, porem para fazer esse controle com o arduino iremos mudar alguma coisas, mais vamos começar do básico ate o fim para ficar tudo bem explicado.
- Vamos entender um pouco do optoacoplador que será a base do nosso circuito de potencia, pois nele iremos controlar o TRIAC e analisar o ponto zero da senoide.
Optoacoplador
O optoacoplator tem como sua principal finalidade isolar um sistema de outro, pois dentro dele não temos contato elétrico apenas contato óptico.
O principio de funcionamento é um Led infravermelho que polarizado corretamente ira iluminar a base de um fototransistor que ira conduzir. Mais observem que esse modelo de optoacoplador é apenas para corrente continua, mais temos um outro modelo que invés de um fototransistor tem um fototriac que por sua vez é capaz de conduzir corrente alternada.
Porém o Optoacoplador a base de Triac encontramos dois modelos um sem passagem de zero ou seja o componente físico não é equipado com um dispositivo que detecta a passagem da senoide por zero, mais temos um que ja vem equipado com esse dispositivo interno, observem:
Com esse tipo de Optoacoplador garantimos uma melhor exatidão nos circuitos pois ele garante que so sera acionado a parte da potencia quando a senoide passar por zero, assim teremos melhor controle em ponto certo.
TRIAC
Com o TRIAC conseguimos controlar o disparo de uma senoide a partir de um disparo no gate, assim controlando o percentual de atuação da senoide cortando ela no tempo certo.
Como vocês podem observar com o controle do disparo do TRIAC a partir do pulso no Gate. na senoide 1° podemos observar que o disparo é bem curto pois só um pequeno filete da senoide é ativo, assim na 2° maior sera o tempo da senoide ativa e na 3° maior ainda.
Isso ai pessoal essa é a primeira parte aguarde a segunda parte com o projeto em funcionamento.
Pessoal nessa postagem vou apresentar a ferramenta fritzing.Essa ferramenta é muito interessante pois podemos criar desenho do nosso projeto e automaticamente criar a placa de circuito impresso e o esquemático. Observe esse vídeo de apresentação do software:
Nessa
atualização do software do Arduíno incluímos uma escala de porcentagem em
numero e barras e mudamos a forma de reação do LED pois na versão 1.0 o LED
ficava mais forte com a intensidade da luz ambiente bem clara o que deveria ser
ao contrario, nessa versão V 1.1 arrumamos isso.
#include
<LiquidCrystal.h>
LiquidCrystal
lcd(12, 11, 5, 4, 3, 2);
byte a[8] = {
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000
};
byte b[8] = { 0b11000,
0b11000,
0b11000,
0b11000,
0b11000,
0b11000,
0b11000,
0b11000
};
byte c[8] = { 0b11100,
0b11100,
0b11100,
0b11100,
0b11100,
0b11100,
0b11100,
0b11100
};
byte d[8] = { 0b11110,
0b11110,
0b11110,
0b11110,
0b11110,
0b11110,
0b11110,
0b11110
};
byte e[8] = { 0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111
};
int sensorPin = A0;
int sensorValue = 0;
int outputValue = 0;
int led = 9;
int outputLed = 0;
void oi(){
lcd.setCursor(0, 0);
lcd.print("LDR");
sensorValue = analogRead(sensorPin);
outputValue = map(sensorValue, 0, 1023, 0,
100);
lcd.setCursor(4, 0);
lcd.print(outputValue);
outputLed = sensorValue;
outputLed = map(sensorValue, 0, 1023, 255, 0);
analogWrite(led, outputLed);
delay(100);
lcd.clear();
}
void setup() {
lcd.begin(16, 2);
pinMode(led, OUTPUT);
lcd.createChar(1, a);
lcd.createChar(2, b);
lcd.createChar(3, c);
lcd.createChar(4, d);
lcd.createChar(5, e);
}
void loop() {
int programas = map(sensorValue, 0, 1023, 1,
80);
switch (programas){
case 1:lcd.setCursor(0, 1);lcd.write(1);
oi();break;
case 2:lcd.setCursor(0, 1);lcd.write(2);
oi();break;
case 3:lcd.setCursor(0, 1);lcd.write(3);
oi();break;
case 4:lcd.setCursor(0, 1);lcd.write(4);
oi();break;
case 5:lcd.setCursor(0, 1);lcd.write(5);
oi();break;
case 6:lcd.setCursor(1,
1);lcd.write(1);lcd.setCursor(0, 1);lcd.write(5); oi();break;
case 7:lcd.setCursor(1,
1);lcd.write(2);lcd.setCursor(0, 1);lcd.write(5); oi();break;
case 8:lcd.setCursor(1,
1);lcd.write(3);lcd.setCursor(0, 1);lcd.write(5); oi();break;
case 9:lcd.setCursor(1,
1);lcd.write(4);lcd.setCursor(0, 1);lcd.write(5); oi();break;
case 10:lcd.setCursor(1,
1);lcd.write(5);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1, 1);lcd.write(5);
oi();break;
case 11:lcd.setCursor(2,
1);lcd.write(1);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5); oi();break;
case 12:lcd.setCursor(2,
1);lcd.write(2);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5); oi();break;
case 13:lcd.setCursor(2,
1);lcd.write(3);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5); oi();break;
case 14:lcd.setCursor(2,
1);lcd.write(4);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5); oi();break;
case 15:lcd.setCursor(2,
1);lcd.write(5);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5); oi();break;
case 16:lcd.setCursor(3,
1);lcd.write(1);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5); oi();break;
case 17:lcd.setCursor(3,
1);lcd.write(2);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1, 1);lcd.write(5);lcd.write(5);lcd.setCursor(2,
1);lcd.write(5); oi();break;
case 18:lcd.setCursor(3,
1);lcd.write(3);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5); oi();break;
case 19:lcd.setCursor(3,
1);lcd.write(4);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5); oi();break;
case 20:lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1, 1);lcd.write(5);lcd.write(5);lcd.setCursor(2,
1);lcd.write(5); oi();break;
case 21:lcd.setCursor(4,
1);lcd.write(1);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5); oi();break;
case 22:lcd.setCursor(4,
1);lcd.write(2);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5); oi();break;
case 23:lcd.setCursor(4, 1);lcd.write(3);lcd.setCursor(0,
1);lcd.write(5);lcd.setCursor(1, 1);lcd.write(5);lcd.write(5);lcd.setCursor(2,
1);lcd.write(5);lcd.setCursor(3, 1);lcd.write(5); oi();break;
case 24:lcd.setCursor(4,
1);lcd.write(4);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5); oi();break;
case 25:lcd.setCursor(4,
1);lcd.write(5);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5); oi();break;
case 26:lcd.setCursor(5,
1);lcd.write(1);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5); oi();break;
case 27:lcd.setCursor(5,
1);lcd.write(2);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5); oi();break;
case 28:lcd.setCursor(5,
1);lcd.write(3);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5); oi();break;
case 29:lcd.setCursor(5,
1);lcd.write(4);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5); oi();break;
case 30:lcd.setCursor(5,
1);lcd.write(5);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5); oi();break;
case 31:lcd.setCursor(6, 1);lcd.write(1);lcd.setCursor(0,
1);lcd.write(5);lcd.setCursor(1, 1);lcd.write(5);lcd.write(5);lcd.setCursor(2,
1);lcd.write(5);lcd.setCursor(3, 1);lcd.write(5);lcd.setCursor(4,
1);lcd.write(5);lcd.setCursor(5, 1);lcd.write(5); oi();break;
case 32:lcd.setCursor(6, 1);lcd.write(2);lcd.setCursor(0,
1);lcd.write(5);lcd.setCursor(1, 1);lcd.write(5);lcd.write(5);lcd.setCursor(2,
1);lcd.write(5);lcd.setCursor(3, 1);lcd.write(5);lcd.setCursor(4,
1);lcd.write(5);lcd.setCursor(5, 1);lcd.write(5); oi();break;
case 33:lcd.setCursor(6,
1);lcd.write(3);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5);lcd.setCursor(5,
1);lcd.write(5); oi();break;
case 34:lcd.setCursor(6,
1);lcd.write(4);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5);lcd.setCursor(5,
1);lcd.write(5); oi();break;
case 35:lcd.setCursor(6,
1);lcd.write(5);lcd.setCursor(0, 1);lcd.write(5);lcd.setCursor(1,
1);lcd.write(5);lcd.write(5);lcd.setCursor(2, 1);lcd.write(5);lcd.setCursor(3,
1);lcd.write(5);lcd.setCursor(4, 1);lcd.write(5);lcd.setCursor(5, 1);lcd.write(5);
oi();break;
Essa nova
atribuição no software mudou a forma de manipular o LED agora quanto menor a
intensidade de luz do ambiente maior o LED vai clarear, isso por conta de uma
simples mudança na função MAP:
- LED vai
clarear com mais luz ambiente
outputLed = map(sensorValue, 0, 1023, 0, 255);
- LED vai clarear com menos luz
ambiente
outputLed = map(sensorValue, 0, 1023, 255, 0);
Todo o código na
função Loop entre o " switch (programas){"e o " break;} "é para criar no LCD uma barra visual de porcentagem.
Vídeo
Reparem a escala numérica e em barras da porcentagem e o led variando a intensidade apartir do PWM.