Bom dia, estou com um problema na aquisição de dados pelo monitor serial do Arduíno, quando controlo uma lâmpada incandescente... eu utilizei o Dimmer Shield acoplado ao arduino, e em sua programação conforme o lab de garagem fornece, temos que a passagem pelo zero, gerá um Delay variável, que é necessário para o correto funcionamento do dimmer! mas quando eu quero fazer a aquisição de dados em tempo real, para plotar no MatLab a curva de controle do sistema, o tempo de amostragem é variável devido a esse delay, alguém sabe o que posso fazer para corrigir esse problema?
A programação do delay onde há a passagem pelo zero, é essa:
void zero_crosss_int() // Função que detecta a passagem por 0
{
// Calculo do ângulo de disparo :: 60Hz-> 8.33ms (1/2 Cycle)
// (8333us - 8.33us) / 128 = 65 (Approx)
int dimtime = (65*dimming); // 65 equivale a 1 de 128
delayMicroseconds(dimtime); // Off cycle
digitalWrite(AC_LOAD, HIGH); // disparando o Triac
delayMicroseconds(8.33); // Aguarda o tempo de disparo
digitalWrite(AC_LOAD, LOW); // finaliza o pulso do Triac
}
Reparem que o valor do dimtime é variável de acordo com o valor do dimming, e o valor do dimming é inversamente proporcional a ação! ou seja, se eu mandar a lâmpada ficar acessa com uma potência alta o dimming é baixo e o delay é menor, caso contrário ocorre o inverso.
Desde já Obrigado
Tags:
Faça a pergunta para o André, ele é o incubador desta placa, solicite a amizade dele e envie msg.
http://labdegaragem.com/profile/AndreAraujoKuhnPereira?xg_source=ac...
Boa sorte!
Abs.
Obrigado!
Boa noite a todos!
Conforme o contato por e-mail na plataforma labdegaragem, e a discussão deste post, quero compartilhar o código de controle do Dimmer Shield sem a utilização do delay (interrupção)
Em breve pretendo fazer um tutorial com esse código, controlando lâmpadas leds, fluorescentes e incandescentes, todos dimmenrizáveis.
Segue o código também em anexo em dois formato, .ino e .rar.
Caro João Archetti, será necessário fazer algumas modificações para satisfazer a sua necessidade!
//André Kuhn
//Controle do Dimmer Shield pelos botões sem interrupção (sem delay)
//Criando uma variavel inteira e armazenando o valor 3, corresponde a porta digital 3, do gate do triac
int load = 3;
//Criando uma variavel inteira e armazenando o valor 2, corresponde a porta digital 2, circuito de zero do Dimmer Shield
int interrupcao = 2;
//Criando variavel inteira para armazenar o pino da chave tácteis do Dimmer Shield
int chave_1 = 4, chave_2 = 5;
//Criando variável para armazenar o tempo de inicio do ponto zero (tempo_inicio), e o tempo corrido após a passagem pelo ponto zero (tempo_corrente)
long tempo_inicial = 0;
long tempo_corrente = 0;
//Variável inteira para armazenar a porcentagem desejada
int porcentagem_desejada = 40;
//Variável lógico para verificar se um dos dois botões estão pressionados
boolean verifica = false;
//Função de configuração do microcontrolador
void setup()
{
//Configurando a comunicação serial, com Baud Rate de 9600
Serial.begin(9600);
//Definindo o pino digital do disparo do triac como saída
pinMode(load, OUTPUT);
//Definindo o pino digital do circuito de zero do Dimmer Shield como entrada
pinMode(interrupcao, INPUT);
//Definindo os pinos digitais das chaves tácteis do Dimmer Shield como entrada
pinMode(chave_1, INPUT);
pinMode(chave_2, INPUT);
}
//Função da programação do arduino
void loop()
{
//Código para executar o controle do disparo do triac, e chamando a função zeroCross()
//------------------------------------------------------------------------------------
if(digitalRead(interrupcao))
{
//Função de controle do disparo do triac
zeroCross();
}
//Código para executar o controle do disparo do triac, e chamando a função zeroCross()
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
//Botões responsáveis para controlar a potência do load
if((digitalRead(chave_1) == HIGH) && (verifica == false))
{
//Imprime na tela do Serial Monitor da IDE do arduino, o pressionamento da chave_1
Serial.println("Chave_1 pressionado");
//Verificando se a chave continua pressionado
verifica = HIGH;
//Se a porcentagem desejada for menor que 100, executa essa condição
if(porcentagem_desejada < 100)
{
//Incrementando valor 10 na variável porcentagem_desejada
porcentagem_desejada = porcentagem_desejada + 10;
}
//Imprimindo na tela o valor da porcentagem desejada
Serial.println(porcentagem_desejada);
}
if((digitalRead(chave_2) == HIGH) && (verifica == false))
{
//Imprime na tela do Serial Monitor da IDE do arduino, o pressionamento da chave_2
Serial.println("Chave_2 pressionado");
//Verificando se a chave continua pressionado
verifica = HIGH;
//Se a porcentagem desejada for maior que 0, executa essa condição
if(porcentagem_desejada > 0)
{
//Decrementando valor 10 na variável porcentagem_desejada
porcentagem_desejada = porcentagem_desejada - 10;
}
//Imprimindo na tela o valor da porcentagem desejada
Serial.println(porcentagem_desejada);
}
//Botões responsáveis para controlar a potência do load
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
//Verificando se algum botão está pressionado
if((digitalRead(chave_1) == LOW) && (digitalRead(chave_2) == LOW))
{
verifica = LOW;
}
//Verificando se algum botão está pressionado
//-----------------------------------------------------------------------------------
}
//Função responsável por executar o controle do Disparo do Triac
void zeroCross()
{
//Fazendo a leitura do tempo e armazenando na variável tempo_inicial
tempo_inicial = micros();
//Enquanto o tempo percorrido for menor que 8200, executa essa condição
while((micros() - tempo_inicial) < 8200)
{
//Fazendo a leitura do tempo corrente
tempo_corrente = micros() - tempo_inicial;
//Se a condição for verdadeira, faz o disparo do triac, ou seja, coloca o pino de disparo do triac em nivel alto
if(tempo_corrente > (porcentagem_desejada * 82)) digitalWrite(load, HIGH);
//Coloca o pino de disparo do triac em nível baixo
digitalWrite(load, LOW);
}
}
//Controle do Dimmer Shield pelos botões sem interrupção (sem delay)
//André Kuhn
Att.
André Kuhn.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por