Что такое мерзкое пианино

Роботы Образование Творчество

  • Министерство образования и науки РФ
  • Дошкольное образование
    • Конструирование
      • Конспекты
      • Программы
      • Дневник педагога
      • Метод копилка
    • Робототехника
      • Программы
      • Конспекты
      • Метод копилка
    • Исследовательская деятельность
      • Программы
      • Конспекты
      • Метод копилка
    • Руководителям ДОУ
    • Кейс конспектов «ЖУРАВЛЁНОК»
  • Основное образование
    • На уроках физики
    • На уроках технологии
      • Современный урок технологии
        • Материалы к августовским совещаниям
        • Проектная деятельность на уроках
        • Методическая копилка
        • Анонс
        • Прошу слова!
        • Интервью
    • На уроках информатики
    • На других уроках
    • Начальное образование
      • Личный взгляд
      • Уроки
      • В центре внимания
  • Дополнительное образование
    • Техническое творчество
    • Водородный клуб
    • Художественное творчество
      • Декоративно-прикладное искусство
      • Изобразительное искусство
      • Шитье и вязание
      • Дизайн
    • Сборка роботов
    • Программы
    • Дневник педагога
    • Новости дополнительного образования
  • Инклюзивное образование
    • Реабилитационная робототехника
    • Дети с нарушением слуха (глухие, слабослышащие, позднооглохшие)
    • Дети с задержкой психического развития
    • Дети с нарушением речи (логопаты)
  • Соревновательная робототехника
    • РОБОФЕСТ
    • Всероссийская робототехническая олимпиада
    • Word Robot Olimpiad
    • ИКаР
    • ИКаРёнок
    • Документы в помощь педагогу-робототехнику
    • Документы к соревнованиям
    • «РОБОСПОРТ»
  • Дистанционные конкурсы
  • Компьютеры и образование

Подробности Опубликовано : 28.10.2016 12:26 Просмотров: 14070

Видео-уроки

Курс: «Основы робототехники»

Лектор

Филиппов

Сергей Александрович

Программирование Arduino

Лектор

Jeremy Blum

(Джереми Блум)

Робототехника для учителей

Лектор

Тарапата

Виктор Викторович

Уроки по робототехнике

Тренер сборной России по робототехнике

Горнов Олег Александрович

Уроки Arduino

Инженер — экспериментатор

Источник

Пианино на Ардуино. Проекты. Ардуино.

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

Мы уже использовали функцию tone() в уроках. Пожалуйста, посмотрите ее, если уже забыли или пропустили. потому что, сейчас мы будем использовать ее в проекте пианино.

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 7 кнопки
  • 8 резисторов номиналом 10 кОм
  • 1 резистор номиналом 150 Ом
  • Динамик 8 Ом
  • Лего
  • Кабель USB

Корпус из Лего

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

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

Соберем принципиальную схему, до того как прятать все в корпус, чтобы убедиться, что программа и компоненты работают.

Готовое лего пианино

Программа и схема пианино

Прежде всего, подключим динамик через сопротивление к 9 контакту ардуино. Все кнопки соответственно подключим к контактам со 2 по 8. Второй контакт кнопки подключим к шине 5 вольт. И еще один контакт подключим к земле последовательно с сопротивлением.

Внесем небольшие изменения в программу по сравнению с предыдущим уроком так, чтобы на функцию tone() передавалась определенная частота, если нажата соответствующая кнопка.

Кроме того, не забудем объявить все необходимые константы и переменные.

Полный текст программы

Пианино на Ардуино

Теперь постараемся сделать корпус для нашей схемы. В результате, получим нечто похожее на настоящее пианино. На макетной плате у нас получилось большое количество проводов, которые нужно спрятать. Кроме того, необходимо убрать плату Ардуино внутрь корпуса. Но, с другой стороны, оставить место для динамика.

Безусловно, мы не сможем получить звук как у настоящего пианино, но результат все равно завораживающий.

Источник

Проект «Мерзкое пианино» на Ардуино

Просмотр содержимого документа
«Проект «Мерзкое пианино» на Ардуино»

Проект «Мерзкое пианино»

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

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

1 плата Arduino Uno

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

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

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

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

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

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

В данном эксперименте мы подключаем кнопки по схеме с подтягивающим резистором.

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

#define BUZZER_PIN 13 // пин с пищалкой (англ. «buzzer»)

#define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key»)

#define KEY_COUNT 3 // общее количество клавиш

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

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

int keyPin = i + FIRST_KEY_PIN;

