Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

FlightGear Analog Trim Tab Wheel

Componentes e suprimentos

Arduino Nano R3
ou placa compatível
× 1
Potenciômetro rotativo (genérico)
× 1
Capacitor 100 µF
× 1
Adafruit SSD1306 OLED de 0,96 polegadas
× 1
Fios de jumpers (genérico)
× 1

Aplicativos e serviços online

Arduino IDE
Anaconda
FlightGear

Sobre este projeto


Conectar o Arduino ao FlightGear não é nada novo, mas descobri que os wikis estão desatualizados e os fóruns fornecem dicas preciosas sobre as quais você deve contornar.

A ideia era ter um comando analógico bom, barato e compacto para controlar a roda do compensador de profundor de uma aeronave no FlightGear. O wiki funciona até a parte de comunicação. Estritamente falando, você não pode usar a comunicação serial diretamente para passar comandos do Arduino para o FlightGear. Você deve contornar com Python para enviar pacotes via UDP.

O que é uma roda de acabamento? É um dispositivo analógico para controlar a deflexão do compensador, que é um dispositivo aerodinâmico para manter uma superfície de controle (neste caso, o profundor que controla o passo da aeronave) em uma determinada posição sem esforço do piloto. Da wikipedia:

Requisitos adicionais para este projeto:python com as bibliotecas serial , socket e sys instalado. Assumindo que o Anaconda foi instalado, as bibliotecas ausentes podem ser recuperadas com o prompt do Anaconda digitando:

>>> conda install -c anaconda pyserial

o mesmo com serial e socket . Pesquise na internet por um pacote adequado, geralmente os mais baixados para sua plataforma são bons. Depois de ter o python com essas bibliotecas (e, é claro, o FlightGear instalado), você pode ir para a próxima seção.

Existem três scripts de código:um esboço do Arduino, um script executável python e um script XML. O esboço do Arduino deve ser carregado em sua placa. O script python deve ser executado para permitir a comunicação entre o Arduino e o FlightGear. O script XML é um protocolo genérico FlightGear que deve ser movido para / data / protocol de uma vez por todas.

O esboço do Arduino requer o U8glib biblioteca. Conforme mencionado no comentário, ajuste a linha 2 do esboço com sua exibição:
  #include  U8GLIB_SSD1306_128X64 u8g (U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI  

Veja U8glib exemplos e documentação. O esboço deve funcionar mesmo sem um visor, então você pode jogar sem feedback visual de seu tabuleiro.

Se você não estiver satisfeito com a direção de rotação, basta trocar a posição dos dois últimos argumentos no seguinte mapa instruções
  w =map (p, 0,1023,100, -100); m =map (p, 0,1023,90,0);  

de forma que os valores do potenciômetro vão de -100 a 100 e a bitola da agulha vai de 0 a 90 (truque para desenhar a agulha na posição correta, experimente você mesmo se tiver curiosidade).

O script python inclui o endereço do host e o número da porta serial. O host deve ser "localhost" (se não funcionar, tente com 127.0.0.1 ), a porta any (talvez seja melhor uma que não esteja em uso por outros aplicativos, não sei), a porta serial onde sua placa está conectada pode ser lida do IDE do Arduino. No meu caso, é "COM4" . Observação:se você testar o Arduino com o monitor serial, pode ser necessário desconectar e reconectar sua placa antes de executar o script Python para que funcione corretamente.
  host ="localhost" port =21567 # buf =1024addr =(host, porta) UDPSock =socket (AF_INET, SOCK_DGRAM) tty ="COM4" print ("tty is", tty)  

O script python pode estar localizado em qualquer lugar. Você pode executá-lo a partir da linha de comando do seu sistema operacional. No meu caso (Windows), digito no prompt de comando:

python c:\ path \ to \ file \ arduinoElevatorTrim.py

Isso pode ser iniciado antes ou mesmo depois de iniciar o FlightGear.

Finalmente, como afirmado anteriormente, o script XML deve ser movido de uma vez por todas na pasta de protocolo de sua instalação do FlightGear. Agora você está pronto para ir. Inicie o FlightGear com seu modo preferido (linha de comando ou iniciador) adicionando o seguinte comando (sem espaço entre os caracteres!) :

--generic =socket, in, 30, localhost, 21567, udp, arduinoElevatorTrim

onde estamos dizendo ao FlightGear para aplicar um protocolo genérico via socket, ler a entrada 30 vezes por segundo, no endereço localhost, porta 21567, protocolo UDP, instruções no arquivo arduinoElevatorTrim.xml. Desfrute da sua roda de acabamento pessoal!


Código

  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
