PIC16F84A スロットゲーム


前回作成した スロットゲーム基板 を使って、プログラムを作成しました。
数字の「777」を揃えるスロットゲームです。

操作はタクトスイッチを押すだけです。
タクトスイッチは2つありますが、ゲームに使用するのは左側で、右側はリセットボタンです。
7セグには0から9の数字が1/3秒間隔で順番に表示され、ビープ音が鳴ります。
スイッチを押すごとに、3桁の7セグの右側から停止し、選んだ数字が表示されます。
**3 -> *23 -> 123
3回押すと、選んだ数字が点滅して、ゲームが終了します。
777が揃ったときは、77Lのように数字が回転する、特別な動作をします。

LEDは1秒間隔で点滅しますが、ゲームの進行とは関係ありません。

プログラム領域の使用量は、99.6%で、限界まで使っています。
7セグの表示、LEDの点滅、ビープ音、ボタンの監視などを行っています。

ソースコードは Github に公開しました。


PIC16F84A 7セグLED


PIC16F84A で7セグLED SND2537 を点灯します。
Arduino で作ったプログラム をベースに、PIC向けに変更しました。

Arduino では、000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーでした。
今回は、各セグメントを1つづつ順番に点灯するモードと、012, 123, 234 のように数字がスクロールするモードを、交互に表示するようにしました。

ソースコードは Github に公開しました。


Eagle と Modela を使って電子基板を作る その3


概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
今回は、ファブラボ・メルボルンの手法を試してみました。
結果としては、うまくいきませんでしたが、少し前進したところもありました。

ファブラボ・メルボルンの手法
前回まで手法 は、Eagle を使って配線パターンを画像情報として作成して、Modela のソフトでベクタ情報に変換する方法です。
ファブラボ・メルボルンの手法は、Eagle を使って、直接 Modela の CAMデータを作成するやりかたです。
Dr.Engrave や fabmodule などは使用しません。
オリジナルの英文 の他に、日本語訳 もあるので、詳しくはそちらをご覧ください。

基本的な流れ
(1) Eagleで、回路図(sch)とボード図(brd)を作成します。
配線を太くしたり、PADを大きくしたりします。
(2) fablab-mill-n-drill.ulp を使って、ボード図(brd)からミリング(配線パターンの外形線)とホール(穴)のデータを作成する。
(3) fablab-mill-n-drill.cam を使って、Modela の制御コードを作成する。
Modela を新たな工作機器として認識させるために、eagle.def の修正が必要です。
(4) Modela に制御コードをUSBシリアル通信で渡す。

実際に出来たこと
(1) Eagleで、回路図(sch)とボード図(brd)を作成します。
今回の題材は、7セグLED SND2537 です。
20141227_eagle_sch 20141227_eagle_brd

(2) の fablab-mill-n-drill.ulp は、オリジナルのままでは、1/30 くらいの小さいデータが作成されます。これは、Eagleのバージョンの違いによるもので、下記に対処方法がありました。
EAGLE ulp generates wrong scale
20141227_eagle_milling

(3) (4) の操作を行いましたが、Modela は全く反応しなかったです。
生成した制御コードに誤りがあるのだと推測しています。
詳しい調査は、そのうちに。

ひとまず GitHub に下記を公開しておきます。
– fablab-mill-n-drill.ulp (修正したもの)
– fablab-mill-n-drill.cam (オリジナル)
– eagle.def

前進したこと
(1) fablab-mill-n-drill.ulp により、配線パターンの外形線のベクタ情報が得られるようになった。
(2) 配線パターンを bitmap 形式の他に、dxf 形式で出力できるようになった。
fabmodule は、dxf 形式を受け付けることはできませんが。
Dr.Engrave は、受け付けることはできます。
次は、Dr.Engrave を使った基板作成を試してみます。

Arduino スケッチ
000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーです。
スケッチには、各セグメントを1つづつ順番に点灯するモードも含まれています。

参考
Making Printed Circuit Boards with the Fab Lab
FabLabでプリント基板を作る方法
EAGLE ulp generates wrong scale


7セグ電光掲示板


20141125_7seg_front

7セグLEDを6個使った電光掲示板です。
Arduino で制御します。

機能
(1) 数字だけでなくアルファベットも表示します。
フォントは Wikipedia 7セグメントディスプレイ を参考にしました。
(2) 表示モードは2通りあります。
– 文字を右から左にスクロールします。
– 文字の表示する位置を変えずに1文字づつ表示します。
(3) 表示する文字列はUSBシリアルから設定できます。
設定した文字列はEEPROMに保存するので、設定後はPCは不要です。

ケース
アクリル板をレーザーカッタで切りました。
7セグの高さは12mmなので、3mmアクリルx4枚でスペーサーを作りました。
IMG_20141111_163502 20141125_7seg_rear

思った感じで出来ましたが。
実際に使ってみると、少し不具合がありました。
裏側の真ん中がたわみます。
右図のようにすれば、強度が得られるはず。
20141125_7seg_frame_rear_1 20141125_7seg_frame_rear_2

電気回路
使用した7セグは、OasisTek社のTOS-23101FS-Hx です。
ずばりのカタログが見つからなかったので、TOS-23101BE-B を参考にしました。
実測してみたとろこ、コモン・アノード・タイプで、順方向電圧は 3.3V くらいです。
20141125_7seg_measure 20141125_7seg_test

カソードをマルチに接続して、アノードを個別に制御するダイナミック点灯方式です。
20141125_7seg_schematic

配線
配線が一番大変でした。
5Pコネクタ付きケーブル を使いましたが、5時間くらいかかりました。

資料
Arduino のプログラムや、レーザーカッタ用のデータなどは、 GitHub で公開しています。