Índice:

Smart Buoy [GPS, Rádio (NRF24) e um Módulo de Cartão SD]: 5 etapas (com imagens)
Smart Buoy [GPS, Rádio (NRF24) e um Módulo de Cartão SD]: 5 etapas (com imagens)

Vídeo: Smart Buoy [GPS, Rádio (NRF24) e um Módulo de Cartão SD]: 5 etapas (com imagens)

Vídeo: Smart Buoy [GPS, Rádio (NRF24) e um Módulo de Cartão SD]: 5 etapas (com imagens)
Vídeo: buoy arduino test 2024, Novembro
Anonim
Image
Image

Esta série Smart Buoy mostra nossa (ambiciosa) tentativa de construir uma bóia científica que pode fazer medições significativas sobre o mar usando produtos prontos para uso. Este é o tutorial dois de quatro - certifique-se de estar atualizado e, se precisar de uma introdução rápida ao projeto, verifique nosso resumo.

Parte 1: Fazendo medições de ondas e temperatura

Neste tutorial, mostramos como obter dados GPS, armazená-los em um cartão SD e enviá-los para algum lugar usando o rádio.

Fizemos isso para rastrear a localização de nossa Boia marítima. O rádio significa que podemos assisti-lo remotamente e o cartão SD significa que, na eventualidade de algo quebrar e sair para um passeio, podemos baixar os dados que coletou durante sua excursão não planejada - se conseguirmos recuperá-los!

Suprimentos

Módulo GPS - Amazon

Módulo de cartão SD - Amazon

Cartão SD - Amazon

2 módulos de rádio X (NRF24L01 +) - Amazon

2 X Arduino - Amazon

Etapa 1: Obtendo dados de GPS

Envio de dados GPS via rádio
Envio de dados GPS via rádio

A bóia inteligente faz medições por sensor enquanto está no mar, incluindo localização por GPS e data e hora. Dê uma olhada no esquema que mostra como configuramos o circuito. O módulo GPS se comunica via conexão serial, então estamos usando a biblioteca serial do software Arduino, bem como a pequena biblioteca GPS para nos comunicarmos com ele. Essas bibliotecas tornam tudo muito simples. Vamos guiá-lo pelo código …

#incluir

#include // O objeto TinyGPS ++ TinyGPSPlus gps; // A conexão serial com o dispositivo GPS SoftwareSerial ss (4, 3); struct dataStruct {latitude dupla; longitude dupla; data longa não assinada; muito tempo sem sinal; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); } void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printResults (); }}} void getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Local inválido"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Data inválida"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Hora inválida"); }} void printResults () {Serial.print ("Local:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Data:"); Serial.print (gpsData.date); Serial.print ("Hora:"); Serial.print (gpsData.time); Serial.println (); }

(Confira o vídeo para este código em

Etapa 2: Envio de dados GPS via rádio

Envio de dados GPS via rádio
Envio de dados GPS via rádio

Suponha que a bóia esteja no mar fazendo medições, mas queremos ver os dados sem molhar os pés ou trazer a bóia para a costa. Para obter as medições remotamente, estamos usando um módulo de rádio conectado a um Arduino em ambos os lados da comunicação. No futuro, substituiremos o Arduino do lado do receptor por um framboesa pi. O rádio funciona de maneira semelhante com essas duas interfaces, portanto, trocá-las é bastante simples.

O módulo de rádio se comunica usando SPI, que requer algumas conexões a mais do que I2C, mas ainda é muito fácil de usar por causa da biblioteca NRF24. Usando o módulo GPS para as medições do sensor, transmitimos seus dados de um Arduino para o outro. Vamos conectar o GPS e o módulo de rádio ao Arduino e, do outro lado, um Arduino com o módulo de rádio - dê uma olhada no esquema.

Transmissor

#incluir

#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); Rádio RF24 (8, 7); // CE, CSN struct dataStruct {double latitude; longitude dupla; data longa não assinada; muito tempo sem sinal; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); Serial.println ("Configurando o rádio"); // Configurar rádio transmissor radio.begin (); radio.openWritingPipe (0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.stopListening (); radio.enableDynamicPayloads (); radio.powerUp (); Serial.println ("Iniciando o envio"); } void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); radio.write (& gpsData, sizeof (gpsData)); }}} void getInfo () {if (gps.location.isValid ()) {gpsData.longitude = gps.location.lng (); gpsData.latitude = gps.location.lat (); } else {gpsData.longitude = 0.0; gpsData.latitude = 0,0; } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {gpsData.date = 0; } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {gpsData.time = 0; }}

RECEPTOR

#incluir

#include #include rádio RF24 (8, 7); // CE, CSN struct dataStruct {double latitude; longitude dupla; data longa não assinada; muito tempo sem sinal; } gpsData; void setup () {Serial.begin (115200); // Configura o receptor de rádio radio.begin (); radio.openReadingPipe (1, 0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.startListening (); radio.enableDynamicPayloads (); radio.powerUp (); } void loop () {if (radio.available ()) {radio.read (& gpsData, sizeof (gpsData)); Serial.print ("Local:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Data:"); Serial.print (gpsData.date); Serial.print ("Hora:"); Serial.print (gpsData.time); Serial.println ();}}

(Confira o vídeo para este código em

Etapa 3: Armazenamento de dados usando um módulo de cartão SD

Armazenamento de dados usando um módulo de cartão SD
Armazenamento de dados usando um módulo de cartão SD

O módulo de rádio é bastante confiável, mas às vezes você precisa de um plano de contingência caso haja um corte de energia no lado do receptor ou se o rádio sair de alcance. Nosso plano de contingência é um módulo de cartão SD que nos permite armazenar os dados que coletamos. A quantidade de dados coletados não é tão grande, então mesmo um pequeno cartão SD será capaz de armazenar facilmente o equivalente a um dia de dados.

#incluir

#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {latitude dupla; longitude dupla; data longa não assinada; muito tempo sem sinal; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println ("O cartão falhou ou não está presente"); Retorna; } Serial.println ("cartão inicializado."); Arquivo dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Latitude, Longitude, Data, Hora"); dataFile.close (); } else {Serial.println ("não é possível abrir o arquivo"); }} void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printResults (); saveInfo (); }}} void getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Local inválido"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Data inválida"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Hora inválida"); }} void printResults () {Serial.print ("Local:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Data:"); Serial.print (gpsData.date); Serial.print ("Hora:"); Serial.print (gpsData.time); Serial.println (); } void saveInfo () {Arquivo dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.print (gpsData.latitude); dataFile.print (","); dataFile.print (gpsData.longitude); dataFile.print (","); dataFile.print (gpsData.date); dataFile.print (","); dataFile.println (gpsData.time); dataFile.close (); } else {Serial.println ("não há arquivo de dados"); }}

(Falamos sobre esse código no vídeo

Etapa 4: Envio e armazenamento de dados GPS

Envio e armazenamento de dados GPS
Envio e armazenamento de dados GPS
Envio e armazenamento de dados GPS
Envio e armazenamento de dados GPS

Etapa 5: Obrigado

Obrigado!
Obrigado!

Inscreva-se na nossa lista de discussão!

Parte 1: Fazendo Onda e Medição de Temperatura

Parte 2: Rádio GPS NRF24 e cartão SD

Parte 3: Programação de energia para a bóia

Parte 4: Implantando a bóia

Recomendado: