Bom sou novo em programação com arduinos, e estou com um projeto para controle de alguns fornos em uma fabrica, porem quando rodo o meu programa ele trava e só volta a funcionar quando há o reset na placa, isto ocorre as vezes em 1 minuto e as vezes em 30, se puderem me ajudar.

Acredito que meu problema seja nas telas que estou usando com modulos i2C, quando alterei algumas coisas no meu programa e funcionou muito bem sem as telas, porem quando adiciono alguma das telas ele volta a travar. para ficar mais claro, estou usando o arduino para controlar a mesa que esta na foto anexada.
Esta realizara o controle de quatro motores, os motores estão instalados em inversoras, então eu envio informações para o ScadaBR e então os transfiro para as inversoras. São dois sistemas distintos, cada um funciona com 2 motores, o sistema tem um botão de emergência, lampada de emergência acionada, botão de reset, dois potenciômetros para controle da potencia que o motor deve encontrar no sistema, o mesmo funciona com PID, um botão para controle, manual, automático e desligado, led's para informação se o sistema está ligado ou desligado, e se esta no modo manual ou automático, quatro botoes para controle de subida e descida dos dois motores no modo manual e por fim as 4 telas que apresentariam a potencia desejada e a potencia do sistema.
Estava tentado de inicio apenas escrever uma frase nas telas mas não estou conseguindo.

Exibições: 1075

Anexos

Responder esta

Respostas a este tópico

Pelo pouco que estou estudando, acredito que devo estar utilizando muita memoria do arduino mesmo, e por isso ele acaba travando. 
Acredito que eu possa diminuir o tamanho do programa diminuindo o valor de memorias que envio para o ScadaBr no holdingRegs, para isso usaria as case das memórias como coils para isso, mas não sei como fazer.
Se alguém puder me ajudar. Agradeço!!

Olá Vinicius,

Creio que são bem vindas sempre as alterações de nossos programa para aproveitar de forma mais eficiente os recursos de nosso hardware, mas sinceramente, eu faria melhor ainda, além de tratar de enxugar o programa, trocaria o UNO por uma placa MEGA, muito mais memoria, mais ports, e a diferença de preço hoje em dia é relativamente baixa, e o custo beneficio é enorme.

Meu canal AQUI

Neste momento me encontro em Brasilia e com muito pouco acesso ao computador, mas tenho certeza que os colegas garagistas trataram de lhe ajudar como sempre fazem habitualmente.

Boa sorte!

Abs.

CK

Boa noite Carlos, Acabei me esquecendo de postar o modelo de placa utilizada, mas estou utilizando um mega para o projeto

Profissional seu painel de controle, bem acabado.
seu cabo no i2C eh blindado?

qual modulo vc esta usando, tem link, foto?
Usando um LCD normal da o mesmo problema?

onde enccontro ModbusSerial.h?

Bom dia , 

Informe o diagrama da sua montagem (fotos inclusive) .

Pode ser problema de alimentação - não recomendo que alimente o  LCD   com o 5V do Arduino. 

Você esta usando quatro módulos de LCD no mesmo Arduino ?

Boa tarde  VSAF,

Vamos por partes (Técnica JACK).

Ao compilar o seu sketch Identifiquei alguns problemas;

1o. Nas linhas de 104 a 107: Erro : redefinition of 'LiquidCrystal_I2C lcd'  , pois todas linhas definem a

      mesma instancia lcd. Deveriam ser lcd1, lcd2, lcd3 e lcd4.

2o. Linha 114 Erro: 'modbus_configure' was not declared in this scope

      Não foi criada a instancia "modbus_configure", ou a minha biblioteca ModBusSerial.h é diferente da sua.

      Qual link vc baixou esta sua biblioteca?

      Eu encontrei esta função ( modbus_configure) em uma biblioteca de nome "SimpleModbusMaster.h"

      no meu PC,

      mas que não está inclusa do seu sketch.

3o. Mesmo comentário para a linha 117.

Inclui a biblioteca "SimpleModbusMaster.h",

Inclui estas linhas antes da função setup():  

            Packet packets[2];
            unsigned int regs[1];

modidfiquei as linhas de definição dos lcd, modifiquei a linha 114 assim:

//modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);

preenchida desta forma:     modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 4, 10, 2, packets, 2, regs);

Dai consegui compilar definido como Arduino Mega, e o resultado foi:

Sketch uses 9,276 bytes (3%) of program storage space. Maximum is 253,952 bytes.
Global variables use 729 bytes (8%) of dynamic memory, leaving 7,463 bytes for local variables. Maximum is 8,192 bytes.

Somente 3% de uso da memória de programa do mega. e 8% da memoria volátil.

Pelo visto, você está usando 4 LCD I2C.  A interface I2C tem limitações de distancias.

Se estiver rodando em velocidades de 400Khz, as distancias são bem pequenas.

E se der erro, pode travar os seu "sistema". 

Qual a distancia ente o arduino e o mais longo LCD I2C?

RV

   

I2C tem um gringo (estou no celular e não tenho o link mas se quiser coloco) que está usando se não me falha a memória 120 metros com CAT5, nesse link ele ajudou um cara que estava usando 1.50metro, o problema que eles constataram é a falta de resistor nesses módulos de I2C vendido, no CAT5 ele usou blindado e aterramento adequado tbm.

What is the maximum distance of the I2C bus?
This depends on the load of the bus and the speed you run at. In typical applications, the length is a few meters (9-12ft). The maximum capacitive load has been specified (see also the electrical Spec's in the I2C FAQ). Another thing to be taken into account is the amount of noise picked up by long cabling. This noise can disturb the signal transmitted over the bus so badly that it becomes unreadable.

The length can be increased significantly by running at a lower clock frequency. One particular application - clocked at about 500Hz - had a bus length of about 100m (300ft). If you are careful in routing your PCB's and use proper cabling (twisted pair and/or shielded cable), you can also gain some length.

If you need to go far at high speed, you can use an active current source instead of a simple pull-up resistor. Philips has a standalone product for this purpose. Using a charge pump also reduces "ghost signals" caused by reflections at the end of the bus lines.

Gostaria de passar um pouco do que tem ocorrido comigo, eu tenho um problema semelhante uso um sensor MPU-6050 que faz uma conexao I2C com o arduino, o fato e que quando eu compilo e carrego o codigo pelo meu note que e windowns 10 acontece esta travada,mesma coisa, ele funciona por um tempo e derrepende para, já quando carrego pelo desk que e windonws 7 funciona tudo tranquilamente, se solucionar seu problema por favor comunique

Boa tarde pessoal, desculpa a demora para manter vocês informados, porem a fabrica começou a funcionar esta semana e tive que correr com soluções rápidas para o sistema funcionar.

As telas encontram-se a cerca de 5 metros de distancia do arduino, irei postar fotos da instalação para vocês poderem entender, para que o contexto geral da aplicação seja entendido explicarei o projeto.

O projeto inteiro conta com 16 equipamentos em uma rede modbus RS485 com conexão a um computador, neste há instalado o Scadabr que monitora e transmiti informações entre os aparelhos.

Então tenho um conjunto de mesas de comando, as mesmas com o conjunto de botões que citei a cima, eles controlam eletrodos de fornos que fazem o derretimento de minérios por via de arco voltaico, então na mesa temos instalados dois arduinos megas que controlam os 4 fornos instalados e mais o acionamento do filtro manga, estes estão próximos ao  computador que contem o scadabr.

Destas mesas o barramento RS485 segue para um conjunto de painéis onde no primeiro temos instalados um arduino mega, que controla o acionamento de dumpers para controle do direcionamento da vazão do filtro manga, botões de posicionamento dos dumpers e led's de sinalização, neste primeiro painel temos ainda duas inversoras CFW500 da WEG que realizam o acionamento dos motores que controlam a altura dos eletrodos e dois multimedidores MultiK da kron para colhermos informações de amperagem e tensão de trabalho do sistema.

Nos outros três painéis desta área temos instaladas mais 5 inversoras para controle dos motores dos outros três fornos.

Por fim temos em outra área um Painel para controle do Filtro manga, este tem um arduino mega, para controle dos Dumpers e acionamento de uma Soft Starter que não tem recurso de rede RS485, uma soft Starter para acionamento de um motor e mais duas placas de controle para acionamento das mangas.

Bom este é meu projeto. 

Para inicializarmos o funcionamento, optei por momentaneamente não utilizar as telas e realizar toda a monitoração pelas telas do ScadaBR, mas vou testar as soluções que vocês indicaram para ver se soluciono meus problemas, 

Vou deixar o programa que estou utilizando nas mesas de comando e nos fornos aqui para vocês verificarem, vem me atendendo bem o mesmo, mas como não sou perito no assunto, qualquer dica para otimizar o sistema é bem vindo,

E por fim estou com o problema para conseguir realizar o acionamento do filtro, pois quando há o acionamento do mesmo precioso realizar uma serie de eventos e ao desligar realizar os mesmos eventos na sequencia inversa e com tempos diferente, porem quando executo meu programa não realiza o acionamento e a resposta que tenho no scadaBR é que a variável que é transformada para um para acionamento do programa retorna para zero.

Bom por enquanto é isso, e obrigado a todos pelas ajudas.

Anexos

Boa tarde, 

Informe o diagrama da sua montagem (fotos inclusive) .

Pode ser problema de alimentação - não recomendo que alimente o  LCD   com o 5V do Arduino. 

Você esta usando quatro módulos de LCD no mesmo Arduino ?

A interface I2C não permite conexões longas de 5 metros por  exemplo.

As telas LCDs estão á essa distância dos Arduinos ?

Para usar esse tipo de conexão será necessário usar extensores/repetidores  de I2C no caminho.

Principalmente, falando que sua montagem deve estar em um ambiente industrial (cheio de interferências).  

Recomendo que leia as especificações I2C do fabricante que a criou :

The IC-bus capacitance limit of 400 pF restricts practical communication distances to a few meters

https://www.nxp.com/docs/en/user-guide/UM10204.pdf

https://www.nxp.com/products/analog/interfaces/ic-bus/ic-bus-repeat...

Oi, Murta.
Quando vc diz 5 metros nao seria para fast mode  400khz?
Tem bastante relato na internet da galera usando com frequencias baixas 20khz ou ate 500hz sem amplificador por exemplo, mas eles separam SDL de SCL para evitar cross talk, resistor etc.
Tem essa discussa antiga mas muito instrutiva:

http://forum.arduino.cc/index.php?topic=57604.15

Link que tem na discussao citada acima mas esta quebrado la, nesse link testaram diversos tipos de cabo.
http://electro8051.free.fr/buslong/AN444.pdf


http://dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resi...

O que parece ocorrer bastante eh o pessoal com background em programacao nao dar o devido valor ao osciloscopio,  ter um sistema bem projetado com uma onda quadrada, simplesmente conectam tudo e ahcam que osciloscopio eh opcional, nao rola projetar um sistema sem osciloscopio.

5V em industria nao rola, minimo 12V

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço