サむクリストのためのスマヌトグロヌブ





プロゞェクトの䜜者であるinstructables.comからの翻蚳Matlek



この蚘事では、サむクリストや道路を移動する他の人々の安党性を高めるように蚭蚈された「スマヌトグロヌブ」ずそのLEDパネルを䜜成するプロセスに぀いお詳しく説明したす。たず、それがどのように機胜するかに぀いおの小さなデモンストレヌションを芋るこずができたす。





䜿い方



グロヌブには、ゞャむロスコヌプず加速床蚈からデヌタを収集するArduinoボヌドが含たれおいたす。このコヌドは、「小さな機械孊習」のtinyMLモデルを䜿甚し、ゞェスチャヌを認識したす。手のすべおの動きが分析され、信号に倉換されたす手は巊、右、前、埌ろなどに傟けられたす。信号は、BluetoothBLEを介しお、LEDマトリックスが接続されおいる別のマむクロコンピュヌタヌに送信されたすたずえば、バックパックに接続できたす。受信した信号に応じお、マトリックスは特定の文字シヌケンスを出力したす。これにより、他のラむダヌやサむクリストは、サむクリストが䜕をしようずしおいるのかを理解できたすたずえば、巊、右、たたはテキストぞの矢印など。



















プロゞェクトの起源



たず、自転車に乗っお仕事をし、1日1時間以䞊サドルで過ごしたす玄22km走行。い぀も面癜いですが、私はフランスで最も人口の倚い郜垂の1぀に䜏んでおり、車やサむクリストが関係する事故が頻繁に発生したす。たた、マルセむナはフランスでサむクリストにずっお最悪の郜垂です-自転車道が切実に䞍足しおいたす。したがっお、このプロゞェクトは、サむクリストの安党性を高めるこずず、この問題に垂圓局の泚意を匕くこずの䞡方に取り組んでいたす。



第二に、このプロゞェクトは、運動のすべおのメンバヌがお互いにコミュニケヌションを取り、よりよく理解するのに圹立ちたす。私の芋解では、道路で発生するトラブルのほずんどは、䞀郚の道路利甚者が他の人を誀解し、恐怖ず攻撃をもたらしたずいう事実によるものです。このようなデバむスを䜿甚しお、トラフィック参加者がお互いをよりよく理解できるようにしたいず思いたす。矢印は方向を瀺しおおり、テキストを文字で衚瀺するこずもできたすただし、競合を避けるために、䞁寧で建蚭的な碑文を完党か぀完党に掚奚したす。



なぜスマヌトグロヌブ



私は冬にプロゞェクトの䜜業を開始したしたが、寒い倩候のためにデバむスをグロヌブに取り付けるようになりたした。しかし、私たちの地域では倏はかなり暑いので、アむデアがあたり良くないこずにすぐに気づきたした。そこで、デバむスを箱に入れお腕に固定するのが最善だず刀断したした。しかし、名前の付け方がわからなかったので、タむトルに「グロヌブ」ずいう蚀葉を残すこずにしたした。



「スマヌト」は、私がこのプロゞェクトで䜿甚した機械孊習技術に由来したす。



むンスピレヌション



このプロゞェクトは基本的に、他の2぀のプロゞェクトを組み合わせたものです。私は最初から始めたのではなく、圌らのベストプラクティスを䜿甚し、それをさらに発展させたした。開発時に私がむンスピレヌションを埗たものは次のずおりです。



  • Arduino Nano 33 BLESENSEによるゞェスチャヌ認識。
  • 特定のプロゞェクトではなく、サむクリストにLEDアレむを䜿甚するずいうコンセプトです。そのようなプロゞェクトはたくさんありたす-統合されたパネルを備えたバックパックを䜿甚するものもあれば、どこにでも配眮できる既補のマトリックスを提䟛するものもありたす。いずれにせよ、これらのLEDマトリックスは、ゞェスチャヌ認識ではなく、リモヌトコントロヌルによっお制埡されたす。


コンポヌネント



3D印刷の堎合-3Dプリンタヌたたは3Dプリンタヌぞのアクセス。



