Problemas com relé

Boa tarde colegas,
Estava utilizando o tópico de outra pessoa então resolvi abrir este para não atrapalhar.
Estou com problemas no meu relé shield para controlar uma luminária de led que é acionada por um driver parecido com os trabsformadores para as lampadas frias.
Entrada 220v e saída se não me engano até 54v 600ma.
Acontece que quando o relé é acionado com esta luminária o arduino fica maluco, imprime coisas estranhas no lcd e via com3, o RTC deixa de funcionar etc. Tudo volta a funcionar corretamente quando o relé desliga, e o pior quando eu colocou outra coisa neste mesmo relé, nesta mesma saída, como aquecedor, bomba etc funciona corretamente.
A unica certeza que da para chegar é que o problema está com o driver do led, a luminária funciona normalmente, com ou sem o arduino. Alguma corrente está retornando ou algo do tipo? um diodo resolveria? o que fazer?
Agradeço a ajuda de todos

Esse relé shield é isolada com foto-acopladores?

Tens o esquema do relé shield?

Como estás a alimentar o Arduino? Poderá ser que o Relé puxa demasiada corrente do Arduino?
Como tens as ligacões feitas?

Uma foto dele ajuda? Ja alimentei ele com fonte externa e com o arduino, a luminaria é de aprox 60w, ligo aparelhos de 300w como o aquecedor e nenhum problema.

O que seria foto acopladores? Acredito q sim ele é próprio para o arduino. A luminaria quando retiro da tomada ainda fica um tempo ligada o q me leva a crer que possui capacitores certo? Isso poderia dar problema? Como falei ja alimentei ele com fonte externa mas alguma coisa esta retornando pelo cabo do sinal do arduino

sim, uma foto ajuda...

Este aqui http://www.google.com.br/search?q=4+rele+shield&hl=pt-BR&tbo=d&source=lnms&tbm=isch&sa=X&ei=lCSYUMK7DozW8gS8woHIDg&ved=0CAgQ_AUoAQ&biw=320&bih=356#i=6

Acho que é bom informar, mas este relé shield aciona o relé quando o arduino não manda sinal para ele, esqueci o nome técnico para isto, o vendedor que me informou.

Bom isso chama-se logica invertida, ele liga quando o pino está a ground e desliga quando esta Alto.Eu tenho um modulo desses e sim eles sao protegidos por optoacopladores o que é bom para te dar isolamento optico entre a potencia e o arduino prevenindo assim algum dano.
Agora so falta saber como alimentas-te o modulo dos reles?
O meu é alimentado a 5V mas claro esta que nao o podes pendurar no arduino!!!
O meu modulo tem 8 reles e quando todos eles estao activados consomem bem mais do que a placa do arduino pode oferecer o que tambem sera o teu caso com apenas 4 reles!

Ja alimentei com 5v externo e interno, liguei apenas a luminaria de 54v 600ma, tirando ela e colocando um aquecedor de 300W nao tem problema algum. Creio que algum componente eletrônico do driver do led esteja em conflito como arduino. O driver nada mais é que um dispositivo para manter a corrente de saída constante, utilizado para ligar os leds em serie.

As massas sao comuns? Podes tentar interromper ambos os cabos nos reles?

Boa tarde Hugo, não entendi muito bem sua pergunta, porém eu ja liguei o relé com fonte de carregador de celular de 5v e também ja liguei no arduino. As 4 saídas do meu rele shield são denominadas de k1,k2,k3,k4. Ja liguei varias coisas no k1, como um aquecedor potente como relatei de 300w, bombas de 60w e outros. Quando ligo a luminária de aproximadamente 60w acontece o problema. Por isto não creio que seja potência, ja que liguei coisas mais pesadas, e também não creio que seja o relé shield ja que liguei varios outros aparelhos sem problema. Todos os componentes que ligo sem problema são analógico, o aquecedor é apenas uma resistência, as bombas uma bobina e a luminária é eletronica, um reator eletrônico.
este driver funciona para 10 a 18 leds de 3w, ele corrige a saída de acordo com o consumo, liberando de 30 a 54volts e constantes 600ma automaticamente.

ligo a luminária de aproximadamente 60w acontece o problema

Essa luminaria que estas a ligar, onde estas a interromper o circuito dela? Mesmo na alimentaçao(230 presumo) ou na saida que dizes ser a alimentaçao dos leds controlados?
Faz um teste e tenta afastar o arduino do equipamento que faz o controlo dos leds, ou seja leva so o "fio de corte" ao relé e afasta o outro circuito

Estou utilizando o 220v, antes do diver, após o driver nos 54v eu nao tentei. O driver esta próximo no máximo 10cm do arduino, será q isto esta causando interferência?

Pessoal, testei o equipamento sem a luminária e o resultado foi o mesmo. Depois de algum tempo muito desanimado estou tentando retornar.
Seguinte por algum motivo o lcd depois de um tempo começa a imprimir coisas estranhas e nem dando clear ou deixando caracteres em branco num determinado tempo limpa tudo....
Outra situação não sei se alguma poderia me ajudar é quanto a um controlador de temperatura por DS. Necessito de quando der algum problema na leitura ele trave todo o arduino, para nao acontecer se sair o fio do sensor e com isto ligar o rele de aquecimento e fritar a agua. Testando as entradas do arduino, com o prórpio arduino percebi que nenhuma entrada zera a voltagem, ou seja, não consigo trabalhar com a programação no esquema de 0 (fio desconectado) e >1 (fio recebe 12v e de acordo com a temperatura passa uma certa V para a porta ou seja maior que 1v)

Necessito de quando der algum problema na leitura ele trave todo o arduino, para nao acontecer se sair o fio do sensor e com isto ligar o rele de aquecimento e fritar a agua.

Mas que raio é isto, fritar a agua ? :smiley:
Bom colega para começar nao podes travar o arduino,estas a ver a coisa de forma errada, ou seja podes sim prever isso na programaçao se o valor do sensor for anomalo,o que a funçao te devolve se o retirares fora?
Depois verificas sempre se o valor do sensor nao é igual a essa excepçao.Caso o seja activas uma flag que encrava as funçoes principais e sinalizas um Alarme.Sem que essa flag seja resetada pelo utilizador todas as funçoes sao ignoradas, garantindo assim o seu reconhecimento pelo utilizador.
Agora cuidado espero que o termo "fritar a agua" seja mesmo expressao, caso haja pessoas e bens envolvidos atençao á segurança!!!!

Hugo muito obrigado pela atenção que me foi dada rapidamente. Fritar a agua porque está ligado um aquecedor no aquario controlado pelo arduino. Quero manter a agua a 26 graus (aqui no inverno faz próximo de 5) porém no verão faz em média 36 graus e então os ventiladores ligam automaticamente. Imagina no verão o sensor desconectar e o arduino colher informações errada e esquentar a agua sem parar.
Poderias me dar uma dica de programação para travar o arduino e soltar um alarme com luz por exemplo

Uma possibilidade é colocares dois sensores. Se forem muito diferentes um do outro, paras o sistema.

Outra hipótese, imagina que o teu sensor mede temperaturas de -10 a 100 graus (com 0 Ohm nos -10 graus e a resistência máxima nos 100 graus). Se por algum motivo a temperatura calculada for 0 ou maior que 50, paras o sistema e dás um erro.

Se tens um divisor resistivo, o que acontecerá se desligares o sensor de temperatura é o AD ler 0 ou 1024 (porque vai estar ligado ao ground ou 5V directamente. Podes assumir que se leres algum valor entre 0 e 10 ou 1014 e 1024, o sistema está em erro. Isto é literalmente a mesma solução mas com limites diferentes. Qual a melhor depende da escala que tens no teu sensor de temperatura.

vlw bubulindo, vou verificar quais as leituras que ele pode fazer e caso estiver fora disto (desplugado ou em curto) eu corto o sistema. depois posto o code aqui para vcs me ajudarem a melhorar-lo porque sou bem iniciante.

paralelamente disto algume tem ideia do porque meu lcd fica com sujeira na tela? não consigo limpar nem utilizando impressao sem caracteres nem utilizando o clear, só preciso testar se o sistema entra em pane também. Notei que as vezes com algum toque nos fios acontece isto então colei todos os plugs com cola quente mas não resolveu, após algum tempo ele começa a imprimir coisas estranhas e não volta ao normal
liguei o lcd como demonstrado nas imagens do google, apenas troquei um potenciometro por um resistor no brilho para melhor vizualizar.

Eu estive aqui a ler a thread toda e fiquei sem entender o que se passa.

Primeiro dizes que o relé shield actua cargas elevadas (o tal aquecedor) sem problemas. Isso é correcto? Se for uma carga qualquer que não a lâmpada não há problema?

Depois falas em driver para a luminária. Que driver é esse? Não estás a usar o relé com a luminária?

Tens fotos de tudo? Um esquema de como estás a ligar as coisas? Até agora não conseguimos ver como está tudo ligado, logo torna-se difícil de entender exactamente qual o problema.

Experimenta correr o teu código durante X tempo sem nada potente ligado. Ou seja, o arduino, relé shield e LCD (tens um LCD shield também?). O problema acontece? Se sim, tira o shield dos relés e volta a experimentar.

Se não aconteceu nada, então deve ser o relé shield. Temos de ver como estás a ligar tudo para tentar perceber o que está a acontecer.
Não faz sentido que o que está no lado do contacto do relé interfira com o que está na bobine. Logo deve ser algo nas ligações que não está correcto.

Se puderes colocar o código aqui, também ajuda a entendermos o que pode estar a acontecer... tanto quanto sabemos pode até ser o programa que se passa com alguma operação.

Mete aqui as informações que pedi e a probabilidade de resolveres o problema aumenta consideravelmente.

P.S.: Não, não tenho skype ou messenger.

Iniciei tudo do zero
peguei o sketch do exemplo do ds18b20 (sensor de temperatura)
agora vou deixar ele ligado pegando as temperaturas e ver como se comporta o sistema, ficando tudo ok em alguns dias eu vou adicionando as coisas ate dar o problema, ai saberei onde esta o problema. Para acompanhar segue o exemplo do ds com a adicao do lcd:

#include <OneWire.h>
#include <LiquidCrystal.h>
#define Luz_Fundo 6

LiquidCrystal lcd(8, 7, 5, 4, 3, 2);
OneWire ds(A15); // on pin 10

void setup(void) {
Serial.begin(9600);
pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
lcd.begin(16, 2); //inicia o lcd com 2 linhas e 16 colunas
digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
}

void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius;

if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for ( i = 0; i < 9; i++) { // we need 9 bytes
data = ds.read();
}

  • // convert the data to actual temperature*
    unsigned int raw = (data[1] << 8) | data[0];
  • if (type_s) {*
  • raw = raw << 3; // 9 bit resolution default*
  • if (data[7] == 0x10) {*
  • // count remain gives full 12 bit resolution*
  • raw = (raw & 0xFFF0) + 12 - data[6];*
  • }*
  • } else {*
  • byte cfg = (data[4] & 0x60);*
  • if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms*
  • else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms*
  • else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms*
  • // default is 12 bit resolution, 750 ms conversion time*
  • }*
  • celsius = (float)raw / 16.0;*
  • Serial.print(" Temperature = ");*
  • Serial.print(celsius);*
  • Serial.print(" Celsius, ");*
  • lcd.setCursor(0,0);*
  • lcd.print(celsius);*
    }