Utilizar um cartão SD.

article featured image

O objetivo desta aula é permitir fazer a leitura de dados, através de um sensor de pressão, e passa-los para um cartão de memória.

Estes dados poderão ser utilizados para análise e tratamento, por exemplo, através do Excel.

Para este projeto vamos precisar do seguinte material: Arduíno, BMP280, cartão SD, breadboard e 12 jumpers.

O circuito a utilizar é o seguinte:

Para terem uma noção mais precisa das ligações, elas são as seguintes:

  • BMP280 (Sensor de pressão e temperatura): VIN - 5V; GND - GND; SCL - A5; SDA - A4.
  • Cartão SD: GND - GND; +5 - 5V; CS (Chip Select) - 4; MOSI (SPI Data) - 11; SCK (Clock) - 13; MISO (SPI Data) - 12; GND - GND;

Vamos ver agora o código necessário para que o projeto funcione.

A primeira fase do projeto é fazer a leitura do sensor de pressão e temperatura.

Vai ser necessário incluir duas librarias:

  •  wire.h para ser possível a comunicação I2C. O I2C é um protocolo de barramento que permite, com os mesmos fios, ligar vários dispositivos no mesmo circuito. Tem a vantagem de reduzir o número de pinos necessários do Arduíno dado que utilizamos os meus fios para ligar 1 ou 20 dispositivos. Um dos dispositivos irá trabalhar como Master e todos os outros como Slave.

https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/SPI_three_slaves.svg/2000px-SPI_three_slaves.svg.png

O Arduíno vem com pinos próprios para este tipo de ligação I2C. No caso do Uno os pinos são sempre o 4 (SDA - Serial Data, pino que transfere os dados) e 5 (SCL - Serial Clock, cria uma temporização entre os dispositivos).

 

  • Adafruit_BMP085.h necessária para o sensor de pressão e temperatura. Havendo sensores mais atuais como o BMP180 e BMP280. No meu entender, esta libraria ainda continua dar melhor resposta aos nossos problemas.


Depois das librarias adicionadas criamos o objeto meuSensor e definimos algumas variáveis necessárias para armazenar leituras e cálculos:

No void setup() ligamos o monitor série e inicializamos o sensor:

Por último, no void loop(), lemos a temperatura em graus Celsius e a pressão. Transformamos a temperatura em Fahrenheit e imprimimos os valores obtidos no monitor série:

Estando esta parte concretizada, vamos agora pegar nestes dados e gravá-los num ficheiro no cartão de memória.

Para que o cartão de memória possa funcionar, acrescentaremos mais duas librarias:

  • SD.h libraria que vai permitir ler e escrever nos cartões SD.
  • SPI.h para a comunicação SPI (Serial Peripheral Interface), isto é, é um protocolo de dados série síncronos utilizado em microcontroladores para comunicação entre o microcontrolador e um ou mais periféricos. Este tipo de comunicações contém 4 ligações:
    • MISO (Master IN Slave OUT) - Dados do Slave para Master;
    • MOSI (Master OUT Slave IN) - Dados do Master para Slave;
    • SCK (Serial Clock) - Clock de sincronização para transmissão de dados entre o Master e Slave;
    • SS (Slave Select) - Seleciona o Slave que receberá os dados.

Em seguida, definimos a variável para o pino do Chip Select e uma outra, do tipo ficheiro, que servirá para o criar o ficheiro no cartão de memória.

No void setup() vamos acrescentar mais duas linhas: uma para indicar o pino 10 como saída (OUTPUT), este pino é reservado à libraria SD.h; uma segunda para inicializar o cartão de memória:

Para terminar o nosso projeto só falta escrever os dados num ficheiro no cartão. Deste modo, no void loop(), vamos escrever as instruções necessárias a este passo:

Os conceitos apreendidos nesta aula são importantes e aplicáveis a vários tipos de projetos como iremos ver nas próximas aulas com a utilização de GPS.

Espero que se sintam cada vez mais motivados para este tipo de aprendizagens.

Cá vos espero na próxima aula. Abraço,