segunda-feira, 16 de outubro de 2017

Interface Configurável Para 48 Controles CMRI MK1

Esta interface é bastante flexível e pode ser utilizada para controlar AMV acionados por Servos, Bobinas ou Motor Lento, assim como Luzes de Sinalização e outros dispositivos de forma simultânea. 




É isso mesmo, você pode controlar AMVs com Servos, Bobinas e Motores de Acionamento com uma única interface.

Ela tem dois modos de funcionamento: 
1: Modo Standalone onde os controles são acionados através de interruptores 
2: Modo Node CMRI onde os controles são gerenciados por um software como o JMRI.


Componentes da Interface 48 Controles CMRI:
1. Arduino Nano
2. Modulo RS485
3. Módulo Saída I2C Servos PCA9685
4. Módulo Saída 74HC595
5. Módulo Entrada CD4021

Módulos Protótipo


Diagramas dos Blocos da Interface


Blocos de Saída - 48 Portas de Saída
Uma das maiores versatilidades deste projeto está nas combinações dos 48 Controles que podem acionar Servos, Bobinas de AMVs, Motores Lentos de AMVs, Sinalização entre outras possibilidades.

Os 48 controles são divididos em 6 blocos, cada um com 8 Controles* e cada bloco pode funcionar de uma maneira diferente conforme a configuração da Interface.


Bloco 1Controle 1 a 8
Bloco 2Controle 9 a 16
Bloco 3Controle 17 a 24
Bloco 4Controle 25 a 32
Bloco 5Controle 33 a 40
Bloco 6Controle 41 a 48



Para acionamento das saídas existem duas possibilidades de hardware: Módulo(s) Serial/Paralelo com 74HC595 e/ou Modulo(s)  PWM i2c para 16 Servos.

Número de Controles x Número de Portas de Saídas: Esta interface prevê o controle de 48 dispositivos, o que não necessariamente serão 48 Portas de Saídas. 
No caso de AMVs acionados por bobina, precisamos de puas portas de saída para o mesmo AMV, uma porta para cada bobina. 

Quando configuramos a saída de um bloco como "AMV Bobina" estaremos associando duas portas de saída para um único Controle, ou seja, se todos blocos de saída forem configurados como "Bloco AMV Bobina" teremos 96 portas de saídas na Interface.



1. Arduino Nano:

A base do projeto foi o Arduino Nano, mas você pode utilizar um Arduino UNO sem problemas. No meu caso, montei o Arduino Nano em uma PCB onde montei junto à interface serial RS-485 e alguns pinos para conexão dos módulos e da alimentação.

Foto Prototipo


Detalhe das Conexões da PCB


Conexões Arduino

2. Módulo RS-485:
Pino TX: Dados In (DI) RS485
Pino RX: Dados Out (RO) RS485 
Pino D2: Enable R (RE) e Enable T (DE) RS485

3. Módulo Saída I2C Servos PCA9685:
Pino A4: SCL Módulo I2C Servos 
Pino A5: SDA Módulo I2C Servos 


4. Módulo Saída 74HC595:
Pino D3: Clock Modulo 74HC595 (74HC595 Pin 11)
Pino D4: Latch Modulo 74HC595 (74HC595 Pin 12)
Pino D5: Data Modulo 74HC595 (74HC595 Pin 14)

5. Módulo Entrada CD4021:
Pino A0: Clock Modulo 4021 (CD4021 Pin 10)
Pino A1: Latch Modulo 4021 (CD4021 Pin 9)
Pino A2: Data Modulo 4021 (CD4021 Pin 3)

6. Pino Habilita Configuração:
Pino A3: Enable Config (GND - Enable)


2. Módulo RS-485:
A interface Serial RS-485 basicamente é um CI Max485 ou SN75176 ligado ao Arduino nos pinos 0(RX), 1 (TX) e 2 (Controle I/O). Ele irá receber e transmitir os dados da porta serial no padrão RS-485.

Você pode utilizar um modulo RS-485, para isso basta ligar os DI ao Pino 0 (RX), RO ao Pino 1 (TX) e  DE e RE ao Pino 2 (Controle). Não esqueça também de ligar o VCC (5V) e o GND. 


Os pinos para conexão dos módulos de Entrada / Saída estão ligados diretamente aos pinos do Arduino Nano:
Pinos 3, 4 e 5:  Módulo Saídas 74HC595
- Pinos A0, A1 e A2 Módulo Entradas CD4021 
- Pinos A4 e A5 Modulo PWM I2C;


3. Módulo Saída I2C Servos PCA9685
O módulo PWM I2C para 16 Servos, utiliza comunicação I2C (Pinos A4 e A5 do Arduino) o que permite que com poucos pinos do Arduino consigamos controlar muitos servos.

A interface está preparada para conexão de até 2 módulos PWM, o que permite controlar até 32 servos.





Quando habilitamos os módulos PWM na Interface, estaremos vinculando para cada interface 2 Blocos de controles (8 x 2 = 16 Controles). Obrigatoriamente estes serão os blocos 1 e 2 (Modulo PWM 1) e blocos 3 e 4 (Modulos PWM 2).

Os blocos restantes serão acessados pelo Módulos 74HC595. Se configurarmos por exemplo um módulo PWM, teremos os blocos 1 e 2 configurados para Servos e os blocos 3, 4, 5, 6 para controle via 74HC595.

Endereçamento dos Módulos I2C:Os módulo PWM I2C tem uma série de jumpers que configuram seu endereço no barramento I2C, a interface trabalha com endereços fixos para os módulos conforme abaixo:

Modulo 1: Endereço 0x40
Modulo 2: Endereço 0x41


Jumpers de Endereçamento do Modulo

Endereco 0x40 (Todos Abertos) - Endereco 0x41 (Apenas A0 Fechado)


4. Módulo Saída 74HC595
O 74HC595 é um componente eletrônico conversor de sinal Serial para Paralelo, ele tem 8 portas de saídas e recebe as informações do Arduino utilizando 3 pinos.
Foto Protótipo Modulo Saida 74HC595

Eles podem ser ligados em cascata multiplicando o numero de saída, eu montei módulos de 16 saídas (Dois 74HC595 em cada) que podem ser conectados multiplicando o numero de portas de saída:

Foto conexão em cascata de Modulos 74HC595


5. Modulo de Entrada CD4021
O CD4021 é um componente eletrônico conversor de sinal Paralelo para Serial, ele tem 8 portas de entrada que tem seus valores transmitidas para o Arduino utilizando apenas 3 pinos.

Ele pode ser ligado em cascata com outro CD4021 multiplicando o numero de entradas possíveis com o uso de apenas 3 pinos do Arduino. Eu optei em montar módulos com 3 CD4021 e assim ter 24 portas de entrada.






Sketch Interface

O sketch com o código pode ser baixado no link abaixo:
Sketch Interface Configurável Para 48 Controles C/MRI MK1- V 1.7 - 15/12/2018 

Além do código serão necessárias algumas bibliotecas adicionais que podem ser baixadas nos links:
- CMRI


Uma das flexibilidades desta interface é que as principais configurações são feitas via serial ao iniciar o Arduino sem a necessidade de alterar no sketch:


Configuração do Modulo via Porta Serial


- Modo de Funcionamento: Standalone ou Node CMRI;
- Endereço Node (Apenas no Modo Node CMRI);
- Numero de Módulos PWM 16 Servos conectados (Ate2 módulos);
- Funcionamento dos Blocos de Saída (Saída Simples ou AMV Bobina);
- Tempo do Pulso Acionado para cada Bloco configurado como AMV Bobina;
- Ângulo Mínimo e Máximo de Cada Servo (Conforme Numero de Modulos PWM conectados);




Modo de Funcionamento dos Blocos de Controles

Conforme citado acima, cada um dos 6 blocos de controle (8 controles por bloco) podem funcionar de maneira diferente conforme configuração:

Bloco Normal: Liga (5V) ou Desliga (0V) conforme o controle recebido. Cada saída do bloco ficará ligada ou desliga conforme a posição da respectiva entrada (Modo Standalone) ou conforme o valor recebido via serial (Modo CRMI Node).
Modo Normal: Cada saída corresponde a um controle.


Bloco Servo: Quando utilizado módulos PWM I2C as primeiras portas de controles serão associadas aos servos: PWM 0: (1 a 16) e PWM 1: (17 a 32). 

Cada servo ira para uma posição conforme o valor da respectiva entrada (Modo Standalone) ou conforme o valor recebido via serial (Modo CMRI Node). 

O servo ira se movimentar para a Ângulo Mínimo (Ângulo por Servo configurável via Serial) quando o controle recebido for 0 (Zero) e vai movimentar para o Ângulo Máximo (Ângulo por Servo configurável via Serial) quando o controle recebido for 1.





Bloco AMV Bobina: Quando um bloco de controles 74HC595 é configurado para AMV de Bobina, cada Controle terá duas Portas de Saídas (Uma para cada bobina). 


Modo AMV Bobina: Cada par de portas de Saída coresponde a um Controle


Essas saídas são acionadas momentaneamente (Tempo Configurável via Serial) conforme o valor da respectiva entrada do Controle (Modo Standalone) ou conforme o valor recebido via serial (Modo CRMI Node). 

A primeira porta de saída será acionada momentaneamente quando o controle recebido for 0 (Zero) e a segunda saída será acionada momentaneamente quando o quando o controle recebido for 1.


Acionamento das Saídas conforme o valor dos Controles para Blocos AMV Bobina.


Como o consumo de corrente das bobinas de AMVs é bastante elevado é necessário utilizar um transistor de driver, como o TIP120.


Módulo Driver com Tip120 para Acionamento de Bobinas



Ligação do Modulo 74HC595 com Driver de Potencia aos AMVs



Logicamente quando é utilizada esta configuração você terá um numero de saída maior que 48, podendo chegar a 96 saídas caso configure todos os blocos como AMV de Bobina.  

Como o tempo de acionamento é configurável é possível controlar não apenas AMVs de Bobina, mas também motores de acionamento lento ajustando o tempo de acionamento do bloco. Neste caso não se deve usar no mesmo bloco AMVs de bobina, pois o tempo maior acionado provocará a queima da bobina.



Nota 22/06/2019: Devido a dificuldade em obter os módulos de Entrada CD4021 e de Saída 74HC595 que exigem conhecimentos de eletrônica para sua confecção foi desenvolvido a Interface Configurável Para 48 Controles CMRI MK2.

sexta-feira, 22 de setembro de 2017

Como Instalar uma Biblioteca (Library) no IDE do Arduino

Este passo a passo deve ajudar os colegas ferromodelistas que precisarem instalar uma nova biblioteca no IDE do Arduino para poder utilizar com algum sketch que tenha baixado/copiado.


Bibliotecas são códigos prontos normalmente para poder utilizar de algum hardware. Assim não precisamos nos preocupar em como fazer o Arduino se comunicar com aquele dispositivo.

Elas precisam ser instaladas (Na verdade copiadas) para uma pasta específica do IDE do Arduino para que sejam reconhecidas e compiladas.


Passo a Passo para Instalar uma Biblioteca (Library) no IDE do Arduino:

1. Baixar a Biblioteca (Exemplo biblioteca ArduinoCMRI):

A maioria dos códigos e bibliotecas para Arduino tem sido disponibilizadas no site “github.com”  por isso tomei as telas dele como exemplo:


1.1. Primeiro clique em “Clone or Download”
1.2. Clique em Download ZIP


2. Quando o Download estiver concluído acesse a pasta de Downloads do seu computador. Você deve encontrar o arquivo ZIP da biblioteca que acabou de baixar;

3. Clique com o Botão direito do mouse sobre o arquivo e no menu que se abre escolha a opção “Extract Here”;



4. Quando o processo acabar você deverá encontrar na pasta de Download uma nova pasta com o nome da biblioteca.


Selecione a pasta de dois cliques para abrir.

5. Dentro da pasta você deverá encontrar alguns arquivos e normalmente uma pasta chamada “examples”. 


Clique em Voltar (Canto Esquerdo Superior da Tela) para voltar a pasta anterior;


6. Se a pasta da biblioteca tiver o final do nome como “-master”, renomeie a mesma tirando o texto “-master”



8. Agora vamos copiar (instalar) a biblioteca no IDE do Arduino. Clique sobre a pasta e digite "Crtl + C" para copiar a pasta;


9. Acesse a pasta onde está instalado o IDE do Arduino, dentro desta pasta você encontrará uma pasta chamada “libraries”.



10. Abra a pasta “libraries” e clique Ctrl + V para copiar a biblioteca para o IDE do Arduino;


Pronto! Agora é só testar se o IDE reconheceu a biblioteca!!!


1. Abra o IDE do Arduino;

2. Acesse a opção Sketch => Incluir Biblioteca, na lista que abre você deve encontrar a biblioteca que acabou de instalar!



Agora você já pode utilizar a biblioteca nos seus Sketchs!!!

sábado, 2 de setembro de 2017

Detector de Ocupação de Blocos DCC

Este circuito funciona com DCC e pode ser utilizado para sinalizar um bloco da sua ferrovia está ocupada por vagões ou por uma composição em deslocamento. Podemos utilizar para sinalização em um painel, semáforos e/ou conectar um pino do Arduino para integração com o JMRI.




Detector de Ocupação não Invasivo:
Existem varias formas de detectar a ocupação de blocos de trilhos em uma maquete, este projeto utiliza o monitoramento da corrente dos trilhos utilizando sensores não invasivos.

