É comum utilizar diferentes sensores com microcontroladores em aplicações embarcadas. Os microcontroladores são equipados com portas de dados paralelas e diversas interfaces seriais de comunicação de dados que permitem a interface e a comunicação com os sensores. Há momentos em que os dados obtidos dos sensores precisam ser armazenados para uso futuro. Isso pode ser apenas para registrar dados de sensores ou obter análises de alto nível. Muitos microcontroladores possuem EEPROM integrada ou integrada para armazenar dados externos, enquanto a memória flash sempre permanece reservada para armazenar o bootloader e o firmware. Essa EEPROM geralmente tem alguns kilobytes de tamanho e só pode armazenar uma quantidade limitada de dados.
Uma solução prática para este problema é armazenar os dados do sensor em cartões SD ou Micro SD. Os módulos de cartão SD e Micro SD podem ser facilmente interligados com Arduino (ou qualquer microcontrolador) através da interface SPI. Os cartões SD e Micro SD facilitam uma capacidade de armazenamento em gigabytes que é mais que suficiente para registrar dados de qualquer número de sensores ou qualquer quantidade de dados.
Neste projeto, faremos a interface de um módulo de cartão Micro SD com o Arduino e usaremos um cartão Micro SD de 8 GB para registrar dados do sensor acelerômetro ADXL345. Antes de continuar este projeto, aprenda a fazer a interface do acelerômetro ADXL345 com o Arduino. Você também pode estar interessado em trabalhar no sensor acelerômetro ADXL345.
Módulos de cartão SD e Micro SD
Os cartões SD e Micro SD são cartões de memória amplamente utilizados. Ambos são diferentes em tecnologia e origem. Os cartões SD são um pouco volumosos (24 mm x 32 mm x 2,1 mm) em comparação com os cartões Micro SD. A capacidade máxima de armazenamento é limitada a 2 GB. Os cartões SD são comumente usados em computadores portáteis, câmeras digitais e babás eletrônicas. Os cartões Micro SD são menores (15 mm x 11 mm x 1 mm). A capacidade máxima de armazenamento é de 16 GB. Os cartões Micro SD são comumente usados em telefones celulares, microcomputadores, drones, câmeras de painel, etc.
Os leitores de cartão SD e Micro SD geralmente possuem uma interface SPI para comunicação de dados com um microcontrolador/microcomputador. Exceto que o leitor de cartão SD lê/grava um cartão SD e o leitor de cartão Micro SD lê/grava um cartão Micro SD, ambos os tipos de módulos têm interface com o Arduino (ou qualquer outro microcontrolador/microcomputador) de forma semelhante, e a mesma biblioteca no Arduino é usado para ler ou escrever em ambos os tipos de módulos.
Biblioteca SD
O Arduino pode se comunicar com leitores de cartão SD e Micro SD usando sua biblioteca SD integrada, já que ambos os módulos usam a interface SPI para comunicação de dados. A biblioteca também suporta sistemas de arquivos FAT16 e FAT32 em cartões SD/Micro SD, mas os nomes dos arquivos devem estar no formato 8.3. Apenas um ponto é permitido, embora os nomes de arquivos possam incluir PATHs separados por barras. A biblioteca fornece os seguintes métodos para trabalhar com cartões SD/Micro SD.
SD.begin : Este método inicializa o cartão SD/Micro SD. Leva como parâmetro o pino conectado ao pino SS do leitor.
SD.existe : Este método testa a existência de um arquivo ou diretório no cartão SD/Micro SD. Leva o nome do arquivo como parâmetro.
SD.mkdir : Este método cria um diretório no cartão SD/Micro SD. Leva o nome do arquivo, incluindo o caminho, como parâmetro.
SD.rmdir : Este método remove um diretório do cartão SD/Micro SD. Leva o nome do arquivo, incluindo o caminho, como parâmetro.
SD.aberto : Este método abre um arquivo para leitura ou gravação. São necessários dois parâmetros: nome de arquivo e modo. O modo determina se o arquivo deve ser lido ou gravado. O arquivo será aberto no modo de leitura por padrão se o modo não for especificado. Se o arquivo for aberto para gravação, se ainda não existir, ele será criado pelo nome de arquivo e caminho especificados.
SD.remove : Este método remove um arquivo do cartão SD/Micro SD. Leva o nome do arquivo, incluindo o caminho, como parâmetro.
Muitos métodos da classe de arquivo integrada também são usados durante a leitura ou gravação em cartões SD/Micro SD. Algumas das técnicas úteis da classe de arquivo integrada são as seguintes.
Nome do arquivo : Este método retorna o nome do arquivo.
Arquivo.disponível : Este método verifica se existe um arquivo com determinado nome.
Arquivo.read : Este método lê o conteúdo do arquivo.
Arquivo.write : este método grava dados no arquivo.
Tamanho do arquivo : Este método retorna o tamanho do arquivo em bytes.
Arquivo.print : Este método imprime dados no arquivo.
Arquivo.println : este método imprime dados no arquivo seguido por um retorno de carro e uma nova linha.
Arquivo.fechar : Este método fecha o arquivo e garante que todos os dados gravados nele sejam salvos fisicamente no cartão SD/Micro SD.
Observe que até que o método file.close seja chamado, os dados gravados em um arquivo não serão salvos. Portanto, um arquivo deve ser fechado após a gravação de dados nele. Caso contrário, os dados registrados serão perdidos.
Interface do módulo de cartão SD/Micro SD com Arduino
O cartão SD/Micro SD faz interface com o Arduino por meio da interface SPI. O módulo possui seis pinos – VCC, GND, MISO, MOSI, SCK e CS. As portas SPI no Arduino UNO são mostradas na imagem abaixo.
Observe que o pino SS do leitor de cartão SD/Micro SD deve ser conectado ao pino 10 do Arduino UNO.
Gravando dados em cartão SD/Micro SD com Arduino
Faça a interface do leitor de cartão SD/Micro SD com o Arduino UNO conforme descrito acima. A gravação de dados no cartão SD/Micro SD envolve o uso de SD.begin , SD.mkdir (se um novo diretório for criado para o arquivo de dados), SD.open , File.write , File.print , métodos File.println e File.close . O código de exemplo a seguir grava uma lista de sites pertencentes à rede de engenharia eletrônica EEWORLDONLINE em um arquivo de texto. Observe que os dados são gravados no cartão SD/Micro SD na função setup porque devem ser gravados apenas uma vez neste caso. Se fossem dados do sensor com carimbo de data/hora, a gravação no cartão SD/Micro SD teria que ser feita na função loop . Além disso, observe que a classe de arquivo só precisa instanciar um objeto de arquivo.
O resultado do código de exemplo acima é mostrado abaixo.
Lendo dados do cartão SD/Micro SD com Arduino
A leitura de dados do cartão SD/Micro SD envolve o uso dos métodos SD.begin , SD.open , File.available e File.read . Observe que o método File.read lê uma única linha por vez. Precisa ser repetido até a leitura do número desejado de linhas ou até o final do arquivo.
O resultado do código de exemplo acima é mostrado abaixo.
Registrando dados do sensor no cartão SD com Arduino
Agora equipados com o conhecimento de registro de dados em cartão SD/Micro SD usando um leitor de cartão, podemos registrar dados do sensor para uso futuro. Vamos conectar o sensor acelerômetro ADXL345 com o Arduino e registrar dez leituras consecutivas de aceleração nos eixos x, y e z em 500 milissegundos.
Componentes necessários
- Arduino UNO x1
- Leitor de cartão SD/Micro SD x1
- Cartão SD/Micro SD x1
- Sensor acelerômetro ADXL345 x1
- Conectando fios/fios de jumper
- Tábua de ensaio
Conexões de circuito
O leitor de cartão SD ou Micro SD fará interface com o Arduino via porta SPI. As conexões do circuito entre o leitor de cartão SD/Micro SD e o Arduino estão resumidas abaixo.
Arduino UNO | Leitor de cartão SD/MicroSD |
5V de saída | CCV |
GND | GND |
13 | SCK |
12 | MISSÔ |
11 | MOSI |
10 | SS |
O acelerômetro ADXL345 faz interface com o Arduino por meio de uma porta I2C. As conexões do circuito entre ADXL345 e Arduino são mostradas na imagem abaixo.
O circuito final se parece com o mostrado na imagem abaixo.
Esboço do Arduino
Como funciona
O Arduino detecta a aceleração ao longo dos eixos x, y e z com a ajuda do sensor acelerômetro ADXL345. O código é executado uma vez e lê o sensor dez vezes em intervalos de 500 milissegundos. As leituras são gravadas em um arquivo de texto em um cartão Micro SD e salvas.
Resultado
O vídeo a seguir mostra o Arduino registrando dez leituras consecutivas do ADXL345 em um cartão Micro SD de 8 GB.
O vídeo a seguir mostra a verificação dos dados registrados no cartão micro SD.