Pages: [1] 2   Go Down
Author Topic: BANCO DE DADOS sd card!  (Read 3157 times)
0 Members and 1 Guest are viewing this topic.
Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

To querendo fazer um banco de dados em arquivo texto num sd card,

Alguém ja fez um?
Alguém teria um exemplo?

Ideias são bem-vindas!

Obrigado!

 smiley-eek
Logged

????????????????????

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tipo SQL?

Mas queres algo funcional? Ou apenas prova de conceito?

O grande problema que tens nessa implementacão é o facto de quereres fazer um arquivo de texto. Isso implica um sistema de ficheiros e mais trabalho para o Arduino...

Se quisesses fazer uma base de dados onde não estavas limitado por um sistema de ficheiros (e estarias apenas a usar o cartão SD como memória), terias menos problemas, mas mesmo assim não sei quão bem funcionaria pois tinha de ir ler e escrever dados no cartão. :\

Queres especificar um pouco mais o que pretendes para a malta fazer aqui uma masturbacão mental sobre o assunto? smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Opzzz, obrigado pelo interesse!

Preciso ler um cartao RFID e associar ao número deste cartão, algumas variaveis; algumas númericas outras strings e talvez lógicas
pensei em usar um array, mas deveria ser um array multidimensional e como são muitos cartões, 500 ou mais, talvez uma eeprom externa, uma flash memory, sei lá!
As vezes após a leitura do rfid apenas devo ler o conteúdo referente ao cartão, outras vez preciso alterar uma ou mais variaveis!

Olhei "rapidamente" a SD.h parece ser prática, não testei nada ainda!

Alguma ideia?

 smiley-roll
Logged

????????????????????

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tipo SQL?
Mas queres algo funcional? Ou apenas prova de conceito?

Sim, funcional!

 smiley-roll

Obrigado!
Logged

????????????????????

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tendo em conta a aplicacão, acho que desenvolver algo para ser similar a SQL ia ser um fardo sem grande proveito, acho...

É essencial ter ficheiros para leres os dados no PC? Ou serve poder alterar os dados no cartão através do Arduino?

O esquema de dados está já definido? Ou pode ir mudando? Se já estiver completamente definido, definir uma matriz no cartão será a forma mais simples, se tiveres de preparar para adicionar campos, a coisa muda completamente de figura, mas acho que deva ser possível de fazer. Bastará, digo eu, deixar X espaco como sobressalente na estrutura de dados e eventualmente adicionar campos e alterar o espaco sobressalente.

Algo assim:

Code:
struct {
    unsigned char RF_code[10]; //assumi um tamanho. Não sei quanto é. Mas isto pode também ser a chave primária
    char primeiro_nome[13]; //ajustar tamanho do nome?
    char ultimo_nome[13]; //ajustar?
    unsigned long ultimo_acesso; //usar um timestamp para ver quando o cartão foi usado pela última vez //Ponderar usar 64 bits...
    unsigned long numero_acesso; //numero de acessos deste cartão.
    unsigned char sobressalente[16];//usado para dar um registo com tamanho de 60 bytes.
}

Se precisasses de outro campo (que coubesse dentro dos 16 bits), farias:
Code:
struct {
    unsigned char RF_code[10]; //assumi um tamanho. Não sei quanto é. Mas isto pode também ser a chave primária
    char primeiro_nome[13]; //ajustar tamanho do nome?
    char ultimo_nome[13]; //ajustar?
    unsigned long ultimo_acesso; //usar um timestamp para ver quando o cartão foi usado pela última vez //Ponderar usar 64 bits...
    unsigned long numero_acesso; //numero de acessos deste cartão.
    unsigned char autorizado; //usar isto como um bool, se 1 está autorizado a entrar, se estiver a 0, não está
    unsigned char sobressalente[15];//usado para dar um registo com tamanho de 60 bytes.
}

Isto em principio não alteraria a localizacão dos dados na memória.

Depois poderias armazenar isto como um array, dando-te assim uma matriz mais simples de aceder.
Depois terias sim de criar uma funcão que serializasse e vice versa estes dados para gravar e ler do cartão. Um dos problemas que eu antevejo com isto é o tempo de pesquisa... ir buscar o numero do cartão vai demorar-te imenso tempo porque segundo sei os numeros de série dos cartões RFID não estão por ordem... Então terias de correr todo o array de numeros para ver se o cartão estava autorizado ou não.
Talvez pudesses melhorar isso usando um tipo inteiro (32 ou 64 bits) para o numero do cartão em vez do array... e isso facilitaria imenso as comparacões. :\

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A SD.h, na realidade implementa um sistema FAT...

Uma maneira que talvez seja "rápida" (é algo a testar) seria criar um ficheiro para cada cartão em que o nome do ficheiro seria o código RFID... o problema aí será talvez que a biblioteca SDFat apenas aceita nomes com 8 bytes...
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A SD.h, na realidade implementa um sistema FAT...

Uma maneira que talvez seja "rápida" (é algo a testar) seria criar um ficheiro para cada cartão em que o nome do ficheiro seria o código RFID... o problema aí será talvez que a biblioteca SDFat apenas aceita nomes com 8 bytes...


Hummm, interessante, gostei desta ideia!
O ficheiro seria o número do cartão e os arquivos dentro dos ficheiros seriam os nomes das variaveis e o conteúdo dos arquivos seriam o conteúdo das variaveis, aí fica facil pra incluir ou excluir variaveis, basta apagar arquivos, muito bom; só tem que testar o acesso se seria rápido tipo pra 500 rfid, se perder um ou dois segundos pra mim está ótimo!

Obrigado pela luz no fim do túnel, quando terminar posto aqui o resultado!

 smiley-wink

Logged

