Handmades</center>
 
*
Bem-vindo, Visitante. Por favor faça o Login ou Registro. 21 de Novembro de 2024, as 17:25:52


Login com nome de usuário, senha e duração da sessão


Páginas:  1 2 [3]   Ir para o Fundo
  Imprimir  
Autor Tópico: Projeto com Arduino  (Lida 36479 vezes)
designermx2
Visitante
« Responder #30 : 15 de Dezembro de 2012, as 13:06:50 »

Então, o arduino chegou. Primeira impressão é que é legal, mas quero ver rendimento. Vou comprar agora o módulo de áudio e sd.

Pelo que vejo muita gente usa o Uno. Como eu vou utilizar muitas coisas, optei por usar logo o arduino mega (padrão diferente), já que ele tem 8k de sdram, 4k de eprom, onde usarei para guardar configurações básicas e alguns dados e também 256 de eprom, onde 8k são rom. Algum problema?
Registrado
designermx2
Visitante
« Responder #31 : 19 de Janeiro de 2013, as 19:37:32 »

Pessoal, Primeiro obrigado pela paciência.

Vamos nos aventurar em um projeto? Ledod mais do que ninguém sabe dos projetos que fiz _ principalmente com baterias de notebook _

Bom, penso em colocar no meu projeto um Pedalboard totalmente digital. Que tal agente fazer o pedalboard controlado pelo Arduino? Vi que ele não tem condições (processamento e memória ram) de ser um looper com qualidade aceitável, mas andei vendo e ele tem como ser voltímetro e chaveador, então pensei nele ser um switcher. O que acham?  Ele teria todos os pedais nele, no final do pedalboard (parte de trás) , teríamos um LCD informando os bancos, pedais ligados e a situação da bateria ou rede elétrica.

Vamos começar?  Alguém para ajudar?

Caso concordem, estarei colocando os links aqui que já achei que ajudariam no projeto.

Abraços.
Registrado
Tiarlei Crist
Visitante
« Responder #32 : 19 de Janeiro de 2013, as 19:48:31 »

É um desejo antigo meu:
Ter pedais analógicos controlados digitalmente.
Registrado
designermx2
Visitante
« Responder #33 : 21 de Janeiro de 2013, as 07:27:52 »

Ok, Vou estudar o caso para desenvolver. Quem quiser ajudar, estou esperando em PVT
Registrado
Tiarlei Crist
Visitante
« Responder #34 : 21 de Janeiro de 2013, as 12:46:41 »

Mas tenho que ser sincero: não tenho nehum conhecimento nessa área.
Registrado
designermx2
Visitante
« Responder #35 : 21 de Janeiro de 2013, as 22:13:39 »

Nascimento do código:

#define RELAY_PIN 3 // Relay Canal 1 - Armar direto ou não

#define RELAY_PIN 4 // Relay Canal 2 - Armar direto ou não



#define RELAY_PIN 5 // Relay Canal 3 - Armar direto ou não

#define RELAY_PIN 6// Relay Canal 4 - Armar direto ou não



#define RELAY_PIN 7 // Relay Canal 5 - Armar direto ou não

#define RELAY_PIN 8// Relay Canal 6 - Armar direto ou não



#define RELAY_PIN 9

#define READ_PIN 10 // Pino de controle de energia



#define RELAY_PIN 11// Relay para desarmar o carregador automaticamente da rede elétrica. Relacionado ao pino de leitura.PIN 10

#define RELAY_PIN 12// SERIE/PARALELO - Controle de energia (Ajusta o sistema para 12v paralelos com alta amperagem e 24 v para final de carga - desarmando com aproximadamente 12v para não zerar a bateria , parâmetro configurável); Relacionado ao pino de leitura. Relacionado ao pino de leitura PIN 10.

int i=3;



void setup()

{

for(i=3; i<13; i++){

   pinMode( i, OUTPUT );

  }

  pinMode(READ_PIN, INPUT);

  Serial.begin(9600); // open serial

  Serial.println("Aperte 1 para ativar o relay 1, 2 para ativar o 2 ...5 para o canal 5 e barra de espaço para o canal do amplificador - relay mode on/off");

}







void loop()

