이 프로젝트는 스티어링 휠을 업데이트하기로 결정하여 개인 SIM 운전 요구 사항에 맞게 현실감 과 프릴이없는 운전 경험을 나타 냈습니다.
그러나 F1 스티어링 휠을 모방하기 때문에 호환 가능한 Thrustmaster베이스 및 콘솔 과 함께 작동해야한다고 말했습니다.
나는 목표를 높이고 스티어링 휠이 등장하기를 원하는 것들의 목록을 만들었습니다.
Steerig Wheel에는 PlayStation Dualshock 4 컨트롤러에서 사용 가능한 모든 버튼이 있습니다.
스티어링 휠과 관련된 설정에 대한 디스플레이를 포함하고 싶었습니다 (및 향후 업데이트).
필요한 운전 기능에 빠르게 액세스하기위한 로터리 인코더 (브레이크 밸런스, ABS 및 트랙션 컨트롤)
또한 한 번의 클릭으로 x 기능을 X- 클릭하면 X X Clicks를 사용하여 CAB (Custom Combined Action Button)도 포함하고 싶었습니다.
3D 프린터 나 CNC 머신에 즉시 액세스 할 수 없으므로 3drap.it의 디자인 중 하나를 사용하기로 결정했습니다. Antonio의 도움으로, 우리는 그들이 보유한 현재 휠의 새로운 버전과 아래의 디자인과 일치하는 새로운 버전을 설계했습니다.
바퀴의 빠른 비디오 데모를 보십시오.
스티커는 A4 스티커 시트의 표준 잉크젯을 사용하여 인쇄 한 다음 투명 포장 테이프로 덮었습니다.
스티커 시트를 여기에서 다운로드하십시오 (PDF).
하드웨어에서 기억해야 할 가장 중요한 것은 Thrustmaster베이스가 ~ 3,5V로 스티어링 휠에 힘을 발휘한다는 것입니다. 사용하는 모든 것은 해당 전압에서 실행할 수 있어야합니다.
처음부터 아이디어는 Arduino Nano 보드 주변에 이것을 구축하는 것이 었습니다. 나는이 플랫폼에 대한 이전 경험을 가지고 있었고 인터넷에서 몇 가지 출발점을 발견했다는 사실 때문에이 결정을 쉽게 만들었습니다.
다음은 디스플레이였습니다. 나는 단지 원격 측정법을 연결하거나 보지 않고 휠 Itslef의 설정을보고 편집 할 수있는 수단으로 디스플레이를 원했습니다. 따라서 간단한 16x2 백라이트 LCD로 충분합니다. GPIO의 제한을 유지하기 위해 I 2 C 배낭도 추가했습니다.
Arduono Nano가 많은 GPIO를 지원하지 않기 때문에 로터리 인코더는 약간의 문제였습니다. 하루가 끝날 무렵, 나는 3 개의 Duppanet I 2 C 로터리 인코더 미니 v2.1 보드와 함께 갔다. 그들은 큰 일을하고, 히트를 놓치지 않으며, 총 3 개의 GPIO의 총 만 필요합니다.
마지막으로, 로타리 스위치의 경우 두 개의 미니 8 웨이 로터리 스위치를 사용했는데, 각 스위치는 단일 아날로그 GPIO를 구동하여 필요한 GPIO를 더욱 줄였습니다. 아이디어는 매우 간단하며 여기에서 더 많은 것을 찾을 수 있습니다.
내가 계획 한 모든 funcitons를 수행하기 위해 22 개의 버튼이 필요했습니다. 언급 할 특별한 온라인 공급 업체가 여러 온라인 공급 업체로부터 공급했습니다. 대부분의 버튼은 (on)-오프 (on) 토글을 제외한 간단한 임시 (on)-오프 스위치입니다. 패들 시프터의 경우 3drap.it는 인클로저에 꼭 맞는 무거운 마이크로 스위치를 공급합니다.
? 다음은 내가 사용한 하드웨어의 전체 목록 입니다.
이곳에서 커뮤니티 로부터 많은 도움을 받았습니다 (PLS는 아래 크레딧 참조). 나는 내 연구를했고 많은 사람들이 비슷한 일을하고 있다는 것을 알았지 만, 스티어링 휠이 작동하기를 원하지 않았습니다. 그래서 나는 그들 중 몇 명에게 연락하여 통찰력을 얻었고 내 버전을 만들기 시작했습니다.
내 출발점은 Taras 의이 게시물로 T300에 기본 하드웨어 및 소프트웨어 연결 안내서를 얻었습니다. 이것은 또한 내가 읽은 첫 번째 글 이이 여정에서 나를 이끌었습니다. Taras는 내 모든 기술적 질문에 응답함에 따라 엄청난 도움이되었습니다.
그 후, 나는 L3 & R3 버튼을 포함하여 Bram Harmsen의 프로젝트에서 리버스 엔지니어링 된 Thrustmaster F1 휠 비트 및 바이트를 발견했으며, 이는 일반적으로 다른 스티어링 휠에서는 사용할 수 없습니다. 모든 작업을 복제하는 데 필요한 모든 정보를 가지고 있으면 모든 정보를 모두 정리하기 시작했습니다.
여기에 해당 코드에 대해 너무 자세히 설명하지는 않지만 Repo에서 볼 수 있습니다. 가능한 한 많은 의견을 추가했습니다.
? Arduino 스케치 파일을 봅니다
휠은 시장의 다른 휠과 매우 흡사합니다. 모든 PlayStation DualShock 4 컨트롤러 버튼을 모두 모방합니다. 주요 차이점은 버튼 매트릭스 , 디스플레이 메뉴 , 로터리 인코더 및 로터리 스위치 (운전실 기능)입니다.
Nano에 GPIO를 저장하는 이름으로 디자인에 필요한 22 개의 버튼을 지원하기 위해 5x5 버튼 매트릭스를 만들었습니다 (예, 3 개가 있습니다!).
? ️ 여기 버튼 매트릭스가 있습니다.
디스플레이를 원했던 몇 가지 이유가있었습니다. 먼저, 컴퓨터에 연결할 필요없이 휠 설정을 변경하는 방법이 필요했습니다. 둘째, 실제 시간과 날짜를 표시 할 시계가있는 것이 좋다고 생각했습니다. 셋째, 이 디스플레이는 향후 업데이트에 사용하여 원격 측정을 표시 할 수 있습니다 ... (아직 계획된 것은 없음). 그리고 마지막으로, 그것은 단지 멋져 보입니다.
디스플레이는 세 가지 디스플레이 버튼으로 제어됩니다.
메뉴 : 휠 메뉴를 엽니 다
다음 : 메뉴를 스크롤하십시오
선택 : 옵션을 선택하십시오
디스플레이 메뉴 옵션 :
휠 모드 : 어떤 플랫폼에 따라 휠 모드를 설정하십시오.
PS- PlayStation (PS) 모드
PC- 고급 (PC) 모드
분쟁 모드 : 디스플레이 키 프레스가 켜져있을 때 디스플레이 모드를 설정하십시오. 버튼을 누를 때마다 '기능이 표시됩니다.
PS- 모든 버튼을 누르면 PlayStation 버튼 기능이 표시됩니다 (Cross, Triangle, L2, R2, ... 등)
GT- 버튼을 누르면 개인 선호도 (Pit Limiter, HUD, 와이퍼 등)에 따라 시뮬레이터 버튼 매핑이 표시됩니다.
Keypress : 디스플레이에 버튼 키 프레스를 표시하십시오
날짜/시간 : 홈 화면에서 날짜 및 시간을 보여 주거나 숨기기
버저 - 부저를 켜거나 끕니다
Hour Chirp- 예, Simuator에서 소비하는 시간을 추적하기 위해 매 시간마다 경고음이 될 수 있습니다.
표시 끄기 - 디스플레이 끄기 (모든 디스플레이 버튼이 다시 켜집니다)
런타임 - 스티어링 휠이 부팅 된 이후 시간을 표시하므로 실행중인 시간을 알 수 있습니다.
로터리 인코더는 운전 중에 브레이크 균형 , ABS 및 트랙션 컨트롤 조정에 빠르게 액세스 할 수 있습니다. 화면 메뉴에서 자신을 산만하게하지 않고도 설정을 빠르게 조정할 수 있기 때문에 로터리 인코더는 시원합니다.
로터리 인코더는 다음과 같이 매핑되었습니다.
설명 | 왼쪽 썩음. (-) | 오른쪽 썩음. (+) |
---|---|---|
브레이크 밸런스 (BB) | D-PAD 다운 | D-PAD UP |
안티 록 제동 시스템 (ABS) | L3 | R3 |
트랙션 컨트롤 (TC) | D- 패드가 남았습니다 | D 패드 오른쪽 |
설명 | 왼쪽 썩음. (-) | 오른쪽 썩음. (+) |
---|---|---|
브레이크 밸런스 (BB) | 아래에 | 위로 |
안티 록 제동 시스템 (ABS) | 20 | 21 |
트랙션 컨트롤 (TC) | 왼쪽 | 오른쪽 |
? 다음은 두 플랫폼 모두에 대한 Assetto Corsa Competizione에 적용한 제어 바인딩 맵입니다.
이것은 Nico Rosberg가 운전을 최적화하기 위해 브레이크 밸런스를 전면에서 후면으로, 후면으로 여러 번 전환 해야하는 방법을 설명하는 비디오를 보면서 내가 생각한 것입니다. 물론 로타리 인코더를 사용할 수는 있지만 특히 바퀴에 힘 피드백이 차는 경우 정확할 수는 없습니다.
아이디어는 선호도에 따라 Mutliple Clicks를 복제 할 수있는 설정 버튼을 만드는 것입니다. 로터리 스위치를 사용하면 매개 변수를 빠르게 설정할 수 있습니다.
CAB 모드 : 복제 할 기능을 선택합니다 (BB, ABS, TC)
택시 단계 : 버튼 (1x-8x)을 누르려는 횟수를 선택하십시오.
CAB -/+ : CAB -/+ 버튼을 선택할 때 선택한 환경 설정에서 실행됩니다.
커스텀 보드가 필요하기 때문에 가능한 한 소형을 유지하고 싶었습니다. 나는 또한 미래에 실패가있을 경우 상황을 제거하고 상호 교환하기를 원했습니다. 저의 의도는 사용자 정의 인쇄 된 PCB를 만드는 것이었지만이 시점에서는 실제로 의미가 없었습니다 (아마도 업데이트에서). 최종 보드는 5x7cm Perfboard로 구성되어 있으며 고체 코어 와이어를 사용하여 연결을 만들었습니다.
나의 첫 번째 시도 (v1)는 완벽하게 기능했지만 원하는만큼 컴팩트하지는 않았습니다. 실제로, 그것은 스티어링 인클로저에 전혀 맞지 않았습니다. 각진 듀폰 남성 커넥터를 사용하여 트랙을 재 설계하고 두 번째 버전 (v2)을 재건하여 높이가 제한되어있어 많은 공간을 절약했습니다.
? 최종 다이어그램 레이아웃 및 보드를 살펴보십시오.
다이어그램 쇼에서 모든 것을 연결하고 연결하면 스티어링 휠을 사용하도록 설정 될 것입니다.
Arduino 스케치를 컴파일하려면 이러한 라이브러리를 설치해야합니다.
EEPROM.H- 설정을 저장하기위한 EEPROM 라이브러리
LiquidCrystal_I2C.H- 액정 디스플레이 I 2 C 라이브러리
i2cencoderminilib.h- 로테리 인코더 I 2 C 라이브러리
Timelib.h- 시간 라이브러리
DS1307RTC.H -DS1307 RTC 라이브러리
RTC에서 현재 시간을 설정하는 방법에 대한 라이브러리의 지침을 따르십시오.
각 로터리 인코더 보드의 주소를 변경하는 방법에 대한 라이브러리의 지침을 따르십시오. 다음과 같이 설정했습니다.
BB (브레이크 밸런스) : 0x20
ABS (Antilock Braking System) : 0x21
TC (트랙션 컨트롤) : 0x22
반환 된 값이 공급 된 전압에 의존한다는 점을 감안할 때 조정이 필요할 수있는 한 가지는 로터리 스위치 값입니다. DEBUG_ROTARY_SWITCHES
를 true
로 설정하면 LCD가 두 스위치의 현재 값을 표시합니다. 해당 숫자를 기록하고 getCABMode()
& getCABSteps()
함수에서 t300_functions
스케치 파일에서 업데이트하십시오.
내장 성능 모니터를 추가했습니다. DEBUG_LATENCY
true
로 설정하고 직렬 모니터 (115200 Baud)를 열어야합니다. 업로드되면 현재 루프 대기 시간에 대한 실시간 보고서를 볼 수 있습니다.
첫 번째 소프트웨어 버전에는 몇 가지 문제가 있었으며 대기 시간이 가장 큰 문제가있었습니다. 때때로 버튼 클릭이 놓칠 것입니다. 레이스 중에 이것은 상향 시프트 또는 다운 시프트에서 잘못을 의미했습니다. 이것은 나쁜 성능으로 구성됩니다.
테스트를 실행 한 후 나는 단일 루프가 약 2800ms에서 약 106000ms에 초기 딸꾹질로 실행된다는 것을 발견했습니다. 무언가가 어떤 유형의 지연을 일으키고 있다는 것은 끔찍했습니다. 결국 로터리 인코더 및 시계 (RTC)의 코드를 최적화했습니다.
디스플레이는 운전 경험에 크게 추가되지 않기 때문에 ABS 로터리 스위치를 긴 압박으로 운전하는 동안 끄는 동안 끄는 것을 선택할 수 있습니다.
현재 버전은 매끄럽게 작동하며 경주 중에는 잘못된 일을 보지 못했습니다.
다른 사람들이 이전에 수행 한 작업을 인정하는 작은 공간.
Taras Ivaniukovich https://rr-m.org/blog/- 블로그에서 공유 한 작업과 도중에 제공 한 도움을 받았습니다.
Bram Harmsen https://www.thingiverse.com/thing:2813599- 리버스 엔진의 경우 F1 스티어링 휠.
MRFID72- 아날로그 로터리 스위치를 설명하는 멋진 YouTube 비디오의 경우
Danny Van Den Brande- 온라인으로 찾은 코드의 경우 버튼 매트릭스를 설정하는 데 도움이되었습니다.
Antonio de Stefano https://3drap.it- 멋진 스티어링 휠 인클로저
GNU 일반 공개 라이센스 v3.0 이상