![Умный буй [GPS, радио (NRF24) и модуль SD-карты]: 5 шагов (с изображениями) Умный буй [GPS, радио (NRF24) и модуль SD-карты]: 5 шагов (с изображениями)](https://i.howwhatproduce.com/images/001/image-901-4-j.webp)
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04


В этой серии Smart Buoy представлена наша (амбициозная) попытка создать научный буй, который мог бы проводить значимые измерения в море с использованием стандартных продуктов. Это руководство два из четырех - убедитесь, что вы в курсе, и если вам нужно быстрое введение в проект, ознакомьтесь с нашим резюме.
Часть 1: Измерение волн и температуры
В этом руководстве мы покажем вам, как получить данные GPS, сохранить их на SD-карте и отправить куда-нибудь по радио.
Мы сделали это, чтобы отслеживать местонахождение нашего морского буя. Радио означает, что мы можем смотреть его удаленно, а SD-карта означает, что на случай, если что-то сломается, и он уйдет, мы можем загрузить данные, собранные во время незапланированной экскурсии - если мы когда-нибудь сможем их получить!
Запасы
Модуль GPS - Amazon
Модуль SD-карты - Amazon
SD-карта - Amazon
2 X радиомодуля (NRF24L01 +) - Amazon
2 х Arduino - Amazon
Шаг 1. Получение данных 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 по радио

Предположим, что буй в море проводит измерения, но мы хотим видеть данные, не намочив ног и не вынося буй на берег. Чтобы получать измерения удаленно, мы используем радиомодуль, подключенный к 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-карте можно легко хранить данные за день.
#включают
#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


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

Подпишитесь на нашу рассылку!
Часть 1: Измерение волн и температуры
Часть 2: Радио GPS NRF24 и SD-карта
Часть 3: Распределение мощности для буя
Часть 4: Размещение буя
Рекомендуемые:
Умный буй [Резюме]: 8 шагов (с изображениями)
![Умный буй [Резюме]: 8 шагов (с изображениями) Умный буй [Резюме]: 8 шагов (с изображениями)](https://i.howwhatproduce.com/images/001/image-657-4-j.webp)
Умный буй [Резюме]: Все мы любим море. Как коллектив, мы стекаемся туда на каникулы, чтобы заняться водными видами спорта или заработать себе на жизнь. Но побережье - это динамичная зона, подверженная влиянию волн. Повышение уровня моря на пляжах и сильные экстремальные явления, такие как ураг
Умный будильник: умный будильник на Raspberry Pi: 10 шагов (с изображениями)

Умный будильник: умный будильник на Raspberry Pi: вы когда-нибудь хотели умные часы? Если да, то это решение для вас! Я сделал Smart Alarm Clock, это часы, в которых вы можете менять время будильника в соответствии с веб-сайтом. При срабатывании будильника раздастся звуковой сигнал (зуммер) и загорятся 2 лампочки
Как подключить модуль GPS (NEO-6m) к Arduino: 7 шагов (с изображениями)

Как подключить модуль GPS (NEO-6m) к Arduino: В этом проекте я показал, как подключить модуль GPS к Arduino UNO. Данные о долготе и широте отображаются на ЖК-дисплее, а местоположение можно просмотреть в приложении. Список материалов Arduino Uno == > GPS-модуль Ublox NEO-6m за 8 долларов == > 15 $ 16x
Двустороннее радио NRF24 для телеметрии: 9 шагов (с изображениями)

Двустороннее радио NRF24 для телеметрии: Привет, ребята, меня зовут Педро Кастелани, и я предлагаю вам свой первый инструктаж: построение двустороннего радио с Arduino для всего, для чего вам это нужно. В этом проекте мы сделаем две отдельные цепи, которые будут действовать и как приемник, и как передатчик
TripComputer - маршрутный компьютер с GPS и модуль погоды для вашего автомобиля: 11 шагов (с изображениями)

TripComputer - GPS-путевой компьютер и модуль погоды для вашего автомобиля: крутой проект Raspberry Pi, в котором используется модуль подключения GPS и 2 небольших дисплея Digole, чтобы на приборной панели был навигационный компьютер