// считываем значение с кнопки. Возможны всего 2 варианта:

// * высокий сигнал, 5 вольт, истина — кнопка отпущена

// * низкий сигнал, земля, ложь — кнопка зажата

boolean keyUp = digitalRead(keyPin);

// проверяем условие «если не кнопка отпущена». Знак «!»

// перед булевой переменной означает отрицание, т.е. «не».

// рассчитываем высоту ноты в герцах в зависимости от

// клавиши, которую рассматриваем на данном этапе цикла.

// Мы получим значение 3500, 4000 или 4500

int frequency = 3500 + i * 500;

// Заставляем пищалку пищать с нужной частотой в течение

// 20 миллисекунд. Если клавиша останется зажатой, пищалка

// вновь зазвучит при следующем проходе loop, а мы услышим

tone(BUZZER_PIN, frequency, 20);

Благодаря тому, что в начале программы мы определили FIRST_KEY_PIN и KEY_COUNT, мы можем подключать произвольное количество кнопок к любым идущим друг за другом цифровым пинам, и для корректировки программы нам не придется менять параметры цикла for. Изменить понадобится лишь эти константы:

цикл в любом случае пробегает от 0 до KEY_COUNT;

перед считыванием порта мы задаем смещение на номер первого используемого порта — FIRST_KEY_PIN.

Функция digitalRead(pin) возвращает состояние порта, номер которого передан ей параметром pin. Это может быть состояние HIGH или LOW. Или, выражаясь иначе: высокое напряжение или низкое, 1 или 0, true или false

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

Мы используем логический оператор отрицания «не» !. Если keyUp имеет значение 0, выражение !keyUp будет иметь значение 1 и наоборот.

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

Действия, описанные в условном выражении if, выполняются, когда его условие имеет значение «истина» (единица). Поэтому для выполнения действия по нажатию, мы инвертируем сигнал с кнопки.

Источник

Проект «Мерзкое пианино» на Ардуино

Просмотр содержимого документа
«Проект «Мерзкое пианино» на Ардуино»

Проект «Мерзкое пианино»

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

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

1 плата Arduino Uno

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

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

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

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

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

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

В данном эксперименте мы подключаем кнопки по схеме с подтягивающим резистором.

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

#define BUZZER_PIN 13 // пин с пищалкой (англ. «buzzer»)

#define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key»)

#define KEY_COUNT 3 // общее количество клавиш

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

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

int keyPin = i + FIRST_KEY_PIN;

// считываем значение с кнопки. Возможны всего 2 варианта:

// * высокий сигнал, 5 вольт, истина — кнопка отпущена

// * низкий сигнал, земля, ложь — кнопка зажата

boolean keyUp = digitalRead(keyPin);

// проверяем условие «если не кнопка отпущена». Знак «!»

// перед булевой переменной означает отрицание, т.е. «не».

// рассчитываем высоту ноты в герцах в зависимости от

// клавиши, которую рассматриваем на данном этапе цикла.

// Мы получим значение 3500, 4000 или 4500

int frequency = 3500 + i * 500;

// Заставляем пищалку пищать с нужной частотой в течение

// 20 миллисекунд. Если клавиша останется зажатой, пищалка

// вновь зазвучит при следующем проходе loop, а мы услышим

tone(BUZZER_PIN, frequency, 20);

Благодаря тому, что в начале программы мы определили FIRST_KEY_PIN и KEY_COUNT, мы можем подключать произвольное количество кнопок к любым идущим друг за другом цифровым пинам, и для корректировки программы нам не придется менять параметры цикла for. Изменить понадобится лишь эти константы:

цикл в любом случае пробегает от 0 до KEY_COUNT;

перед считыванием порта мы задаем смещение на номер первого используемого порта — FIRST_KEY_PIN.

Функция digitalRead(pin) возвращает состояние порта, номер которого передан ей параметром pin. Это может быть состояние HIGH или LOW. Или, выражаясь иначе: высокое напряжение или низкое, 1 или 0, true или false

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

Мы используем логический оператор отрицания «не» !. Если keyUp имеет значение 0, выражение !keyUp будет иметь значение 1 и наоборот.

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

Действия, описанные в условном выражении if, выполняются, когда его условие имеет значение «истина» (единица). Поэтому для выполнения действия по нажатию, мы инвертируем сигнал с кнопки.

Источник

Мелодии для Ардуино. Проекты. Ардуино

