皆さん「自動ティンシャ機」なるものを見たことはあるでしょうか?
私は落合陽一さんの展覧会で昔見たことがある程度だったのですが、ひょんなことから自分で作ることになったので、「作ったよ!メモ!」程度で投稿(初)させていただきます。
↓これが自動ティンシャ鳴らし機(動画が載せれないので写真のみ。。。)
作りは非常に簡単で、超音波センサーで一定の距離を測定して、閾値を超えて短くなったら、サーボモーターが動き、ティンシャを鳴らすよといった構成です。
コードはこちら↓↓↓(ArduinoUNO)
#include <Servo.h>
//超音波センサー初期設定
int TRIG = 3;
int ECHO = 2;
double duration = 0;
double distance = 0;
double speed_of_sound = 331.5 + 0.6 * 20;
//Servo初期設定
Servo myservo;
const int SV_PIN = 7;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ECHO, INPUT);
pinMode(TRIG, OUTPUT);
myservo.attach(SV_PIN, 500, 2400);
myservo.write(0);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHO, HIGH);
if(duration > 0){
duration = duration / 2;
distance = duration * speed_of_sound * 100/1000000;
Serial.print("Distance:");
Serial.print(distance);
Serial.println(" cm");
if(distance < 90){
delayMicroseconds(20000);
digitalWrite(TRIG, LOW);
digitalWrite(ECHO, LOW);
delay(1000);
myservo.write(130);
delay(1000);
myservo.write(0);
delay(5000);
myservo.write(130);
delay(1000);
myservo.write(0);
delay(5000);
myservo.write(130);
delay(1000);
myservo.write(0);
delay(5000);
}
}
delay(500);
}
全然簡単じゃん。
と思っていたのもつかの間。
まあ綺麗に鳴らない。
ただ単にサーボモーターで動かそうとしても綺麗な音色が出ないんですね。
色々と試行錯誤をして写真のような形にまとまって最終的には綺麗な音色が自動で鳴るようになりましたが。
人と同じように楽器を自動で鳴らすって難しいんだなあと感じた試作でした。
綺麗に鳴るまでの道のりはまた機会があれば更新します。。。
初投稿はこんなもので。
今後ティンシャ鳴らし機が必要になった方のための一助になれば幸いです。