2016年4月25日月曜日

3Dバーサライタ テスト

こんにちは


 最近、バーサライタを久しぶりに動かしてみました。そこで、テスト用に作ったプログラムがあったので、動作させてみました。こちらがその動画です。




 今回、初音ミクを表示させてみました。
 ただ、人間の目で見る場合は目が二つあるので立体的に見えるのですが、動画にするとどうしても立体感が薄れてしまいます。もっと動画でも人間の目でも立体感を出すためには、見えない部分、つまり陰になる部分は表示させないなどの工夫が必要になりそうです。ただし、それを実現するには、目の向きを検出する必要があり、難しそうです。


 また、立体のデータをいくつか準備すればアニメーションが作れるのですが、現在はメモリの制約から難しそうです。今後は、SDカードに書き込んだデータを読み出すなどの工夫が必要だと考えられます。


 また、何かできましたらアップしようと思います。


 こちらが、このプログラムを作る際に参考にしたモデルデータになります。
 http://www.thingiverse.com/thing:32097
 ありがとうございました。

2016年4月23日土曜日

バーサライタの回路について その2

こんばんは

 昨日の投稿に引き続いて、回路や基板上の配置などについて説明したいと思います。
まず、部品面の写真がこちらです。

 このように、部品面には素子を配置しています。まず、基板の大きさを考える前にアクリルで外装を作ってしまったため、スペースがあまりなく、このような配置になってしまいました。行側のシフトレジスタはスペースがないため、一つは離れた位置においています。

 また、現在は組み立ててしまったため見えませんが、ドットマトリクスの下はシングルのピンソケットになっており、そのピンソケットの間に行側のドットマトリクスをつなぐ配線をしています。またこちらが、裏側の配線になっています。

 かなり汚くなってしまっていますが、一応説明しますと、白い配線が8×8のドットマトリクスを32×32に拡張するための列側の配線になっています。つまり表面で行側を、裏側で列側の配線を行っています。また青い配線でそれ以外の配線を行っています。
 また、モータを動かす部分に関しては、秋月のモータドライバのキットをそのまま使っています。


2016年4月22日金曜日

バーサライタの回路について

こんにちは


久しぶりの投稿となってしまいました。


さて、先日コメントを頂いたので簡単ですが回路図を書いてみました。しかし、回路図エディタで描いたわけではなく、powerpointの図なので、わかりにくい部分はご了承願います。






 回路としては、このような構成になっています。まず、今回は32×32のドットマトリクスを構成しているため、最低でも64個の入力ピンが必要です。しかし、Arduinoにはそこまでのピンはないので、直列のデータを、並列のデータに変換するシフトレジスタを使っています。しかし、シフトレジスタには流せる電流がそこまで多くないのでトランジスタアレイを使って信号を増幅して使っています。ただ、今回は32×32と非常に多くのドットマトリクスを構成しているためこのようになっていますが、8×8や16×16程度のドットマトリクスであれば、トランジスタアレイは必要ないかもしれません。

 ただトランジスタアレイを使うもう一つのメリットとしては、LEDにかかる電圧をシフトレジスタに入れる5Vとは変えることができるというものがあります。Arduinoには5Vのピンが存在しますが、これもそこまで多くの電流を流せるわけではありません。一方トランジスタアレイを使えば、バッテリーの電源を直につなぐことができるため、新たな電源回路を作る必要がないです。そのような理由から、トランジスタアレイを使っています。

 また、トランジスタアレイには、電流を流すものと、電流を引き込むものの二種類が存在します。今回使ったドットマトリクスではColumn側がアノード、Row側がカソードのタイプとなっているので、Column側にトランジスタアレイのソースドライバを、Row側にシンクドライバを接続します。また、LED用の電流の制限抵抗に関しては、入力する電圧とドットマトリクスの定格に応じて設定する必要があります。今回回路図には入れていませんが、ソースドライバとドットマトリクスの間に入れています。またLEDは20[mA]が定格のものが多いですが、基本的には1[mA]も流せば十分に光りますし、5[mA]程度に設定すれば非常に明るくなると思います。これはColumnあるいはRow側のどちらかに入れれば大丈夫ですが、入れた抵抗の部分によって少しプログラムの作成方法に違いが出ます。ちなみに私はColumn側に抵抗を入れています。

 最後にシフトレジスタについてですが、これは一言でいうと直列のデータを並列に変換するものです。詳しくはデータシートを見ていただきたいのですが、これにはデータ・クロック・ラッチ・リセットの4つの入力ピンと5[V]、GNDと8つの出力ピンとオーバーしたデータを出力するピンがついています。このデータの入力ピンにオーバーしたデータを出力するピンを接続することで、出力ピンの数を増やすことができます。基本的にはクロックの立ち上げと同時にデータを読み込み、32個のデータを送り終えたところでラッチ信号を出すと、そのデータがすべて出力されます。この出力は次のデータのラッチ信号が出るまで保持してくれます。またリセット信号を入力することですべてのデータをリセットすることが可能となります。ただし、プログラムの作り方によっては、リセット信号は必要ありません。ただし使ったほうが、全消灯を行う時間を短縮することができます。

 また、自分がユニバーサル基板で回路を作って失敗したと感じた点について説明していきたいと思います。


1.32×32のドットマトリクスを作るのに8×8のドットマトリクスを使ったこと
2.ユニバーサル基板に両面のものを使ったこと


 まずはじめの、8×8のドットマトリクスを使ったことについてですが、ドットマトリクスを大きくするためにはすべての列と行のピンを接続する必要があります。これは列に8×4×3=96本、行にも同様に96本のジャンパ線が必要になります。つまり32×32のドットマトリクスを作成するためだけに192本という膨大な配線が必要となります。はんだ付けはこれだけではないですが、はんだ付け作業に1ヶ月近くかかってしまいました。これを16×16のドットマトリクス4つを用いた場合は16×2×2=64本と非常に平和な配線の数に抑えることができます。もし作成される方がおられましたら、できる限りLEDの数が多いドットマトリクスを用意することをお勧めします。
 次の、ユニバーサル基板に両面基板を使ったことに関してですが、これには利点と欠点があります。まず利点としてはランドが両面にあるため、配線を間違えて何度もはんだ付けをやり直してもランドがはがれにくいというものです。これは、はんだ付けのミスが多い場合は非常に有効です。対して欠点としては両面にランドがあるため、基板のはんだ面に錫メッキ線を使った場合、部品面のジャンパに錫メッキ線がつかえないというものです。これは配線の数が多くなってくるとすべての表面のジャンパを被覆線で行わなくてはならず、非常に見づらくなります。今回は奇跡的に、一発で動作したので良かったのですが、デバッグのしやすさを考えると片面基板のほうが良いのではないかと考えています。また、もっと極論を言えば、プリント基板を作成してから作り始めたほうが、最終的な時間の短縮になるように思います。
 最後に使った主な部品を示しておきます。
素子 型番 個数
8bitシフトレジスタ SN74HC595N 8
トランジスタアレイ(ソースドライバ) TD62783APG 4
トランジスタアレイ(シンクドライバ) TD62083APG 4
ドットマトリクス MNA20SR092G 16
抵抗 700Ω程度 32

もし、何かご質問等がありましたら、コメントよりお願いいたします。