{

  static int relayVal = 0;

  int cmd;

 

  while (Serial.available() > 0)

  {

       cmd = Serial.read();

      

       switch (cmd)

       {

       case '1':

      {

        relayVal ^= 1; // xor current value with 1 (causes value to toggle)

       

        if (relayVal){

         digitalWrite(3, HIGH);

         Serial.println("Relay 3 on");

         

        }else if(!relayVal)

            digitalWrite(3, LOW);

         Serial.println("Relay 3 off");

         

        break;

      }

      

       case '2':

      {

        relayVal ^= 2; // xor current value with 2 (causes value to toggle)

       

        if (relayVal){

          digitalWrite(4, HIGH);

          Serial.println("Relay 4 on");



        }else if(!relayVal)

          digitalWrite(4, LOW);

          Serial.println("Relay 4 off");



        break;

      }

      

       case '3':

      {

        relayVal ^= 3; // xor current value with 2 (causes value to toggle)

       

        if (relayVal){

          digitalWrite(5, HIGH);

          Serial.println("Relay 5 on");



        }else if(!relayVal)

       

          Serial.println("Relay 5 off");

        break;

      }

      

       default:

      {

        Serial.println("Aperte a barra de espaço para relay on/off");

      }

      

   }

   

   }

}
Registrado
designermx2
Visitante
« Responder #36 : 14 de Abril de 2013, as 09:26:37 »

... Então, é complicado "voltar" de um C++ para um C, toda a mentalidade/paradoxo de classes e objetos é perdida... Eu acho que é possível sim fazer em C, mas devemos lembrar sempre que o C é uma linguagem estruturada, voltada a funções...
Então Ledod, estava pensando aqui em casa e é realmente mais difícil de se acostumar, mas eu estou até indo bem. Assim que acabar, mostro o que fiz. Achei meio complicado não utilizar o delay e ter que fazer funções com diferença de tempo e millis, mas ficou muito bom.

Você tem como me ajudar com algumas coisas Ledod? Sei que não tem experiência com Arduino, mas percebi que as bibliotecas são uma mistura de C e C++, como não manjo nenhum dos dois, estou num emparse...
Estou fazendo uma controladora de pedais com o Arduino com várias funções e recursos que vão ajudar o músico, porém estou com um problema na leitura de variáveis de um arquivo no cartão SD.

Vi várias pessoas fazendo isso, mas nenhuma das "80 páginas" que tentei mexer no código serviram para mim.

Vou colocar o código abaixo da resposta para Tiarlei Crist.

Gostaria de fazer uma função do tipo:  readSD("arquivo.cfg",linha). Ele pegaria o valor de uma configuração como LCD=1 e criaria uma variável (poderia ser com o mesmo nome) e colocaria o valor dentro dela.

É um desejo antigo meu:
Ter pedais analógicos controlados digitalmente.

É o que estou tentando e acho que vou conseguir meu velho, porém terá que ser com o Arduino mega pela disponibilidade de pinos. O uno é muito limitado para o que quero fazer e além de poucas portas, tem apenas 30kb de memória. Até o momento todo o código está com 22k, no entanto só vou colocar aqui um pedaço para não ficar tão complexo.


Código com a biblioteca tinyFat:

// Demo_readLn (C)2011 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a demo of the readLn()-function.
//
// This demo will open a textfile named 'TEXTFILE.TXT'
// and display its contents in the Serial Monitor.
//
// SD card must be connected to the SPI port of your Arduino.
//
// Remember to select 115200 baud in the Serial Monitor.
//

#include <tinyFAT.h>
#include <avr/pgmspace.h>
char LCD;
byte res;
word result;
char textBuffer[2501];
char *verboseError(byte err)
{
   switch (err)
   {
   case ERROR_MBR_READ_ERROR:
      return "Error reading MBR";
      break;
   case ERROR_MBR_SIGNATURE:
      return "MBR Signature error";
      break;
   case ERROR_MBR_INVALID_FS:
      return "Unsupported filesystem";
      break;
   case ERROR_BOOTSEC_READ_ERROR:
      return "Error reading Boot Sector";
      break;
   case ERROR_BOOTSEC_SIGNATURE:
      return "Boot Sector Signature error";
      break;
   default:
      return "Unknown error";
      break;
   }
}

void setup() {
  // Initialize serial communication at 115200 baud
  Serial.begin(115200);
  Serial.println();
  // Initialize tinyFAT
  // You might need to select a lower speed than the default SPISPEED_HIGH
  res=file.initFAT();
  if (res!=NO_ERROR)
  {
    Serial.print("***** ERROR: ");
    Serial.println(verboseError(res));
    while (true) {};
  }

  Serial.println("This demo will display a textfile called 'TEXTFILE.TXT'");
  Serial.println();
  Serial.println("***** Send any character to start *****");
  while (!Serial.available()) {};
  Serial.flush();
  Serial.println();
  Serial.println();
 
  if (file.exists("data.cfg"))
  { 
    res=file.openFile("data.cfg", FILEMODE_TEXT_READ);
    if (res==NO_ERROR)
    {
      result=0;
      while ((result!=EOF) and (result!=FILE_IS_EMPTY))
      {
        result=file.readLn(textBuffer, 2500);
       
        if (result!=FILE_IS_EMPTY)
        {
          if (result==BUFFER_OVERFLOW)
            Serial.print(textBuffer);
          else
           
            Serial.print(textBuffer);
           

        }
        else
          Serial.println("** ERROR: File is empty...");
      }
      Serial.println();
      file.closeFile();
    }
    else
    {
      switch(res)
      {
        case ERROR_ANOTHER_FILE_OPEN:
          Serial.println("** ERROR: Another file is already open...");
          break;
        default:
          Serial.print("** ERROR: ");
          Serial.println(res, HEX);
          break;
      }
    }
  }
  else
  Serial.println("** ERROR: 'TEXTFILE.TXT' does not exist...");
  Serial.println();
  Serial.println("***** All done... *****");
 


void loop()
{
}



Segundo a página da lib file.readLn(textBuffer, 2500);    deveria retornar a próxima linha, mas não é o caso aqui. Não entendi como funciona.

Página da lib: http://henningkarlsen.com/electronics/library.php?id=37

« Última modificação: 14 de Abril de 2013, as 09:31:38 por designermx2 » Registrado
Tiarlei Crist
Visitante
« Responder #37 : 14 de Abril de 2013, as 10:57:36 »

Parabêns pelo avanço designermx2!

Seria realmente fantástico poder criar bancos de pedais analógicos e alternar estes bancos como se queira.

Até mais.
Registrado
designermx2
Visitante
« Responder #38 : 21 de Maio de 2013, as 08:36:36 »

Valeu Tiarlei Crist, obrigado pelo incentivo.

Ledod, acho que vou colocar o loop em uma versão mais avançada do projeto, porque preciso de uma memória ram que não acho em canto nenhum. Mas estou começando a entender essa programação do Arduino. Realmente é algo bem chato por não ter uma orientação a objeto no desenvolvimento, mas as bibliotecas podem por serem C++ (não conheço, mas estou estudando).

Gubterra, você que manja, gostaria de ajudar no projeto? Estarei apenas colocando o Hex aqui porque não quero que alguma empresa ou Handmade que não contribui com o pessoal de forma alguma, apenas se exibem, peguem o projeto e ganhem com o código que deu trabalho de montar... Mas aceito ajudas pontuais e "privadas".

Quero publicar apenas o hex.


Hoje o projeto usa um lcd de 20x2 (vinte colunas e duas linhas).

Tem um metrônomo configurável.

Fiz um shild de cartão SD de até 2gb que usam alguns resistores apenas e sucata de notebook (o socket)

Uma placa que servirá de "protoboard" que encaixa no arduino mega como um shild. Já tem os locais para soldar o lcd... botões, sd, etc... (percisa ser melhorado por profissionais da área que aqui sei que tem de sobra).

O falante é de algum telefone. Usei piezo por conta da altura do falante. Durante um ensaio pode-se ouvir o metrônomo (função que deu bastante trabalho e dará mais um pouco daqui a um tempo). Por não poder usar delay para setar o tempo do metrônomo, tive que "inventar" um delay que processe o tempo de batida de acordo com o loop sem gerar atrasos por conta do código. Até o momento está funcionando perfeitamente e comparei com metrônomo real.

O LCD tem alguns funções específicas que consegui uns códigos na net e dei uma melhorada boa.

As letras são grandes para indicar o banco e o número. Fiz até o H, mas existem os códigos até a letra 5.

Por configuração será setado quantos presets deseja usar. ou seja.. vai de A1 até H4 (menor configuração que usam 6 botões, onde dois são de up/down dos bancos e 4 de presets) ou de A1 até H8 , onde teremos nesse caso 8 presets. Caso queiram, pode ir até Z, mas será numa segunda versão e acho que ninguém usará isso tudo, mas de qualquer forma o LCD vai suportar.

A forma de chamar as coisas está bem simples, tipo:

showBigChar('B',0);
showBigNum(3,4);

Nesse caso aparece B3 em tamanho grande e o resto em tamanho normal.

Onde teremos o Caracter "B" Ocupando as duas linhas  e quatro colunas (tamanho grande) e em seguida temos o Número 3 iniciando do ponto 5 (deixei um espaço padrão).

clearBigChar(0); onde limpa 4 colunas começando do ponto/coluna zero, isso limpa caracteres grandes facilitando e reduzindo o código no loop.

metronome(0,0), onde nesse modo está desligado e aparece OFF no visor;
metronome(80,0), onde nesse modo está mostrando  um metrônomo visual no LCD setado em 80bpm com blocos alternando de um lado para o outro, porém sem som. Bom para estudar a noite quando a patroa está dormindo (fiz esse pensando em mim, já que faço isso com a guitar desligada e já incomoda).
metronome(300,10); agora o metrônomo está setádo em 300bpm, com uma nota que multiplica 250x10. Não sei informar a nota pois vi a função e não me dediquei muito a entender. 10 é estremamente grave e quase inaudível, 1000 é um beep tipo de computador, setei 250 como padrão e você coloca o fator de multiplicação no lado direito da função e o valor do parâmetro(neste caso é 10) é multiplicado por 250, ou seja... 4x250= 1000, 10x250 = 2500. Quanto mais alto, mais distante se consegue ouvir e isso configura.

Os valores estão no cartão SD como XML, fácil de editar e penso depois em ter algum programa de interface de configuração para facilitar o uso dela via usb e programar tudo por computador (mas será bem pra frente).

Também tem o reconhecimento de pressão de botões, tipo... escolhe x botão apertado por x tempo e executa x função... isso vai servir para configurar as coisas mas ainda não aprofundei por falta de grana para botão e tempo também, já que agora começou uma reforma lá em casa e estou sem nenhum espaço nem para pintar um pedal, quanto mais outras coisas.


Hoje o que falta de importante mesmo e que ainda dará algum trabalho é a gravação de linhas específicas no cartão SD das configurações que o usuário escolher e o menu de configuração juntando os valores em menus... que julgo ser simples, só não fiz logo porque não tinha os botões... agora não tenho como fazer...
Também falta o controle, mas como disse, isso depende de botões. O grosso e mais complicado acho que já está ai... o SD também deu um certo trabalho, mas já lê os valores. Tem uns três meses que acho que tá pronto, mas como não estou com tempo e nem previsão, não quero deixar a galera aqui esperando...

Algum candidato a ajudar e se comprometer em devolver o código com as atualizações para juntos publicarmos o HEX pronto para o pessoal?


Tudo está comentado (acho que tem tanto comentário quanto código). Salvo engano, todas as linhas de código estão comentadas, se faltar é uma ou outra parte que posso ter julgado ser simples.... mas até variáveis comentei...

Não sou programador em C, mas acho que não está com erros não, pelo menos não com erros graves.

Candidatos?
« Última modificação: 22 de Maio de 2013, as 10:50:48 por designermx2 » Registrado
Páginas:  1 2 [3]   Ir para o Topo
  Imprimir  
 
Ir para:  


Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines

XHTML 1.0 Válido! CSS Válido! Dilber MC Theme by HarzeM
Página criada em 0.044 segundos com 21 procedimentos.
SimplePortal 2.3.3 © 2008-2010, SimplePortal