2014/09/04


自動報球速的棒球, 第一版試作品, 總算有個球形了.. (灑花, 歡呼..) 與其它100個缺點.


這個試作品零件選用與功能規格為:

[硬體]

線路由 NanoWii + microSD 模組 + 電池 + 5V 降壓模組 構成. 



相關文章為
(1) 自動報球速的棒球, (1) 概念與雛形 (Arduino, MPU-6050, HC-06)
(2) 筆記, NanoWii, 一些經驗分享 (Arduino, NanoWii, MPU6050)
(3) 筆記, microSD 模組, 一些經驗分享 (Arduino, microSD)
(4) 踢鐵板的自製 microSD 模組
(5) 做實驗寫入 EEPROM 的速度能否跟得上 MPU6050 的數據產出? (Arduino, MPU-6050, EEPROM)
(6) 筆記, MPU-6050, google 搜尋與實驗心得
(7) Arduino, 自己的電源線自己做

[機構]

球殼機構則是拿壓克力雷切出骨架, 再用黏土和膠帶來固定.
感謝鄭公子的幫忙



[軟體]

軟體部份則是把 ax/ay/az 數值寫檔儲存在 SD card 裡. 再手動將這些數據匯入 G-doc 試算表分析與製圖.

程式碼


電源接上後, 它會持續記錄 accel 的數值到 SD card 中. 每1000筆資料 (10s) 寫到一個檔案中. 拔電源的時點未知, 所以有可能會漏失最後一個檔案.


// Based on I2Cdevlib, MPU6050_raw
// Experiments to verify if any data loss when writing MPU6050 outputs to SD card

#include "I2Cdev.h"
#include "MPU6050.h"
#include <SdFat.h>

// SD card read/write
// MOSI - pin 11
// MISO - pin 12 
// CLK  - pin 13
// CS   - pin 4
const int chipSelect = 10;

// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
    #include "Wire.h"
#endif

MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;

SdFat sd;
SdFile myFile;

int count = 0;
int idx = 0;

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
        Fastwire::setup(400, true);
    #endif

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(38400);

    // initialize device
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();

    // change accel sensitivity to 8g
    accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_8);

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

    // Initialize SdFat or print a detailed error message and halt
    // Use half speed like the native library.
    // change to SPI_FULL_SPEED for more performance.
    if (!sd.begin(chipSelect, SPI_HALF_SPEED)) 
        sd.initErrorHalt();
}

void loop() 
{
    // read raw accel/gyro measurements from device
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

    // dynamic create a file
    if (count == 0)
    {
        // dynamic filename
        char filename[11];
        sprintf(filename, "acc_%d.txt", idx);
        Serial.print("filename :");
        Serial.println(filename);

        // open the file for write at end like the Native SD library
        if (!myFile.open(filename, O_RDWR | O_CREAT | O_AT_END)) 
            sd.errorHalt("opening test.txt for write failed");        
    }

    // write data to file
    Serial.print(count); myFile.print(count); myFile.print(", ");
    Serial.print(", ax: "); Serial.print(ax); myFile.print(ax); myFile.print(", ");
    Serial.print(", ay: "); Serial.print(ay); myFile.print(ay); myFile.print(", ");
    Serial.print(", az: "); Serial.println(az); myFile.println(az);         

    // close file when every 1,000 records
    if (count > 1000)
    {
        myFile.close();
        Serial.println("Finish.");
        count = -1;
        idx++;
    }    

    count++;
}

圖表分析

將 ax/ay/az 數據匯入 G-Doc 試算表, 可以製圖與分析. 得先將偏移值去除, 才能去積分出速度值來. 萊恩大兵還在寫這段程式碼.




這個試作品的缺點與功能未盡之處, 列舉如下:

[硬體]

  • 需要無線傳輸的功能
  • 需要能充電
  • 得再檢討並選用適當(便宜)的零件


[球殼機構]

  • 要有個球心結構來固定硬體零件
  • 球殼骨架組裝起來要夠穩固, 也要方便拆解
  • 球體重心偏移


[軟體部份]

  • 要做省電處理
  • 要能透過無線把 accel 數據傳出來
  • 要能解析 accel 數據, 計算出速度值
  • 要有個手機端的 app 來接收數據與圖表呈現


順道說一下, 這顆球的強度, 萊恩大兵抓的目標, 是在傳接球的情境, 只要能承受球進捕手手套的衝擊力道即可. 並不考慮拿球棒來擊打的情境. 再遠一點的目標, 這顆球也要能傳回 gyro 數據, 到時可以做球的軌跡變化與轉速分析.

(2014/9/5, 更新)
這篇文章在臉書上, 有不少精采的留言.

[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 實作分享@華山文創園區
自製大四軸, (1) 零組件篇, 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, (2) 零組件篇, 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, (3) 零組件篇, 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (4) 零組件篇, 馬達與電變調整 (Drone, Quadcopter, Maker, Electric Speed Control, Motor)
自製大四軸, (5) 組裝篇, 四軸飛行器成形 (Drone, Quadcopter, MultiWii, Arduino, Maker, Electric Speed Control, Motor)
自製大四軸, (6) 調整篇, 飛行前兩三事 (Drone, Quadcopter, Maker, Futaba, Arduino, MultiWii)
自製大四軸, (7) 充電篇, iMax B6 充電器操作記要 (Charger, Battery)
自製大四軸, (8) 問題篇, 機架損壞維修 (Drone, Quadcopter, Laser Cut)
自製大四軸, (9) 改良篇, 方便拆卸的木質機架 (Drone, Quadcopter, Maker, Laser Cut)

自動報球速的棒球



CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

藍色小鋪一起來做

藍色小鋪一起來做, (1) 用 beacon 控制開關的枱燈
藍色小鋪一起來做, (2) 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, (3) 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)
藍色小鋪一起來做, (4) 藍牙枱燈專案實作 (下) (Bluetooth, CC2540)
藍色小鋪一起來做, (5) iBeacon scanner 專案示範與解說 (Bluetooth, CC2540, iBeacon)
藍色小鋪一起來做, (6) 完成, 用 iBeacon 控制開關的枱燈 (Bluetooth, CC2540, iBeacon)
藍色小鋪, 初嚐樹莓派 (Raspberry Pi)
藍色小鋪, iBeacon 應用, 自動記錄到訪時間 (iBeacon, Geohopper, Zapier)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock

體驗, 原住民互動故事書@宜蘭大同鄉泰雅生活館
體驗, 蛋生音互動裝置@兒童美術館 (Arduino, 3D Printing, HC-SR04, Interactive)



實作, 電容感應音樂樹

0 意見:

張貼留言