Проект Arduino для начинающих: робот-барабанщик

Итак, у меня есть музыкальное образование, 5 лет программирования на Ruby и 7 лет на Pure Data. У меня также есть Arduino и Raspberry Pi.

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

У меня есть плетеный пингвин, и я хочу, чтобы он играл на барабанах:

  • Какие компоненты мне нужны для создания такого рода разового ударного мероприятия?
  • Могу ли я вызвать эти события из Ruby?

, 👍2

Обсуждение

Добро пожаловать в Arduino SE! Я немного отредактировал ваш вопрос, удалив запрос на учебные пособия. Stack Exchange — это хранилище информации, а не хранилище ссылок. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь отвечать на этот контент. Спасибо! (А ещё пингвины потрясающие :-D), @Anonymous Penguin

Я не уверен, стоит ли удалять последнее предложение, поскольку оно объясняет, для чего предназначено изображение пингвина, но, похоже, я не могу редактировать эту часть с повторением 101., @AJFaraday

Исправлено, извините., @Anonymous Penguin

Я думаю, что самой сложной частью этого проекта будет создание электромеханического механизма, который будет перемещать рычаги в хорошем барабанном движении, не завися от дорогого, энергоемкого промышленного серводвигателя и привода. Бесщеточный двигатель с датчиком от большой радиоуправляемой машины может работать хорошо, но найти или создать подходящий контроллер может оказаться непростой задачей., @Chris Stratton

В меньшем масштабе вы могли бы попробовать соленоид и пружину... если только у вас нет одного из огромных соленоидов от механизма жесткого диска со съемным диском мэйнфрейма (однажды я видел, как такие управляли креслом-качалкой!) Какая-то комбинация двигателя , кулачок, рычаг с возвратной пружиной и энкодер для обратной связи по положению и скорости также могут работать., @Chris Stratton


2 ответа


1
  • чтобы двигать руками: найдите руководства по управлению двигателем в Arduino (любой шаг постоянного тока).
  • управлять Arduino с ПК (или PI) — вот что имеется в виду, когда вы говорите Ruby — проверьте, как удаленно управлять через последовательный порт
,

Если хотите посмотреть, я сделал нечто подобное на Python. Ii эмулирует USB-клавиатуру, но вы можете добавить дополнительные команды для поддержки управления двигателями. https://github.com/01org-AutomatedFlasherTester/pem, @Igor Stoppa

Я пока не уверен, что это ответ, пока не потрачу на него немного времени, но похоже, что управление последовательным портом, вероятно, будет правильным подходом., @AJFaraday


2

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

Типы двигателей:

  • Шаговые двигатели — это тип двигателя со специальным расположением катушек, позволяющим поворачивать его на доли градуса, посылая на двигатель импульсы. Например, вы можете купить шаговый двигатель на 200 шагов, который поворачивается с шагом 1,8 градуса. Они довольно дорогие и требуют довольно дорогих водителей (обычно 5-10 долларов за водителя). Часто используется в станках с ЧПУ и 3D-принтерах. Непрерывная ротация.
  • Двигатели постоянного тока общего назначения (два типа: бесщеточные и коллекторные, но я не буду здесь вдаваться в подробности) — это тип двигателя. Их драйверы часто дешевле, чем драйверы для шагового двигателя, но вы мало контролируете их вращение (вместо того, чтобы «сделать один шаг на X градусов», вы говорите, «повернуть на 25% мощности по часовой стрелке», чего вы не делаете). знать фактическую скорость). Иногда они используются с поворотными энкодерами или потенциометрами для управления скоростью и положением шпинделя. Непрерывная ротация.
  • Серводвигатели на самом деле не относятся к отдельному типу двигателей; это двигатели постоянного тока (не шаговые) со встроенным в драйвер потенциометром. Вы посылаете на него импульсы (для этого можно использовать сервобиблиотеку Arduino), чтобы скажите ему точную степень, до которой нужно идти. Могут двигаться только на ограниченный диапазон: обычно на 90 или 180 градусов, хотя можно приобрести специальные, которые могут поворачивать на гораздо большие расстояния.

Использование серводвигателя:

Подключить его можно следующим образом:

Из этого руководства по Arduino

А затем очень простой код для использования двигателя:

#include <Servo.h> 

Servo myservo;

void setup() {
  myservo.attach(9);
} 


void loop() {
  myservo.write(10);
  delay(500); 
  myservo.write(0);
  delay(500);
}

Разговор с Руби:

Лучший вариант — использовать последовательный порт вашего компьютера. Выясните, как получить доступ к COM/последовательному порту в Ruby. Затем вы сможете отправлять сообщения со своего компьютера на Arduino, но вам придется придумать способ структурировать сообщения.

,

Это может работать для ограниченных целей, но типичный RC-сервопривод имеет относительно медленное время прохождения, что ограничивает достижимый темп. Я также был бы обеспокоен повреждением шестерен, если механизм не обладает достаточной гибкостью, что может быть необходимо также для того, чтобы палка или молоток могли отскочить назад, чтобы избежать заглушения звука., @Chris Stratton

@ChrisStratton высота палочки должна быть довольно маленькой (хотя это может сделать ее тихой, хотя я сомневаюсь, что многие люди будут возражать против того, чтобы плетеный пингвин-барабанщик молчал). Кроме того, я не думаю, что ОП ожидает, что он будет играть тридцать секундные ноты со скоростью 150 ударов в минуту, но вы правы в том, что потребуется более мощный сервопривод. Кроме того, ОП может захотеть, чтобы он «сжимал» палки по направлению к середине, чтобы на него не оказывалось такого большого давления, поскольку палки действуют как рычаги., @Anonymous Penguin

Я действительно не думаю, что они могли бы получить хороший звук без ударного действия при вождении более длинной гибкой палки. Хотя я признаю, что они быстрее, чем я помнил: скажем, 0,2 секунды в каждую сторону, поэтому, если тщательно рассчитать время команд, можно достичь четвертных нот в 120 ударов в минуту., @Chris Stratton

Спасибо, похоже, это действительно удобный учебник по компонентам двигателя. Что касается взаимодействия Ruby, означает ли это, что я должен создавать функции в синтаксисе Arduino, загружать их в Arduino, а затем запускать их из Ruby, используя последовательный порт?, @AJFaraday

@ChrisStratton .2 в каждом направлении будет давать восьмые ноты при 150 щелчках (60 секунд в минуту / 0,4 секунды на удар = 150 ударов в минуту с 2 палочками = примерно 150 BPM восьмых), @Anonymous Penguin

Возможно, удастся получить значение выше 120, но я оставил некоторую поправку на тот факт, что *командующее* положение устройства не знает, когда фактически было достигнуто ранее заданное положение. Однако оно будет меняться в зависимости от напряжения, поэтому может помочь работа сервопривода с самым высоким указанным напряжением. И, конечно же, есть более быстрые сервоприводы, доступные за дополнительную плату. Меня беспокоит шум шестерни., @Chris Stratton