1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

Dimmer SHIELD + LM35

Discussion in 'Arduino' started by Bruno Carvalho, Nov 19, 2015.

  1. Bruno Carvalho

    Bruno Carvalho New Member

    Joined:
    Oct 22, 2015
    Messages:
    7
    Likes:
    0
    Does anyone know how to increment or decrement the dimmer using the lm35 ? Im using this program and i dont know what can i change to do this.HELP!
    int AC_LOAD = 3;// Dará o pulso no Triac pin
    int dimming = 125;// Dimming level (0-128) 0 = ON, 128 = OFF
    unsigned long time;//Contará o tempo
    unsigned long timeout;//Estouro
    int brilho[3];//Recebe os valores da serial
    int i=0;//Quantidade de caracteres recebida pela serial
    int flag=0;//Indica que foi recebida informação pela serial
    char temp;//Armazena dados recebidos pela serial
    int x,y;//Variaveis auxiliares

    void setup()
    {
    Serial.begin(9600);//Inicia a serial com baud rate
    pinMode(AC_LOAD, OUTPUT);// Disparo do Triac pino 3
    attachInterrupt(0, zero_crosss_int, RISING);// Interrupção detecta a passagem por 0, quando passa de nível baixo para auto
    pinMode(4, INPUT);// Configura o pino 4 como entrada
    pinMode(5, INPUT);// Configura o pino 5 como entrada

    }

    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
    }

    void loop()
    {
    //------------------------------------------------------------------------------------------
    // Retorna o tempo em milisegundos desde que o Arduíno começou a rodar,
    time = millis()%2;//Divide por 2 e salva o resto
    if(time==1||time==0)//Compara se o resto é igual a 0 ou 1 e sempre vai ser
    {
    timeout++;// Cronômetro
    if (timeout>500)// Compara se houve estouro do tempo
    {
    i=0;// Zera o quantidades de caracteres recebidos
    flag=0;// Zera o aviso de que foi recebido algum dado na serial
    }
    }

    //-------------------------------------------------------------------------------------------

    //Aumenta a intensidade
    if(digitalRead(4)==1 && dimming >10)// Compara se o botão foi pressionado e se o dimming é maior que 10 seu limite máximo
    {
    dimming= dimming -5;// Aumenta a intensidade de 5 em 5
    y=dimming/1.25;//Converte em %
    y=(y-100)*(-1);//O dimming é inversamente proporcional à porcentagem
    Serial.print(y);
    Serial.println("%");
    Serial.print("Resolucao: ");
    Serial.println(dimming);
    delay(100);// Aguarda um tempo até o próximo acionamento
    }
    //Diminui a intensidade
    if(digitalRead(5)==1&& dimming<125)
    {
    dimming= dimming +5;
    y=dimming/1.25;
    y=(y-100)*(-1);
    Serial.print(y);
    Serial.println("%");
    Serial.print("Resolucao: ");
    Serial.println(dimming);
    delay(100);
    }
    //--------------------------------------------------------------------------------------------
    if (Serial.available()>0)// Verifica se houve recepção
    {
    flag=1;//Sinaliza que houve recepção
    timeout=0;// Zera o o tempo de reset
    //------------------------------------------------------------------------------------------
    temp = Serial.read();// Armazena o que foi recebido pela serial
    brilho=temp-48;// Decrementa 48 na tabela ascii para converter de decimal para char
    i++;// Contabiliza um recebimento
    }
    //---------------------------------------------------------------------------
    if (timeout>200&&flag==1)// Compara se houve estouro do timeout(se ficou um tempo sem recepção) e se houve recepção
    {
    flag=0;// Sera aviso de recepção

    // Verifica a quantidade de informação recebida
    switch(i)
    {
    case 1:
    x=brilho[0];//Unidade
    break;

    case 2:
    x=brilho[0]*10 + brilho[1];//Dezena e unidade
    break;

    case 3:
    x=brilho[0]*100 + brilho[1]*10 + brilho[2];//Centena, Dezena, Unidade
    break;
    }
    // Envia para serial informações em % e resolução de disparo
    Serial.print(x);
    Serial.println("%");
    delay(30);

    if(x>100||x<0)// Proteção para se foi inserido um valor mair que 100%
    {
    Serial.println("Excedeu o limite");
    }
    else// Se estiver tudo OK
    {
    x=100-x;// Inversamente proporcional a %
    dimming=x*1.25;// Resolução diminuida de 128 para 125 para garantir um tempo bom de resposta
    if(dimming<8)
    {
    dimming=8;// O dimming será sempre maior que 10 para garantir um tempo bom de resposta
    }
    //Envia para a serial o valor da resolução
    Serial.print("Resolucao: ");
    Serial.println(dimming);
    }

    }
    }
     

Share This Page