ボール・コンベアの組み立てとプログラミング ~レゴマインドストームEV3~ | そう備忘録

ボール・コンベアの組み立てとプログラミング ~レゴマインドストームEV3~

ボール・コンベアとは

教育用レゴマインドストームEV3の基本セットでBall Conveyor(ボール・コンベア)を組み立ててみた。

ボール・コンベアの基本的な動きは以下の通りである

  1. 最初に金属製のボールをコンベアを使って持ち上げてレールの上部に乗せる
  2. コンベアにボールを乗せたかどうかの判断はカラーセンサーの反射光の強さで判定を行う
  3. ボールはレールの下まで転がった後、タッチセンサーにぶつかってセンサーを押す
  4. タッチセンサーをきっかけにしてMモーターのアームで左右のどちらかにボールを落とす

ボール・コンベアの組み立て動画

駆動部、センサー類の説明

Lモーター(コンベア)Lモーターを使ってベルトコンベアを動かして金属製のボールを上部まで運ぶ

ボール・コンベア Lモーター

カラーセンサーカラーセンサーで反射光の強さを測定して前にボールが置かれたかどうかを判断する

  • ボールが置かれていない:反射光の強さは0~1
  • ボールが置かれている:反射光の強さは10前後

ボール・コンベア カラーセンサー

タッチセンサーボールがレールの上を転がってタッチセンサーにぶつかってタッチセンサーが押される

それをきっかけにしてMモーターのアームを動かす

ボール・コンベア タッチセンサー

MモーターMモーターを使ってアームを動かしてボールを左右のボール受けに落とす

ボール・コンベア Mモーター

プログラム概要

ボール・コンベアを使ったプログラムの概要。

  • カラーセンサーの前にボールが置かれたらLモーターを使ってコンベアでボールを上まで運ぶ
  • タッチセンサーが押されたらMモーターのアームで左右順番にボールをボール受けに落とす

の部分から構成されている。

尚、記事の最後にプログラミングと実際に動かした時の動画を載せているので確認してみて欲しい

ボール・コンベア プログラム概要

プログラム全体

ボール・コンベア プログラム全体

プログラム開始

2と7は並列で処理する

プログラム終了まで3~6を繰り返す
カラーセンサーの前にボールが置かれるまで(反射光の強さで判定)待機する
1秒間待機する
Lモーターでコンベアを動かしてボールを上に運ぶ
コンベアを元の位置に戻す
プログラム終了まで8~16までを繰り返す
ループインデックスを2で割った余りを出力する(0、1、0、1と交互に出力される)
タッチセンサーにボールがぶつかって押されるまで待機する
10データワイヤーで受け取った計算結果によって1(上部)と0(下部)のロジックに分岐する
11アームを時計回りに18度回転させる(ボールは向かって左側に落ちる)
121秒間待機する
13アームを元に戻す
14アームを反時計回りに18度回転させる(ボールは向かって右側に落ちる)
151秒間待機する
16アームを元に戻す

使用したブロック

今回使用したブロックは以下の7種類。

ループブロック

ループ内に配置されたブロックを右側の条件に一致するまで繰り返す。

ループブロックプログラム終了までループする

コンベアの上下を繰り返すループとMモーターでボールを左右に振り分けるループの2箇所で使用する

  • 番号:01
  • ループ:無限

待機ブロック

指定した条件になるまで待機する。

待機ブロック 反射光の強さカラーセンサーの前に金属のボールが置かれるまで待機する

金属のボールに光が反射して反射光の強さが5以上の数値になった時の後続のベルトコンベアの処理を行う

  • 待機:カラーセンサー、比較、反射光の強さ
  • 比較タイプ:2(>)
  • しきい値:5
  • 照明:反射光の強さが出力される(未使用)
待機ブロック タッチセンサーが押されるまでタッチセンサーがボールで押されるまで待機する

押されたらMモーターを使ってボールを左右に落とす

  • 待機:タッチセンサー、比較、状態
  • 状態:1(押された)
  • 測定値:状態の値が出力される(未使用)
待機ブロック 1秒間待機する1秒間待機する

  • 待機:時間
  • 時間:1(秒)

Lモーターブロック

重いものをゆっくり動かすのが得意なモーター

今回はベルトコンベアを使ってボールを上に運ぶ

LモーターLモーターでベルトコンベアを動かしてボールを上に運ぶ

  • Lモーター:角度
  • パワー:10
  • 度:ー460(度)※
  • ブレーキ方法:真

※マイナス回転でコンベアを下から上への移動、プラスではその逆の動きになる

数学ブロック

計算式に基づいた演算を行うブロック。

数学ブロックの詳細な機能についてはこちらの記事を参照

数学ブロック 2で割った余りを求めるループインデックスを入力(a)にして2で割った余りを結果に出力する

ループインデックスは0、1、2、3・・・と0から始まりカウントアップされるので、2で割った余りは0、1、0、1、0、1・・・が繰り返される

  • 数学:拡張機能
  • a:ループインデックスをデータワイヤーで受け取る
  • b:2
  • c:未使用
  • d:未使用
  • 結果:aを2で割った余りが出力される
  • 演算:a%b

スイッチブロック

条件によって処理を分岐することができるブロック。

センサーの測定値やロジック(”真” or ”偽”)など様々な条件を指定する事ができるが今回は数値(#)での分岐を使用する。

スイッチブロック 0と1の分岐数学ブロックの結果(0、1の繰り返し)をデータワイヤーで受け取って1、0のロジックに分岐する

  • スイッチ:数値
  • 数値:データワイヤーで数学ブロックの結果を受け取る
  • 分岐:1、0

Mモーターブロック

軽いものを素早く動かすのが得意なモーター

今回はアームを左右に動かしてボールを左右のボール受けに落とすために使用する。

Mモーターアームを使ってボールを左右に落とす

  • Mモーター:角度
  • パワー:50
  • 度:-18(度)※
  • ブレーキ方法:真

※マイナス指定は正面に向かって反時計回りなので右側に落とす。プラスはその逆

プログラミングと実際に動かしてみた時の動画

ボールコンベアのプログラミングの解説動画と実際に動かしてみた時の様子

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。