LEGO Orbita-like music color sequencer

Para os mais especializados em mecânica e electrónica em LEGO.
Responder
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4373
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

LEGO Orbita-like music color sequencer

Mensagem por CyberX »

Este é um projecto inspirado (copiado?) no Orbita, um projecto Kickstarter da Playtronica que depois não deu em nada

Imagem

O original tinha 4 sensores de cor, cada um associado a uma pista de som. Sendo MIDI, penso que seria associada a um instrumento (por exemplo o circulo interior era associado à percurssão e os restantes círculos a um baixo electrónico, a um orgão e a uma guitarra). A velocidade de rotação podia ser controlada manualmente e com isso acelerar/abrandar o ritmo da música.

Utilizei um MINDSTORMS EV3 com 4 sensores de cor para imitar esta parte:


infelizmente o código ainda está muito imaturo, limita-se a tocar notas em python conforme as cores detectadas, parecendo o som de um jogo de 8-bits (género ZX Spectrum) rasca.

Para conseguir que as 4 pistas de som funcionem convenientemente (em polifonia) e associadas a instrumentos decentes (sound bank) precisava implementar MIDI como fiz com outros projectos que já apresentei anteriormente neste fórum. Mas dá algum trabalho, ainda para mais agora que o EV3 saiu de suporte (não apenas pela LEGO mas também pelo próprio Linux - desde algures em 2022 que já não existem actualizações para a versão de Debian Linux em que o sistema operativo 'ev3dev' é baseado pelo que cada vez é mais dificil instalar componentes não-standar como sintetizadores MIDI e protocolos de transporte MIDI).

Para Viana do Castelo vou só investir um pouco mais na diversidade de peças coloridas (tentar acertar com as cores que o sensor de cor realmente reconhece - amarelo pelos visto tá quieto).

No video uso um "booster" de som sem fios - encosta-se ao altifalante do EV3 e por indução amplifica o som, sem fios (ultrapassando a limitação do EV3 não ter uma ficha de saída de som). Também podia usar uma placa de som USB suportada pelo ev3dev e ligar-lhe um amplificador decente... mas por agora fica assim, ainda tenho quase toda a electrónica de som encaixotada com a banda robotizada que levei a Oeiras o ano passado.

Dimensões (sem o "booster"): 40 cm ou 50 studs por 34 studs
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4373
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: LEGO Orbita-like music color sequencer

Mensagem por CyberX »

Fisicamente o mesmo MOC que levei a Viana do Castelo em 2023 mas com uma programação completamente diferente, tirando partido do que há uns anos aprendi com a Harpa Laser e depois no confinamento com a banda robótica



o MINDSTORMS EV3 está a correr ev3dev (linux), instalei um módulo de python (o MIDO) que permite integração com MIDI;
liguei um adaptador USB MIDI ao EV3 pelo que o meu script de python envia mensagens (neste caso notas) a cada cor que identifica; 4 anéis de cores, 4 sensores de cor, 4 canais ou pistas MIDI

Depois tenho um sintetizador MiniDexed (um projecto open source que implementa num único Raspberry Pi oito sintetizadores simultâneos, compatíveis com o Yamaha DX7 dos anos 80) e um MIDI Merger que funciona como um router encaminhado as mensagens MIDI vindas do EV3 para o MiniDexed. "apenas" estou a usar 4 sintetizadores, um para cada canal MIDI, cada um emulando um instrumento diferente.

Ainda tenho de explorar os milhentos instrumentos disponíveis na net para carregar no MiniDexed de modo a ter algo mais interessante para mostrar no próximo evento e melhorar um pouco o programa para ter mensagens mais complexas (acordes decentes em vez de meras notas escolhidas ao acaso). E regulação da velocidade da plataforma, do volume de som, talvez alguns efeitos...

Como ainda posso tirar partido de mais 4 instrumentos neste sintetizador MiniDexed outros "instrumentos" MIDI se poderão juntar. Tenho uma Harpa Laser, um trompete e um kit de percursão algures e muitas ideias no bloco de notas :D
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4373
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: LEGO Orbita-like music color sequencer

Mensagem por CyberX »

Ligeiras refinações no código e melhor entendimento de como funciona o MiniDexed, descarreguei alguns bancos de instrumentos, escolhi algumas vozes (instrumentos) de entre as centenas que vêm nestes bancos e finalmente descobri como se grava isso no cartão microSD para não ter de voltar a fazer tudo novamente cada vez que ligo o sintetizador

Também arranjei mais uns quantos tiles com as cores básicas da LEGO... mesmo assim os sensores de cor do EV3 por vezes perdem-se. Vou ter de estudar uma forma de ler os valores RGB dos tiles em vez de confiar na classificação feita pelo sensor. Salvo erro foi isso que o autor do MindCub3r fez também para conseguir ler as cores do cubo de Rubik.

Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4373
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: LEGO Orbita-like music color sequencer

Mensagem por CyberX »

Andei a dar forte nisto na última semana, a Change List é enorme e ainda não tive tempo para fazer um video que consiga ilustrar tudo,
Mas para não me esquecer mais tarde:

