学校で習ったことってなんの役に立つのか、と子供の頃に考えたことがある人は多いと思います。
子供に「学校で習ったことって、こう役立てたらいいんだ」と実感させたエピソードがあるので紹介します。
娘が小学5年のときに夏休みの自由工作でマイコン仕掛けのお掃除ロボットの制作に挑戦しました。その際、距離センサーの誤検知に困っていました。超音波センサーを使って、ある距離になったら方向転換するように設計したのですが、何回に一回、どうしてもおかしな動きをしていました。
学校で習ったことを役立てる
計測値を見てみると、時々とんでもなく大きな外れ値が出ていました。
「センサーがこれじゃどうしようもない」と相談をされた時、結論から言ってしまえば、平均値を使う助言をしました。平均値で”薄めて”みる訳です。
この平均値をきっかけに、学校で習うことが何の役に立つのかを実感したようです。
※本当は、大きな偏りデータに引っ張られる平均値よりも中央値の方がよかったのですが、それは小学校では習っていないので
ソースコード
kyori変数
kyori1, 2, 3, 4の4つの変数に値を格納し、平均値を出しています。
これでうまくいったようです。
- 0.1秒間隔でkyori1, kyori2, kyori3, kyori4に距離センサーの値を入れる
- その平均が6よりも小さい時、壁を検知したとみなして旋回処理をする
そうでなければ前進する - kyori1, kyori2, kyori3, kyori4を初期化(=100する
- 1に戻って繰り返す
migi変数
今回のテーマに直接は関係なのですが、migi変数もまた相談を受けて助言したものですので、ついでに紹介です。
お掃除ロボットとして100均で売っているモップを引きずって走るもの二するからには、右旋回の次は左旋回、左旋回の次は右旋回、と交互に旋回方向を変更する必要がありました。
そこでフラグを立てることを助言しました。
- 右旋回をしたときにmigi変数を1にする
- 壁を検知、かつmigi変数が0ならば左旋回をする
mgi変数のフラグを1にする - 壁を検知、かつmigi変数が1ならば右旋回をする
migi変数のフラグを0にする - 1に戻って繰り返す
壁の検知と旋回の動き
- 壁を検知したらちょっとバック
- 90度回転してちょっと前進
- さらに90度回転。これで旋回終わり
床が滑ってちょっと思うようにいってませんが(笑)
ただ右旋回の次に左旋回、左旋回の次に右旋回、という動き自体はうまくいっています。
コメント