工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

スマートバスケットボールスコアボード

コンポーネントと消耗品

>
Arduino Nano R3
× 1
HC-05Bluetoothモジュール
× 1
E18-D80NK赤外線近接センサー
× 1
>
Seed Grove-振動センサー(SW-420)
× 1
DHT22温度センサー
× 1
8mm RGB LED
× 1
抵抗10kオーム
× 3
抵抗100オーム
× 3
スルーホール抵抗、47オーム
× 1
抵抗1kオーム
× 1
抵抗2.21kオーム
× 1
9Vバッテリー(汎用)
× 1

アプリとオンラインサービス

>
Arduino IDE
MIT App Inventor Android IDE

このプロジェクトについて

私はバスケットボールのトレーニングトレーニングを定期的に行っており、常にセクションの統計(ショット数、スコア、ミスなど)を追跡しています。これらの数字を追跡することは、退屈で達成するのが難しいものです。スマートボールはこれに使用できますが、いくつかの欠点があります:

  • 複数のボールでトレーニングしたい場合は、いくつかの(高価な)スマートボールを購入する必要があります。
  • 精度はそれほど良くありません。
  • ボールの耐久性。

以前のプロジェクトのスマートバスケットボールスコアボードのプロトタイプでは、Avnet SmartEdgeデバイスを使用して、バスケットボールのトレーニングを追跡する方法をテストしました。加速度センサーを使用してショットを検出し、近接センサーを使用してスコアを検出しました。現在、このプロジェクトのアイデアは、バスケットボールのスコアボードタスクの決定的なソリューションを実装することです。

バージョン

プロジェクトの開始時に、私は自宅で入手可能なハードウェアコンポーネントを使用し、必要なソフトウェア(ArduinoとAndroid)を開発しました。この最初のバージョン(1.1.0)はかなりうまく機能することがわかったので、より安価なコンポーネントを使用するためにいくつかの変更を加え、いくつかのソフトウェアの改善も実装することにしました。 2番目のバージョン(2.0.0)はさらに優れています、お楽しみください。

ステップ1:Arduino

ハードウェア

バージョン2.0.0のハードウェアコンポーネントリストは、[物事]セクションで確認できます。

これらは、バージョン1.1.0からバージョン2.0.0に加えられた主な変更点です。

  • Arduino Mega 2560 => Arduino NanoR3に変更
  • Bluetoothシールド=> HC-05Bluetoothモジュールに変更
  • 充電式リチウムイオン電源=> 9V電池に変更
  • DHT22温度および湿度センサー=>追加。

このプロジェクトで使用される他のコンポーネントに関するいくつかの考慮事項:

  • E18-D80NK赤外線近接センサー:このプロジェクトでは他の近接センサーを使用することもできますが、このような太陽光の干渉を受けないセンサーを使用することをお勧めします。
  • SW420振動センサー:このプロジェクトでは他の振動センサーを使用できますが、これは非常にうまく機能します。

2つのバージョンのArduino回路図は、回路図セクションで入手できます。

ソフトウェア

Arduino IDEを使用して、次の戦略でプログラムされたArduinoコードを開発しました。

  • 初期化(変数、LED、Bluetoothなど)後も、センサーのステータスを継続的に監視し続けます。
  • 近接センサーがボールの存在を検出した場合、それはショットがちょうど起こったことを意味し、それはスコアです。
  • 振動センサーが何らかの動きを検出した場合、それはショットが発生したばかりであることを意味しますが、決定を下すために2秒(最大)待機します。
  • このとき、近接センサーがボールの存在を検出すると、(すぐに)それがスコアであることがわかります。
  • 2秒間の終わりに、近接センサーがボールの存在を検出しなかった場合、それはミスであることがわかります。
  • Arduinoは、Bluetoothを介してAndroidにショット(スコアまたはミス)が発生したことを通知します。
  • プロセスが再開されます。

これらは、バージョン1.1.0からバージョン2.0.0に加えられた主な変更点です。

  • サポートをBluetoothシールドからHC-05Bluetoothモジュールに変更します
  • DHT22温度および湿度センサーのサポートを追加
  • ショット、スコア、ミスを検出し、LEDをより適切に通知するためのロジックを改善します。

2つのバージョンのArduinoコードは、コードセクションで入手できます。

ステップ2:Android

MIT App Inventorを使用して、次の戦略でプログラムされたAndroidコードを開発しました。

  • 初期化(ショット、スコア、ミス、Bluetoothなど)の後、[開始]ボタンが押されるのを待ちます。
  • [スタート]ボタンを押すと、Bluetooth接続を継続的に監視します。
  • データを受信するたびに、ボードが更新され、正しい通知音が鳴ります。
  • 「一時停止」ボタンが押されるまで、このプロセスが繰り返されます。
  • Bluetoothデバイスを選択したり、カウントをリセットしたりするためのボタンと、必要に応じてボードを調整するための追加のボタンがいくつかあります。

これらは、バージョン1.1.0からバージョン2.0.0に加えられた主な変更点です。

  • レイアウトを縦向きから横向きに変更します。
  • 光、湿度、温度、熱指数を追加します。
  • 調整ボタンを改善します。
  • 画面を常にオンに保つ機能を追加します。
  • すべてのボタンにプレス音を追加します。
  • 50ショットのマーク(50、100、150など)に達するたびに警告する機能を追加します。
<図> <図>

2つのバージョンのAndroidコードは、[コード]セクションで入手できます。

ステップ3:バスケットボールボードのセットアップ

これは、私がバスケットボールのトレーニングトレーニングを行うために定期的に使用するオリジナルのバスケットボールボードです。

<図>

まず、フープの下のプラスチックカバーを取り外し、近接センサーに穴を開けました。

<図>

次に、振動センサーを固定するための小さな穴を開けました。

<図>

曲率が原因でセンサーをプラスチックカバーに直接取り付けることができなかったため、MDFを使用してセンサーのサポートを構築しました。

<図> <図> <図>

いくつかのボルトとナットを使用して、近接センサーと振動センサーを修正しました。

<図> <図> <図>

次に、他のコンポーネントを接続しました。

<図> <図> <図>

スモークテストの時間です。

<図>

最後に、すべてをバスケットボールボードに取り付けました。

<図> <図>

ステップ4:バスケットボールのトレーニングテスト

次に、すべてをテストします。

そしてグランドフィナーレ...それはショータイムです!

ステップ5:最終的な考慮事項

  • システムは非常に正確であり、誤検知がほとんどなく、誤検知がまれであることが証明されました。
  • システムで遊んで、トレーニングの統計をリアルタイムでトレーニング後に知るのは素晴らしいことです。

楽しんでください...

コード

  • Arduinoコード(1.1.0)
  • Androidコード(1.1.0)
  • Arduinoコード(2.0.0)
  • Androidコード(2.0.0)
Arduinoコード(1.1.0) Arduino
 // ------------------------------------------------- ------------------------------- ////ファイル名:Scoreboard.ino ////説明:スマートバスケットボールスコアボード/ ///バージョン:1.1.0 ////作成者:Marcelo Avila de Oliveira  //// ---------------------- -------------------------------------------------- ----- //// --------------------------------------------- ----------------------------------- ////定義//// ------ -------------------------------------------------- -------------------- ////デバッグモードをオンにする//#define DEBUG // #define DEBUG_PROX // #define DEBUG_VIBR // ----- -------------------------------------------------- --------------------- ////定数//// -------------------- -------------- ------------------------------------------ //// PINSconst int prox_pin =2; const int vibr_pin =3; const int led_r_pin =4; const int led_g_pin =5; const int led_b_pin =6; // TIMEconst unsigned long wait_interval =3000; // MATHconst floatpercent_to_bright_factor =100 * log10(2)/ log10( 255); // ------------------------------------------------- ------------------------------- ////変数//// ---------- -------------------------------------------------- ---------------- //// TIMEunsigned long wait_time; // STATUSboolean prox =false; boolean vibr =false; boolean wait =false; // ------- -------------------------------------------------- ------------------- ////機能(設定)//// ------------------- -------------------------------------------------- ------- // void setup(){//ピンを初期化pinMode(prox_pin、INPUT); pinMode(vibr_pin、INPUT); pinMode(led_r_pin、OUTPUT); pinMode(led_g_pin、OUTPUT); pinMode(led_b_pin、OUTPUT); set_led(5、100); //シリアル通信を開始しますSerial.begin(9600); // BLUETOOTH通信を開始しますsetup_bluetooth(); set_led(4、100); #ifdef DEBUG Serial.println( "ボードは生きています"); Serial.println(); #endif} void setup_bluetooth(){#ifdef DEBUG Serial.println( "Bluetoothの設定"); Serial.println(); #endif Serial1.begin(38400); //ボーレートを設定Serial1.print( "\ r \ n + STWMOD =0 \ r \ n"); //スレーブモードで動作するように設定Serial1.print( "\ r \ n + STNA =Arduino \ r \ n"); //名前をSerial1.print( "\ r \ n + STOAUT =1 \ r \ n");に設定します。 //ペアリングされたデバイスに接続を許可しますSerial1.print( "\ r \ n + STAUTO =0 \ r \ n"); //ここでは自動接続を禁止する必要がありますdelay(2000); //この遅延は必須です。 Serial1.print( "\ r \ n + INQ =1 \ r \ n"); //スレーブを照会可能なdelay(2000);にします。 //この遅延は必須です。 while(Serial1.available()){//データ遅延をクリア(50); Serial1.read(); }} // ---------------------------------------------- ------------------------------ ////機能(ライト)//// -------- -------------------------------------------------- ------------------ // intpercent_to_bright(intpercent){// PERCENT:// 0..100 // RETURN BRIGHT // 255..0 return 256- pow(2、percent / percent_to_bright_factor);} void set_led(int color、int bright){// COLOR:// 0 =GREEN // 1 =YELLOW // 2 =RED // 3 =CYAN // 4 =BLUE / / 5 =マゼンタ// 6 =白////明るい:// 0 =オフ// .. // 100 =MAX #ifdef DEBUG Serial.println( "Setting LED"); Serial.println(); #endif if(color <0 || color> 6 || bright <0 || bright> 100){return; } int led_r_bright =255; int led_g_bright =255; int led_b_bright =255; int bright_aux =percent_to_bright(bright); switch(color){case 0://緑led_g_bright =bright_aux;壊す;ケース1://黄色led_r_bright =bright_aux; led_g_bright =bright_aux;壊す;ケース2://赤led_r_bright =bright_aux;壊す;ケース3://シアンled_g_bright =bright_aux; led_b_bright =bright_aux;壊す;ケース4://青led_b_bright =bright_aux;壊す;ケース5://マゼンタled_r_bright =bright_aux; led_b_bright =bright_aux;壊す;ケース6:// WHITE led_r_bright =bright_aux; led_g_bright =bright_aux; led_b_bright =bright_aux;壊す; } analogWrite(led_r_pin、led_r_bright); analogWrite(led_g_pin、led_g_bright); analogWrite(led_b_pin、led_b_bright);戻る;}// - - - - - - - - - - - - - - - - - - - - - - - ------------------------------- ////機能(チェック)//// ------- -------------------------------------------------- ------------------- // void check_prox(){if(!prox){if(digitalRead(prox_pin)==LOW){#ifdef DEBUG_PROX Serial.println( "近接が検出されました"); Serial.println(); #endif prox =true; if(!vibr){wait =true; wait_time =millis()+ wait_interval; } set_shot(1); }}} void check_vibr(){if(!prox &&!vibr){if(digitalRead(vibr_pin)==HIGH){#ifdef DEBUG_PROX Serial.println( "振動が検出されました"); Serial.println(); #endif vibr =true;待機=true; wait_time =millis()+ wait_interval; set_led(1、100); }}} void check_wait(){if(wait &&millis()> wait_time){if(!prox){set_shot(0); } reset(); }} // ---------------------------------------------- ------------------------------ ////機能(MIS)//// -------- -------------------------------------------------- ------------------ // void set_shot(int mode){//モード:// 0 =間違ったショット(ミス)// 1 =正しいショット(スコア)if (モード==0){set_led(2、100); } else {set_led(0、100); } Serial1.print(mode); delay(1000);} void reset(){vibr =false; prox =false;待機=false; set_led(4、100);} // ---------------------------------------- - - - - - - - - - - - - - - - - - - //// 主要 //// - - - -------------------------------------------------- --------------------- // void loop(){check_prox(); check_vibr(); check_wait();} 
