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.
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:
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.
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).
Retire o cartão SD e abra, no computador, o arquivo LER_POT.TXT para verificar as informações que foram gravadas:
Gostou? Deixe seu comentário logo abaixo.
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
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.
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
Bom dia.
Como seria o codigo para registrar alturas (HC-SR04) e gravar no cartão SD
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
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
Olá Emanuel,
Até onde eu consegui levantar não é viável fazer essa transferência.
Abraços!
Vinícius – Equipe MakerHero
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?
Olá Gabriel,
Você utilizou os mesmos valores de resistores na montagem, ou utilizou a calculadora do link disponibilizado?
Abraços!
Vinícius – Equipe MakerHero
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?
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
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.
Olá Antônio, tudo bem?
Qual o formato do cartão que estão usando? FAT16, FAT32, exFAT?
Abraço!
Rosana – Equipe MakerHero
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
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
Se eu fizer uma gravação depois conseguiria ler o dado de volta do SD para fazer acender um led pela gpio?
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
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 ?
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?
Elielton,
É possível sim.
Abraços!
Diogo – Equipe MakerHero
Ola, posso utilizar o modulo com 2 arduinos, um escrevendo e o outro lendo usando as duas colunas de barramento SPI ?
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 ?
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?
Lucas,
Sugiro levar a dúvida lá pro nosso fórum. Lá é mais fácil de ajudar 🙂
Abraços!
Diogo – Equipe MakerHero
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?
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
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.
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
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.
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
É possível utilizar esse Módulo Cartão SD no Arduino Mega ADK e como seria a ligação física dos terminais???
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
O meu estagio está a correr bem graças a voce.
OBRIGADO!!!!
Olá,
Que bom que nosso trabalho pode te ajudar 😀
Abraço!
Rosana – equipe MakerHero
Boa tarde,
Uma duvida no código acima não esta setado o Pinmode(chipselect, output) não e necessário ?
Olá Bruno,
Não é necessário. Essa informação já está na biblioteca.
Abraço!
Rosana – Equipe MakerHero
Boa tarde, não consegui usar essa biblioteca, sempre aparece o erro de biblioteca inválida
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
Rosana,
Estou usando cartão de 8g com a FAt 32, mas o erro continua não consigo acessar o cartão
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
Fiz dessa forma mas não obtive êxito
Deu certo, fiz da seguinte forma:
Zipei a pasta SdFat e inclui a biblioteca pela IDE do Arduino
Olá Sandro,
Que bom que deu certo! Boa sorte na continuação do projeto 😀
Abraço!
Rosana – Equipe MakerHero
Gostaria de saber se tenho q colocar resistores para o vcc e o graund
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
Posso usar um conversor de nível lógico ou é melhor resistores
Gostaria de saber se posso usar o SD Card no 3,3V ao invés do 5V ?
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
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
Olá Bruno,
O cartão SD que está utilizando está no formato FAT32?
Abraço!
Rosana – Equipe MakerHero
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?
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
E possível conectar um USB ao modulo e ler pelo PC as informações gravadas sem retirar o cartão?
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
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”);
}
}
Olá Rafael!
Qual o tamanho do cartão?
Está no formato FAT32?
Abraços!
André – Equipe MakerHero
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
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
Olá Marcelo!
Parece ser defeito no componente!
Abraços!
André – Equipe MakerHero
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?
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
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!
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
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?
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
Parabéns pelo tutorial! Muito bom mesmo!
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
Gostaria de saber se eu teria como gerar arquivos de vídeo fazendo a arruinA funcionar como um DVR?
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?
excelente… adorei o post.
E se eu quiser que o arduiino grave e leia uma informação e mostro num LCD?
Olá!!! Estou usando o fritzing pra fazer um circuito semelhante, só não tem este esquema do sdcard!!! Vcs fizeram, podem compartilhar?
Obrigado
Esse módulo pode ser utilizado para tocar áudios em .wav?
Boa tarde Mateus,
Para esse caso, recomendamos um outro tipo de hardware, o Módulo MP3 DFPlayer Mini.
Abraço!
Adilson – Equipe MakerHero
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
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.
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.
Olá, qual a máxima taxa de transferência que consigo utilizando estes shield e o arduino mega.
Grato,
Mauro
Muito bom!!!! Parabéns mais uma vez pela tutorial!!! Estou sempre aprendendo boas informações nesta site.
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 ?
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,
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.
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
tenho este mesmo problema…
alterei os pinos como visualizado acima..
entretanto ainda mostra essa mensagem de erro.
Esta biblioteca suporta capacidades até quanto, pois a biblioteca padrão do arduino suporta apenas até 4Gb.
Obrigado.
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?
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?
Olá. Sabe me dizer se conseguiu finalizar o seu projeto? se positivo, gostaria de fazer um igual.
Boa tarde,
ainda não. Tive que abandonar o projeto por um tempo. Voltei nele agora.
Você teve algum progresso?
conesgui um sketch muito legal, mas nao sei como passar pra voce.
Me passa por email .. [email protected]
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.
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
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
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)?
Boa noite, como fica essa ligação no arduino Leonardo?
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!!
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
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
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
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 =)
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.
Muito obrigado amigo. Estou com um projeto aqui quase finalizado, só faltava isso. vlw 😉
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!
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?
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);
}
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!
Estou tendo o mesmo problema.
Você conseguiu resolver?
Tem como ligar rfid+lcd para gravar os dados do rfid
? Espero uma ajuda
Email [email protected]
Celular (64)981598508
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?
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
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);
}
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
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.
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
Flavio,
O mesmo já foi feito, mas ele não consegue “abrir” o cartão ou quando consegue o arquivo fica corrompido.
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
O cartão esta formatado em FAT32?
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
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).
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
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
,
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.
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
Bom dia, da pra fazer a ligação do modulo sd com o arduino mega sem utilizar os resistores?
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
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!
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
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á.
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.
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.
Boa tarde
Não estou conseguindo comunicação, estou utilizando um arduino Mega, Qual foi o pino utilizado para que o sistema funcionar?
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 ?
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]
Alguém conseguiu gravar alguma coisa no cartão de memória?
Sempre que tento gravar ou ler algo ele apresenta erro 0X1,0XFF
Olá, estou obtendo o seguinte erro:
SD errorCode: 0X1,0XFF
Tive o mesmo problema
ola, eu posso usar este modulo cartão sd para reproduçao de audio como o modulo mp3 WTV020-sd ?
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
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 ?
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
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!!!
Posso fazer isso usando zeners para reduzir a tensão para 3.3v?
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 !!!
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.
É possível utilizar esse cartão junto do ENC28J60, sendo que este também usa a interface SPI?
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
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.
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
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.
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
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?
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
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.
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
É possível utilizar esse Módulo Cartão SD no Arduino Mega e como seria a ligação física dos terminais???
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
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.