Ola  garagistas estou testando o codigo abaixo no meu projeto. ele consiste em quando apertar um botao ou pelo aplicativo ele comuta um rele. mas quando alimento o arduino o rele ja passa de normal aberto para fechado, acho que no codigo tenho que inverter LOW por HIGH mas não sei em que parte fazer isso!

int led1 = 10; // Pino da Luz da Sala
int led2 = 9; // Pino da Luz da Cozinha
int led3 = 8; // Pino do Ventilador

boolean status1 = false; // variavel para o status da Luz da Sala
boolean status2 = false; // variavel para o status da Luz da Cozinha
boolean status3 = false; // variavel para o status do Ventilador

void setup() {

Serial.begin(9600); // inicializa a comunicação serial na velocidade 9600

pinMode(led1, OUTPUT); //<-l
pinMode(led2, OUTPUT); // > define os pinos do leds como saída
pinMode(led3, OUTPUT); //<-l

digitalWrite(led1, LOW); //<-l
digitalWrite(led2, LOW); // > inicia os leds desligados
digitalWrite(led3, LOW); //<-l
}
void loop() {
char comando = Serial.read(); // variavel para ler o dados da serial
// realiza a leitura do pino que vai estar a chave
int chave1 = digitalRead(4); // para controlar o led branco
int chave2 = digitalRead(3); // para o led azul
int chave3 = digitalRead(2); // para o led verde

if (chave1 == HIGH) { // se a chave for pressionada (obter valor alto)
if (status1) { // verifica se o led está ligado ou desligado de acordo com a variável booleana
// executa essa parte se ele estiver ligado
digitalWrite(led1, LOW); // desliga o led
status1 = false; // muda o status para false para que na proxima vez ele identifique como desligado
Serial.println("1of"); // envia a string para informar que o led foi desligado
} else {
// executa essa parte se ele estiver desligado
digitalWrite(led1, HIGH); // liga o led
status1 = true; // // muda o status para true para que na proxima vez ele identifique como ligado
Serial.println("1on"); // envia a string para informar que o led foi ligado
}
delay(250); // tempo para que não fique dando conflito e o led fique ligando e desligado ao pressionar
}
if (chave2 == HIGH) {
if (status2) {
digitalWrite(led2, LOW);
status2 = false;
Serial.println("2of");
} else {
digitalWrite(led2, HIGH);
status2 = true;
Serial.println("2on");
}
delay(250);
}
if (chave3 == HIGH) {
if (status3) {
digitalWrite(led3, LOW);
status3 = false;
Serial.println("3of");
} else {
digitalWrite(led3, HIGH);
status3 = true;
Serial.println("3on");
}
delay(250);
}
if(comando == 'a') { // se na serial receber o caracter 'a'
if (status1) { // do mesmo modo como na explicação acima
digitalWrite(led1, LOW);
status1 = false;
Serial.println("1of");
} else {
digitalWrite(led1, HIGH);
status1 = true;
Serial.println("1on");
}
}
if(comando == 'b') {
if (status2) {
digitalWrite(led2, LOW);
status2 = false;
Serial.println("2of");
} else {
digitalWrite(led2, HIGH);
status2 = true;
Serial.println("2on");
}
}
if(comando == 'c') {
if (status3) {
digitalWrite(led3, LOW);
status3 = false;
Serial.println("3of");
} else {
digitalWrite(led3,HIGH);
status3 = true;
Serial.println("3on");
}
}
if(comando == 's') { // se receber o caracter 's' ele deve retonar com o status de todos os 3 leds
if (status1) { // verifica se o led está ligado ou desligado de acordo com a variável booleana
// se estiver ligado
Serial.println("1on"); // envia a string para informar que o led está ligado
} else {
// se estiver desligado
Serial.println("1of"); // envia a string para informar que o led está desligado
}
delay(250);
if (status2) {
Serial.println("2on");
} else {
Serial.println("2of");
}
delay(250);
if (status3) {
Serial.println("3on");
} else {
Serial.println("3of");
}
}
}

Exibições: 870

Responder esta

Respostas a este tópico

na verdade é um modulo de 4 reles.

Carlos, boa noite,

Pelo que entendi quando o Arduino é ligado o relé já é ligado.

Não seria o caso de trocar no setup as linhas 

digitalWrite(led1, LOW); // Substitua por digitalWrite(led1, HIGH);

digitalWrite(led2, LOW); // Substitua por digitalWrite(led2, HIGH);

digitalWrite(led3, LOW); // Substitua por digitalWrite(led3, HIGH);

No aguardo.

JA

José,

Pelo o que eu entendi, o Adriano reclama de que ao energizar o Arduino os reles comutam para ligado, veja parte do poste dele:

ele comuta um rele. mas quando alimento o Arduino, o rele ja passa de normal aberto para fechado, acho que no código tenho que inverter LOW por HIGH mas não sei em que parte fazer isso!

Se você analisar o código, ou mesmo carregar e testar, vai ver que o comportamento é normal, começa com os reles desligados, a carga desligada, por ter testado e simulado no Proteus, minha opinião é que o que esta invertido e ocasiona que a carga ligue ao energizar o Arduino, seja talvez a ligação errada nos reles, trocando/ ligando a carga no NF e não no NA.

Espero tenha me explicado.

Abs.

Bom dia Carlos.

Vou simular no Proteus e tirar minhas conclusões, mais como você disse o mais provável é que ele tenha inserido a carga no NF do relé. Ah outra coisa o Proteus 8.3 consegui baixar e instalar, muito bom. 

Até mais depois posto o resultado, tenha um bom dia,

JA

Ola não fiz isso não a carga coloquei no comum do rele e a outra ponta no NA o NF não tem nada ligado. o problema é que o codigo que peguei na net o cara ligava led mas nao usava rele, ai tente pegar o sinal que saia do arduino e ia direto para o led e liguei no sinal no modulo de reles. no meu caso o problema estava no codigo.

Obrigado José, tenha um bom dia também!

Abs.

isso mesmo troquei essas linhas e funcionou! tive que inverter outras linhas pq são ligadas a essas 3.

Obrigado pela explicação Adriano, se esta funcionando é o que importa neste momento, boa sorte no seu projeto.

Abs.

Beleza brother,

Bom dia a todos, o que vale é a troca de experiência. 

Valeu,

JA

Obrigado e valeu pela força.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço