산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

FlightGear 아날로그 트림 탭 휠

구성품 및 소모품

Arduino Nano R3
호환 보드
× 1
회전 전위차계(일반)
× 1
커패시터 100μF
× 1
Adafruit SSD1306 0.96인치 OLED
× 1
점퍼 와이어(일반)
× 1

앱 및 온라인 서비스

Arduino IDE
아나콘다
FlightGear

이 프로젝트 정보

Arduino를 FlightGear에 연결하는 것은 새로운 것이 아니지만 Wiki가 구식이며 포럼에서 해결해야 할 귀중한 힌트를 제공한다는 것을 알게 되었습니다.

아이디어는 FlightGear에서 항공기의 엘리베이터 트림 탭 휠을 제어하기 위해 훌륭하고 저렴하며 컴팩트한 아날로그 명령을 사용하는 것이었습니다. 위키는 커뮤니케이션 부분까지 작동합니다. 엄밀히 말하면 직렬 통신을 직접 사용하여 Arduino에서 FlightGear로 명령을 전달할 수 없습니다. UDP를 통해 패킷을 보내려면 Python으로 해결해야 합니다.

트림 휠이란 무엇입니까? 트림 탭의 처짐을 제어하는 ​​아날로그 장치로, 조종사의 노력 없이 제어면(이 경우 항공기 피치를 제어하는 ​​엘리베이터)을 주어진 위치에 유지하기 위한 공기역학적 장치입니다. 위키피디아에서:

이 프로젝트에 대한 추가 요구 사항:serial 라이브러리가 있는 python , 소켓 , 및 sys 설치되었습니다. Anaconda가 설치되었다고 가정하고 다음을 입력하여 Anaconda 프롬프트에서 누락된 라이브러리를 검색할 수 있습니다.

>>> conda install -c anaconda pyserial

serial과 동일 및 소켓 . 인터넷에서 적절한 패키지를 검색합니다. 일반적으로 플랫폼에 가장 많이 다운로드된 패키지가 좋습니다. 이 라이브러리와 함께 Python이 있으면(물론 FlightGear도 설치됨) 다음 섹션으로 이동할 수 있습니다.

세 가지 코드 스크립트가 있습니다:Arduino 스케치, Python 실행 스크립트 및 XML 스크립트. Arduino 스케치를 보드에 로드해야 합니다. Arduino와 FlightGear 간의 통신을 활성화하려면 python 스크립트를 실행해야 합니다. XML 스크립트는 /data/protocol으로 이동해야 하는 FlightGear 일반 프로토콜입니다. 한 번만.

Arduino 스케치에는 U8glib가 필요합니다. 도서관. 댓글에서 언급했듯이 디스플레이로 스케치의 2번째 줄을 조정합니다.

#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI 

U8glib 참조 예제 및 문서. 스케치는 디스플레이 없이도 작동하므로 보드의 시각적 피드백 없이 플레이할 수 있습니다.

회전 방향이 마음에 들지 않으면 다음 map에서 마지막 두 인수의 위치를 ​​바꾸면 됩니다. 지침

w =지도(p,0,1023,100,-100);m =지도(p,0,1023,90,0); 

전위차계의 값이 -100에서 100으로 이동하고 바늘의 게이지가 0에서 90으로 이동하도록 합니다(바늘을 올바른 위치에 그리는 트릭입니다. 궁금하면 직접 시도해 보세요).

python 스크립트에는 호스트 주소와 직렬 포트 번호가 포함됩니다. 호스트는 "localhost"여야 합니다. (작동하지 않으면 127.0.0.1로 시도하십시오. ), 포트 (어쩌면 다른 응용 프로그램에서 사용하지 않는 것이 더 나을 수도 있음, 나는 모릅니다), 보드가 연결된 직렬 포트는 Arduino IDE에서 읽을 수 있습니다. 제 경우에는 "COM4"입니다. . 참고:직렬 모니터로 Arduino를 테스트하는 경우 제대로 작동하려면 python 스크립트를 실행하기 전에 보드를 분리했다가 다시 연결해야 할 수 있습니다.

호스트 ="localhost" 포트 =21567#buf =1024addr =(호스트, 포트)UDPSock =소켓(AF_INET,SOCK_DGRAM)tty="COM4"print("tty는 ", tty) 

파이썬 스크립트는 어디에나 있을 수 있습니다. 운영 체제의 명령줄에서 실행할 수 있습니다. 제 경우(Windows)에서는 명령 프롬프트에 다음을 입력합니다.

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

FlightGear를 시작하기 전이나 시작한 후에도 시작할 수 있습니다.

마지막으로 이전에 언급한 것처럼 XML 스크립트는 FlightGear 설치의 프로토콜 폴더에서 한 번만 이동해야 합니다. 이제 갈 준비가 되었습니다. 다음 명령을 추가하여 선호하는 모드(명령줄 또는 실행기)로 FlightGear를 시작하십시오. (문자 사이에 공백 없음!) :

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

여기서 우리는 FlightGear에게 소켓을 통해 일반 프로토콜을 적용하고, localhost, 포트 21567, UDP 프로토콜, arduinoElevatorTrim.xml 파일의 지침에서 초당 30번 입력을 읽도록 지시합니다. 나만의 트림 휠을 즐겨보세요!

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
  • arduinoElevatorTrimOLED.ino아두이노
    Arduino Nano에 로드할 코드. 필요에 따라 라인 2(디스플레이 유형)를 조정합니다.
    #include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; 정수 ymax =64; int xcenter =xmax/2; 정수 ycenter =ymax/2+10; 정수 호 =ymax/2; 정수 각도 =0; char* 레이블 ="트림"; 정수 레이블Xpos =53; int p, w, m;u8g_uint_t xx =0;int const potPin =A6;float potVal;// 사용자 정의 functionvoid 게이지(uint8_t angle) { // 게이지 테두리 그리기 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); // 바늘 그리기 float x1 =sin(2*angle*2*3.14/360); float y1 =cos(2*각도*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); // 스케일 라벨 표시 // 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, "아래로"); u8g.drawStr( 52, 17 , "중립"); u8g.drawStr(105, 42, "UP"); // 게이지 라벨 표시 u8g.setPrintPos(labelXpos,32); u8g.print(라벨); // 디지털 값을 표시하고 위치를 정렬합니다. 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);} 무효 설정() { Serial.begin(9600); u8g.setFont(u8g_font_chikita); u8g.setColorIndex(1); // 기본 색상 값 할당 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); }} 무효 루프() { potVal =analogRead(potPin); potVal =(potVal - 512.0)/512.0; Serial.print(potVal); Serial.print("\n"); // p는 potVal과 동일하지만 정수입니다. p =analogRead(potPin); w =맵(p,0,1023,100,-100); m =지도(p,0,1023,90,0); // 바늘과 다이얼 표시 xx =m; if (xx <45){ xx =xx + 135; } 그렇지 않으면 { xx =xx - 45; } // 그림 루프 { u8g.firstPage(); do { 게이지(xx); } 동안( u8g.nextPage() ); } 지연(10);}
    arduinoElevatorTrim.py파이썬
    직렬 통신을 UDP 패킷으로 "변환"하기 위해 FlightGear와 함께 실행할 스크립트입니다. 이 스크립트를 실행하려면 Python이 설치되어 있어야 합니다. 필요에 따라 라인 14(Arduino가 연결된 USB 포트)를 수정합니다.
    #!/usr/bin/pythonimport sysimport serialfrom socket import *host ="localhost"port =21567#buf =1024addr =(host,port)UDPSock =socket(AF_INET,SOCK_DGRAM)tty="COM4"print("tty is ", tty)try:ser =serial.Serial(tty,9600)except:print("에 연결 중 오류 발생", tty) prevline=""동안 1:outline='' line=ser.readline() if line !=prevline:#어떤 값이 변경됨 print(line) outline=line UDPSock.sendto(outline,addr) prevline=line
    arduinoElevatorTrim.xmlXML
    /data/Protocol 폴더에 추가할 스크립트입니다. 이 작업을 한 번만 수행하십시오.
      \n ,  엘리베이터 트림 /controls/flight/elevator-trim float  
    깃허브
    Github의 온라인 리포지토리https://github.com/dciliberti/arduinoElevatorTrimOLED

    회로도

    Fritzing에서는 구성 요소 아래로 와이어를 전달할 수 없습니다. 디스플레이의 접지선은 Arduino Nano 아래로 갈 수 있습니다.

    제조공정

    1. Arduino 디지털 주사위
    2. 아이언맨
    3. 아날로그 스타일 LED POV 시계
    4. 나를 찾기
    5. Arduino 3D 인쇄 로봇 팔
    6. Arduino 가습기 제어
    7. NeoMatrix Arduino Pong
    8. Arduino 조이스틱
    9. Arduino TEA5767 FM 라디오 수신기
    10. 보수계(Arduino 101)