@albert_emule seu código está pronto, vou deixar aqui pra você, confere e me diz se está faltando algo, se estiver me avisa que eu arrumo.
Código para Arduino.
int bateria = 0; // Entrada analógica A0 do Arduino
int niv_bat = 0; // Variável para receber o valor da entrada A0
int triac_rede = 2; // Pino de saída para o triac da rede
int triac_inv = 3; // Pino de saída para o triac do inversor
int rl_on_off = 4; // Pino de saída para o relé do inversor
boolean estado = false; // Variável que checa se a bateria está em processo de carga ou descarga
void setup()
{
pinMode(triac_rede, OUTPUT); // Definindo o pino como saída
pinMode(triac_inv, OUTPUT); // Definindo o pino como saída
pinMode(rl_on_off, OUTPUT); // Definindo o pino como saída
digitalWrite(triac_rede, LOW); // Colocando a saída em nível lógico zero, para evitar imprevistos nas condições iniciais
digitalWrite(triac_inv, LOW); // Colocando a saída em nível lógico zero, para evitar imprevistos nas condições iniciais
digitalWrite(rl_on_off, LOW); // Colocando a saída em nível lógico zero, para evitar imprevistos nas condições iniciais
}
void loop()
{
niv_bat = analogRead(bateria); // Recebe e armazena o valor da entrada analógica na variável niv_bat
delay(100); // Tempo, em milisegundos, para efetuar a verificação da entrada analógica
if(estado == false) // Se estiver em processo de carga da bateria ( inversor desligado )
{
if(niv_bat > 1000) // Valor da entrada analógica varia entre 0 e 1023, portanto se estiver acima de 1000 já é considerado bateria cheia, para evitar problemas com possíveis quedas de tensão
{
estado = true; // Altera o processo para descarga
digitalWrite(rl_on_off, HIGH); // Liga o relé
delay(5000); // Espera 5 segundos
digitalWrite(triac_rede, LOW); // Desliga o triac da rede
delay(3); // Espera 3 milisegundos
digitalWrite(triac_inv, HIGH); // Liga o triac do inversor
}
}
else // Se estiver em processo de descarga da bateria ( inversor ligado )
{
if(niv_bat > 500 && niv_bat < 520) // Se estiver com 2,5 volts na entrada analógica
{
estado = false; // Altera o processo para carga
digitalWrite(triac_inv, LOW); // Desliga o triac do inversor
delay(3); // Espera 3 milisegundos
digitalWrite(triac_rede, HIGH); // Liga o triac da rede
digitalWrite(rl_on_off, LOW); // Desliga o relé
}
}
}
Testei com um potenciometro na entrada simulando sua fonte variável de 0-5V.
Tudo certo!