Índice:
- Suprimentos
- Etapa 1: Obtendo dados de GPS
- Etapa 2: Envio de dados GPS via rádio
- Etapa 3: Armazenamento de dados usando um módulo de cartão SD
- Etapa 4: Envio e armazenamento de dados GPS
- Etapa 5: Obrigado
Vídeo: Smart Buoy [GPS, Rádio (NRF24) e um Módulo de Cartão SD]: 5 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
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
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
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
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
Etapa 5: 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:
Módulo SIM900A 2G + cartão SIM de holograma = combinação vencedora na categoria "barato sujo" ?: 6 etapas
Módulo SIM900A 2G + Holograma Cartão SIM = combinação vencedora na categoria "barata suja" ?: IoT, a palavra da moda desta década, às vezes entra até na mente de pessoas que se consideram resistentes à moda passageira, comigo entre elas. Um dia eu estava navegando no Internet e vi uma empresa da qual nunca ouvi falar (holograma) distribuindo cartões SIM
Smart Buoy [Resumo]: 8 etapas (com imagens)
Smart Buoy [Resumo]: Todos nós amamos o litoral. Como um coletivo, nós nos reunimos para passar férias, praticar esportes aquáticos ou ganhar nosso sustento. Mas a costa é uma área dinâmica à mercê das ondas. O aumento do nível do mar afeta as praias e eventos extremos poderosos, como o hurri
Módulo de cartão SD com Arduino: como ler / gravar dados: 14 etapas
Módulo de cartão SD com Arduino: Como ler / gravar dados: Visão geral O armazenamento de dados é uma das partes mais importantes de cada projeto. Existem várias maneiras de armazenar dados de acordo com o tipo e tamanho dos dados. Os cartões SD e micro SD são um dos mais práticos entre os dispositivos de armazenamento, que são usados em
Registrador de dados de temperatura e umidade do Arduino para o telefone Android com módulo de cartão SD via Bluetooth: 5 etapas
Registrador de dados de temperatura e umidade do Arduino para o telefone Android com módulo de cartão SD via Bluetooth: Olá a todos, Este é o meu primeiro Instructable de todos os tempos. Espero ajudar a comunidade de criadores, pois fui beneficiado com ele. Muitas vezes usamos sensores em nossos projetos, mas encontrando uma maneira de coletar os dados, armazená-los e transferi-los para telefones ou outros dispositivos imediatamente
Geek - Titular do cartão de crédito / cartão de visita no disco rígido de um laptop antigo: 7 etapas
Geek - Titular de cartão de crédito / cartão de visita do disco rígido de um laptop antigo: Um titular de cartão de crédito / negócio sofisticado. Tive essa ideia maluca quando o disco rígido do meu laptop morreu e basicamente ficou inútil. Eu incluí as imagens completas aqui