はじめに:Arduinoで音楽を奏でる楽しさ

「電子工作で楽器を作ってみたい!」そう思ったことはありませんか?

今回は、Arduino UNO R4と圧電ブザーを使って、本格的な電子ピアノを自作します。プログラミングで音階をコントロールし、実際に曲を演奏できる楽器を、たった1時間程度で作ることができます。

この記事では、音が鳴る仕組みから回路設計、プログラミングまで、初心者の方にもわかりやすく丁寧に解説していきます。記事の最後には、実際にArduinoが「パプリカ」を自動演奏する様子もお見せします!

📝 この記事で学べること:

  • 圧電ブザーから音が鳴る仕組み
  • tone関数を使った音階の生成方法
  • 電子ピアノの回路設計と配線
  • 実際に曲を演奏するプログラミング技術

💡 Arduinoが初めての方へ
Arduino IDEのインストールや基本的な使い方については、こちらの記事をご覧ください:
👉 【Arduino入門】開発環境の準備とLED点滅でHello World!

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit


🎵 必要な部品リスト

必須部品

部品名 数量 用途 参考価格
Arduino UNO R4 Minima/WiFi 1個 メイン制御ボード 約3,000〜4,000円
圧電ブザー(パッシブ型) 1個 音を鳴らすスピーカー 約50〜100円
タクトスイッチ 8個 ピアノの鍵盤として使用 約10円/個
ブレッドボード 1個 配線用基板 約300円
ジャンパー線(オス-オス) 20本程度 配線接続 約500円(セット)

オプション部品(視覚効果用)

部品名 数量 用途 参考価格
LED(赤・緑など) 8個 押された鍵盤を光らせる 約10円/個
カーボン抵抗 330Ω 8個 LED保護用の電流制限 約5円/個
電子ピアノ製作に必要な部品一覧

電子ピアノ製作に必要な部品一覧

💡 推奨スターターキットのご紹介

これから始める方には、Arduino UNO R4と基本部品がセットになったスターターキットがおすすめです。個別に揃えるより経済的で、すぐに始められます。

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 スターターキット

Arduino UNO R4 スターターキット

ℹ️ 重要な注意点
圧電ブザーには「アクティブ型」と「パッシブ型」があります。今回使用するのは**パッシブ型(自励式)**です。アクティブ型は単一の音しか鳴らせないため、必ずパッシブ型を選んでください。パッケージに「Passive Buzzer」または「圧電スピーカー」と記載されているものを選びましょう。


🔧 圧電ブザーの仕組みを理解しよう

圧電効果とは?

圧電ブザーは、**圧電効果(ピエゾ効果)**という物理現象を利用して音を鳴らします。圧電セラミックと呼ばれる特殊な素材は、電圧をかけると物理的に伸び縮みする性質を持っています。

音が鳴る仕組み:

  1. 電圧ON → 圧電セラミックが伸びる → 金属板が押される → 「カチッ」
  2. 電圧OFF → 圧電セラミックが縮む → 金属板が引っ張られる → 「カチッ」
  3. この伸縮を高速で繰り返す(例:毎秒440回)→ 連続した音(ラの音)として聞こえる
圧電ブザーの構造と動作原理の図解

圧電ブザーの動作原理:電圧のON/OFFで金属板が振動し、空気を振動させて音を発生

音階と周波数の関係

音の高さ(音階)は、**振動の速さ(周波数)**で決まります。周波数が高いほど高い音、低いほど低い音になります。

例:

  • ド(C4): 523.3 Hz(1秒間に523.3回振動)
  • ラ(A4): 880 Hz(1秒間に880回振動)

つまり、Arduinoから目的の音階に対応する周波数のパルス信号を出力すれば、圧電ブザーがその音階を鳴らしてくれるのです!

📐 回路設計と配線方法

回路図の全体構成

Arduino UNO R4と圧電ブザーを使った電子ピアノの回路図

電子ピアノの回路図:8つのタクトスイッチで音階を制御

回路の構成要素:

接続先ピン 部品 役割
D2 圧電ブザー tone関数で音を出力するピン
D3〜D10 タクトスイッチ(8個) 各音階の入力(内部プルアップ使用)
D3〜D10 LED + 330Ω抵抗(各8個) 押された鍵盤を視覚的に表示(オプション)
5V / GND 電源ライン Arduinoから電源を供給

