Pages: 1 ... 14 15 [16] 17 18 ... 30   Go Down
Author Topic: Automação residencial em módulos  (Read 71627 times)
0 Members and 2 Guests are viewing this topic.
Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Atualizando com códigos, foto, nova versão de PCI e uma nova PCI / shield.

Vou ter que dividir o post, porque ficou muito grande smiley-yell

Seguem os códigos:

Master (2 botões, um controlando cada lampada de cada slave):

Code:
#include <MasterSlaveFuji.h>

#define DEBOUNCE 50

MasterSlaveFuji *rs485;

byte buttonPin[2] = {5,6};
long lastButtonPress[2];
bool buttonIsPressed[2] = {false, false};
bool hasChanged[2] = {false, false};
bool lampOn[2] = {false, false};

#define ID 0

void setup()
{
  Serial3.begin(9600);
  Serial.begin(115200);
  rs485 = new MasterSlaveFuji(ID, &Serial3, 2);
  pinMode(buttonPin[0], INPUT_PULLUP);
  pinMode(buttonPin[1], INPUT_PULLUP);
}

void loop()
{
  
  // Verifica botões
  for (int i = 0; i < 2; i++)
  {
    if (digitalRead(buttonPin[i]) == LOW)  // Botao pressionado
    {
      if (!buttonIsPressed[i]) // Primeiro click
      {
        lastButtonPress[i] = millis();
        buttonIsPressed[i] = true;
      }
      else if ((millis() > (lastButtonPress[i] + DEBOUNCE)) && !hasChanged[i]) // Verificacao Debounce
      {
        lampOn[i] = !lampOn[i]; // Inverte lampada
        hasChanged[i] = true; // Debounce
        rs485->sendENQ(i+1, 'L', 1, rs485->Positive, '0', '0', '0', '0' + lampOn[i]); // Envia comando para modificar lampada (L01)
        rs485->waitForAnswer(200); // Aguarda resposta do slave, com timeout de 200 ms
        if (rs485->hasNewMessage()) // Verifica se recebeu resposta
        {
          if (rs485->type == rs485->ACK) // Verifica se o comando enviado foi entendido
          {
            Serial.print("Conhecido! Lampada do Slave ");
            Serial.print(i+1);
            Serial.print(" mudada para ");
            Serial.println((lampOn[i]?"On.":"Off."));
          }
          else if (rs485->type == rs485->NAK) // Verifica se o comando não foi conhecido
          {
            Serial.print("Comando não conhecido! Slave ");
            Serial.println(i+1);
          }
          else // Se o type não for nem ACK nem NAK, tem algo errado
          {
            Serial.print("Type não conhecido! Slave "); //
            Serial.println(i+1);
          }
        }
        else // Se não há nova resposta, houve timeout
        {
          Serial.print("Timeout! Slave ");
          Serial.println(i+1);
        }
      }
    }
    else // Botao nao pressionado (digitalRead == HIGH)
    {
      buttonIsPressed[i] = false;
      hasChanged[i] = false;
    }
  }
  
  // Solicita status das lampadas
  for (int i = 0; i < 2; i++)
  {
    rs485->sendENQ(i+1, 'S', 1, rs485->Positive, '0', '0', '0', '0'); // Questiona status das lampadas (S01)
    rs485->waitForAnswer(200); // Aguarda resposta do slave, com timeout de 200 ms
    if (rs485->hasNewMessage()) // Verifica se recebeu resposta
    {
      if (rs485->type == rs485->ACK) // Se o comando foi entendido, a resposta está OK
      {
        
        if ((rs485->data4 - '0') != lampOn[i]) // Verifica se foi modificada o status da lampada
        {
          lampOn[i] = rs485->data4 - '0'; // Guarda novo status
          Serial.print("Lampada do Slave ");
          Serial.print(i+1);
          Serial.print(" mudou para ");
          Serial.println((lampOn[i]?"On.":"Off."));
        }
      }
      else if (rs485->type == rs485->NAK) // Verifica se o comando não foi conhecido
      {
        Serial.print("Comando não conhecido! Status Slave ");
        Serial.println(i+1);
      }
      else // Se o type não for nem ACK nem NAK, tem algo errado
      {
        Serial.print("Type não conhecido! Status Slave "); //
        Serial.println(i+1);
      }
    }
    else // Nao houve nova mensagem - timeout
    {
      Serial.print("Status Timeout! Slave ");
      Serial.println(i+1);
    }
  }
  
  // Verifica status do botão do Slave 2
  rs485->sendENQ(2, 'B', 1, rs485->Positive, '0', '0', '0', '0'); // Questiona status do botao do slave 2 (B01)
  rs485->waitForAnswer(200); // Aguarda resposta
  if (rs485->hasNewMessage()) // Se houver resposta...
  {
    if (rs485->type == rs485->ACK) // Se a resposta foi de entendido...
    {
      if (rs485->data4 == '1') // Se o botao foi pressionado...
      {
        lampOn[0] = !lampOn[0]; // Modifica status da lampada do slave 1
        // Envia comando para o Slave 1 com novo status da lampada (L01)
        rs485->sendENQ(1, 'L', 1, rs485->Positive, '0', '0', '0', '0' + lampOn[0]);
        rs485->waitForAnswer(100); // Aguarda resposta...
        if (rs485->hasNewMessage()) // Houve resposta...
        {
          if (rs485->type == rs485->ACK) // Comando foi entendido...
          {
            Serial.println("Conhecido! Comando do Botao 2 do Slave 2");
          }
          else  if (rs485->type == rs485->NAK) // Verifica se o comando não foi conhecido
          {
            Serial.print("Não conhecido! Comando do Botao 2 do Slave 2");
          }
          else // Se o type não for nem ACK nem NAK, tem algo errado
          {
            Serial.print("Type não conhecido! Comando do Botao 2 do Slave 2");
          }
        }
        else // Nao houve resposta - timeout
        {
          Serial.println("Timeout! Comando do Botao 2 do Slave 2");
        }
      }
    }
    else if (rs485->type == rs485->NAK) // Comando nao conhecido
    {
      Serial.println("Não conhecido! Botao 2 do Slave 2");
    }
    else
    {
      Serial.println("Type não conhecido! Botao 2 do Slave 2");
    }
  }
  else // Nao houve resposta - timeout
  {
    Serial.println("Timeout! Botao 2 do Slave 2");
  }  
}
« Last Edit: July 25, 2013, 06:36:36 pm by LegendBR » Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Slave 1 (um botão que acende/apaga uma lâmpada por MOC + TRIAC):

