フォトリフレクタは回路が2つついてて、1つはLED、もう1つはフォトトランジスタ(照度で抵抗値が変化する素子)になっている。電気を流すことで反射光の照度を抵抗値として取得することができる装置である。安くてっちゃいのを秋月電子で探してみるとTPR-105があった。

フォトリフレクタ(反射タイプ) TPR-105: 半導体 秋月電子通商 電子部品 ネット通販

TPR-105_dim

角が欠けてる方がLED。LEDは1から2に電流を流す。フォトトランジスタは3から4に電流を流して電流値を見る。データシートによるとLEDの方は20mAなので5Vから引っ張って抵抗は250Ωがないので220Ωで。フォトトランジスタの方は同じく5Vでやると1MΩで割といい感じになった。

TPR-105F_ブレッドボード

 

これをシリアル通信で送ってprocessingで表示したい。

arduinoの方のコードは超シンプル。

void setup () {
  Serial.begin(9600);
}

void loop () {
  Serial.write(analogRead(A1));
}

processing側。

import processing.serial.*;
Serial port;
PFont ricty;
int[] y;
int   x;
int   val;
int   size;
int   time;

void setup() {
  size(1000, 600);
  port = new Serial(this, "SERIAL_PORT_PATH", 9600);
  size = width/2;
  x = 0;
  y = new int[size];
  val = 0;
  time = 0;
  ricty = loadFont("Ricty-Regular-24.vlw"); // ここはお好みで
  textFont(ricty, 24);
  smooth();
}

void draw() {
  for (int i=0; i<size-1; ++i) y[i] = y[i+1];
  y[size-1] = int(map(val, 0, 255, -height, height));

  // frame
  background(40);
  stroke(#999999);
  strokeWeight(1);
  line(0, height/2, width, height/2);
  line(0, height/4, width, height/4);
  line(0, 3*height/4, width, 3*height/4);
  line(width-time%(width/2), 0, width-time%(width/2), height);
  line(width/2-time%(width/2), 0, width/2-time%(width/2), height);
  if (time % (width/2) == 0) time = 0;
  fill(40, 100);
  rect(0, 0, width, height);

  fill(220);
  text(val, 10, 35);

  stroke(#eebbcc);
  strokeWeight(2);
  for (int i=0; i<size; ++i) {
    point(i, -y[i]/3+height/2);
  }

  ++time;
}

void serialEvent(Serial p) {
  val = port.read();
}

シリアル通信で得た値をオシロスコープ風に点のプロットで 表示する。配列yにsizeまでの数の過去の値を保存しておいて、それを更新していくという感じ。フォトリフレクタに手を近づけたり離したりすると以下のようになる。

スクリーンショット_2014-01-06_3_06_18-4

フォトリフレクタ自体はライントレースとかに使えるようなのでこれからいろいろやってみる。

関連記事

fitbitの睡眠スコアを90弱で安定させる良い睡眠を続ける簡単な方法

m1 ipad pro 12.9 2021のusb-cハブはコレがベスト

Time Machine不要!Macを11.2.3にダウングレードして原神をm1 macbook airでプレイする

MH-Z19CとM5StickCで二酸化炭素濃度モニタリング

【神軽量HMD】Avegant Glyph 改造: 瓶詰堂さんのaltglyphを作った

PC、iPad、Android、switchもドックいらず!あまりに万能なusb-cハブが最強だった

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です