Realizei o projeto de um dimmer digital com o arduino que consta no site abaixo e meus resultados foram funcionais , porem o dimmer apresenta uma pequena avaria. Quando o level é colocado no máximo ao invés de sair os 127 volts de saída só sai 66 volts como se fosse meia onda , já revisei todas as ligações e a programação é identica a do site. Alguem ja passou pela mesma situação ? O que poderia ser ?
Como estás a medir a tensão?
Estou medindo com um voltmetro digital em tensão Ac tudo certinho.Porem só consigo medir se estiver com a carga conctada caso contrario nao obtenho nada na saída. Estou utilizando o bta16 com um moc3023. Sei que o defeito nao esta na parte eletronica pois se alimento o led do optoacoplador diretamente nos 5v a medicao na saida fica correta (127volts)
Agradeco a todos desde já.
Estou utilizando o bta16 com um moc3023. Sei que o defeito nao esta na parte eletronica pois se alimento o led do optoacoplador diretamente nos 5v a medição na saida fica correta (127volts)
Isso pode siginficar que o teu sinal PWM nao esta a alcançar os 5V e como tal a tua saida nao atinge os 127V.
Podes colocar uma foto ou imagem do teu circuito?
Essa tensão de 127V é alternada correto?Podes também estar a fazer disparar o triac com um desfazamento em relaçao à tua tensao AC que ira fazer que resulte em metade da tensão.
O teu circuito faz detecção de 0 para estar sincronizado com os 50Hz da linha AC?
Meu circuito tem sim a leitura do cross zero com um 4n35 ligada a uma porta attach e o programa faz a contagem para 60Hz , dispara o triac após o ponto zero variando de 1 a 8,33 ms que é o comprimento de uma parte da onda em 60Hz.
A tensão é 127 AC que está entrando corretamente, mas na saída mesmo com o disparo no nivel máximo a tensão mais alta que chega é de 68Volts.
Vou postar uma foto na montagem da protoboard e o código tambem.
Agradeço
Esquema:
link foto grande : http://imageshack.com/a/img580/9683/o0xa.jpg
Código editado para variação pelo potenciometro :
#include <TimerOne.h>
#define triacApin 13
int power = 0;
int pot = 0;
int led = 0;
void setup() {
pinMode(triacApin, OUTPUT);
pinMode(A0,INPUT);
pinMode(11,OUTPUT);
digitalWrite(11,HIGH);
digitalWrite(triacApin, LOW);
Timer1.initialize();
attachInterrupt(1, zero_cross_detect, FALLING);
}
void loop() {
pot = analogRead(A0);
power = map(pot,0,1023,0,100);
}
void zero_cross_detect() {
if(power > 0){
long dimtime = int(map(power,0,100,7900,500));
Timer1.attachInterrupt(gateTRIAC, dimtime);
Timer1.start();
}else{
digitalWrite(triacApin, LOW);
Timer1.stop();
}
}
void gateTRIAC () {
digitalWrite(triacApin, HIGH);
delayMicroseconds(5);
digitalWrite(triacApin, LOW);
Timer1.stop();
}
Me parece que o teu problema esta na configuraçao da interrupçao.
Tu tens:
attachInterrupt(1, zero_cross_detect, FALLING);
A funçao é:
attachInterrupt(interrupt, ISR, mode)
Logo tu estas a dizer que queres usar a interrupção 1 que fica no pino 3!
No teu circuito me parece que nao esta no pino 3 ou estou errado?
Como estas a usar o atmega328 os pinos de interrupçao sao:
External Interrupts: 2 and 3. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details.
Olhando ao teu codigo nao sei se será boa idea teres uma interrupçao a chamar outra ...
No entanto coloca lá o pino no sitio certo e testa.
Realmente estava no pino errado vou testar e logo posto .
Mas não entendi a parte que você comentou de 1 interrupção chamar a outra.
HugoPT:
Olhando ao teu codigo nao sei se será boa idea teres uma interrupçao a chamar outra ...
Lê isto:
Iras perceber melhor como tens de disparar o traic para obteres o dimmer de forma eficiente.
Muito bom ,vou ler detalhadamente e posto os resultados.
Agradeço.
Acabei .... finalmente agora funcionou tudo certo..
Segue a foto do novo esquema :
Link Grande : http://imageshack.com/a/img39/4263/kq8v.jpg
Segue código adaptado para exatos 60Hz:
int AC_LOAD = 13;
int dimming =115;
int pot = 0;
int dimtime = 0;
void setup() {
pinMode(AC_LOAD, OUTPUT);
attachInterrupt(0, zero_crosss_int,RISING);
}
void zero_crosss_int() {
dimtime = (69*dimming);
delayMicroseconds(dimtime);
digitalWrite(AC_LOAD, HIGH);
delayMicroseconds(8.33);
digitalWrite(AC_LOAD, LOW);
}
void loop() {
pot = analogRead(A0);
dimming = map(pot,0,1023,115,5);
}
// Este código já foi corrigido .
Acabei .... finalmente agora funcionou tudo certo..
Ainda bem que conseguiste.
Resta-me só fazer um reparo.Já tentas-te pegar no código "Segue código adaptado para exatos 60Hz:" e correr na IDE do Arduino?
Está incompleto, falta a void setup(), faltam ; em algumas partes, variáveis não declaradas ...
Quem for ler isso e pegar nesse código vai ficar com mais perguntas que respostas.Vá lá faz a tua parte de bom membro do fórum e tenta dar a informação o mais legível possível, não era o que tu gostavas encontrar se tivesses um problema assim?
Infelizmente informação incompleta é recorrente no fórum, muitas vezes por preguiça de escrever ...
Engano seu , não foi preguiça de escrever , foi um descuido que tive ao editar o código pois eu apaguei algumas partes que tinha criado para gerar outras funções . Mas já vou reparar.
Engano seu , não foi preguiça de escrever , foi um descuido que tive ao editar o código pois eu apaguei algumas partes que tinha criado para gerar outras funções . Mas já vou reparar.
Ok colega
Bons estudos
Obrigada , agradeço a ajuda e atenção de todos.
Galera por gentileza, alguém saberia me dizer se caso eu quisesse mudar para o Timer 1 este programa, o que eu deveria modificar no mesmo, fora adicionar a respectiva biblioteca e mudar o pino, para que este programa funcione?. Pergunto isso pois me parece que um é de 8 bits e outro de 16 bits.
Desde ja agradeço a atenção.