Tải bản đầy đủ (.pdf) (28 trang)

Luận văn cơ điện tử Thiết kế và thi công giường đa chức năng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (904.55 KB, 28 trang )




KHOA   



 CÁO


:









Ths. 
 Nam






Biên Hòa, tháng 12 nă m 2013

LỜI CẢM ƠN


Trong suốt khóa học (2009 – 2013) tại Trường Đại Học Lạc Hồng, với
sự giúp đỡ của quý thầy cô và giáo viên hướng dẫn về mọi mặt từ nhiều phía
và nhất là trong thời gian thực hiện đề tài, nên đề tài đã hoàn thành đúng thời
gian quy định. Em xin chân thành cảm tạ đến :
Ban giám hiệu, phòng Đào tạo, ban chủ nhiệm khoa Cơ Điện Trường
Đại học Lạc Hồng đã tạo điều kiện thuận lợi cho chúng em thực hiện tốt đề tài
nghiên cứu khoa học này.
Bộ môn Điện công nghiệp cùng tất cả quý thầy cô trong khoa Cơ Điện
đã giảng dạy những kiến thức chuyên môn làm cơ sở để thực hiện tốt luận văn
tốt nghiệp và đã tạo điều kiện thuận lợi cho em hoàn thành khóa học.
Đặc biệt em xin cảm ơn đến thầy Th.s Lê Phương Trường, giáo viên
hướng dẫn đề tài đã nhiệt tình giúp đỡ và cho em những lời chỉ dạy quý báu,
giúp em định hướng tốt trong khi thực hiện luận văn.
Tất cả bạn bè đã giúp đỡ và động viên trong suốt quá trình làm luận
văn tốt nghiệp.





MỤC LỤC
Chương 1: GIỚI THIỆU 1
1.1 Đặt vấn đề 1
1.2 Lịch sử nghiên cứu . 2
1.3 Mục tiêu chọn đề tài. 4
1.4 Nội dung nghiên cứu . 4
1.5 Giới hạn đề tài . 4
1.6 Ý nghĩa thực tiễn . 5
Chương 2: Cơ Sở Lý Thuyết 6
2.1 Động cơ điện một chiều 6

2.2 Tính toán lựa chọn động cơ điện 9
2.3 Các loại nút nhấn 12
2.4 Đèn báo 13
2.5 Công tắc hành trình 14
2.6 Ắc quy 14
2.7 Hệ truyền động 17
2.8 Vitme 18
2.9Vi xử lý AVR 19
Chương 3: Thiết Kế Và Thi Công 22
3.1 Thiết kế cơ khí 22
3.1.1 Khung giường 22
3.1.2 Vật liệu làm khung 23
3.2 Thiết kế khung 23
3.2.1 Phần lưng tựa 24
3.2.2 Phần chỗ ngồi 24
3.2.3 Phần để chân. 25
3.2.4 Thi công hoàn thiện 25
3.3 Thiết kế cơ khí nâng hạ 26
3.4 Tính toán lựa chọn công suất động cơ 27
3.4.1 Tính toán lựa chọn công suất 2 động cơ chính 27


3.4.2 Tính toán lựa chọn 2 động cơ nâng phần để tay 29
3.4.2 Tính toán lựa chọn 2 động cơ nâng phần chống phía trước 29
3.5 Tính toán lựa chọn dung lượng ắc quy 30
3.6 Sơ đồ khối hệ thống điều khiển 30
3.7 Phần điện. 32
3.7.1Bộ điều khiển trung tâm 32
3.7.2 Bộ điều khiển đảo chiều 32
3.8 Các chức năng của giường. 33

3.8.1 Chức năng chuông gọi người 33
3.8.2 Chức năng massage 33
3.8.2 Chức năng Radio thư giãn 33
Chương 4: Kết Luận Và Hướng Phát Triển Của Đề Tài 35
4.1 Kết luận 35
4.2 Tính mới 35
4.3 Tính sáng tạo 35
4.4 Khả năng áp dụng 35
4.5 Tính hiệu quả 35
4.6 Mức độ triển khai 35
4.7 Hướng phát triển của đề tài 35
TÀI LIỆU THAM KHẢO 36




DANH MỤC HÌNH ẢNH
Hình 1.1 Khảo sát trong bệnh viện 1
Hình 1.2 Ông Phương (bên trái ) với chiếc giường đa năng của mình. 2
Hình 1.3 Giường bệnh DCN-09 3
Hình 1.4 Ông Hà Trọng Dũng và sản phẩm ghế giường đa năng 3
Hình 2.1 Động cơ DC 6
Hình 2.2 Cấu tạo cơ bản động cơ DC 6
Hình 2.3 Nắp động cơ 7
Hình 2.4 Bạc đạn 7
Hình 2.5 Cực từ 8
Hình 2.6 Phần ứng 8
Hình 2.7 Chổi than và vành góp 9
Hình 2.8 Các loại nút nhấn 13
Hình 2.9 Các loại đèn báo 13

Hình 2.10 Công tắc hành trình 14
Hình 2.11 Cấu tạo bình ắc quy 15
Hình 2.12 Bánh răng 18
Hình 2.13 Vitme 18
Hình 2.14 Vi điều khiển AVR 19
Hình 2.15 Sơ đồ chân Atmega64 20
Hình 3.1 Chiếc giường 22
Hình 3.2 Chiếc xe lăn 22
Hình 3.3 Nguyên liệu inox 22
Hình 3.4 Lưng tựa 24
Hình 3.5 Chỗ ngồi 24
Hình 3.6 Chỗ để chân 25
Hình 3.7 Khung xe lăn 25
Hình 3.8 Khung chiếc giường 25


Hình 3.9 Động cơ vitme 27
Hình 3.10 Cánh tay đòn 27
Hình 3.11 Đo lực phần để tay 22
Hình 3.12 Đo lực phần chống phía trước 22
Hình 3.13 Sơ đồ khối điều khiển hệ thống 22
Hình 3.14 Tay game điều khiển 31
Hình 3.15 Bo chủ AVR 32
Hình 3.16 Sơ đồ nguyên lý 22
Hình 3.17 Bo đảo chiều 32
Hình 3.18 Chuông báo động 33
Hình 3.19 Nệm massage 33
Hình 3.20 Radio thư giãn 34
Hình 3.21 Sản phẩm khi hoàn thiện 34





DANH MỤC BẢNG

Bảng 2.1 Trị số hiệu suất của các loại bộ truyền và ổ 10
Bảng 2.2 Tỉ số truyền nên dùng cho các bộ truyền trong hệ 11
Bảng 2.3 Tham khảo công suất một số thiết bị thông dụng trong gia đình và
văn phòng. 17
10

Bảng 2.1 Trị số hiệu suất của các loại bộ truyền và ổ

Tên gọi
Hiệu suất ɳ của bộ truyền hoặc ổ
Được che kín
Để hở
Bộ truyền báng răng trụ
Bộ truyền bánh răng côn
Bộ truyền trục vít
Tự hãm
Không tự hãm với z
1
= 1
z
1
= 2
z
1
= 4

Bộ truyền xích
Bộ truyền bánh ma sát
Bộ truyền đai
Một cặp ổ lăn
Một cặp ổ trượt
0,96 – 0,98
0,95 – 0,97

0,30 – 0,40
0,70 – 0,75
0,75 – 0,82
0,87 – 0,92
0,95 – 0,97
0,90 – 0,96

0,99 - 0,995
0,98 – 0,99

0,93 – 0,95
0,92 – 0,94

0,2 – 0,3



0,90 – 0,93
0,70 – 0,88
0,95 – 0,96
Chú thích: Trị số hiệu suất của các bộ truyền báng răng cho trong bảng ứng với
cấp chính xác 8 và 9 . Khi dùng bộ truyền kín với cấp chính xác 6 hoặc 7 thì tăng

