Სარჩევი:

Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX: 5 Steps
Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX: 5 Steps

ვიდეო: Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX: 5 Steps

ვიდეო: Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX: 5 Steps
ვიდეო: Jeti Sensor based on Arduino Mini Pro Board 2024, ივლისი
Anonim
Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX
Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX
Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX
Arduino დაფუძნებული (JETI) PPM to USB Joystick Converter for FSX

მე გადავწყვიტე, რომ ჩემი JETI DC-16 გადამცემი გადავიტანო რეჟიმიდან 2-ზე, რომელიც ძირითადად ცვლის Throttle- ს და ლიფტს მარცხნიდან მარჯვნივ და პირიქით. მას შემდეგ, რაც მე არ მინდოდა ჩემი ერთ -ერთი მოდელის ჩავარდნა ჩემს ტვინში მარცხენა/მარჯვენა დაბნეულობის გამო, მაინტერესებდა შესაძლებელია თუ არა ცოტა პრაქტიკა FSX– ში.

მე წავიკითხე და გამოვცადე JETI გადამცემები, რომლებიც რეალურად უჭერენ მხარს Joystick რეჟიმს ყუთში, თუმცა მე მინდოდა სრული მოქნილობა ღერძებისა და კონცენტრატორებისათვის და გამომეყენებინა TX როგორც რეალური მოდელისთვის. მიმღების გამომუშავების გამოყენებით, ასევე შესაძლებელია გამოიყენოთ სიგნალის დამუშავება DC-16– ში და გამოიყენოთ მიქსერები, ფრენის ფაზები, ორმაგი ტარიფები, რისი დაპროგრამებაც შეგიძლიათ იქ.

ცოტა ხნის წინ აღმოვაჩინე მშვენიერი გაკვეთილი, თუ როგორ უნდა გავაკეთო USB HID შეყვანის მოწყობილობა, კერძოდ ჯოისტიკი, იაფი არდუინოდან, როგორც Pro Micro:

www.instructables.com/id/Create-a-Joystick…

ეს საშუალებას მისცემს ყველაფერს, რაც საჭიროა თვითმფრინავის / შვეულმფრენის / FSX– ის გასაკონტროლებლად! უამრავი ღერძი და ღილაკია შესაძლებელი.

მას შემდეგ, რაც მე მქონდა სათადარიგო JETI RSAT2, მე გადავწყვიტე მისი Arduino- სთან დაკავშირება და ვცდილობდი განმეხორციელებინა პატარა PPM ანალიზატორი Joystick ბიბლიოთეკასთან ერთად.

მე ვთვლი, რომ ამ ნაბიჯების შემსრულებელმა იცის Arduino– ს დაკავშირება და პროგრამირება. მე არ ვიღებ გარანტიას გაუმართაობის ან დაზიანებისათვის!

მარაგები

თქვენ დაგჭირდებათ…

  • ნებისმიერი Arduino მხარდაჭერილი Joystick ბიბლიოთეკით, მე გამოვიყენე Sparkfun Pro Micro 5V / 16 MHz
  • Arduino IDE- ს უახლესი ვერსია
  • ნებისმიერი RC მიმღები, რომელიც გამოსცემს PPM სიგნალს, მაგალითად JETI RSAT2
  • რამდენიმე ჯუმბერის მავთული (მინ. 3)
  • Joystick ბიბლიოთეკა დაყენებულია Arduino IDE– ში
  • arduino-timer ბიბლიოთეკა:

ნაბიჯი 1: შეაერთეთ RX და Arduino

გაამყარეთ RX და არდუინო
გაამყარეთ RX და არდუინო
გაამყარეთ RX და არდუინო
გაამყარეთ RX და არდუინო

გაყვანილობა საკმაოდ მარტივია. მე გადავწყვიტე არდუინოს ჩართვა მხოლოდ USB– დან, რადგან ის ემსგავსება ჯოისტიკ მოწყობილობას. ეს უზრუნველყოფს Arduino– ს 5V– ით, რომელიც შეიძლება გამოყენებულ იქნას ასევე RC მიმღების კვებისათვის.

მე გამოვიყენე Pin VCC, რომელიც უზრუნველყოფს რეგულირებულ გამომუშავებას და უახლოესი Gnd pin - უბრალოდ შეაერთეთ იგი PPM– ის კონექტორთან + და - ქინძისთავებთან. როდესაც არდუინო იკვებება, მიმღებიც იკვებება.

PPM სიგნალისთვის, მე გადავწყვიტე გამოვიყენო შეფერხებები მათი გასაანალიზებლად. შეფერხებები შესაძლებელია მაგ. მე –3 პინზე, ასე რომ უბრალოდ დააკავშირეთ იქ - არდუინოზე არ არის „მშობლიური RC პინი“, მაგრამ შესაძლოა მიმღების სიგნალში წაკითხვის მეტი და განსხვავებული ხერხი.

მე უნდა გამორთო RX ძაბვის სიგნალიზაცია, ვინაიდან VCC ძაბვა USB მიწოდებით იქნება მხოლოდ 4.5 ვ - ის გარშემო - მაგრამ საკმაოდ სტაბილური, ასე რომ პრობლემა არ არის.

ნაბიჯი 2: ზოგიერთი PPM სიგნალის მიღება

ზოგიერთი PPM სიგნალის მიღება
ზოგიერთი PPM სიგნალის მიღება
ზოგიერთი PPM სიგნალის მიღება
ზოგიერთი PPM სიგნალის მიღება

როდესაც მიმღები და TX იკვებება, მე ვიღებდი PPM სიგნალებს, როგორც სურათზეა ნაჩვენები. 16 არხი, სამუდამოდ გამეორებული. თუ RSAT– ზე Failsafe გამორთულია და გადამცემი გამორთულია, PPM გამომავალი გამორთული იქნება.

დამატებითი ინფორმაცია PPM– ის შესახებ შეგიძლიათ იხილოთ აქ:

  • https://en.wikipedia.org/wiki/Pulse-position_modul…
  • https://wiki.rc-network.de/index.php/PPM

ვინაიდან მე არ ვფრინავ ნამდვილ ნივთებს ამ შემთხვევაში, მე არ მაინტერესებდა თეორიული დრო და უბრალოდ oscilloscope- ზე აღმოვაჩინე ის, რასაც ჩემი მიმღები მწვავედ ამუშავებდა ჯოხების სრულად მარცხნიდან მარჯვნივ გადაადგილებისას (სტანდარტული პარამეტრები TX- ში) რა როგორც ჩანს -100% შეესაბამება იმპულსებს სიგრძით 600µs, და +100% 1600μs- მდე. მე ასევე არ მაინტერესებდა პაუზის იმპულსების სიგრძე (400µs) ჩემს არდუინოს კოდში, მაგრამ ვივარაუდე, რომ ჩარჩოს ინტერვალი იყო მინიმუმ. 3000μs

ნაბიჯი 3: გადამცემის კონფიგურაცია

გადამცემის კონფიგურაცია
გადამცემის კონფიგურაცია
გადამცემის კონფიგურაცია
გადამცემის კონფიგურაცია
გადამცემის კონფიგურაცია
გადამცემის კონფიგურაცია

ვინაიდან საჭიროა კონტროლის ზედაპირების მხოლოდ რეალური პოზიციის ცოდნა, საკმარისია ერთი არხი / "servo" თითო RC ფუნქციაზე. შესაბამისად, შესაძლებელია საკმაოდ მარტივი გადამცემის დაყენება - ჩვეულებრივი RC მოდელის მსგავსი. ძირითადი ფუნქციები აილერონი, ლიფტი, საჭე და საჰაერო ხომალდი მოითხოვს თითოეულ მათგანს მხოლოდ ერთ გადამცემ არხს. მე ასევე დავამატე ფარფლები, მუხრუჭები და მექანიზმი, რის გამოც 9 არხი ჯერჯერობით თავისუფალი იყო. გთხოვთ გაითვალისწინოთ, რომ ფლაპები დაყენებულია ფრენის ფაზაზე და არ კონტროლდება პირდაპირ ჯოხის, სლაიდერის ან ღილაკის საშუალებით.

