Ajuda, botão + Rele

Eae galera, to com um probleminha aqui com meu rele...vamos ver se podem me ajudar ^^

Seguinte, quero montar um circuito bem simples onde eu aperto um botão para o rele ligar, porém ele tem que permanecer ligado ate eu apertar o botão novamente...
até ai tudo bem, consegui fazer ele desligar e ligar quando aperto o botão...o problema é que quando eu inicio o arduino, o rele SEMPRE inicia LIGADO...não consigo fazer ele iniciar desligado
o rele é esse daqui: http://www.aliexpress.com/snapshot/235677910.html
liguei ele ao 5v do arduino...
OBS: já fiz o teste com um led ligado na porta que vai pro rele e o mesmo inicia bonitinho desligado, somente no modulo rele que da esse "problema"
segue o codigo

int rele = 2; 
int botao = 8;
int flag = 0;
void setup()
{
  pinMode(rele, OUTPUT); 
  pinMode (botao, INPUT);
}
void loop()
{    
	if(digitalRead(botao) == HIGH && flag == 0)
		{
		while(digitalRead(botao) == HIGH);
{
		digitalWrite(rele, HIGH);
		flag = 1;
		delay(200);
}
	}
	else if(digitalRead(botao) == HIGH && flag == 1)      
	{
		while(digitalRead(botao) == HIGH);
{
		digitalWrite(rele, LOW);
		flag = 0;
		delay(200);
}
	}
}

oq preciso fazer pra ele iniciar desligado?

void setup()
{
  pinMode(rele, OUTPUT); 
  pinMode (botao, INPUT);
  digitalWrite(rele,LOW);
}

Valeu pela resposta, mas ja tentei isso e nada...

Como estás a ligar o relé? Está ligado da mesma forma que o led ao Arduino, isto é, com a mesma polaridade? E como ligaste as coisas na saída do relé? A luz na saída do relé é completamente oposta ao LED?

O relé alguma vez comutou?

O rele é normalmente aberto ou normalmente fechado?

Lago:
O rele é normalmente aberto ou normalmente fechado?

Essa pergunta é valida, pois normalmente o relé funciona como um interruptor, ligando o contato do meio com o contato ou da esquerda ou da direita. Então você pode estar ligando os fios nos contatos do relé que ficam fechados quando o relé não está alimentado.

Faça o teste com um multimetro para ver se você não está ligando nada errado. Se mesmo assim não resolver, poste o esquema elétrico e/ou uma foto de como você está fazendo.

bubulindo

Entao, o módulo que tenho possui 6 pinos, um GND, um VCC e as 4 portas de cada rele (o módulo tem 4 reles), liguei o GND ao GND do arduino, o VCC ao 5 Volts do Arduino e liguei uma porta de saida digital do arduino á uma entrada no módulo relé...

O rele está comutando sim, o problema é que quando ligo o arduino ele já comuta, ele deveria ficar desligado até eu apertar o botao

Ok...

Não estou a entender muito bem... Ele liga e desliga muito rápido ou quando o arduino é iniciado ele liga e fica sempre ligado?

Sem saber como o relé está ligado é difícil de garantir, mas...

O ATmega328 começa com os pinos configurados como entradas, se estiveres a fazer sink (ou seja, ligar a bobine do relé entre VCC e o Arduino) na entrada isto pode realmente comutar o relé. Como o bootloader do Arduino fica ali algum tempo até iniciar, deve ser o suficiente para comutar uma vez.

Depois tens o facto que o Arduino faz sabe-se lá o quê aos pinos e isso também pode influenciar, embora duvide que seja algo assim que esteja a acontecer, nunca se sabe.

Agora se o relé fica sempre ligado, provavelmente tens a lógica invertida no programa.

Isso, quando o arduino é iniciado ele liga e fica sempre ligado...
esse é o problema, mesmo se eu colocar digitalWrite(rele,LOW); ele inicia ligado...Nao deveria iniciar com a porta desligada?

E quem te diz que low é desligado?

Experimenta ao contrário:

void setup()
{
  pinMode(rele, OUTPUT); 
  pinMode (botao, INPUT);
  digitalWrite(rele,HIGH);
}

Era isto que eu referia quando perguntei:

Como estás a ligar o relé? Está ligado da mesma forma que o led ao Arduino, isto é, com a mesma polaridade?

Bubulindo,

No momento estou no trabalho, testarei isso que tu me indicou quando eu chegar em casa...

Acredito que sejas esta a solução mesmo, pois ainda não testei desta maneira

Muito Obrigado pela Ajuda :smiley:

Amigo também tenho um modulo desses de reles e eles funcionam com lógica invertida.
Para o rele activar mandas valor 0V e para ele estar desligado 5V.

Eu tirei um rele de uma sucata aqui e o estado sem tensão era ligado... e demorou para cair a ficha rs

Mortis e HugoPT

Era isso mesmo !!! Fiz oque o Bubulindo me disse e deu certo, o módulo funciona com a lógica invertida hehe

Obrigado a todos pela ajuda ^^

bubulindo:
O ATmega328 começa com os pinos configurados como entradas, se estiveres a fazer sink (ou seja, ligar a bobine do relé entre VCC e o Arduino) na entrada isto pode realmente comutar o relé. Como o bootloader do Arduino fica ali algum tempo até iniciar, deve ser o suficiente para comutar uma vez.

Estou com esse problema, ao ligar o arduino o relé liga e desliga rapidamente. Como resolvo isso?

Quando isso acontece é porque não foi inicializado o estado inicial da saída digital correspondente, no setup.

void setup(){
 digitalWrite(8, LOW);   // turn the LED on (HIGH is the voltage level)


}

Ou ao contrário, dependendo da tua placa de relés.

Entendo! Já fiz códigos mais simples apenas para acionar um relé e não era necessário iniciá-lo em low. Lembrei que para resetar o sistema usei o comando asm volatile (" jmp 0");
Quando o sistema é reiniciado por esse comando o relé não faz a comutação de quando é reiniciado pela tomada! Há alguma possibilidade do problema ser no hardware?

Eu tmb fiz códigos simples onde não foi preciso. Noutros casos tive mesmo de fazer isto. Não me parece problema de hardware.

alkuentrus:
Eu tmb fiz códigos simples onde não foi preciso. Noutros casos tive mesmo de fazer isto. Não me parece problema de hardware.

Não funcionou digitei logo abaixo do setup =/, o relé é do tipo optoacoplado e está ligado em um arduino UNO VCC-5V, GND-GND, IN-12. Alguma outra sugestão eu agradeço.

Meteste mesmo dentro da função setup?