Пианино Arduino в этом проекте мы будем использовать несколько мгновенных кнопок и пьезодинамик для создания простого пианино. Необходимые части



жүктеу 2,62 Mb.
Дата21.09.2023
өлшемі2,62 Mb.
#43491
5.Arduino Piano


Пианино Arduino

В этом проекте мы будем использовать несколько мгновенных кнопок и пьезодинамик для создания простого пианино.







Необходимые части:

  • Arduino Uno

  • Макетная плата

  • Соединительные провода

  • Пьезоизлучатель

  • 8 кнопок

  • 8 1кОм резисторов



Как это работает

Каждая кнопка в нашем проекте (рис. 5-1) подключена к контакту Arduino, и при нажатии кнопки пьезоизлучатель издаст одну из восьми нот.



Рисунок 5-1: Кнопка и ее схема

При нажатии кнопка замыкает цепь, включая ее. Как только кнопка будет отпущена, соединение отскочит и разорвет эту цепь, отключив ее. Кнопочный переключатель также известен как мгновенный или нормально разомкнутый переключатель и используется, например, в компьютерных клавиатурах. Это отличается от тумблера, который остается либо включенным, либо выключенным, пока вы не переключите его в другое положение, например, выключатель света.


Этот тип кнопки имеет четыре контакта, но обычно для подключения одновременно используются только два. В этом проекте мы используем верхние контакты, чтобы легче было дотянуться до кнопки и воспроизвести мелодию, хотя два неиспользуемых контакта внизу выполняли бы ту же работу. Как показано на рисунке 5-2, контакты работают в цепи. Контакты A и C всегда подключены, как и контакты B и D. Когда кнопка нажата, схема завершена.

Рисунок 5-2: Разомкнутая схема кнопки

В пианино Arduino используется пьезоизлучатель, показанный на рис. 5-3, для создания частот, напоминающих узнаваемые ноты. Пьезозвуковые оповещатели, или просто пьезоэлементы для краткости, — это недорогие зуммеры, часто используемые в маленьких игрушках. Пьезоэлемент без пластикового корпуса выглядит как золотой металлический диск с подключенными положительным (обычно красным) и отрицательным (обычно черным) проводами. Пьезо способен только издавать щелкающий звук, который мы создаем, подавая напряжение.





Рисунок 5-3: Пьезоизлучатель

Мы можем делать узнаваемые ноты, заставляя пьезоэлемент щелкать сотни раз в секунду на определенной частоте, поэтому сначала нам нужно знать частоту различных тонов, которые нам нужны. В Таблице 5-1 показаны ноты и соответствующие им частоты. Период — это продолжительность цикла в микросекундах, при которой создается частота. Например, чтобы получить ноту C (261 Гц), нам нужно, чтобы пьезоэлектрический процессор работал с периодом 3,830 микросекунд. Мы уменьшаем период вдвое, чтобы получить значение timeHigh, которое используется в коде для создания заметки. (Тон вызван тем, что пьезоэлемент включается и выключается очень быстро, поэтому время, в течение которого пьезоэлемент включен или HIGH, составляет половину периода.)


Таблица 5-1: Музыкальные ноты и частоты, используемые в коде



НОТА

ЧАСТОТА

ПЕРИОД

TIMEHIGH

C

261 Гц

3,830

1915

D

294 Гц

3,400

1700

E

329 Гц

3,038

1519

F

349 Гц

2.864

1432

G

392 Гц

2.550

1275

A

440 Гц

2.272

1136

B

493 Гц

2.028

1014

C

523 Гц

1.912

956



Сборка



  1. Вставьте кнопки в макетную плату так, чтобы штифты располагались по центру разлома макетной платы.

  2. Глядя на лицевую сторону макетной платы, пронумеруйте кнопки 1-8 слева направо. Подключите верхний левый вывод (A) кнопки 1 к выводу 2 Arduino с помощью соединительного провода. Подключите верхние левые контакты других кнопок к Arduino, как показано ниже.




КНОПКА

НОТА

ARDUINO

1

C

2

2

D

3

3

E

4

4

F

5

5

G

6

6

A

7

7

B

8

8

C

9




  1. Вставьте резистор 1 кОм в макетную плату на одной линии с верхним левым выводом первой кнопки, как показано на рисунке 5-4, и подсоедините другую сторону резистора к шине GND макетной платы. Повторите это для других кнопок. Резистор переводит переключатель в положение GND, когда кнопка не нажата, чтобы сообщить Arduino, что он не находится в положительном состоянии; когда кнопка нажата, при положительном питании звучит соответствующая нота.




Рисунок 5-4: Резистор 1 кОм соединяет вывод кнопки с GND



  1. Подсоедините верхний правый вывод (B) каждой из кнопок к положительной шине питания макетной платы с помощью соединительного провода..

  2. Подсоедините красный провод пьезоэлемента к контакту 13 Arduino, а его черный провод - к шине GND макетной платы, затем подсоедините шину питания к GND и +5V на Arduino..

  3. Убедитесь, что ваша настройка соответствует принципиальной схеме на рисунке 5-5, а затем загрузите эскиз.


Рисунок 5-5: Принципиальная схема пианино Arduino


Скетч

Сначала на скетче определяется вывод, к которому подключается пьезозвук, и выводы для кнопок. Для каждой кнопки определяется значение, и в соответствии с этим значением присваивается звуковой сигнал. Кнопки задаются в качестве входных сигналов, а пьезозвук - в качестве выходного. Цикл loop проверяет каждую кнопку, воспроизводя соответствующий звуковой сигнал до тех пор, пока кнопка удерживается нажатой. Одновременно можно воспроизводить только одну ноту, потому что для каждой ноты требуется повторение цикла, поэтому, когда кнопка отпущена, пьезозвук прекращает воспроизведение сигнала и цикл начинается заново.


int speakerPin = 13; // Piezo defined as pin 13


int key_c = 2; // Define Arduino pins for the keys
int key_d = 3;
int key_e = 4;
int key_f = 5;
int key_g = 6;
int key_a = 7;
int key_b = 8;
int key_C= 9;
// Value for each key press
int keypress_c = 0; int keypress_d = 0; int keypress_e = 0;
int keypress_f = 0; int keypress_g = 0; int keypress_a = 0;
int keypress_b = 0; int keypress_C = 0;
// Define the frequency of each note
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
// 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'
int keytone = 0; // Give a value for keytone
void setup() {
pinMode(key_c, INPUT); // Set up key pins as inputs
pinMode(key_d, INPUT);
pinMode(key_e, INPUT);
pinMode(key_f, INPUT);
pinMode(key_g, INPUT);
pinMode(key_a, INPUT);
pinMode(key_b, INPUT);
pinMode(key_C, INPUT);
pinMode(speakerPin, OUTPUT); // Set up piezo pin as an output
}
// Start a loop to read the press of each key
void loop() {
keypress_c = digitalRead(key_c); keypress_d = digitalRead(key_d);
keypress_e = digitalRead(key_e); keypress_f = digitalRead(key_f);
keypress_g = digitalRead(key_g); keypress_a = digitalRead(key_a);
keypress_b = digitalRead(key_b); keypress_C = digitalRead(key_C);
// And if the key press is HIGH, play the corresponding tone
if((keypress_c == HIGH) || (keypress_e == HIGH) ||
(keypress_g == HIGH) || (keypress_d == HIGH) ||
(keypress_f == HIGH) || (keypress_a == HIGH) ||
(keypress_b == HIGH) || (keypress_C == HIGH))
{
if (keypress_c == HIGH) {
keytone = tones[0];
}
if (keypress_d == HIGH) {
keytone = tones[1];
}
if (keypress_e == HIGH) {
keytone = tones[2];
}
if (keypress_f == HIGH) {
keytone = tones[3];
}
if (keypress_g == HIGH) {
keytone = tones[4];
}
if (keypress_a == HIGH) {
keytone = tones[5];
}
if (keypress_b == HIGH) {
keytone = tones[6];
}
if (keypress_C == HIGH) {
keytone = tones[7];
}
digitalWrite(speakerPin, HIGH); // Turn on piezo to play tone
delayMicroseconds(keytone);
digitalWrite(speakerPin, LOW); // Turn off after a short delay
delayMicroseconds(keytone);
}
else { // If no key is pressed, piezo remains silent
digitalWrite(speakerPin, LOW);
}
}


Отладка

Код компилируется, но некоторые или все кнопки не выдают звуковой сигнал:



  • Если пьезоанализатор вообще не издает шума, проверьте, что красный провод пьезоанализатора подключен к контакту 13, а его черный провод - к GND на макетной плате. Убедитесь, что вы подключили GND на Arduino к правильной шине питания макетной платы и что к Arduino подключено питание.

  • Если звук издают только некоторые кнопки, перепроверьте проводку на предмет бесшумных кнопок. Легко сместить соединительные провода на макетной плате так, чтобы они фактически не выстраивались в ряд с выводами кнопок.

  • Если у вас все еще есть проблема, попробуйте заменить неисправную кнопку на ту, которая, как вы знаете, работает; если это решит вашу проблему, возможно, ваша оригинальная кнопка была неисправна.

жүктеу 2,62 Mb.

Достарыңызбен бөлісу:




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау