Tabla de contenido:

Boya inteligente [GPS, radio (NRF24) y un módulo de tarjeta SD]: 5 pasos (con imágenes)
Boya inteligente [GPS, radio (NRF24) y un módulo de tarjeta SD]: 5 pasos (con imágenes)

Video: Boya inteligente [GPS, radio (NRF24) y un módulo de tarjeta SD]: 5 pasos (con imágenes)

Video: Boya inteligente [GPS, radio (NRF24) y un módulo de tarjeta SD]: 5 pasos (con imágenes)
Video: Morgenstern Bademantel Herren Multifaser Video 2024, Noviembre
Anonim
Image
Image

Esta serie de Smart Buoy muestra nuestro (ambicioso) intento de construir una boya científica que pueda tomar medidas significativas sobre el mar utilizando productos listos para usar. Este es el tutorial dos de cuatro: asegúrese de estar actualizado y, si necesita una rápida introducción al proyecto, consulte nuestro resumen.

Parte 1: Realización de mediciones de temperatura y olas

En este tutorial, le mostramos cómo obtener datos de GPS, almacenarlos en una tarjeta SD y enviarlos a algún lugar usando la radio.

Hicimos esto para poder realizar un seguimiento de la ubicación de nuestra boya marítima. La radio significa que podemos verlo de forma remota y la tarjeta SD significa que, en caso de que algo se rompa y se pierda, podemos descargar los datos que recopiló durante su excursión no planificada, ¡si alguna vez podemos recuperarlos!

Suministros

Módulo GPS - Amazon

Módulo de tarjeta SD - Amazon

Tarjeta SD - Amazon

2 X módulos de radio (NRF24L01 +) - Amazon

2 X Arduino - Amazon

Paso 1: obtener datos de GPS

Envío de datos GPS por radio
Envío de datos GPS por radio

La boya inteligente realiza mediciones de sensor mientras se encuentra en el mar, incluida la ubicación GPS y la fecha y hora. Eche un vistazo al esquema que muestra cómo configuramos el circuito. El módulo GPS se comunica a través de una conexión en serie, por lo que estamos utilizando la biblioteca en serie del software Arduino, así como la pequeña biblioteca de GPS para comunicarnos con él. Estas bibliotecas hacen que todo sea súper simple. Veamos el código …

#incluir

#include // El objeto TinyGPS ++ TinyGPSPlus gps; // La conexión en serie al dispositivo GPS SoftwareSerial ss (4, 3); struct dataStruct {doble latitud; doble longitud; fecha larga sin firmar; sin firmar desde hace mucho tiempo; } gpsData; configuración vacía () {Serial.begin (115200); ss.begin (9600); } bucle vacío () {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 ("Ubicación no válida"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Fecha no válida"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Hora no válida"); }} void printResults () {Serial.print ("Ubicación:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Fecha:"); Serial.print (gpsData.date); Serial.print ("Hora:"); Serial.print (gpsData.time); Serial.println (); }

(Vea el video de este código en

Paso 2: Envío de datos GPS por radio

Envío de datos GPS por radio
Envío de datos GPS por radio

Supongamos que la boya está en el mar tomando medidas, pero queremos ver los datos sin mojarnos los pies ni llevar la boya a tierra. Para obtener las medidas de forma remota, usamos un módulo de radio conectado a un Arduino en ambos lados de la comunicación. En el futuro, reemplazaremos el Arduino del lado del receptor con un raspberry pi. La radio funciona de manera similar con estas dos interfaces, por lo que intercambiarlas es bastante sencillo.

El módulo de radio se comunica mediante SPI, que requiere algunas conexiones más que I2C, pero sigue siendo realmente fácil de usar gracias a la biblioteca NRF24. Usando el módulo GPS para las mediciones del sensor, transmitimos sus datos de un Arduino a otro. Vamos a conectar el módulo de radio y GPS al Arduino y, en el otro lado, un Arduino con el módulo de radio; mira el esquema.

Transmisor

#incluir

#incluir #incluir #incluir #incluir TinyGPSPlus gps; SoftwareSerial ss (4, 3); Radio RF24 (8, 7); // CE, CSN struct dataStruct {doble latitud; doble longitud; fecha larga sin firmar; sin firmar desde hace mucho tiempo; } gpsData; configuración vacía () {Serial.begin (115200); ss.begin (9600); Serial.println ("Configuración de radio"); // Configurar el transmisor radio 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 ("Comenzando a enviar"); } bucle vacío () {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 (); } más {gpsData.date = 0; } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {gpsData.time = 0; }}

RECEPTOR

#incluir

#incluye #incluye radio RF24 (8, 7); // CE, CSN struct dataStruct {doble latitud; doble longitud; fecha larga sin firmar; sin firmar desde hace mucho tiempo; } gpsData; configuración vacía () {Serial.begin (115200); // Configurar el receptor de radio radio.begin (); radio.openReadingPipe (1, 0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.startListening (); radio.enableDynamicPayloads (); radio.powerUp (); } bucle vacío () {if (radio.available ()) {radio.read (& gpsData, sizeof (gpsData)); Serial.print ("Ubicación:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Fecha:"); Serial.print (gpsData.date); Serial.print ("Hora:"); Serial.print (gpsData.time); Serial.println ();}}

(Vea el video de este código en

Paso 3: almacenamiento de datos con un módulo de tarjeta SD

Almacenamiento de datos con un módulo de tarjeta SD
Almacenamiento de datos con un módulo de tarjeta SD

El módulo de radio es bastante confiable, pero a veces necesita un plan de contingencia en caso de que haya un corte de energía en el lado del receptor o si la radio se sale del alcance. Nuestro plan de contingencia es un módulo de tarjeta SD que nos permite almacenar los datos que recopilamos. La cantidad de datos que se recopilan no es tan grande, por lo que incluso una pequeña tarjeta SD podrá almacenar fácilmente los datos de un día.

#incluir

#incluya #incluya #incluya TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {doble latitud; doble longitud; fecha larga sin firmar; sin firmar desde hace mucho tiempo; } gpsData; configuración vacía () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println ("La tarjeta falló o no está presente"); regreso; } Serial.println ("tarjeta inicializada"); Archivo dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (archivo de datos) {archivo de datos.println ("Latitud, longitud, fecha, hora"); dataFile.close (); } else {Serial.println ("no, no se puede abrir el archivo"); }} bucle vacío () {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 ("Ubicación no válida"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Fecha no válida"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Hora no válida"); }} void printResults () {Serial.print ("Ubicación:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Fecha:"); Serial.print (gpsData.date); Serial.print ("Hora:"); Serial.print (gpsData.time); Serial.println (); } void saveInfo () {Archivo dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (archivo de datos) {archivo de datos.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 ("no, no hay archivo de datos"); }}

(Hablamos de este código en el video

Paso 4: envío y almacenamiento de datos GPS

Envío y almacenamiento de datos GPS
Envío y almacenamiento de datos GPS
Envío y almacenamiento de datos GPS
Envío y almacenamiento de datos GPS

Paso 5: ¡Gracias

¡Gracias!
¡Gracias!

¡Suscríbase a nuestra lista de correo!

Parte 1: Medición de olas y temperatura

Parte 2: Radio GPS NRF24 y tarjeta SD

Parte 3: Programación de energía para la boya

Parte 4: Despliegue de la boya

Recomendado: