步驟1:拆開汽車
您需要卸下汽車外殼以露出電線,以便您可以輕松地使用電動機并插入arduino。幾乎有一堆螺絲和東西,所以只要將它們卸下,就可以開始使用。
步驟2:找出控制器
您需要使用usb電纜將ps3控制器連接到計算機,以找出輸入等。我為此使用了程序USB視圖。您可以從以下鏈接下載:http://www.ftdichip.com/Resources/Utilities/usbview.zip
然后打開程序并選擇ps3控制器
結果應如下所示:
設備描述符:
bcdUSB:0x0200
bDeviceClass:0x00
bDeviceSubClass:0x00
bDeviceProtocol:0x00
bMaxPacketSize0:0x40(64)
idVendor:0x054C(Sony Corporation)
idProduct:0x0268
bcdDevice:0x0100
iManufacturer:0x01
iProduct:0x02
iSerialNumber:0x00
bNumConfigurations:0x01
ConnectionStatus:DeviceConnected
當前配置值:0x01
設備總線速度:完整
設備地址:0x01
打開管道:2
端點描述符:
bEndpointAddress:0x02
傳輸類型:中斷
wMaxPacketSize:0x0040(64)
bInterval:0x01
端點描述符:
bEndpointAddress:0x81
傳輸類型:Interrupt PackageSize:0x0040(64) BInterval:0x01
重要的一點是控制器在輸出時提供輸出(0x02),并在(0x81)上接收輸入
步驟3:使用USB庫
幸運的是,我不是第一個將ps3控制器連接到arduino的人,因此可以使用非常有用的庫。您應該在這里獲取它:https://github.com/ribbotson/USB-Host/tree/master/ps3/PS3USB
現在,您應該下載此文件以了解有關控制器的更多信息:https://github.com/ribbotson/USB-Host/blob/master/examples/USB_desc.pde
使用此代碼,我們可以找到有關arduino的各種內容。
請參閱:開始
freeMemory()報告683 《設備》描述符:
描述符長度:12
描述符類型:01 USB版本:0200
設備類別: 00
設備子類:00 《設備》協議:00 《最大》數據包大小:40 《供應商ID:054C 《產品》產品ID:0268 《版本》修訂ID:0100
制造商。字符串索引:01
產品字符串索引:02
序列號索引:00
配置數:01
配置描述符:
總長度:0029
Num.intf: 01
Conf。值:01 字符串:00
屬性:80 最大功率:FA
接口描述符:
Intf.number:00
Alt 。:00
端點:02
Intf。類別:03
Intf。子類:00
Intf。協議:00
Intf.string:00
未知描述符:
長度:09
類型:21
內容:110100012294000705
端點描述符:
端點地址:02
屬性:03
最大包大小:0040
輪詢間隔:01
端點描述符:
端點地址:81
屬性:03 《最大》包大小:0040
輪詢間隔:01 現在我們需要使庫和控制器同步。為此,我們使用以下代碼:
typedef struct {
byte epAddr;//如果設置了
byte Attr,則從端點描述符復制而沒有位7。//端點傳輸類型。
unsigned int MaxPktSize;//最大數據包大小。
字節間隔;//輪詢間隔(以幀為單位)。
byte sndToggle;//最后一個觸發值,HCTL觸發位的位掩碼
byte rcvToggle;//最后一個觸發值,HCTL觸發位的位掩碼
} EP_RECORD;
還有:
device_descriptor =(USB_DEVICE_DESCRIPTOR *)&buf;
if(
(device_descriptor-》 idVendor!= PS3_VID)||(device_descriptor-》 idProduct!= PS3_PID)){
Serial.println(“不支持的USB設備”);
while(1);//stop
第4步:現在,我們將控制器設置為提供輸入!
我們希望控制器能夠隨時向以下位置提供輸入: arduino,因此我們使用以下代碼:
#define PS3_F4_REPORT_LEN 4
#define HID_REPORT_FEATURE 3
#define PS3_F4_REPORT_ID 0xF4 prog_char feature_F4_report [] PROGMEM = {0x42,0x0c, ;
/*設置PS3控制器為(i = 0; i ;
rcode = Usb.setReport (PS3_ADDR,ep_record [CONTROL_PIPE] .epAddr,PS3_F4_REPORT_LEN,PS3_IF,HID_REPORT_FEATURE,PS3_F4_REPORT_ID,buf);
if(rcode){
Serial.print(“設置報告錯誤:”);
Serial.println (rcode,HEX);
while(1);//stop
}
如果您想做一些額外的工作以保持冷靜,還可以將ps3控制器上的LED 1設為打開。因為當您將控制器連接到ps3時,LED會亮起,所以看起來更親,但除了美觀以外,這沒什么用。 (注意:您還可以使控制器與arduino配合使用,非常酷!)。這是LED的代碼:
#define PS3_01_REPORT_LEN 48
#define HID_REPORT_OUTPUT 2
#define PS3_01_REPORT_ID 0x01
prog_char output_01_report [] PROGMEM = {0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00,
0x00、0x02、0xff,0x27、0x10、0x00、0x32、0xff,
0x27、0x10、0x00, 0x32、0xff,0x27、0x10、0x00,
0x32、0xff,0x27、0x10、0x00、0x32、0x00、0x00,
0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00,
》 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00
};
/*為(i = 0; i buf [i] = pgm_read_byte_near(output_01_report + i);
rcode = Usb.setReport(PS3_ADDR,ep_record [CONTROL_PIPE] .epAddr,PS3_01_REPORT_LEN,PS3_IF,HID_REPORT_OUTPUT,PS3_01_REPORT_ID,《) br》 Serial.print(“設置報告錯誤:”);
Serial.println(rcode,HEX);
while(1);//stop
}
更重要的是,arduino需要處理來自控制器的信號。使用以下代碼:
void PS3_poll(void)
{
byte rcode = 0;//返回代碼
/*輪詢PS3 */
rcode = Usb.inTransfer(PS3_ADDR,ep_record [INPUT_PIPE] .epAddr,PS3_01_REPORT_LEN,buf);
if(rcode!= 0){
return;
}
process_report();
return;
}
第5步:大結局:將Arduino連接到汽車上
因此,每輛車都不一樣。在我的項目中,我有一輛非常簡單的汽車,只有四個控制選項(向前,向后,向左,向右),并且每個都只允許一個值,即只有一個允許的加速度。因此,相應地創建代碼。我只使用了控制器上的方向按鈕,因為我認為這是最簡單的。也可以使用加速度計進行轉向,使用操縱桿進行前進等。基本上,您可以選擇所需的任何控制配置。我將在短期內說明如何操作。
但是,現在,我們需要將arduino連接到汽車上。我的車有兩個馬達。向前后退一圈,向前轉一圈。您需要確定這些電機的工作方式。如果它們像我的,則將連接兩根電線,您將需要去除這些電線并將其從arduino的輸出端焊接到它們上。如果您的汽車與眾不同,那么希望它不會太難找出答案。
現在我們已經將arduino連接到汽車上,我們需要編寫代碼來告訴汽車要做什么。正如我上面提到的,這取決于您的喜好和個人汽車。因此,現在我將介紹一堆無論情況如何都將有用的代碼。首先,我們希望方法讀取按鈕輸入。我們可以使用以下內容:
#define buSelect 0
#define buLAlog 1
#define buRAnalog 2
#define buStart 3
#define buUp 4
#define buRight 5
#define buDown 6
#define buLeft 7
#define buL2 8
#define buR2 9
#define buL1 10
#define buR1 11
#define buTriangle 12
#define buCircle 13
#define buCross 14
#define buSquare 15
#define buPS 16
如果按下指定的按鈕,則它們返回true。因此,對于我來說,我使用了buUp,buDown等。
如果您想成為發燒友,并且可能具有一系列輸入值,那么您可以使用多個加速力,則可以使用加速度計。這些是他們的方法:
#define加速度計X 0
#define加速度計Y 1
#define加速度計Z 2
#define陀螺儀Z 3
這些值從0到1023,其中512為中性
無論如何,一旦執行了此操作,您只需要告訴arduino以所需的輸出量輸出輸出,汽車就會行駛!
-
控制器
+關注
關注
114文章
17076瀏覽量
183947
發布評論請先 登錄
兩輪自平衡電動車及其電機控制器設計
具有同步續流的電動車用直流電機控制器設計



無線遙控車的電機抖動

電動車控制器欠壓保護怎樣調整
電動車控制器電壓過高怎么解決
電動車用萬能控制器不用霍爾可以嗎


評論