LoginSignup
0
0

More than 1 year has passed since last update.

自動楽器

Last updated at Posted at 2020-02-15

サウンドミニハッカソン#8自動楽器
https://effectorhack.connpass.com/event/164867/
のイベントで作った備忘録です。

できたもの

苦労したところ

モーターをまとめて動かそうとすると動きが悪くなる
3つくらいまでなら割と動く。
たくさんつけると、休ませながらでないと動きが悪くなる。

モーターを動かし続けてしまったりすると、モーターや回路に悪いことがおこるので気を付ける。

プログラム

グレイコードなシーケンスをもとに、
3つのモーターまでを同時に動かすような形にしてみた。
シリアルモニターに出力される数字が1のモーターが動作するイメージ。

初回動作時はモーターが元気だけど、これでも動きがかなり弱まってしまうので、
ディレイの値を大きめにした方が良いかも。

20200216.ino
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(7, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);

    Serial.begin(9600); 
}

void mPlay1(int val)
{
  byte b = (val & 0x01) != 0;
  if(b){digitalWrite(7, HIGH);};

  b = (val & 0x02) != 0;
  if(b){digitalWrite(12, HIGH);};

  b = (val & 0x04) != 0;
  if(b){digitalWrite(11, HIGH);};
}

void mPlay2(int val)
{
  byte b = (val & 0x08) != 0;
  if(b){digitalWrite(10, HIGH);};

  b = (val & 0x10) != 0;
  if(b){digitalWrite(9, HIGH);};

  b = (val & 0x20) != 0;
  if(b){digitalWrite(8, HIGH);};
}

void mStop()
{
  digitalWrite(7, LOW);  
  digitalWrite(12, LOW);  
  digitalWrite(11, LOW);  
  digitalWrite(10, LOW);  
  digitalWrite(9, LOW); 
  digitalWrite(8, LOW);   
}



int v = 1;
// the loop function runs over and over again forever
void loop() {

  v = v ^ (v >> 1);
  v++;

  Serial.print(v, BIN);
  Serial.print("\n");

  mPlay1(v);
  delay(50);
  mStop();
  delay(50);

  mPlay2(v);
  delay(50);

  mStop();
  delay(500);
}

ディレイを多めにしたときのモーターの動き
https://twitter.com/tatmos/status/1228829692259471365

・・・
追記(21-08-12):
ArduinoMegaを使って数は増やしていますが、基本同じ構成
https://www.nicovideo.jp/watch/sm39075386

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0