Androidコード(1.1.0) Java
Android MIT App Inventor(http://ai2.appinventor.mit.edu/)
プレビューなし(ダウンロードのみ)。
Arduinoコード(2.0.0) Arduino
 // ------------------------------------------------- ------------------------------- ////ファイル名:Scoreboard.ino ////説明:スマートバスケットボールスコアボード/ ///バージョン:2.0.0 ////作成者:Marcelo Avila de Oliveira  //// ---------------------- -------------------------------------------------- ----- //// --------------------------------------------- ----------------------------------- ////ライブラリ//// ------ -------------------------------------------------- -------------------- //// TEMPERATURE&HUMIDITY LIBRARY#include "DHT.h" // MULTI SERIAL LIBRARY#include "SoftwareSerial.h" //- -------------------------------------------------- ------------------------- ////定義//// -------------- -------------------------------------------------- ------------ ////デバグモードをオンにする//#define DEBUG // #define DEBUG_BLUE // #define DEBUG_PROX // #define DEBUG_VIBR // #define DEBUG_DHT // DHT SENSOR#定義DHTPIN7#define DHTTYPE DHT22DHT dht(DHTPIN、DHTTYPE); // BLUETOOTH MODULE(RX、TX)SoftwareSerial Bluetooth(10、11); // ----------------- -------------------------------------------------- --------- ////定数//// -------------------------------- -------------------------------------------- //// PINSconst int prox_pin =2; const int vibr_pin =3; const int led_r_pin =4; const int led_g_pin =5; const int led_b_pin =6; // TIMEconst unsigned long wait_interval =2000; const unsigned long dht_interval =10000; // MATHconst floatpercent_to_ 100 * log10(2)/ log10(255); // ------------------------------------ ---------------------------------------- ////変数//// ---------------------------------------------- ------------------------------ //// TIMEunsigned long wait_time; unsigned long dht_time; // HUMIDITY&TEMPERATUREfloat humi、temp 、heat; // STATUSboolean prox =false; boolean vibr =false; boolean wait =false; // ---------------------------- ------------------------------------------------ // //機能(設定)//// ---------------------------------------- ------------------------------------ // void setup(){//ピンを初期化pinMode(prox_pin 、入力); pinMode(vibr_pin、INPUT); pinMode(led_r_pin、OUTPUT); pinMode(led_g_pin、OUTPUT); pinMode(led_b_pin、OUTPUT); // LEDマゼンタを設定しますset_led(5、100); //シリアル通信を開始しますSerial.begin(9600); // BLUETOOTH通信を開始しますsetup_bluetooth(); // DHTセンサーを開始しますdht.begin(); // SET LED BLUE set_led(4、100); #ifdef DEBUG Serial.println( "ボードは生きています"); Serial.println(); #endif} void setup_bluetooth(){#ifdef DEBUG_BLUE Serial.println( "Bluetoothの設定"); Serial.println(); #endif //ボーレートを設定Bluetooth.begin(9600); //利用可能なデータをクリアしますwhile(Bluetooth.available()){delay(50); Bluetooth.read(); }} // ---------------------------------------------- ------------------------------ ////機能(ライト)//// -------- -------------------------------------------------- ------------------ // intpercent_to_bright(intpercent){// PERCENT:// 0..100 // RETURN BRIGHT // 255..0 return 256- pow(2、percent / percent_to_bright_factor);} void set_led(int color、int bright){// COLOR:// 0 =GREEN // 1 =YELLOW // 2 =RED // 3 =CYAN // 4 =BLUE / / 5 =マゼンタ// 6 =白////明るい:// 0 =オフ// .. // 100 =MAX #ifdef DEBUG Serial.println( "Setting LED"); Serial.println(); #endif if(color <0 || color> 6 || bright <0 || bright> 100){return; } int led_r_bright =255; int led_g_bright =255; int led_b_bright =255; int bright_aux =percent_to_bright(bright); switch(color){case 0://緑led_g_bright =bright_aux;壊す;ケース1://黄色led_r_bright =bright_aux; led_g_bright =bright_aux;壊す;ケース2://赤led_r_bright =bright_aux;壊す;ケース3://シアンled_g_bright =bright_aux; led_b_bright =bright_aux;壊す;ケース4://青led_b_bright =bright_aux;壊す;ケース5://マゼンタled_r_bright =bright_aux; led_b_bright =bright_aux;壊す;ケース6:// WHITE led_r_bright =bright_aux; led_g_bright =bright_aux; led_b_bright =bright_aux;壊す; } analogWrite(led_r_pin、led_r_bright); analogWrite(led_g_pin、led_g_bright); analogWrite(led_b_pin、led_b_bright);戻る;}// - - - - - - - - - - - - - - - - - - - - - - - ------------------------------- ////機能(チェック)//// ------- -------------------------------------------------- ------------------- // void check_prox(){if(!prox){//近接が検出されなかった場合にのみ近接をチェックif(digitalRead(prox_pin)==LOW){#ifdef DEBUG_PROX Serial.println( "近接が検出されました"); Serial.println(); #endif // SET LED GREEN set_led(0、100); send_data(2); prox =true; if(!vibr){wait =true; wait_time =millis()+ wait_interval; }}}} void check_vibr(){if(!prox &&!vibr){//近接と振動が検出されなかった場合にのみ振動をチェックif(digitalRead(vibr_pin)==HIGH){#ifdef DEBUG_VIBR Serial.println( "振動が検出されました "); Serial.println(); #endif // SET LED YELLOW set_led(1、100); vibr =true;待機=true; wait_time =millis()+ wait_interval; }}} void check_wait(){if(wait &&millis()> wait_time){if(!prox){// SET LED RED set_led(2、100); send_data(1); } reset(); }} void check_dht(){if(!prox &&!vibr){//振動が検出されなかった場合にのみDHTをチェックif(millis()> dht_time){humi =dht.readHumidity(); temp =dht.readTemperature(); heat =dht.computeHeatIndex(temp、humi、false); #ifdef DEBUG_DHT Serial.print( "湿度:"); Serial.print(humi); Serial.println( "%"); Serial.print( "温度:"); Serial.print(temp); Serial.println( "C"); Serial.print( "ヘッドインデックス:"); Serial.print(heat); Serial.println( "C"); Serial.println( ""); #endif send_data(0); dht_time =millis()+ dht_interval; }}} // ------------------------------------------------- ------------------------------- ////機能(MIS)//// ------- -------------------------------------------------- ------------------- // void send_data(int shot){//ショット:// 0 =データなし// 1 =間違ったショット(ミス)// 2 =RIGHT SHOT(SCORE)Bluetooth.print(humi); Bluetooth.print(temp); Bluetooth.print(heat); Bluetooth.print(ショット); #ifdef DEBUG_BLUE Serial.println( "Bluetooth送信済み"); Serial.println(); #endif} void reset(){vibr =false; prox =false;待機=false; delay(1000); // SET LED BLUE set_led(4、100);} // ----------------------------------- - - - - - - - - - - - - - - - - - - - - -//// 主要 //// -------------------------------------------------- -------------------------- // void loop(){check_prox(); check_vibr(); check_wait(); check_dht();} 
Androidコード(2.0.0) Java
Android MIT App Inventor(http://ai2.appinventor.mit.edu/)
プレビューなし(ダウンロードのみ)。

回路図


製造プロセス

  1. バスケットボール
  2. スマート振動センサーはLoRaWAN無線を統合します
  3. オープンソースのスマート農業システムの設計
  4. スマートセンサーボードがエッジAI開発をスピードアップ
  5. ラズベリーパイ温度センサー
  6. セルラーIoT:スマートゴミ箱
  7. スマートバーテンダー
  8. 感情センサー/ EEG
  9. スマートテキスタイル用の超高感度で弾力性のあるセンサー
  10. スマートコンタクトレンズ用超薄型センサー
  11. スマート メカトロニクスが Sensata Technologies のセンサー製造を支援