Конспект хакера мерзкое пианино

Обновлено: 07.07.2024

По робототехнике делаем проект "Мерзкое пианино с шестью кнопками. " Нам посоветовали добавить светодиоды. Мы подключили светодиоды к кнопкам и поставили резистры ну всё как положено. Светодиоды не горят. Да ещё и кнопки не звучат. Подскажите как подсоединить светодиод. Если можно то отправьте фотографию. Заранее спасибо, команда 6 А.

Кнопки и не будут звучать, им звучать нечем. :)))
Звук выдает пьезоэлемент, который идет в комплекте с Arduino.
У моего племянника "Мерзкое пианино" с первого раза то же не заработало. Пришлите листинг ВАШЕЙ программы и фото макетной платы с ВАШЕЙ собранной схемой для проверки.

Timeweb - компания, которая размещает проекты клиентов в Интернете, регистрирует адреса сайтов и предоставляет аренду виртуальных и физических серверов. Разместите свой сайт в Сети - расскажите миру о себе!

Виртуальный хостинг

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

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

Выделенные серверы

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

Ардуино лего пианино

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

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

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

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

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

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

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

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

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

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

Принципиальная схема подключения пианино

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

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

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

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

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

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

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

Привет! Это статья о том, как я делал шарманку на Arduino.

Немного истории

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


С середины XVIII века и до изобретения граммофона существовали различные автоматические инструменты. В основном это были пианолы и ручные уличные шарманки. Эти инструменты были автоматизированы механикой и пневматикой.


В механической схеме использовался приводной валик с кулачками. Вращаясь, кулачки задевали молоточки, которые соответствовали клавишам фортепиано.

В конце XIX-начале XX веков появились более совершенные инструменты, управляемые с помощью перфорированных бумажных лент. В таких инструментах использовалась пневматическая схема с мехами и трубками, а отверстия в ленте играли роль миниатюрных пневматических клапанов.


Считывание нот

Сперва нужно определить — нажата клавиша пианино или нет.

Старинные музыкальные инструменты используют довольно сложные механизмы. Я же могу использовать Arduino и электронные датчики, чтобы определить — нажата клавиша или нет. Например, используя ИК-сенсор или датчик линии. Эти датчики широко используются в мире Arduino для гонок по линии. Они позволяют определить — белый или черный цвет поверхности под ними.


Идея следующая. Пусть один ИК-датчик представляет собой одну ноту и клавишу пианино. Имеется несколько датчиков. Под датчик помещается лист бумаги, разделенный на параллельные дорожки. Дорожки состоят из черных и белых областей. Лист начинает движение относительно датчиков. Если на дорожке под датчиком находится черная область, то клавиша нажата. Если белая область — клавиша отжата. В момент, когда клавиша переходит из освобожденного состояния в нажатое — нота начинает звучать. Звук удерживается, пока область под датчиком остается черной.

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

Я сделал клавиатуру, состоящую из 40 клавиш. Для этого я использовал пять модулей Octoliner. Модуль Octoliner — это восьмиканальный датчик линии. Каждый модуль имеет восемь оптопар TCRT5000 и может быть использован для 8 различных клавиш пианино. Модуль управляется по шине I2C, и его легко связать с Arduino.

Я разместил пять модулей последовательно, чтобы создать единую обширную линейную матрицу из 40 (5x8) датчиков. Вы можете сделать клавиатуру из меньшего количества клавиш, или сделать полноразмерную клавиатуру пианино с 88 клавишами. Я выбрал 40, потому что это примерно половина всех клавиш на реальном инструменте.

Ардуино как миди устройство

Для считывания сигналов со всех линейных датчиков я использую Arduino. Однако датчики способны только информировать Arduino, нажата ли клавиша или отпущена. Чтобы в конце получить звук, нужно превратить Arudino в MIDI-устройство.


Выбор пал на плату Arduino MKR ZERO. Она способна эмулировать USB HID из коробки. Плата очень производительная, а ее большой объем флэша идеально подойдет для хранения пресетов кучи музыкальных композиций. Также я использовал обычную тактовую кнопку для переключения пресетов и знакогенерирующий I2C LCD дисплей 16x2 для отображения текущего пресета.

Конструкция шарманки

Я не буду описывать всю конструкцию подробно. Шарманка делалась с первого раза и наугад. Только ради эксперимента. Здесь довольно много деталей, проще взглянуть на 3D-модель и спецификацию. Для изготовления деталей я использовал оргстекло, лазерную резку, 3D-печать, а также материалы и механику, которые у меня были дома.


