quarta-feira, 29 de março de 2017

Dimmer Manual/Automatico com arduino

Antes de começar a explicar devemos dizer o que é um Dimmer:

Dimmer é um dispositivo utilizado para variar a intensidade de uma corrente elétrica média em uma carga. Eles consistem de gradadores que, através da diminuição ou aumento da tensão valor eficaz e portanto um aumento da potência média de uma carga, controlam a intensidade produzida pela mesma. Exemplo, um dimmer tem como objetivo fazer com que aumente ou diminua a intensidade luminosa através de um potenciômetro, que auxilia nessa operação.

O projeto tem como função controlar uma carga, seja qual for que trabalhe com corrente alternada, através do ângulo-porcentagem desejada é possível controlar a intensidade de n cargas, então vejamos por etapas:

Obs.: O esquema esta montado para futura confecção do circuito.

O Dimmer:

   
 Dimmer Pci:

Shield Arduino:

Shield Arduino Pci:

O que é o 4N25:
O 4N25 é é um componente eletrônico que possui a capacidade de realizar o isolamento de partes específicas de um circuito Através de um isolamento que constitui-se por um diodo emissor de luz infravermelho. Resumidamente, o Optoacoplador 4N25 é capaz de isolar dois circuitos eletrônicos com total segurança, mantendo um controle de comunicação entre ambas as partes. Total segurança, é garantida graças ao fato de o mesmo não possuir um contato elétrico e nem mesmo mecânico, mas sim um contato luminoso.

Na parte do 4N25 temos o detector de zero, que é basicamente  um circuito que produz um pulso positivo de curta duração quando o sinal senoidal de entrada, ou outro sinal passa pelo ponto de zero volt na sua descida, então toda vez que a tensão passar pelo 0 volt ele vai detectar e informar isso ao Arduino.

O que é o MOC3021:
Ele é igual ao 4N25, ou seja um octoacoplador, com a diferença que ele possui a capacidade de controlar um fototriac com tensões de rede igual ou inferior a 240V.

Na parte do MOC3021 temos o Triac que terá a função de controlar a carga, o Arduino informara ao moc o ângulo que o programador deseja adquirir na carga.

Esse circuito será ligado a carga, a tomada e alimentara o Arduino com uma fonte de celular e pra garantir que não ira queimar ainda tem um regulador de tensão LM7805.

Esse esquema(Shield Arduino) é um Shield que montamos, o conector ARDUINO se encaixará no ARDUINO do Dimmer, colocamos varios outros conectores para ter flexibilidade na hora de trocar algum pino no Software, o POT é a alimentação do potênciometro, SERIAL será caso for necessário o auxilio de um modulo Bluetooth, AN estradas analógicas, J3 será o botão que ira decidir se o processo esta no modo automático ou manual.

Simulação:

O Software(em teste):

#define PINO_ZC 2
#define PINO_DIM 4

#define   but        6                                    // Botão pino 6 do Arduino
#define   pot       A3                                    // Potenciometro pino A3 do Arduino

int valor = 0;                                       // Variável para o tempo de disparo
int pothg = 0;
int pcto = 0;

volatile long luminosidade = 0;  // 0 a 100 

void zeroCross()  {
  if (luminosidade>100) luminosidade=100;
  if (luminosidade<0) luminosidade=0;
  long t1 = 8200L * (100L - luminosidade) / 100L;      
  delayMicroseconds(t1);   
  digitalWrite(PINO_DIM, HIGH);  
  delayMicroseconds(6);      // t2
  digitalWrite(PINO_DIM, LOW);   
}

void setup() {
  pinMode(PINO_DIM, OUTPUT);
  attachInterrupt(0, zeroCross, RISING);
  Serial.begin(9600);   
}

void loop() {  
  if(digitalRead(but) == 1){                             // --- Modo Automatico           
  char buffer[] = {' ',' ', ' '};                        // Recebe 3 bytes
   if (Serial.available()) {   
                                                          // Espera pelo caracteres
   Serial.readBytesUntil('n',buffer,3);                   // Na teoria era pra ler os caracteres até a letra N, ex 100n, 20n
   int incomingValue = atoi(buffer);
   Serial.println(incomingValue);

   if(incomingValue > 100 || incomingValue < 0){
   Serial.println("Somente de 0 a 100");  
   incomingValue = 0;
   }
   
   pcto = map(incomingValue, 0, 100, 10, 88); 
   
   luminosidade = pcto;    
      
   Serial.print("Porcentagem: ");
   Serial.println(incomingValue);
   
   Serial.print("Angulo: ");
   Serial.println(pcto);   
   }
   }else{   
   valor = analogRead(A3);  
   pothg = map(valor, 0, 1023, 10, 88); //Deve ser entre 20 a 94(no meu caso 10 e 88)
   pcto  = map(valor, 0, 1023, 0, 100); //porcentagem
   luminosidade = pothg;
   Serial.print("Valor: ");
   Serial.println(pcto);  
   }
}