LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: ghostbuster em 12 de Junho de 2009, 10:58

Título: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 12 de Junho de 2009, 10:58
pessoal, alguem sabe se posso utilizar so a cabeça de leitura de um sistema desses directamente no arduino?, por wxemplo em vez de ler os dados do leitor de cartões por serial utilizava so a cabeça do leitor e o arduino
Título: Re:cartoes banda magnetica
Enviado por: delphi em 12 de Junho de 2009, 14:08
O leitor de cartões liga-se por usb ou por porta serie?
Utilizas algum software para leres os dados ou são escritos automáticamente onde está o cursor?
Tal como tenho um leitor de código de barras ligado directamente ao arduino, também quase de certeza que dá para ligar esse leitor.

Se indicares o modelo pode ser mais fácil para o "pessoal" :) procurar mais alguma ajuda.


Título: Re:cartoes banda magnetica
Enviado por: ghostbuster em 12 de Junho de 2009, 14:19
o leitor ligase por serie e e bastante facil ligar ao arduino que ate esta no instructables como se faz,so que eu não queria ligar o circuito todo do leitor ao arduino apenas queria ligar a cabeça magnetica que é igual aos leitores de casette antigos.
O leitor em principio sera este http://www.allelectronics.com/make-a-store/item/MCR-12/MAGNETIC-CARD-READER/-/1.html (http://www.allelectronics.com/make-a-store/item/MCR-12/MAGNETIC-CARD-READER/-/1.html)
aqui esta um ligado ao arduino por serial http://hackmiami.org/2008/12/21/magnetic-stripe-card-reader/ (http://hackmiami.org/2008/12/21/magnetic-stripe-card-reader/)
e no meu caso so quero ligar esta peça ao arduino http://www.tech-rep.co.uk/assets/images/principals/phi-falmouth/heads-montage.png (http://www.tech-rep.co.uk/assets/images/principals/phi-falmouth/heads-montage.png)
Título: Re:cartoes banda magnetica
Enviado por: msaleiro em 12 de Junho de 2009, 14:46
Dar para ligar dá.. tudo dá para ligar... agora o que vais conseguir fazer só com isso é que já não se sabe :P
Título: Re:cartoes banda magnetica
Enviado por: metRo_ em 12 de Junho de 2009, 18:24
Tudo o que vou dizer são suposições minhas.
Aquela cabeça magnetica (nem sequer sei se é assim que se chama) que queres ligar ao arduino parece-me que simplesmente é o sensor que recolhe os sinais do cartão, mas depois é necessário ter algo que saiba o que querem dizer os sinais e os processem de uma maneira que possam ser percebidos.

Agora se queres ligar ao arduino aquela cabeça magnetica tens que começar por ler o datasheet da tal cabeça magnetica e saber de que forma ela transforma os sinais magneticos em sinais electricos e depois utilizas isso.
Título: Re:cartoes banda magnetica
Enviado por: ghostbuster em 12 de Junho de 2009, 20:57
Tudo o que vou dizer são suposições minhas.
Aquela cabeça magnetica (nem sequer sei se é assim que se chama) que queres ligar ao arduino parece-me que simplesmente é o sensor que recolhe os sinais do cartão, mas depois é necessário ter algo que saiba o que querem dizer os sinais e os processem de uma maneira que possam ser percebidos.

Agora se queres ligar ao arduino aquela cabeça magnetica tens que começar por ler o datasheet da tal cabeça magnetica e saber de que forma ela transforma os sinais magneticos em sinais electricos e depois utilizas isso.

tens razão em algumas coisas, o circuito normal que liga a cabexa ao arduino por serial sabe processar os sinais, logo tenho que ver como programo o arduino de modo a processar os sinais, e a cabeça magnetica é uma simples bobine a qual o campo vai ser alterado pela fita magnetica e diferentes polaridades escritas nela
Título: Re: cartoes banda magnetica
Enviado por: ghostbuster em 24 de Janeiro de 2010, 23:04
vim aqui desenterrar isso, porque vou adquirir um leitor desses

http://www.magtek.com/documentation/public/99875349-4.01.pdf (http://www.magtek.com/documentation/public/99875349-4.01.pdf)
http://www.magtek.com/documentation/public/99875258-9.02.pdf (http://www.magtek.com/documentation/public/99875258-9.02.pdf)

isso é a tal cabeça mas com toda a electronica embutida, e manda os dados por shift-out, os pinos que tem são DATA e STROBE. Alguem faz ideia de como funciona o shift-in no arduino com data e strobe da cabeça?


Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 25 de Janeiro de 2010, 14:20
Pelo que percebi, no forum arduino, o strobe liga ao pino 2 do arduino, o data a outro qualque e tneho que fazer um interrupt, o data line tenho que o por a guardar num byte como um shift register...