Условно я разделил конструкцию на две основные части и назвал их "выпрямитель" и "съемник". Обе части крепятся к опорной плите. Выпрямитель крепится к основанию с помощью стоек M3 длиной 65мм, а съемник — с помощью напечатанных на принтере уголков. Крепеж не показан на сборках, но есть в спецификации.

Сборка выпрямителя


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

Выпрямитель собран из нескольких пластин. Бумажный лист зажат между основанием и крышкой. Между крышкой и листом сделан небольшой зазор в 1-2 мм, чтобы лист не закусывало при движении. По бокам установлены две направляющие пластины. Пять модулей датчиков линии установлены на пластине на определенной высоте над листом и крепятся к основанию четырьмя стойками 6мм.

Сборка съемника


Эта часть предназначена для подачи листа. Она тянет лист из выпрямителя.

На валах установлены четыре колеса с резиновыми кольцами. Они плотно зажимают нотный лист. Вращаясь, эти колеса вытягивают считанный лист из выпрямителя. Съемник фиксируется на опорной плите уголками. Съемник состоит из трех пластин оргстекла и трех 6мм валов между ними. Валы закреплены в пластинах фланцевыми подшипниками F626ZZ. Подшипники зафиксированы с помощью напечатанных крышек.

Валы вращаются маховиком через ременную передачу. Я использовал 2GT ремень без натяжения. Замкнутый ремень шириной 6мм с 250 зубьями. Такие ремни и шкивы для них распространены в хобби-станках с ЧПУ и 3D-принтерах, поэтому их легко найти и купить. Малый шкив — купленный GT2 20 6 B6.


Больший шкив самодельный, изготовлен лазерной резкой из оргстекла. Он состоит из 4 пластин толщиной 2 и 4 мм и алюминиевого фланца на вал 6мм.


Маховик состоит из пластины оргстекла, подшипника F625ZZ, фланца на вал 6мм и напечатанной рукоятки. Подшипник запрессован на рукоятке и зафиксирован в пластине напечатанной крышкой.


Колеса, тянущие лист, тоже сборные. Каждое колесо состоит из 4 пластин, толщиной 3 и 2мм, и фланца на вал 6мм. На пластины натянуто резиновое уплотнительное кольцо. Я использовал обычное уплотнительное кольцо ГОСТ 9833 050-060-58.

Экранирование оптопар


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


Я решил максимально избавиться от помех, и экранировал каждую оптопару колпачком. Колпачки которые подходят к оптопарам TCRT5000 очень маленькие, напечатал их на фотополимернике.

Перевод нотного листа

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

Итак, один датчик линии имеет 8 каналов, отвечающих за считывание 8 нот. Длина датчика составляет 80мм. Поместив 5 модулей рядом, я получаю общую длину в 400мм. Добавлю еще 5мм свободного места по краям. Таким образом, общая ширина нотного листа равна 410 мм.

Ширина одной нотной дорожки равна ширине одной оптопары и составляет 5,8мм. Расстояние между оптронами на датчике — 4,2 мм. Такое же расстояние между нотными дорожками на листе.


Ноты делятся по длительности, где длительность — это доля такта. Нота может быть целой, половиной, четвертой, восьмой, шестнадцатой итд. За основу я беру длительность шестнадцатой ноты, и назначаю ей высоту 10мм на листе. Теперь весь лист может быть разлинован горизонтальными линиями с интервалом 10мм, так как это минимальный шаг. Черный прямоугольник размером 10х5,8мм на дорожке даст звук длительностью шестнадцатой ноты. Прямоугольник высотой 20мм — это восьмая, 40мм — четвертая, 80мм — половина, 160мм — целая.


  1. Смотрим на все ноты, которые используются в музыкальном произведении, и записываем их MIDI номера в порядке возрастания. Эта мелодия использует только три ноты первой октавы: E, G и A. Нота E первой октавы имеет MIDI-номер 64, G имеет номер 67, а A имеет номер 69.
  2. Присваиваем MIDI-номера каналам датчика линии. Например, я назначаю на первый канал номер 64, второй канал номер 67 и на третий номер 69.
  3. Смотрим на размер произведения. Эта мелодия имеет размер 2/4. Это означает, что длина от одного такта до другого равна двум нотам с четвертой длительностью. Таким образом, высота одного такта на листе равна 40мм (2*80 мм). Полная мелодия имеет 4 такта, и я могу разместить все тактовые линии.
  4. Переводим произведение. Закрашиваем прямоугольные черные области на листе в соответствии с длительностью нот.
  5. Правим нотный лист и удаляем помарки. Например, эта мелодия имеет две одинаковые восьмые ноты, которые звучат последовательно во втором, третьем и четвертом тактах. На переведенном фрагменте эти две восьмые ноты слились в единую четвертую ноту. Их необходимо разделить, слегка укоротив длительность первой ноты. Для этого уменьшаем высоту первого прямоугольника, обеспечив пустой белый зазор.

