Taula de continguts:

Smart Buoy [GPS, ràdio (NRF24) i un mòdul de targeta SD]: 5 passos (amb imatges)
Smart Buoy [GPS, ràdio (NRF24) i un mòdul de targeta SD]: 5 passos (amb imatges)

Vídeo: Smart Buoy [GPS, ràdio (NRF24) i un mòdul de targeta SD]: 5 passos (amb imatges)

Vídeo: Smart Buoy [GPS, ràdio (NRF24) i un mòdul de targeta SD]: 5 passos (amb imatges)
Vídeo: 699 000 $ 2000 OFFSHORE 62 'Flushdeck FAST Trawler в 4K / Экспедиционный яхт-тур на сафари Explorer 2024, Desembre
Anonim
Image
Image

Aquesta sèrie Smart Buoy mostra el nostre (ambiciós) intent de construir una boia científica que pugui prendre mesures significatives sobre el mar mitjançant productes a la venda. Aquest és el tutorial dos de quatre: assegureu-vos que esteu al dia i, si necessiteu una introducció ràpida al projecte, consulteu el nostre resum.

Part 1: Mesurament d'ones i temperatura

En aquest tutorial, us mostrem com obtenir dades GPS, emmagatzemar-les en una targeta SD i enviar-les a algun lloc mitjançant la ràdio.

Vam fer això per poder fer un seguiment de la ubicació de la nostra boia per via marítima. La ràdio significa que podem veure-la de forma remota i que la targeta SD significa que, si de cas, es trenca alguna cosa i es fa un passeig, podem descarregar les dades que va recollir durant la seva excursió no planificada, si alguna vegada som capaços de recuperar-la.

Subministraments

Mòdul GPS: Amazon

Mòdul de targeta SD: Amazon

Targeta SD: Amazon

2 mòduls de ràdio X (NRF24L01 +): Amazon

2 X Arduino: Amazon

Pas 1: Obtenir dades GPS

Enviament de dades GPS mitjançant ràdio
Enviament de dades GPS mitjançant ràdio

La boia intel·ligent fa mesures del sensor mentre es troba al mar, inclosa la ubicació del GPS i la data i hora. Mireu l’esquema que mostra com configurem el circuit. El mòdul GPS es comunica mitjançant connexió en sèrie, de manera que utilitzem la biblioteca en sèrie del programari Arduino i la petita biblioteca GPS per comunicar-nos-hi. Aquestes biblioteques ho fan tot molt senzill. Us expliquem el codi …

#incloure

#include // L'objecte TinyGPS ++ TinyGPSPlus gps; // La connexió en sèrie al dispositiu GPS SoftwareSerial ss (4, 3); struct dataStruct {doble latitud; doble longitud; data llarga sense signar; molt de temps sense signar; } gpsData; configuració nul·la () {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 ("Ubicació no vàlida"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Data no vàlida"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Temps no vàlid"); }} void printResults () {Serial.print ("Ubicació:"); 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 (); }

(Mireu el vídeo d’aquest codi a

Pas 2: enviament de dades GPS per ràdio

Enviament de dades GPS mitjançant ràdio
Enviament de dades GPS mitjançant ràdio

Suposem que la boia es troba al mar fent mesures, però volem veure les dades sense mullar-nos els peus ni portar la boia a terra. Per obtenir les mesures de forma remota, fem servir un mòdul de ràdio connectat a un Arduino a banda i banda de la comunicació. En el futur, substituirem l’Arduino del receptor per un pi de gerds. La ràdio funciona de manera similar amb aquestes dues interfícies, de manera que canviar-les és bastant senzilla.

El mòdul de ràdio es comunica mitjançant SPI, que requereix algunes connexions més que I2C, però encara és molt fàcil d’utilitzar a causa de la biblioteca NRF24. Mitjançant el mòdul GPS per a les mesures del sensor, transmetem les seves dades d’un Arduino a l’altre. Connectarem el mòdul de ràdio i GPS a l’Arduino i, a l’altra banda, un Arduino amb el mòdul de ràdio. Feu una ullada a l’esquema.

Emissor

#incloure

#include #include #include #include gps TinyGPSPlus; SoftwareSerial ss (4, 3); Ràdio RF24 (8, 7); // CE, CSN struct dataStruct {doble latitud; doble longitud; data llarga sense signar; molt de temps sense signar; } gpsData; configuració nul·la () {Serial.begin (115200); ss.begin (9600); Serial.println ("Configuració de la ràdio"); // Configura el transmissor ràdio 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 ("Començant a enviar"); } 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

#incloure

#include #include RF24 radio (8, 7); // CE, CSN struct dataStruct {doble latitud; doble longitud; data llarga sense signar; molt de temps sense signar; } gpsData; configuració nul·la () {Serial.begin (115200); // Configura el 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 ("Ubicació:"); 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 ();}}

(Mireu el vídeo d’aquest codi a

Pas 3: Emmagatzematge de dades mitjançant un mòdul de targeta SD

Emmagatzematge de dades mitjançant un mòdul de targeta SD
Emmagatzematge de dades mitjançant un mòdul de targeta SD

El mòdul de ràdio és bastant fiable, però de vegades necessiteu un pla de contingència en cas que hi hagi un tall d’alimentació al costat del receptor o si la ràdio es mou fora de l’abast. El nostre pla de contingència és un mòdul de targeta SD que ens permet emmagatzemar les dades que recopilem. La quantitat de dades que es recopilen no és tan gran, de manera que fins i tot una targeta SD petita podrà emmagatzemar dades d'un dia.

#incloure

#include #include #include gps de TinyGPSPlus; SoftwareSerial ss (4, 3); struct dataStruct {doble latitud; doble longitud; data llarga sense signar; molt de temps sense signar; } gpsData; configuració nul·la () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println ("La targeta ha fallat o no està present"); tornar; } Serial.println ("targeta inicialitzada"); Fitxer dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (arxiu de dades) {arxiu de dades.println ("Latitud, longitud, data, hora"); dataFile.close (); } else {Serial.println ("nope no pot obrir el fitxer"); }} 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 ("Ubicació no vàlida"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Data no vàlida"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Temps no vàlid"); }} void printResults () {Serial.print ("Ubicació:"); 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 () {File 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 ("no hi ha fitxer de dades"); }}

(Parlem a través d’aquest codi al vídeo

Pas 4: enviament i emmagatzematge de dades GPS

Enviament i emmagatzematge de dades GPS
Enviament i emmagatzematge de dades GPS
Enviament i emmagatzematge de dades GPS
Enviament i emmagatzematge de dades GPS

Pas 5: gràcies

Gràcies!
Gràcies!

Inscriviu-vos a la nostra llista de correu!

Part 1: Mesurament d'ona i temperatura

Part 2: ràdio GPS NRF24 i targeta SD

Part 3: Programació del poder a la boia

Part 4: Desplegament de la boia

Recomanat: