利用 FSR 壓力感應帶制作 DeepRacer 計時器

在香港 AWS DeepRacer Fastlane 的企業推廣活動上, 本人有幸參與現場工作活動。為解決 DeepRacer 賽車計時問題,制作了一個基于 Arduino 的簡單 FSR 壓力感應器和一套賽車計時程式。

首先介紹一下感應器的基本電路:

電路是採用 Pull-up上拉電阻法,零件包括一塊 Arduino Uno 主板, 一個 10K 電阻和一條 80cm 的 FSR 壓力帶。 FSR 初始電壓為 5v,計算公式如下:

V = V0 * Rf / (Rf + R)

壓力越大 FSR 的電壓越少,當 Rf = 0, V = 5v。10K Pull-up 電阻可提供較大的測量空間。

Arduino 感應器的設計

FSR 使用一個開放式 RJ45 母插頭連接,但只用其中 2 根線視乎情況而定。

在比賽場地使用了一條 10 米長的扁 LAN 線,因為手提電腦擺放位置較遠。

注意賽道寬為76cm, 壓力帶需要貼在起跑線上,

Arduino 的控制程式代碼:

const int FSR = A1;
int state = 0;

void setup() {
  // put your setup code here, to run once: 
  pinMode(FSR, INPUT);
   
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Native USB only    
  }
}

void loop() {
  // put your main code here, to run repeatedly:
 state = analogRead(FSR); 
     
 if (state < 970) {
   Serial.println(state); 
  } 
  delay(1);
}

FSR 感應帶的寬度為 15mm,當車子以2M/S 速度經過時所需時間為 7.5ms,因此 loop() 執行的間隔時間需要至少為 1ms 以取得最大準確度。 根據車子重量造成的壓力引起電壓變動, state 作為調整敏感度之用數值至少 900。計算真正電壓要使用 map function 進行換算,這里不作進一步計算。控制代碼保持簡單。

在實際使用中發現一個問題,FSR 初始電壓值會因應長度變化,可能和電阻變大有關。當手提電腦插上 HDMI 后 USB port 的電壓出現會變化,干擾 Arduino。估計是 HDMI 線有微量電流產生,手提電腦需要接地疏導, 接上 3 腳電源后干擾消失。

賽車計時程式的設計

程式採用 .NET WPF 編寫,從 Serial Port 接收感應器的資料。安裝好 Arduino 的 USB driver 后打開對應的 COM。 當有車子經過時就計算時間差,2次經過起跑線的時間不少于 2 秒。代碼可在 Github下載。

最后是比賽活動的照片 🙂


Posted

in

by

Comments

發表留言