Оглавление:

Умный буй [GPS, радио (NRF24) и модуль SD-карты]: 5 шагов (с изображениями)
Умный буй [GPS, радио (NRF24) и модуль SD-карты]: 5 шагов (с изображениями)

Видео: Умный буй [GPS, радио (NRF24) и модуль SD-карты]: 5 шагов (с изображениями)

Видео: Умный буй [GPS, радио (NRF24) и модуль SD-карты]: 5 шагов (с изображениями)
Видео: Умный буй [Эпизод 2] — учебное пособие по GPS, радио (NRF24) и модулю SD-карты 2024, Июль
Anonim
Image
Image

В этой серии Smart Buoy представлена наша (амбициозная) попытка создать научный буй, который мог бы проводить значимые измерения в море с использованием стандартных продуктов. Это руководство два из четырех - убедитесь, что вы в курсе, и если вам нужно быстрое введение в проект, ознакомьтесь с нашим резюме.

Часть 1: Измерение волн и температуры

В этом руководстве мы покажем вам, как получить данные GPS, сохранить их на SD-карте и отправить куда-нибудь по радио.

Мы сделали это, чтобы отслеживать местонахождение нашего морского буя. Радио означает, что мы можем смотреть его удаленно, а SD-карта означает, что на случай, если что-то сломается, и он уйдет, мы можем загрузить данные, собранные во время незапланированной экскурсии - если мы когда-нибудь сможем их получить!

Запасы

Модуль GPS - Amazon

Модуль SD-карты - Amazon

SD-карта - Amazon

2 X радиомодуля (NRF24L01 +) - Amazon

2 х Arduino - Amazon

Шаг 1. Получение данных GPS

Отправка данных GPS по радио
Отправка данных GPS по радио

Умный буй выполняет измерения датчиков, когда он находится в море, включая местоположение и дату и время по GPS. Взгляните на схему, которая показывает, как мы настраиваем схему. Модуль GPS обменивается данными через последовательное соединение, поэтому мы используем последовательную библиотеку программного обеспечения Arduino, а также крошечную библиотеку GPS для связи с ним. Эти библиотеки делают все очень простым. Давайте рассмотрим код…

#включают

#include // Объект TinyGPS ++ TinyGPSPlus gps; // Последовательное соединение с устройством GPS SoftwareSerial ss (4, 3); struct dataStruct {двойная широта; двойная долгота; беззнаковая длинная дата; без подписи долгое время; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); } void loop () {в то время как (ss.available ()> 0) {если (gps.encode (ss.read ())) {getInfo (); printResults (); }}} void getInfo () {если (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Недопустимое местоположение"); } если (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Неверная дата"); } если (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Неверное время"); }} void printResults () {Serial.print ("Местоположение:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Дата:"); Serial.print (gpsData.date); Serial.print ("Время:"); Serial.print (gpsData.time); Serial.println (); }

(Посмотрите видео для этого кода на

Шаг 2. Отправка данных GPS по радио

Отправка данных GPS по радио
Отправка данных GPS по радио

Предположим, что буй в море проводит измерения, но мы хотим видеть данные, не намочив ног и не вынося буй на берег. Чтобы получать измерения удаленно, мы используем радиомодуль, подключенный к Arduino по обе стороны линии связи. В будущем мы заменим Arduino на стороне приемника на Raspberry Pi. Радио работает одинаково с обоими интерфейсами, поэтому поменять их местами довольно просто.

Радиомодуль обменивается данными с помощью SPI, для которого требуется несколько больше соединений, чем для I2C, но при этом его очень легко использовать из-за библиотеки NRF24. Используя модуль GPS для измерений датчика, мы передаем его данные от одного Arduino к другому. Мы собираемся подключить GPS и радиомодуль к Arduino, а с другой стороны - к Arduino с радиомодулем - взгляните на схему.

Передатчик

#включают

#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); Радиостанция РФ24 (8, 7); // CE, CSN struct dataStruct {double latitude; двойная долгота; беззнаковая длинная дата; без подписи долгое время; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); Serial.println («Настройка радио»); // Настраиваем передатчик радио 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 («Начинаем отправку»); } void loop () {в то время как (ss.available ()> 0) {если (gps.encode (ss.read ())) {getInfo (); radio.write (& gpsData, sizeof (gpsData)); }}} void getInfo () {если (gps.location.isValid ()) {gpsData.longitude = gps.location.lng (); gpsData.latitude = gps.location.lat (); } else {gpsData.longitude = 0.0; gpsData.latitude = 0,0; } если (gps.date.isValid ()) {gpsData.date = gps.date.value (); } еще {gpsData.date = 0; } если (gps.time.isValid ()) {gpsData.time = gps.time.value (); } еще {gpsData.time = 0; }}

ПОЛУЧАТЕЛЬ

#включают

#include #include RF24 radio (8, 7); // CE, CSN struct dataStruct {double latitude; двойная долгота; беззнаковая длинная дата; без подписи долгое время; } gpsData; void setup () {Serial.begin (115200); // Настраиваем приемник радио 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 ("Местоположение:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Дата:"); Serial.print (gpsData.date); Serial.print ("Время:"); Serial.print (gpsData.time); Serial.println ();}}

(Посмотрите видео для этого кода на

Шаг 3: Хранение данных с помощью модуля SD-карты

Хранение данных с помощью модуля SD-карты
Хранение данных с помощью модуля SD-карты

Радиомодуль довольно надежен, но иногда вам нужен план действий в чрезвычайных ситуациях на случай отключения электроэнергии на стороне приемника или если радиостанция выходит за пределы досягаемости. Наш план действий в чрезвычайных ситуациях - это модуль SD-карты, который позволяет нам хранить данные, которые мы собираем. Количество собираемых данных невелико, поэтому даже на небольшой SD-карте можно легко хранить данные за день.

#включают

#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {двойная широта; двойная долгота; беззнаковая длинная дата; без подписи долгое время; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println («Карта вышла из строя или отсутствует»); возвращение; } Serial.println ("карта инициализирована."); Файл dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Широта, Долгота, Дата, Время"); dataFile.close (); } else {Serial.println ("нет, не удается открыть файл"); }} void loop () {в то время как (ss.available ()> 0) {если (gps.encode (ss.read ())) {getInfo (); printResults (); saveInfo (); }}} void getInfo () {если (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Недопустимое местоположение"); } если (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Неверная дата"); } если (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Неверное время"); }} void printResults () {Serial.print ("Местоположение:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Дата:"); Serial.print (gpsData.date); Serial.print ("Время:"); Serial.print (gpsData.time); Serial.println (); } void saveInfo () {Файл dataFile = SD.open ("gps_data.csv", FILE_WRITE); если (файл данных) {файл данных.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 ("нет файла данных"); }}

(Мы говорим через этот код в видео

Шаг 4: Отправка и сохранение данных GPS

Отправка и сохранение данных GPS
Отправка и сохранение данных GPS
Отправка и сохранение данных GPS
Отправка и сохранение данных GPS

Шаг 5: Спасибо

Спасибо!
Спасибо!

Подпишитесь на нашу рассылку!

Часть 1: Измерение волн и температуры

Часть 2: Радио GPS NRF24 и SD-карта

Часть 3: Распределение мощности для буя

Часть 4: Размещение буя

Рекомендуемые: