2012年11月25日日曜日

測距モジュール (GP2Y0A21YK) + Arduino


測距モジュール、あるいは距離センサと呼ばれるデバイス(GP2Y0A21YK)をArduinoで使う実験です。10cmから80cmの範囲の距離を赤外線を使って非接触で測定できます。秋月で1個400円。このほかにも測定距離の範囲が違うデバイスが違う型番で何種類かあるので、用途に応じて使い分けることができます。

回路図は下記。
GP2Y0A21YKはVccが5V、出力Voが0~3Vくらいなので、きわめて単純にArduinoと接続できます。


コードは次のとおり。
これを実行すると、下図のようにコンソール出力に距離を反映したバー(長いほど近い)を表示します。



実際には出力電圧と距離の関係は線形ではないので、ある程度正確に距離を求めたかったら、Arduinoのアナログイン値(10bit)と距離を、テーブルや内挿を用いるとかして距離に換算する方法を用意する必要があります。測距しないにしても、MIDI入力とかに用いようと思ったら、電圧と距離の非線形性は頭に入れておくといいかもしれません。

2012年11月20日火曜日

CNZ1023 (フォトインタラプタ) + Arduino

 

フォトインタラプタ、あるいはフォトセンサなどと呼ばれるセンシングデバイスをArduinoで使う実験です。このデバイスは、LEDとフォトトランジスタを一体化したパッケージになっており、物体が近傍を通過することでLEDの光がフォトトランジスタで受光されたり、あるいは遮られたりする、その状態変化を電気信号として出力します。

LEDとフォトトランジスタが向かい合わせになっていて、その間を通過する物体を検知するタイプを「通過型」、LEDとフォトトランジスタが同じ面を向いていて、物体が反射するLEDの光を検知するタイプ「反射型」といいます。今回使ったのは「通過型」のCNZ1023、秋月で10個入り300円50個入り800円で手に入るお安いパーツです。

接続は下図のとおり。outはArduinoのDigial 2pinに接続しています。

 

まずは普通にポーリングで信号を取るコード。センサの間隙に紙とかキャッシュカードを入れると、シリアルに出てくる値が変わります。実用的にはDigital inを使うことが多いと思いますが、単純なセンサの実験としては、Analog inで値をとってみるのも面白いです。


次に割り込みを使うコード。
  • 物体が入る → 光が遮られる → フォトトランジスタがOFF → 出力がfallする
  • 物体が出る → 光が届く → フォトトランジスタがON → 出力がriseする
この二つを取っています。