ნაბიჯი 4: ჯოისტიკის გაშვება

ჯოისტიკის მართვა
ჯოისტიკის მართვა
ჯოისტიკის მართვა
ჯოისტიკის მართვა

ჯოისტიკის ბიბლიოთეკა საკმაოდ მარტივია გამოსაყენებლად და გთავაზობთ რამდენიმე მაგალითს და ტესტს. პირველ რიგში უნდა შემოწმდეს არის თუ არა Arduino გამოვლენილი, როგორც ჯოისტიკი, შესვლის განყოფილებაში მითითებული ინსტრუქციები და ბიბლიოთეკა თავად იძლევა კარგ მითითებებს.

მოწყობილობებისა და პრინტერების მართვის პანელში, Arduino გამოჩნდა როგორც "Sparkfun Pro Micro", ხოლო ჯოისტიკის ტესტის ფანჯარაში ნაჩვენებია 7 ღერძი და უამრავი მხარდაჭერილი ღილაკი. ქუდის გადამრთველიც კი შეიძლება გამოყენებულ იქნას არდუინოში დაპროგრამებისას.

ნაბიჯი 5: Arduino– ს კოდირება

არდუინოს კოდირება
არდუინოს კოდირება
არდუინოს კოდირება
არდუინოს კოდირება

ის რაც ჯერ კიდევ აკლია არის PPM სიგნალის ფაქტობრივი გაანალიზება და ჯოისტიკის ღერძებისა და ღილაკების მინიჭება. მე გადავწყვიტე შემდეგი რუქების შექმნა:

არხი / ფუნქცია / ჯოისტიკის დავალება:

  1. Throttle -> Throttle ღერძი
  2. აილერონი -> X ღერძი
  3. ლიფტი -> Y ღერძი
  4. საჭე -> X ბრუნვის ღერძი
  5. ფარდები -> Y ბრუნვის ღერძი
  6. სამუხრუჭე -> Z ღერძი
  7. გადაცემათა კოლოფი -> ღილაკი 0

როდესაც გადაცემათა კოლოფი დაქვეითებულია, ჯოისტიკის პირველი ღილაკი უნდა იყოს დაჭერილი და გათავისუფლდება გადაცემის აწევისას. თუმცა, ამას დასჭირდება FSUIPC FSX– ისთვის, ყუთში, FSX მიიღებს მხოლოდ ღილაკს გადაცემათა კოლოფის გადასატანად, რაც არ არის ზუსტად ის, რაც ხდება ჩემს მოდელებთან.

მე მივაწოდე კოდის ჩემს ახლანდელ ვერსიას ბევრი კომენტარი, რომელიც საკმაოდ კარგად მუშაობს ჩემთვის - მოგერიდებათ შეცვალოთ თქვენი დავალება ან დაამატოთ ახალი ფუნქციები. ბოლო 9 RC არხი ამჟამად არ გამოიყენება.

დასაყენებლად, ჯოისტიკის კლასი უნდა იყოს ინიციალიზებული, ძირითადად რიცხვითი ღერძის დიაპაზონის განსაზღვრის გზით:

/ * ღერძების დიაპაზონის დადგენა (განსაზღვრულია სათაურში, 0 - 1000) */

Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …

0 -დან 1000 -მდე მნიშვნელობების გამოყენებით შესაძლებელია პულსის სიგრძის (600 - 1600μs) პირდაპირ ჯოისტიკის მნიშვნელობებზე ხელახლა შედგენა ხელახლა გადიდების გარეშე.

