sábado, 11 de julho de 2015

Backlight com acrilico, LED e etc.

Anotação.

Para fazer iluminação dos painéis, utilizar acrilico transparente, pintar de cinza ou a cor que se deseja.
Para que a parte da frente seja iluminada, letras, palavras, numeros etc, deve-se utilizar o laser CO2 para fazer a marcação fosca. Marcação fosca no acrilico transparente pintado de cinza.
Atenção: Nos buracos das lampadas ou LEDs, a lateral do buraco do acrilico deve ser TRANSPARENTE, Nunca fosca, para que a luz se propague para dentro do acrílico.
Se utilizar a furadeira para fazer o furo, o mesmo ficará fosco, pode utilizar um chama no buraco para que o acrilico fique transparente naquela área.
Para devolver a transparencia do acrilico, fazer um teste com esmalte incolor.

sexta-feira, 26 de junho de 2015

Trabalhando com circuito integrado que fazem a comunicação I2C.

Testes com o CI PCF8574P
Endereço de acesso 0x20 em binario



Conectando um teclado de membrana 4X4 usando I2C.








Bibliotecas necessárias:
Arquivos da biblioteca

Keypad
Keypac_i2c


sábado, 20 de junho de 2015

Flap Gauge 737 + Arduino


Gauge flap 737 NGX usando Arduino + Servo motor + Link2fs

Você vai precisar de:
-Uma placa arduino, neste exemplo vou utilizar a UNO.
-Um servo motor, neste exemplo estou usando o S0009, super barato.
-Engrenagens feitas em MDF cordatas a laser, mas você pode usar qualquer conjunto de engrenagens, desde que a engrenagem acoplada do servo seja maior que a engrenagem do ponteiro. Isso é necessário porque o curso deste servo motor é de apenas 180 graus, e o curso do ponteiro do flap é 270 graus, desta forma as engrenagens aumentarão o curso.
- Parafusos para fixação, para o eixo pode ser um pedaço de aro de bicicleta.
- Espaçadores para os parafusos, eu usei carga de caneta.
- Os arquivos de desenhos para corte a laser vou disponibilizar mais tarde.

Programas: FSX, LINK2FS e ARDUINO.

Programa do Arduíno.

Eu usei como base o programa DEMO que vem junto com o programa Link2fs, o arquivo é o MULT_KEYS_WITH_FLAP dentro da pasta DEMO INO´s.
Programe o Arduino com este arquivo, ligue o servo motor da seguinte forma:
Positivo no 5volts da propria placa do Arduino, Negativo na GND, e o fio de dados no pino 13 do Arduino. Obs.: Aconselho utilizar uma fonte de alimentação no Arduino pois o servo consome um pouquinho mais.






Apenas fotos do primeiro gauge. Usei MDF e corte a laser, inclusive as engrenagens.





quinta-feira, 21 de maio de 2015

Iniciando o projeto do being 737 800 PMDG.

Iníciando

O objetivo deste blog é documentar o desenvolvimento do meu home cockpit baseado no Boeng 737 800 PMDG e Flight Simulator X.

Programas utilizados:
- Flight Simulator X
    Simconnect.
    Fsuipc 4.9 resgistrado.
    LINDA
    737 800 PMDG.
- Link2FS 6f.
- Programador do arduíno 1.61

1 - Lista de offset do PDMG.

2 - Programação Arduíno.

3 - Hardware


MCP   35 botoes sendo 7 encoders, desdes encoders um é uma chave rotativa de 4 posições. duplo para a função HDG e BANK ANG.

Botões tipo push:   17 sendo 14 quadrados.
Botões tipo chave L/D

Display
V/S 5 normais mais um especial para + e -
Altitude 5
HDG 3
Course 3 + 3
Speed 4
Total 24 Display 7 segmentos.

---------------------------------------------------------------------------------------
Iniciando a programação do Arduino para leitura das chaves do MCP

O principio da programação é esta:
Apenas um exemplo, já que a luz de taxi não está ligado ao MCP.
Definir as variaveis:
int taxi=10 //significa que o botão para a chave da luz de taxi será ligado no pino 10 do arduino.
int taxinew; // utilizado para receber o valor da porta 10, será 1 ou 0, ligado ou desligado.
int taxiold; // será utilizado para armazenar o ultimo valor lido da porta 10, no caso será o valor da variavel taxinew.

void setup(){
pinMode(taxi,INPUT_PULLUP); //define o pino 10 como entrada e em nivel alto.
Serial.begin(9600); // configura a serial
}

void loop(){ 

  taxinew = (digitalRead(taxi)); //Faz a leitura da porta TAXI (neste caso pino 10), e joga o resultado na variavel TAXINEW
if(taxinew != taxiold){ //Compara com o ultimo estado da porta, se houver modificação, ele segue no IF, caso não houve nenhuma mudança no estado da porta, passa direto.
    if (taxinew==1) {Serial.println("Taxi on");}    //Se estiver ligada, imprime na serial
    if (taxinew==0) {Serial.println("Taxi off");} // Se estiver desliga, imprime na serial
    taxiold=taxinew; /* joga o valor atual para a variavel TAXIOLD, para ser comparado ali em cima,
    pois caso a posição da chave não mudou, passa direto evitando enviar dados sem necessidade pela serial.*/
    }
}

Isso resolve como o arduino fará a leitura das chaves.
--------------------------------
Multiplicando a quantidade de portas do arduino uno.

Trabalhando somente com as portas digitais, temos de 0 a 13 num total de 14 portas.
Utilizamos 8 portas para multiplicar, sendo que o fator multiplicador será 4 bits( 4 portas ).
Sendo assim temos um gasto total de:
8 portas para chaves.
4 portas para controle.
Utilizando 4 portas para ativar cada circuito intregado 74ls245, temos os seguintes bits.
1-0000
2-0001
3-0010
4-0011
5-0100
6-0101
7-0110
8-0111
9-1000
10-1001
11-1010
12-1011
13-1100
14-1101
15-1110
16-1111

16 CI 74LS245 contendo 8 portas cada um, num total de 128 portas.

Resumindo, utilizando 12 portas para produzir 128, é um excelente ganho.
Mais 2 portas digitais que não foram utilizadas.
Total 130 portas digitais no Arduino.

Caso não necessite de todas as 128 portas, poderemos utilizar menos.
Exemplo:
Ao invés de 4 bit de controle podemos utilizar apenas 3.
1-000
2-001
3-010
4-011
5-100
6-101
7-110
8-111

8 CI 74LS245 num total 64 portas.
Mais 3 portas digitais que não foram utilizadas.
Total 67  portas digitais no Arduino.
------------------------------------------------------------------------
Utilizando uma porta analógica para fazer o seletor BANK ANGLE do MCP.

São cinco posiçoes, 10,15,20,25 e 30 graus.
Uma chave rotatória de cinco posições deve ser usada.
O esquema de ligação consiste em colocar 4 resistores de 10k em serie conforme a imagem abaixo.

A parte de programação fica desta forma:
int bank;  // variavel para armazenar o valor da porta A0
int bank_old; // utilizado para guardar o ultimo valor da porta A0.

void setup(){ // setup
pinMode(A0,INPUT); // definir a porta analogia A0 como entrada.
Serial.begin(115200); // configura a serial.
}

void loop(){ // o programa em si.
  bank=(analogRead(A0)); // faz a leitura da porta analogica A0, cada posição tem um resistor de 10k
  if(bank !=bank_old){  // verifica se ultima posição da chave foi mudada, caso sim continua.
      if(bank >=0 && bank <=100 ){Serial.println("ZZ700210");}// bank angle 10
      if(bank >=200 && bank <=300){Serial.println("ZZ700211");} //bank angle 15
      if(bank >=400 && bank <=600){Serial.println("ZZ700212");} //bank angle 20
      if(bank >=650 && bank <=850){Serial.println("ZZ700213");} //bank angle 25
      if(bank >=900 && bank <=1250){Serial.println("ZZ700214");} //bank angle 30
  bank_old=bank;
 }

Obs.: Os valores da cada leitura são 0,256,512,768 e 1023. Porém, poderá haver uma leitura não precisa destes valores dependendo da precisão dos resistores. Por esse motivo eu deixei uma margem de segurança nas leituras dos valores.
Ex.: posição 2: Leitura esperada 256, faixa entre 200 e 300.

Abaixo o esquema elétrico ainda não terminado.

---------------------------------------------------------------------------
Display 7 segmentos com MAX7219

Necessário a biblioteca LeControl.h, pode ser baixada via site do Arduino.
Comando para mostrar um caracter no display
lc.setChar (int addr, int digit,char value, boolean dp)
sendo que ADDR, endereço do display, 0 se for o primeiro chip max7219
DIGIT, a posição no display, exemplo, int 0, o caracter será mostrado no primeiro display da esquerda para direita.
VALUE, o valor a ser mostrado no display.
BOOLEAN DP, ativa o ponto decimal.

---------------------------------
Problema com o Link2fs.