Code:
#include <MasterSlaveFuji.h>

MasterSlaveFuji *rs485;

#define ID 1
#define DEBOUNCE 50
#define BUTTON_PIN 12
#define LAMP_PIN 13

long lastButtonPress;
bool buttonIsPressed = false;
bool hasChanged = false;
bool lampOn = false;

void setup(){

  Serial.begin(9600);
  rs485 = new MasterSlaveFuji(ID, &Serial, 2);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LAMP_PIN,OUTPUT);
}

void loop(){
  
  // Atualiza dados
  rs485->update();
  if (rs485->hasNewMessage()) // Se houve mensagem nova...
  {
    switch(rs485->function) // Acao de acordo com a funcao
    {
      case 'L': // Caso a funcao seja 'L', atualizar status da lampada
        lampOn = rs485->data4 - '0'; // Atualiza status da lampada
        rs485->sendACK(); // Envia comando que foi entendido
        break;
      case 'S': // Caso a funcao seja 'S', informar status da lampada
        // Envia resposta com o status da lampada
        rs485->sendACK(0, 'S', 1, rs485->Positive, '0', '0', '0', '0' + lampOn);
        break;
      default: // Se a funcao nao for 'L' nem 'S', o comando nao e conhecido
        rs485->sendNAK();
    }
  }
  
  // Verifica se o botao foi pressionado, com debounce
  if (digitalRead(BUTTON_PIN) == LOW)
  {
    if (!buttonIsPressed)
    {
      lastButtonPress = millis();
      buttonIsPressed = true;
    }
    else if ((millis() > (lastButtonPress + DEBOUNCE)) && !hasChanged)
    {
      lampOn = !lampOn;
      hasChanged = true;
    }
  }
  else
  {
    buttonIsPressed = false;
    hasChanged = false;
  }
  
  digitalWrite(LAMP_PIN, lampOn);
  
}

Slave 2 (dois botões, um que controla um led no próprio slave, e outro que controla a lâmpada do outro slave):

Code:
#include <MasterSlaveFuji.h>

MasterSlaveFuji *rs485;

#define ID 2
#define DEBOUNCE 50
#define LAMP_PIN 13

byte buttonPin[2] = {11,12};
long lastButtonPress[2];
bool buttonIsPressed[2] = {false, false};
bool hasChanged[2] = {false, false};

bool lampOn;
bool button2Pressed;

void setup(){

  Serial.begin(9600);
  rs485 = new MasterSlaveFuji(ID, &Serial, 2);
  pinMode(buttonPin[0], INPUT_PULLUP);
  pinMode(buttonPin[1], INPUT_PULLUP);
  pinMode(LAMP_PIN,OUTPUT);
  lampOn = false;
  button2Pressed = false;
}

void loop(){
  
  // Atualiza RS485
  rs485->update();
  if (rs485->hasNewMessage()) // Se houver nova mensagem...
  {
    switch(rs485->function)
    {
      case 'L': // Caso a funcao seja 'L', atualizar status da lampada
        lampOn = rs485->data4 - '0'; // Atualiza status da lampada
        rs485->sendACK(); // Envia comando que foi entendido
        break;
      case 'S': // Caso a funcao seja 'S', informar status da lampada
        // Envia resposta com o status da lampada
        rs485->sendACK(0, 'S', 1, rs485->Positive, '0', '0', '0', '0' + lampOn);
        break;
      case 'B': // Caso a funcao seja 'B', informa se o botao foi pressionado
        rs485->sendACK(0, 'B', 1, rs485->Positive, '0', '0', '0', '0' + button2Pressed);
        button2Pressed = false; // status do botao ja enviado, retorna para falso
        break;
      default: // Caso a funcao nao seja nenhuma das anteriores, responder que nao entendeu
        rs485->sendNAK();
    }
  }
  
  // Verifica botoes
  for (int i = 0; i < 2; i++)
  {
    if (digitalRead(buttonPin[i]) == LOW)
    {
      if (!buttonIsPressed[i])
      {
        lastButtonPress[i] = millis();
        buttonIsPressed[i] = true;
      }
      else if ((millis() > (lastButtonPress[i] + DEBOUNCE)) && !hasChanged[i])
      {
        if (i == 0) // Se for pressionado o botao 1, mudar status da lampada
        {
          lampOn = !lampOn;
        }
        else // Se for o botao 2, preparar para informar o master
        {
          button2Pressed = true;
        }
        hasChanged[i] = true;
      }
    }
    else
    {
      buttonIsPressed[i] = false;
      hasChanged[i] = false;
    }
  }
  
  digitalWrite(LAMP_PIN, lampOn);
  
}

A biblioteca do RS485 (MasterSlaveFuji) também foi atualizada. Tem um pequeno "ajuste" que tive que fazer para eliminar uns erros que estavam acontecendo, com lixo chegando no Master, talvez seja problema de falta de resistor de pull-up/down, resistor de impedância de valor diferente do convencional (150 ohms, ao invés de 120 ohms), enfim, depois tento descobrir o que aconteceu. Ainda tenho uns erros de timeout, mas novamente, espero que seja algo com relação aos resistores.

Também não consegui fazer funcionar com uma baud rate maior do que 9600 (tentei com 14400, e não deu certo), novamente espero que com os resistores resolva este problema.

O tempo entre envio do questionamento e resposta do slave para o baud rate de 9600 está em 35 ms. Com 14400, é de 25 ms, mas como falei, dá erro de timeout. Então, mantendo 9600 de baud rate, e se forem os cerca de 30 nós que estimo, seriam uns 2 segundos para questionar todos os nós (alguns precisarão informar status de botões, sensores, etc.). Esse tempo pode até ser maior, então espero que eu consiga aumentar o baud rate e manter funcionando.

De acordo com os problemas que estava tendo, decidi modificar a PCI dos slaves para ter a possibilidade de colocar resistores de pull-up/down, além de reorganizar os componentes do circuito de conversão para 5v, para ficar mais parecido com o layout descrito no datasheet to LM2576.

Aproveitei e fiz logo a "PCI de entrada", que ficará na caixa principal da automação junto com o Mega. Nessa caixa ficará a entrada da alimentação dos slaves, e a conexão para o Mega entrar na rede RS-485.

Só estou na dúvida como fazer a conexão dessa PCI com o Mega... por enquanto, coloquei conectores fêmeas para conectar por fios pino/pino com os pinos do Mega, mas não confio muito nesse tipo de conexão... acho que o ideal seria um shield, mas da forma que estou pensando em fazer minha rede de automação, terei duas redes, uma para cada andar da casa, então fazer por shield talvez dê muito certo... alguém tem alguma sugestão? Minha preocupação em utilizar fios jumpers é válida, ou não preciso me preocupar tanto com isso?

* MasterSlaveFuji.zip (1.9 KB - downloaded 23 times.)

* Slaves.jpg (249.84 KB, 912x684 - viewed 76 times.)

* PCI TRIAC v1.png (116.3 KB, 965x579 - viewed 130 times.)

* PCI RS485.png (36.86 KB, 461x581 - viewed 71 times.)
Logged

aracaju/se
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

LegendBR,


Estou achando 9600 baixo pra essa ligação, os slaves e o master estão muito próximos. testou
os slaves sendo um arduino (16MHz) ou colocando um cristal de 8Mhz na sua pci? Vai precisar mudar os fuses
pra informar que o clock é externo. Ah, o timeout também pode ser pq esta usando o terminal para debugar. Tente, por exemplo, acender um led se ocorrer um timeout para evitar o delay do debug via serial. Ou fazer um contador e só exibir no terminal após X timeout.

Sobre ligar o arduino mega na sua shield, já pensou em usar um conector do tipo Latch ou similar?

O moc com o triac ficou bom? aquece muito? estou esperando chegar um sensor de corrente 5A pra testar consumo desses
caras.

Quais foram as modificações na MasterSlaveFuji?

Ah, finalmente consegui fazer funcionar o atmel com 8MHz no clock interno. Valeu pelas dicas.
Agora meu próximo passo é testar consumo rodando a 8MHz, 16MHz, aclopador otico pc817, triac, moc e relé.
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mardden,

Estou achando que o problema de timeout é porque o(s) meu(s) MAX485 fritou(aram)! O LM2576 esquentou um bocado, e o local onde o MAx485 estava na protoboard para comunicar com o Mega derreteu! Não sei o que ocorreu, mas parece que deu algum curto, ou o MAX485 já estava com defeito, não sei. Vou ter que comprar CIs novos, procurei hoje em AJU e não achei, acho que vou comprar logo os 30 que vou precisar pela internet logo...

Mas não acho que o Serial foi o problema, porque ele só entra depois que o Master envia e recebe a resposta, ou seja, teoricamente não deveria influenciar na comunicação RS-485.

Acho que por Latch não dá não, tem Latch fêmea 3 x 1 pinos, para encaixar no Mega? (espero que tenham entendido xD).

Cara, o MOC + TRIAC ficou perfeito! Não esquenta nada (usando uma luminária com lâmpada de 15w, mas o TRIAC literalmente não esquenta, nem o MOC) e o consumo é em torno de 15 mA em 5v (10 mA na fonte de 12v), uma beleza! Funciona rápido, e não faz o barulho que o relé faz. Sinceramente, não sei porque as pessoas não utilizam somente esse circuito para acionar cargas AC, ainda estou procurando a desvantagem, porque por enquanto está funcionando muito bem.

Sobre o consumo, fiz um programinha que aciona o MOC + TRIAC através de um botão. Só o ATMega328 sem acionar nada consume 5 mA a 5v. Quando aciona o MOC + TRIAC, vai para 25 mA. O consumo total da PCI fica em 40/52 mA (MOC on/off) (números não muito precisos, os pontos de tomada de corrente podem não ter sido os melhores). Para mim, está ótimo.

As maiores modificações da MasterSlaveFuji foram:\

- Criação de um buffer para receber os bytes: dessa forma, se algum nó começar a pegar a mensagem pela metade não deve haver problema de sincronismo;
- Os slaves não precisam mais ficar esperando por um comando. A ideia é fazer um update() a cada loop e verificar se há uma nova mensagem para o nó (hasNewMessage()). No caso do Master, como ele envia um comando e aguarda resposta (é assim que é desenhado o sistema), o método de aguardar a resposta só mudou de nome (de waitForMessage para waitForAnswer).

Bom que você conseguiu fazer o ATMega funcionar stand-alone! smiley-grin Qual era o problema?
Logged

aracaju/se
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

LegendBR,

Achar qualquer componente que não seja um resistor de 10K é complicado por aqui (brincadeira). Fiz minha última compra de componentes na huinfinito.com.br. Mandaram tudo direitinho no mesmo dia e com nota fiscal eletrônica.

Acho que por Latch não dá não, tem Latch fêmea 3 x 1 pinos, para encaixar no Mega? (espero que tenham entendido xD).
ops, eu devia esta dormindo quando sugeri isso smiley-grin nesse caso, acho que desenvolver uma shield deve ser o melhor caminho.


Sinceramente, não sei porque as pessoas não utilizam somente esse circuito para acionar cargas AC, ainda estou procurando a desvantagem, porque por enquanto está funcionando muito bem.
conversei com um primo que trabalha há muito tempo com eletrônica sobre o que seria melhor TRIAC ou Relé? Ele respondeu na lata: "Triac claro, dá menos problema". O único detalhe que ele comentou foi que com uma boa carga no triac ou bicho vai esquentar e será necessário dissipador.

Sobre o consumo, fiz um programinha que aciona o MOC + TRIAC através de um botão. Só o ATMega328 sem acionar nada consume 5 mA a 5v. Quando aciona o MOC + TRIAC, vai para 25 mA. O consumo total da PCI fica em 40/52 mA (MOC on/off) (números não muito precisos, os pontos de tomada de corrente podem não ter sido os melhores). Para mim, está ótimo.
Informação muito importante. Esse tópico esta muito rico em informações.

Bom que você conseguiu fazer o ATMega funcionar stand-alone! smiley-grin Qual era o problema?
Eu estava gravando o bootloader via icsp (arduinoSPI) e depois usando a placa do arduino (sem o MC na placa) para gravar o atmega na protoboard com os pinos rx, tx, reset. Eu conseguia apenas gravar o bootloader com uma placa duemilanova seguindo esses passos www.geocities.jp/arduino_diecimila/bootloader/index_en.html. Na hora de gravar o sketch não tinha sucesso. Então decidi gravar o sketch também via icsp e tudo funcionou. Tenho minhas dúvidas se preciso do bootloader, acredito que se modificar o boards.txt e ajustar os fuses dá para excluí-lo. (adicionado na lista de ToDo).

Quanto será o release da nova versão da MasterSlaveFuji?



Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3282
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Muito bom trabalho LegendBR. smiley Parabéns.


Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Achar qualquer componente que não seja um resistor de 10K é complicado por aqui (brincadeira). Fiz minha última compra de componentes na huinfinito.com.br. Mandaram tudo direitinho no mesmo dia e com nota fiscal eletrônica.

É, aqui é difícil mesmo, procurei um dissipador para um led de alta potência e senti que o pessoal queria rir, kkkkkkkkkk.

Minha primeira compra foi no huinfinito, mas agora estou comprando no soldafria.com.br, que tem e-Sedex baratinho (mais barato que PAC smiley-grin).

ops, eu devia esta dormindo quando sugeri isso smiley-grin nesse caso, acho que desenvolver uma shield deve ser o melhor caminho.

É, depois vou ver como fazer isso... acho que vou acabar fazendo um shield com as duas redes RS-485.


conversei com um primo que trabalha há muito tempo com eletrônica sobre o que seria melhor TRIAC ou Relé? Ele respondeu na lata: "Triac claro, dá menos problema". O único detalhe que ele comentou foi que com uma boa carga no triac ou bicho vai esquentar e será necessário dissipador.

Sim, imagino que o TRIAC é melhor mesmo, mas será que o circuito que estou usando é suficiente para todos os casos? Vi em alguns lugares circuitos diferentes para cargas indutivas, por exemplo, e em minha automação pretendo controlar também bombas (poço, reservatório de reuso, etc.), então ainda estou na dúvida se nesses casos posso utilizar o TRIAC mesmo ou passo para Relé (chegaram os 10 módulos duplos que comprei no eBay, depois testo o consumo deles).