????????????????????

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm, um ou dois segundos... 500 cartões...

Como disse, o código da RFID quantos caracteres tem?

Existe a possibilidade das RFID serem programadas para um numero série em especifico? Isso reduziria a complexidade do projecto para um nível incrívelmente simples uma vez que apenas terias de verificar se os digitos superiores conformavam com o que tinhas definido e ver se existia um registo com o numero dos restantes digitos.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm, um ou dois segundos... 500 cartões...

Como disse, o código da RFID quantos caracteres tem?

Existe a possibilidade das RFID serem programadas para um numero série em especifico? Isso reduziria a complexidade do projecto para um nível incrívelmente simples uma vez que apenas terias de verificar se os digitos superiores conformavam com o que tinhas definido e ver se existia um registo com o numero dos restantes digitos.

os que tenho já são definidos pelo fabricante e tem um formato assim e não são sequencia
0000145934 002,14862

a ideia seria usar apenas os ultimos 5 ou seja (14862)

estou fazendo testes com o tempo de pesquisa, vou criar uns 100 diretorios e mandar pesquisar por um deles.
o tamanho máximo do nome dos diretório é 8 digitos (string), eu acho que vai "dar" bem legal !

 smiley

Logged

????????????????????

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

O que eu referia era ficheiros em vez de directórios.

O problema em usar apenas os últimos 5 digitos ´€ que podes ter vários (imensos...) cartões com os mesmos últimos digitos. :\

Se calhar terás de ter uma funcão que ao registar um cartão novo veja se esse número já existe. :\

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

O que eu referia era ficheiros em vez de directórios.
O problema em usar apenas os últimos 5 digitos ´€ que podes ter vários (imensos...) cartões com os mesmos últimos digitos. :\
Se calhar terás de ter uma funcão que ao registar um cartão novo veja se esse número já existe. :\

OK!

Putz estou quase desistindo do MALDITO SD Card, funcionou por apenas meia duzias de vezes, nao consigo mais ler o conteúdo do cartao.
eu já tinha testado esta lib SD.h a uns anos atrás e funcionava bem.
Já testei em 5 placas diferentes de Arduino, o card funciona direto no computador, portanto nao é nele o problema
retirei o shield e montei direto no protoboard, mesmo assim nao consegue inicializar o cartao! smiley-mad
Logged

????????????????????

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Putz estou quase desistindo do MALDITO SD Card, funcionou por apenas meia duzias de vezes, nao consigo mais ler o conteúdo do cartao.
eu já tinha testado esta lib SD.h a uns anos atrás e funcionava bem.
Já testei em 5 placas diferentes de Arduino, o card funciona direto no computador, portanto nao é nele o problema
retirei o shield e montei direto no protoboard, mesmo assim nao consegue inicializar o cartao! smiley-mad

Pronto, voltou a funcionar, a bagaça!

100 diretório com 5 arquivos em cada diretório= 500 arquivos
110 arquivos no diretório raiz
total 610 arquivos

tempo médio para pesquisar um file, abrir, gravar um dado e fechar = +- 1 segundo

Tá bom não Bubulindo?

 smiley-roll
Logged

????????????????????

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

100 diretório com 5 arquivos em cada diretório= 500 arquivos
110 arquivos no diretório raiz
total 610 arquivos

tempo médio para pesquisar um file, abrir, gravar um dado e fechar = +- 1 segundo

Isto mostrando o inicio da operação e  fim, na porta serial (DEBUG), isto será inibido pois não preciso desta informação aí o tempo será menor.
 smiley-cool
Logged

????????????????????

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok... imaginemos 700 ms.

500 * 700ms = 350 segundos...
350/60 ~= 6 minutos.

Se isto for para controlo de entradas, prepara-te para ter pessoas a berrar que o sistema não funciona. Obviamente que isto é a pior situacão possível, mas mesmo se olhares para um valor mediano de 3 minutos ainda me parece exagerado. Mas eu sei pouco sobre onde vai ser implementado.
Achas que 3 minutos é aceitável para o sítio onde isto vai ser implementado?
Não ligues a isto... devia deixar de escrever em Fóruns logo após acordar.

Testaste com vários ficheiros?
Eu diria que a prova de fogo para esta aplicacão seria fazeres um programinha simples para pesquisar e fazer as operacões que normalmente fará em todos os ficheiros do cartão (os tais 500) e guardar os tempos para cada um deles.
Isto pode ser um pouco problemático em termos de memória talvez, então talvez consigas fazer uma média para garantir que o tempo médio de acesso seria mais ou menos 1 segundo.

« Last Edit: March 09, 2013, 08:08:01 pm by bubulindo » Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 382
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok... imaginemos 700 ms.

500 * 700ms = 350 segundos...
350/60 ~= 6 minutos.
Achas que 3 minutos é aceitável para o sítio onde isto vai ser implementado?

Testaste com vários ficheiros?
Eu diria que a prova de fogo para esta aplicacão seria fazeres um programinha simples para pesquisar e fazer as operacões que normalmente fará em todos os ficheiros do cartão (os tais 500) e guardar os tempos para cada um deles.
Isto pode ser um pouco problemático em termos de memória talvez, então talvez consigas fazer uma média para garantir que o tempo médio de acesso seria mais ou menos 1 segundo.


Nao entendi esta sua conta, mas tudo bem.

Sim fiz um programa pra fazer buscas no diretorio do cartao em 600 files , procurar, abrir, escrever e fechar e o tempo medio pa qualquer acesso foi em torno de quase um segundo. smiley-grin
E é pra acesso mesmo a aplicação, não pode falhar,  smiley-lol



 smiley-cool
Logged

????????????????????

Pages: [1] 2   Go Up
Jump to: