基本演習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