Alguem pode esplicar isto melhor?
Título: Re: Leitor de Cartoes Magneticos
Enviado por: tcustodio em 25 de Janeiro de 2010, 19:22
qual é o comprimento dos dados que vêm do leitor? 8 bits?
e a ordem pla qual os dados entram, começa pelo bit mais à direita (LSB) ou plo mais à esquerda (MSB)?

PS: já comecei a ler a datasheet que contém o protocolo de comunicação. Mais tarde (esta noite, ou amanhã de manhã) tentarei postar um "esboço" de código para comunicar com este tipo de leitor de cartões. Deixo aqui a datasheet que contém o protocolo:
http://www.magtek.com/documentation/public/99875337-8.01.pdf (http://www.magtek.com/documentation/public/99875337-8.01.pdf)
Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 26 de Janeiro de 2010, 00:35
obrigado pela ajuda tcustodio  ;), quando sair o produto final logo posto aqui  ;D
Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 04 de Março de 2010, 15:52
A cabeça deve chegar em uma semana ou duas, agora tenho outra duvida, preciso de usar os dois pinos como intrerupt ou so um?
Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 14 de Abril de 2010, 02:11
Boas, visto que o distribuidor de portugal encomendou a cabeça a magtek em janeiro e ainda não chegou, decidi fazer uma coisa mais old school  ::)
Liguei uma cabeça normal de um leitor de cassette a entrada do microfone do pc, e pelos vistos funciona perfeitamente :D

