工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

自作電子ピアノキーボード:内蔵曲付きで演奏も作曲も楽しめる

必要な部品と材料

部品 数量
Arduino UNO 1
Adafruit 標準LCD - 16x2 白文字/青背景 1
SparkFun プッシュボタンスイッチ 12mm 8
抵抗 220Ω 4
抵抗 560Ω 1
抵抗 1kΩ 1
抵抗 4.7kΩ 1
抵抗 10kΩ 3
抵抗 1MΩ 1
ブザー(ピエゾ) 1
LED(汎用) 1
単回転ポテンショメータ - 10kΩ 1
ジャンパーワイヤー(汎用) 1セット
ブレッドボード(汎用) 1

プロジェクト概要

はじめに

私は電子工作の世界には完全に初心者です。コーディングのバックグラウンドはありますが、常に新しいアイデアや提案を歓迎しています。

最近、ピエゾブザーとそのコーディングについて学んでおり、これがこれまでの学習成果としての作品です。新機能やスイッチの追加など、拡張の余地は大いにあり、今後取り組む予定ですが、まずは次のチャレンジへ進みます!

以下はデバイスの動作デモ動画で、プリセット曲のメニューも含まれています。実は曲4と5は同じですが、より大きく良いものを作りたいという衝動に駆られ、さらに多くの曲の音楽コードを書くことは今回の課題ではありませんでした。メインループと各曲ループの基本コードは自分のアイデアに合わせて簡単にアレンジできるので、自由に変更してください。

動作デモ

(動画プレースホルダー)

ハードウェアのセットアップ方法

ピアノ鍵(スイッチ)

ピアノ鍵のスイッチは「抵抗ラダー」方式で接続します。抵抗を順番に配置し、各スイッチを電源に接続します。このプロジェクトでは(単位:Ω)1M、10k、4.7k、1k、560、220を使用しました。左端の第1ピアノスイッチは電源に接続し、かつ回路内の次のスイッチにも接続します。第2スイッチは最小の抵抗に接続し、それ以降の各スイッチは順に大きい抵抗に接続します。最後のスイッチは10kΩ抵抗でグラウンドに落とし、かつ全7スイッチをArduinoの「アナログ入力」ピンA0に接続します。メインスケッチで各ピアノ鍵に対応する音楽周波数を定義します。このプロジェクトではC4、D4、E4、F4、G4、A4、B4を使用し、C4を左端のスイッチに割り当てました。周波数値を変更したり、スイッチを追加して完全にカスタマイズすることも可能です!

LCD画面

回路図に従ってLCDピンを接続します。LCDピン3をポテンショメータに接続し、画面コントラストを調整します。ポテンショメータの両端ピンを電源とグラウンドに接続してこの回路を完成させます。LCDピン15は220Ω抵抗を介して電源に接続します。これらのピンが自分のプロジェクトで異なる場合は、コードを適宜更新してください。

メニュースイッチ

メニュースイッチを電源に接続し、10kΩ抵抗でグラウンドに落とします。このスイッチはArduinoのピン7にも接続し、コードで制御できるようにします。

LED

LEDは「メニューモード」に入ったとき(ピアノ鍵が無効化される)に点灯して知らせます。メニュースイッチを押すとLEDが点灯します。LEDのアノード(プラス側)をArduinoのピン6に、カソードを220Ω抵抗でグラウンドに接続します。

ピエゾブザー

ピエゾブザーの片側をArduinoピン8に、もう片側を220Ω抵抗でグラウンドに接続します。コード内のtone関数がこのピンを参照して音を出します。

自作電子ピアノキーボード:内蔵曲付きで演奏も作曲も楽しめる
自作電子ピアノキーボード:内蔵曲付きで演奏も作曲も楽しめる
自作電子ピアノキーボード:内蔵曲付きで演奏も作曲も楽しめる

コードの仕組み

セットアップ部分

メインループ

メニューへのアクセス

コード

Electronic Keyboard Arduino

メインコード(抜粋)

