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");
}
}
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por