藤本健のDigital Audio Laboratory
第955回
「Arduino Uno」でシンセサイザを自作してみた。前編
2022年9月12日 11:08
前回の記事でMaker Faire Tokyo 2022をレポートしたが、個人的に一番興味をそそったのが、Arduino Unoを用いたシンセサイザだった。
これまで「Arudino」(アルデュイーノ)にはなんとなく興味は持ちつつも、素人には難しいもの……と思い込んで、ずっと敬遠していた。が、もしかして、これは結構楽しいものなのでは、と今さらながら思って、週明けさっそく入手して遊んでみたところ、想像以上に楽しい機材であることが判明。どうしてもっと早く手にしなかったのかと後悔しているところだ。
というわけで、“音で遊ぶ”という観点で、2週に分けてArduinoを取り上げてみることにする。
Maker Faireの展示に触発され、初Arduinoにトライ
ご存じの方からすれば、本当に今さらどうして、と言われてしまいそうだが、筆者がArduinoに触れたのは今回が初めて。もちろん、今まで、いろいろなところで目にしたことはあったし、それで動いている機材もいっぱいレポートしていたが、なんとなく自分で扱うのは無理な難しい機材、と自分の興味から除外していた。
たぶんArduinoの存在を知ったのと、Raspberry Piを知ったのは同時期だったような気がする。
そのとき「Raspberry Piは安く入手できる本格的なパソコン」、「Arduinoは自分でハードウェア、ソフトウェアを組んで使うマイコン」と頭で分類した上で、「自分が触れるのはRaspberry Piのほうだ」と判断し、Arduinoを切り捨ててしまっていた。
この分類自体、間違っていなかったとは思うけれど、Raspberry PiはLinuxが分からないと、すぐに暗礁に乗り上げてしまい、結局まともに使えないとあきらめてしまった。
ブラウザでネットを見たり、Officeソフトで事務作業をするだけであれば、Raspberry Piで十分使えるけれど、DTMで遊んでみたいとか、楽器にしてみたい、などと思うと、どうしてもコンパイル作業とかが登場してきて、分からなくなってしまうのは、PCでUbuntuを入れて使うのと同様。結果、苦手意識が強くなってしまい、最近遠ざかってしまっているのが実際のところだ。
そんな中、先日のMaker Faireで、出展していたISGK Instrumentsの石垣良氏から、「ここで展示しているシンセサイザは、Arduinoで一番安いArduino Unoに簡単な回路を接続しただけのもので動きます。ソフトはすべてオープンソースにしているので、誰でも無料で使えますよ」と紹介され、「これは試してみたいかも!」と思ったのだ。
未来の電子楽器大集合!? ものづくり祭典「Maker Faire」に行ってみた
その時点ではArduino Unoがいくらぐらいの機材なのかも知らなかったが、石垣氏から「Arduino Unoは互換品がいろいろあり、そうした互換品でも動きます。安いと500円くらいで売ってますよ」と言われ、ますます興味を持ったのだ。その公開しているという石垣氏開発のシンセサイザ、DigitalSynth VRA8-Uのサイトがこちらだ。
前回の記事でも紹介したが、そのArduino Unoで作ったシンセサイザでのデモを撮影したのが以下のビデオだ。
騒音の中で見せてもらったデモではあったが、かなりキレイな音でパワフルなシンセサイザであったことに驚くとともに、それがこんな小さな機材で動いているなら、ますます試してみたい、と思うようになった。
とはいえ、ホントに自分ひとりで動かすことができるのか、あまり自信がなかったのも事実。石垣氏とは、だいぶ以前からSNSで繋がっていたので、「もし困ったら相談させてほしい」と伝えたところ、快諾いただいたので、翌日にはAmazonで注文することに。
石垣氏からは、「互換品はいろいろありますが不良品でなければ、Arduino Uno Rev3互換ボードなら何でも大丈夫です。以前は300円程度から買えたのですが、最近はだいぶ値段も上がってしまっているようです。私は純正品以外だと品質が安定しているこの製品を使っています」とAmazonで1,450円で販売されている製品を紹介してもらったので、それを購入した。
届いた小さな箱を開けてみると、普通のUSBケーブルと小さなArduino Unoのボードが入っている。これを見て、はじめて「なんだ、プログラムはPCから転送して書き込むのか」と理解した次第。無知にもほどがあるだろ、と𠮟られてしまいそうだが、それほど何も知らなかったのが事実である。
比較対象としては正しくないかもしれないが、2年ほど前、ある機材に搭載されているPICマイコンのROMを書き換えてみようと、PICライターを購入したことがあった。
純正品が高いので安い互換品を買ったところ(それでも8,000円くらいしたけれど)、結局うまく動かず、使えないまま、お手上げになった苦い経験もあり、Arduinoも同様の操作が必要なのでは? と思っていた。が、チップの抜き差しなど不要で、直接USBでPCと接続してプログラムを転送できるのであれば、ハードルは低そうだ。
まずは“Lチカ”から始めてみる
ただ、コンパイルとかしなくちゃいけないとなると、それも難しそうに思えるところ。先ほどの石垣氏のサイトを見ると、Githubからスケッチなるものをダウンロードしてインストールするように、とあるが、スケッチが何なのかすらわからない。
ちょっと検索してみると、どうやらソースプログラムのことのようで、やはりこれをコンパイルして転送する必要があるようだ。となると、やはりコンパイラを用意して、各種ファイルを揃えた上で、Makeコマンドとかでコンパイルして……と難しそうなことが頭に浮かんで、どうしようとひるんでいたのだが、石垣氏からは「機材が届いたら、まずは“Lチカ”からやってみましょう」と励ましのお言葉。
Lチカとは、LEDチカチカのことでマイコンプログラミングではお決まりの練習プログラム。
コンピュータのプログラムならHello Worldを画面表示させるところから始めるのが定番だけど、画面表示ができないマイコンの場合はLEDを点滅させることから始める、というわけだ。もちろん、そんなプログラミングをする必要もなく、いきなりあのすごいシンセを動かせるのが、今回の話のポイントではあるけれど、せっかくならちょっとだけArduinoの世界をかじってみるのも面白そう。
入門書も買わずにできるのだろうか……という不安は10分で消え去った。
ネットで検索してみるとArduino IDEなるソフトがフリーで配布されているのでこれをインストールすれば簡単にコンパイルでき、Arduinoに実行プログラムを転送できるらしい。
さっそくインストールして起動。どこかのサイトからLチカのプログラムでも探してみようと思ったら、そもそも「スケッチ例」なるサンプルプログラムがいっぱい収録されており、その上から3番目に“Blink”なるLチカのプログラムが収録されていた。
これを読み込んで「マイコンボードに書き込む」という説明表示がされる矢印ボタンをクリックしてみたら、自動でコンパイルされて、USB経由でArduino Unoに転送されるとともに、Arudino Unoの基板上にあるLEDが点滅を開始した。
あまりのあっけなさに拍子抜けしてしまった。そもそもLEDを用意してポートに接続しなくてはいけないのかな? と思っていたのに、そのLEDも搭載されていたとは……。
短いプログラムを実行させるだけであれば、コンパイルから転送まで自動で行なってくれるし、エラーの可能性のある自分で作ったプログラムなら、いったんコンパイルして、エラーがないことを確認してから転送ということもできるようだ。
こうなると、やはり音を出してみたい。
ただしArduino UnoにLEDは搭載されているけれどスピーカーやオーディオ出力は搭載されていない。となると、以前IchigoJamを使った際に利用した圧電ブザーを利用するという手はありそう。
検索してみると、まさにその圧電ブザーを利用して音程を鳴らすためのtoneという関数があることも発見。で、探してみるとスケッチ例の中に、まさにそのtoneを使うプログラムも複数あるではないか。
が、見てみるとtone keyboardなるスケッチは、スピーカー=圧電ブザーのほかに、鍵盤に相当する3つのスイッチを接続せよとコメントに記載されている。
また、toneMultipleは3つのスピーカーを接続して和音を出すものであり、tonePitchFollowerはスピーカーのほかに、フォトレジスター=光センサーと抵抗を設置せよと記載されていて、光の強さによって音を変えるプログラムのようだ。まずは音が出るかだけ確認してみたかったので、もう一つあったtoneMelodyというプログラムを実行してみることにした。
このプログラムはデジタル端子の8番にスピーカーを接続すればいいだけのようだから簡単そう。予め持っていたブレッドボードに圧電ブザーを設置し、ジャンパー線で8番のピンとグランドに接続して実行してみたところ、あっさりと演奏させることができた。それがこのビデオだ。
以前、IchigoJamで実験したときと同じ音である。まあ、同じ圧電ブザーを使っていて、単純に矩形波を送っているだけだから当然ではあるけれど、とりあえず音が出せ、音程も簡単に設定できることはわかった。
tone(ポート名,周波数);
……というコマンドというか関数を使えば鳴らすことができるようなのだ。また音を止めるときは……
noTone(ポート名);
……で鳴りやむ。一方、先ほどのスケッチ例では、プログラムの冒頭に……
#include "pitches.h"
……とヘッダープログラムが読み込まれており、その中身を見ると、音階に周波数が定義されているものとなっている。これを使えば、いちいち周波数を記載しなくても、音階名で鳴らすことができるわけだ。
プログラムの記述を見ても、C言語そっくりだなと思って調べてみたら、まさにその通りだった。最近、Cでプログラムなんて書いたことはないけれど、30~40年前にはいろいろ書いていたので、なんとかなりそうな気もする。
試しにスケッチ例を改造してみたり、自分で簡単なプログラムを書くと、ちゃんとそれに対応した形で音が鳴る。入力ミスなどで、コンパイル時にエラーが出てしまうこともしばしばだが、どこに問題があるかも、Arduino IDEがちゃんと指摘してくれる。それを元に修正して、転送すると、思い通りに動いてくれるからだんだんと楽しくなってくる。
秋葉原で必要なパーツを購入する
早く、例のシンセを動かしてみたいとワクワクしてくるが、その前にやるべきことがある。
そう、石垣氏のサイトの説明によると抵抗2本、セラミックコンデンサ2本、電解コンデンサ2本とオーディオ出力端子を使った簡単な回路を取り付ける必要がある。
が、その部品が手元にない。そこで、木曜日に30分だけ空いた時間に秋葉原に行って購入。抵抗は100本セットで150円、電解コンデンサは10本セットで100円と無駄に多くなってしまったのと、セラミックコンデンサを見つけられず、1本15円と少し割高だけど、指定の0.1μFのフィルムコンデンサがあったので、これでよし、とした。
それと50円の3.5mmのステレオ出力端子に、予備のブレッドボード、200円を入れて、トータル530円のスピード買い物で秋葉原を去ったのだった。
これらの部品をブレッドボードに乗せて回路を組むわけだが、ブレッドボードだからはんだ付けの必要もなし。石垣氏のページには回路図とともに、ご丁寧にブレッドボードの配線図まで用意されているからこれを参考にして作ってみた。
ここで改めて、石垣氏の回路図を見てみると、PWM出力をするための5番端子が左チャンネル、同じくPWM出力の11番端子が右チャンネルとして使われているステレオの構成になっている。抵抗とセラミックコンデンサでローパスフィルタを実現するとともに、電解コンデンサでDC成分をカットしている形になっているようだが、Arduino側からみれば先ほどの圧電ブザーを使った回路も、この抵抗とコンデンサで構成された回路も同じではないかと思ったのだ。
そこで、試しに先ほどのスケッチ例をちょっとだけ改良し、8番ピンではなく11番ピンに出力する形にするとともに、演奏が繰り返されるようにした上で、この石垣氏の回路で音を出すとともに、アンプを通じて音を出してみたのがこちら。
このビデオから、どこまで違いを実感できるかはわからないけれど、圧電ブザーによる音と次元が異なるキレイな音でビックリした。
まあ、アナログ回路がまったく違うから当然といえば当然なのだがArduinoって、こんなにキレイないい音が出せるのかと感激してしまったのだ。この前、Makerfaireでデモを見たときも、キレイな音だなと思ったが、これはやはり期待ができそう。というわけで、シンセを動かす本番は次回、紹介していくことにする。