Eu estava gravando o bootloader via icsp (arduinoSPI) e depois usando a placa do arduino (sem o MC na placa) para gravar o atmega na protoboard com os pinos rx, tx, reset. Eu conseguia apenas gravar o bootloader com uma placa duemilanova seguindo esses passos www.geocities.jp/arduino_diecimila/bootloader/index_en.html. Na hora de gravar o sketch não tinha sucesso. Então decidi gravar o sketch também via icsp e tudo funcionou. Tenho minhas dúvidas se preciso do bootloader, acredito que se modificar o boards.txt e ajustar os fuses dá para excluí-lo. (adicionado na lista de ToDo).

Você fez um esquema muito mais complicado do que eu, hehehe. Basicamente, você só precisa colocar o ATMega "virgem" no Uno, gravar o bootloader via ICSP, e pronto, o uC já pode ser utilizado standalone.

Quanto será o release da nova versão da MasterSlaveFuji?

Já ocorreu, mas ele acabou ficando perdido no meio das fotos smiley-yell. Estou anexando novamente.


Muito bom trabalho LegendBR. smiley Parabéns.

Valeu, estou me divertindo bastante com o projeto smiley-grin.

* MasterSlaveFuji.zip (1.9 KB - downloaded 14 times.)
« Last Edit: July 30, 2013, 08:07:53 am by LegendBR » Logged

aracaju/se
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

O que vocês acham da ideia de gravar o status das lâmpadas (ligada/desligada/dimmer) na memória eeprom? assim quando faltar energia não perdemos o status atual das lâmpadas.
Pelo datasheet seriam 100.000 ciclos de write/erase. Fazendo umas continhas rápidas, supondo que uma lâmpada seja ligada/desligada 5x por dia e que no mesmo arduino temos 3 lâmpadas, seriam 9,13 anos até aparecer alguma falha.
Meu raciocínio esta certo ou é devaneio?
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

O que vocês acham da ideia de gravar o status das lâmpadas (ligada/desligada/dimmer) na memória eeprom? assim quando faltar energia não perdemos o status atual das lâmpadas.
Pelo datasheet seriam 100.000 ciclos de write/erase. Fazendo umas continhas rápidas, supondo que uma lâmpada seja ligada/desligada 5x por dia e que no mesmo arduino temos 3 lâmpadas, seriam 9,13 anos até aparecer alguma falha.
Meu raciocínio esta certo ou é devaneio?

Será que vale a pena? Faltou energia as lâmpadas vão desligar de qualquer forma, né?

Eu tinha pensado em fazer algo desse tipo, utilizar a eeprom para guardar alguma coisa (que não lembro o que), mas acho que é mais interessante o Master guardar isso em um SD. Depois você pode fazer o que quiser com esses dados do SD.

edit: acabei de testar o módulo de relés. Funcionam com lógica invertida (LOW ativa os relés), cada módulo está consumindo 50 mA em 12v, ou seja, 5 vezes a mais do que o MOC + TRIAC. Só tenho que estudar um pouco mais sobre o MOC + TRIAC para fazer um circuito legal (snubber? resistor entre anodo e gate?), mas devo ficar com essa solução mesmo: menos consumo, PCI mais leve, mais lâmpadas / tomadas controladas por PCI, e sem barulho (o tec-tec do relé é bem chatinho xD).
« Last Edit: July 30, 2013, 09:58:10 pm by LegendBR » Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3282
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

O que vocês acham da ideia de gravar o status das lâmpadas (ligada/desligada/dimmer) na memória eeprom? assim quando faltar energia não perdemos o status atual das lâmpadas.
Pelo datasheet seriam 100.000 ciclos de write/erase. Fazendo umas continhas rápidas, supondo que uma lâmpada seja ligada/desligada 5x por dia e que no mesmo arduino temos 3 lâmpadas, seriam 9,13 anos até aparecer alguma falha.
Meu raciocínio esta certo ou é devaneio?

Depende... quanto tempo demora a electricidade a chegar? Imagina que a electricidade falha mesmo quando estás prestes a sair de casa e tens umas quantas lâmpadas acesas.
Preferes que as lâmpadas liguem automaticamente mesmo não estando ninguém em casa?

