Spisu treści:

Smart Booy [GPS, radio (NRF24) i moduł karty SD]: 5 kroków (ze zdjęciami)
Smart Booy [GPS, radio (NRF24) i moduł karty SD]: 5 kroków (ze zdjęciami)

Wideo: Smart Booy [GPS, radio (NRF24) i moduł karty SD]: 5 kroków (ze zdjęciami)

Wideo: Smart Booy [GPS, radio (NRF24) i moduł karty SD]: 5 kroków (ze zdjęciami)
Wideo: When you switch your petrol scooter with an electric one 😂 2024, Listopad
Anonim
Image
Image

Ta seria Smart Buoy przedstawia naszą (ambitną) próbę zbudowania naukowej boi, która może dokonywać znaczących pomiarów morza przy użyciu gotowych produktów. To jest samouczek drugi z czterech – upewnij się, że jesteś na bieżąco, a jeśli potrzebujesz szybkiego wprowadzenia do projektu, zapoznaj się z naszym podsumowaniem.

Część 1: Wykonywanie pomiarów fal i temperatury

W tym samouczku pokażemy, jak uzyskać dane GPS, zapisać je na karcie SD i wysłać gdzieś za pomocą radia.

Zrobiliśmy to, abyśmy mogli śledzić położenie naszej morskiej boi. Radio oznacza, że możemy oglądać go zdalnie, a karta SD oznacza, że jeśli coś się zepsuje i pójdzie na wędrówkę, możemy pobrać dane zebrane podczas nieplanowanej wycieczki - jeśli kiedykolwiek uda nam się je odzyskać!

Kieszonkowe dzieci

Moduł GPS - Amazon

Moduł karty SD - Amazon

Karta SD - Amazon

2 X moduły radiowe (NRF24L01+) - Amazon

2 X Arduino - Amazonka

Krok 1: Pobieranie danych GPS

Wysyłanie danych GPS przez radio
Wysyłanie danych GPS przez radio

Inteligentna boja wykonuje pomiary z czujnika, gdy znajduje się na morzu, w tym lokalizację GPS i datę. Spójrz na schemat, który pokazuje, jak ustawiliśmy obwód. Moduł GPS komunikuje się przez połączenie szeregowe, więc do komunikacji z nim wykorzystujemy bibliotekę szeregową oprogramowania Arduino, a także niewielką bibliotekę GPS. Te biblioteki sprawiają, że wszystko jest bardzo proste. Przejdźmy przez kod…

#włączać

#include // Obiekt TinyGPS++ TinyGPSPlus gps; // Połączenie szeregowe z urządzeniem GPS SoftwareSerial ss(4, 3); struct dataStruct{ podwójna szerokość geograficzna; podwójna długość geograficzna; niepodpisana długa data; niepodpisany długi czas; } dane gps; void setup(){ Serial.begin(115200); ss.początek(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("Nieprawidłowa lokalizacja"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Nieprawidłowa data"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Nieprawidłowy czas"); } } void printResults(){ Serial.print("Lokalizacja: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Data: "); Serial.print(gpsData.data); Serial.print(" Czas: "); Serial.print(gpsData.time); Serial.println(); }

(Sprawdź wideo dla tego kodu na

Krok 2: Wysyłanie danych GPS przez radio

Wysyłanie danych GPS przez radio
Wysyłanie danych GPS przez radio

Załóżmy, że boja znajduje się w morzu i wykonuje pomiary, ale chcemy zobaczyć dane bez zamoczenia stóp lub wynoszenia boi na brzeg. Aby uzyskać pomiary zdalnie, używamy modułu radiowego podłączonego do Arduino po obu stronach komunikacji. W przyszłości Arduino po stronie odbiornika zastąpimy malinowym pi. Radio działa podobnie z obydwoma tymi interfejsami, więc ich zamiana jest dość prosta.

Moduł radiowy komunikuje się za pomocą SPI, co wymaga kilku połączeń więcej niż I2C, ale nadal jest bardzo łatwy w użyciu ze względu na bibliotekę NRF24. Wykorzystując moduł GPS do pomiarów czujnika, przekazujemy jego dane z jednego Arduino do drugiego. Podłączamy moduł GPS i radiowy do Arduino, a z drugiej strony Arduino z modułem radiowym - spójrz na schemat.

Nadajnik

#włączać

#include #include #include #include TinyGPSPlus gps; Oprogramowanie Serial ss(4, 3); radio RF24 (8, 7); // CE, CSN struct dataStruct{ double latitude; podwójna długość geograficzna; niepodpisana długa data; niepodpisany długi czas; } dane gps; void setup() { Serial.begin(115200); ss.początek(9600); Serial.println("Konfigurowanie radia"); // Skonfiguruj nadajnik radiowy radio.begin(); radio.openWritingPipe(0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); radio.stopSłuchanie(); radio.enableDynamicPayloads(); radio.powerUp(); Serial.println("Rozpoczęcie wysyłania"); } 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.szerokość = 0.0; } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ gpsData.data = 0; } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ gpsData.time = 0; } }

ODBIORCA

#włączać

#include #include RF24 radio(8, 7); // CE, CSN struct dataStruct{ double latitude; podwójna długość geograficzna; niepodpisana długa data; niepodpisany długi czas; } dane gps; void setup() { Serial.begin(115200); // Konfiguracja odbiornika radiowego radio.begin(); radio.openReadingPipe(1, 0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); radio.startNasłuch(); radio.enableDynamicPayloads(); radio.powerUp(); } void loop() { if (radio.available()) { radio.read(&gpsData, sizeof(gpsData)); Serial.print("Lokalizacja: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Data: "); Serial.print(gpsData.data); Serial.print(" Czas: "); Serial.print(gpsData.time); Serial.println();} }

(Sprawdź wideo dla tego kodu na

Krok 3: Przechowywanie danych za pomocą modułu karty SD

Przechowywanie danych za pomocą modułu karty SD
Przechowywanie danych za pomocą modułu karty SD

Moduł radiowy jest dość niezawodny, ale czasami potrzebny jest plan awaryjny na wypadek awarii zasilania po stronie odbiornika lub gdy radio znajdzie się poza zasięgiem. Nasz plan awaryjny to moduł karty SD, który pozwala nam przechowywać gromadzone dane. Ilość zbieranych danych nie jest tak duża, więc nawet niewielka karta SD z łatwością będzie w stanie przechowywać dane z całego dnia.

#włączać

#include #include #include TinyGPSPlus gps; Oprogramowanie Serial ss(4, 3); struct dataStruct{ podwójna szerokość geograficzna; podwójna długość geograficzna; niepodpisana długa data; niepodpisany długi czas; } dane gps; void setup() { Serial.begin(115200); ss.początek(9600); if (!SD.begin(5)) { Serial.println("Karta nie powiodła się lub nie ma"); powrót; } Serial.println("karta zainicjowana."); Plik dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.println("Szerokość, długość, data, godzina"); plik_danych.zamknij(); } else{ Serial.println("nie można otworzyć pliku"); } } void loop() { while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printResults(); zapiszInfo(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } else{ Serial.println("Nieprawidłowa lokalizacja"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Nieprawidłowa data"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Nieprawidłowy czas"); } } void printResults(){ Serial.print("Lokalizacja: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Data: "); Serial.print(gpsData.data); Serial.print(" Czas: "); Serial.print(gpsData.time); Serial.println(); } void saveInfo(){ Plik 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.data); dataFile.print(", "); dataFile.println(gpsData.time); plik_danych.zamknij(); } else{ Serial.println("nie ma pliku danych"); } }

(Rozmawiamy o tym kodzie w filmie

Krok 4: Wysyłanie i przechowywanie danych GPS

Wysyłanie i przechowywanie danych GPS
Wysyłanie i przechowywanie danych GPS
Wysyłanie i przechowywanie danych GPS
Wysyłanie i przechowywanie danych GPS

Krok 5: Dzięki

Dziękuję!
Dziękuję!

Zapisz się na naszą listę mailingową!

Część 1: Dokonywanie pomiaru fali i temperatury

Część 2: Radio GPS NRF24 i karta SD

Część 3: Planowanie zasilania boi

Część 4: Rozmieszczanie boi

Zalecana: