Tabla de contenido:
- Suministros
- Paso 1: obtener datos de GPS
- Paso 2: Envío de datos GPS por radio
- Paso 3: almacenamiento de datos con un módulo de tarjeta SD
- Paso 4: envío y almacenamiento de datos GPS
- Paso 5: ¡Gracias
Video: Boya inteligente [GPS, radio (NRF24) y un módulo de tarjeta SD]: 5 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
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
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
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
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
Paso 5: ¡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:
Luz LED de escritorio inteligente - Iluminación inteligente con Arduino - Espacio de trabajo de Neopixels: 10 pasos (con imágenes)
Luz LED de escritorio inteligente | Iluminación inteligente con Arduino | Espacio de trabajo de Neopixels: Hoy en día pasamos mucho tiempo en casa, estudiando y trabajando virtualmente, así que ¿por qué no ampliar nuestro espacio de trabajo con un sistema de iluminación personalizado e inteligente basado en Arduino y LEDs Ws2812b? Aquí te muestro cómo construir tu Smart Luz LED de escritorio que
Boya inteligente [Resumen]: 8 pasos (con imágenes)
Smart Buoy [Resumen]: A todos nos encanta la playa. Como colectivo, acudimos en masa para las vacaciones, para disfrutar de los deportes acuáticos o para ganarnos la vida. Pero la costa es una zona dinámica a merced de las olas. El aumento del nivel del mar mordisquea las playas y los poderosos eventos extremos como hurri
Reloj despertador inteligente: un reloj despertador inteligente hecho con Raspberry Pi: 10 pasos (con imágenes)
Reloj despertador inteligente: un reloj despertador inteligente hecho con Raspberry Pi: ¿Alguna vez has querido un reloj inteligente? Si es así, ¡esta es la solución para usted! Hice Smart Alarm Clock, este es un reloj que puede cambiar la hora de la alarma de acuerdo con el sitio web. Cuando suene la alarma, habrá un sonido (zumbador) y 2 luces
Radio bidireccional NRF24 para telemetría: 9 pasos (con imágenes)
NRF24 Radio bidireccional para telemetría: Hola chicos, mi nombre es Pedro Castelani y les traigo mi primer instructable: construir una radio bidireccional con arduino para, bueno, para lo que lo necesite. dos circuitos separados que actuarán como receptor y transmisor
Cómo controlar el interruptor inteligente básico Sonoff basado en ESP8266 con un teléfono inteligente: 4 pasos (con imágenes)
Cómo controlar el interruptor inteligente básico Sonoff basado en ESP8266 con un teléfono inteligente: Sonoff es una línea de dispositivos para Smart Home desarrollada por ITEAD. Uno de los dispositivos más flexibles y económicos de esa línea es Sonoff Basic. Es un conmutador habilitado para Wi-Fi basado en un gran chip, ESP8266. Este artículo describe cómo configurar el Cl