Um programa descodifica o sinal audio e transforma-o em digital, agora como é obvio queria fazer isso com o nosso amigo arduino..
Pelo seguinte esquema:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg526.imageshack.us%2Fimg526%2F9176%2F65572650.jpg&hash=719048bd0e4f64b5952b09688d1017382c1b1dd7) (http://img526.imageshack.us/i/65572650.jpg/)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg717.imageshack.us%2Fimg717%2F4429%2F16548114.jpg&hash=d1d43894702b31faf8daa3af7b945054e8cfcc04) (http://img717.imageshack.us/i/16548114.jpg/)

Como podem ver, um pico naquele espaço de tempo representa 0 e dois picos no mesmo espaço de tempo representa 1
Ideias que eu tenho:
-Ler com o Arduino a cabeça magnetica ligada ao analog pin como se fosse um microfone, e depois analizar os valores(pode ser que de alguma coisa parecida)

-Usar o ADC do Arduino(Nessa parte bloquei completamente visto nunca ter trabalhado com isso)
Basicamente, o que o arduino tem que fazer, e contar quantos picos existem num espaço de tempo, e devolver 0 ou 1
Título: Re: Leitor de Cartoes Magneticos
Enviado por: Skilgannon em 14 de Abril de 2010, 09:02
Quando começares a fazer isso partilha, tenho um velho video aqui e vinha mesmo a calhar um coisa do género.
=)
Título: Re: Leitor de Cartoes Magneticos
Enviado por: metRo_ em 14 de Abril de 2010, 12:22
Tenho ideia que o Arduino(Atmega328p) não consegue ler um sinal a essa frequência mas só indo à datasheet confirmar. O Arduino possui uma função que é a pulsein (http://www.arduino.cc/en/Reference/PulseIn), dá uma vista de olhos.
Acabei de me lembrar que não precisas de usar o ADC, um IO digital serve perfeitamente, tens aqui até como acelerar esse processo em relação ao código usado pelo Arduino. (http://www.societyofrobots.com/robotforum/index.php?topic=9947.0)
Título: Re: Leitor de Cartoes Magneticos
Enviado por: senso em 14 de Abril de 2010, 13:10
E mesmo a adc podes alterar o prescaler do clock para fazer leituras da adc a 200kHz, coisa que no arduino é muito mais lento.
Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 25 de Abril de 2010, 00:54
Afinal já recebi a cabeça.
Em anexo está o codigo em C que a magtek aconselha, e aqui fica um esboço do meu codigo mas da um erro qeu não sei o que é  :(
O loop está vazio pois ainda não cheguei a essa parte

Código: [Seleccione]
#define WAIT_FOR_CARD_PRESENT  0
#define WAIT_FOR_BUFFER_READY  1
static unsigned byte DataAcquisitionState;
const int DataPin = 2;   
const int StrobePin =  3;
volatile  unsigned byte ReceiveBufferReadySignal;
 int CardDataReady;

void setup(){
     DataAcquisitionState = WAIT_FOR_CARD_PRESENT;
     pinMode(DataPin, INPUT);
     pinMode(StrobePin, INPUT); 
     digitalWrite(StrobePin, HIGH);
     delay(10);
     Reset();
     Armar();
     ReceiveBufferReadySignal = 0;
}

void loop(){
}


//-------------------------------------------------------------------------------
int DataAcquisitionManager()
{
     switch (DataAcquisitionState)
   {
      case WAIT_FOR_CARD_PRESENT:
         if (digitalWrite(DataPin, LOW) && !CardDataReady)
         {
            ClearCardPresent();
            DataAcquisitionState = WAIT_FOR_BUFFER_READY;
            ReceiveBufferReadySignal = 31; /* 3 seconds minimum */
         }
         break;

      case WAIT_FOR_BUFFER_READY:
         if (digitalRead(DataPin) == LOW)
         {
            CardDataReady = true;
            DataAcquisitionState = WAIT_FOR_CARD_PRESENT;
         }
         else if (ReceiveBufferReadySignal == 0)
         {
            Reset();
            Armar();
            DataAcquisitionState = WAIT_FOR_CARD_PRESENT;
         }
         break;         
   }
}

//------------------------------------------------------------------------------
int ClearCardPresent()

   
   delayMicroseconds(1);
   digitalWrite(StrobePin, HIGH);
   delayMicroseconds(2);       
   digitalWrite(StrobePin, LOW);
}
//-------------------------------------------------------------------------------
int Reset()
{
        delayMicroseconds(1);       
digitalWrite(StrobePin, HIGH);
delayMicroseconds(1);
digitalWrite(DataPin, LOW);
        delayMicroseconds(5);
digitalWrite(StrobePin, LOW);
        delayMicroseconds(1);
digitalWrite(StrobePin, HIGH);
        delayMicroseconds(1); 
digitalWrite(StrobePin, LOW);
        delayMicroseconds(1);
digitalWrite(DataPin, HIGH);
        delayMicroseconds(1);
digitalWrite(StrobePin, HIGH);
delayMicroseconds(130);
digitalWrite(StrobePin, LOW);
}
//------------------------------------------------------------------
int Armar()
{

delayMicroseconds(1);
digitalWrite(StrobePin, HIGH);
        delayMicroseconds(1);
digitalWrite(StrobePin, LOW);
}

//-----------------------------------------------------------
int ClearCardData()
{
   if (CardDataReady)
   {
      CardDataReady = false;
      Reset();
      Armar();
   }
}
//-----------------------------------------------------
int GetData(unsigned byte xdata * pryubTkData, uword uwCntInBits)
{
   unsigned byte ubTkBitPos;
   ubTkBitPos = 1;
   *pryubTkData = 0;
   delayMicroseconds(1);
   while (uwCntInBits--)
   {
     
      digitalWrite(StrobePin, HIGH);
      delayMicroseconds(1);
      digitalWrite(StrobePin, LOW);
      delayMicroseconds(1);
      if (digitalWrite(DataPin, LOW)) {
         *pryubTkData |= ubTkBitPos;
      }
                     
      ubTkBitPos <<= 1;
      if (ubTkBitPos == 0)
      {
         ubTkBitPos = 1;
         pryubTkData++;
         if (uwCntInBits)
         {
            *pryubTkData = 0;
         }
      }
   }
}
//--------------------------------------------------------------------------
Título: Re: Leitor de Cartoes Magneticos
Enviado por: senso em 25 de Abril de 2010, 14:37
Que tipo de erro dá?
Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 26 de Abril de 2010, 20:35
Que tipo de erro dá
Portando diz assim...

error: expected ',' or '...' before 'xdata' In function 'void setup()':
 In function 'int DataAcquisitionManager()':
 At global scope:
 In function 'int GetData(unsigned int)':

o #define WAIT_FOR_BUFFER_READY  1 fica a amarelo
Mas atenção, ele so da o erro se tiver ai a função read data, porque se ela nao tiver ai ele compila bem, Para terem uma melhor idea é abrirem os ficheiros em C do anexo, que la está tudo explicado
Título: Re: Leitor de Cartoes Magneticos
Enviado por: senso em 28 de Abril de 2010, 09:31
Falta ai algum caracter como ele te está a dizer, agora é só dar com o erro, as vezes isso é muito chato
Título: Re: Leitor de Cartoes Magneticos
Enviado por: ghostbuster em 04 de Maio de 2010, 13:46
Afinal vou fazer o codigo do zero, queria um sketch se alguem tiver de como faço, para ler o seguinte:
Quando detecta Digital Pin High é 1 e Low é 0, e eu quero que ele grave isso numa variavel tudo de seguida
ou seja a cabeça vai-me mandar no maximo 250 bytes de informaçao mas em binario
Título: Re: Leitor de Cartoes Magneticos
Enviado por: shime em 19 de Agosto de 2010, 03:10
Eu posso ajudar, me envie seu MSN
--
I can help you, send me your MSN