Search Header Logo
Мерзкое пианино

Мерзкое пианино

Assessment

Presentation

Professional Development

11th Grade

Hard

Created by

Анастасия Ушакова

Used 5+ times

FREE Resource

9 Slides • 0 Questions

1

Мерзкое пианино

В этом эксперименте мы создаем маленькую клавиатуру, на которой можно сыграть несколько нот.

2

Кнопка

Тактовая кнопка — простой, всем известный механизм, замыкающий цепь пока есть давление на толкатель

media

3

​Схема подключения

Напрашивается подключение напрямую. Но это наивный, неверный способ.

Пока кнопка нажата, выходное напряжение Vout = Vcc, но пока она отпущена, Vout ≠ 0. Кнопка и провода в этом случае работают как антенна, и Vout будет «шуметь», принимая случайные значения «из воздуха».

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

media

4

Список деталей для эксперимента

1 плата Arduino Uno

  • 1 беспаечная макетная плата

  • пьезопищалка

  • 3 тактовых кнопки

  • резистора номиналом 10 кОм

  • 10 проводов «папа-папа»

Для дополнительного задания

  • еще 2 кнопки

  • еще 2 резистора номиналом 10 кОм

  • еще 2 провода

5

Схема на макетке

media

6

Обратите внимание

  • Ножки тактовой кнопки, расположенные с одной стороны, разомкнуты, когда кнопка не нажата. Ножки, расположенные друг напротив друга на противоположных сторонах макетки находятся на одной «рельсе». Воспользовавшись этим, мы можем расположить резистор с одной стороны макетки, а провод, подключаемый к порту Arduino, с другой стороны.

  • Для того, чтобы данный вариант программы работал, важно, чтобы кнопки были подключены к портам, находящимся рядом друг с другом, т.е. имеющим соседние номера.

7

​Скетч

#define BUZZER_PIN 13 // пин с пищалкой (англ. «buzzer») #define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key») #define KEY_COUNT 3 // общее количество клавиш   void setup() { pinMode(BUZZER_PIN, OUTPUT); }  

8

void loop() {

// в цикле бежим по всем номерам кнопок от 0-го по 2-й

for (int i = 0; i < KEY_COUNT; ++i)

{ // на основе номера кнопки вычисляем номер её пина

int keyPin = i + FIRST_KEY_PIN;  

// считываем значение с кнопки. Возможны всего 2 варианта: // * высокий сигнал, 5 вольт, истина — кнопка отпущена // * низкий сигнал, земля, ложь — кнопка зажата

boolean keyUp = digitalRead(keyPin);  

9

// проверяем условие «если не кнопка отпущена». Знак «!» // перед булевой переменной означает отрицание, т.е. «не».

if (!keyUp) {

// рассчитываем высоту ноты в герцах в зависимости от // клавиши, которую рассматриваем на данном этапе цикла. // Мы получим значение 3500, 4000 или 4500

int frequency = 3500 + i * 500;

  // Заставляем пищалку пищать с нужной частотой в течение // 20 миллисекунд. Если клавиша останется зажатой, пищалка // вновь зазвучит при следующем проходе loop, а мы услышим // непрерывный звук tone(BUZZER_PIN, frequency, 20);

}

}

}

Мерзкое пианино

В этом эксперименте мы создаем маленькую клавиатуру, на которой можно сыграть несколько нот.

Show answer

Auto Play

Slide 1 / 9

SLIDE