Переведенная музыка

Вся нотная запись получилась слишком длинной, чтобы физически поместиться на одном бумажном листе. Чтобы уместить все ноты, я распечатал их частями на нескольких листах А1. Затем обрезал края листов до нужной ширины и последовательно склеивал их в один большой рулон. Всего я попробовал перевести три музыкальных отрывка.

  1. "Hedwig's Theme" из Гарри Поттера в аранжировке Patrick Piesman.
    Используемые MIDI ноты:
    41, 42, 43, 45, 48, 49, 50, 52
    54, 55, 56, 58, 59, 60, 61, 62
    63, 64, 65, 66, 67, 68, 69, 70
    71, 72, 73, 74, 75, 76, 77, 78
    79, 80, 81, 82, 83, 84, 85, 86
  2. "The Black Pearl" из Пиратов карибского моря в аранжировке Klaus Badelt.
    Используемые MIDI ноты:
    31, 33, 34, 36, 38, 40, 41, 43
    45, 46, 48, 50, 52, 53, 55, 57
    58, 59, 60, 61, 62, 63, 64, 65
    66, 67, 68, 69, 70, 71, 72, 73
    74, 76, 77, 79, 81, 82, 85, 86
  3. Оригинальная первая часть "The Entertainer" Джоплина.
    Используемые MIDI ноты:
    43, 44, 45, 47, 48, 50, 51, 52
    53, 54, 55, 56, 57, 58, 59, 60
    62, 63, 64, 65, 67, 69, 71, 72
    74, 76, 77, 78, 79, 81, 83, 84
    86, 87, 88

Прикладываю ссылки на оригинальные фортепианные ноты, на мои переведенные ноты для шарманки и пустой линованный CAD-лист формата А1, который может пригодиться для ваших переводов.

XOD и библиотеки

Для прошивки Arduino я использую визуальную среду программирования XOD. Я часто использую XOD в своих проектах, и этот не исключение. Тем более, что все необходимые для проекта библиотеки уже созданы пользователями.

amperka/octoliner — библиотека от производителя для работы с восьмиканальным датчиком линии. Она содержит все необходимые ноды для быстрого начала работы с датчиком, а также некоторые ноды расширенного функционала, такие как настройка яркости/чувствительности оптронов или изменение адреса I2C.

Главный патч проекта находится в библиотеке gabbapeople/barrel-organ/

Патч проекта


В программе есть счетчик пресетов. Каждый пресет соответствует определенному набору MIDI нот назначенных на каналы датчиков линий. Пресеты переключаются с кнопкой и нодой track-charger . На дисплее text-lcd-i2c-16x2 отображается, какой пресет активен в данный момент.

Далее идет нода keyboard . Эта нода принимает в себя шины всех датчиков, шину MIDI , а также текущее значение счетчика пресетов.

Нода клавиатуры


Нода keyboard составная и очень большая, это сердце устройства. Структура ноды начинается с шин сенсоров и значения текущего пресета.

Затем следуют пять нод octoliner-read-channels . Одна такая нода считывает восемь аналоговых сигналов от восьми оптронов на датчике. Сигналы считываются последовательно и оцифровываются по простой формуле. Если сигнал >=0,7 , то клавиша нажата; если нет, то она отпущена. Суммарно ноды octoliner-read-channels имеют 40 выходных пинов пронумерованных от CH0 до CH7 и выводят в них 40 булевых значений.

Далее следует выбор MIDI номера ноты исходя из пресета. Один канал может соответствовать разным нотам. Выбор ноты для конкретного канала зависит от текущего пресета. Нода note-switcher выбирает нужный MIDI-номер в зависимости от номера пресета. За каждой нотой закреплена шина с уникальным именем, например — 48_1 , где первое значение это номер MIDI, а второе значение номер пресета. Логические ноды xor отсекают неиспользуемые шины.

Вывод звука


Шарманку можно подключить к любому синтезатору с USB. Например, можно подключить её к компьютеру c ОС Windows и использовать Synthesia. Или подключите её к малине и использовать QjackCtl & Qsynth.

Читайте также: