ロボコン30週年記念ロボコンに応募したロボットの解説記事です.
点灯プログラム編:バーサライタの点灯パターン計算報告書
文字数の多い記事ですが,太文字のところだけを読めばわかります.より詳しく知りたい方は詳細をお読み下さい.
回路図,プログラムはgithubで公開しているので,ぜひご利用ください.
1.はじめに
次の動画が今回作成して,応募したロボットです.
youtu.be/zim1zsml234
製作に至った経緯
ロボコン30th記念イベントがあることを約250km離れた友人からしる.
↓
その友人からアイディア出しに参加しないかと声をかけられる.
↓
面白そうなので参加する.
↓
アイディア出しだけで終わるわけもなく,何かを作りたくてたまらなかったので勝手に製作を始める.
↓
現在に至る
2.バーサライタとは?
「バーサライタとは,縦一列に並んだ LED を左右に振ったり回転させるなどしながら,あるパターンで点滅さ せることで,文字や図形を表示させる装置(おもちゃ)です.」
(参考文献:秦 明宏 著,光と音の電子工作で学ぶPICマイコン講座,p.56.)
今回のは12個のチップLEDを並べたものを回転させて1文字を表示させています.
1台の機械で1文字表示しているので,全部で11台あります.
3.装置の概要
一枚のプリント基板上にすべての部品を実装しています.(電池含む)
部品
消費電力(モータ):10W(10V弱で1A程度,モータは全て直列にしている)
マイコン:ATMEGA328P(ArduinoPro 8MHz,3.3V)
モータ:マブチ RE-140RA
電池:単4形,2本
チップLED:12個x11文字(文字ごとに色を替えている)
SDカード実装予定(将来的には点灯パターンを増やして,動かしたい)
4.製作過程
4.1試作品の作成
まずはユニバーサル基板でつくってみました.
1枚の基板で11文字を表示しようと思ったのでLEDの数を24個にしました.
試作機のArduinoプログラムは友人に頼みました.
基板の各部の構成です.
Arduinoは5Vで動作しますが,SDカードは3.3Vで動作します.
そのため,5Vで送られる信号を3.3Vに変換する必要があり,抵抗を用いて分圧しています.抵抗の下には耐熱絶縁テープを貼ってあり,端子がショートしないようになっています.抵抗の真ん中のハンダが持ってあるところはSDカードの端子にはんだ付けしています.
試作機でLEDをつなげるパーツをつくりました.
スズメッキ線をまっすぐの棒ではなく折り曲げているのは基板を回転させたときに力でハンダが割れないためにやっています(友人のアドバイス)
サーバルちゃんの額についているモトローラのマークにすごく似ています.
参考文献
サーバルちゃんは前髪の模様から「バビディに操られている」「マクドナルドの宣伝」などと噂されているが、よく見て欲しい…
彼女は『モトローラ製』なのだ#けもフレ #けものフレンズ pic.twitter.com/NuwTONVQPP
— 帽子屋 (@bohsiya) 2017年2月3日
試作機の面白い点
・電池交換不要
外部から電源を供給するのでその心配は不要
・microSDスロットの代わりに変換アダプタを使った
microSDを付けたかったのですが,試作機を作ったときには自宅にsdカードスロットがありませんでした.そんなときに机の中にあったSDとmicroSDを変換するアダプタを使えばいいんじゃないかなと思ったのがきっかけです.時間がなかったので動作確認はしなかったです.
問題点
・配線が多い
チップLEDとマイコンの接続にはUEW(ポリウレタン導線)でつなげています.
さらに,LEDとGND(ダイナミック点灯用のFET)の間を接続するものがあるため,
32本とかなりの本数になっていて,LEDが隠れています.
・電源供給部のコストが高い
マイナス極をモータの軸,プラス極を側面から行っています.
側面の黒いものはブラシと呼ばれるもので,グラインダに使用されるものを流用しました.
ブラシが1個で250円ぐらいします.
・バランスが悪い
左右のバランスが悪いので回すと振動していて,高速回転できません.高速回転できないと表示がきれいになりません.
・横の幅が広くてかっこわるい
大きな足が出ているDIPタイプの部品を使用したので,どうしても基板サイズの幅が広がってしまいます.
・LEDは半分で十分
軸を挟んで両側にLEDを置くと,基板とモータの軸を正確に合わせないと行けないので大変です.
4.2 計画を寝る
こたつに入って計画を練りました.
前回の反省を活かして次の点に気をつけました.
・プリント基板を中国に頼んで,チップ部品を使う
チップ部品を使った理由:最近チップ部品にハマっているのでチップ部品を使いたかったのと,チップ部品だとコンパクトにできる.コンパクトに収めると配線が細くなり,配線間隔も狭くなってしまうので,エッチングは無理だと思って外注しました.
(この前作ったリフロー炉を使うためにステンシルがほしかったのも理由の一つ)
※リフロー:基板の上に液体はんだをぬり部品をおいたものをオーブンで加熱してハンダ付けをする方法.
※ステンシル:リフローをする際,プリント基板に液体はんだを塗る作業を楽にするときに使う薄い板.半田をのせるところだけ穴が開いている.
・電池を内蔵する
電池を内蔵すると電池と電池ボックスの費用がかかるが,ブラシに比べてやすい.
・バランスをとる
なるべく部品の配置を均等にしました.
でも,シビアにバランスをとる必要はなくて,電池のほうが部品よりも重いので電池がバランスをとってくれました.
・幅を細くする
幅が細いほうがかっこいいです.
1cmにしたかったけども,マイコンがギリギリ入るだけで配線を伸ばせなかったので2cmにしました.
ほかには,適当に作ると高くなるので,できるだけ安くなるように努力しました.
この段階では一台あたり600円ほどのよていでした.最終的には1500円ほど
ロボコンのルールブックには予算の上限は自由と書かれていますが,実際のところはお財布の中身(正確には口座の残高)がバーサライタを作れるほど残っていなかったので上限が決まってしまいました.
4.3 予算を調達する
いくら予算を減らす方法を考えても仕方がないので,短期のバイトを探して予算を調達してきました.
物流センタで夜勤2日,昼勤1日働いてきました.
物流センタの裏側を見れたり,他のバイトの方の話を聞けて勉強になりました.
4.4基板を設計する
基板は大好きなKiCadを使って設計しました.
また,GitHubを使ってみたかったのでGitHubを使って設計しました.
設計するときには以下のことを意識していました
・ホール素子を中心軸から離れた場所におく
離れた場所においたほうが1周を正確に検出できる.ホール素子は磁石からの距離でON,OFFするので,軸側に置くと常に検出していたりすると思ったので,外側におきました.
図を入れる?
・microSDが飛んで行かないようにする
基板が回転するときに,SDカードが抑えられるように向きを選びました.
(図を入れる?)
・プログラムが書きやすいようにする
LED12個分の信号をまとめて保存するプログラムにする予定だったので,なるべくポートをまとめています.
おなじポートDの中でも,回路図の部品番号の若い順にポートを割り当てています.そうすることで,プログラムが書きやすくなります.データの変数を切り取って出力信号を送ればいいので楽.(文章で表せるほどの文章力がありません)
・チップ部品をたくさんつかう
チップ部品を作るのが趣味だから,たくさんチップ部品を使いたいので(どうせつくるなら楽しまないと損!)
8MHzの水晶発振子だけはチップ部品にするのを忘れていました.
・配線長を短くする
まえにLEDcubeを作った時は基板の電線間で干渉したので,なるべく干渉しないように短くしようとしました.いざつくってみると,思っていたほど短くはなりませんでした.
・基板を小さくするためにICSPを小さくする
ICSP(AVRマイコンにプログラムを書き込むときに使う信号線)は6ピンあります.
基板のスペースのあまりが少なかったので6ピンを実装することはできませんでした.
そこで,ICSPの中にある5Vの電源線を取り除いた5ピンにして実装しました.
さらに,2×6のコネクタを使用するところを1×5のコネクタで代用することで,余っていたスペースに押し込みました.
・早く寝る
いつも作業にハマってしまうと夜中まで作業してしまい,次の日がすごく眠たくなってしまい後悔しているので気をつけました.
4.5 基板の注文
今回はpcbgogoでプリント基板を作成しました.
pcbgogoを選んだ理由は割引クーポンがあったのと,使ってみたかったからです.
プリント基板を頼むときにステンシルを頼むか悩みましたが,リフローで遊んでみたかったので+4000円課金してステンシルを頼みました.
いらないかなとも思いましたが,前にElecrowで基板を頼んだ時の失敗を思い出して注文しまいた.
1枚の50×50の基板に複数個割りつけました.そのときにVカットは別料金になると言われて自分でやればいいかなと思ったのでやめましたが,その基板が届いてからVカットを自分で入れるのは無理でした(アクリルカッターでVカットを入れるほどの隙間がなかった).2000円でゴミを作りました.
pcbgogoの発注の詳細はこちらの記事をどうぞ
4.6 部品調達
部品調達は秋月,aitendo,yodobashi,モノタロウ,東京デバイセズで調達しました.
aitendoでLED,yodobashiでモータ,モノタロウでアルミ材,東京デバイセズでペーストハンダを購入しました.
東京デバイセズはほしい商品をTwitterなどに投稿すると送料が無料になるのでそれを使いました.
秋月は購入ごとに500円の送料がかかるので1回で済ませたかったですが,水晶と抵抗を買い忘れてしまったので2回購入してしまいました.
アルミの角棒はAmazonで買うと高く,東急ハンズでは安く売っているが近くの店舗がないので保留.
部品の写真は撮り忘れています.
袋に映っているマイコンは15個あります.たったこれだけで4000円もすることに驚きました.1個だと高いけどそこまで高く感じないのが怖いところ.
モータは箱で送られてきまた.モータの箱買いなんて一般人にとっては貴重な体験です.(逸般人には日常かもしれないが)
4.7 試作機番の製作
4/11
部品が到着したので1台目の製作にとりかかります.
まずは普通にはんだごてと糸ハンダを使ってハンダ付けをしていきました.
部品が足らないことに気が付きました.水晶の在庫が少なく,リセットボタンの抵抗も買い忘れました.
4/12,4/13 バーサライタのプログラムを書いていた.
とりあえず,点灯することを確認しました.
このときにモータと基板を固定するための金具を作るためにアルミの各棒を購入するのを忘れていたことに気が付き,モノタロウで購入しました.注文したものの発送が3回ほど延期されてしまいました.
その間に基板に部品を実装して,量産をすることにしました.
4.8 基板の量産
プリント基板の量産はリフローと呼ばれる方法で行いました.
オーブントースターを温度制御できるように改造したもので,基板の上にハンダと部品を乗せてオーブンでやくとはんだ付けが一気にできるという代物です.
まずは,プリント基板を固定します.適当な基板をつかって挟んでいきます.
適当な基板を周囲においておくと,次のステンシルを用いた作業が楽になります.
ステンシルシートを基板の上において,穴の位置を合わせます.
ステンシルをおいて,固定した様子です.
この上からペースト(液体っぽいハンダ)をカードを使ってつけていきます.
この辺のやり方はスイッチサイエンスの動画が素晴らしかったです.
ステンシルを外した後に,部品を乗せていきます.
(この時,部品を載せるときにへやが暗くて作業しにくかったので,床に落ちていたLEDテープとアンテナを作るために買っておいた竹の棒をつかってライトを作りました.)
では温度制御できるように改造したオーブントースターに基板を入れて,焼き上げます.(日本ではホットプレートを改造する方式が主流みたいな話を聞いたことがあります)
完成したものがこちらになります.(マイコンを焼き上げて焦がすのが怖かったので1個しか乗せていません)
こんがりと焼きあがっています.(失敗です)
比較のために,新品のLEDと新品のスイッチをおいておきました.
長年使ったかのような年季が入っています.
温度設定をミスっていたのも原因です.
2枚目は温度設定を直したものの,スイッチは焦げました.
3枚目はアルミホイルで覆うことによりスイッチは焦げませんでしたが,ハンダも溶けませんでした.再度,焼いたところ焦げました.でも,焦げはましになっていました.
友人に聞いたところ,スイッチを焼くと焦げるそうです.(スイッチは後から手でつけるべきだった)
3枚同時に動作テストを行いました.
完成品がたくさんできてきました.
4.9 機械部品の製作
モータと基板を固定する部品を作りました.
糸鋸で角棒を切り,ドリルで穴を開けるだけの単純なものですが,小さいものなのでケガキが大変で時間がかかりました.
(図面を入れる)
モータに取り付けて動作テストを行いました.(アルミフレームにクランプで固定する荒業)
機械部品を量産する際にアルミ角材にタップを立てる作業を行っているときに,タップを2回折りました.予備がなくなりました.
そんなときに,折れたタップの先を削ればタップとして使えるのでは?と思って削ってみました.使いにくいですが,無事にタップをたてることができました.
最初は棒ヤスリで削っていましたが棒ヤスリが削れてしまうので,インパクトドライバの先にチャックを取り付けて折れたタップを掴みました.紙やすりに当てながら回していくことで楽に早く先端を削ることができました.
4.10プログラムを書く
ホール素子をつかって点灯周期の取得と位置のリセットを行うプログラムを書きました.LEDの点灯まではできていましたが,パターンを表示できないと意味がないので.
プログラムの詳細はバーサライタ プログラム編をお読み下さい.
次の処理を行っています.
・文字を表示するためにLEDをタイミングよく制御する
制御する文字のデータ作成に関してはバーサライタの点灯パターン計算報告書をお読み下さい.点灯パターン作成は分担しています.
・センサによって表示角度を制御する.
文字が回転するのを防ぐ.
・センサをつかってLEDパターンの時間制御をする
元の文字データを1周あたり40個に分割しています.LEDがパターンを切り替える時間はLEDが1周する時間を40で割った時間になります.そうしないと文字がおかしくなります.次の動画は1周する時間が短かったために文字がおかしくなっています.
4.11動作チェックをする
とりあえず,順番に点灯するプログラムを書き込んで動作試験開始です.
左手前だけは点灯プログラムが入っているので光り方が違います.
実際にモータに取り付けてチャックしました.
なぜかこんな感じに光ってしまって,悩みました.
原因は電池切れでした.電池を交換してみたら治りました.
リセットを繰り返しているのかな.
4.12土台を作成する
以前作成したプリンタスタンドを改造しました.
プリンタスタンドをベースにして,ベニヤ板の端材を取り付けました.
その上に,ホットボンドで固定しています.
4.13撮影する
ビデオカメラがなかったのでタブレットのカメラで撮影しました.
三脚もなかったのでカメラをバイスに固定して撮影しました.
タブレットに傷が使わないように間に紙を挟んでいます.
台に固定した時に一部のホール素子が動作しませんでした.
しかたないので,動かないホール素子はフォトリフレクタに置き直しました.
謝辞
開発にあたりアイディアを出していただいた共同制作者の皆様.心が折れそうなときにしたツイートにファボをしてくてくれたおかげでモチベーションを保つことができました.フォロワーの皆様に感謝いたします.