ラズパイ日記 12月5日月曜日
ラズベリーパイを入手してはや一ヶ月。そろそろ書籍に載っている演習以外にも、自分なりにガジェットを作ってみたい。ということで作ってみました記念すべき処女作!
私が遊んでいる某スマホゲームには毎分一回タッチを何十時間も継続することで貴重なアイテムが手に入るのですが、課金すれば手に入るといった仕様にはなっていない為、極めて忍耐と根気が問われる苦行です。それ故にプレイヤー達からはマラソンと呼ばれています。
そこでラズベリーパイのロボット作りの第一弾としてこのマラソンを自動化してやろうと考えました。
そしてできたのがコチラ。
名付けて「タッチくん1号」
(メカとかロボに、1号とかつけたくなるのは私だけですかねw)
用意したもの
・Raspberry Pi 3 model B+
・サーボモーターSG90
・スマホタッチペン(静電式)
・タミヤユニバーサルアーム
・木材
・マット
・ブレッドボード
・ジャンパーワイヤ
・電池ボックス(単3×4本)
・文鎮(重り)
まずは仮組みとして無理やりモーターとタッチペンをくっつけてスマホをタッチさせてみました。ここで課題発生。反応しない。
事象:
手でタッチペンを使うと反応するのに、モーターだと反応しない。
原因:
最近のスマホのタッチパネルは静電式というやつで、常に静電気を帯びている人体の性質を利用している。タッチペンも電気を通しやすい素材でできているため、静電気を帯びていない機械にもたせてもスマホは反応しない。
対応:
アース線をロボットアームに繋いたところ無事反応するようになった。
解説:
つまってから色々ググり、他の人が作ったロボットの動画を参考にしたところ、どの方もアース線を繋いでいることに気がつきました。
最初は人体静電気の代わりに何かで静電気を起こしてアース線でロボットまで流しているのかと思って頭を悩ませましたが、はたと逆であることに気がつきました。
アース線の片方をタッチペンに繋ぎ、もう片方は宙ぶらりんで、どこにも繋がない状態にすることで、静電気の通り道を作り、スマホからの静電気を空気中に逃がしてやるのです。
こうすることであら不思議、スマホがバッチリ反応するではありませんか。
最大の課題が解決したところで工作が始まりました。
工作:
DOITで買ってきた杉の棒を20cmくらいに切り落とします。
サーボモーターの固定位置を決め、
タミヤユニバーサルアームをポキっと折ってネジでモーターを固定します 。
アームの残りを再度折って、タッチペンのペン先を、アームとアームで挟み込んでネジで締めます。これがロボットアームになります。
あとはサーボモーター付属のペラをモーターに装着し、ペラとアー厶の残りをねじドメしてロボット本体完成です。
:配線
ラズパイとブレッドボードを配線し、ブレッドボードに電池ボックスとサーボモーターを配線します。
写真ではADコンバーターや半固定抵抗(ツマミ)も搭載している為線もゴチャゴチャしてますがタッチくん1号にはこれらは使ってません。
モーター系を扱う場合、ラズパイからの電源供給ではなく、別途電池などの電源を用意するといいそうです。ノイズが出てしまうので。よって電池ボックスが出てくるわけです。
プログラミング:
最後にロボットを制御するプログラムを書きます。言語はpython。
書籍の演習で半固定抵抗のツマミでサーボモーターを動かすプログラムを作っていましたので、サーボモーターの入力値(デューティ比)を半固定抵抗ではなくプログラムロジックでセットするように変えるだけです。
特徴としては、WiringPiというライブラリをインポートして使うことで精度の高い制御を可能としているところです。ラズパイはLinuxでマルチタスク制御できる反面、単機能での高精度な動きが苦手です。それを解決するのがWiringPiというわけです。
さてあとはロジックでサーボに角度(デューティ比)を指定していくだけですがここは実際に動かしながら値を微調整していきます。
設置:
動かしてみると、アームに振られて本体が動いてしまいます。そこでマットと文鎮の登場です。さらにタッチする度に、少しづつ回ってしまうのを止めるストッパーとしてネジをマットにテープどめしました。
稼働:
ミスタッチが時々出るものの、30分間自動でゲームをすすめることに成功!
ロボットにゲームをさせることは果たして楽しいのか?なんの意味があるのか?などと哲学してしまいますが、結論としては、「すげー楽しい」です。
今後はこのタッチくんを進化させつつ別のロボットにも挑戦していこうと思います。