net. Por ele você seta o valor da luminosidade pelo serial monitor que vai de 0 a 100%. pela chamada
int Concatena_Numeros(int variavel1, int variavel2){int resultado;resultado = ((variavel1-'0')*10)+(variavel2-'0');return resultado;}
Porém a minha aplicação depende de setar o valor da luminosidade da lâmpada a partir de uma entrada analôgica (1024 valores), estou usando um potenciômetro de 10k.
Ou seja, acho que eu preciso fazer um map da variavel e transforma-la em 0 a 100, ou de 20 a 95.. Pois não preciso deixa-la totalmente apagada ou os 100% dela.
Segue em anexo o código original, e o meu código, só que o meu código não está funcionando certo. Alguém pode me ajudar?…
deixar rodando assim por um tempo.
no teste em bancada funcionou perfeitamente, mais quando coloquei no meu quadro de energia começou a piscar.
já fiz a troca dos trias e moc3021 duas vezes, em bancada OK, quando instalo no quadro começa o problema.
fica piscando como se o tivesse tensão no gate do triac.
porem não tem, eu não consegui um osciloscópio para verificar pulso, mais já estou providenciando um para tal projetos.
obs:
Tentei resitores de 1K a 330R no lado de alta tensão!
no lado de sinal uC eu tentei de 330R a 4R7 e mesmo assim os problemas persistiram.
…
re o LED uma corrente de 35,54mA,( 7,82V/220R = 35,54mA),
dentro da faixa tolerada por ele.
Mas o que deve estar acontecendo, é que, ao enviar o sinal de controle de 7,82V na base de
Q3, o emissor tende a ficar com a mesma voltagem da base (Ve = Vb-0,7V), e fica com 7,12V.
Isto provoca uma grande corrente sobre o LED e a queima do mesmo. Pode até queimar tb o Q3.
Redesenhei seu circuito para ter uma outra visão dele.
Recomendo mover R1 para o emissor de Q3, pois assim evitará esta corrente, e manterá a corrente normal
de 35,54mA sobre o LED ao receber o pulso de disparo.
Rui
…
Adicionado por mineirin RV ao 10:53 em 3 janeiro 2016
ncapsulamento SMD para o MOC, tenha oferta limitada no mercado brasileiro. Eu consultei no site da Digikey, e lá não há problema de oferta deste MOC em SMD.
Mas observe: se vc pretende usar um componente com encapsulamento SMD "300 mils", ele continuará com a mesma especificação de isolação do PTH "300 mils". Mas se vc usar um SMD com tamanho menor, como por exemplo SO-8 "150 mils", então as especificações de isolação também serão reduzidas, e dependendo da forma como é seu Projeto poderá impactar no resultado esperado.
Abrçs
Elcids…
Adicionado por Elcids Chagas ao 8:48 em 26 março 2020
Fique a vontade para baixar, usar, melhorar e compartilhar! 1 de junho de 2016.*/
int sensor = A0;
int opto = 2; // Pino de leitura do optoint controle = 3; // Pino ligado ao circuito do Triac//este pino tem que disparar em [To+T/16] para que o motor tenha 7T/8 da potencia totalint led = 13;
// Variables will change:int optoState; // Estado do opto. Se estiver HIGH, tensao diferente de zero.//Se estiver em LOW, tensao = zero. Presisamente o que queremos.int lastOptoState; // O estado anterior do sensor.//long lastMillis; //define a contagem do tempo.
int leitura;int D;int visor;
void setup(){ pinMode(opto, INPUT); // inicializa o pino do opto de leitura como inpput pinMode(sensor, INPUT); //inicializa o pino do sensor analogico como input pinMode(controle, OUTPUT); // inicializa o pino do MOC-3031 como output pinMode(led, OUTPUT); // inicializa o pino do MOC-3031 como output Serial.begin(9600);
}
void loop(){ { digitalWrite(controle, LOW); optoState = digitalRead(opto); // compare the buttonState to its previous state if ((optoState != lastOptoState) && (optoState == HIGH)) { leitura = float(analogRead(sensor)); D = map(leitura, 0, 1023, 0, 8200); // o delay de controle float T = float (map(leitura, 0, 1023, 0, 100000)) / 1000;
delayMicroseconds(D); digitalWrite(controle, HIGH); delayMicroseconds(200); digitalWrite(controle, LOW); Serial.print(T); Serial.println(" %"); } lastOptoState = optoState; }}
E eis o print:…
sing detector.
Anexei a foto do relé de estado solido que montei com o TRIAC BT139-800 e MOC3021, funciona bem, para testar utilizei um código tipo Blink, funciona e continua funcionando.
Anexei a foto do zero crossing detector que montei com optoacoplador PC817.
Para testar o circuito do zero crossing detector com o Arduino usei o código (
monitoramento de frequência)
do Mauro Assis Link: http://automatobr.blogspot.com/2013/05/controle-de-potencia-em-corrente_17.html Funcionou bem, o monitor serial mostrou 120 como esperado.
Agora estou tendo dificuldade de unir o relé de estado solido (SSR) e zero crossing detector com o Arduino testei o código do Mauro Assis Link: http://automatobr.blogspot.com/2013/05/controle-de-potencia-em-corrente_18.html . A lâmpada não acende e o led do relé acende muito fracamente.
Isso por causa que o TRIAC não consegue ativar tão rapidamente?
Meu Arduino nano Chines com chip ATIMEL MEGA 328P (inscrito no chip) é muito leto para essa tarefa?
Programa com problema?
Como posso resolver e unir o TRIAC e o zero crossing detector com o Arduino???
Desculpa pelo tamanho da foto.…
Adicionado por Luís Felipe ao 13:17 em 1 março 2023
or/emissor, multiplica-se a corrente de base/emissor pelo Hfe do transistor.O Hfe, não é um valor fixo, e depende de algumas variareis, tais como: Vce, IC, e claro, cada transistor tem
o seu "range "de Hfe.
O transistor BC337, por exemplo, dependendo das letras que tem depois do nome "BC337xx", tem Hfes diferentes.Então pega-se o valor da corrente de base/emissor e multiplica pelo Hfe, e terá o valor da corrente de coletor/emissor.Neste caso em que o LED e resistor estão no emissor, eu usei um Hfe de 30 (conservador). Hfe normal seria 60.
FH, você tem razão, ficaria sim mais fácil, mas eu não quis alterar muito o circuito do RDH, pois não sei como é o restante do circuito antes dos transistores.
JG, poderia sim ter um resistor na base de Q1. E ele é até desnecessário. Pode usa-lo em serie com o do optoacoplador.
Mas ele ligou de tal forma que qdo tem o pulso o LED apaga. Q1 é PNP.
Eu montei há alguns anos um projeto que utilizei 8 interface iguais ao da figura (64 canais no total
e +- 10.000 lamps). https://www.youtube.com/watch?v=iY9o3ijajAM
Neste projeto eu usei assim:
No lugar de Q3 eu usei um UNL2803.Não foi necessário um transistor como o Q1, pois ao mandar o pulso para o MOC3023, o LEDem serie com ele acendia e eu sabia que tinha vindo um pulso paro o optoacoplador.
A diferença do MOC3021 e do MOC3023 que utilizei é só a corrente do DIAC.
Rui.
…
Adicionado por mineirin RV ao 11:17 em 4 janeiro 2016
remote.h>#include <avr/interrupt.h>
#define VolDOWN 2640488535 //codigo tecla controle remoto#define VolUP 2640455895 //codigo tecla controle remoto
int rIR = 11; //pino do sensor IRint triac = 13; //pino Triacunsigned int maxTimer = 65235; //65535 - (150e-6 / ( 62.5e-9 x 8 )) / o tempo para estouro do timer em 150us / comeco semiciclounsigned int minTimer = 48575; //65535 - ((8.33e-3+150e-6) / (62.5e-9 x 8)) // tempo para estouro do timer 150us +8.33ms // final semciclo unsigned int incremento = 150; //o dimmer terá uma resolução de 65235 - 48575 : mais de 16000 pontos, com incremento de 150 resulta em 120 niveis de luz...volatile unsigned int timer = minTimer; //quando a variavel será utilizada em interupções, deve ser "volatile" para garantir a leitura correta... IRrecv receptorIr(rIR);decode_results resultados;
void setup()//configurações iniciais...{ Serial.begin(19200); receptorIr.enableIRIn(); pinMode(triac, OUTPUT);pinMode(2, INPUT);//pino passagem zerodigitalWrite(2,HIGH);//liga o pullupdigitalWrite(triac,LOW);digitalWrite(rIR, HIGH);attachInterrupt(0, passagemzero, RISING); TCCR1B=0; //timer desligadoTIMSK1 = 1<< TOIE1;//habilita interrupção por estouro do timer1}
void loop(){if (receptorIr.decode(&resultados)) //se houve uma decodificação válida{switch (resultados.value) {//testa as teclas...case VolUP:timer +=incremento;//aumenta o valor de inicio do contador, diminuindo o tempo para estouro do timer, indo em direção ao inicio do semicicloif (timer > maxTimer){//proteção para o timer não sair da faixa timer = maxTimer;}Serial.print(millis());Serial.println(".VolUP");break;case VolDOWN: timer -=incremento;//diminui o valor de inicio do contador, aumentando o tempo para estouro d timer, indo em direção ao fim do semiciclo...
if (timer < minTimer){timer = minTimer;}Serial.print(millis());Serial.println(".VolDOWN");break;default:break; }delay(30);//atrasa o recebimento de novos comandos tornando mais suave o dimmerreceptorIr.resume(); }}
void passagemzero(){digitalWrite(triac,LOW);//desliga triacTCNT1=timer;//carrega contadorTCCR1B=2; //liga timer com prescaler de 8}
ISR(TIMER1_OVF_vect)//interrupção do timer1 {TCCR1B=0; // desliga timer1digitalWrite(triac,HIGH); //liga triac}
…
Adicionado por fabio henrique ao 10:46 em 11 fevereiro 2013
exemplo que ele passou, porém no código que ele montou com botões eu queria mudar para escrever uma porcentagem na porta serial, por exemplo se eu digitar 50 a lâmpada acende 50%, digito 25 e a lâmpada ascende 25%, digito 100 e a lâmpada ascende 100%.
O código do Renato Aloi é esse:
int UP = 7; int DOWN = 8; int LAMP = 3; int dimming = 128; int counts = 7; int dimmer[7] = { 1, 105, 100, 75, 50, 25, 10 }; int i = 0; void setup() { //Serial.begin(9600); //delay(1000); pinMode(UP, INPUT); pinMode(DOWN, INPUT); pinMode(LAMP, OUTPUT); digitalWrite(UP, HIGH); digitalWrite(DOWN, HIGH); attachInterrupt(0, zero_crosss_int, RISING); } void loop() { if (!digitalRead(UP) || !digitalRead(DOWN)) { if (verifica_botao(UP)) { if (i < (counts - 1)) i++; //Serial.print("UP: "); //Serial.println(i, DEC); } else if (verifica_botao(DOWN)) { if (i > 0) i--; //Serial.print("DOWN: "); //Serial.println(i, DEC); } } //Serial.print("VALOR: "); // Serial.println(i, DEC); dimming = dimmer[i]; delay(100); } void zero_crosss_int() { int dimtime = (65 * dimming); delayMicroseconds(dimtime); digitalWrite(LAMP, HIGH); delayMicroseconds(8.33); digitalWrite(LAMP, LOW); } byte verifica_botao(byte botao) { if (!digitalRead(botao)) { unsigned long tempo = millis() + (150 - dimming); while(tempo > millis()) { if (digitalRead(botao)) return LOW; } return HIGH; } else return LOW; }
Estou usando:
Triac Tic246
Optocopladores: Moc3021 e 4N25
Ponte de diodo
Resistores
Alguém poderia me orientar como deveria fazer o código para funcionar direitinho pela porta serial?…
empo todo. Vamos supor que o Triac está Ok. Neste caso, sobra a alternativa de que ele está disparando o tempo todo. Vamos pensar em cima disto então, usando como referência o circuito na figura a seguir:
(clique na figura para "zoom")
Veja que R1/C1 é apenas um "snuber", para o caso de cargas indutivas.
Já R2/C2 forma um Filtro que além de filtrar spikes da rede elétrica AC (com alto dv/dt ), também defasa a tensão aplicada ao MOC3021, e assim provém um meio a mais de controlar o momento do disparo do Triac.
E R3/MOC é o caminho de disparo do Triac, um caminho "controlado", e portanto o desejado. Quanto menor R3, maior a chance de disparo. Assim aumentando R3, diminui-se a corrente de disparo. No entanto note que embora C2 "segure" momentaneamente a tensão sobre R3 (o que funcionaria como uma "fonte instantânea" para a corrente de disparo), o próprio R2 está em série com R3, o que dificulta estabelecer um ponto de disparo e ao mesmo tempo a filtragem dos spikes.
Logo Rasteiro, é necessário que vc adeque a malha R2/C2/R3, de acordo com as características do Triac, e também do MOC. Com isso, enquanto a tensão sobre C2 não atinge o suficiente para fazer o MOC conduzir, o Triac não é disparado, e R2/C2 filtram spikes para impedir disparos acidentais devido a alto dv/dt. E quando a tensão sobre C2 atinge o suficiente para o MOC conduzir, então fecha-se o caminho da corrente de disparo para o Gate do Triac, e então ocorre o disparo controlado e desejado.
Conclusão: vc não pode pegar um circuito "genérico" como aquele do datasheet da Fairchild (um fabricante de excelência), e simplesmente querer que ele funcione com qualquer outro circuito onde os componentes tem características específicas. Aquele circuito no datasheet, é uma referência apenas, que permite que vc desenvolva para seu caso real e específico. Veja na figura anterior, onde salientei em amarelo.
Ah, vc ainda não confirmou qual Triac está usando.
abrçs
Elcids…
Adicionado por Elcids Chagas ao 14:45 em 20 setembro 2021