edit: acabei de testar o módulo de relés. Funcionam com lógica invertida (LOW ativa os relés), cada módulo está consumindo 50 mA em 12v, ou seja, 5 vezes a mais do que o MOC + TRIAC. Só tenho que estudar um pouco mais sobre o MOC + TRIAC para fazer um circuito legal (snubber? resistor entre anodo e gate?), mas devo ficar com essa solução mesmo: menos consumo, PCI mais leve, mais lâmpadas / tomadas controladas por PCI, e sem barulho (o tec-tec do relé é bem chatinho xD).

Também podes comprar relés de estado sólido já feitos. Dá mais jeito no que toca a dissipacão de calor e instalacão do que o MOC + TRIAC, creio.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

O principal problema dos relés de estado sólido (SSR) é o custo deles. Enquanto os componentes montar o SSR na PCI (MOC + TRIAC) saem por cerca de US$ 1, não encontro o SSR para PCB (os outros ficam bem grandinho para colocar na caixa de luz) por menos de US$ 6. Mas também é aquela coisa, se eles forem muito melhores do que o MOC + TRIAC vale a pena substituir (o custo não seria TÃO alto assim, afinal), mas será que são? Pelo o que percebi, não devo ter muito problema com dissipação de calor, uma vez que as cargas não devem ser tão grandes (estamos falando em uma residência, afinal).
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Atualizando com um shield com algumas funções:

- Utilização de 6 botões touch;
- 2 shift-registers para utilizar a lib ShitPWM para ler controle PWM de 6 leds para os interruptores e mais 3 PWM para eventuais LEDs na iluminação;
- 2 "sensores", sendo um conectado em uma porta analógica e outro na porta digital 3, para utilização da lib IR remote para controle de aparelhos de controle remoto.

Está ficando quase pronto smiley-grin.


* Shield.png (67.56 KB, 474x580 - viewed 46 times.)
Logged

aracaju/se
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Depende... quanto tempo demora a electricidade a chegar? Imagina que a electricidade falha mesmo quando estás prestes a sair de casa e tens umas quantas lâmpadas acesas.
Preferes que as lâmpadas liguem automaticamente mesmo não estando ninguém em casa?
Entendi. Por esse ponto de vista não vale a pena manter o status das lâmpadas.

LegendBR, os seis botões touch funcionaram sem problema?


INFORMAÇÃO ÚTIL:

Realizei um teste com TRIAC para ver a temperatura do mesmo sem dissipador. Utilizei 3 cargas distintas:

AMBIENTE:
Temperatura ambiente 28ºC
O circuito com o TRIAC ficou dentro de uma caixa de tomada 4x2 coberta com papel alumínio.

RESULTADO:
30min com carga de 15W, temperatura do TRIAC em 32ºC
30min com carga de 23W, temperatura do TRIAC em 36ºC
30min com carga de 100W, temperatura do TRIAC em 62ºC

Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3282
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Realizei um teste com TRIAC para ver a temperatura do mesmo sem dissipador. Utilizei 3 cargas distintas:

AMBIENTE:
Temperatura ambiente 28ºC
O circuito com o TRIAC ficou dentro de uma caixa de tomada 4x2 coberta com papel alumínio.

RESULTADO:
30min com carga de 15W, temperatura do TRIAC em 32ºC
30min com carga de 23W, temperatura do TRIAC em 36ºC
30min com carga de 100W, temperatura do TRIAC em 62ºC

Seria também útil fazer um gráfico dos resultados, apesar de 30 minutos poder ser suficiente para o sistema atingir estabilidade. Reparaste nisso? Se ao fim dos 30 minutos a temperatura estava estável?

Boa ideia e bom teste. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

aracaju/se
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Seria também útil fazer um gráfico dos resultados, apesar de 30 minutos poder ser suficiente para o sistema atingir estabilidade. Reparaste nisso? Se ao fim dos 30 minutos a temperatura estava estável?

Boa ideia e bom teste. smiley

Após 20min não houve variação na temperatura, esperei mais 10min para ter certeza. A ideia de gerar um gráfico é bem interessante. Vou ver o que posso fazer. A princípio meu teste foi usando o termômetro do multímetro.
Logged

Pages: 1 ... 14 15 [16] 17 18 ... 30   Go Up
Jump to: