Arduino Electric Controller

Olá! Estou com o projeto de reativar um sistema de automação elétrica que era usado anteriormente aqui.
Temos um Arduino Mega 2560 acoplado em uma shield com 10 contatoras e um display. Não tenho o código original, nem a documentação da shield :melting_face:.
Estou tentando rodar um código de teste, mas até então sem muito resultado... Eu sei que a shield é um projeto brasileiro, pois tem "projetoarduino.com.br" impresso na placa, mas o site está fora do ar.

Poderiam me ajudar a entender como testar esses relés?

Segue o código que eu usei para testar:
Comentei e descomentei conforme testava...

#include <Wire.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(10, 12, 5, 4, 3, 2);

int relePins[] = {14, 15, 16, 17, 18, 19, 20, 21, 62, 63};
int analogPins[] = {A1, A2, A3, A4, A5, A6, A7, A8};
int ledPin = 13;

void setup() {
Serial.begin(9600);
Serial.println("\nIniciando...");

lcd.begin(16, 2);
lcd.print(" "); // Limpa linha
lcd.print("Hello, Arduino!");

for (int i = 0; i < 10; i++) {
pinMode(relePins[i], OUTPUT);
}

for (int i = 0; i <8; i++) {
pinMode(analogPins[i], OUTPUT); // Inicializa os pinos analógicos como OUTPUT
}

pinMode(ledPin, OUTPUT); // Inicializa Led 13
}

void loop() {
// Pisca LED para indicar execução
// digitalWrite(ledPin, HIGH);
// delay(250);
// digitalWrite(ledPin, LOW);
// delay(250);

for (int i = 0; i < 8; i++){
digitalWrite(analogPins[i], HIGH);
digitalWrite(ledPin, HIGH); // Ativa led 13
Serial.print("Ligando pino "); // Retorna no terminal
Serial.println(analogPins[i]); // Retorna o número do pino no termina
delay(1000);

digitalWrite(analogPins[i], LOW);
digitalWrite(ledPin, LOW); // Ativa led 13
Serial.print("Desligando pino "); // Retorna no terminal
Serial.println(analogPins[i]); // Retorna o número do pino no termina
delay(1000);
}

// for (int i = 0; i < 10; i++) {
// digitalWrite(relePins[i], HIGH); // Ativa pino [i]
// digitalWrite(ledPin, HIGH); // Ativa led 13
// Serial.print("Ligando pino "); // Retorna no terminal
// Serial.println(relePins[i]); // Retorna o número do pino no terminal

// lcd.setCursor(0, 1); // Posiciona o cursor
// lcd.print(" "); // Limpa linha
// lcd.print("Ligando pino "); // Retorna no terminal
// lcd.print(int(i)); // Retorna o número do pino no terminal
// delay(1000); // Atrasa 1s

// digitalWrite(relePins[i], LOW); // Desativa pino [i]
// digitalWrite(ledPin, LOW); // Desativa led 13
// Serial.print("Desligando pino "); // Retorna no terminal
// Serial.println(relePins[i]); // Retorna o número do pino no terminal

// lcd.setCursor(0, 1); // Posiciona o cursor
// lcd.print(" "); // Limpa linha
// lcd.print("Desligando pino "); // Retorna no terminal
// lcd.print(int(i)); // Retorna o número do pino no terminal
// delay(1000); // Atrasa 1s
// }
}

Olá! Bem vindo ao Forum.

Geralmente é complicado fazer engenharia reversa em equipamentos que funcionavam tempos atrás.

No shield, os relés estão numerados como D9, D10, D11, D12, D13, D14 D15, D16, D2 e D3. Como o encaixe do shield é intuitivo, é razoável supor que essas referências são para os pinos do próprio shield, com exceção ao fato de que não existe D2 e D3 nessa pinagem.

Observando onde os pinos do shield estão ligados no Mega, segundo o pinout do Mega, teríamos o seguinte:

Shield / Mega
9 = 63
10 = 64
11 = 65
12 = 66
13 = 67
14 = 68
15 = 69
16 = 16

Então, meu primeiro teste seria trocar esse trecho:

int relePins[] = {14, 15, 16, 17, 18, 19, 20, 21, 62, 63};

por

int relePins[] = {63, 64, 65, 66, 67, 68, 69, 16};

Adaptar o loop para rodar 8 vezes e ver se isso liga os primeiros oito relés da placa.

1 Like

Pesquisando na WEB encontrei este site:

Veja se ajuda.

Codigos exemplo:

"https://drive.google.com/file/d/0BzT8qbVfSk7uc2RBMnR0QnlWSmc/view?resourcekey=0-l70rG-YZadWFx5ti61szJg"

E o manual:

Os reles são acinos por estes pinos:
const int rele1 = 22; // Rele 1 PA0
const int rele2 = 23; // Rele 2 PA1
const int rele3 = 24; // Rele 3 PA2
const int rele4 = 25; // Rele 4 PA3
const int rele5 = 26; // Rele 5 PA4
const int rele6 = 27; // Rele 6 PA5
const int rele7 = 28; // Rele 7 PA6
const int rele8 = 29; // Rele 8 PA7
const int rele9 = 42; // Rele 8 PA7
const int rele0 = 43; // Rele 8 PA7

2 Likes

Quero agradecer aos dois pela ajuda! Eu havia testado os pinos digitais e fiquei muito feliz quando os relés ativaram haha 0 9 e 0 10 deram um pouco mais de trabalho mas também deu certo.

Muito obrigado @Brazilino pelos links, isso vai ajudar demais mesmo!

Das 10 contatoras, tem duas com defeito, mas o mais importante funciona.