ร่าง PS2 Controller สำหรับ ESCs และ Stuff
วันพุธที่ 22 ตุลาคม 2014
ตัวควบคุมที่เหมาะสำหรับROVนี้คือคอนโทรลเลอร์ Playstation 2 ที่มีสายโชคดีที่พวกเขายังคงทำและมีห้องสมุดสำหรับ Arduino เพื่อพูดคุยกับพวกเขานอกจากนี้ยังสามารถซื้อซ็อกเก็ตสำหรับคอนโทรลเลอร์ของ PlayStation 2เพื่อเสียบเข้าโดยไม่ต้องทำการปรับเปลี่ยนคอนโทรลเลอร์
ร่างนี้เป็นการพัฒนาเพื่อทดสอบการใช้คอนโทรลเลอร์ Playstation 2 แบบมีสายเพื่อขับชุดเซอร์โวและไฟ LEDsServos เป็นแบบ stand-ins สำหรับ ESC ที่จะใช้ในความเป็นจริง LEDs ใช้ในการจำลองทริกเกอร์และสถานะของกล้องรวมทั้งทำเป็นไฟหลัก
บทความเกี่ยวกับการใช้ Playstation2 Controllers สำหรับโครงการ Arduino มีอยู่ในส่วน" การใช้ Playstation 2 Controller กับ Arduino Project " ของคุณ
ร่างได้รับการจัดตั้งขึ้นเพื่อง่ายต่อการแบ่งออกเป็นสองส่วน; หนึ่งสำหรับ Arduino ต้นแบบด้านบนและหนึ่งสำหรับ ROV Slave Arduino ที่มีชุดของตัวแปรที่ถูกส่งระหว่างสองเพื่อดำเนินการคำสั่งควบคุม
ในกรณีนี้ Arduino Uno ถูกนำมาใช้
การเข้ารหัสทำให้การใช้ห้องสมุด PS2X ที่พัฒนาโดย Bill Porterดูwww.billporter.infoสำหรับข้อมูลล่าสุดจาก Bill Porter และดาวน์โหลดไลบรารี ตัวอย่างร่างกับไลบรารีให้การสาธิตที่ดีเยี่ยมเกี่ยวกับรูปแบบต่างๆของการโต้ตอบกับตัวควบคุมและฟังก์ชันต่างๆที่ฉันไม่ทราบ
ความต้องการสำหรับโครงการนี้เกี่ยวกับการอ่านตัวควบคุม PS2 ค่อนข้างง่ายเมื่อเทียบกับวิธีการป้อนข้อมูลที่มีอยู่ ฉันได้ใช้;
*
*
*
*
.Button()
ฟังก์ชั่นที่ลงทะเบียนเมื่อมีการกดปุ่มค้างไว้ นี่เป็นประโยชน์สำหรับการควบคุมระดับเสียงของกล้อง *
.ButtonPressed()
ฟังก์ชั่นที่เพิ่งลงทะเบียนเมื่อกดปุ่ม แต่ไม่รู้จักเมื่อถือซึ่งจะเป็นประโยชน์สำหรับฟังก์ชั่นสลับเช่นการเปิด / ปิดการบันทึกกล้องไฟหลักเปิด / ปิดและปุ่มถ่ายรูป *
.Analog()
ฟังก์ชั่นที่ใช้สำหรับอ่านแท่งอะนาล็อก
ชื่อบิลพอร์เตอร์ได้มอบให้กับปุ่มและไม้ทุกแบบเป็นอย่างมากและตัวอย่างร่างด้วยไลบรารี PSX ของเขาใช้ประโยชน์ได้ทั้งหมด แผนผังด้านล่างระบุฉลากที่ใช้โดยไลบรารี PS2X
มีรูปแบบด้านบนด้วย "PSAB" แทน "PSB" สำหรับปุ่มบางปุ่มที่อนุญาตให้ผู้ใช้ป้อนข้อมูลจากปุ่มที่กดได้ยากตัวอย่างเช่น PSAB_BLUE วัดความดันที่ใช้กับปุ่ม X นี่เป็นเรื่องที่เจ๋ง แต่ไม่จำเป็นสำหรับความต้องการของโครงการนี้
การกำหนดพิน
เอาต์พุต 3.3V ไปที่ PS2 สีแดงขา
ออก 5V ถึง1kΩดึงตัวต้านทานสำหรับ PS2
ปักหมุด D10 ไปยัง PS2 สีเหลืองพิน
D11 ถึง PS2 ขาส้ม
D12 เป็นขา PS สีน้ำตาลขา
D13 ถึง PS2 ขาสีน้ำเงิน
ออก 5V ถึง1kΩดึงตัวต้านทานสำหรับ PS2
ปักหมุด D10 ไปยัง PS2 สีเหลืองพิน
D11 ถึง PS2 ขาส้ม
D12 เป็นขา PS สีน้ำตาลขา
D13 ถึง PS2 ขาสีน้ำเงิน
ตรึง D2 เป็น LED กล้องถ่ายรูป Trigger
Pin D3 ไปยัง LED Indicator ที่บันทึกจากกล้อง
D4 ไปยัง LED Lights หลัก
Pin D3 ไปยัง LED Indicator ที่บันทึกจากกล้อง
D4 ไปยัง LED Lights หลัก
ปักหมุด D5 ไป Servo ขึ้น
ขาซ้ายD6 ไป Servo ขึ้นขวา
Pin D7 ไปยัง Servo Horiz
Pin ซ้ายD8 ไปยัง Servo Horiz ขวา
Pin D9 ไปยัง Servo Cam Pitch
ขาซ้ายD6 ไป Servo ขึ้นขวา
Pin D7 ไปยัง Servo Horiz
Pin ซ้ายD8 ไปยัง Servo Horiz ขวา
Pin D9 ไปยัง Servo Cam Pitch
แหล่งจ่ายไฟ 5V ภายนอกจะให้สายไฟเซอร์โว
การควบคุม ROV
ตัวควบคุมสำหรับ ROV จะเป็น
Left Stick: แกน X = Roll, Y-axis = ขึ้น / ลง
Right Stick: แกน X = Yaw, Y-axis = ไปข้างหน้า / หลัง
ปุ่มทิศทางซ้าย = LED ไฟหลักเปิด / ปิด ปุ่มบังคับ
ทิศทางขึ้น = หมุนกล้องขึ้นไป
ทิศทางปุ่ม pad down = หมุนกล้องลงไป
Triangle = เริ่มต้น / หยุดการบันทึกวิดีโอ
Circle = ถ่ายภาพ
Left Stick: แกน X = Roll, Y-axis = ขึ้น / ลง
Right Stick: แกน X = Yaw, Y-axis = ไปข้างหน้า / หลัง
ปุ่มทิศทางซ้าย = LED ไฟหลักเปิด / ปิด ปุ่มบังคับ
ทิศทางขึ้น = หมุนกล้องขึ้นไป
ทิศทางปุ่ม pad down = หมุนกล้องลงไป
Triangle = เริ่มต้น / หยุดการบันทึกวิดีโอ
Circle = ถ่ายภาพ
วงจรไฟฟ้า
รหัส
คุณสามารถดาวน์โหลดภาพร่างด้านล่างได้ที่นี่: ROVPS2ControlTest1.ino
นอกจากนี้คุณยังสามารถดาวน์โหลดไลบรารี PS2X จากเว็บเพจต่อไปนี้:คอลเล็กชันของห้องสมุด Arduino ที่ใช้ในโครงการนี้
/ *
ROVPS2ControlTest1.ino
ร่างการพัฒนานี้พยายามที่จะจำลองการควบคุม PlayStation 2
ของ ESCs และเซอร์โวของ ROV LED ใช้สำหรับยืน
LED หลักฟังก์ชั่นการบันทึกภาพและการถ่ายภาพ
การกำหนด PIN คือ:
เอาท์พุท 3.3V ไปที่ PS2 สีแดง Pin
5V เอาท์พุทไป 1Kohm ดึงตัวต้านทานสำหรับ PS2
ปักหมุด D10 ไปยัง PS2 สีเหลืองพิน
D11 ถึง PS2 ขาส้ม
D12 เป็นขา PS สีน้ำตาลขา
D13 ถึง PS2 ขาสีน้ำเงิน
ตรึง D2 เป็น LED กล้องถ่ายรูป Trigger
Pin D3 ไปยัง LED Indicator ที่บันทึกจากกล้อง
D4 ไปยัง LED Lights หลัก
ปักหมุด D5 ไป Servo ขึ้น
ขา
ซ้ายD6 ไป Servo ขึ้นขวาPin D7 ไปยัง Servo Horiz
Pin
ซ้ายD8 ไปยัง Servo Horiz ขวาPin D9 ไปยัง Servo Cam Pitch
ปลั๊กไฟภายนอก 5V ให้แรงดันไฟฟ้า Servo Voltage Line
การเข้ารหัสดึงไลบรารี PS2X ที่พัฒนาโดย Bill Porter
ดู www.billporter.info สำหรับข้อมูลล่าสุดจาก Bill Porter และ
ดาวน์โหลดไลบรารี
ในขณะที่การอ่านค่าจากคอนโทรลเลอร์อาจจะตรงไป
ยังคำสั่ง servo ตัวแปรจะถูกใช้เพื่อเก็บค่าเพื่อ
ที่จะจำลองแพคเกจข้อมูลที่จะถูกส่งไปยัง
ROV arduino เหนือซีเรียลในที่สุด
ตัวควบคุมสำหรับ ROV จะเป็น
Left Stick - แกน X = ม้วนแกน Y = ขึ้น / ลง
Right Stick - แกน X = Yaw, Y- แกน = ไปข้างหน้า / หลัง
ปุ่มทิศทาง pad ซ้าย = LED ไฟหลักเปิด / ปิด ปุ่ม
ทิศทางทิศทางขึ้น = หันกล้องขึ้นไป
ปุ่มทิศทาง pad ลง = หมุนกล้องลงไป
Triangle = เริ่มต้น / หยุดการบันทึกวิดีโอ
Circle = ถ่ายภาพ
* /
#include <Servo.h> // สำหรับการขับรถ ESCs และ Servos
#include <PS2X_lib.h> // ห้องสมุด PS2X ของ Bill Porter
PS2X ps2x ; // คอนโทรลเลอร์ PS2 Class
Servo UpLServo ; // สร้างเซอร์โววัตถุขึ้นด้านซ้าย ESC
Servo UpRServo ; // สร้างเซอร์โววัตถุขึ้นขวา ESC
Servo HorizLServo ; // สร้างเซอร์โววัตถุแทน
Horiz ซ้าย ESC Servo HorizRServo ; // สร้างเซอร์โววัตถุที่แสดงถึง
Horiz Right ESC Servo CamServo ; // สร้างเซอร์โววัตถุแทน pitch ของกล้อง
const int grnLEDpin = 4 ; / / LED สีเขียวอยู่บนขาดิจิตอล 12
const int redLEDpin = 3 ; / / LED สีแดงอยู่บนขาดิจิตอล 13.
const int yelLEDpin = 2 ; / / LED สีเหลืองอยู่ที่ขา Digital 2
ระเหย Boolean CamRec ; / ฟังก์ชั่นบันทึกกล้องสลับ
ระเหย boolean LEDHdlts ; // ไฟสลับ LED เปิด / ปิด
int ForwardVal = 0 ; // ค่าอ่านออกทางด้านขวาของ PS2 ขึ้น / ลง
int YawLeftVal = 0 ; // ค่าอ่านออกด้านซ้ายขวา PS2 ซ้าย / ขวา
int UpVal = 0 ; // ราคาอ่านออกซ้ายติด PS2 ขึ้น / ลง
int RollLeftVal = 0 ; // ค่าอ่านออกด้านซ้ายของ PS2 ซ้าย / ขวา
int CamPitch = 90 ; // มุมเซอร์โวของกล้อง
int CamPhotoInd = 0 ; // ตัวนับสำหรับควบคุมตัวแสดงการทำงานของกล้อง
int upLraw = 0 ; / ตัวแปรที่จะนำข้อมูลดิบจริงสำหรับ ESCs
int upRraw = 0 ;
int HLraw = 0 ;
int HRraw = 0 ;
เป็นโมฆะ การตั้งค่า()
{
ps2x config_gamepad ( 13 , 11 , 10 , 12 , เท็จ, เท็จ); // ตั้งค่าหมุดและการตั้งค่า: GamePad (นาฬิกา, คำสั่ง, ความสนใจ, ข้อมูล, ความกดดัน, Rumble?) // เราปิดการใช้งานความไวต่อแรงกดและเสียงดังกึกก้องในอินสแตนซ์นี้และ// เรารู้จักชนิดคอนโทรลเลอร์ดังนั้นเราจึงไม่ใส่ใจ ข้อผิดพลาดในการตรวจสอบpinMode ( grnLEDpin , OUTPUT ); // ชุด grnLEDpin เพื่อการส่งออกpinMode ( redLEDpin , OUTPUT ); // ชุด redLEDpin เพื่อการส่งออกpinMode ( yelLEDpin , OUTPUT ); // ตั้งค่า yelLEDpin เพื่อส่งออก CamRec = false ; // ตั้งค่าเริ่มต้นของกล้องจะไม่บันทึกUpLServo แนบ( 5 ); // แนบขึ้นซ้าย Servo ในการปัก 5 UpRServo แนบ( 6 ); // แนบ Up Right Servo ในการปัก 6 HorizLServo แนบ( 7 ); // แนบแนวนอนซ้าย Servo ในการปัก 7 HorizRServo แนบ( 8 ); // แนบแนวนอนขวา Servo ในการปัก 8 CamServo แนบ( 9 ); // ติดตั้ง Servo Pitch Servo เพื่อปักหมุด 9
}
เป็นโมฆะ ห่วง()
{
ps2x read_gamepad (); // ต้องเรียกอย่างน้อยหนึ่งครั้ง/ วินาทีเพื่อรับข้อมูลจากตัวควบคุม if ( ps2x . Button ( PSB_PAD_UP )) // กดและค้างไว้{ CamPitch = CamPitch + 1 ; // เพิ่มระดับเสียงของกล้อง}
if ( ps2x . ButtonPressed ( PSB_PAD_LEFT )) // กด
{
LEDHdlts = ! LEDHdlts ; // สลับธงแสง LED
}
ถ้า( ps2x . ปุ่ม( PSB_PAD_DOWN )) // ค้างไว้
{
CamPitch = CamPitch - 1 ; // เพิ่มระดับเสียงของกล้อง
}
ถ้า( ps2x . ButtonPressed ( PSB_GREEN )) // สามเหลี่ยมกด
{
CamRec = ! CamRec ; // สลับสถานะการบันทึกกล้อง
}
if ( ps2x . ButtonPressed ( PSB_RED )) // Circle pressed
{
CamPhotoInd = 70 ; // ตั้งค่าเพื่อแสดงภาพที่ถ่ายไว้ประมาณ 1 วินาที
}
// การอ่านแบบอนาล็อกสติ๊ก
ForwardVal = ps2x อนาล็อก( PSS_RY ); YawLeftVal = ps2x อนาล็อก( PSS_RX ); UpVal = ps2x อนาล็อก( PSS_LY ); RollLeftVal = ps2x อนาล็อก( PSS_LX );
// แปลค่าการอ่าน Stick สำหรับคำแนะนำเซอร์โว
// โดยทั่วไปแล้วจะเกิดขึ้นใน ROV ตาม
// อ่าน Stick ที่ส่งมาจาก Arduino topside
// เหนืออนุกรม
// การอ่านจาก PS2 Controller Sticks มีค่าตั้งแต่ 0 ถึง 255
// ด้วยค่าเป็นศูนย์เป็น 128 ตำแหน่งศูนย์อยู่ที่
// ซ้ายสำหรับการเคลื่อนไหวของแกน X และขึ้นสำหรับการเคลื่อนไหวของแกน Y
/ ตัวแปรที่จะนำข้อมูลดิบจริงสำหรับ ESCs
upLraw = ( 128 - UpVal ) + ( 128 - RollLeftVal ) / 2 ; // ค่านี้จะขึ้นอยู่กับค่า 192
upRraw = ( 128 - UpVal ) - ( 128 - RollLeftVal ) / 2 ; // นี่จะมีค่าเท่ากับ 192
HLraw = ( 128 - ForwardVal ) + ( 128 - YawLeftVal ); // นี่จะเป็นค่า 256
HRraw = ( 128 - ForwardVal ) - ( 128 - YawLeftVal ); // ค่านี้จะขึ้นอยู่กับ 256
// ปรับขนาดค่าให้เหมาะสมกับ ESCs และ Servo
upLraw = map ( upLraw , - 193 , 193 , 0 , 179 );
upRraw = แผนที่( upRraw , - 193 , 198 , 0 , 179 );
HLraw = แผนที่( HLraw , - 256 , 256 , 0 , 179 );
HRraw = แผนที่( HRraw , - 256 , 256 , 0 , 179 );
// เขียนให้ Servos หรือ ESCs
UpLServo เขียน( upLraw );
UpRServo เขียน( upRraw ); HorizLServo เขียน( HLraw ); HorizRServo เขียน( HRraw );
// สัญญาณว่ารูปภาพถูกถ่าย
ถ้า( CamPhotoInd > = 1 )
{
CamPhotoInd = CamPhotoInd - 1 ; // นับถอยหลังสำหรับ CamVidicator
DigitalWrite ( grnLEDpin , HIGH ); / / ไฟ LED สีเขียวเพื่อระบุ phototriggered
}
ถ้า( CamPhotoInd <= 0 )
{
digitalWrite ( grnLEDpin , LOW ); // ตัวบ่งชี้กิจกรรมภาพถ่ายผ่าน
}
CamPitch = จำกัด( CamPitch , 30 , 149 ); // ให้ CamPitch ภายใน 30-149 เขตแดน
CamServo เขียน( CamPitch ); / / ย้าย servo digitalWrite ของกล้อง ( redLEDpin , CamRec ); / / แสง redLED ขึ้นอยู่กับการบันทึกสถานะกล้องสถานะdigitalWrite ( yelLEDpin , LEDHdlts ); / / ไฟ LED ขึ้นอยู่กับไฟหน้าสถานะล่าช้าธง( 15 ); }
ไม่มีความคิดเห็น:
แสดงความคิดเห็น