E ae Pessoal do Laboratório

Estou desenvolvendo um projeto com Dimmer, segui os passos que o Renato Aloi postou na aula 14 no youtube, consegui fazer a lampada ligar e diminuir até desligar no código 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?

Exibições: 3143

Anexos

Responder esta

Respostas a este tópico

pelo q eu vi eh so vc descomentar todas as linhas q tem // na frente

Oi Jose,

Ao retirar os // voce verá os resultados no Serial monitor,

mas pelo que entendi, o Everson quer mandar dados do serial para o dimmer, e ajusta-lo com os valores que ele digitar.

Rui

Exatamente isso Rui

Jose

eu tirei as // da frente então aparece valores na serial, porém eu quero digitar os valores na serial para que o resultado dê na lâmpada, e como não entendo muito de programação to com essa dificuldade.

a sim agr entendi o q vc quer 

vai ai um codigo 

#include /code>TimerOne.h>   // inclui biblioteca Timer1
 
#define triacApin 4 // Define que o Dimmer será comandado pelo pino 4
int frequencia = 60;
int stateTriacA = 0;
int power = 0;  //inicializa variavel que controla potencia na lampada com 0 (lampada apagada)
 
void setup()
{
Serial.begin(9600);
pinMode(triacApin, OUTPUT);
digitalWrite(triacApin, LOW);
Serial.println("Controle de TRIAC.\r\nDigite o Percentual de Brilho (duas casas) Ex.: 25");
// Initialize the interruption time Timer1
Timer1.initialize(); // Initialize TimerOne library for the freq we need
// Attach the interrupt 0 to pin 2 for the detection of zero crossing (Zero Cross Detection)
attachInterrupt(0, zero_cross_detect, FALLING); // Attach an Interrupt to Pin 2 (Interrupt 0) for Zero Cross Detection
}
 
void loop()
{
int i = 0;
int read_data[2];
while(i/code>2){
while(Serial.available()){
read_data[i] = Serial.read();
i++;
}
}
power = Concatena_Numeros(read_data[0],read_data[1]);
Serial.println(power);
 
}
 
void zero_cross_detect()
{
if(power > 0){
long dimtime = int(map(power,0,100,8000,150));  // calcula o tempo de delay para o disparo do TRIAC 7950,100
Timer1.attachInterrupt(gateTRIAC, dimtime);  //associa a funcao gateTRIAC com Interrupcao do TIMER1
Timer1.start();  // inicia contagem TIMER1
}else{
digitalWrite(triacApin, LOW);   // mantem gate do TRIAC desativado.
Timer1.stop();
}
}
 
void gateTRIAC ()
{  // trata interrupcao do TIMER1 gerando pulso no gate do TRIAC
digitalWrite(triacApin, HIGH);  // dispara o Triac
delayMicroseconds(5);  // aguarda 5 microsegundos para garantir disparo do TRIAC
digitalWrite(triacApin, LOW);   // desabibilta gate do TRIAC
Timer1.stop();
}
 
int Concatena_Numeros(int variavel1, int variavel2)
{
int resultado;
resultado = ((variavel1-'0')*10)+(variavel2-'0');
return resultado;
}
e usa essa biblioteca  
espero q ajude

Jose esta dando um erro no /code, se eu deixar como esta diz que falta declarar Timer1 no scopo se eu tiro o code diz que falta a declaração do code, o que é que esta errado?

vc baixou e instalaou a biblioteca q eu mandei?

Oi Everson,

testa aí.

Rui

int LAMP = 3;
int dimming = 128;
int i = 0;

String str;

void setup()
{
Serial.begin(9600);
delay(300);

pinMode(LAMP, OUTPUT);

attachInterrupt(0, zero_crosss_int, RISING);
}

void loop()
{

if(Serial.available() > 0)
{
str = Serial.readStringUntil('\n');
dimming = str.toInt();
Serial.println(dimming);
}
}

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;
}

Boa Noite Rui

Não tenho controle da lâmpada, ela fica ligando e desligando sozinha, se eu digitar algum valor na serial não acontece nada.

Oi Everson, bom dia.

vou rever o código e tentar entender o bug.

Rui

Ewerson, acho que esqueci um pedaço do antigo código neste novo kkkk.

Vou ver se foi só isto.

Rui

Oi Everson, testa agora e ve se funciona.

Rui

int LAMP = 3;
int dimming = 128;
int i = 0;

String str;

void setup()
{
Serial.begin(9600);
delay(300);

pinMode(LAMP, OUTPUT);

attachInterrupt(0, zero_crosss_int, RISING);
}

void loop()
{

if(Serial.available() > 0)
{
str = Serial.readStringUntil('\n');
dimming = str.toInt();
Serial.println(dimming);
}
}

void zero_crosss_int()
{
int dimtime = (65 * dimming);
delayMicroseconds(dimtime);
digitalWrite(LAMP, HIGH);
delayMicroseconds(8.33);
digitalWrite(LAMP, LOW);
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço