mozikeru.com

和歌山在住。2児の父。IoTエンジニア。各種ご相談承ります。

コインセレクターをRaspberryPIのnode.jsで扱う

アマゾンで↓の機械を買いました。


これがあれば自分で自動販売機を作って好きなものを好きなだけ売れます。そして、現金とコンピュータプログラムが接続出来るということは、これはもうFinTechですね!(ですかね?)

f:id:mozikeru:20170819151748j:plain


さっそくセットアップして大儲けします。

以下がこのコインセレクターの基本的な仕様です。

  • 12V 65mA(+-5%) のDC電源で動作します。
  • 4種類までのコインを識別可能です(4種類までコインを覚えさせる事ができます)。
  • 識別済みのコインを投入すると、定められたパルス信号をケーブルから出力するとともに、本体下部の穴からコインを排出します。
  • 未識別のコインを投入すると、パルスは出力せず、本体前面の穴(お釣り取り出し口的な穴)からコインを排出します。

↓本体下部の穴。識別済みはここから。
f:id:mozikeru:20170819152235j:plain


12V 65mA(+-5%) の電源が必要ですが、今回は秋月電子さんで下記を購入しました。

超小型スイッチングACアダプター12V1A AD−K120P100: 電源一般 秋月電子通商 電子部品 ネット通販

あと、ブレッドボードに接続するためのDCジャックも購入します。

2.1mm標準DCジャック(4A) ユニバーサル基板取付用: パーツ一般 秋月電子通商 電子部品 ネット通販

 
配線です。これらの機材をRaspberry PIに繋いでいきます。

f:id:mozikeru:20170819151019j:plain


下の写真は実際に繋いでみた感じです。(今回はたまたま手元にあったRaspberryPI ZEROを使っていますが他のRaspberryPIでも問題ないはずです)

f:id:mozikeru:20170819151942j:plain
写真のブレッドボード右端のDCジャックにACアダプタがつながっています。

下の写真は本体の背中部分の各種ケーブルと、ディップスイッチ群です。
このケーブルのDC12Vを電源のプラスに、GNDを電源のマイナスとRaspberryPIのGNDに、COINをRaspberryPIのGPIOに(今回は18)それぞれ接続します。

f:id:mozikeru:20170819143645p:plain

ではコインセレクタを初期設定して実際にコインを覚えさせるわけですが、そのあたりの手順は「ハードウェアとか研究所」さんの手順をそのまま実行することで出来ました。ありがとうございます。 

sites.google.com


具体的な設定手順はハードウェアとか研究所さんを見て頂くとして、つまずいたり、気づいたりしたポイントを列挙しておきます。

  • 2接点スイッチは「NC」に設定すること(ハードウェアとか研究所さんではNOで使用しているようだが、RaspberryPIのGPIOではNCでないと値が取得できなかった)。
  • 電源を切っても設定を覚えているので使いやすい
  • 硬貨ごとにパルスを任意で設定できるので10円なら1、100円なら10とかとすることで、複数硬貨の組み合わせ計算が出来る様子


続いてRaspberryPI側のプログラムの作成です。

node.jsでGPIOを扱うためのモジュールを適当なディレクトリでインストールします。

npm install onoff --save

 

下記がコインセレクタからのパルス信号を受信するプログラムです。
coin.js

var Gpio = require('onoff').Gpio,
  coin = new Gpio(18, 'in', 'both');
 
function exit() {
  coin.unexport();
  process.exit();
}
 
coin.watch(function (err, value) {
  if (err) {
    console.log("err");
    throw err;
  }
 
  console.log("%d coin! %d", Date.now(), value);
});
 
process.on('SIGINT', exit);

 
実行

node coin.js

 
うまくいっていれば、実行中に識別済みのコインを投入することでコンソールに以下の表示が流れます。
コンソール出力
1502977801154 coin! 0
1502977801212 coin! 0
1502977803754 coin! 1
1502977803804 coin! 0
1502977803904 coin! 1
1502977803954 coin! 0
1502977804054 coin! 1
coin!の後ろに1が来てるのがパルスです。今回100円玉のパルスを3で設定したのですが、100円を1つ投入するごとに1が三回来ます。これが何回来たかを変数に貯めたりしてカウントしておけば今幾ら投入されたかが分かります。
また、識別していないコインを投入した場合、プログラム(GPIO)には何も反応がありません。

この仕組みと他のものを組み合わせれば、現金駆動型の仕組みが作れそうです。夢が膨らみますね。