上位に戻る | 初版2023/11/3 |
学生時代にバドミントンをしていたのですが、高齢になったので、体力維持のためバドミントン教室にかよい始めました
教室では、ひたすら手投げノックで振りの練習です。自分一人でも練習したく自動ノックマシンを作ってみました
■1人で練習するので、1人でもって歩ける
肩にバッグ またはリュックに靴、ラケット他もろもろを入れて 左手に マシン 右手に脚立 で練習に行ってます
■電池で稼働し、2時間以上使える
モータ部で電池容量8Ahあります。電流測ってみましたが、PWMだと測れないです。想定だと、モータで4A ヂューティ比
最大利用で、30% 8÷1.2=6時間 シャトルをひらって再充填とかするのでずっと稼働していないので、まあかなり
電池は持つと思います。実際連続2時間使ったあと、充電しても充電がすぐに終わります
参考サイト(先駆者のサイト)
のんびりバドミントン: 自動シャトルノックマシンを作ってみる (fujibado.blogspot.com)
筒 - teshi-ko ページ! (jimdofree.com)
最初に作ったマニュピレータ 軸を接続している継ぎ手がうまく真っ直ぐに接続できずブレブレ。マニュピレータの先端の形状が、4点でつかもうとしましたが掴まず、2点または、3点で掴み 安定しない |
作りなおしたマニュピレータ 予算をケチらないで、サーボモータにしました 先端形状を2点で、掴むように変更しました |
リチュム電池の充電器です ランプが青から緑になったら完了 |
片手で持てるようにベルトを取付ました |
脚立に固定できるようにしました |
回転数を測るのに、反射型で計測 フォトトランジスタ持っていなかったので、管タイプのトランジスタの蓋を開けて使っています |
この装置の心臓部 マイコン しかしえらい値段上がってる・・・。 |
|
使ったモータです これ進角があるので逆回転はトルクが弱いです |
|
模型用 プロペラをモータに固定する部品 2.3mm用がなかなか見つからない 軸挿入部分が短いので、別途ドリルで 掘っています 380モータの軸が長いです |
|
ホームセンターでも売ってました しかも安い 失敗しました 中心を出してドリルの穿孔が微妙にずれるので ムズイです |
|
軸のぶれが出ないようにするのが大変 | |
上部の軸受け用です 最初は、モータ軸だけで回してましたが 回転速度が上がるとぶれるので追加しました |
|
回転体に使います ナイフで、16角形まで切ってあとは、 実際に取り付けて、ドリルで回して 紙ヤスリで削って新円にします |
|
20kgの高トルクなので安心です でも高い! |
|
円形アームのみ利用 | |
リチュム電池の保護ボード 仕様では、4.25Vで充電停止になってますが 4.14Vで停止する 満充電にならないけど 劣化が遅くなると思われ 容量的には、十分 2時間使っても 全然 余裕でした |
|
赤外線リモコン フナイ電機のモードで使っています 変調コードがArudinoのライブラリで、 解析できました |
|
リチュム電池だけで良かったのですが、単体より、充電器と合わせてほうが安価だったので購入しました モバイルバッテリーとしても流用できるので |
|
自分でFET構成するよりラクチンなので購入しました FET2個がパラ接続になっています |
|
充電器で使った定電流定電圧ユニットです | |
最初マニュピレータの掴む動作に使うつもりで購入したのですが、非力すぎてダメでした 昔、テープデッキで使われていたものを持っていたのです くっつくと 人の手では外れないくらい強力だったのでそのイメージでしたが 届いた製品があまりに小さいく非力だったので止めました 余ったので、シャトルの射出用に転用しました 6V 300mAになっていますが、実際には3A流れます なんじゃこれ 非力だし 壊れてるのかなあ |
ノーブランドのPNPトランジスタ |
蓋を取ったところです |
反射板としてアルミフォイルを張っています |
#include <MsTimer2.h> #define LED_PIN 13 // フォトインタラプタ動作確認用 volatile unsigned int cnt=0,cnt_t; volatile unsigned char tmr2_f=0; void int_cnt(void){ cnt++; } void int_tmr2(void){ cnt_t = cnt ; cnt = 0 ; tmr2_f = 1 ; } void setup() { Serial.begin(9600); while( !Serial ); Serial.println("Arduino Program Start !!"); pinMode( 2, INPUT ); // int 0 pinMode( LED_PIN , OUTPUT ); attachInterrupt( 0 , int_cnt , RISING ); // INT0 MsTimer2::set( 1000, int_tmr2 ); // 1S INT MsTimer2::start(); } void loop() { if ( digitalRead( 2 )==LOW ){ digitalWrite( LED_PIN,LOW ); } else { digitalWrite( LED_PIN,HIGH ); } if ( tmr2_f == 1 ){ tmr2_f = 0 ; Serial.print("cnt_t = "); Serial.print( cnt_t ); Serial.print(" RPM = ");Serial.println( cnt_t * 60 ); } } |