「超音波センサを用いた電動車椅子の設計」
電子機械工学科 大内陽太 木下湧太 小池 士 羽生天駿 指 導 教 諭 小池伸一 先生1. はじめに
私達は、昨年の先輩方の発表を見て、私達も高校三年間で培ってきた知識を使って電動車椅子に新しい機 能を付けたいと思った。実際に走行させ問題点を探った結果、初速が速く壁や人の近くで前進すると衝突し てしまう危険があることが分かった。そこで、超音波センサを使用した衝突防止機能を搭載することにした。2. 目標
・誤発進による事故を防止し、安全性を向上させる ・外観を整え品質を向上させる ・使いやすい車椅子に仕上げる3. 研究課程
表 1 に一年間の研究過程を示す。 表 1 1 年間の研究過程 4 月~5 月 休校中 6 月 研究テーマ検討 7 月 プログラム班:基礎制御 設計班 :車椅子の改良に必要な部品の購入 8 月 プログラム班:超音波センサ制御 設計班 :改良個所の設計 9 月 プログラム班:トレースカーによる試験走行 設計班 :超音波センサ固定ケース設計、ほかに使う材料探し 10 月 プログラム班:超音波センサを車椅子に取り付けて走行 設計班 :フットサポート設計、基板設置台の設計 11 月 プログラム班:減速機能のプログラミング 設計班 :フットサポート、超音波センサ固定ケースの作成 12 月 プログラム班:減速機能の調整と、液晶表示のプログラミング 設計班 :フットサポートニス塗り、液晶ディスプレイ固定ケース設計・作成4. 研究内容
(1) 設計,製作班
改良前の車椅子は、基板設置台やフットサポートが古いということや、昨年の先輩方が車体の美化を反 省点として挙げていたので、事故の防止や安全性を高めることなどを目標にした。改良点としては、液晶 ディスプレイの設置や液晶スタンドの設置、フットサポートの新調、基板設置台の新調がある。 ① 液晶ディスプレイ、液晶スタンドについて 障害物を検知して止まった際に、利用者が現状を把握できなくなる点が挙げられたため、利用者 に次の操作を伝える液晶ディスプレイを取り付けた。液晶ディスプレイには(株)三共社の『LC Dキャラクタディスプレイモジュール L1671D1J000』を使用した。この液晶ディスプレイは一行十六文字を表示することができ、走行が可能な際には【LET'S GO】、障害物を検知して減 速し始めると【NOW STOPPING】、止まると【PLEASE BACK】、障害物から離れていき、検知できなくな くなるまで【FOR WAITING】と表示させた。 図 1 LCDキャラクタディスプレイモジュール L1671D1J000 (a)固定ケース設計・作成 液晶ディスプレイを固定・保護するにあたり、液晶ディスプレイの設計図を元に、ケースを SolidWorks いう 3D CAD ソフトで設計した。その後 3D プリンターで出力し、ねじを切るなどの加 工をして完成させた。 図 2 固定ケース(表) 図 3 固定ケース(裏) (b) 液晶ディスプレイ固定ケースの車椅子への取り付け 液晶ディスプレイは市販の液晶スタンド、エレコム(株)の『スマホスタンド アームタイプ 黒 P-DSCLP』を使用して車椅子の手すりに取りつけた。 図 4 スマホスタンド アームタイプ 黒 P-DSCLP
(c)液晶ディスプレイの配線確認 図5のように液晶ディスプレイを一度試験的に配線して動作を確認した。図 6 は全てのものを組 み合わせて車椅子に取り付けた状態のものである。 図 5 配線確認の様子 図 6 車椅子に取り付けた状態 ② フットサポート、基板設置台について 昨年の先輩方が使っていたフットサポートは人が乗った際にミシミシと音がし、角などが欠けて いて安全性に欠けていたため、このあたりの問題点を踏まえ、フットサポートを新しく製作した。 図 7 今までのフットサポート 図 8 新調したフットサポート 基板設置台については、今まではベニヤ板を使っていたが木くずが出たり若干曲がっていたりし ていたので、新しく金属板で製作した。
図 9 今までの基板設置台図 図 10 新調した基板設置台
(2) プログラム班
プログラム班では、超音波センサの制御と超音波センサから得られた値による電動車椅子の制御を行った。 ① 超音波センサの制御 (a) 超音波センサについて 今回の研究では、SainSmart 社の超音波センサモジュール『HC-SR04』を使用した。 図11 HC-SR04 私たちはこのセンサモジュール HC-SR04 を、電子機械工学科のライントレース実習で使ってきた ルネサス エレクトロニクス(株)製 R8C/35A マイコンを用いて制御することにした。Trigger 端子 へ 10μs 以上のパルス信号を送ることで超音波が Transmitter から放出され、測定する対象物に 当たり、反射された超音波を Receiver というところで受け取り、その信号を ECHO 端子から R8C/35A マイコンの P3_7に送る。回路図は図 12 のとおりである。 図 12 R8C/35A マイコンと HC-SR04 との回路図 この超音波センサモジュールは、Trigger 端子に 10μs のパルスを入力することで Trigger から 超音波が放出される。Transmitter から放出された音が対象物で反射して Receiver で受信される までの間、ECHO 端子が1を出力するため、このパルス幅を測定することで対象物までの距離を知 ることができる。図 13 は HC-SR04 の動作図である。 図 13 HC-SR04 の動作(HC-SR04 データシートより引用) (b) 超音波センサ 超音波センサを制御するにあたり、私達は R8C/35A マイコンのタイマ RC という PWM モードを利 用して Trigger へ送る信号の幅を 10μs、PWM 周期を 100ms に設定した。マイコン内の TRCGRA に数 値を入れることで PWM 周期を、TRCGRC に数値を入れることで Trigger へ送る ON 幅を決められる。 TRCGRA(TRCGRC)に入れる値を求めるために次の式を用いた。 TRCGRA(TRCGRC) = PWM 周期(ON 幅) / カウントソース - 1 タイマ RC カウンタのカウントソース(カウントアップする周期)は、f32 に設定することで内 蔵クロック周期の 32 倍である 1600ns とする。以下の式で 1600ns になる理由を示す。 f32 / 20MHz = 32 / 20MHz = 1600ns カウントソースを f32(1600)ns に設定し、その結果 TRCGRA = 62499(TRCGRC = 6)という値が得 られたので、それぞれに入れて Trigger へ送る ON 幅と PWM 周期を設定した。 以下に示すのはタイマ RC の設定のプログラムである。 trcmr = 0x0a; //TRCIOC PWM 出力 trccr1 = 0xc0; // カウントソースは f32 trccr2 = 0x00; // TRCIOC 端子はアクティブレベル L trcoer = 0x0b; // TRCIOC 端子の出力許可 trcpsr1 = 0x02; // TRCIOC 端子を P3_4 に割り当て trcgra = 62499; // PWM の周期 trcgrc = 6; // P3_4 ON 幅 trcmr = 0x8a; // カウントを開始
図 14 はタイマ RC の動作を図にしたものである。 ①~③の間が PWM 周期を示し、①~②の間が Trigger の ON 幅を示している。1 カウントあたり の時間は 1600ns である。 図14 タイマ RC 動作図(R8C/35A ハードウェアマニュアルより引用) (c)パルス幅の測定 超音波センサモジュールの Echo 端子から出力されるパルスの幅を測定するため、必要な初期設 定をした。ここではタイマ RA のパルス幅測定モードを使用した。trapre レジスタという外部から の入力パルスのパルス幅を測定するレジスタの設定範囲を最大(ff)に設定した。次に tra レジス タという trapre レジスタのアンダフローをカウントするレジスタの設定範囲を最大に設定した。 次に示すのはタイマ RA のプログラムである。 tstart_tracr = 0; // カウント停止 while( tcstf_tracr ); traic = 0x00; // タイマ RA 割込み禁止 trasr = 0x03; // パルス入力端子を P3_2 に割り当てる trapre = 0xff; // trapre レジスタ初期値設定 tra = 0xff; // tra レジスタ初期値設定 tracr =0x00; // 有効エッジ:なし アンダフロー:なし traioc =0x01; // H レベル幅測定 フィルタ:なし tramr =0x13; // カウントソース:f8 パルス幅測定モード traic =0x07; // タイマ RA 割込み優先レベル 7 tstart_tracr =1; // カウント開始 while(!tcstf_tracr);
図 15 はカウントの様子を図にしたもので、測定中は TRA レジスタと TRAPRE レジスタの値が カ ウントソース f8(400ns)毎にカウントダウンし、測定開始時の値と測定停止時の値から何回カウン トしたかを計算する。 図 15 タイマ RA レジスタの動作タイミング図 (R8C/35A グループアプリケーションノート タイマ RA (パルス幅測定モード)より引用) (d) タイマ RA の割り込み処理の設定 tedgf_tracr を有効エッジによる if 分岐とアンダフローによる if 分岐によって割り込み処理を している。以下に示すのはタイマ RA の割り込み処理のプログラムである。 if( tedgf_tracr ){ //有効エッジ確認 tracr=0x21; //tedgf_tracr に 0 を設定
present_contents = tra; //tra を読み出す
present_contents = (present_contents<<8); //tra を左 8 ビットシフト present_contents = (present_contents | trapre); //trapre を読み出す
f_edge=1; //エッジフラグセット } if( tundf_tracr ){ //アンダフロー確認 tracr=0x11; //tundf_tracr に 0 を設定 undf_cnt++; //アンダフローカウンタをインクリメント }
図 16 は、タイマ RA 割り込み処理のフローチャートである。 図 16 タイマ RA 割り込み処理のフローチャート (e) パルス幅の計算 if(f_edge==1){ //有効エッジ確認 if(undf_cnt==0){ //アンダフロー確認 measurement_value = last_contents - present_contents; }else{ //測定値計算 measurement_value = 0x00010000*undf_cnt+last_contents+(-present_contents); undf_cnt = 0; //アンダフローカウンタクリア } last_contents = present_contents; //今回のカウントを前回の値として保持 f_edge = 0; //エッジフラグクリア }
(f) 距離の計算 上記のプログラムで求めたパルス幅(measurement_value)を距離に換算するのに下記の計算式を 用いた。変数 p に measurement_value を代入すると、変数 a にパルス幅から計算された距離が代入 される。340 は音速である。 a = p * 340 * 2 / 1000000; ② 走行プログラム 車椅子の状態をパターンで分けてそれぞれに judge という変数に対応付けた。1は通常の走行状 態、0は障害物を検出し減速する状態、2は停止状態、3は安全な場所に後退する状態とした。 switch(judge){ case 1: // 通常走行(障害物なし) lcd = " LET'S GO "; motor2( PWM_L, PWM_R); if( measurement_value <= z ){ P = 0; judge = 0; } break; case 0: // 障害物を検出し減速 lcd = " NOW STOPPING "; Gensoku( PWM_L, PWM_R ); motor2( PWM_L, PWM_R ); P = 0; if( PWM_L <= 0 && PWM_R <= 0 ){ judge = 2; } break; case 2: // 障害物に近づき停止 lcd = " PLEASE BACK "; P = 0; motor2( 0 , 0 ); if(ad5 < 400){ judge = 3; } break; case 3: // 障害物から離れるため後退 lcd = " FOR WAITING "; P = 0; motor2( -20, -20 ); if( measurement_value >= z ){ judge = 1; P = 1; } break; }
図 17 は走行プログラムのフローチャートである。
また、judge 変数が0(減速)のとき車椅子を減速させる関数は下記の通りである。 void Gensoku(int L, int R ){
if( L > 50){ //左モータ減速 timer(7); L -= 1; }else if( L > 10 ){ timer(5); L -= 1; }else if( L > 0){ timer(2); L -= 1; } PWM_L = L; if( R > 50){ timer(7); //右モータ減速 R -= 1 ; }else if( R > 10 ){ timer(5); R -= 1; }else if( R > 0){ timer(2); R -= 1; } PWM_R =R; }
5. 考察・まとめ
・超音波センサの仕組みや原理を基礎から学び、その学んだことを使い、距離計算やプログラム制御をして衝 突防止機能を搭載することができた。しかし、超音波センサは、布などの音を吸収しやすい物体の検出が困 難であり、風や温度の影響を受けやすい。このことから、場合によっては検出できず衝突防止機能が機能し ない可能性がある。この可能性の解決策として、レーザセンサや赤外線センサ、ステレオカメラなどの超音 波センサ以外のセンサや装置と併用することが上げられる。そうすることで、超音波センサの欠点を補いさ らに安全性が向上すると考えられる。 ・直進状態での超音波センサの反応は良いが、右や左へ曲がりながらだと反応が悪い時がある。この欠点をな すには超音波センサを左右に新たに設置するか、ジョイスティックを傾けた方向にセンサが向きを変えるよ うな機構を作り搭載することで、この反応が悪くなることを防げると思われる。・今回は超音波センサを前方向に一つ付けたが、これだとバックするときに後ろに人や物があっても対応でき ない。後方にもセンサを付けることで安全性はさらに上がるので、付けることが望ましい。 ・減速をする際に、駆動モータのデューティ比が 75%を超えると、壁などの障害物との衝突防止に対応できて いないため、そこの改善が必要である。 ・超音波センサの取り付け器具や液晶ディスプレイのカバーの作製後を見通せていなかったために、ねじが閉 まらないなどの設計不備が起きた。このことから、まず設計を始める前の計画の段階でやろうとしているこ とが実現できるかどうかを十分に検討し、完成までの道筋を立てておくことが重要であると感じた。 ・フットサポートを作成する際、超音波センサを動かすための配線を考えておらず、予定通りに設計すると配 線できず、フットサポートが完全に固定できなかった。そのため、もっと細かく設計を見直し、設計ミスを 事前に発見できるようにグループ内の連絡を多くして対応していれば未然に防げたと考える。 ・基板設置台を作製する際に、定規が小さく大まかな採寸での穴あけになってしまった為に、車椅子の骨組み にある穴と合わせたときにねじが斜めになって固定することになった。もっと大きな定規を用いて正確な位 置に穴をあけ、未然に防ぐべきだった。 ・衝突防止機能を搭載した電動車椅子は壁や板などをよく検知するが、動いているものや足を開いて立ってい る人などはなかなか検知しなかった。この原因としては、超音波が上手く当たらず反射しなかったからと考 えられる。このことを発生させないためには、超音波センサ以外のセンサをつけるか、超音波の出る周期を ずらした超音波センサをいくつか付けることで解決できると考える。 ・電動車椅子は初速が速いためすぐに最高時速になり、減速機能が上手くうまく機能しないことがあり、減速 が間に合わず、衝突する恐れがある。