// LCD画面、スイッチ、LEDの設定
#include <LiquidCrystal.h>
#include "pitches.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int LCDswitchPin = 7; // メニュー/LCDスイッチ名定義
int LCDswitchState = 0; // メニュー/LCDスイッチ状態をオフ/LOWに設定
int prevLCDswitchState = 0;
int blueLED = 6;
int LCDswitchCounter = 0; // メニューボタン押下カウンタ
// (このコードはメニューボタン押下をカウントし、PCに表示し、
// 「メニューモード」終了後にゼロから再開する。
// 現在このスケッチでは他の効果はないが、
// 後で新機能でプロジェクトを拡張する際の良い出発点になる)

// 音楽ノート鍵 - 周波数値設定
int notes[] = {262, 294, 330, 349, 392, 440, 494}; // C, D, E, F, G, A, Bの音

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(LCDswitchPin, INPUT);
  pinMode(blueLED, OUTPUT);
  digitalWrite(blueLED, LOW); // ピアノ鍵がオンの間はLEDをオフ
}

void loop() {
  LCDswitchState = digitalRead(LCDswitchPin);
  int keyVal = analogRead(A0);
  Serial.println(keyVal);
  lcd.noDisplay();
  digitalWrite(blueLED, LOW); // メインループ開始毎にLEDをオフ

  // ************** メニューボタン押下で"LCDstart"開始 ***********
  if (LCDswitchState == HIGH) {
    digitalWrite(blueLED, HIGH); // LEDオンでピアノ鍵無効&「メニューモード」表示
    lcd.display();
    lcd.clear();
    LCDstart();
  }
  // ***********************************************************************

  ////// キーボード音符&周波数判定 //////
  // 作成した抵抗ラダーで各ピアノ鍵ボタンの電圧を変化
  // 220Ω = C5, 560Ω = D5, 1kΩ = E5 等...
  if(keyVal == 1023) { tone(8, notes[0]); } // C
  else if(keyVal >= 990 && keyVal <= 1010) { tone(8, notes[1]); } // D
  else if(keyVal >= 960 && keyVal <= 980) { tone(8, notes[2]); } // E
  else if(keyVal >= 900 && keyVal <= 945) { tone(8, notes[3]); } // F
  else if(keyVal >= 650 && keyVal <= 710) { tone(8, notes[4]); } // G
  else if(keyVal >= 500 && keyVal <= 550) { tone(8, notes[5]); } // A
  else if(keyVal >= 5 && keyVal <= 10) { tone(8, notes[6]); } // B
  else if(keyVal <= 1) { noTone(8); } // スイッチ未押下時は音なし
}

// 以下、LCDstart()、Song1title()〜Song5title()、各曲再生関数が続く...
Song1 Arduino

第1曲:スーパーマリオブラザーズ テーマ曲

void Song1() {
  lcd.clear();
  int melody[] = { NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, NOTE_G6, 0, 0, 0, ... };
  int noteDurations[] = { 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, ... };
  lcd.setCursor(1, 0); lcd.print("Now playing...");
  lcd.setCursor(0, 1); lcd.print("MARIO THEME SONG");
  // 再生ループ処理...
  Song1title();
}
Song2 Arduino

第2曲:スーパーマリオブラザーズ アンダーワールド曲

Song3 Arduino

第3曲:ジェパディ テーマ曲

Song4 Arduino

第4曲:短い汎用メロディ

Song5 Arduino

第5曲:短い汎用メロディ(曲4と同一)

pitches.h Arduino

楽曲用音階ライブラリ。他のキーボード/曲スケッチと同じフォルダに保存。

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
// ... NOTE_DS8 4978 まで定義

回路図

回路図ファイルは別途参照してください。

製造プロセス

  1. TJBot入門:組み立て、設定、音声制御で自分だけのAIロボットを構築
  2. スマート渇きアラート植物アラーム – 最適な水やりタイミングを知らせるDIYセンサー
  3. イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
  4. MIDIキーボードをArduino・LED・MuseScoreでスマートピアノチューターに変身
  5. Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
  6. Arduino MKR Fox 1200で作る信頼性の高いSigfox kWhメーター
  7. Bluetooth対応温度モニター:Arduino NanoとHC-06でスマホ監視
  8. コンパクトなRDA5807ミニステレオラジオ:Arduino Nanoプロジェクト
  9. 非接触ジェスチャー錠: APDS-9960とArduinoでセキュアアクセス
  10. Arduino Nanoコンパニオンキット – 電子工作に必須の部品とツールを搭載した多機能IC型デバイス
  11. Arduino UNOで作る精密反応速度テスター