arduinoElevatorTrimOLED.ino Arduino
Código para carregar no Arduino Nano. Ajuste a linha 2 (tipo de display) conforme necessário.
 #include  U8GLIB_SSD1306_128X64 u8g (U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; int ymax =64; int xcenter =xmax / 2; int ycenter =ymax / 2 + 10; arco interno =ymax / 2; ângulo interno =0; char * label ="TRIM"; int labelXpos =53; int p, w, m; u8g_uint_t xx =0; int const potPin =A6; float potVal; // medidor de função vazio personalizado (ângulo uint8_t) {// desenhar a borda do medidor u8g.drawCircle (xcenter, ycenter, arc + 6, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle (xcenter, ycenter, arc + 4, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle (xcenter, ycenter, arc + 6, U8G_DRAW_UPPER_LEFT); u8g.drawCircle (xcenter, ycenter, arc + 4, U8G_DRAW_UPPER_LEFT); // desenha o flutuador da agulha x1 =sin (2 * ângulo * 2 * 3,14 / 360); float y1 =cos (2 * ângulo * 2 * 3,14 / 360); u8g.drawLine (xcenter, ycenter, xcenter + arc * x1, ycenter-arc * y1); u8g.drawDisc (xcenter, ycenter, 5, U8G_DRAW_UPPER_LEFT); u8g.drawDisc (xcenter, ycenter, 5, U8G_DRAW_UPPER_RIGHT); u8g.setFont (u8g_font_chikita); // mostra rótulos de escala // u8g.drawStr (10, 42, "-1.0"); // u8g.drawStr (19, 14, "-0,5"); // u8g.drawStr (63, 14, "0"); // u8g.drawStr (92, 14, "0,5"); // u8g. drawStr (105, 42, "1,0"); u8g.drawStr (1, 42, "PARA BAIXO"); u8g.drawStr (52, 17, "NEUT"); u8g.drawStr (105, 42, "UP"); // mostra o rótulo do medidor u8g.setPrintPos (labelXpos, 32); u8g.print (etiqueta); // mostra o valor digital e alinha sua posição u8g.setFont (u8g_font_profont22); if (w> =99) {u8g.setPrintPos (47,60); } if (w> =10 &&w <99) {u8g.setPrintPos (54,60); } if (w> =0 &&w <9) {u8g.setPrintPos (60,60); } if (w> =-9 &&w <0) {u8g.setPrintPos (48,60); } if (w> =-99 &&w <-9) {u8g.setPrintPos (42,60); } if (w <-99) {u8g.setPrintPos (35,60); } u8g.print (w);} void setup () {Serial.begin (9600); u8g.setFont (u8g_font_chikita); u8g.setColorIndex (1); // atribuir valor de cor padrão if (u8g.getMode () ==U8G_MODE_R3G3B2) {u8g.setColorIndex (255); } else if (u8g.getMode () ==U8G_MODE_GRAY2BIT) {u8g.setColorIndex (3); } else if (u8g.getMode () ==U8G_MODE_BW) {u8g.setColorIndex (1); } else if (u8g.getMode () ==U8G_MODE_HICOLOR) {u8g.setHiColorByRGB (255,255,255); }} loop vazio () {potVal =analogRead (potPin); potVal =(potVal - 512,0) /512,0; Serial.print (potVal); Serial.print ("\ n"); // p é o mesmo que potVal, mas é um inteiro p =analogRead (potPin); w =mapa (p, 0,1023,100, -100); m =mapa (p, 0,1023,90,0); // mostra a agulha e marca xx =m; if (xx <45) {xx =xx + 135; } else {xx =xx - 45; } // loop de imagem {u8g.firstPage (); faça {calibre (xx); } while (u8g.nextPage ()); } atraso (10);} 
arduinoElevatorTrim.py Python
Script a ser executado junto com o FlightGear para "traduzir" a comunicação serial em pacotes UDP. Você precisa do Python instalado para executar este script. Modifique a linha 14 (porta USB onde o Arduino está conectado) conforme necessário.
 #! / Usr / bin / pythonimport sysimport serialfrom socket import * host ="localhost" port =21567 # buf =1024addr =(host, porta) UDPSock =socket (AF_INET, SOCK_DGRAM) tty ="COM4" print ("tty é", tty) try:ser =serial.Serial (tty, 9600) exceto:print ("Erro ao conectar a", tty) prevline ="" enquanto 1:contorno ='' linha =ser.readline () if linha! =Prevline:#algum valor alterado print (linha) contorno =linha UDPSock.sendto (contorno, addr) prevline =linha 
arduinoElevatorTrim.xml XML
Script a ser adicionado na pasta / data / Protocol. Faça isso de uma vez por todas.
      \ n  ,    Compensação do elevador   / controls / flight / elevator-trim   float      
Github
Repositório online em Githubhttps://github.com/dciliberti/arduinoElevatorTrimOLED

Esquemas

No Fritzing, não é possível passar os fios abaixo dos componentes. O fio terra da tela pode ficar sob o Arduino Nano.

Processo de manufatura

  1. Dados digitais Arduino
  2. Homem de Ferro
  3. Relógio POV de LED estilo analógico
  4. Encontre-me
  5. Arduino 3D-Printed Robotic Arm
  6. Controle do umidificador Arduino
  7. NeoMatrix Arduino Pong
  8. Joystick Arduino
  9. Receptor de rádio FM Arduino TEA5767
  10. Pedômetro (Arduino 101)