trị số trong bảng lên 1 – 1.5%

Như vậy muốn xác định công suất động cơ cần biết công suất tính toán Pt. Trị
số của Pt và do đó công suất của động cơ được xác định tùy thuộc vào chế độ làm
việc của động cơ và tính chất tải trọng.
Đối với động cơ làm việc lâu dài, chẳng hạn động cơ kéo máy bơm, quạt
gió, máy cắt kim loại, hệ thống dẫn đọng băng tải, . . . tải trọng tác dụng có thể là
tải trọng không đổi hoặc thay đổi.
Trường hợp tải không đổi : Công suất tính toán là công suất làm việc trên trục
công tác
P
t
= P
lv
(2.3)
26

3.3Thiết kế cơ khí nâng hạ
Với thiết kế như trên thì phần nâng hạ cũng rất quan trọng, nâng hạ phải đảm
bảo có người ngồi lên và nâng một cách nhẹ nhàng để đảm bảo sức khỏe cho người
bệnh.
Có rất nhiều phương pháp nâng hạ bằng khí nén, nâng hạ bằng sức người,
nâng hạ bằng động cơ vitme…Mỗi phương pháp đều có các ưu và nhược điểm
khác nhau và sau đây là các ưu nhược điểm của các phương pháp.
 Nâng hạ bằng khí nén.
Ưu điềm: Dễ dàng điều chỉnh tốc độ.
Nhược điểm: Khó di chuyển và phải nạp khí thường xuyên.
 Nâng hạ bằng sức người.
Ưu điềm: Dễ dàng thiết kế và thi công sản phẩm, ít tốn kém khi thiết kế.
Nhược điêm: Cần có sự giúp đỡ của người thân khi vận động.

 Nâng hạ bằng động cơ làm quay trục vitme.
Ưu điềm: Người bệnh dễ dàng vận động mà không cần đến sự giúp đỡ của
người thân, dễ dàng di chuyển giường bệnh.
Nhược điểm: Cần phải tính toán kĩ càng và tìm ra những giải pháp tối ưu khi
thiết kế.
Từ phân tích những ưu nhược điểm của các phương pháp trên nhóm nghiên
cứu đã chọn phương pháp nâng hạ bằng động cơ vitme thông qua lực nâng cánh
tay đòn vì dùng động cơ vitme có thể dễ dàng thiết kế, giảm bớt đi cầu kì của cơ
khí. Dùng động cơ vitme khi nâng hạ sẽ rất êm ái, sẽ không gây cảm giác khó chịu
cho người bệnh.

28

Áp dụng công thức (2.1), (2.2), (2.4) tính công suất động cơ
P
ct
=


=


= 34 W
Ta nhân thêm hệ số an toàn cho động cơ
P = P
ct
* 1.5 = 51 W
Với kết quả tính toán được thì ta dựa vào datasheet chọn động cơ có model
Z5D60-24 60W.
Công suất động cơ nâng phần để chân

Tính lực tác dụng lên phần để chân của giường với khối lượng đặt lên là
30kg.
Ta có: F=m*g=30*9,8= 294N
Moment cản.
M
cản
= F*Cánh tay đòn = 294* 0,3 =88.2 Nm (2.11)
Áp dụng công thức (2.5) tính tỷ số truyền bánh răng với w
2
là 34, w
1
là 17.
w
2
là số răng của một bánh răng thứ 2, w
1
là số răng của một bánh răng thứ 1.
u=


=


=


=


= 2

Tốc độ quay của động cơ
n
đc
= n
ct
*u = 30*2= 60 v/p
n công tác
n
ct
= số vòng quay vitme = 30 v/p
Áp dụng công thức (2.9) tính vận tốc quay của vitme.
V =


=


= 0.0628 m/p
Áp dụng công thức (2.2) tính hiệu suất truyền động của hệ thống
η = η
k*
η
3
ol*
η
br
= 0,99*0,99
3
*0,97
2

= 0,9
Áp dụng công thức (2.1), (2.2), (2.4) tính công suất động cơ
P
ct
=


=


= 20 W
Ta nhân thêm hệ số an toàn cho động cơ
P = P
ct
* 1.5 = 30 W
Với kết quả tính toán được thì ta dựa vào datasheet chọn động cơ có model
Z5D40-24 40W.
29

3.4.2 Tính toán lựa chọn 2 động cơ nâng phần để tay
Tính lực nâng của phần để tay
Hiện nay, có rất nhiều phương pháp để tính lực như là dùng công thức tính toán và
phương pháp thực nghiệm để tính lực. Trong đề tài nghiên cứu này nhóm nghiên
cứu đã sử dụng phương pháp thực nghiệm là dùng lực kế để đo.
.
Dùng lực kế nhóm nghiên cứu đo được lực để
nâng được phần để tay lên F = 8 N hình 3.11
Tính momen cản
M
cản

= F*Cánh tay đòn = 8 * 0.3 = 2.4 Nm
Với kết quả tính toán được thì ta dựa vào
datasheet chọn 2 động cơ có model KM3448A
24VDC 17W. Momen xoắn cực đại 2.5Nm.
Hình 3.11 Đo lực nâng phần để tay
3.4.3 Tính toán lựa chọn 2 động cơ nâng chống phía trước
Tính lực nâng của 2 cây chống

Dùng lực kế nhóm nghiên cứu đo được một lực
để nâng được phần để tay lên F = 4 N hình 3.12
Tính momen cản
M
cản
= F*Cánh tay đòn = 4 * 0.3 = 1.2 Nm
Với kết quả tính toán được thì ta dựa vào
datasheet chọn 2 động cơ có model KM3448A
24VDC 17W. Momen xoắn cực đại 2.5Nm.

Hình 3.12 Đo lực nâng phần chống phía trước



31

3.6 Sơ đồ khối điều khiển hệ thống








Hình 3.13 Sơ đồ khối điều khiển Hình 3.14 Tay game điều khiển
Hệ thống đang ở trạng thái chiếc giường. Khi nhấn nút N1 tín hiệu được đưa
vào bộ điều khiển AVR, bộ điều khiển AVR xử lý tín hiệu và đưa tín hiệu vào
động cơ 1 làm động cơ 1 quay thông qua truyền động bánh răng làm quay vitme và
nâng phần lưng lên. Khi động cơ quay đến cuối hành trình sẽ chạm vào công tắc
hành trình ngay lúc đó công tắc hành trình phản hồi một tín hiệu về bo điều khiển
AVR. AVR xuất tín hiệu làm dừng động cơ 1. Khi nhấn nút N2 tín hiệu được đưa
vào bộ điều khiển AVR, bộ điều khiển AVR xử lý tín hiệu và đưa tín hiệu vào
động cơ 2 làm động cơ 2 quay thông qua truyền động bánh răng làm quay vitme và
kéo phần để chân xuống. Khi động cơ quay đến cuối hành trình sẽ chạm vào công
tắc hành trình ngay lúc đó công tắc hành trình phản hồi một tín hiệu về bo điều
khiển AVR. AVR xuất tín hiệu làm dừng động cơ 2. Khi nhấn nút N3, tín hiệu
được đưa vào bộ điều khiển AVR bộ điều khiển AVR xử lý tín hiệu và đưa tín hiệu
vào động cơ 3 và 4 làm động cơ 3 và 4 quay nâng hai bên chỗ gác tay. Khi nhấn
nút N4 tín hiệu được đưa vào bộ điều khiển AVR bộ điều khiển AVR xử lý tín hiệu
và đưa tín hiệu vào động cơ 5 và 6 làm động cơ 5 và 6 quay kéo hai thanh chống
phía trước phần để chân giúp cho phần để chân thêm chăc chắn. Khi đó hệ thống
đã chuyển từ chiếc giường thành chiếc xe lăn.
Khi hệ thống đang ở trạng thái chiếc xe lăn. Ta nhấn nút N1 lần thứ hai tín
hiệu được đưa vào bộ điều khiển. Bộ điều khiển xuất tín hiệu ra bo đảo chiều làm
làm động cơ 1 quay ngược lại kéo phần tựa xuống. Khi động cơ quay hết hành
trình chạm vào công tắc hành trình, công tắc hành trình xuất tín hiệu về bo điều
34

3.8.3 Radio thư giãn
Trong quá trình dưỡng bệnh, việc thư giãn giúp người bệnh có thể nhanh
chóng lành bệnh. Chính vì lẽ đó nhóm nghiên cứu đã thiết kế thêm radio để người
bệnh có thể thư giãn những lúc không có ai bên cạnh.








Hình 3.20 Radio thư giãn














Hình 3.21 Sản phẩm khi hoàn thiện


Nệm massage
36

TÀI LIỆU THAM KHẢO
[1] Trịnh Chất, Lê Văn Uyển - Tính toán thiết kế hệ dẫn động cơ khí

[2]Th.s Nguyễn Việt Anh – Các cơ cấu truyền động. Khoa cơ khí, Đại học
Thủy Lợi.
[3]Lê Văn Uyển, Vũ Lê Huy – Phương pháp tính toán thiết kế và lựa chọn
truyền động vitme-bi. Tuyển tập công trình Hội nghị Cơ học toàn quốc lần thứ
VIII Hà Nội (12/2007)
[4] Đặng Ngọc Nhân – Nghiên cứu và chế tạo xe tự hành vận chuyển hàng
hóa: Báo cáo nghiên cứu khoa học sinh viên.
[5]
[6]
[7] />nang 2749773.html
[8] />88.swf
[9]
[10] />33.htm












37


PHỤ LỤC
CODE CÁC THUẬT TOÁN AVR

Chương trình điều khiển động cơ.
#include <mega64.h>
#include "gamepad.h"
#include <stdio.h>

void dung (void)
{
PORTD=255;
PORTF=255 ;
}
void nang_truoc (void)
{
while (PINB.0==1)
{
PORTD.0=0;
gp_update_btn();
if(R1==0){break;}
}
PORTD=255;

}
void ha_truoc (void)
{
38

while (PINB.1==1)
{
PORTD=0b11111100;
gp_update_btn();
if(R1==0){break;}

}
PORTD=255;


}
void nang_sau (void)
{
while (PINB.2==1)
{
PORTD=0b11111011;
gp_update_btn();
if(R1==0){break;}
}
PORTD=255;

}
void ha_sau (void)
{
while (PINB.3==1)
{
PORTD=0b11110011;
gp_update_btn();
39

if(R1==0){break;}
}
PORTD=255;

}
void nang_tay (void)

{
while (PINB.4==1)
{
PORTD=0b10101111;
gp_update_btn();
if(R1==0){break;}
}
PORTD=255;

}
void ha_tay (void)
{
while (PINE.7==1)
{
PORTD=0b00001111;
gp_update_btn();
if(R1==0){break;}
}
PORTD=255;

}
40

void nang_chong (void)
{
while (PINC.2==1)
{
OCR3BL=100;
OCR3AL=100;
gp_update_btn();

if(R1==0){break;}
}
PORTF=255;
OCR3BL=0;
OCR3AL=0;
}
void ha_chong (void)
{
while (PINC.3==1)
{
PORTF=0b11110101;
OCR3BL=130;
OCR3AL=130;
gp_update_btn();
if(R1==0){break;}
}
PORTF=255;
OCR3BL=0;
OCR3AL=0;
}
41

void main(void)
{
PORTA=0xff;
DDRA=0b11111110;

PORTB=0xff;
DDRB=0x00;


PORTC=0xff;
DDRC=0x00;

PORTD=0xff;
DDRD=0xff;

PORTE=0xff;
DDRE=0xff;

PORTF=0xff;
DDRF=0xff;

PORTG=0x00;
DDRG=0x00;

TCCR3A=0xFD;
TCCR3B=0x04;
TCNT3H=0x00;
TCNT3L=0x00;
42

ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;



while (1)
{
while (gp_get_mode() == GP_MODE_ANALOGUE_RED_LED)
{
gp_update_btn();

//nang truoc
if
(UP==0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!=0&
&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{

nang_truoc();


while(UP==0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O
!=0&&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
43


dung();


}
//ha truoc
else if
(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN==0&&L1!=0&&L2!=0&&O!=0&
&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)

{
ha_truoc();

while(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN==0&&L1!=0&&L2!=0&&O
!=0&&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
}
//nang sau
else if
(UP!=0&&LEFT==0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!=0&
&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{
nang_sau();

while(UP!=0&&LEFT==0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O
!=0&&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
44

}
//ha sau
else if
(UP!=0&&LEFT!=0&&RIGHT==0&&DOWN!=0&&L1!=0&&L2!=0&&O!=0&
&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{
ha_sau();

while(UP!=0&&LEFT!=0&&RIGHT==0&&DOWN!=0&&L1!=0&&L2!=0&&O

!=0&&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
}
//nang tay
else if
(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!=0&
&X!=0&&SQUARE!=0&&TRIANGLE==0&&R1!=0&&R2!=0)
{
nang_tay();

while(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!
=0&&X!=0&&SQUARE!=0&&TRIANGLE==0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
}
//ha tay
45

else if
(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!=0&
&X==0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{
ha_tay();

while(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!
=0&&X==0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
}

//nang chong
else if
(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!=0&
&X!=0&&SQUARE==0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{
nang_chong();

while(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O!
=0&&X!=0&&SQUARE==0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
}
//ha chong
else if
(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O==0&
&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{
46

ha_chong();

while(UP!=0&&LEFT!=0&&RIGHT!=0&&DOWN!=0&&L1!=0&&L2!=0&&O
==0&&X!=0&&SQUARE!=0&&TRIANGLE!=0&&R1!=0&&R2!=0)
{gp_update_btn();}
dung();
}
else dung();
}
}
}

#include <mega64.h>
#include <delay.h>
// ***************khai bao bit giao tiep SPI ******************

#define SPI_MISO PINA.0
#define SPI_MOSI PORTA.1
#define SPI_CS PORTA.2
#define SPI_SCK PORTA.3
//
//#define SPI_MISO PINE.0
//#define SPI_MOSI PORTE.1
//#define SPI_CS PORTB.0
//#define SPI_SCK PORTB.1

// ************ Dat bien nut nhan *****************

#define GP_MASK_SELECT 0x01
47

#define GP_MASK_START 0x08
#define GP_MASK_UP 0x10
#define GP_MASK_RIGHT 0x20
#define GP_MASK_DOWN 0x40
#define GP_MASK_LEFT 0x80
#define GP_MASK_L2 0x01
#define GP_MASK_R2 0x02
#define GP_MASK_L1 0x04
#define GP_MASK_R1 0x08
#define GP_MASK_TRIANGLE 0x10
#define GP_MASK_O 0x20

#define GP_MASK_X 0x40
#define GP_MASK_SQUARE 0x80
#define GP_MASK_RJOY 0x02
#define GP_MASK_LJOY 0x04

#define GP_MODE_DIGITAL 0x41
#define GP_MODE_NEGCON 0x23
#define GP_MODE_ANALOGUE_RED_LED 0x73
#define GP_MODE_ANALOGUE_GREEN_LED 0x53
#define GP_MODE_NONE 0xff

#define SELECT (GP_BTN[0] & GP_MASK_SELECT)
#define START (GP_BTN[0] & GP_MASK_START)
#define LJOY (GP_BTN[0] & GP_MASK_RJOY)
#define RJOY (GP_BTN[0] & GP_MASK_LJOY)

×