Quando uma corrente elétrica passa por um condutor ela gera um campo magnético, transformadores e outros dispositivos elétricos utilizam esse princípio para funcionamento.
Em resumo os sensores não invasivos geram uma corrente em seus pinos quando um campo magnético passa por ele.  

Foram utilizados sensores não invasivos modelo HWCT 5A/5mA, estes sensores comprei no mercado livre mas se procurar pode encontrar no Ebay ou Alliexpress por este modelo ou similares que tenham a mesma resolução 5A/5mA:


O Circuito:
O circuito foi baseado no projeto encontrado na internet que foi publicado por Rob Paisley datado de 2009, basicamente a única mudança foi o uso de CI 4049 no lugar do LM555:

Circuito Original de Rob Paisley



Circuito Adaptado


Funcionamento: 
Quando nenhuma corrente está circulando por T1 o transistor Q1 está em corte e a tensão no ponto A do circuito é praticamente zero.  IC 1/1 irá inverter este valor e teremos em S1 5V, em seguida IC 1/2 ira inverter novamente estes valor e teremos em S2 0V.

Quando uma corrente é induzida em T1 o transistor Q1 passa a conduzir através de R1 passando o ponto A do circuito para 5V.  IC 1/1 irá inverter este valor e teremos em S1 0V, em seguida IC 1/2 ira inverter novamente estes valor e teremos em S2 5V.


Na saída S1 pode ser ligado um led verde para indicação de que a linha está vazia e na saída S2 um led vermelho para indicar que a linha está ocupada. 



Montagem:
Como o CI 4049 possui 3 pares de inversores montei o circuito com três sensores utilizando uma placa perfurada com trilhas:
Circuito Completo do Detector de Ocupação



Montagem do Circuito


Melhorando a Indução da Corrente:
Durante os testes realizados ao enrolar o fio de alimentação dos trilhos no sensor melhorou a sensibilidade do circuito. Sem enrolar o fio, a sensibilidade era de 3,5mA, com duas voltas no sensor a sensibilidade baixou para  próximo de 1mA.



A sensibilidade é muito importante para a detecção de vagões. Para um 3,5mA você precisa adicionar um resistor de 3,3K, já com uma sensibilidade próxima de 1mA o valor deste resistor vai para 10KOhms para uma fonte de 12V.


Ligação dos Trilhos:
Para ligar o circuito aos trilhos você precisa isolar uma das linhas do seu trilho criando os blocos, nesses trechos isolados/bloco um dos fios de alimentação DCC irá passar pelo sensor de corrente, observe que apena um dos trilhos será isolado, o outro recebe o sinal DCC diretamente da Central DCC/Booster:



Demonstração de Funcionamento:
Vejo o vídeo com a demonstração de funcionamento do circuito

terça-feira, 1 de agosto de 2017

Instalação da IDE do Arduino

Neste artigo iremos orientar os colegas ferromodelistas como instalar e utilizar o software Arduino IDE para transferir um programa para o Arduino.


O objetivo não é ensinar a programar, mas ajudar aos colegas do ferromodelismo a baixar um Sketch (Nome que é dado para um programa desenvolvido para o Arduino) e transferir para sua placa.

Então vamos lá! Primeiro vamos instalar o IDE e depois transferir um Sketch para a placa do Arduino. 


1. Preparando o Ambiente de Instalação

Antes de instalar o IDE do Arduino, vamos criar duas pastas para organizar os arquivos.

A primeira será a pasta onde vamos instalar o IDE. Assim ficará fácil saber onde ele está instalado. Quando precisar incluir uma biblioteca nova ou um novo modelo de hardware (placa Arduino) isso irá ajudar bastante.

A segunda pasta será onde vamos gravar nossos "programas" criados ou baixados da internet. Afinal quem nunca salvou um arquivo no computador e depois não encontrava o danado?

1.1. Para criar a pasta onde será instalado o IDE, vamos criar uma pasta no disco C:\ do seu computador

Clique no disco "C:" e crie uma nova pasta com o nome "Arduino".





1.2. Agora vamos criar uma pasta em Documentos do seu computador para guardar seus futuros programas. 

Clique no ícone "Documentos" para acessar a pasta Documentos e crie uma nova pasta com o nome "Sketch Arduino".



2. Instalação do IDE do Arduino 

1.1. Agora vamos fazer o Download do IDE. Primeiro acesse a pagina de download Oficial do Arduino: https://www.arduino.cc/en/Main/Software 



2.1. Clique na opção Windows ZIP file para fazer o download do IDE. Será aberta uma nova janela com a opção para doação ao projeto Arduino, basta clicar em "Just Download" para iniciar o download:



2.2. Quando o download estiver concluído abra o arquivo. No programa ZIP que clique na opção "Extrair Para" ou "Extract To":




2.3. Na nova janela que será aberta, digita a pasta "C:\Arduino" ou selecione a pasta na lista de diretórios, em seguida clique no botão OK:




Quando a extração estiver concluída pode fechar o programa ZIP.

2.4. Acesse a pasta "C:\Arduino". Você vai ver que foi criado um diretório com o nome "arduino-1.8.3" (Versão que baixamos do site 1.8.3):



2.5. Entre nessa pasta e localize o aplicativo "arduino". Clique sobre ele com o botão da direita do mouse e no menu que abre vá na opção "Enviar para" e selecione "Área de Trabalho (criar atalho)".




2.6. Verifique o desktop do seu computador, lá você vai encontrar o atalho para o IDE do Arduino. 


2.7. Abra a IDE do Arduino clicando no atalho criado no desktop para conhecer um pouco das suas funções:





  1. Carrega o Sketch para a placa Arduino conectada;
  2. Editor do código do Sketch;
  3. Mensagem de Status da compilação e transferência do Sketch para a placa;
  4. Placa Conectada e Porta;
  5. Abre o Monitor Serial;


2.8. Conecte sua placa Arduino ao cabo USB e vá no menu "Ferramentas" na opção "Porta" e selecione a porta em que sua placa Arduino foi localizada. 



2.9. Vá novamente ao menu "Ferramentas" e na opção "Placa:xxxxx" selecione o modelo da sua placa Arduino:

Pronto, seu ambiente de programação (IDE) está configurado e sua placa pronta para receber os Sketch's (Programas).


P.S. Estas opções (Porta e Placa) ficaram salvas quando abrir de novo o IDE, eventualmente ao ligar a placa em outra porta USB do computador ela conecta em outra porta COM e será preciso selecionar novamente a porta.





3. Transferindo um Sketch para o Arduino

3.1. Abra o IDE e apague todo código que aparece no editor;

3.2. Copie o código abaixo e cole no editor do IDE (Baseado no Exemplo Blink).

// Teste Pisca Led Placa Arduino

//a funcao setup eh executada uma unica vez quando a placa é ligada
void setup() {
  Serial.begin(115200); // Inicia a porta serial com velocidade de 115200
  Serial.println("Executando a funcao 'setup'");
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.println("");
}

//a funcao loop eh executada continuamente. ela eh executada depois da setup

void loop() {
  Serial.println("Iniciando a funcao 'loop'");

  digitalWrite(LED_BUILTIN, HIGH);   // Acende Led Placa
  Serial.println("Acende Led");

  delay(1000);                       // Aguarda 1 Segundo

  digitalWrite(LED_BUILTIN, LOW);    // Apaga Led Placa
  Serial.println("Apaga Led");

  delay(1000);                       // Aguarda 1 Segundo

  Serial.println("Final da funcao 'loop'");
  Serial.println("");


3.2. Clique no ícone "Carregar" para transferir o programa para a placa. 
Vai aparecer uma janela para salvar o Sketch, nela acesse a pasta "Sketch Arduino" que criamos em Documentos, coloque o nome como "PiscaLed" e clique em Salvar.




Assim que salvar vai aparecer uma barra na parte de baixo do IDE com a evolução da compilação e transferência do programa:


2.3. Quando a compilação e transferência foram concluídas será exibido o resultado na caixa de Status:


2.4. Sua placa do Arduino deve estar com um LED piscando, ela vai ficar assim toda vez que conectar ela a porta USB ou fonte de alimentação até que seja transferido um novo Skech para ela.


2.5. Podemos ver o que está sendo executado pela placa pelo Monitor Serial, para isso foi adicionado no Skech várias linhas com o comando "Serial.println". Clique no ícone do Monitor Serial no canto superior direito do IDE:


Observe as mensagem recebidas no monitor, elas mostram passo-a-passo a execução do código. Lembro aqui que essa visualização é possível porque foi adicionado em cada passo do skech o comando Serial.println com a respectiva mensagem.

Eventualmente será necessário ajustar a velocidade do Monitor Serial no canto esquerdo abaixo conforme a velocidade definida no comando "Serial.begin".

Agora você tem a IDE do Arduino instalada e pode transferir os Sketch's para sua(s) placa(s) Arduino!!!