Arduinoでシンセサイザーを作ろう!(その1)
今年の夏は例年に増して暑い日が続いてますが、こう暑くてはアウトドア的な活動もアウトなので、インドアにこもってゴソゴソやっています。
先日、紹介したArduinoベースのゲーム機のエミュレータですが、あれから発注フォームに何度か入力してポチリそうになりましたが、今のところ思い留まっています。
Arduinoベースのゲームボーイのようなコンソール「ODROID-GO」が安い!
https://ttripper.blogspot.com/2018/06/arduinoodroid-go.html
ポチリ病の対策として、以前買った学研のJapanino(Arduino)を引っ張り出してきました。
Japanino特設サイト | 大人の科学.net
http://otonanokagaku.net/japanino/
これを買ったのは8年程前のことで、何をどうしていたのか?サッパリです。以前書いたソースも記憶もすっかりありません。
あれからパソコンも変って開発環境も無くなっていたので、再セットアップしてる内に段々と思い出してきました。そうそう、こんな感じでした。
懐かしいというほど強い印象は残っていませんが、以前はサーボをコントロールしてロボットアームで絵を画くことに熱中していました。
Arduinoでロボットアーム型のプロッタを作る方法
https://ttripper.blogspot.com/2018/07/arduino_21.html
この手の小さなマイコンボートは何種類か販売されています。
最もポピュラーなラズベリーパイはまだ買ったことがありませんが、最近は高性能化しすぎて一通り揃えると価格的にもパソコンと何ら変わらなくなってきています。高性能化することでマイコンボートとしての本来の意味合いを失いつつあるようにも思います。
最新の「Raspberry Pi 3 Model B+」は1.4GHzのクアッドコアに3D対応のGPUも搭載していてWi-FiやBluetoothにも対応しています。ボードは5千円程ですが、周辺機器のモニターやバッテリー、電源等を揃えていくと2万円弱かかると思います。ただそれで1~2万円のタブレットと比較するとどうか?というと、さ程でもなく中途半端位な仕様になっています。ラズパイを買うなら安い中華PADを買ったほうがコストパフォーマンス的にはいいかもしれません。
一方、日本製の「IchigoJam」は簡単なBASICが動作するボードですが、キット価格が1500円程と安いのが特徴です。単独で動作するのでプログラムするのにパソコン等は必要ありませんが、逆にキーボードやモニターといった周辺機器が別途必要になります。
IchigoJam
https://ichigojam.net/
IchigoJamは非常にユニークで面白いマイコンボードですが、問題は整数しか扱えないことと、メモリーが1KBと非常に小さいことです。ちょっとしたプログラムを作るのにも苦労するかと思います。
コンピュータの原理的な学習教材にはいいと思いますが、電子工作のベースとしては実数が扱えないは致命的かもしれません。ということで現在塩漬け中です。
Arduinoは値段的にも2~3千円と手頃で性能もそこそこなので、工作用のベースにはお手頃かもしれません。Amazonでも実験用周辺部品がタップリ付いて3千円程で売っています。
さて、前置きが長くなりましたが、今回はArduinoで簡単なシンセサイザーを作ってみたいと思います。イメージ的には簡単なステップ・シーケンサーを持ったグルーブボックスのようなものです。
第1回目として簡単なプログラム(スケッチ)を作ってみました。
int tempo = 1000/8; int beet[] = {100,30,30,30,200,30,30,30,100,30,30,30,200,30,800,800}; void setup(){ } void loop() { for (int i=0; i<16; i++) { tone(13, beet[i],tempo); delay(analogRead(0)); } } |
プログラムはシンプルで「beet」配列に格納した16ステップの周波数をループして再生しているだけです。
「for (int i=0; i<16; i++)」は「i」の値を0-15に変えながら16回ループします。
「tone(13, beet[i],tempo)」は13番ピンに「beet」の周波数(Hz)を「tempo」のミリ秒出力するという意味になります。
「delay(analogRead(0))」はアナログの0番ピンの値(ミリ秒) だけ処理を一時停止します。ボリュームで再生速度を調整します。
配線はスピーカーをGNDと13番ピン、ボリューム(10kΩ程度)をそれぞれ+5V、GND、アナログ0番ピンに直接接続するだけです。
日本語リファレンスはこちらのサイトが参考になるかと思います。
Arduino 日本語リファレンス
http://www.musashinodenpa.com/arduino/ref/index.php
プログラムが出来たら三角ボタンを押して検証(コンパイル)します。
エラーがなければマイコンボートに書き込みます。
書き込み終了後すぐに動作を始めます。
Arduino Synthesizer 16 step sequencer
https://youtu.be/G5FIDuMtnHU
こんな感じでArduinoではアナログとデジタルを簡単に扱うことができます。
夏休特別企画として、しばらくこの企画を続けたいと思っています。
ハードとソフトを扱うので、お子様の夏休みの工作にもピッタリかと思います。
興味があれば是非チャレンジしてみてください。