Привет! Мы уже знаем как извлечь из Ардуино звук. И даже собрали простое пианино с помощью Ардуино. А сегодня посмотрим как написать готовые мелодии на Ардуино в программе. А также, какие мелодии уже есть на просторах интернета.

Содержание

  • Для выполнения этого урока нам понадобятся
  • Программа и схема
  • Другие мелодии
  • Главная тема супер братьев Марио
  • Имперский марш из Звездных войн
  • В лесу родилась елочка
  • Заключение

В предыдущем уроке мы научились генерировать звук. Посмотрите этот урок, если уже забыли его или пропустили. Сегодня мы будем использовать его опять.

Для выполнения этого урока нам понадобятся

  • Ардуино Uno
  • Макетная плата
  • Перемычки
  • 1 резистор номиналом 150 Ом
  • Потенциометр 10 кОм
  • Динамик 8 Ом
  • Кабель USB

Программа и схема

Соберем ту же схему из предыдущего урока. Она довольно проста.

Мы уже знаем, что такое звук, как работает динамик и, в конце концов, знаем как извлечь звук из Ардуино.

Теперь осталось написать программу, которая будет генерировать мелодию на Ардуино и воспроизводить ее на динамике. Например, простая мелодия из книги Джереми Блюма.

# include «pitches.h»
const int SPEAKER=9;

int notes[] = <
NOTE_A4, NOTE_E3, NOTE_A4, 0,
NOTE_A4, NOTE_E3, NOTE_A4, 0,
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_C4, NOTE_D4,
NOTE_E4, NOTE_E3, NOTE_A4, 0
>;

int times[] = <
250, 250, 250, 250,
250, 250, 250, 250,
125, 125, 125, 125, 125, 125, 125, 125,
250, 250, 250, 250
>;

void setup() <
for (int i = 0; i

Динамик подключается к 9 пину через сопротивление. И, к тому же, не забудьте подключить файл с нотами. Он должен находиться рядом с файлом программы в одной папке.

В этом примере ноты и длительность их звучания собраны в массивы. А в главный функции setup() управление мелодией происходит в цикле for() . Такой способ намного удобнее, чем запись мелодии построчно.

Другие мелодии

Посмотрим какие еще мелодии можно сыграть на Ардуино.

Главная тема супер братьев Марио

const int SPEAKER=9;
int notes[] = <
1318, 1318, 1318, 1046, 1318, 1568, 784,
1046, 784, 659, 880, 987, 932, 880, 784,
1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
1046, 784, 659, 880, 987, 932, 880,
784, 1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174,
0, 1568, 1480, 1396, 1244, 1318, 2093, 2093, 2093,
1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174, 1244, 1174, 1046,
>;
int times[] = <
150, 300, 150, 150, 300, 600, 600,
450, 150, 300, 300, 150, 150, 300, 210,
210, 150, 300, 150, 150, 300, 150, 150, 450,
450, 150, 300, 300, 150, 150, 300,
210, 210, 150, 300, 150, 150, 300, 150, 150, 450,
150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150,
0, 150, 150, 150, 300, 150, 300, 150, 600,
150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150, 300, 450, 600,
>;
int delays[] = <
150, 300, 300, 150, 300, 600, 600,
450, 450, 450, 300, 300, 150, 300, 210,
210, 150, 300, 150, 300, 300, 150, 150, 450,
450, 450, 450, 300, 300, 150, 300,
210, 210, 150, 300, 150, 300, 300, 150, 150, 600,
150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 150,
300, 150, 150, 150, 300, 300, 300, 150, 600,
150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 450, 450, 450, 1200,
>;
void setup() <
for (int i = 0; i

Имперский марш из Звездных войн

const int SPEAKER=9;
int notes[] = <
392, 392, 392, 311, 466, 392, 311, 466, 392,
587, 587, 587, 622, 466, 369, 311, 466, 392,
784, 392, 392, 784, 739, 698, 659, 622, 659,
415, 554, 523, 493, 466, 440, 466,
311, 369, 311, 466, 392
>;
int times[] = <
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 250, 100, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 750
>;
void setup() <
for (int i = 0; i

В лесу родилась елочка

int notes[] = <
NOTE_C4, NOTE_A4, NOTE_A4, NOTE_G4,
NOTE_A4, NOTE_F4, NOTE_C4, NOTE_C4,
NOTE_C4, NOTE_A4, NOTE_A4, NOTE_AS4,
NOTE_G4, NOTE_C5, 0, NOTE_C5, NOTE_D4,
NOTE_D4, NOTE_AS4,NOTE_AS4,NOTE_A4,
NOTE_G4, NOTE_F4, NOTE_C4, NOTE_A4,
NOTE_A4, NOTE_G4, NOTE_A4, NOTE_F4
>;

int times[] = <
400,400,400,400,
400,400,400,400,
400,400,400,400,
400,600,20,400,400,
400,400,400,400,
400,400,400,400,
400,400,400,600
>;

void setup() <
for (int i = 0; i

int tonePin = 9;// пин пищалки

void setup() <
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 174, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 220, 499.9995);
delay(555.555);
tone(tonePin, 146, 249.99975);
delay(277.7775);
tone(tonePin, 146, 249.99975);
delay(277.7775);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 174, 374.999625);
delay(416.66625);
tone(tonePin, 155, 124.999875);
delay(138.88875);
tone(tonePin, 174, 499.9995);
delay(555.555);
tone(tonePin, 116, 249.99975);
delay(277.7775);
tone(tonePin, 116, 249.99975);
delay(277.7775);
tone(tonePin, 130, 499.9995);
delay(555.555);
tone(tonePin, 130, 374.999625);
delay(416.66625);
tone(tonePin, 146, 124.999875);
delay(138.88875);
tone(tonePin, 155, 499.9995);
delay(555.555);
tone(tonePin, 155, 374.999625);
delay(416.66625);
tone(tonePin, 174, 124.999875);
delay(138.88875);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 233, 124.999875);
delay(138.88875);
tone(tonePin, 261, 749.99925);
delay(833.3325);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 293, 499.9995);
delay(555.555);
tone(tonePin, 261, 374.999625);
delay(416.66625);
tone(tonePin, 233, 124.999875);
delay(138.88875);
tone(tonePin, 261, 499.9995);
delay(555.555);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 220, 499.9995);
delay(555.555);
tone(tonePin, 146, 374.999625);
delay(416.66625);
tone(tonePin, 146, 124.999875);
delay(138.88875);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 174, 374.999625);
delay(416.66625);
tone(tonePin, 155, 124.999875);
delay(138.88875);
tone(tonePin, 174, 499.9995);
delay(555.555);
tone(tonePin, 116, 374.999625);
delay(416.66625);
tone(tonePin, 116, 124.999875);
delay(138.88875);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 174, 999.999);
delay(1111.11);
tone(tonePin, 293, 999.999);
delay(1111.11);
tone(tonePin, 261, 249.99975);
delay(277.7775);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 261, 749.99925);
delay(833.3325);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 174, 999.999);
delay(1111.11);
tone(tonePin, 233, 999.999);
delay(1111.11);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 220, 749.99925);
delay(833.3325);
tone(tonePin, 146, 249.99975);
delay(277.7775);
tone(tonePin, 146, 999.999);
delay(1111.11);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 195, 374.999625);
delay(416.66625);
tone(tonePin, 220, 124.999875);
delay(138.88875);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 195, 374.999625);
delay(416.66625);
tone(tonePin, 220, 124.999875);
delay(138.88875);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 195, 374.999625);
delay(416.66625);
tone(tonePin, 233, 124.999875);
delay(138.88875);
tone(tonePin, 311, 999.999);
delay(1111.11);
tone(tonePin, 311, 999.999);
delay(1111.11);
tone(tonePin, 293, 249.99975);
delay(277.7775);
tone(tonePin, 261, 249.99975);
delay(277.7775);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 261, 249.99975);
delay(277.7775);
tone(tonePin, 293, 749.99925);
delay(833.3325);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 233, 999.999);
delay(1111.11);
tone(tonePin, 261, 999.999);
delay(1111.11);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 233, 749.99925);
delay(833.3325);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 195, 999.999);
delay(1111.11);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 174, 499.9995);
delay(555.555);
tone(tonePin, 116, 374.999625);
delay(416.66625);
tone(tonePin, 116, 124.999875);
delay(138.88875);
tone(tonePin, 174, 999.999);
delay(1111.11);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 220, 499.9995);
delay(555.555);
tone(tonePin, 233, 1999.998);
delay(2222.22);
>
void loop() <>

Заключение

Как видите, на Ардуино можно сыграть почти любую мелодию. Но на этом музыкальные возможности Ардуино не исчерпываются. И если подключить дополнительные модули, то можно проиграть и mp3 аудио файлы. В будущем мы попробуем это сделать.

Спасибо, что дочитали статью до конца.

Пожалуйста, подписывайтесь на блог в яндекс дзен, ставьте лайки и пишите комментарии.

Источник

Оцените статью