Além de enviar mensagens (notas MIDI) também escuta mensagens, especificamente CC (Control Changes) pelo que é possível (e estou a fazê-lo) controlar parâmetros do dispositivo via MIDI (com um programa DAW (Digital Audio Worsktation) ou um dispositivo fisico como um Control Surface (no meu caso um KORG nanoKontrol 2):

Imagem

Alguns comandos CC implementados:
- start/stop
- speed (velocidade de rotação da turntable)
- note duration (global ou por canal)
- note volume (velocity em termos MIDI)
- mute/unmute (por canal)
- incrementar/diminuir uma oitava (por canal)
- PÁRA TUDO JÁ e repõe os parâmetros iniciais :D
- usar a faixa interior para percussão (canal MIDI 10) ou como instrumento "clássico"

claro que isto tudo em 64 MB de memória e com um processador single-core dos tempos dos dinossauros obrigou a aprender um bocado como raio funcionam as estruturas de dados do Python. Fiz um overclock ao EV3, lixei-me para as estruturas de dados avançadas (como dicionários) e consegui que esta cena tocasse decentemente mas apenas em "modo local" (iniciando a execução através dos botões do EV3 em vez de remotamente pela rede). E deixando cair a opção inicial de usar teclas do EV3 para algumas das funcionalidades básicas... o dispositivo como um todo funciona bem melhor se esquecer os botões do EV3 e só usar comandos MIDI.

Acho que até mais decentemente que o Orbita original. O tipo queixa-se neste video que tiveram de adicionar sensores magnéticos aos tags coloridos porque a resposta meramente por sensores de cor não era suficientemente rápida - talvez por isso esta cena nunca tenha passado de uma ideia bem intencionada no Kickstarter para a Produção

Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4373
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: LEGO Orbita-like music color sequencer

Mensagem por CyberX »

Chegadas a maior parte das peças que faltavam (só faltam mesmo o raio dos tiles verdes) refiz a plataforma e as color tags e afinei mais algum código.

Imagem

A plataforma é baseada nas banana gears Technic, com cerca de 50 round tiles 1x1 a fazer de rolamentos à semelhança de vários videos no Youtube como este:


os "rolamentos" fazem imensa diferença, diminuindo o ruído e melhorando estupidamente o desempenho sobretudo nas baixas rotações (muito menos "safanões" na progressão). Infelizmente fazem com que a plataforma fique apenas assente neles o que significa que quando levar isto para algum lado tenho de guardar os 50 round tiles para não os perder e tenho de os por novamente um a um no novo local :(

Aproveitei a reformulação para colocar o EV3 numa posição mais prática para conseguir ler o êcran sem ter de me dobrar todo.
O MOC em si tem agora, na sua extensão máxima em rotação, uns 70 x 53 x 26 cm qualquer coisa próxima de 88 x 66 x 32 studs.

Os tags de cores são agora bastante mais altos. Isso permite muito menos interferência da cor do fundo (agora LBG) e além disso maior estabilidade nas altas rotações. Ainda assim, a 33 rpm, tem tendência a deslizar.

O código foi optimizado para consumir menos recursos do EV3, que além disso está em modo overclock para aproveitar cada MHz de CPU possível. Em relação ao último post dediquei ainda algum tempo ao algoritmo de deteção de cores, usando rgb e corrigindo os valores de Red num dos sensores que por qualquer razão dava valores muito mais altos que os outros três. Isso permite-me distinguir 12 cores diferentes embora por vez se baralhe com o preto (sobretudo a meio da tarde, quando o sol bate na janela próximo do estaminé). Estou a pensar incluir uma forma de correção da luminusidade por software, durante a execução, para não passar muitas vergonhas em eventos.

12 cores permite implementar uma oitava completa (8 notas de um Dó ao Dó seguinte mais 4 sustenidos). No caso do canal de percussão como só tenho um drum kit de 8 vozes/8 pads algumas cores repetem-se (por exemplo o preto e o castanho geram o mesmo evento, o Kick Drum da bateria).

O motor antes era controlado em modo de percentagem de velocidade e tinha algumas dificuldades em baixas rotações. Agora é controlado em modo de Rotações Por Minuto e defeni no código uma gama de 1 rpm a 30 rpm. Como na faixa interior apenas cabem 16 tags de cor (talvez 20 com algum esforço mas fiquemos pelas 16) isso signifca 16 a 480 bpm (beats ou batimentos por minuto). Podia dar mais (por exemplo experimentei 33 rpm por piada, já que é a velocidade de um LP num gira-discos) mas os tags começam a deslizar por ali fora. E 480 bpm nem uma banda de Trash Metal faz. Também podia dar menos mas é exasperante, 1 rpm já é mais que suficiente para se conseguir colocar os tags em andamento.



No final do video vê-se o estaminé. Uma mesa de mistura, dois monitoes (colunas amplificadas), um controlador de parãmetros (KORG nanoKontrol2), um Raspberry Pi a fazer de sintetizador polifónico (miniDexed), um drum kit (AKAI MPX8) e trẽs acessórios para criar a rede MIDI (um USB MIDI host para poder ligar dispositivos USB à rede, um MIDI Merger para poder routear isto tudo e um MIDI Thru para poder ligar o sintetizador e o drum kit à saída do Merger). Mais uma extensão de tomadas 230V e carregadores USB para alimentar isto tudo.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Responder