Isi kandungan:

Smart Buoy [GPS, Radio (NRF24) dan Modul Kad SD]: 5 Langkah (dengan Gambar)
Smart Buoy [GPS, Radio (NRF24) dan Modul Kad SD]: 5 Langkah (dengan Gambar)

Video: Smart Buoy [GPS, Radio (NRF24) dan Modul Kad SD]: 5 Langkah (dengan Gambar)

Video: Smart Buoy [GPS, Radio (NRF24) dan Modul Kad SD]: 5 Langkah (dengan Gambar)
Video: Smart Buoy Final Project 2024, November
Anonim
Image
Image

Siri Smart Buoy ini melakarkan percubaan kami (bercita-cita tinggi) untuk membina pelampung saintifik yang dapat melakukan pengukuran yang bermakna tentang laut menggunakan produk luar rak. Ini adalah tutorial dua daripada empat - pastikan anda terkini, dan jika anda memerlukan pengenalan yang cepat untuk projek ini, lihat ringkasan kami.

Bahagian 1: Membuat pengukuran gelombang dan suhu

Dalam tutorial ini, kami menunjukkan kepada anda cara mendapatkan data GPS, menyimpannya pada kad SD dan mengirimkannya ke suatu tempat menggunakan radio.

Kami melakukan ini supaya kami dapat menjejaki lokasi Pelabuhan laut kami. Radio bermaksud bahawa kita dapat menontonnya dari jarak jauh dan kad SD bermaksud sekiranya berlaku sesuatu yang rosak dan berjalan-jalan, kita boleh memuat turun data yang dikumpulkannya semasa lawatannya yang tidak dirancang - jika kita dapat mengambilnya!

Bekalan

Modul GPS - Amazon

Modul kad SD - Amazon

Kad SD - Amazon

2 modul Radio X (NRF24L01 +) - Amazon

2 X Arduino - Amazon

Langkah 1: Mendapatkan Data GPS

Menghantar Data GPS Melalui Radio
Menghantar Data GPS Melalui Radio

Pelampung pintar membuat pengukuran sensor ketika berada di laut, termasuk lokasi GPS dan waktu data. Lihat skema yang menunjukkan bagaimana kita mengatur litar. Modul GPS berkomunikasi melalui sambungan bersiri, jadi kami menggunakan perpustakaan bersiri perisian Arduino serta perpustakaan GPS kecil untuk berkomunikasi dengannya. Perpustakaan ini menjadikan semuanya sangat sederhana. Mari bawa anda melalui kod …

#sertakan

#include // Objek TinyGPS ++ TinyGPSPlus gps; // Sambungan bersiri ke peranti GPS SoftwareSerial ss (4, 3); struct dataStruct {dua lintang; bujur berganda; tarikh panjang yang tidak ditandatangani; lama tidak ditandatangani; } gpsData; persediaan tidak sah () {Serial.begin (115200); ss.begin (9600); } gelung void () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printResults (); }}} batal getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } lain {Serial.println ("Lokasi tidak sah"); } jika (gps.date.isValid ()) {gpsData.date = gps.date.value (); } lain {Serial.println ("Tarikh tidak sah"); } jika (gps.time.isValid ()) {gpsData.time = gps.time.value (); } lain {Serial.println ("Masa tidak sah"); }} batal printResults () {Serial.print ("Lokasi:"); Serial.print (gpsData.latitude, 6); Cetakan bersiri (","); Serial.print (gpsData.longitude, 6); Cetakan bersiri ("Tarikh:"); Serial.print (gpsData.date); Serial.print ("Masa:"); Serial.print (gpsData.time); Bersiri.println (); }

(Lihat video untuk kod ini di

Langkah 2: Menghantar Data GPS Melalui Radio

Menghantar Data GPS Melalui Radio
Menghantar Data GPS Melalui Radio

Katakan pelampung di laut mengambil ukuran, tetapi kami ingin melihat data tanpa kaki basah atau membawa pelampung ke darat. Untuk mendapatkan pengukuran dari jarak jauh, kami menggunakan modul radio yang disambungkan ke Arduino di kedua sisi komunikasi. Pada masa akan datang, kami akan menggantikan Arduino sisi penerima dengan pi raspberry. Radio berfungsi sama dengan kedua-dua antara muka ini sehingga menukarnya cukup mudah.

Modul radio berkomunikasi menggunakan SPI, yang memerlukan lebih banyak sambungan daripada I2C tetapi masih sangat mudah digunakan kerana perpustakaan NRF24. Dengan menggunakan modul GPS untuk pengukuran sensor, kami mengirimkan datanya dari satu Arduino ke yang lain. Kami akan menghubungkan modul GPS dan radio ke Arduino dan di sisi lain Arduino dengan modul radio - lihat skema.

Pemancar

#sertakan

#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); Radio RF24 (8, 7); // CE, CSN struct dataStruct {double latitude; bujur berganda; tarikh panjang yang tidak ditandatangani; lama tidak ditandatangani; } gpsData; persediaan tidak sah () {Serial.begin (115200); ss.begin (9600); Serial.println ("Menyiapkan radio"); // Siapkan radio radio pemancar. Mulakan (); radio.openWritingPipe (0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.stopListening (); radio.enableDynamicPayloads (); radio.powerUp (); Serial.println ("Mula menghantar"); } gelung void () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); radio.write (& gpsData, sizeof (gpsData)); }}} batal getInfo () {if (gps.location.isValid ()) {gpsData.longitude = gps.location.lng (); gpsData.latitude = gps.location.lat (); } lain {gpsData.longitude = 0.0; gpsData.latitude = 0.0; } jika (gps.date.isValid ()) {gpsData.date = gps.date.value (); } lain {gpsData.date = 0; } jika (gps.time.isValid ()) {gpsData.time = gps.time.value (); } lain {gpsData.time = 0; }}

PENERIMA

#sertakan

#masuk #masuk radio RF24 (8, 7); // CE, CSN struct dataStruct {double latitude; bujur berganda; tarikh panjang yang tidak ditandatangani; lama tidak ditandatangani; } gpsData; persediaan tidak sah () {Serial.begin (115200); // Siapkan radio radio penerima. Mulakan (); radio.openReadingPipe (1, 0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.startListening (); radio.enableDynamicPayloads (); radio.powerUp (); } gelung void () {if (radio.available ()) {radio.read (& gpsData, sizeof (gpsData)); Serial.print ("Lokasi:"); Serial.print (gpsData.latitude, 6); Cetakan bersiri (","); Serial.print (gpsData.longitude, 6); Cetakan bersiri ("Tarikh:"); Serial.print (gpsData.date); Serial.print ("Masa:"); Serial.print (gpsData.time); Bersiri.println ();}}

(Lihat video untuk kod ini di

Langkah 3: Menyimpan Data Menggunakan Modul Kad SD

Menyimpan Data Menggunakan Modul Kad SD
Menyimpan Data Menggunakan Modul Kad SD

Modul radio cukup dipercayai, tetapi kadang-kadang anda memerlukan rancangan luar jangka sekiranya berlaku pemotongan kuasa di sisi penerima atau jika radio bergerak di luar jangkauan. Pelan luar jangkaan kami adalah modul kad SD yang membolehkan kami menyimpan data yang kami kumpulkan. Kuantiti data yang dikumpulkan tidak begitu besar, malah kad SD kecil akan dapat menyimpan data bernilai sehari dengan mudah.

#sertakan

#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {dua lintang; bujur berganda; tarikh panjang yang tidak ditandatangani; lama tidak ditandatangani; } gpsData; persediaan tidak sah () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println ("Kad gagal, atau tidak hadir"); kembali; } Serial.println ("kad dimulakan."); Data failFile = SD.open ("gps_data.csv", FILE_WRITE); jika (dataFile) {dataFile.println ("Lintang, Bujur, Tarikh, Masa"); dataFile.close (); } lain {Serial.println ("nope tidak dapat membuka fail"); }} gelung void () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printResults (); simpanInfo (); }}} batal getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } lain {Serial.println ("Lokasi tidak sah"); } jika (gps.date.isValid ()) {gpsData.date = gps.date.value (); } lain {Serial.println ("Tarikh tidak sah"); } jika (gps.time.isValid ()) {gpsData.time = gps.time.value (); } lain {Serial.println ("Masa tidak sah"); }} batal printResults () {Serial.print ("Lokasi:"); Serial.print (gpsData.latitude, 6); Cetakan bersiri (","); Serial.print (gpsData.longitude, 6); Cetakan bersiri ("Tarikh:"); Serial.print (gpsData.date); Serial.print ("Masa:"); Serial.print (gpsData.time); Bersiri.println (); } batal saveInfo () {File dataFile = SD.open ("gps_data.csv", FILE_WRITE); jika (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 (); } lain {Serial.println ("nope no datafile"); }}

(Kami membincangkan kod ini dalam video

Langkah 4: Menghantar dan Menyimpan Data GPS

Menghantar dan Menyimpan Data GPS
Menghantar dan Menyimpan Data GPS
Menghantar dan Menyimpan Data GPS
Menghantar dan Menyimpan Data GPS

Langkah 5: Terima kasih

Terima kasih!
Terima kasih!

Daftar ke Daftar Mel Kami!

Bahagian 1: Membuat Gelombang Dan Pengukuran Suhu

Bahagian 2: Radio NRF24 Radio dan Kad SD

Bahagian 3: Penjadualan Kuasa ke Pelampung

Bahagian 4: Menyebarkan Pelampung

Disyorkan: