Como gravar dados no Cartão SD com Arduino 157

No Arduino e em outros microcontroladores muitas vezes precisamos guardar informações por um longo período de tempo, elaborar gráficos após coleta de dados, ou mesmo verificar quando um determinado sensor foi acionado. Podemos fazer isso gravando os dados em um cartão de memória utilizando o Módulo Cartão SD com Arduino.

Módulo Cartão SD

O módulo aceita cartões formatados em FAT16 ou FAT32, e utiliza a comunicação via interface SPI por meio dos pinos MOSI, SCK, MISO e CS, mostrados na imagem abaixo:

Módulo Cartão SD - Pinagem

Você pode utilizar tanto os pinos da coluna esquerda como os da coluna da direita, pois eles tem as mesmas funções. A alimentação do módulo pode ser feita utilizando o pino 3.3V ou o pino 5V.

Conexão módulo cartão SD com Arduino

Para alimentação do módulo pelo Arduino, vamos utilizar apenas um dos pinos GND, e também a alimentação de 5V.

Para os pinos de sinal, será necessário um divisor de tensão, já que o módulo trabalha com níveis de sinal de 3.3V, assim não podemos ligá-lo diretamente ao Arduino, que trabalha com 5V de sinal. Utilize um divisor de tensão apenas nos pinos SCK, MOSI e CS. O pino MISO pode ser ligado diretamente.

Para cálculo dos resistores utilizados no divisor de tensão, utilize a calculadora deste link, informando os resistores que serão utilizados (R1 e R2), e também a tensão de entrada (5V). Depois disso, clique em CALCULAR para ver qual será o valor da tensão de saída.

Circuito Modulo cartao SD

O potenciômetro é de 100K, ligado à porta analógica A5, mas você pode utilizar outros valores.

Gravando dados no cartão SD

Você pode gravar no cartão dados de sensores, horários, coordenadas de gps ou qualquer outra informação que desejar. Futuramente vamos apresentar um projeto de datalogger utilizando esse módulo.

Com o circuito acima, vamos criar uma rotina que grava no cartão SD um arquivo em formato texto chamado LER_POT.TXT. Para usar este programa, faça o download da biblioteca SdFat neste link. Descompacte a pasta SdFat e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.

Dentro desse arquivo, será gerada uma linha, a cada 2 segundos, com o valor da porta analógica A5 onde se encontra ligado o potenciômetro.

// Programa: Gravacao com modulo cartao SD
// Autor: MakerHero

#include <SdFat.h>

SdFat sdCard;
SdFile meuArquivo;

// Pino ligado ao CS do modulo
const int chipSelect = 4;

void setup()
{
  Serial.begin(9600);
  // Define o pino do potenciometro como entrada
  pinMode(A5, INPUT);
  // Inicializa o modulo SD
  if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt();
  // Abre o arquivo LER_POT.TXT
  if (!meuArquivo.open("ler_pot.txt", O_RDWR | O_CREAT | O_AT_END))
  {
    sdCard.errorHalt("Erro na abertura do arquivo LER_POT.TXT!");
  }
}

void loop()
{
  // Leitura da porta A5/Potenciometro
  int valor = analogRead(A5);
  Serial.print("Leitura Potenciometro: ");
  Serial.println(valor);

  // Grava dados do potenciometro em LER_POT.TXT
  meuArquivo.print("Leitura Potenciometro: ");
  meuArquivo.println(valor);

  if (valor <= 5)
  {
    // Interrompe o processo e fecha o arquivo
    Serial.println("Processo de gravacao interrompido. Retire o SD!");
    meuArquivo.close();
    while (1) {}
  }
  delay(2000);
}

Carregue o programa acima e gire o potenciômetro para alterar o valor lido pela porta analógica. Para finalizar a gravação dos dados, gire o potenciômetro totalmente para a esquerda (valor 0).

Circuito Arduino e módulo Cartão SD

Retire o cartão SD e abra, no computador, o arquivo LER_POT.TXT para verificar as informações que foram gravadas:

Arquivo Texto LER_POT.TXT

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

157 Comentários

  1. Ola. Seria possivel usar o mesmo recurso, porem em vez de gravar/ler um cartao SD, usar um chip de memoria spi w25q32? Ja procurei no Google e não encontrei um exemplo de uso destes chips com Arduino. O uso do chip é bem mais interessante, ele ja é usado no PI Pico, seu custo é bem baixo, nao tem pecas moveis como o cartao SD e desta forma cai bem em projetos de IOT

  2. Amigos como faço para poder salvar a leitura de dados de um acelerometro mpu6050 e salvar em arquivos diferentes. Exemplo, faço a leitura com os 3 eixos quando desligar o arduino e religar e realizar novas medidas salvar um outro arquivo com outro nome no mesmo cartão sd. ASSIM: DADOS_1, ai reseto e quando vou medir de novo a salva DADOS_2, ai reset e meço de novo e salva DADOS_3 e assim por diante, sempre mantendo os arquivos. Alguém poderia me ajudar, já tentei de tudo , o código do acelerometro já tenho.

    1. Olá!

      Uma maneira seria utilizar a EEPROM para manter uma variável com o número do arquivo atual.
      Temos este post aqui falando um pouco do uso da EEPROM: https://www.makerhero.com/blog/wachdog-e-eeprom-do-arduino/

      Abraços!
      Vinícius – Equipe MakerHero

  3. Bom dia.
    Como seria o codigo para registrar alturas (HC-SR04) e gravar no cartão SD

    1. Olá Carlos!

      Não temos um código pronto para essa aplicação, mas você pode ver neste post aqui: https://www.makerhero.com/blog/sensor-ultrassonico-hc-sr04-ao-arduino/ como é o código para o sensor e integrar ao código, substituindo onde ele escreve a leitura do potenciômetro pela leitura do HC-SR04.
      Caso ainda reste alguma dúvida você pode postar sua dúvida na nossa comunidade maker no facebook, lá provavelmente alguém já fez algo semelhante e vai poder te ajudar.

      Abraços!
      Vinícius – Equipe MakerHero

  4. Gostaria de saber como posso fazer para enviar do computados os arquivos q eu quero. o arduino ficara ligado direto no pc, e eu vou enviando os arquivos que preciso

    1. Olá Emanuel,

      Até onde eu consegui levantar não é viável fazer essa transferência.

      Abraços!
      Vinícius – Equipe MakerHero

  5. Ola, Estou utilizando o Arduino NANO e a principio segui todos os passos corretamente, mas continuo tendo o erro

    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X1,0XFF

    Estou utilizando o formato FAT32, poderia me ajudar?

    1. Olá Gabriel,

      Você utilizou os mesmos valores de resistores na montagem, ou utilizou a calculadora do link disponibilizado?

      Abraços!
      Vinícius – Equipe MakerHero

  6. Como faço para que o processo de gravação seja interrompido apenas pela retirada do cartão ou depois de um certo numero de leituras registradas?

    1. Olá Bianca,

      Você pode utilizar o comando while junto com uma variável fazendo a contagem a cada leitura.
      Quando o número de contagens chegar ao desejado, irá sair do laço while e interromper as leituras.

      Abraços!
      Vinícius – Equipe MakerHero

  7. Testei o sketch acima com arduino NANO, módolo HW-125 e cartão de memória 8GB multilaser, conferi rigorosamente a formatação e as conexões, mas não funciona, mensagem serial:

    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X20,0XFF

    Tem um bom tempo que eu venho tentando fazer uma gravação de um SD no Arduino, mas sempre tenho o mesmo problema, o Arduino não consegue acessar o cartão.

    1. Olá Antônio, tudo bem?

      Qual o formato do cartão que estão usando? FAT16, FAT32, exFAT?

      Abraço!
      Rosana – Equipe MakerHero

  8. Oi boa noite, gostaria muito como fazer um sistema parecido como o do ônibus ao passa o cartão NFC sai do cartão o saldo do usuário e a máquina liberar o acesso, gostaria muito de fazer para meu projeto com wi-fi usando o cartão nfc

    1. Olá Jarisson,

      Você conhece nossa comunidade maker no facebook? Posta sua ideia por lá, acredito que vão te ajudar!

      Abraço!
      Rosana – Equipe MakerHero

  9. Se eu fizer uma gravação depois conseguiria ler o dado de volta do SD para fazer acender um led pela gpio?

    1. Olá Paulo!

      Sim, esse módulo permite escrita e leitura de dados. Então é possível fazer o que você deseja.

      Abraço!
      Rosana – Equipe MakerHero

  10. Olá, estou tentando escrever no início de um arquivo, a cada nova escrita da entrada de dados de um encoder rotativo, porém toda vez que ele escreve no arquivo, ele escreve no fim da linha, já tentei pelo método seek(0) mas mesmo assim na hora da escrita ele muda para o fim do arquivo e escreve após o que foi escrito anteriormente, teria como apagar a linha ou simplesmente escrever por cima do que estava lá antes ?

  11. Bom dia, fiz um projeto de um braço robóticos onde utilizo a eeprom do arduino para gravar as posições de 6 servomotor e depois ler essas posições salvas na eeprom e executar os movimentos, é possível fazer isso também ao invés de utilizar a eeprom do arduino utilizar o cartão se para gravar as posições e posteriormente ler essas posições e executar as posições salvas?

    1. Elielton,

      É possível sim.

      Abraços!
      Diogo – Equipe MakerHero

  12. Ola, posso utilizar o modulo com 2 arduinos, um escrevendo e o outro lendo usando as duas colunas de barramento SPI ?

  13. Relativo a conversão de nível lógico nota-se que no módulo do cartão sd já possui um resistor de 10k em série para cada sinal (ie. R1 até R4), e considerando a impedância equivalente de entrada dos respectivos sinais pergunto se podemos dispensar os divisores de tensão que vc usou ?

  14. Eu estou tentando fazer com que o nome do arquivo varie, usando o ds1302 to gerando uma data e queria que o arquivo .txt fosse criado de acordo com a data adquirida, já tentei de varias formas, mas nenhuma deu certo, poderia me dizer como fazer?

    1. Lucas,

      Sugiro levar a dúvida lá pro nosso fórum. Lá é mais fácil de ajudar 🙂

      Abraços!
      Diogo – Equipe MakerHero

  15. Olá, sabe me informar qual a velocidade de gravação dos dados no SD?
    Por exemplo, para transferir dados pela serial, leva entorno de 220us, para enviar o valor com duas casas decimais, pelo menos com os testes que fiz. E para o SD, fica em mais ou menos quanto tempo?

    1. Olá, Weslley,

      Isso depende muito do cartão, e do que você vai gravar. No caso, para você ter uma ideia, aconselho a baixar a biblioteca SDFat e então rodar o exemplo “Bench”. Com ele você consegue descobrir as informações de gravação do seu SD.

      Abraços!
      Diogo – Equipe MakerHero

  16. Será que alguém teria uma dica de como posso pegar o número escrito na última linha (só o número mesmo) e replicar ele em uma tela LCD. Gostaria de fazer isso para caso falte energia elétrica. Quando a energia retornar colocar esse último número gravado na tela do LCD e continuar a gravação normalmente no SD. Dicas são bem vindas. Obrigado.

    1. Olá Luiz,

      Sugiro você postar sua dúvida no nosso fórum. Lá o pessoal pode te ajudar mais nisso 😀

      Abraço!
      Rosana – Equipe MakerHero

  17. Boa tarde, preciso de uma ajuda!!!

    Estou utilizando o módulo microSD junto como mini ENC28J60, em um arduino MEGA e não consigo faze-los funcionarem simultâneamente. Já modifiquei os pinos CS de ambos, estão separados e eu ativo um de cada vez na lógica do código, porém não funciona. Estou utilizando a biblioteca SD.h e a UIPEthernet.h. Se vocês puderem ajudar ou fazer um tutorial de como utilizar os dois simultaneamente eu ficaria extremamente grato!!

    Obrigado.

    1. Olá Vitor,

      Sugiro que você veja essa informação a comunicação de múltiplos dispositivos SPI: https://www.arduino.cc/en/reference/SPI

      Abraço!
      Rosana – Equipe MakerHero

  18. É possível utilizar esse Módulo Cartão SD no Arduino Mega ADK e como seria a ligação física dos terminais???

    1. Olá Matheus,

      É possível usar o módulo cartão SD np Arduino Mega ADK. A ligação seria a mesma que no Arduino Uno.

      Abraço!
      Rosana – Equipe MakerHero

  19. O meu estagio está a correr bem graças a voce.
    OBRIGADO!!!!

    1. Olá,

      Que bom que nosso trabalho pode te ajudar 😀

      Abraço!
      Rosana – equipe MakerHero

      1. Boa tarde,

        Uma duvida no código acima não esta setado o Pinmode(chipselect, output) não e necessário ?

        1. Olá Bruno,

          Não é necessário. Essa informação já está na biblioteca.

          Abraço!
          Rosana – Equipe MakerHero

  20. Boa tarde, não consegui usar essa biblioteca, sempre aparece o erro de biblioteca inválida

    1. Olá Sandro,

      Baixe a biblioteca do seguinte link> e posteriormente descompacte a mesma. Abra a pasta e copie apenas a subpasta SdFat para a pasta Arduino > libraries. Acho que assim dará certo!

      Abraço!
      Rosana – Equipe MakerHero

      1. Rosana,

        Estou usando cartão de 8g com a FAt 32, mas o erro continua não consigo acessar o cartão

        1. Olá Bruno,

          Minha sugestão então é, se possível, testar com outro cartão. Também é bom revisar as ligações, pode ser que algo esteja errado. Se ainda não for isso, é possível que seu módulo esteja com problemas :/

          Abraço!
          Rosana – Equipe MakerHero

      2. Fiz dessa forma mas não obtive êxito

      3. Deu certo, fiz da seguinte forma:

        Zipei a pasta SdFat e inclui a biblioteca pela IDE do Arduino

        1. Olá Sandro,

          Que bom que deu certo! Boa sorte na continuação do projeto 😀

          Abraço!
          Rosana – Equipe MakerHero

  21. Gostaria de saber se tenho q colocar resistores para o vcc e o graund

    1. Olá Bruno,

      Só é necessário o divisor de tensão nos seguintes pinos do módulo cartão SD: CS, MOSI e SCK.

      Abraço!
      Rosana – Equipe MakerHero

      1. Posso usar um conversor de nível lógico ou é melhor resistores

      2. Gostaria de saber se posso usar o SD Card no 3,3V ao invés do 5V ?

        1. Olá Bruno,

          Na verdade o conversor lógico é o ideal.
          E sim, a alimentação pode ser feita pelo 3,3V.

          Abraço!
          Rosana – Equipe MakerHero

          1. Olá,

            Estou com o erro abaixo, você pode me da uma luz não estou conseguindo encontrar o erro

            Can’t access SD card. Do not reformat.
            SD errorCode: 0X2,0XFF

          2. Olá Bruno,

            O cartão SD que está utilizando está no formato FAT32?

            Abraço!
            Rosana – Equipe MakerHero

  22. Boa tarde,
    é possivel fazer o processo inverser? Ou seja, mandar os dados do cartão SD já guardados en ficheiros para serem processados no arduino e posteriormente enviados por um módulo de Bluetooth HC-5 para o computador
    Se dor possivel, pode auiliar-me no código?

    1. Olá Claudia,

      Você poderia colocar seu problema no fórum? Lá o pessoal pode te ajudar mais nisso!
      https://www.makerhero.com/forum/

      Abraço!
      Rosana – Equipe MakerHero

  23. E possível conectar um USB ao modulo e ler pelo PC as informações gravadas sem retirar o cartão?

    1. Olá Matheus!

      É possível sim. Basta ver na serial os dados do cartão. Só não é possível acessá-lo como uma pasta.

      Abraços!

      André – Equipe MakerHero

  24. Boa noite. Tenho um Uno R3 e um Data Logger Shield.
    O meu projeto consiste em ler a umidade do solo e salvar em cartao SD. Porém o cartão não é reconhecido e aparece a seguinte mensagem “cardfaailed, or not present”. Qual será o problema? Podem me ajudar?
    Usei o seguinte sketch:

    #include
    #include

    #define pinSensorA A0
    #define pinSensorD 8

    const int chipSelect = 4;

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

    Serial.print(“Initializing SD card…”);

    if (!SD.begin(chipSelect)) {
    Serial.println(“cardfaailed, or not present”);
    // don’t do anything more:
    return;
    }
    Serial.println(“card initialized.”);

    pinMode(pinSensorD, INPUT);
    pinMode(pinSensorA, INPUT);
    }

    void loop() {
    delay(4000);
    Serial.print(“Digital:”);

    if (digitalRead(pinSensorD)) {
    Serial.print(“SEM UMIDADE “);
    } else {
    Serial.print(“COM UMIDADE “);
    }

    int valor = analogRead(pinSensorA);
    Serial.print(“Umidade do solo:”);
    Serial.println(valor);

    SDFile dataFile = SD.open(“datalog>txt”, FILE_WRITE);

    if (dataFile) {
    dataFile.println(valor);
    dataFile.close();

    }

    else {
    Serial.println(“error opening datalog.txt”);
    }
    }

    1. Olá Rafael!

      Qual o tamanho do cartão?

      Está no formato FAT32?

      Abraços!

      André – Equipe MakerHero

  25. Bom dia Adilson, estou tentando fazer o tutorial acima mas quando tento executar o script aparece o seguinte erro:
    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X1,0XFF

    1. Lendo a resposta do Tiago acima decidi fazer um divisor com trimpots o que deixaria os divisores de tensão mais precisos, ajustei para uma tensão de saída de 3,3V e o erro mudou:
      Can’t access SD card. Do not reformat.
      SD errorCode: 0X2,0XFF

      1. Olá Marcelo!

        Parece ser defeito no componente!

        Abraços!

        André – Equipe MakerHero

  26. Olá, qual o melhor dispositivo para armazenar dados: esse módulo SD Card ou o módulo EEPROM? E qual a diferença nos dois com relação a armazenamento de dados? Algum deles é melhor nesse quesito?

    1. Olá Helton!

      Depende para que você deseja usar. O SD é mais fácil de passar as informações para um PC, por exemplo.
      Você deve ver as especificações (velocidade, capacidade etc.) e ver o que se encaixa melhor no seu projeto

      Abraços!

      André – Equipe MakerHero

  27. Olá Adilson!
    Muito bom dia!
    Ótimo post! Parabéns!
    Teria como fazer o inverso posteriormente? Ou seja, fazer com que o Arduino leia os dados gravados no cartão SD?
    Conto com sua ajuda.
    Congratulações!

    1. Olá Giovani!

      Vamos anotar a sugestão aqui!

      Enquanto isso, você poderia fazer e compartilhar no nosso fórum, né?
      Lá você pode tirar algumas dúvidas e postar seus projetos. Colaborar e aproveitar a comunidade:

      https://www.makerhero.com/forum/

      Abraços!

      André – Equipe MakerHero

  28. Olá, como faço pra enviar via bluetooth para um android os dados gravados no cartão sd no lugar de retirá-lo para ver os dados e apagá-los se desejar?

    1. Olá Thálen!

      Você deve fazer as duas coisas funcionarem separadamente. O envio de dados via bluetooth e a comunicação com o datalogger.

      Nesse post falamos da parte do bluetooth:
      https://www.makerhero.com/blog/tutorial-arduino-bluetooth-hc-05-mestre/

      Aqui falamos como comunicar com o celular:
      https://www.makerhero.com/blog/tutorial-modulo-bluetooth-com-arduino/

      O que acha de falar mais sobre o projeto no nosso fórum? Vai contando pra gente como está ficando, tirando eventuais dúvidas para colaborar e aproveitar a comunidade:

      https://www.makerhero.com/forum/

      Abraços!

      André – Equipe MakerHero

  29. Parabéns pelo tutorial! Muito bom mesmo!

    1. Olá Marcelo!

      Ficamos muito felizes quando nosso trabalho ajuda as pessoas!

      Você já deu uma olhada no nosso fórum?
      Lá você pode tirar algumas dúvidas e postar seus projetos. Colaborar e aproveitar a comunidade:

      https://www.makerhero.com/forum/

      Abraços!

      André – Equipe MakerHero

  30. Gostaria de saber se eu teria como gerar arquivos de vídeo fazendo a arruinA funcionar como um DVR?

  31. Bom Dia.
    Estou utilizando o módulo SDcard para gravar dados de um LDR, porém, preciso alimentá-lo externamente e não pelo USB. Percebi que ele grava quando eu abro o serial. Somente com alimentação externa, teria como efetuar a gravação do mesmo modo?

  32. excelente… adorei o post.
    E se eu quiser que o arduiino grave e leia uma informação e mostro num LCD?

  33. Olá!!! Estou usando o fritzing pra fazer um circuito semelhante, só não tem este esquema do sdcard!!! Vcs fizeram, podem compartilhar?

    Obrigado

  34. Esse módulo pode ser utilizado para tocar áudios em .wav?

    1. Boa tarde Mateus,

      Para esse caso, recomendamos um outro tipo de hardware, o Módulo MP3 DFPlayer Mini.

      Abraço!

      Adilson – Equipe MakerHero

  35. Adilson boa tarde. Onde você conseguiu esta imagem do cartão SD para o Fritzing? Eu procurei no programa e no fórum e não achei igual, só parecido. Faço o mesmo pedido para o módulo RTC com o DS1307.

    Grato,
    Flávio

  36. Bom dia!
    Tem alguma ideia simples de como faço para excluir uma unica linha de um arquivo .txt dentro do sdcard.

    Estou armazenando nele uma base de dados num arquivo .txt.

    Já consegui inserir, mas só consigo remover todo o arquivo e preciso remover somente uma linha do arquivo.

    Obrigado.

  37. Boa tarde,

    Alguém poderia me explicar a função da linha 42 “while (1) {}” ?

    Estou me baseando neste código para fazer outro portanto não me contento apenas em copiar.

  38. Olá, qual a máxima taxa de transferência que consigo utilizando estes shield e o arduino mega.
    Grato,
    Mauro

  39. Muito bom!!!! Parabéns mais uma vez pela tutorial!!! Estou sempre aprendendo boas informações nesta site.

  40. Bom dia, estava pensando em fazer um projeto de um gravador e reprodutor de áudio com um arduino mais não entendo muito de programação.
    Esse projeto Faria o seguinte, ele gravaria um áudio de uma guitarra, armazenaria em cartão SD e depois reproduziria esse audio, vc poderia me dar uma força ?

  41. Por gentileza, estou com dificuldades em gravar os dados de um sensor DS18B20 em um cartão SD. Sou bolsista do professor Miguel no IFRS – Campus Rio Grande. E para os testes utilizei os exemplos fornecidos pela biblioteca fornecida nesse post e os proprios exemplos do IDE das bibliotecas SD e SPI. O programa gera um arquivo, em branco. porém não grava os dados gerados, consigo visualizar os valores pela serial, mas não gravá-los. É possível me auxiliar?

    Tentei com um cartão de 2GB da KINGMAX

    Grato,

    1. Olá, Bento Gonzaga, também tive esse problema e em todos os outros tutoriais que achei.
      Caso você ainda não tenha resolvido veja se seu módulo é igual ao desse tutorial: http://www.instructables.com/id/Micro-SD-Card-Tutorial/

      Ele já trabalha com 5V e portanto não é necessário os divisores de tensão para funcionar.

  42. Adilson, boa noite.

    apareceu o seguinte erro ao rodar o sistema:

    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X1,0X0

    tem alguma idéia do que seria?

    obrigado

    Raphael

    1. tenho este mesmo problema…
      alterei os pinos como visualizado acima..
      entretanto ainda mostra essa mensagem de erro.

  43. Esta biblioteca suporta capacidades até quanto, pois a biblioteca padrão do arduino suporta apenas até 4Gb.
    Obrigado.

  44. Boa Tarde,
    Tenho um exercicio que pede para escrever um sketch que leia a temperatura ambiente e grave no cartão SD,
    porem não sei nem começar, será que podes me ajudar?

  45. Boa tarde, gostaria de ligar um leitor de cartões rfid juntamente com o modulo de cartão SD no meu Arduíno, estou tentando fazer para o UNO e para o Mega. Como ambos os módulos usam os mesmos pinos, existe a possibilidade de setar outros para a gravação no SD? Ou para leitura do RFID?

    E depois que eu gravar no txt, eu consigo fazer o inverso? E ler o txt e passar os dados para o Arduíno processar?

    1. Olá. Sabe me dizer se conseguiu finalizar o seu projeto? se positivo, gostaria de fazer um igual.

      1. Boa tarde,
        ainda não. Tive que abandonar o projeto por um tempo. Voltei nele agora.
        Você teve algum progresso?

        1. conesgui um sketch muito legal, mas nao sei como passar pra voce.

          1. Me passa por email .. [email protected]

            Stella Marques
  46. Olá, galera!

    Eu tenho uma dúvida. Eu consigo mandar algum arquivo para um cartão SD conectado no arduino, sem que ele esteja conectado diretamente no PC… sei lá usando um módulo Bluetooth ou coisa parecida. Eu simplesmente conectaria (parearia) meu PC com o módulo, e enviaria dados para o cartão SD.
    Se a resposta for sim, como eu faria isso??

    Obs: Não sei se o que perguntei foi algo absurdo, mas não custa nada tentar.

  47. Boa tarde, saiu um módulo desse mais novo que não é necessário usar um divisor de tensão, ele já possui um regulador de tensão para 3.3V, poderia fazer um update demonstrando como podemos tocar um arquivo .wav com esse novo módulo? Obrigado! https://ae01.alicdn.com/kf/HTB1IZjhIXXXXXXBXFXXq6xXFXXXY/221354416/HTB1IZjhIXXXXXXBXFXXq6xXFXXXY.jpg

  48. Amigo

    Tem como voce me ajudar

    Estou fazendo um medidor de consumo de energia, quero gravar a memória da ultima leitura , exemplo
    se o consumo atual e de 2000kw/h seja automaticamente gravado para posterior leitura do arduino ou seja a procima leitura do arduino vai ser apartir de 2000kw/h

    seria uma memória de calculo

  49. Bom dia.

    Como faço pra usar o monitor serial para gravar dados no SD, já que ambos usam a função Serial.begin(9600)?

  50. Boa noite, como fica essa ligação no arduino Leonardo?

  51. olá !
    Meus conhecimentos de programação estão escassos para conseguir digitar um código no arduino que me permitisse salvar na memoria eeprom, o ultimo valor lido de um sensor, para que, ao reiniciar, o programa inicia a execução a partir do ultimo valor salvo. Como se fosse ler e apagar sempre aquele valor. Será que você poderia me dar uma força nessa?
    Obrigado!!

  52. Eu tenho uma dúvida. Estou tentando criar um arquivo no SD card com o nome igual a data que li no RTC. Consegui criar uma String chamada Data que vem com a seguinte forma DD.MM.AAAA.txt
    Mas quando eu uso o comando:

    Data = rtc.getDateStr();
    Data=Data+”.txt”;
    File dataFile = SD.open(Data, FILE_WRITE);

    O arquivo não é criado. como posso fazer isto?
    Att

  53. Olá, sou iniciante em arduino e uma dúvida que sempre tenho é em saber quais são as funções de uma biblioteca desenvolvida para um determinado módulo ou sensor. Sempre fico perdido na hora de programar.
    Aproveitando, parabéns pelo blog, tem me ajudado bastante no apredizado

    1. A função da biblioteca é te fornecer um código com todas as funções daquele módulo ou dispositivo prontas. Assim você não precisa implementar cada uma delas quando usa um módulo. E também economizar linhas na programação.
      Tente entrar na pasta das bibliotecas e procure pelos arquivos no formato .cpp, eles são os códigos fontes não compilados das bibliotecas, sendo que os compilados são os .h

  54. Boa tarde amigo! Gostei muito do seu post mas fiquei com uma dúvida boba: qualquer cartão sd funciona nesse módulo ou tem que ser algum especifico?

    vlw =)

    1. Olá, Thales.
      Não sou do site, mas passei por um problema parecido… rsrs.
      Imagino que este esquemático descrito só funcione para cartões SD mais antigos. Os mais recentes (sobretudo os SDHC) exigem um bom barramento de 3.3V para sinal, e o Arduino usa 5V. O uso de divisores de tensão não são bons o suficiente para esses cartões (pois não são bidirecionais), e nesse caso, você precisaria de um conversor lógico.

      1. Muito obrigado amigo. Estou com um projeto aqui quase finalizado, só faltava isso. vlw 😉

  55. Boa tarde amigo! Gostei muito do seu blog mas fiquei com uma dúvida boba: qualquer cartão sd funciona nesse módulo do arduíno ou tem que ser algum especifico?

    vlw!

  56. Bom dia, estou com um módulo semelhante ao utilizado. E o problema é o seguinte, quando eu inicio o Arduino a função Setup inicializa o módulo e salva os dados, porém quando eu vou salvar algo na função Loop o módulo não inicializa e não salva. Alguém pode me ajudar?

  57. Eu consegui solucionar o problema de não estar reconhecendo o SD shild da seguinte forma:
    1 – Usei a própria biblioteca do IDE e mais uma biblioteca para a interface SPI
    2 – conectei a saída do pino 13 diretamente no SCK

    Segue o código:

    /*
    SD card datalogger

    This example shows how to log data from three analog sensors
    to an SD card using the SD library.

    The circuit:
    * analog sensors on analog ins 0, 1, and 2
    * SD card attached to SPI bus as follows:
    ** MOSI – pin 11
    ** MISO – pin 12
    ** CLK – pin 13
    ** CS – pin 4

    created 24 Nov 2010
    modified 9 Apr 2012
    by Tom Igoe

    This example code is in the public domain.

    */

    #include
    #include

    // Pino ligado ao CS do modulo
    const int chipSelect = 4;
    int contador=0;
    File dataFile;
    void setup()
    {
    Serial.begin(9600);
    // Define o pino do potenciometro como entrada
    pinMode(A5, INPUT);

    // Inicializa o modulo SD

    Serial.print(“Initializing SD card…”);

    // see if the card is present and can be initialized:
    if (!SD.begin(chipSelect)) {
    Serial.println(“Card failed, or not present”);
    // don’t do anything more:
    return;
    }

    dataFile = SD.open(“arquivo.txt”, FILE_WRITE);
    if (dataFile) {
    Serial.println(“card initialized.”);

    }
    // if the file isn’t open, pop up an error:
    else {
    Serial.println(“error opening arquivo.txt”);
    }
    }

    void loop()
    {

    // Leitura da porta A5/LM35
    int LM35 = analogRead(A5);
    float temperatura;
    //converte a temperatura para graus
    temperatura = (float(analogRead(LM35))*5/(1023))/0.01;
    Serial.print(“Temperatura: “);
    Serial.println(temperatura);

    // Grava dados do potenciometro em arquivo.txt
    dataFile.print(“Temperatura: “);
    dataFile.println(temperatura);
    contador++;
    if (contador >1000)
    {
    // Interrompe o processo e fecha o arquivo
    Serial.println(“Processo de gravacao interrompido. Retire o SD!”);
    dataFile.close();
    while (1) {}
    }
    delay(2000);
    }

  58. Olá estou tentando fazer esta implementação no meu arduino UNO e o SDCard. No entanto ele apresenta a seguinte mensagem.
    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X1,0XFF

    Não está conseguindo acessar o SD. Alguém pode me ajudar?

    Aguardo Resposta. Abraço!

    1. Estou tendo o mesmo problema.
      Você conseguiu resolver?

  59. Tem como ligar rfid+lcd para gravar os dados do rfid
    ? Espero uma ajuda
    Email [email protected]
    Celular (64)981598508

  60. No exemplo da temperatura citada acima.

    Como faço por exemplo para ler a primeira linha, qual foi o valor registrado e mostrar na propria serial ao apertar um botao e consecutivamente apertar o botao e mostrando as demais linhas?

  61. Adquirimos o modulo cartao sd ha algum tempo.
    Tenho uma duvida, depois que gravo os dados no cartao, no arquivo txt.
    Como faço para ler linha a linha de tudo que escrevi?

    exemplo: consigo acessar o ultimo item gravado, mas e os anteriores.

    Serial.write(meuArquivo.read());
    lcd.setCursor(0,3);

    lcd.print(day());
    lcd.print(“/”);
    lcd.print(month());
    lcd.print(” “);

    lcd.print(hour());
    lcd.print(“:”);
    lcd.print(minute());
    lcd.print(” “);

    if(espalarme1 >= variavel){
    lcd.print(“01”);
    }
    else {
    lcd.print(“02”);
    }

    Agradeço a atenção

  62. Olá.
    Estou utilizando um conversor de nível lógico 3,3-5V Bidirecional com um Arduino Mega 2560.
    Quando inicia a comunicação serial, aparece a seguinte mensagem no serial monitor:
    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X1,0XFF
    Gostaria de saber o que pode estar ocorrendo no meu circuito ou programa?

    Estou anexando o código para verificar onde está o possível erro
    #include

    SdFat sdCard;
    SdFile meuArquivo;

    #define dois 2
    #define quatro 4

    // Pino ligado ao CS do modulo
    const int chipSelect = 49;

    //Declaração das Variavéis
    int contato;
    int gravacao;
    int valor;

    void setup()
    {
    Serial.begin(9600);
    pinMode(dois,INPUT_PULLUP);
    pinMode(quatro,INPUT_PULLUP);
    // Inicializa o modulo SD
    if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt();
    // Abre o arquivo ALARMES.TXT
    if (!meuArquivo.open(“alarmes.txt”, O_RDWR | O_CREAT | O_AT_END))
    {
    sdCard.errorHalt(“Erro na abertura do arquivo ALARMES.TXT!”);
    }
    }

    void loop(){
    contato=digitalRead(dois);
    gravacao=digitalRead(quatro);

    if(contato==0){
    valor=250;
    }

    Serial.print(“Grava: “);
    Serial.println(valor);

    // Grava dados
    meuArquivo.print(“Grava: “);
    meuArquivo.println(valor);

    if (gravacao==0){
    // Interrompe o processo e fecha o arquivo
    Serial.println(“Processo de gravacao interrompido. Retire o SD!”);
    meuArquivo.close();
    while (1) {}
    }
    delay(2000);
    }

  63. tenho um gps shield v1r3, não consigo gravar nada no mini cartão SD scandisk ultra 8gb micro, tenho feito de todas as maneiras, será que não há nenhum programa que me possam ajudar, ou alguma dica diferente,

    o que eu tenho está aqui neste endereço,

    http://mlb-s1-p.mlstatic.com/modulo-gps-logger-shield-v1r3-tinysine-arduino-uno-408411-MLB20550533313_012016-F.jpg

    Muitíssimo Obrigado pela ajuda,

    espero por vossa noticia

    Os meus Cumprimentos,
    Pedro

  64. Estou tentando utilizar o módulo SD com o Arduino Mega mas não funciona, se coloco no Uno funciona normalmente. Quando abro a Serial aparece que salvou a data e os demais sensores dá erro, e mesmo quando abre o cartão nada está salvo.

    1. Allan,
      Os pinos da implementacao SPI em HW sáo diferentes no Arduino Mega e, por isso, voce tem que fazer a troca dos fios conforme abaixo:

      SPI Uno Mega
      SS: 10 -> 53
      MOSI: 11 -> 51
      MISO: 12 -> 50
      SCK: 13 -> 52

      1. Flavio,
        O mesmo já foi feito, mas ele não consegue “abrir” o cartão ou quando consegue o arquivo fica corrompido.

  65. Boa noite, estou com o erro
    Can’t access SD card. Do not reformat.
    No card, wrong chip select pin, or SPI problem?
    SD errorCode: 0X1,0XFF

    Sou iniciante e não consigo encontrar o erro.
    Obrigada

    1. O cartão esta formatado em FAT32?

  66. Muito bom! Para gravar na memória EEPROM temos limitação quanto ao número de dígitos, pois vai só até o valot 255, embora haja como contornar esse problema. No cartão SD temos o mesmo problema, ou é mais tranquilo?? Obrigado

  67. Olá, tudo certo? Gostaria de saber se para salvar certas variáveis no arduino será necessário uma placa dessa, ou posso usar apenas a EEPROM dele? São variáveis numéricas, cerca de 4 variáveis com 4 dígitos, para que eu possa salvar uma variável, e quando desligar e ligar o arduino, essa variável não esteja “default”. Estou iniciando um projeto no qual irei editar variáveis pelo display LCD e botões (aquela placa I2C com botões e display).

    1. Bom dia Dinho,

      Eu acho que a melhor opção é gravar na memória EEPROM, a não ser que você precise de um histórico desses dados.

      Abraço!

      Adilson – Equipe MakerHero

      1. Adilson
        Bom dia
        Preciso salvar 200 variáveis float com valores grande 10000.00 e normalmente 02 casas
        decimais, os valores salvos eu preciso em determinado momento ler ou escrever em apenas uma das variáveis. Estou pensando em usar um cartão SD, poderia ser feito? tem um exemplo de código para converter, escrever a variável e recuperar o valor quando desejado.
        Grato
        Roberto

        ,

  68. Olá, boa noite, estou começando agora com arduino, e queria tirar uma duvida, para usar o MODULO SD no ARDUINO UNO, utilizara as portas 4, 10, 11, 12, 13, mesmo não conectado a porta 10 ela poderá ser utilizada para outro sensor? Minha duvida está na porta 10, posso ou não utiliza-la para outro sensor? Grato.

  69. Olá
    você poderia me ajudar?
    sou ainda iniciante
    Como faço para controlar o motor de passo em que após um comando (if qualquer) ele gira uma volta completa (2048 passos) e para. e quando for outro (if) retornar para a posição inicial e girar novamente a volta completa.
    A velocidade que gira nem é tão importante. Em todas as tentativas, o motor girou indefinidamente.
    Desde já agredeço

  70. Bom dia, da pra fazer a ligação do modulo sd com o arduino mega sem utilizar os resistores?

    1. Bom dia Francisco,

      Não recomendamos, já que o módulo trabalha com nível de sinal de 3.3V.

      Abraço.

      Adilson – Equipe MakerHero

  71. Olá Felipe!
    Você poderia me ajudar?
    Como faço para modificar as portas MISO- 12 e MOSI – 11 do arduino UNO para portas analógicas? está havendo incompatibilidade com portas do LCD!
    Obrigado!

    1. Bom dia Carlos,

      O único pino que você pode modificar é o pino CS (Chip Select), os outros pinos da interface SPI são fixos.

      Mas uma alternativa é você mudar a ligação do LCD.

      Abraço!

      Adilson – Equipe MakerHero

  72. Sabe onde encontro algum tutorial, sobre recuperar os dados de um arquivo do SD. Nas verdade eu quero sobrescrever um inteiro, pensei em usar o EEPROM mas fiquei na duvidade de um numero muito grande seria viavel de gravar lá.

  73. Amigos tenho um Lcd tft 2.4 com touche e sd na mesma placa e estou com dois problema um e que não consigo acessar o sd de forma alguma e outro e ligar o RTC junto ao mesmo, alguém poderia dizer coo fazer.

    1. Boa noite,
      O meu SD não funcionava porque eu tentava alimentá-lo tanto pelo pino 5V como pelo pino 3,3V. Foi só começar a utilizar um ou outro que funcionou tudo certinho.

      1. Boa tarde

        Não estou conseguindo comunicação, estou utilizando um arduino Mega, Qual foi o pino utilizado para que o sistema funcionar?

  74. Olá, por favor alguém responda essa pergunta. Alguém sabe como comparar um valor salvo no cartão sd ? Por exemplo: eu escrevo a palavra “roupa” no cartão SD, e utilizo um if, If(Serial.read() == NOMENOSD){…. Alguém sabe isso ?

    1. Ola Douglas, para fazer a leitura e comparaçao de string no arduino utiliza-se o seguinte codigo.

      String temporario = String(Serial.read());

      temporario.trim();
      if(temporario.length() >0){
      if(temporario == NOMENOSD){ // == ou temporario.toequal(NOMENOSD)
      //seu codigo aki
      }
      }

      Gabriel Oliveira Braga
      Bacharelando de Ciencias da Computacao IFG – Anápolis

      Duvidas me enviem um email.
      [email protected]

  75. Alguém conseguiu gravar alguma coisa no cartão de memória?
    Sempre que tento gravar ou ler algo ele apresenta erro 0X1,0XFF

  76. Olá, estou obtendo o seguinte erro:
    SD errorCode: 0X1,0XFF

    1. Tive o mesmo problema

  77. ola, eu posso usar este modulo cartão sd para reproduçao de audio como o modulo mp3 WTV020-sd ?

    1. Bom dia,

      Até onde eu sei você vai precisar de um hardware auxiliar, o SD seria utilizado apenas para armazenar as músicas.

      Abraço

      Adilson – Equipe MakerHero

  78. Olá Amigo, tenho um arduino duemilanove, quando uso essa pinagem , a porta usb da placa para e ai não consigo mais monitorar / atualizar o programa, será que numa placa mais moderna como o UNO esse conflito não aconteceria ? tem alguma forma de ligar o módulo no Duemilanove e manter a comunicação serial funcionando ?

    1. Bom dia André,

      Não temos uma placa Duemilanove para fazer esse teste, mas creio que os outros leitores do blog podem te ajudar.

      Quanto ao Uno, foi a placa que utilizamos para realizar os testes e montar esse post.

      Abraço

      Adilson – Equipe MakerHero

    2. Cara, quanto ao Duemilanove, não tenho esta placa, mas já vi em outros posts com uso de cartão SD os caras falarem para ligar o SDCS no pino 8 ao invés do pino 4. Espero que ajude!!!

  79. Posso fazer isso usando zeners para reduzir a tensão para 3.3v?

  80. Olá Amigo !!! Achei esse seu código muito interessante. Tenho um problema que talvez você possa me ajudar. você saberia me dizer como faço para ler um valor de texto dentro de um arquivo .txt que está no cartão SD e colocá-lo numa variável X ? Esse arquivo tem apenas um valor, por exemplo o número 100. Grande Abraço !!!

  81. Amigo, parabéns pelo blog e seus posts, gostaria de uma ajuda, consigo programar para ligar uns relés pela internet usando a etherShield, mas tenho que complementar o programa para abrir uma página html para ligar esses relés, mas tenho que usar um SD, não estou conseguindo rodar o programa no cartão SD. EX.: Quando eu acessar o site dentro do SD (página HTML) irá aparecer uns botões e tals, mas não estou conseguindo fazer o arduino receber o comando, pode me ajudar???
    Desde já sou muito agradecido.

  82. É possível utilizar esse cartão junto do ENC28J60, sendo que este também usa a interface SPI?

    1. Bom dia Adriano,

      É possível sim, você só precisa definir pinos diferentes para o pino CS de cada módulo. Você pode utilizar o pino 10 para o ENC28J60 e o pino 4 para o módulo SD, por exemplo.

      A interface SPI permite que você use vários dispositivos em um mesmo barramento.

      Abraço!

      Adilson – Equipe MakerHero

  83. A seguinte mensagem de erro aparece para mim na interface:

    Invalid format, reformat SD.

    O cartã SD está funcionando pois acabei de testá-lo no computador. Qual pode ser o problema? Estou testando um módulo que acabei de adiquirir.

    1. Boa tarde,

      Pela mensagem que você informa, o módulo cartão está sendo reconhecido, mas o cartão SD não. Tente formatar o cartão como FAT ou FAT32, e tente também com algum outro cartão, se possível de outro fabricante.

      Abraço

      Adilson – Equipe MakerHero

  84. Olá, Adilson bom dia! Gostaria de saber se uma fonte ajustável protboard (https://www.makerhero.com/pd-6b7f4-fonte-ajustavel-protoboard.html?ct=93344&p=1&s=1) poderia dispensar o uso desse circuito divisor de tensão, já que a mesma converte 5V para 3,3V.

    1. Boa tarde Ronnie,

      Não vai funcionar, pois essa fonte ajustável para protoboard só regula a tensão de alimentação do circuito. Para ajustar a tensão do nível lógico, você vai precisar deste produto:

      https://www.makerhero.com/pd-14770b-conversor-de-nivel-logico-3-3-5v-bidirecional.html

      Abraço

      Adilson – Equipe MakerHero

  85. Adilson,
    Bom tutorial, simples e bem explicado, compreensível até por um leigo como eu. Vai no caminho do que preciso, que é um pouco mais complexo: Arduino, cartão SD, módulo relógio RTC DS1307 e leitura de um sensor ótico. Explico: um pluviômetro de caçamba basculante, que gere registro no SD quando ocorrer o movimento basculante em caso de chuva, contendo o horário do evento. Implementação posterior acrescentaria um módulo wireless. Você acredita que seria possível?

    1. Boa tarde Elcio,

      Interessante esse projeto. É possível sim. Em breve iremos publicar um projeto de datalogger, que pode ajudar no seu caso.

      Abraço !

      Adilson – Equipe MakerHero

  86. Olá, percebi na programação que o pino 4 está sendo usado para selecionar o chip, eu poderia selecionar outro terminal para fazer essa seleção ou é necessário o pino 4 para tal execução???
    Muito Obrigado.
    Fábio S. Guedes.

    1. Boa tarde Fábio,

      Você pode usar outro pino para essa função. Não esqueça de alterar a linha 10 do programa.

      Abraço.

      Adilson – Equipe MakerHero

  87. É possível utilizar esse Módulo Cartão SD no Arduino Mega e como seria a ligação física dos terminais???

    1. Boa tarde Fabio,

      A interface SPI do Mega é diferente do UNO.

      Uno
      SS – 10
      MOSI – 11
      MISO – 12
      SCK – 13

      Arduino Mega
      SS 53
      MOSI 51
      MISO 50
      SCK 52

      Abraço.

      Adilson – Equipe MakerHero

      1. boa Tarde. Sou iniciante com arduino e fiquei com uma duvida. Esse pino CS seria o que está ligado à porta 4 do arduino? pelo que vi aqui não havia nenhuma conexão à porta 10.