亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

驱动器制动分析仪

发布时间:2021-05-22
分享到:

驱动器制动分析仪

发布时间:2021-05-22
分享到:

该项目通过使用Edge脉冲软件开发了TinyML模型,该模型可以预测在减速器和坑洼中的制动技能。在刹车踏板和加速度计上添加了外部传感器,用于数据捕获。该模型将制动分为:

  • 刹车良好
  • 过度刹车
  • 未完全刹车
  • 平路驱动

体系结构:

该分析器包括:

  • 车辆数据模拟
  • 边缘脉冲模型训练
  • 类别

构建步骤:

步骤一、车辆数据模拟

该项目不是从车辆CAN总线中读取车辆数据,而是制作一个独立的模块,该模块可以安装在任何四个轮车中,并且可以实时捕获数据。

  • 刹车踏板:将Flex sensor4.5“放在制动踏板下方。

  • 刹车踏板值的计算:使用阈值法。在启动时,将踩下制动踏板7秒钟,然后放开7秒钟。并使用辅助控制器-Arduino Nano进行校准和计算制动踏板的踩踏值。

步骤二:电路的连接 :

步骤三:

代码:将Arduino Nano的A4,A5连接到主控制器“ Arduino Nano 33 BLE Sense ”。制动踏板设备将在I2C中充当从设备,而主设备“ Arduino Nano 33 BLE Sense ”将请求并从从设备获取制动踏板踩下的数据。

//柔性传感器-制动踏板踩下值计算
#include <Wire.h>
//常数:
const int flexPin = A0; //引脚A0读取模拟输入

uint16_t FullbrakeUpperthreshold=0;
uint16_t FullbrakeLowerthreshold=0;
uint8_t brakepedalpressedVal=0;

float time_ms=0;

//变量:
int FlexSensorvalue; //保存模拟值
float avgFlexValue=0;

boolean CalibrateFlexBrakepedalvalue=1;

int Linearinterpolation( float x , float x0, float x1, float y0, float y1);


void setup(){
  
  Serial.begin(115200);       //开始串行通信
  // 启动I2C总线作为主机
  Wire.begin(1);                          //开始I2C通信,从机地址为1,位于引脚(A4,A5)
  Wire.onRequest(requestEvent);           //当主设备向从设备请求值时的函数调用


}

void loop(){
   
    
    if(CalibrateFlexBrakepedalvalue==1)
    {
          delay(5000);
       Serial.println("Press Full Brake pedal for 7 seconds");               //打印

    
    for(int i =0 ; i<50;i++)
    {
       FlexSensorvalue = analogRead(flexPin);         //读取并保存电位计的模拟值
       avgFlexValue=FlexSensorvalue+avgFlexValue;
       Serial.println(FlexSensorvalue);               //打印值
       delay(100);      
    }

    FullbrakeUpperthreshold=avgFlexValue/50;
    avgFlexValue=0;
    Serial.print("FullbrakeUpperthreshold  :  ");
    Serial.print("\t");
    Serial.println(FullbrakeUpperthreshold);
    
     Serial.println("Release Brake pedal for 7 seconds");               //打印
    delay(5000);

      for(int i =0 ; i<50;i++)
    {
       FlexSensorvalue = analogRead(flexPin);         //读取并保存电位计的模拟值
       avgFlexValue=FlexSensorvalue+avgFlexValue;
       Serial.println(FlexSensorvalue);               //打印值
       delay(100);      
    }
    FullbrakeLowerthreshold=avgFlexValue/50;
    avgFlexValue=0;
    Serial.print("FullbrakeLowerthreshold  :  ");
    Serial.print("\t");
    Serial.println(FullbrakeLowerthreshold);

    CalibrateFlexBrakepedalvalue=0;
    delay(10000);
    }
  
  delay(1);                          //小延迟
  
}


// 计算制动踏板值的线性插值公式
int Linearinterpolation( float x , float x0, float x1, float y0, float y1)
{

int y=0;

y= y0+(((x-x0)*(y1-y0))/(x1-x0));
return y;
  
}

void requestEvent()                                //当主想要从的值时调用此函数
{
  FlexSensorvalue = analogRead(flexPin);         //读取并保存模拟值
  // 达到阈值
  if(FlexSensorvalue<FullbrakeUpperthreshold)
  {
    FlexSensorvalue=FullbrakeUpperthreshold;
  }
  else if(FlexSensorvalue>FullbrakeLowerthreshold)
  {
    FlexSensorvalue=FullbrakeLowerthreshold;
  }  
 brakepedalpressedVal=Linearinterpolation(FlexSensorvalue,FullbrakeUpperthreshold,FullbrakeLowerthreshold,100,0);
  Serial.println(brakepedalpressedVal);               //打印值

  Wire.write(brakepedalpressedVal);                          // 将一个字节转换后的POT值发送到主节点
}

数据计算:

  •  车辆Z轴加速度计数据:将Arduino Nano 33 ble感放置在汽车的仪表板上。Nano 33 ble感应器内置了加速度计,将该值用作车辆的Z轴数据。

  • 车速模拟: 为了进行速度模拟,将按钮安装在齿轮的顶部,每当踩下制动踏板时,同时按下按钮,这将通过校准系数降低速度。该算法将如下图所示工作。

 

根据按按钮时的校准系数得出,从25kmph的速度将在4秒钟内降低到零。为了重置车速,在Nano 33 Ble的意义上添加了以下算法。

模型训练:

将Arduino Nano BLE 33 Sense连接到Edge Impulse(操作步骤

转到命令提示符并在命令下方输入:$ edge-impulse-data-forwarder,然后选择Arduino连接的COM端口。连接后,可以提供边缘脉冲登录凭据并选择您的项目。该项目中收集了22分钟的不同制动模式数据。

刹车数据:

  • 良好

  • 过度:当按下减速器中的全制动时,它可能会使车辆停止或接近零。从下面的数据图中,可知当车速下降到零后,驱动器施加了全制动,以避免车辆从减速器后退。

  • 未完全刹车

  • 平路驱动:在正常平坦的道路上,车辆将保持恒定的速度,行驶将在平坦的表面上进行,无坑洼/速度断路器。

 

脉冲配置:

将过滤技术设置为“无”,因为在过滤过程中,全制动可能显示为零。

NN分类器设置

模拟结果:

根据模拟测试,该设备结果可达94.5%。

硬件:

1、硬件组件:

2、电路连接:

 制动踏板值-柔性传感器与Arduino Nano的电路连接

Arduino纳米33 BLE感和制动踏板单元之间的连接

组装:

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论