DIN 3 ინიციალიზებულია ციფრული შეყვანის სახით, ამოღების ჩართვა და შეწყვეტილი თანდართული:

pinMode (PPM_PIN, INPUT_PULLUP);

attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);

გამართვის მიზნით, მე დავამატე რამდენიმე ამობეჭდვა სერიული ინტერფეისის საშუალებით რეგულარულ ინტერვალში, arduino-timer ბიბლიოთეკის გამოყენებით:

თუ (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); true true;}); }

PIN– ის შეფერხება იქნება გამოძახებული, როდესაც PIN– ის ლოგიკური მნიშვნელობა შეიცვლება, ასე რომ PPM სიგნალის თითოეულ ზღვარზე. შეაფასეთ პულსის სიგრძე მიკროსქემის () გამოყენებით მარტივი დროით:

uint32_t curTime = მიკრო ();

uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);

მიმდინარე პინის მდგომარეობის შეფასებით და პულსის სიგრძესთან და წარსულ იმპულსებთან შერწყმით, ახალი იმპულსების კლასიფიკაცია შესაძლებელია. შემდეგი პირობითი გამოავლენს ინტერფეისის უფსკრული:

if (lastState == 0 && პულსი სიგრძე> 3000 && პულსი სიგრძე <6000)

შემდგომი იმპულსებისთვის, პულსის სიგრძე იქნება ასახული ღერძის მდგომარეობამდე, პულსის სიგრძის დაჭერით და მიკერძოებით ჯოისტიკების ღერძის დიაპაზონის შესატყვისად:

uint16_t rxLength = პულსიLength;

rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;

RxChannels მასივი საბოლოოდ შეიცავს 16 მნიშვნელობას 0 - 1000 – დან, რაც მიუთითებს ჯოხის / სლაიდერის და ღილაკის პოზიციებს.

16 არხის მიღების შემდეგ, ჯოისტიკზე გამოსახვა ხდება:

/ * ცულები */

Joystick.setThrottle (არხები [0]); Joystick.setXAxis (არხები [1]); Joystick.setYAxis (1000 - არხი [2]); Joystick.setRxAxis (არხები [3]); Joystick.setRyAxis (არხები [4]); Joystick.setZAxis (1000 - არხი [5]); / * ღილაკები */ Joystick.setButton (0, (არხები [6] <500? 1: 0)); / * მონაცემების განახლება USB */ Joystick.sendState ();

მე გადავაბრუნე რამდენიმე ღერძი კოდში, რაც აბსოლუტურად აუცილებელი არ არის, რადგან ღერძი ასევე შეიძლება გადაბრუნდეს სერვო მიმართულების გადატრიალებით ან FSX– ში მინიჭებით. თუმცა, მე გადავწყვიტე შევინარჩუნო servo მიმართულებები და ასევე ორიგინალური FSX დავალება.

ღილაკი ჩართულია ან გამორთულია ბარიერის არხით 7.

და არ უნდა დაგვავიწყდეს, რომ მონიშნოთ გრაფიკი … წინააღმდეგ შემთხვევაში, გამართვის ანაბეჭდები არ გამოჩნდება.

ბათილი მარყუჟი () {

scheduler.tick (); }

ეკრანის სურათზე, რომელიც მე დავამატე, ხედავთ, 1 არხი გადავიდა 1000 -დან (სრული გასროლით) 0 -ზე (მოჩვენებითი).

FSX აღმოაჩენს Arduino- ს, ისევე როგორც სხვა ჯოისტიკს, ასე რომ უბრალოდ მიანიჭეთ ღილაკი და ღერძი და გაერთეთ აფრენით!

რაც მე ნამდვილად მომწონს ამ მიდგომის არის, თქვენ შეგიძლიათ გამოიყენოთ თქვენი გადამცემი როგორც რეალური მოდელი, მაგ. ფრენის ფაზების გამოყენებით და ა.

გირჩევთ: