基本演習2 簡単な入力インタフェースの作成とインタラクション

 【演習1】 鉛筆シンセサイザー(可変抵抗器を用いた電圧入力のインタフェース利用)

 

1  次のプログラムをコンパイルして,アップロードする。

ーーーーーーーーーーーーーーーーーーーー

int ADPin = 0;    //線をなぞるクリップ接続ピンの定義
int outPin = 9;    //圧電ブザー繋がるピンの定義
int ADVal;        //A/D変換値一時格納用変数

void setup() {
  pinMode(outPin, OUTPUT);      //圧電ブザーの繋がるピンを出力に
}

    

void loop() {
  ADVal = analogRead(ADPin);        // 線の位置を電圧で取得
  digitalWrite(outPin, HIGH);          //圧電ブザーの電圧をHighに
  delayMicroseconds(ADVal);        //A/D変換値μ秒のウエイト
  digitalWrite(outPin, LOW);           //圧電ブザーの電圧をLowに
  delayMicroseconds(ADVal);        //A/D変換値μ秒のウエイト
}

ーーーーーーーーーーーーーーーーーーーー

 

2  縦15ミリ,横120ミリ程度の大きさの厚紙に,5ミリ程度の幅で横方向(120ミリ)に,鉛筆で黒く塗りつぶす。

 

3 2個のクリップを,ブレッドボードに差し込めるように加工してから,厚紙の両端をそれぞれクリップで留めて,一方をVCC(+5V,赤ライン),もう一方をGND(0V,水色ライン)に接続する。

 

4 スピーカーの黒線(一方)をGND(0V,水色ライン)に,赤線(もう一方)を「d9」の端子に接続する。

 

5 ai0の端子に接続したジャンパー線の,もう一方を厚紙上の鉛筆で黒く塗りつぶした部分に接触させて,いろんな音を奏でてみる。 


【演習2】タッチセンサー(抵抗との組み合わせによる静電容量式)

1  次のプログラムをコンパイルして,アップロードする。

ーーーーーーーーーーーーーーーーーーーー

int prevt = 0;
int t = 0;
int threshold = 5;

void setup()
{
  pinMode(8,OUTPUT);
  pinMode(9,INPUT);
  pinMode(13,OUTPUT);
}

void loop()
{ 
  t = 0;

  // パルスの立ち上げ
  digitalWrite(8, HIGH);

  // 立ち上がりまでの時間計測
  while (digitalRead(9)!=HIGH) t++;

  // 放電するまで待つ
  digitalWrite(8, LOW);  
  delay(1);

  // ローパスフィルタ
  //t = 0.8 * prevt + 0.2 * t;
  //prevt = t;

  // LED点灯
  if( t > threshold ){
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }  
}

ーーーーーーーーーーーーーーーーーーーー 

2 d8とd9との間を,1MΩの抵抗でつなぐ

3 d9端子にジャンパー線を接続して,他端を指で触れるか,抵抗のd9端子側の足に触れると,d13のLEDが光る


参考 【Arduino】抵抗1本で作る静電容量式のタッチセンサ

https://nn-hokuson.hatenablog.com/entry/2017/03/22/200454

 

【演習3】 タッチセンサー(抵抗との組み合わせによる静電容量式 その2)

 「演習2」と同じものを,静電容量ライブラリを利用してつくる

 1 ホームページからライブラリCapacitiveSensor-0.5.1.zipをダウンロードして解凍して、フォルダ名を「CapacitiveSensor」に変更(末尾の数字部分を削除)し,arduinoのlibrary(arduino0023の実行ファイル(arduino.exe)があるフォルダ内の「libraries」フォルダ)に配置する。


2 次のプログラムをコンパイルして,アップロードする。

ーーーーーーーーーーーーーーーーーーーー

#include <CapacitiveSensor.h>

CapacitiveSensor   cs_4_2 = CapacitiveSensor(8,9);        // 1M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired

void setup()                    
{
   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   pinMode(13, OUTPUT);
}

void loop()                    
{
    long start = millis();
    long total1 =  cs_4_2.capacitiveSensor(30);

    if(total1>=800){
      digitalWrite(13, HIGH);
    }
    else{
      digitalWrite(13, LOW);
    }
    delay(10);                             // arbitrary delay to limit data to serial port
}

ーーーーーーーーーーーーーーーーーーーー

3 d8とd9との間を,1MΩの抵抗でつなぐ

4 d9端子にジャンパー線を接続して,他端を指で触れるか,抵抗のd9端子側の足に触れると,d13のLEDが光る

 

参考 Arduinoでタッチセンサ(静電容量ライブラリ)を使う方法、スイッチレスで外部入力

https://voltechno.com/blog/post-20037/

 

【演習4】非接触の静電容量式タッチパネル

1 【演習3】を行っていない場合は,【演習3】1の手順で,静電容量ライブラリをArduino0023に導入する。

2 次のプログラムをコンパイルして,アップロードする。

ーーーーーーーーーーーーーーーーーーーー

#include <CapacitiveSensor.h>
CapacitiveSensor touchPad = CapacitiveSensor(8, 9);

void setup() {
pinMode(11,OUTPUT);
touchPad.set_CS_AutocaL_Millis(0xFFFFFFFF);
}

void loop() {
static boolean touch_state = false;
static boolean last_touch_state = false;
long val=0;
int i;
int pwm;

// get value
for (i = 0; i < 10; i++){
val = val + touchPad.capacitiveSensor(100);
}
val = val / 10;

// hysteresis comparator
if (val > 550) {
touch_state = true;
} else {
touch_state = false;
}
pwm = (val - 200) * 2;
if (pwm < 30) {
pwm = 0;
}
if (pwm > 255) {
pwm = 240;
}

analogWrite(11, pwm);
}
ーーーーーーーーーーーーーーーーーーーー

 

3 d8とd9との間を,10MΩの抵抗でつなぐ

4 縦7cm,横4cmの厚紙の片面に,アルミ箔を貼り付けたものを用意して,クリップを利用して,d9端子に接続する。

5 d11端子にLEDを接続する。

※PWM制御によりLEDの輝度調整や,ラジコンサーボモータ(回転角)の制御ができる。

※PWM制御ができる出力端子は,d3,d5,d6,d9,d10,d11のみ

 

 6 d9端子のアルミ箔に手を近づけたり,触れると,d11のLEDが光る(距離によって明るさも調整できる)。

 

参考 非接触の静電容量式センサを作ってLED調光をやってみた

https://nature3d.net/development/touchless_capacitive_sensor.html

このブログの人気の投稿

手順4【Windows11用】 com0comのエラー(署名の問題)の手動での回避方法

手順3 com0com 3.0.0.0をインストール

手順1 Arduino IDE(Arduino 0023)をダウンロードしてインストールする