配線のポイント

  1. 圧電ブザーの接続

    • プラス(赤)→ D2ピン
    • マイナス(黒)→ GND
  2. タクトスイッチの接続

    • 一方の端子 → D3〜D10ピン(各1本ずつ)
    • もう一方の端子 → GND(共通)
    • プログラムで内部プルアップを有効化するため、プルアップ抵抗は不要
  3. LED(オプション)の接続

    • アノード(長い足)→ 各ピン(D3〜D10)と330Ω抵抗経由
    • カソード(短い足)→ GND(共通)

💡 LED抵抗値の計算方法
LEDを使う場合の抵抗値計算については、こちらの記事で詳しく解説しています:
👉 電子工作の登竜門|LEDを光らせる【オームの法則】

ブレッドボード配線例

電子ピアノのブレッドボード配線写真

ブレッドボード上の配線例:カラフルなジャンパー線で見やすく配線

配線のコツ:

  • ジャンパー線の色を統一すると、後からトラブルシューティングがしやすくなります
    • 赤:5V電源
    • 黒:GND
    • 青:デジタル入力
    • 黄:デジタル出力
  • 配線が交差しないように、できるだけシンプルなルートを選びましょう

💻 プログラムコードの実装

完全なソースコード

// Arduino電子ピアノプログラム
// 圧電ブザーで8音階を演奏

void setup()
{
    // D3~D10ピンを入力モードに設定し、内部プルアップを有効化
    for(int i=3; i<=10; i++) {
        pinMode(i, INPUT);
        digitalWrite(i, HIGH); // 内部プルアップ抵抗を有効化
    }
    
    // D2ピンは圧電ブザー用(tone関数が自動設定するため明示不要)
}

void loop()
{
    int frequency = 0; // 出力する周波数を格納する変数

    // 各タクトスイッチの状態をチェックし、対応する周波数を設定
    if(digitalRead(3)==LOW)  frequency = 523;  // ド(C4)
    if(digitalRead(4)==LOW)  frequency = 587;  // レ(D4)
    if(digitalRead(5)==LOW)  frequency = 659;  // ミ(E4)
    if(digitalRead(6)==LOW)  frequency = 698;  // ファ(F4)
    if(digitalRead(7)==LOW)  frequency = 784;  // ソ(G4)
    if(digitalRead(8)==LOW)  frequency = 880;  // ラ(A4)
    if(digitalRead(9)==LOW)  frequency = 988;  // シ(B4)
    if(digitalRead(10)==LOW) frequency = 1046; // ド(C5)高いド

    // 周波数が設定されていれば音を鳴らし、なければ停止
    if (frequency != 0) {
        tone(2, frequency);  // D2ピンから指定周波数のパルス信号を出力
    } else {
        noTone(2);           // 音を停止
    }
}

コードの詳細解説

setup関数(初期設定)

for(int i=3; i<=10; i++) {
    pinMode(i, INPUT);
    digitalWrite(i, HIGH); // 内部プルアップ
}

何をしているのか?

  • D3~D10ピンを「入力モード」に設定
  • digitalWrite(i, HIGH)内部プルアップ抵抗を有効化
    • スイッチが押されていない時:HIGH(5V)
    • スイッチが押された時:LOW(0V)
    • 外部にプルアップ抵抗を付ける必要がなくなります

loop関数(メイン処理)

ステップ1:スイッチの状態を確認

if(digitalRead(3)==LOW) frequency = 523;
  • digitalRead(3) でD3ピンの状態を読み取り
  • LOWなら(スイッチが押されているなら)周波数を523Hzに設定

ステップ2:音を出力

if (frequency != 0) {
    tone(2, frequency);
} else {
    noTone(2);
}
  • tone(ピン番号, 周波数) で指定した周波数のパルス信号を出力
  • どのスイッチも押されていない場合(frequency == 0)は noTone() で音を停止

tone関数の仕組み

tone(pin, frequency) は、Arduinoに標準搭載されている便利な関数です。

機能:

  • 指定したピンから、指定した周波数の矩形波(パルス信号)を出力
  • 内部的にタイマー割り込みを使用して、正確な周波数を生成
  • 複数のピンで同時に使うことはできません(Arduino UNO/R4では1つのピンのみ)

使用例:

tone(2, 440);      // D2ピンから440Hz(ラの音)を出力
tone(2, 880, 500); // 500ミリ秒間だけ880Hzを出力(第3引数で時間指定)
noTone(2);         // 音を停止

🔗 詳しく知りたい方へ
Arduino tone()関数の公式リファレンス: https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/

よくある質問

Q: なぜif文が8個も並んでいるの?switch文じゃダメ?

