DIY赛车模拟器踏板记录(三):相关文件存档

1 前情提要

  • DIY赛车模拟器踏板记录(一):控制板和传感器测试
  • DIY赛车模拟器踏板记录(二):主体结构加工
  • 2 灵感来源

    1. 俄罗斯大神Alex(ZERgyt)在GrabCAD上分享的模拟踏板组设计方案:https://grabcad.com/library/pedals-v2-1
    2. Youtube博主GP Race Simulation分享的Make your own Load Cell Pedals for Sim Racing系列视频:https://youtu.be/DarnIy6LnNo

    3 踏板加工图纸

    经过Alex大神的同意,我可以以非商业形式将修改后的图纸分享在个人主页

    Alex大神的私信许可

    全部加工图纸包括:

    1. 完整的零件清单
    2. 金属切割CAD排版图(含钣金和沉孔说明)
    3. PCB电路板Gerber文件
    4. 全部3D打印件STL模型

    下载地址:

    蓝奏云:https://wwc.lanzouj.com/id80Y04oqpej

    4 三维模型图

    STEP格式,用于安装时的参考说明

    蓝奏云:https://wwc.lanzouj.com/i2lzD04opfih

    5 踏板原始值获取程序

    主要作用是获取踏板的原始值,把各个踏板在完全释放完全踩下时的值记录下来,用作出厂标定值输入到踏板组程序中。

    串口监视器中显示的踏板当前数值量
    //调用库来自:https://github.com/bogde/HX711
    #include <HX711.h>
    
    /*
    定义称重传感器(刹车)相关参数
    calibration_factor 称重传感器标定系数
    DOUT 数据引脚
    CLK 时钟引脚
    */
    #define calibration_factor 100
    #define DOUT  1
    #define CLK  0
    
    /*
    定义油门(Throttle)参数
    T_PIN 模拟电压量输入引脚
    */
    #define T_PIN A3
    
    
    /*
    定义离合(XAxis)参数
    C_PIN 模拟电压量输入引脚
    */
    #define C_PIN A2
    
    
    //创建Loadcell类,以阻塞模式启动
    HX711 Loadcell;
    
    //声明各踏板所需的变量
    long int Brake_ = 0;
    int Throttle_ = 0;
    int Clutch_ = 0;
    String All_OutPut = "0";
    
    void setup() {
    
    	//设置HX711使用的引脚
    	Loadcell.begin(DOUT, CLK);
    
    	//载入称重传感器标定数据
    	Loadcell.set_scale(calibration_factor);
    	Loadcell.tare();
    }
    
    void loop() {
    	//读取称重传感器数据作为刹车值,若原始变量为负值,则需要使用负号: -Loadcell.get
    	Brake_ = Loadcell.get_units();
    
    
    	//将离合值传入离合摇杆(XAxis)
    	Clutch_ = analogRead(C_PIN);
    
    	//将油门值传入油门摇杆(Throttle)
    	Throttle_ = analogRead(T_PIN);
    
    	delay(10);
    	
    	//将三个踏板的原始值输出到串口
    	All_OutPut =  String("Throttle ") + String(Throttle_) + String("\tBrake ") + String(Brake_) + String("\tClutch ") + String(Clutch_);
    	Serial.println(All_OutPut);
    }
    

    6 踏板组程序

    将三个踏板作为游戏手柄接入Windows系统

    //调用库来自:https://github.com/bogde/HX711
    #include <HX711.h>
    //调用库来自:https://github.com/MHeironimus/ArduinoJoystickLibrary
    #include <Joystick.h>
    
    /*
    定义称重传感器(刹车)相关参数
    calibration_factor 称重传感器标定系数
    DOUT 数据引脚
    CLK 时钟引脚
    SCALE_MIN HX711最小输入量(完全释放时的原始值)
    SCALE_MAX HX711最大输入量(完全踩下时的原始值)
    B_MIN 刹车踏板下限值
    B_MAX 刹车踏板上限值
    */
    #define calibration_factor 100
    #define DOUT  1
    #define CLK  0
    #define SCALE_MIN 0
    #define SCALE_MAX 7000
    #define B_MIN 0
    #define B_MAX 4096
    
    /*
    定义油门(Throttle)参数
    T_PIN 模拟电压量输入引脚
    T_INPUT_MIN 油门传感器最小模拟量(完全释放时的原始值)
    T_INPUT_MAX 油门传感器最大模拟量(完全踩下时的原始值)
    T_MIN 油门踏板下限值
    T_MAX 油门踏板上限值
    */
    #define T_PIN A3
    #define T_INPUT_MIN 263
    #define T_INPUT_MAX 487
    #define T_MIN 0
    #define T_MAX 255
    
    /*
    定义离合(XAxis)参数
    C_PIN 模拟电压量输入引脚
    C_INPUT_MIN 离合传感器最小模拟量(完全释放时的原始值)
    C_INPUT_MAX 离合传感器最大模拟量(完全踩下时的原始值)
    C_MIN 离合踏板下限值
    C_MAX 离合踏板上限值
    */
    #define C_PIN A2
    #define C_INPUT_MIN 255
    #define C_INPUT_MAX 545
    #define C_MIN 0
    #define C_MAX 255
    
    //创建Loadcell类,以阻塞模式启动
    HX711 Loadcell;
    
    //创建Joystick类,定义外设类型和各轴启用状态
    Joystick_ Joystick(0x04, JOYSTICK_TYPE_JOYSTICK, //HID设备ID设置为0x04 | 外设类型设置为Joystick(摇杆)
                       0, 0,                   // 0个按钮 | 0个切换开关
                       true, false, false,     // X轴扳机启用 | Y轴扳机禁用 | Z轴扳机禁用
                       false, false, false,    // X轴旋转禁用 | Y轴旋转禁用 | Z轴旋转禁用
                       false, true,            // 脚舵禁用 | 油门启用
                       false, true, false);    // 加速器禁用 | 刹车启用 | 方向盘禁用
    
    //声明各踏板所需的变量
    int Brake_ = 0;
    int Throttle_ = 0;
    int Clutch_ = 0;
    
    void setup() {
    	//初始化Joystick库
    	Joystick.begin(false);
    
    	//设置各轴区间
    	Joystick.setThrottleRange(T_MIN, T_MAX);
    	Joystick.setBrakeRange(B_MIN, B_MAX);
    	Joystick.setXAxisRange(C_MIN, C_MAX);
    
    	//设置HX711使用的引脚
    	Loadcell.begin(DOUT, CLK);
    
    	//载入称重传感器标定数据
    	Loadcell.set_scale(calibration_factor);
    	Loadcell.tare();
    }
    
    void loop() {
    	//读取称重传感器数据作为刹车值,若原始变量为负值,则需要使用负号: -Loadcell.get
    	Brake_ = Loadcell.get_units();
    	if(Brake_ < SCALE_MAX * 0.01) //小于1%时置0,防止刹车跳动
    	{
    		Brake_ = 0;
    	}
    	Brake_ = map(Brake_, SCALE_MIN, SCALE_MAX, B_MIN, B_MAX); //值映射
    	Joystick.setBrake(Brake_);
    
    	//将离合值传入离合摇杆(XAxis)
    	Clutch_ = analogRead(C_PIN);
    	Clutch_ = map(Clutch_, C_INPUT_MIN, C_INPUT_MAX, C_MIN, C_MAX); //值映射
    	//Clutch_ = C_MAX - Clutch_; //霍尔电压值反转,视磁铁布置方式而定
    	Joystick.setXAxis(Clutch_);
    
    	//将油门值传入油门摇杆(Throttle)
    	Throttle_ = analogRead(T_PIN);
    	Throttle_ = map(Throttle_, T_INPUT_MIN, T_INPUT_MAX, T_MIN, T_MAX); //值映射
    	//Throttle_ = T_MAX - Throttle_; //霍尔电压值反转,视磁铁布置方式而定
    	Joystick.setThrottle(Throttle_);
    
    	//更新状态,设置循环延迟10ms
    	Joystick.sendState();
    	delay(10);
    }
    

    7 预算详情

    以下是我自己在制作时花费的资金明细,说实话也便宜不了多少,主要就是图一乐,体验一下折腾的乐趣。

    该文章属于专题: DIY模拟赛车踏板

    发表评论

    您的电子邮箱地址不会被公开。 必填项已用 * 标注