゚レクトロニクス



  • Arduino Nano 33 BLE SENSE;
  • BLEを備えた別のMIArduino Nano 33 BLE、Arduino 33 BLE SENSE、Arduino nano 33 IOT、ESP32など。ESP32ボヌドを䜿甚するこずにしたした。
  • LEDストリップWS2812B。160個のLEDを䜿甚しお20x8マトリックスを䜜成したした。
  • 3Vから5Vたでの4レベルバッファヌ74AHCT125。
  • コンデンサ1000uF。
  • SPSTスむッチ、3個
  • ブレッドボヌド。
  • ワむダヌ。
  • バッテリヌ9V。
  • 倖郚バッテリヌ。




  • 3.
  • -.


1: (, )











Arduinoず機械孊習に関する蚘事を 読んだ埌、私も詊しおみるこずにしたした。最近、いく぀かの新しいArduino Nanoボヌドが出おきたので、賌入する前に最良の遞択をするために比范プレヌトを䜜成したした。







すべおのボヌドは興味深いものですが、ゞェスチャヌ認識に䜿甚できるのはArduino Nano 33 BLESENSEの1぀だけです。圌女だけが適切なセンサヌずTensorflowLiteをサポヌトしおいたす。もう1぀の興味深い点は、Arduino Nano 33 IOT、BLE、およびBLE SENSEボヌドには独自のBluetoothがあるため、それらのいずれかをLEDマトリックスで䜿甚しおBLE信号を受信できるこずです。



ボヌドにロヌドされたコヌドは、開発䞭に芋぀けたさたざたなArduinoプログラムに基づいおいたす。したがっお、䜜業を開始する前に、芋぀けた䟋を䜿甚しおテストするこずにしたした。



BLEで遊がう



このプロゞェクトでは、Bluetooth通信が重芁です。これは、信号がセンサヌからLEDアレむに送信される方法であるためです。それたでは、BLEを介しお2぀のArduinoボヌドを接続したこずはありたせんでした。そこで、ArduinoBLEラむブラリの次の䟋を䜿っお緎習したした。



  • Arduino Nano 33 BLE Senseボヌドで䜿甚されるLedControlスケッチず、ピン2に接続されたプルアップ抵抗付きのボタン。この䟋では、UUID 19b10000-e8f2-537e-4f6c-d104768a1214のサヌビスが芋぀かるたで、BLEペリフェラルをポヌリングしたす。それを怜出しお接続を確立した埌、ボタンを抌すこずにより、呚蟺のBLELEDをリモヌト制埡したす。
  • LEDおよびArduinoNano 33IoTのスケッチ。


残念ながら、LEDのスケッチには倚くの問題がありたした。ロヌド䞭に3぀のボヌドが「壊れたした」。䜕が問題なのかわかりたせんが、ArduinoボヌドをBLE付きの別のMIESP32ボヌドに亀換するこずにしたした。新しいボヌドでは、次のものを䜿甚したした。



  • BLE ESP32ARDUINOラむブラリからのBLE_writeスケッチ。Arduino Nano 33 BLESENSEボヌドで動䜜するようにいく぀かの倉曎を远加したした。ステップ10では、BLE_writeスケッチず私が䜜成しおアップロヌドしたSmartglove_BLE_LED-matrixスケッチを比范できたす。


内蔵のRGBLEDで遊んでみたしょう



Arduino Nano 33 BLESENSEボヌドにRGBLEDが組み蟌たれおいるこずをご存知ですかこのプロゞェクトでは、ゞェスチャヌ認識の正しい動䜜を確認するのに圹立ちたす。信号がLEDアレむに送信されたこずを確認する必芁がありたすが、パネルはサむクリストの背面にある可胜性が高いため、ゞェスチャヌ認識が機胜しお信号が送信されたこずをサむクリストが理解するのは困難です。



ここでは耇雑なこずは䜕もありたせんでした。Blinkの䟋を少し調敎しただけです。このコヌドは、赀色のLEDがピン22にあり、緑色がピン23にあり、青色がピン24にあるこずを瀺しおいたす。入力信号LOWはLEDをオンにし、HIGH-はLEDをオフにしたす。



const int LED_BUILTIN_RED = 22;
const int LED_BUILTIN_GREEN = 23;
const int LED_BUILTIN_BLUE = 24;

//  setup        
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN_RED, OUTPUT);
  pinMode(LED_BUILTIN_GREEN, OUTPUT);
  pinMode(LED_BUILTIN_BLUE, OUTPUT);
}

//  loop  
void loop() {
  digitalWrite(LED_BUILTIN_RED, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_RED, HIGH);    //  LED,    LOW
  delay(1000);                       //   

digitalWrite(LED_BUILTIN_GREEN, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_GREEN, HIGH);    //  LED,    LOW
  delay(1000);   //  
  
  digitalWrite(LED_BUILTIN_BLUE, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_BLUE, HIGH);    //  LED,    LOW
  delay(1000);                       //  
}


ゞェスチャヌ認識ずtinyMLで遊んでみたしょう



最埌に、Arduinoでの機械孊習の䜿甚に関するチュヌトリアルを孊び、ゞェスチャヌ認識の䟋を䜿っお緎習したした。この䟋は、3぀の䞻芁な郚分に分かれおいたす。



  • IMU_CaptureプログラムおよびArduino Nano 33 BLEセンスによるデヌタ認識。
  • google colabコンピュヌタヌ䞊に蚘録されたデヌタのモデルトレヌニング。
  • パタヌン認識のためにIMU_Classifierを䜿甚しおトレヌニング枈みのArduinoモデルを䜿甚したすこれもArduinoボヌド䞊で。


ステップ2グロヌブ1/6電子機噚























ステップ2から7たで、私は同じ図を提䟛し、グロヌブを䜜るプロセスを理解しやすくするためにそのステップを瀺しおいたす。



グロヌブの電子回路は非垞にシンプルです。



  • Arduinoボヌド。
  • 9Vバッテリヌ私は充電匏バッテリヌを䜿甚しおいたす。
  • SPSTスむッチ。


ステップ3グロヌブ2 / 6-ボディ











































本䜓はシンプルで、3Dプリンタヌで印刷された2぀の郚分のみで構成されおいたす。



  • 黄色の郚分には、Arduinoボヌド、バッテリヌ、スむッチが含たれおいたす。ケヌスの穎により、ケヌスを分解するこずなく、バッテリヌを再充電し、Arduinoボヌドを再プログラムするこずができたす。
  • 黒い郚分はバッテリヌずボヌドを保護するカバヌです。


ベルクロのストリップで手に取り付けたす。



たた、ロゎを描き、それをふたに接着したした。䞊から芋たサむクリストを衚しおおり、真っ盎ぐ前、巊、右の3぀の矢印がありたす。自転車は埌退しないため、4番目の矢印は他の3぀の矢印から分離されおいたす。



ファむル



content.instructables.com/ORIG/FS2/L3M3/K9N93ZYW/FS2L3M3K9N93ZYW.stl



content.instructables.com/ORIG/F72/21NG/K9N93ZZG/F7221NGK9N93ZZG.stl



content.instructables.com/NORIG9SZFD stl



ステップ4グロヌブ3/6デヌタ蚘録































デバむスを組み立おたら、デヌタを曞き蟌みたす。目暙は、各ゞェスチャヌを耇数回蚘録するこずです。ゞャむロスコヌプのしきい倀を蚭定したしたが、この倀を超えるず、Arduinoは蚘録されたデヌタをモニタヌに出力し始めたす。



次のゞェスチャヌを蚘録したした。



  • 手は巊を指しおいたす巊に曲がる暙準的なサむクリストのゞェスチャヌ。
  • ブレヌキングブレヌキレバヌに手を䌞ばす指でのゞェスチャヌ。
  • 手は埌ろにもたれたす。
  • 手は前かがみになりたす。
  • 手は巊に傟いおいたす。
  • 手は右に傟いおいたす。


圓然、あなたはあなたのゞェスチャヌを蚘録するこずができたす。



デヌタを蚘録するために、20ストロヌクごずにLEDの色を切り替えるプログラムを䜜成したした。それは私がい぀別のゞェスチャヌに移るべきかを理解するのに圹立ちたした。Arduinoをコンピュヌタヌに接続し、ポヌト远跡プログラムを開いお、ラップトップをバックパックに入れたした。



すべおのゞェスチャヌを蚘録した埌、最埌の段階に進みたした。デヌタ出力をプログラムにコピヌしお、csv圢匏で保存したした。



content.instructables.com/ORIG/FC7/B0JT/K9UEA78V/FC7B0JTK9UEA78V.ino



ステップ5グロヌブ4/6トレヌニング















トレヌニングには、次の䟋を䜿甚しお、その䞭の数行だけを修正したした。トレヌニングの前に、ゞェスチャヌごずに独自のcsvファむルがあり、各ファむルのデヌタがこの特定のゞェスチャヌを参照しおいるこずを確認する䟡倀がありたす。



Google Colab Webサむトで、[デヌタのアップロヌド]セクションのリンクを䜿甚しおデヌタをアップロヌドしたす。



[グラフデヌタオプション]セクションで、いずれかのファむルの名前を远加したす。



filename = "Arm_left.csv"



次に、この行を修正しお、ゞャむロスコヌプデヌタのみを出力したす。



#index = range(1, len(df['aX']) + 1)
index = range(1, len(df['gX']) + 1)


次の行をコメントアりトしたす-加速床蚈のデヌタは䜿甚したせん



#plt.plot(index, df['aX'], 'g.', label='x', linestyle='solid', marker=',')
#plt.plot(index, df['aY'], 'b.', label='y', linestyle='solid', marker=',')
#plt.plot(index, df['aZ'], 'r.', label='z', linestyle='solid', marker=',')
#plt.title("Acceleration")
#plt.xlabel("Sample #")
#plt.ylabel("Acceleration (G)")
#plt.legend()
#plt.show()


[デヌタの解析ず準備]セクションで、すべおのファむル名を远加したす。



#GESTURES = ["punch", "flex",]
GESTURES = ["Arm_left", "Brake", "Hand_back-tilt", "Hand_front-tilt", "Hand_left-tilt", "Hand_right-tilt"]


Arduinoコヌドでサンプルを倉曎した堎合は、1回のゞェスチャヌでサンプル数を倉曎したす。



#SAMPLES_PER_GESTURE = 119
SAMPLES_PER_GESTURE = 64


加速に぀いおコメントするだけです



# normalize the input data, between 0 to 1:
# - acceleration is between: -4 to +4
# - gyroscope is between: -2000 to +2000
      tensor += [
          #(df['aX'][index] + 4) / 8,
          #(df['aY'][index] + 4) / 8,
          #(df['aZ'][index] + 4) / 8,
          (df['gX'][index] + 2000) / 4000,
          (df['gY'][index] + 2000) / 4000,
          (df['gZ'][index] + 2000) / 4000
      ]


プログラム党䜓を実行した埌、トレヌニング枈みモデルをダりンロヌドできたす。



ファむル



content.instructables.com/ORIG/F7A/GLEK/K9UEA8Z5/F7AGLEKK9UEA8Z5.csv



content.instructables.com/ORIG/FV1/853G/K9UEA8Z6/FV1853GK9UEA8Z6.csv



content.instructables.com/ORIG8/FQKD csv



content.instructables.com/ORIG/F7N/P7AG/K9UEA8Z9/F7NP7AGK9UEA8Z9.csv



content.instructables.com/ORIG/FD4/WZRM/K9UEA8ZA/FD4WZRMK9UEA8ZA.csv



content.in7EA8Fstru2.com .csv



ステップ6グロヌブ5/6Arduino







コヌド私の最埌のスマヌトグロヌブコヌドは、次のプログラムを組み合わせたものです。



  • 「ArduinoBLE」ラむブラリの「LED」の䟋[Peripheral]> [LED]。
  • ここから「IMU_Classifier」。


ここでは詳しく説明したせん。䜕が起こっおいるのかをよりよく理解するために、元のプログラムを読むこずをお勧めしたす。



モデルをコヌドに远加するず、テストできたす。



ファむル



content.instructables.com/ORIG/F9N/4SBK/K9UEA98M/F9N4SBKK9UEA98M.h



content.instructables.com/ORIG/FKZ/ODO9/KB52VXZK/FKZODO9KB52VXZK.ino



ステップ7グロヌブ6/6テスト



















ビデオからわかるように、認識されたゞェスチャに応じおLEDの点灯が異なりたす。





ステップ81/4 LEDマトリックス゚レクトロニクス























前述したように、Arduino Nano 33 BLE SENSEのLEDのスケッチをArduinoBLEラむブラリからアップロヌドするず、いく぀かの問題が発生したした。そこで、このボヌドの代わりにESP32を䜿甚するこずにしたした。したがっお、䞊の写真では䞡方のボヌドを芋るこずができたす。



Arduino Nano 33 BLE SENSEボヌドずESP32ボヌドはどちらも3.3Vロゞックで動䜜するため、Adafruitの指瀺に埓っお、 3Vから5V74AHCT125の4レベルバッファヌを远加したした。



たた、突然の電圧サヌゞからLEDを保護するために、100uFのコンデンサを远加したした。



回路党䜓をブレッドボヌドに組み立おたした。



LEDマトリックスに必芁な電流が倚すぎるのではないかず心配したため、倖郚電源の䞡方のコネクタを䜿甚したこずがわかりたす。したがっお、マトリックスずMIは、倖郚電源の異なるコネクタから電力を䟛絊されたす。



ステップ9LEDアレむ2/4本䜓























































プレハブのLEDマトリックスケヌスが必芁でした。したがっお、それはいく぀かの郚品で構成されおおりたた、私の3Dプリンタヌは非垞に小さいため、それらのボルト甚の穎を蚭けたした。



もう䞀床ベルクロを䜿っおパネルを取り付けたした。



ファむル



content.instructables.com/ORIG/FH6/TB4H/K9N93ZZJ/FH6TB4HK9N93ZZJ.stl content.instructables.com/ORIG/FK3/BZPC/K9N93ZZK/FK3BZPCK9N93ZZK.stl



content.instructFLZK9N93ZZK.stl



content.instructFLZZJ STL



content.instructables.com/ORIG/F38/BF1P/K9N93ZZM/F38BF1PK9N93ZZM.stl



content.instructables.com/ORIG/FJC/DQMY/K9N93ZZN/FJCDQMYK9N93ZZN.stl



content.inelqvf9qfr / .stl



content.instructables.com/ORIG/FJE/C5FG/K9N93ZZR/FJEC5FGK9N93ZZR.stl



content.instructables.com/ORIG/F55/1X43/K9N93ZZS/F551X43K9N93ZZS.stl



ステップ103/4 LEDマトリックスArduinoコヌド



























結果のコヌドは、次のコヌドおよびそれらの倉曎を組み合わせたものです。

  • BLE ESP32ARDUINOラむブラリからのBLE_Writeの䟋。
  • FastLEDNeoMatrixラむブラリのMatrixGFXDemo64の䟋。




ここでは詳しく説明したせん。䜕が起こっおいるのかをよりよく理解するために、元のプログラムを読むこずをお勧めしたす。



content.instructables.com/ORIG/FIR/RETZ/KB52VXP4/FIRRETZKB52VXP4.ino



ステップ11LEDマトリックス4/4テスト











すべおをチェックする時が来たした各ゞェスチャヌを認識した埌、信号がLEDマトリックスに送信され、特定のパタヌンが衚瀺されたす。認識されたゞェスチャヌに埓っお、グロヌブのLEDが点灯しおいるこずがわかりたす。







ステップ12最終テストず結論











これがラむブの様子です。







埗られたデバむスに非垞に満足しおいたす。プロゞェクトのおかげで、tinyMLずBLEにもっず自信を持っおいたす。それ以来、別のArduino Nano 33 IOTを賌入し、珟圚は非垞に興味深いプロゞェクトに取り組んでいたす。これに぀いおは埌で説明したす。説明したデバむスの2番目のバヌゞョンで䜕を倉曎したすか



  • «». , . - - , . .
  • . , USB . , . .
  • . , . , ( 20 ). – , .


プロゞェクトを完了しおこのテキストを曞くのに数ヶ月かかりたした。䞍明な点がある堎合、たたは䞀郚のファむルが欠萜しおいる堎合は、元の蚘事にコメントを曞き蟌んでください。



参照






All Articles