A: もちろんswitch文でも書けます!ただし、この書き方には「複数のスイッチを同時に押した時、最後にチェックしたスイッチの音が優先される」という特徴があります。より高度な実装(和音を鳴らすなど)をしたい場合は、配列を使った方法もあります。

Q: 音が出ない場合は?

A: 以下をチェックしてください:

  1. 圧電ブザーの極性(+/−)が正しいか
  2. 使っているのが「パッシブ型」の圧電ブザーか(アクティブ型では音階が変えられません)
  3. タクトスイッチの配線が正しいか
  4. シリアルモニタで Serial.println(digitalRead(3)); などを使って、スイッチの状態を確認

🎼 音階と周波数の対応表

音階(ドレミファソラシド)は、それぞれ決まった周波数を持っています。以下は、ピアノの「中央ド(C4)」を基準とした3オクターブ分の周波数表です。

主要な音階の周波数一覧

音名 オクターブ3
(低い音)
オクターブ4
(中央ド)
オクターブ5
(高い音)
英語表記
261.6 Hz 523.3 Hz 1046.5 Hz C3 / C4 / C5
293.7 Hz 587.3 Hz 1174.7 Hz D3 / D4 / D5
329.6 Hz 659.3 Hz 1318.5 Hz E3 / E4 / E5
ファ 349.2 Hz 698.5 Hz 1396.9 Hz F3 / F4 / F5
392.0 Hz 784.0 Hz 1568.0 Hz G3 / G4 / G5
440.0 Hz 880.0 Hz 1760.6 Hz A3 / A4 / A5
493.9 Hz 987.8 Hz 1975.5 Hz B3 / B4 / B5

📝 豆知識

  • ラ(A4)= 440Hz は、世界標準の「基準音」として定められています(ISO 16規格)
  • オクターブが1つ上がると、周波数はちょうど2倍になります(例:A4=440Hz → A5=880Hz)
  • 今回のプログラムでは、太字の**オクターブ4(中央ド)**の音階を使用しています

プログラムでの使用例

上記の表から好きな周波数を選んで、プログラムに組み込むことができます:

// 低い音域を使いたい場合(オクターブ3)
if(digitalRead(3)==LOW) frequency = 262;  // 低いド(C3)

// 高い音域を使いたい場合(オクターブ5)
if(digitalRead(3)==LOW) frequency = 1047; // 高いド(C5)

🧪 実践!電子ピアノを組み立てて演奏してみよう

完成した回路

回路図に従って、ブレッドボード上に実際に組み立ててみました。

Arduino電子ピアノのブレッドボード実装写真

完成した電子ピアノの配線:8つのタクトスイッチと圧電ブザーを接続

配線のポイント:

  • ジャンパー線が多く複雑に見えますが、パターンは同じことの繰り返しです
  • 1つずつ丁寧に配線していけば、初心者でも30分程度で完成します
  • より本格的に仕上げたい方は、ユニバーサル基板にはんだ付けするとコンパクトで丈夫になります

動作テストの手順

  1. Arduino IDEでプログラムを書き込み

    • 上記のコードをArduino IDEにコピー&ペースト
    • ボードは「Arduino UNO R4 Minima」または「Arduino UNO R4 WiFi」を選択
    • 「マイコンボードに書き込む」ボタンをクリック
  2. 動作確認

    • タクトスイッチを1つずつ押して、それぞれ違う音が鳴るか確認
    • LEDを付けている場合は、押したスイッチが光るか確認
    • 音が出ない場合は、上記の「よくある質問」を参照
  3. 実際に演奏してみる

    • まずは「ドレミファソラシド」と順番に押してみましょう
    • 慣れてきたら、簡単な曲に挑戦!

📺 演奏デモ動画:ドレミの歌

実際にこの電子ピアノで「ドレミの歌」を演奏してみました。8bitゲーム音楽のような懐かしいサウンドが楽しめます!

動画のポイント:

  • タクトスイッチを押すとLEDが光り、同時に対応する音が鳴ります
  • 手動演奏なので、リズムは多少ずれますが、それも手作り楽器の味わいです
  • 圧電ブザーの素朴な音色が、レトロな雰囲気を醸し出しています

🎁 応用編:Arduinoで曲を自動演奏させよう

手動演奏も楽しいですが、プログラミングの力を使えば、Arduinoに自動で曲を演奏させることもできます!

自動演奏プログラムの基本

tone() 関数に第3引数を追加すると、指定した時間だけ音を鳴らすことができます:

tone(2, 523, 500);  // D2ピンから523Hz(ド)を500ミリ秒間出力
delay(550);         // 音の長さ + 少し間を空ける

これを応用して、音階と音の長さの配列を作れば、メロディを自動演奏できます:

// メロディの例:ドレミファソファミレド
int melody[] = {523, 587, 659, 698, 784, 698, 659, 587, 523};
int noteDurations[] = {4, 4, 4, 4, 4, 4, 4, 4, 4}; // 4分音符

void loop() {
    for (int i = 0; i < 9; i++) {
        int noteDuration = 1000 / noteDurations[i];
        tone(2, melody[i], noteDuration);
        delay(noteDuration * 1.3); // 音と音の間に少し間隔を空ける
    }
    delay(2000); // 2秒待ってから繰り返し
}

📺 自動演奏デモ:パプリカ

実際に「パプリカ」のメロディをプログラムで自動演奏させてみました。このレトロな8bitサウンドは、ファミコン世代には懐かしく、若い世代には新鮮に聞こえるはずです!

自動演奏のメリット:

  • 複雑な曲でも正確に演奏できる
  • リズムやテンポが安定する
  • 電源を入れるだけで曲が流れる「オルゴール」のような装置が作れる
  • MIDI音源のような本格的な演奏システムへの第一歩

さらなる応用アイデア

基本ができたら、次のような拡張に挑戦してみましょう:

  1. 複数の曲を切り替え

    • ボタンを追加して、曲を選択できるようにする
  2. 音量調整機能

    • PWMとアンプICを使って音量を変えられるようにする
  3. 録音・再生機能

    • EEPROMやSDカードに演奏データを保存
    • 自分で弾いたメロディを記録して再生
  4. MIDIコントローラー化

    • USBシリアル通信でPCに接続
    • DAWソフト(DTMソフト)と連携して本格的な音源を鳴らす

🧠 まとめ:電子ピアノ製作で学んだこと

この記事では、Arduinoと圧電ブザーを使った電子ピアノの製作を通じて、以下の技術を学びました:

習得した知識・技術

圧電効果の原理

  • 電圧で物質が伸び縮みする圧電効果を利用して音を発生
  • 周波数(振動の速さ)が音の高さを決定する

tone関数の使い方

  • tone(pin, frequency) で任意の音階を生成
  • tone(pin, frequency, duration) で音の長さも指定可能
  • noTone(pin) で音を停止

デジタル入力の基礎

  • 内部プルアップ抵抗の活用で外部抵抗を削減
  • タクトスイッチの状態読み取り
  • 複数入力の効率的な処理方法

回路設計の実践

  • ブレッドボードでの配線技術
  • 電源とGNDの適切な分配
  • 部品配置の最適化

次のステップへ:さらなる挑戦

この電子ピアノは、基本的な電子楽器です。ここから先は、あなたのアイデア次第で無限に拡張できます:

🎯 初級レベルの拡張

  • 音階を増やす → タクトスイッチを12個にして半音(#/♭)を追加
  • オクターブ切替 → 1つのボタンでオクターブを上下できるようにする
  • LEDパターン → 演奏に合わせてLEDを点滅させるエフェクトを追加

🎯 中級レベルの拡張

  • 録音・再生機能 → 演奏を記録してリピート再生
  • リズムパターン → ドラムマシンのようなリズム伴奏を追加
  • 液晶ディスプレイ → 押した音名や曲名を表示

🎯 上級レベルの拡張

  • MIDI対応 → PC用音源ソフトと連携
  • Bluetooth連携 → スマートフォンアプリで制御
  • マルチティンバー → 複数の音色を切り替え可能に

電子工作の可能性は無限大

この記事で作った電子ピアノは、「センサー入力 → データ処理 → 出力」という、すべての電子工作に共通する基本パターンを含んでいます。

この基礎を応用すれば、次のようなプロジェクトにも挑戦できます:

  • IoTデバイス → センサーデータをクラウドに送信
  • 自動制御システム → 温度や湿度に応じて機器を制御
  • ロボット → モーターやサーボを制御して動く装置を製作
  • ゲーム機 → レトロゲーム風の電子ゲームを自作

あなたの想像力が、電子工作の可能性を無限に広げます。

ぜひこの記事をきっかけに、次のプロジェクトに挑戦してみてください。作品ができたら、SNSでシェアしていただけると嬉しいです!

関連記事

Arduinoをもっと学びたい方は、こちらの記事もおすすめです:


Happy Making! 🎵✨