Ajuda Dimmer

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 ?

Site : Renato Aloi: Código Dimmer Digital AC - Aula 14

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 :grin:
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.