ola garagistas tudo bem?
estou tentando acionar um triac no inicio do semi ciclo mas estou com um pouco de dificuldades
vou colocar o codigo do q eu quero modificar se puderem me ajudar a incluir a funçao cross int agradeço !!!
esse eh uma programaçao de nr-12
funciona assim :
aperta o botao liga e liga o motor, desliga para o motor, emergencia desliga o motor e so liga dnv se pressionar o reset assim como tb com o sensor
mas pra evitar interferencias no lcd quero acionar no tempo certo da senoide
segue o codigo:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int liga = 10;
int desliga = 9;
int reset= 8;
int emergencia = 7;
int sensor = 13;
int motor = 6;
boolean motor_bloqueado = true;
boolean libera_lcd = false;
boolean libera_lcd2 = false;
boolean libera_lcd3 = false;
void setup()
{
pinMode(liga,INPUT);
pinMode(desliga,INPUT);
pinMode(reset,INPUT);
pinMode(emergencia,INPUT);
pinMode(sensor,INPUT);
pinMode(motor,OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("OLA EZEQUIEL");
lcd.setCursor(0,1);
lcd.print("BOM TRABALHO");
}
void loop()
{
if (digitalRead(liga) == HIGH && motor_bloqueado == false && libera_lcd == false)
{
digitalWrite(motor,HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MOTOR LIGADO");
libera_lcd = true;
}
if (digitalRead(desliga) == HIGH && libera_lcd == true)
{
digitalWrite(motor,LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MOTOR DESLIGADO");
libera_lcd = false;
}
if (digitalRead(emergencia) == HIGH && libera_lcd2 == false)
{
digitalWrite(motor,LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BOTAO EMERGENCIA");
lcd.setCursor(0,1);
lcd.print("FOI PRESSIONADO");
motor_bloqueado = true;
libera_lcd2 = true;
}
if (digitalRead(reset) == HIGH && libera_lcd2 == true);
{
motor_bloqueado = false;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MAQUINA LIBERADA");
libera_lcd2 = false;
libera_lcd3 = false;
}
if (digitalRead(sensor) == HIGH && libera_lcd3 == false)
{
digitalWrite(motor,LOW);
motor_bloqueado = true;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SENSOR ACIONADO");
lcd.setCursor(0,1);
lcd.print("PRESSIONE RESET");
libera_lcd3 = true;
}
}
desde ja agradeço!!!
Tags:
Oi José.
1. O Triac estará ligado entre uma fase (R S ou T) e o GND, ou entre fases?
2 . Qual CI voce está utilizando para Zerocross e para Disparar o Tiac (4N25 e MOC3023, MOC....)?
Rui
José, eu uso muito este esquema e este código:
O código usa o interrupt cada semiciclo,
Este código é para um Dimmer controlado pela serial.
Mas pode ser modificado para ser acionado por um Botão.
No Lugar da lampada use o motor.
Rui
// Rotina para dimmer. (110v ou 220v) comandado pela serial
// Os valores de brilho da lampada são enviados ao Arduino pelo Serial Monitor.
// O Serial monitor deve ser configurado como "No line ending".
// Os valoes vão de 0 (min) a 100(max).
// Uso didático
// Rui 01/05/2015
//*************** Variaveis e constantes *************
int LAMP = 3; // Pino de disparo do Triac
unsigned int dimming = 115; // Variavel para tempo de retardo. Valor Inicial Minimo
String str; // Variavel string para receber dados da Serial
//*********************** Setup ********************
void setup() // Rotina de setup
{
Serial.begin(9600); // Inicializa a serial a 9600 bps
pinMode(LAMP, OUTPUT); // Define o pino(D3) LAMP como saída
attachInterrupt(0, zero_cross, RISING); // Enable interrupt no pino D2
Serial.println("Digite o valor de brilho de 0 min a 100 max"); // Mensagem de entrada
}
//*********************** Loop ********************
void loop() // Rotina de loop
{
if(Serial.available() > 0) // Verifica se tem dados disponiveis na serial
{
str = Serial.readStringUntil('\n'); // Le os dados da serial para uma string
dimming = str.toInt(); // Transforma a string em Interio
Serial.println(dimming); // Eco da entrada da serial
dimming = (118-dimming)*68; // Calcula o retardo para o disparo do triac
if (dimming <1224) dimming = 1224; // Valor para o brilho máximo 1224
if (dimming >7820) dimming = 7820; // Valor para o brilho minimo 7820
}
delay(10);
}
//******************** Zero_Cross_Int ****************
void zero_cross() // Rotina chamada à cada interrupt causada pelo zero cross do AC
{
delayMicroseconds(dimming); // Restardo calculado
digitalWrite(LAMP, HIGH); // Dispara o Triac
delayMicroseconds(8.33); // Duração do pulso de disparo
digitalWrite(LAMP, LOW); // Desliga pulso de disparo
}
tem um modelo do MOCXXXX que faz isso automaticamente, ele só dispara no zero da senoide,
Jonas,
Tem mesmo, é o MOC3041,
como eu não tenho mas tenho varios 4N25 e MOC3023, eu uso eles.
Rui
ola rui
eu vou usar o moc 3021 para disparar o triac
mas esse seu codigo aciona pelo serial neh?
eu queria q ele acionasse direto no max mas no inicio do semi ciclo
se puder me ajudar agradeço
vlw!!!
cara , pra disparar no inicio, basta acionar o triac no mesmo momento q detectar o zerocross. e pelo q entendi vc não vai precisar da função dimmer, ou vai?
nao vai ser 0% ou 100%
OI Jonas,
se voce quizer fazer "Dimmer" usando MOC3041, mesmo assim voce precisa de um device
para detectar o zero cross, para que o microntolador diga ao TRIAC qdo ele deve disparar.
Rui
Oi Rui,
O MOC3041 não permite fazer a dimerização por angulo de fase, ele é usado quando queremos um relé de estado sólido.
Este acoplador tem um circuito que detecta a passagem por zero e dispara o triac apenas no início do semiciclo da senoide. Se desejar fazer um dimmer use um MOC sem o zero cross detector.
Abraço.
entao se eu quiser um rele de estado solido sem dimmer posso fazer o arduino apenas alimentar o gnd desse moc q ele se encarrega de acionar o triac no momento correto?
José Miguel, se deseja fazer um relé de estado solido, use o MOC3041 e esqueça o zero cross.
O proprio MOC3041 faz esse serviço.
Liga o led - aciona o triac, desliga o led > desliga o triac
https://www.fairchildsemi.com/datasheets/MO/MOC3041M.pdf
http://www.electro-tech-online.com/threads/switching-ac-loads-with-...
puxa q bom q tem esse moc vou comprar ele vlw
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por