Pages: [1]   Go Down
Author Topic: gravar audio com Arduino  (Read 2672 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aí galera,
Tenho uma opção de projeto que consiste em  receber um sinal de audio e armazena-lo para coleta posterior.
Duvidas:

Qual a taxa de amostragem possível com o arduino? Ou a frequência máxima possível de ser amostrada?

Seria melhor usar um A/D e buscar estes dados via i2c, ou mesmo paralelos?

Alguém conhece algum projeto parecido?
 
Valeu galera até mais!! smiley-wink
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oi, já viu algo a respeito do chipcorder ISD17xx? São CIs que integram a solução completa de gravação e reprodução de áudio. Você poderia interfacear um desses com o Arduino via SPI, mas o chipcorder também pode rodar stand-alone se você quiser.
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu tenho dois modelos: ISD1740 e ISD17120. A diferença entre eles é o tempo máximo nominal de gravação (40 s e 120 s, a 8 kHz, aproximadamente). A taxa de amostragem é mudada com um resistor externo e pode ir de 4 a 12 kHz.

Na verdade, o único componente ativo é o próprio CI, os demais são todos passivos. A potência de saída do CI é de 1/4 W; se você precisar de mais, aí sim você vai precisar de um amp de potência.
« Last Edit: February 04, 2009, 10:48:42 am by neuron_upheaval » Logged

São Paulo /Sp
Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
Arduino Builder
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Neuron
vc. tem algum exemplo pratico rodando o ISD 17XX com arduino ?
to com uma grande dificuldade em utiliza-lo.

[]'s

Logged

Silverbolt
Acesse: www.symphony.com.br

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá silverbolt,

Já usei o ISD 17xx em modo standalone. Não usei ainda ele em modo SPI.

No final de semana vou tentar fazer uma montagem com ele, usando o Arduino para enviar dados via SPI, e daí te dou um alô.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Valeu pessoal,
mas fiquei com uma duvida (no datasheet),
Pelo que entendi eu posso enviar  dados (comandos) para o CI para controla-lo;
Mas não ficou claro se posso ler os dados gravados no CI através do arduino (na verdade nem sei se posso enviar grandes quantidades de dados pela SPI).

o projeto
* gravar amostras de audio
* digitaliza-las
* envia-las para um servidor.
este CI é mesmo muito bacana e simplifica muita coisa,
se eu puder extrair os dados...
 
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá arilson,

É isso mesmo, o CI não permite gravação em ou leitura direta a partir da memória porque o formato dos dados é patenteado.
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá pessoal,

A comunicação SPI funcionou!

Fiz uma biblioteca para controlar a família ISD 1700 via SPI, ela está em:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1234149784/0

[]s

« Last Edit: February 08, 2009, 10:31:02 pm by neuron_upheaval » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Obrigado meus caros,
         Minha placa da Libelium acaba de chegar, hoje ainda começo os testes, vou captar direto pela entrada analógica do Arduino e ver qual taxa máxima de amostragem.
Segundo o Datasheet o uControlador pode atingir até 15 k de amostras por segundo (resolução de 10 bits), suficiente pro meu caso, porem vamos ver no que o boot-loader vai interfirir.    
        Quanto ao ISD1700 não me atende mas agradeço a dica, posto aqui o resultado dos testes em breve
valeu smiley
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Arilson,

Eu estava pensando aqui o seguinte: você quer pegar 10 bits de dados a 15kSPS... 10 x 15000 = 150kbauds. Isso só de dados, sem contar com os bits de conferência de erros (paridade, CRC etc.)

Como você vai fazer para enviar esses dados para o servidor? Acho que por serial não dá. Por I2C talvez dê, pois o máximo que o I2C suporta é 400 kHz; já o SPI aguentaria, mas pode acontecer atenuação do sinal se ele tiver que trafegar por distâncias tais como a do circuito ao PC.
« Last Edit: February 14, 2009, 11:51:32 am by neuron_upheaval » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ola Neuron,
na verdade eu não preciso enviar os dados a medida que recebo o sinal,
penso em digitalizar o sinal na melhor resolução possível e grava-lo.
    Depois com tempo envio o pacotão na medida em que minha banda permitir, por essa razão sua dica do ISD 1700 seria pra mim uma saida  perfeita, se eu pudesse acessar os dados gravados no CI :'(.
    Mas você tem razão, vai ser uma balaida de Bytes (MegaBytes) o ideal seria uma gravação de 3 minutos.
    Você por acaso não conhece um CI parecido com o isd1700 mas com acesso aos dados?
Até mais e obrigado pela ajuda!!  
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Que tal a série ISD15100? Parece que ela permite acesso direto a memória e compressão de dados.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

    parece ser esse,
dei uma olhada no datashet e ele tem comandos de leitura de dados, agora preciso descolar um desses, enquanto isso continuam os testes com a entrada analógica do arduino!!
Valeu Neuron, caso consiga novidades posto aqui!!

Por enquanto estou me ambientando, testei esse programa chamado pelo dono de osciloscópio de pobre
o original está aqui:
http://accrochages.drone.ws/sites/accrochages.drone.ws/files/Oscilloscope.pde
  
consegui uma frequência de 33Hz
coloquei uma grade de ~4 segundo por 1 Volt
o código modificado está aqui:
Code:
/*
 * Oscilloscope
 * Gives a visual rendering of analog pin 0 in realtime.
 *
 * This project is part of Accrochages
 * See http://accrochages.drone.ws
 *
 * (c) 2008 Sofian Audry (info@sofianaudry.com)
 *
 * Modificado por:
 *
 * Arilson Mendes (arilsonm@gmail.com) em 02/2009
 *  
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
. */
import processing.serial.*;

Serial port;  // Create object from Serial class
int val;      // Data received from the serial port
int[] values;
int i;
void setup()
{
  size(640, 480);
  // Open the port that the board is connected to and use the same speed (9600 bps)
  port = new Serial(this, Serial.list()[0], 9600);
  values = new int[width];
  smooth();
}

int getY(int val)
{
  return (int)(val / 1023.0f * height) - 1;
}

void draw()
{
  
  while (port.available() >= 3) {
    if (port.read() == 0xff) {
      val = (port.read() << 8) | (port.read());
    }
  }
  for (int i=0; i<width-1; i++)
    values[i] = values[i+1];
  values[width-1] = val;
  background(0);
  stroke(255);
   grade();
  for (int x=1; x<width; x++)
  {
    line(width-x,   height-1-getY(values[x-1]), width-1-x, height-1-getY(values[x]));
          
  }
}
void grade()
{
   stroke(0,200,0);
   for (i=1;i<5;i++)
   {
     line(width-2 ,  height/5*i,width-(width-2) , height/5*i);
   }
   for (i=3;i<20;i+=3)
   {  
     line(width/20*i ,  height,width/20*i , 0);  
   }
}      
    

/*
// The Arduino code.

#define ANALOG_IN 0

void setup() {
  Serial.begin(9600);
}

void loop() {
  int val = analogRead(ANALOG_IN);
  Serial.print( 0xff, BYTE);
  Serial.print( (val >> 8) & 0xff, BYTE);
  Serial.print( val & 0xff, BYTE);
}

*/


A razão da frequencia tão baixa (33Hz) é a comunicação serial,
inté
Logged

Pages: [1]   Go Up
Jump to: