Arduino travando ao acionar motores

Olá bom dia pessoal!
Estou desenvolvendo um projeto de um robô controlado por cabo e alimentado por bateria, e indo direto ao ponto estou tendo problemas de travamento no Arduino quando eu ligo os motores.

Algumas especificações:

  • Arduino MEGA;
  • Bateria 16v 15A/h com regulador de tensão fixo para 12v de saída para que não haja variação na entrada do circuito;
  • Distância do cabo de 100 metros CAT6e;
  • Motores;
  • Driver SyRen25;
  • Protocolo de comunicação RS485.

Estou desenvolvendo um software que será a interface de controle, o qual se comunica com o Arduino pela porta serial através do protocolo de comunicação RS485, e também fica lendo os dados dos sensores que o carro possui, como o MQ-2, DHT22, MPU6050, HC020K, INA219, entre alguns outros. O problema acontece quando eu aciono os motores do carro, isso com uma rampa de 5 segundos, eles começam a girar, mas no mesmo momento param bruscamente e o Arduino trava, tendo que resetar ele no botão, ou mesmo tem que desligar ele e ligar novamente para que volte a funcionar. O que pode estar ocasionando esse travamento?

O sketch usa 18966 bytes (7%) de espaço de armazenamento para programas. O máximo são 253952 bytes. Variáveis globais usam 819 bytes (9%) de memória dinâmica, deixando 7373 bytes para variáveis locais. O máximo são 8192 bytes.

Essa é minha saída da IDE, acredito que não seja por falta de memória.
Obrigado desde já!

O Arduino tem um regulador separado ?

Não, ele está ligado na mesma saída que alimenta os drivers, no caso é o mesmo regulador de tensão.

Então muito provavelmente está aí a sua resposta… Coloque um regulador separado, inclusive com uma indutância e capacitores de desacoplamento antes do regulador do Arduino. Ou, no mínimo, um filtro LC…

Como não tenho um filtro na mão aqui, tentei ligar somente o arduino em uma fonte chaveada a parte, porém com os GNDs interligados, e apresentou o mesmo problema. O filtro seria diferente?

Em principio não, o fato de ligar em outra fonte deveria ser suficiente em relação a “sujeira” na alimentação.
Isso tem cara de interferência em alimentação ou algo similar, mas na parte do Arduino em si eu não tenho conhecimento suficiente.
Eu não lido especificamente com o Arduino, mas já tropecei em sintomas parecidos em outras aplicações.
Existe a opção de testar o uso de opto acopladores para isolar o Arduino?

Imaginei algo assim também.
Você fala colocar opto acopladores nas saídas do Arduino que controlam os drivers?

Sim, mas sem afirmar que essa seja a solução. Isso já foge à minha vivência nessa área.

Fazendo alguns testes aqui consegui mais algumas informações.
Eu inseri os fotoacopladores no circuito, mas de fato não resolveu meu problema, então decidi fazer alguns testes retroativos, até que percebi que quando eu removi o fio do motor do sensor INA219, sensor de corrente DC, o motor voltou a funcionar sem travar mais a placa.
Isso me faz pensar se tem alguma coisa haver com o protocolo I2C, que é onde o sensor de corrente é ligado, pois eu não cheguei a desligar ele, só removi os fios do motor que iam nele, então no caso ele está medindo zero.
Alguma sugestão?

Aí já foge completamente ao meu conhecimento… Sou um “generalista”, minha experiência vem de 30 anos de manutenção e uns 45 como hobbysta auto-didata em eletrônica, mas não tenho especialização em nenhuma área em particular.

Posta umas fotos do projeto para ver se não achamos algo gritante.

Oi pessoal, desculpe pelo atraso.

Estou deixando um diagrama pra tentar ajudar, foi o melhor que eu pude fazer.

No momento, o projeto está funcionando bem, porque removi o Vin- e Vin + do INA219, mas quando ligo esses cabos novamente, ele trava a placa quando lê os valores de corrente do motor. Nos meus testes, estou usando apenas um INA219, com outros todos os sensores ligados.

Isso ajuda em algo?

http://www.ti.com/lit/ds/symlink/ina219.pdf

voce fez o procedimento de dar endereços unicos a cada ina219?