Mudanças entre as edições de "Hibrida/Baticum"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
 
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 19: Linha 19:
 
=== Síntese de Áudio ===
 
=== Síntese de Áudio ===
   
Ainda é necessário avaliar qual plataforma será utilizada para o desenvolvimento do módulo sintetizador de áudio, porém é provável que seja um Beaglebone Black. Com ele seria possível utilizar bibliotecas de síntese de áudio básicas como o [http://code.compartmental.net/tools/minim/ Minim] ou avançadas como o [http://www.openframeworks.cc/ openFrameworks], [http://puredata.info/ PD] ou [http://supercollider.sourceforge.net/ SuperCollider].
+
Adotou-se a Beaglebone Black como plataforma para síntese de áudio. Com ele seria possível utilizar bibliotecas de síntese de áudio básicas como o [http://code.compartmental.net/tools/minim/ Minim] ou avançadas como o [http://www.openframeworks.cc/ openFrameworks], [http://puredata.info/ PD] ou [http://supercollider.sourceforge.net/ SuperCollider].
   
 
Um exemplo de utilização do Minim para construção de um drum machine com samples pode ser encontrada [http://code.compartmental.net/drum/ aqui].
 
Um exemplo de utilização do Minim para construção de um drum machine com samples pode ser encontrada [http://code.compartmental.net/drum/ aqui].
  +
  +
=== Implementação ===
  +
  +
Como a Beaglebone Black vem de fábrica com o OS Ångström, cujo foco não é multimídia, trocou-se o sistema operacional pelo Debian Wheezy, com flash na eMMC (isto é, o OS está armazenado na memória interna da Beaglebone, e não no cartão microSD). Um script para realizar o flash vem junto com a imagem do Debian, basta rodá-lo uma vez. Instruções podem ser encontradas [http://elinux.org/BeagleBoardDebian aqui].
  +
  +
Tentou-se utilizar a biblioteca Jack com Puredata. Para isso foi necessário baixar o código fonte e recompilá-lo, configurando flags para compilar para plataforma ARM com instruction set NEON. Instruções podem ser lidas [http://puredata.info/docs/embedded/bbb/sound aqui], mas pode ser necessário fazer modificações. A utilização do Jack não mostrou boa performance, então não houve decisão por usar o Jack ou usar somente o ALSA. Para um primeiro teste, se usou o áudio do HDMI (conectado a uma televisão), para obter a saída de áudio. Depois utilizou-se uma placa de áudio USB com saída P2.
  +
  +
Foi necessário fazer um [http://pt.wikipedia.org/wiki/Divisor_de_tens%C3%A3o divisor resistivo] para a entrada do sinal do PulseSensor. Isto porque o PulseSensor gera um sinal de 0 a 5V, enquanto a Beaglebone lê de 0 a 1.8V, de modo que é necessário reduzir a faixa de tensão de entrada. Um divisor resistivo de, por exemplo, R1 = 1k e R2 = 470 ohms, lendo a tensão de R2, seria o suficiente para isso: 5V * (470 / 1470) = 1.60V. Recomenda-se que a impedância de R2 seja menor que 1k.
  +
  +
Foi feito um port de Arduino para Beaglebone Black (em Python), o código está disponível [https://github.com/ericomine/pulsesensorpy neste repositório] do GitHub. Porém, as leituras feitas do PulseSensor não eram consistentes, aparentemente as leituras estavam saturadas, assemelhando-se a uma onda quadrada em vez da leitura realista de um oxímetro. Outras pessoas relataram o mesmo problema, sendo que algumas pessoas [http://beagleboard-gsoc13.blogspot.com.br/2013/07/sampling-analogue-signals-using-adc-on.html sugerem] que uma atualização no kernel do Linux utilizado pode resolver o problema, mas não houve tempo hábil para testar. Além disso, a versão do kernel utilizada já era a mais recente, e mesmo assim o problema persistia. Desse modo que não foi possível concretizar a solução idealizada.
  +
  +
Poderia-se adotar como alternativas, utilizar um Raspberry Pi com ADC externo, ou outra plataforma como a [http://www.solid-run.com/products/hummingboard/ Hummingboard] que possui um ADC integrado.
   
 
== Leia mais ==
 
== Leia mais ==

Edição atual tal como às 14h20min de 7 de julho de 2014

Apresentação

O projeto consiste no desenvolvimento de um dispositivo portátil, gerador de áudio, que compõe uma paisagem sonora em tempo real a partir das batidas do coração. Baticum expande a nossa percepção do corpo revelando ao consciente pulsações e estados internos comumente desconsiderados pelos sentidos. Numa primeira instância o projeto é pensado para corredores, mas num contexto mais amplo pode ser utilizado por qualquer pessoa.

Pesquisas como a do Dr. Costas Karageorghis apontam que a música pode ser um grande aliado na hora de praticar esportes. Segundo ele, o “espírito” (ritmo, estilo, poesia, etc.) e o BPM da música estimulam de forma positiva os praticantes.

Baticum é um dispositivo que transforma o ato de correr (ou caminhar) numa experiência criadora e lúdica, e que ao mesmo tempo incorpora funções que auxiliam tecnicamente ao usuário. Na prática de atividade física amadora ou profissional os exercícios reproduzidos tem relação direta com as batidas do coração, que por sua vez refletem o esforço físico de praticante. Assim o dispositivo poderá dar um aviso sonoro cada vez que um novo estágio de esforço seja alcançado, dentre outras funcionalidades.

Pesquisas

Sensoreamento

Considera-se num primeiro momento duas possibilidades para obtenção dos batimentos cardíacos (ECG). A primeira seria utilizando um oxímetro, medindo o fluxo sanguíneo em regiões como as pontas do dedo ou da orelha, capturando a quantidade de luz refletida de um LED em um sensor infravermelho. A segunda utilizando um monitor cardíaco de prateleira como a Polar T31 Non-Coded, baseado em piezo, associado a um receptor aberto que possa se comunicar com o módulo de síntese de áudio. A vantagem do primeiro é a conveniência de termos um Pulsesensor, onde todo circuito analógico necessário já está pronto, porém a usabilidade é prejudicada dado que o sensor só pode ser usado em regiões limitadas do corpo. No segundo caso, as partes são difíceis de se encontrar, porém de maior ergonomia.

Processamento de Sinal

Um código aberto para Arduino é fornecido com o Pulsesensor e não deve ser difícil de portar para outras linguagens ou plataformas. Com ele é possível obter o BPM, mas não os subtempos das outras componentes do pulso.

Síntese de Áudio

Adotou-se a Beaglebone Black como plataforma para síntese de áudio. Com ele seria possível utilizar bibliotecas de síntese de áudio básicas como o Minim ou avançadas como o openFrameworks, PD ou SuperCollider.

Um exemplo de utilização do Minim para construção de um drum machine com samples pode ser encontrada aqui.

Implementação

Como a Beaglebone Black vem de fábrica com o OS Ångström, cujo foco não é multimídia, trocou-se o sistema operacional pelo Debian Wheezy, com flash na eMMC (isto é, o OS está armazenado na memória interna da Beaglebone, e não no cartão microSD). Um script para realizar o flash vem junto com a imagem do Debian, basta rodá-lo uma vez. Instruções podem ser encontradas aqui.

Tentou-se utilizar a biblioteca Jack com Puredata. Para isso foi necessário baixar o código fonte e recompilá-lo, configurando flags para compilar para plataforma ARM com instruction set NEON. Instruções podem ser lidas aqui, mas pode ser necessário fazer modificações. A utilização do Jack não mostrou boa performance, então não houve decisão por usar o Jack ou usar somente o ALSA. Para um primeiro teste, se usou o áudio do HDMI (conectado a uma televisão), para obter a saída de áudio. Depois utilizou-se uma placa de áudio USB com saída P2.

Foi necessário fazer um divisor resistivo para a entrada do sinal do PulseSensor. Isto porque o PulseSensor gera um sinal de 0 a 5V, enquanto a Beaglebone lê de 0 a 1.8V, de modo que é necessário reduzir a faixa de tensão de entrada. Um divisor resistivo de, por exemplo, R1 = 1k e R2 = 470 ohms, lendo a tensão de R2, seria o suficiente para isso: 5V * (470 / 1470) = 1.60V. Recomenda-se que a impedância de R2 seja menor que 1k.

Foi feito um port de Arduino para Beaglebone Black (em Python), o código está disponível neste repositório do GitHub. Porém, as leituras feitas do PulseSensor não eram consistentes, aparentemente as leituras estavam saturadas, assemelhando-se a uma onda quadrada em vez da leitura realista de um oxímetro. Outras pessoas relataram o mesmo problema, sendo que algumas pessoas sugerem que uma atualização no kernel do Linux utilizado pode resolver o problema, mas não houve tempo hábil para testar. Além disso, a versão do kernel utilizada já era a mais recente, e mesmo assim o problema persistia. Desse modo que não foi possível concretizar a solução idealizada.

Poderia-se adotar como alternativas, utilizar um Raspberry Pi com ADC externo, ou outra plataforma como a Hummingboard que possui um ADC integrado.

Leia mais

Uma página sobre sinais biológicos: http://biosignals.berndporr.me.uk/doku.php