找回密码
 立即注册

QQ登录

只需一步,快速开始

基础模块资料库

基于Arduino使用PS2无线手柄







63.jpg
(PS2无线手柄)


产品特点1、自动休眠省电模式

在开启无配对状态下,30S自动启动省电模式,开启并配对完成的状态下,5分钟内没有按键按下,然后启动省电模式,此时只需按下START键就能激活。

64.jpg

2、远距离遥控

手柄采用的是2.4G无线技术,遥控距离最大可达20米左右,智能小车上装上接收器,在20米范围内,无线手柄都能对智能小车进行操控。

65.jpg

3、产品尺寸

66.jpg

4、按键介绍

配对成功后,按“MODE”键,选择手柄发送模式,红灯模式:遥杆输出模拟值,绿灯模式:遥杆对应四个方向按键。

67.jpg

5、引脚说明

1、DI/DAT:信号流向,从手柄到主机,此信号是一个8bit的串行数据,同步传送于时钟的下降沿,信号的读取在时钟由高到低的变化过程中完成。
2、DO/CMD:信号流向,从主机到手柄,此信号和DI相对,信号是一个8bit的串行数据,同步传送于时钟的下降沿。
4、GND:电源地
5、VDD:接收器工作电源,电源范围3-5V
6、CS/SEL:用于提供手柄触发信号,在通讯期间,处于低电平
7、CLK:时钟信号,由主机发出,用于保持数据同步

68.jpg

接线方式

Arduino                       PS2无线手柄
   D12        <------>        1号端口
   D11        <------>        2号端口
  GND        <------>        4号端口
  3.3V         <------>        5号端口
   D10         <------>        6号端口
   D13         <------>        7号端口

PS2无线手柄基础小案例

结合Arduino  、两个直流减速电机、一个6v外部供电电源、PS2无线手柄、一个L298N电机驱动板模块
实现1、通过无线手柄左边的“上下左右”键实现前进、后退、左转、右转
实现2、通过按PS2左摇杆位置实现前进 、后退、左转、右转

接线方式

Arduino                       PS2无线手柄
   D12        <------>        1号端口
   D11        <------>        2号端口
  GND        <------>        4号端口
  3.3V         <------>        5号端口
   D10         <------>        6号端口
   D13         <------>        7号端口

Arduino                        L298N电机驱动板模块
    5V         <------>            +5V
  GND       <------>            GND
    D2         <------>            ENA
    D4         <------>             IN1
    D3         <------>             IN2
    D7         <------>             ENB
    D5         <------>             IN3
    D6         <------>             IN4

6v外部供电电源的正极接在 L298N电机驱动板模块的+12V,负极接在 L298N电机驱动板模块的GND,一个电机接在OUT1和OUT2输出口,另外一个电机接在OUT3和OUT4输出口。

69.jpg
(L298N电机驱动板模块)

L298N电机驱动板模块可驱动两路直流电机,使能端ENA、ENB为高电平时有效,控制方式及直流电机状态表如下所示。

  
ENA
  
IN1
IN2
直流电机状态
0
×
×
停止
1
0
0
制动
1
0
1
正转
1
1
0
反转
1
1
1
制动
ENB
IN3
IN4
0
×
×
停止
1
0
0
制动
1
0
1
正转
1
1
0
反转
1
1
1
制动

实现1:通过无线手柄左边的“上下左右”键实现前进、后退、左转、右转

Mixly 图形化编程程序

70.png
(图形化程序)

程序实现代码

  1. #include <PS2X_lib.h>
  2. PS2X ps2x;
  3. void setMotor(int speedpin,int dirpin, int speed)
  4.    {
  5. if (speed == 0)
  6. {
  7. digitalWrite(speedpin, LOW);
  8. }
  9. else if (speed > 0)
  10. {
  11. digitalWrite(dirpin, LOW);
  12. analogWrite(speedpin, speed);
  13. }
  14. else
  15. {
  16. digitalWrite(dirpin, HIGH);
  17. analogWrite(speedpin, speed);
  18. }
  19. }
  20. void setup(){
  21.   ps2x.config_gamepad(13,11,10,12, true, true);
  22. delay(300);
  23.   pinMode(2, OUTPUT);
  24.   pinMode(7, OUTPUT);
  25.   pinMode(3, OUTPUT);
  26.   pinMode(4, OUTPUT);
  27.   digitalWrite(3, LOW);
  28.   digitalWrite(4, LOW);
  29.   pinMode(5, OUTPUT);
  30.   pinMode(6, OUTPUT);
  31.   digitalWrite(5, LOW);
  32.   digitalWrite(6, LOW);
  33. }
  34. void loop(){
  35.   ps2x.read_gamepad(false, 0);
  36.    delay(30);
  37.   digitalWrite(2,HIGH);
  38.   digitalWrite(7,HIGH);
  39.   if (ps2x.Button(PSB_PAD_UP)) {
  40.     setMotor(3, 4,200);
  41.     setMotor(5, 6,200);
  42.   } else if (ps2x.Button(PSB_PAD_DOWN)) {
  43.     setMotor(3, 4,-200);
  44.     setMotor(5, 6,-200);
  45.   } else if (ps2x.Button(PSB_PAD_LEFT)) {
  46.     setMotor(3, 4,0);
  47.     setMotor(5, 6,200);
  48.   } else if (ps2x.Button(PSB_PAD_RIGHT)) {
  49.     setMotor(3, 4,200);
  50.     setMotor(5, 6,0);
  51.   } else {
  52.     digitalWrite(2,LOW);
  53.     digitalWrite(7,LOW);
  54.   }
  55. }
复制代码

实现2:通过按PS2左摇杆位置实现前进 、后退、左转、右转
手柄发送模式在红灯模式,Mixly图形化编程程序

71.png
(图形化程序)

程序实现代码

  1. #include <PS2X_lib.h>
  2. PS2X ps2x;
  3. void setMotor(int speedpin,int dirpin, int speed)
  4.    {
  5. if (speed == 0)
  6. {
  7. digitalWrite(speedpin, LOW);
  8. }
  9. else if (speed > 0)
  10. {
  11. digitalWrite(dirpin, LOW);
  12. analogWrite(speedpin, speed);
  13. }
  14. else
  15. {
  16. digitalWrite(dirpin, HIGH);
  17. analogWrite(speedpin, speed);
  18. }
  19. }
  20. void setup(){
  21.   ps2x.config_gamepad(13,11,10,12, true, true);
  22. delay(300);
  23.   pinMode(2, OUTPUT);
  24.   pinMode(7, OUTPUT);
  25.   pinMode(3, OUTPUT);
  26.   pinMode(4, OUTPUT);
  27.   digitalWrite(3, LOW);
  28.   digitalWrite(4, LOW);
  29.   pinMode(5, OUTPUT);
  30.   pinMode(6, OUTPUT);
  31.   digitalWrite(5, LOW);
  32.   digitalWrite(6, LOW);
  33. }
  34. void loop(){
  35.   ps2x.read_gamepad(false, 0);
  36.    delay(30);
  37.   digitalWrite(2,HIGH);
  38.   digitalWrite(7,HIGH);
  39.   if (ps2x.Analog(PSS_LY) < 100) {
  40.     setMotor(3, 4,200);
  41.     setMotor(5, 6,200);
  42.   } else if (ps2x.Analog(PSS_LY) > 150) {
  43.     setMotor(3, 4,-200);
  44.     setMotor(5, 6,-200);
  45.   } else if (ps2x.Analog(PSS_LX) < 100) {
  46.     setMotor(3, 4,0);
  47.     setMotor(5, 6,200);
  48.   } else if (ps2x.Analog(PSS_LX) > 150) {
  49.     setMotor(3, 4,200);
  50.     setMotor(5, 6,0);
  51.   } else {
  52.     digitalWrite(2,LOW);
  53.     digitalWrite(7,LOW);
  54.   }
  55. }
复制代码
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册