Table des matières:

Bouée intelligente [GPS, radio (NRF24) et module de carte SD] : 5 étapes (avec photos)
Bouée intelligente [GPS, radio (NRF24) et module de carte SD] : 5 étapes (avec photos)

Vidéo: Bouée intelligente [GPS, radio (NRF24) et module de carte SD] : 5 étapes (avec photos)

Vidéo: Bouée intelligente [GPS, radio (NRF24) et module de carte SD] : 5 étapes (avec photos)
Vidéo: Мои любимые проекты 2019 года. 2024, Novembre
Anonim
Image
Image

Cette série de bouées intelligentes retrace notre tentative (ambitieuse) de construire une bouée scientifique capable de prendre des mesures significatives sur la mer à l'aide de produits du commerce. Il s'agit du didacticiel deux sur quatre - assurez-vous que vous êtes à jour, et si vous avez besoin d'une introduction rapide au projet, consultez notre résumé.

Partie 1: Réalisation de mesures de vagues et de températures

Dans ce tutoriel, nous vous montrons comment obtenir des données GPS, les stocker sur une carte SD et les envoyer quelque part à l'aide de la radio.

Nous l'avons fait pour que nous puissions garder une trace de l'emplacement de notre bouée maritime. La radio signifie que nous pouvons le regarder à distance et la carte SD signifie que si quelque chose se casse et qu'il va se promener, nous pouvons télécharger les données qu'il a collectées lors de son excursion imprévue - si jamais nous sommes en mesure de le récupérer !

Fournitures

Module GPS - Amazon

Module de carte SD - Amazon

Carte SD - Amazon

2 modules radio (NRF24L01+) - Amazon

2 X Arduino - Amazon

Étape 1: Obtenir des données GPS

Envoi de données GPS par radio
Envoi de données GPS par radio

La bouée intelligente effectue des mesures de capteur lorsqu'elle se trouve dans la mer, y compris la localisation GPS et la date et l'heure. Jetez un œil au schéma qui montre comment nous avons configuré le circuit. Le module GPS communique via une connexion série, nous utilisons donc la bibliothèque série du logiciel Arduino ainsi que la petite bibliothèque GPS pour communiquer avec lui. Ces bibliothèques rendent tout super simple. Passons en revue le code…

#comprendre

#include // L'objet TinyGPS++ TinyGPSPlus gps; // La connexion série au périphérique GPS SoftwareSerial ss(4, 3); struct dataStruct{ double latitude; double longitude; date longue non signée; non signé longtemps; }gpsData; void setup(){ Serial.begin(115200); ss.begin(9600); } void loop(){ while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printRésultats(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } else{ Serial.println("Emplacement invalide"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Date invalide"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Heure invalide"); } } void printResults(){ Serial.print("Emplacement: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Date: "); Serial.print(gpsData.date); Serial.print(" Heure: "); Serial.print(gpsData.time); Serial.println(); }

(Regardez la vidéo de ce code sur

Étape 2: Envoi de données GPS par radio

Envoi de données GPS par radio
Envoi de données GPS par radio

Supposons que la bouée soit en mer en train de prendre des mesures, mais que nous voulions voir les données sans nous mouiller les pieds ni ramener la bouée à terre. Pour obtenir les mesures à distance, nous utilisons un module radio connecté à un Arduino des deux côtés de la communication. À l'avenir, nous remplacerons l'Arduino côté récepteur par un Raspberry Pi. La radio fonctionne de la même manière avec ces deux interfaces, il est donc assez simple de les échanger.

Le module radio communique en SPI, ce qui nécessite un peu plus de connexions qu'I2C mais reste très simple d'utilisation grâce à la librairie NRF24. En utilisant le module GPS pour les mesures du capteur, nous transmettons ses données d'un Arduino à l'autre. Nous allons connecter le module GPS et radio à l'Arduino et de l'autre côté un Arduino avec le module radio - regardez le schéma.

Émetteur

#comprendre

#include #include #include #include GPS TinyGPSPlus; SoftwareSerial ss(4, 3); radio RF24 (8, 7); // CE, CSN struct dataStruct{ double latitude; double longitude; date longue non signée; non signé longtemps; }gpsData; void setup() { Serial.begin(115200); ss.begin(9600); Serial.println("Configuration de la radio"); // Configuration de l'émetteur radio 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("Commencer à envoyer"); } boucle vide() { 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; } }

DESTINATAIRE

#comprendre

#include #include radio RF24 (8, 7); // CE, CSN struct dataStruct{ double latitude; double longitude; date longue non signée; longtemps non signé; }gpsData; void setup() { Serial.begin(115200); // Configuration du récepteur radio 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("Emplacement: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Date: "); Serial.print(gpsData.date); Serial.print(" Heure: "); Serial.print(gpsData.time); Serial.println();} }

(Regardez la vidéo de ce code sur

Étape 3: Stockage des données à l'aide d'un module de carte SD

Stockage de données à l'aide d'un module de carte SD
Stockage de données à l'aide d'un module de carte SD

Le module radio est assez fiable, mais parfois vous avez besoin d'un plan d'urgence en cas de coupure de courant côté récepteur ou si la radio se déplace hors de portée. Notre plan d'urgence est un module de carte SD qui nous permet de stocker les données que nous collectons. La quantité de données collectées n'est pas si importante, donc même une petite carte SD pourra facilement stocker l'équivalent d'une journée de données.

#comprendre

#include #include #include GPS TinyGPSPlus; SoftwareSerial ss(4, 3); struct dataStruct{ double latitude; double longitude; date longue non signée; non signé longtemps; }gpsData; void setup() { Serial.begin(115200); ss.begin(9600); if (!SD.begin(5)) { Serial.println("La carte a échoué ou n'est pas présente"); revenir; } Serial.println("carte initialisée."); Fichier dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.println("Latitude, Longitude, Date, Heure"); dataFile.close(); } else{ Serial.println("nope can't open file"); } } void loop() { while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printRésultats(); saveInfo(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } else{ Serial.println("Emplacement invalide"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Date invalide"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Heure invalide"); } } void printResults(){ Serial.print("Emplacement: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Date: "); Serial.print(gpsData.date); Serial.print(" Heure: "); 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("non, pas de fichier de données"); } }

(Nous parlons à travers ce code dans la vidéo

Étape 4: Envoi et stockage des données GPS

Envoi et stockage des données GPS
Envoi et stockage des données GPS
Envoi et stockage des données GPS
Envoi et stockage des données GPS

Étape 5: Merci

Merci!
Merci!

Inscrivez-vous à notre liste de diffusion !

Partie 1: Faire la mesure des vagues et de la température

Partie 2: Radio GPS NRF24 et carte SD

Partie 3: Planification de l'alimentation de la bouée

Partie 4: Déploiement de la bouée

Conseillé: