[貂蝉がプログラミングを学ぶ] Arduino ハンズオン (49) --- アクティブおよびパッシブ ブザー モジュール 5

37 個のセンサーとモジュールについての言及はインターネット上で広く広まっていますが、実際には、Arduino と互換性のあるセンサー モジュールは 37 個以上あるはずです。学習とコミュニケーションの目的で、真の知識(実践的である必要がある)の概念に従って、センサーとアクチュエーターのモジュールがいくつか手元に蓄積されているという事実を考慮して、ここではさらに実験を1つずつ試してみます。

【Arduino】168種類のセンサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックプログラミング)
実験49:アクティブブザーモジュール低レベルトリガーブザー制御ボードサウンドセンサースマートカー

ここに画像の説明を挿入
プログラム 11: 三角波発生器警報音
実験オープンソース シミュレーション プログラミング (Linkboy V4.63)

ここに画像の説明を挿入

プログラム 12: お誕生日おめでとうございます
実験的なオープンソース シミュレーション プログラミング (Linkboy V4.63)

ここに画像の説明を挿入

Arduinoの実験シーン図

ここに画像の説明を挿入

プログラム 13: アルトのループ、
オープンソース グラフィック プログラミングの実験 (Mind+、編集しながら学習)

ここに画像の説明を挿入
【Arduino】168センサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックスプログラミング)

実験 49: アクティブ ブザー モジュール 低レベル トリガー ブザー コントロール ボード サウンド センサー スマート カー

プログラム 14: パッシブ ブザーを制御して 2 つのタイガー トーンを発します。

Arduino実験のオープンソースコード

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十四:播放二只老虎乐曲
*/

int buzzer=3;           //設定蜂鳴器接腳為D3
int duration = 500;
int aSo = 392;          //定义音符频率
int bDo = 523;
int bRe = 587;
int bMi = 659;
int bFa = 698;
int bSo = 784;
int bLa = 880;
int bSi = 988;
int bDDo = 1047;

void setup(){
    
    
pinMode(buzzer,OUTPUT);   //設定蜂鳴器為輸出
}

void loop(){
    
    
  tone(3,bDo,duration);
  delay(600);
  tone(3,bRe,duration);
  delay(600);
  tone(3,bMi,duration);
  delay(600);
  tone(3,bDo,duration);
  delay(800);
  
  tone(3,bDo,duration);
  delay(600);
  tone(3,bRe,duration);
  delay(600);
  tone(3,bMi,duration);
  delay(600);
  tone(3,bDo,duration);
  delay(800);
  
  tone(3,bMi,duration);
  delay(600);
  tone(3,bFa,duration);
  delay(600);
  tone(3,bSo,duration);
  delay(800);
  
  tone(3,bMi,duration);
  delay(600);
  tone(3,bFa,duration);
  delay(600);
  tone(3,bSo,duration);
  delay(800);

  tone(3,bSo,duration);
  delay(600);
  tone(3,bLa,duration);
  delay(600);
  tone(3,bSo,duration);
  delay(600);
  tone(3,bFa,duration);
  delay(600);
  tone(3,bMi,duration);
  delay(700);
  tone(3,bDo,duration);
  delay(800);

  tone(3,bSo,duration);
  delay(600);
  tone(3,bLa,duration);
  delay(600);
  tone(3,bSo,duration);
  delay(600);
  tone(3,bFa,duration);
  delay(600);
  tone(3,bMi,duration);
  delay(700);
  tone(3,bDo,duration);
  delay(800);

  tone(3,bDo,duration);
  delay(700);
  tone(3,aSo,duration);
  delay(700);
  tone(3,bDo,duration);
  delay(800);

  tone(3,bDo,duration);
  delay(700);
  tone(3,aSo,duration);
  delay(700);
  tone(3,bDo,duration);
  delay(800);
  delay(2000);
}

tone()関数の説明:

tone(pin, frequency, duration)

pin=信号インターフェース、frequency=周波数、duration=間隔
実験で使用したスケールは、Do(523Hz)、Re(587Hz)、Mi(659Hz)、Fa(698Hz)、So(784Hz)、La(880Hz)、Si(988Hz)から高音Do(1047Hz)です。

ブザーを鳴らすということは、基本的にはブザーにさまざまな周波数の音を出させることであり、周波数の単位はヘルツ(Hz)で、1秒間にブザーが何回振動するかを表します。

1939 年の国際会議で、コンサート ピッチとも呼ばれる国際標準音として A (La) = 440Hz が決定されました。この規格は 1955 年に国際標準化機構によって承認され、1975 年に最終化されました。
言い換えれば、何かを 1 秒間に 440 回振動させるだけでよく、聞こえる音は A です。

スケール-周波数比較表(単位:Hz)

ここに画像の説明を挿入
【Arduino】168センサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックスプログラミング)

実験 49: アクティブ ブザー モジュール 低レベル トリガー ブザー コントロール ボード サウンド センサー スマート カー

手順15:ドレミファソラシを弾く

Arduino リファレンス オープンソース コード

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十五:播放do re mi fa sol la si
*/

const int buzzPin = 3;//无源蜂鸣器接D3
int delayTime = 200;

void setup() {
    
    
  // 把你的设置代码放在这里,运行一次
  pinMode(buzzPin, OUTPUT);//设置为输出
}

void loop() {
    
    
  // 把你的主要代码放在这里,重复运行
  tone(buzzPin, 262, 150);
  delay(delayTime);
  noTone(buzzPin);
  tone(buzzPin, 294, 150);
  delay(delayTime);
  noTone(buzzPin);
  tone(buzzPin, 330, 150);
  delay(delayTime);
  noTone(buzzPin);
  tone(buzzPin, 349, 150);
  delay(delayTime);
  noTone(buzzPin);
  tone(buzzPin, 292, 150);
  delay(delayTime);
  noTone(buzzPin);
  tone(buzzPin, 440, 150);
  delay(delayTime);
  noTone(buzzPin);
  tone(buzzPin, 494, 150);
  delay(delayTime);
  noTone(buzzPin);
}

【Arduino】168センサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックスプログラミング)

実験 49: アクティブ ブザー モジュール 低レベル トリガー ブザー コントロール ボード サウンド センサー スマート カー

プログラム 16: メロディー音楽を演奏する

Arduino リファレンス オープンソース コード

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十六:播放melody音乐
*/

#define NOTE_C4  262//诠释旋律
#define NOTE_G3  196
#define NOTE_A3  220
#define NOTE_B3  247

int melody[] = {
    
    
  NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
// 音符时长:4 = 四分音符,8 = 八分音符,等等
int noteDurations[] = {
    
    
  4, 8, 8, 4, 4, 4, 4, 4
};

void setup() {
    
    
  // 遍历旋律的音符
}

void loop() {
    
    
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    
    
    // 计算音符持续时间,用一秒除以音符类型。
    //例如。 四分音符 = 1000 / 4,八分音符 = 1000/8 等等。
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(3, melody[thisNote], noteDuration);
    // 为了区分音符,设置它们之间的最小时间。
    // 音符的持续时间 + 30% 似乎效果很好
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // 停止播放音调
    noTone(3);
  }
}

Arduinoの実験シーン図

ここに画像の説明を挿入

プログラム17:ブザーで天空の城ごっこ

ここに画像の説明を挿入
Arduino リファレンス オープンソース コード

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十七:利用蜂鸣器播放天空之城
*/

#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556

#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278

#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 112
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看

int tune[] =
{
    
    
  NOTE_D0, NOTE_D0, NOTE_D0, NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3,
  NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D3, NOTE_D4, NOTE_D3, NOTE_D4, NOTE_DH1,
  NOTE_D3, NOTE_D3, NOTE_D0, NOTE_DH1, NOTE_DH1, NOTE_DH1, NOTE_D7, NOTE_D4, NOTE_D4, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D0, NOTE_D6, NOTE_D7,
  NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1,
  NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D2, NOTE_D3, NOTE_D4, NOTE_DH1, NOTE_D7, NOTE_D7, NOTE_DH1, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH3, NOTE_DH1, NOTE_DH1, NOTE_DH1,
  NOTE_DH1, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D7, NOTE_D5, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_DH1, NOTE_DH2, NOTE_DH3, NOTE_DH2, NOTE_DH3, NOTE_DH5,
  NOTE_DH2, NOTE_DH2, NOTE_DH2, NOTE_D5, NOTE_D5, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3,
  NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH2, NOTE_DH2, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_DH4, NOTE_DH3, NOTE_DH2, NOTE_DH1,
  NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5, NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1,
  NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH5, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5,
  NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1, NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D7
};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

float duration[] =
{
    
    
  1, 1, 1, 0.5, 0.5,     1 + 0.5, 0.5, 1, 1,     1, 1, 1, 0.5, 0.5,
  1 + 0.5, 0.5, 1, 1,     1, 1, 1, 1,          1 + 0.5, 0.5, 1, 1,
  1, 1, 0.5, 0.5, 0.5, 0.5,    1 + 0.5, 0.5, 1, 1,     1, 1, 1, 0.5, 0.5,
  1 + 0.5, 0.5, 1, 1,    1, 1, 1, 0.5, 0.5,     1 + 0.5, 0.5, 1, 1,
  1, 1, 1, 0.5, 0.5,    1, 0.5, 0.25, 0.25, 0.25, 0.5,    0.5, 0.5, 0.5, 0.25, 0.5, 1,
  0.5, 0.5, 0.5, 0.5, 1, 1,    1, 1, 1, 0.5, 0.5,    1 + 0.5, 0.5, 1, 1,
  1, 1, 1, 0.5, 0.5,    1.5, 0.5, 1, 1,    1, 1, 1, 1,
  0.5, 0.5, 1, 1, 0.5, 0.5,    1.5, 0.25, 0.5, 1,    1, 1, 1, 1,
  1, 1, 1, 1,    1, 1, 1, 1,    0.5, 0.5, 1, 1, 0.5, 0.5,
  1, 0.5, 0.5, 1, 1,    1, 1, 1, 1,    1, 1, 1, 1,
  0.5, 0.5, 1, 1, 0.5, 0.5,    1, 0.5, 0.25, 0.5, 1,    1, 1, 1, 0.5, 0.5
};//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)

int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin = 3; //蜂鸣器的pin

void setup(){
    
    
  pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式
  length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数, 可以查出tone序列里有多少个音符
}

void loop(){
    
    
  for (int x = 0; x < length; x++) //循环音符的次数
  {
    
    
    tone(tonePin, tune[x]); //此函数依次播放tune序列里的数组,即每个 音符
    delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握
    noTone(tonePin);//停止当前音符,进入下一音符
  }
  delay(5000);//等待5秒后,循环重新开始
}

ブラインド障害物回避機能 (障害物があるときにブザーが鳴る)
実験的なオープンソース シミュレーション プログラミング (Linkboy V4.63)
ここに画像の説明を挿入

Arduinoの実験シーン図
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_41659040/article/details/131843902