👻

ピエゾ素子を使ってみる

に公開

イントロ

本記事ではピエゾ素子の紹介、使い方の説明をします。

その前に、ピエゾ素子って細い線で配線されていることが多いので次のように補強すると接触不良が減るのでおすすめです。

まずピエゾ素子とはなんでしょうか?

最初に次のような回路を作成してください。

そしてピエゾ素子を指で押しつぶしたりしてみてください。
すると、なんとLEDが点灯するではありませんか。

このようにピエゾ素子は、圧力を電気に変換するための素子!
反対もできますし、その反対の仕組みを応用してスピーカーも作られていたりします。

つまりピエゾ素子で発生した電気をマイコンで読み取ることで、振動を検知することが可能ということです。

そして音も振動して伝わる、つまり音センサーとしてピエゾ素子を利用することも可能だったりするわけです。

波形の表示


抵抗は1MΩのものを使用してください。この抵抗は何に必要なのでしょうか?
実はピエゾ素子は一時的に電気を蓄える性質があります。
信じられない、というならイントロの回路でピエゾを数回叩いた上でLEDに接続してみてください。

そうしたら電圧を描画しましょう。今回はProcessingを使いましょう。

下準備1 Arduino

Processingと連携するためにFirmataと呼ばれるライブラリを使用します。
まずArduino IDEにFirmataライブラリをインストールします

①「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を選択します。
②「検索をフィルタ」の窓にfirmataと入力し,検索された「Firmata」をインストールします
③インストールが終わったら,「ファイル」→「スケッチ例」→「Firmata」→「StandardFirmata」選択します。
④読み込まれたスケッチをそのままArduinoに書き込みます。
⑤以上で作業は終わりです。

下準備2 Processing

ProcessingにFirmataでArduinoとやり取るするためのライブラリをインストールします。

①「ファイル」→「サンプル」を選択。
②「サンプルを追加」を選択。
③「Livraries」のタブを選択して,「Arduino(Firmata)」を選択して「Install」を選択。
④インストールが終わったらProcessingのウインドウを閉じていったんProcessingを終了する。

描画!

import processing.serial.*;
import cc.arduino.*;

Arduino arduino;
int sensorPin = 0;
ArrayList<Integer> history = new ArrayList<Integer>();

void setup() {
  size(800, 400);
  // 利用可能なポート一覧を表示
  String[] ports = Arduino.list();
  println("利用可能なポート:");
  for (int i = 0; i < ports.length; i++) {
    println(i + ": " + ports[i]);
  }

  // 接続先ポートを番号で指定(0番が最初のポート)
  int index = 0;
  String portName = ports[index];
  println("使用ポート: " + portName);

  // Arduino接続
  try {
    arduino = new Arduino(this, portName, 57600);
  } catch (Exception e) {
    println("接続失敗: " + portName);
    e.printStackTrace();
    exit();
  }

  arduino.pinMode(sensorPin, Arduino.ANALOG);
  println("開始");
}

void draw() {
  background(20);
  int value = arduino.analogRead(sensorPin);
  history.add(value);
  if (history.size() > width) history.remove(0);

  stroke(100, 255, 100);
  strokeWeight(2);
  noFill();
  beginShape();
  for (int i = 0; i < history.size(); i++) {
    float y = map(history.get(i), 0, 1023, height - 20, 20);
    vertex(i, y);
  }
  endShape();
}

どうでしょう、つまんだりすると波形がウニョウニョするのではないでしょうか?

お疲れ様でしたー

Discussion