Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Suivez-moi

Composants et fournitures

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Adafruit SD Card Shield
× 1
Adafruit SD Card Shield
× 1
Bouclier Seeedstudio gprs V2.0
× 1
Seed GPRS Shield V2.0
× 1
Câbles de raccordement (générique)
× 1
Batterie 9V (générique)
× 1
Boîte
× 1
Boîte
× 1

À propos de ce projet

Il y a quelque temps, j'ai décidé de construire un tracker de voiture/personnel.

C'était mon premier prototype dans cette direction.


Le système lui-même est très simple. Juste un Arduino Mega, un GPS, un Shield GPRS et une carte SD. Celui-ci est facultatif mais j'ai inclus car je pensais en lançant un défi à mes amis sur Facebook, ils appellent le système et reçoivent un SMS avec ma position ou ma dernière position connue.


Le système recherche toujours la position réelle. Si quelqu'un appelle le numéro de la carte SIM, le système enverra un SMS avec la position réelle et avec un lien vers Google Maps. Par exemple :


L'emplacement de Hugo est maintenant :Lat :54.315010, Log :10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Si le GPS ne reçoit aucune position, le système enverra la dernière position connue. Par exemple :


Je n'arrive pas à trouver Hugo. La dernière fois que je l'ai vu, c'était en : Lat : 54.315010, Log : 10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


La date, l'heure, la position et l'état du SMS sont alors stockés dans la carte SD.


Composants

J'ai utilisé :


1x Arduino MEGA

1x GPRS Shield (Il est également possible d'utiliser d'autres shields GSM disponibles sur le marché) 

1x GPS (j'ai utilisé le NEO 6, très populaire sur ebay)

1x protection de carte SD 

1x pile 9V

1x boîte en plastique

Quelques fils


Connectez les composants


Étant donné que l'Arduino Mega utilise un brochage différent, un recâblage est nécessaire.

Tout d'abord, le SD Card Shield, conçu pour Arduino Uno, utilise les broches 10 à 13 pour SPI, donc pour que cela fonctionne sur Mega, ils doivent être "passés" aux broches SPI sur MEGA.

Broches Arduino UNO SPI - Broches Arduino MEGA SPI

MOSI - 11 à 51

MISO - 12 à 50

SCK - 13 à 52

SS - 10 à 53

Sur GPRS Shield, il est d'abord nécessaire de configurer les broches de communication sur Software Serial dans le cavalier J7 du shield.

Ensuite, en utilisant des fils, j'ai connecté les broches 7 et 8 du blindage GPRS au port série 1 (broches 18 et 19 dans l'Arduino Mega).

Pour plus de détails sur la façon de connecter la carte SIM dans le GPRS Shield, veuillez consulter mon autre projet dans Hackster.


Le GPS est connecté au port série 2 (broches 16 et 17) de l'Arduino Mega.

De plus, l'alimentation nécessaire au GPS est prélevée sur la broche 5V de la carte SD et la broche GND.


La batterie 9V peut être connectée à la broche Vin ou à la prise jack d'alimentation.

Préparation de la fermeture de la boîte et test sur le terrain.

Code


Je laisse ici quelques notes rapides sur le code.


J'ai utilisé cette bibliothèque pour le GPRS Shield.

Il est nécessaire de faire quelques modifications afin d'utiliser l'Arduino Mega :


1) Ouvrez GSM.h et commentez-décommentez les lignes appropriées comme ci-dessous, par ex. pour Arduino Mega :

//#define UNO

#définir MEGA


2) Dans HWSerial.h, décommentez la ligne pour la définition Mega, par ex. pour Arduino Mega :

#définir MEGA


Pour le GPS, j'utilise cette bibliothèque.


Le programme lui-même s'exécute d'une manière très simple. Après toutes les routines de démarrage (GPRS, GPS et initialisation de la carte SD), le GPS tentera de déterminer le nombre de satellites disponibles et un point de coordonnées GPS valide.

Si l'appel est passé pendant cette période, l'appel sera automatiquement rejeté et rien ne se passera.

Lorsque le GPS a une position valide et détecte plus de 3 satellites (je suppose que le GPS a une bonne réception), si un appel est passé, le système enverra un SMS au numéro d'appel avec ma position. Toutes ces données seront stockées sur la carte SD.

Si le GPS a moins de 3 satellites, aucune position valide ne peut être récupérée, donc si un appel est passé, le numéro d'appel recevra un SMS avec ma dernière position connue. Encore une fois, toutes les données sont stockées sur la carte SD.


Avantages et inconvénients


Comme il s'agit d'un prototype, il y a beaucoup de choses qui n'ont pas bien fonctionné. Mais l'objectif est toujours de s'améliorer.

D'abord la batterie ne dure qu'une heure !! Je n'ai implémenté aucune mécanique d'économie d'énergie dans le logiciel. Donc, pour les améliorations futures, le "mode veille" est un must.

La taille a également été revue et je conçois une nouvelle planche complète. Le premier regard est le suivant :

S'il vous plaît écrivez-moi si vous avez trouvé une erreur ou si vous avez des suggestions/améliorations ou des questions.

Merci d'avoir lu.

Hugo Gomes

Code

  • Code
CodeArduino
#include "SIM900.h"#include #include "sms.h"#include "call.h"#include //Pour changer les broches pour Software/Hardware Serial, utilisez 27, 28 lignes dans GSM.cpp.//Pour utiliser Arduino Mega, veuillez définir MEGA à la ligne 5 dans GSM.h.#include #include //Mega CS pinconst int chipSelect =53 ; //Nous devons créer les classes pour les SMS et les appels.CallGSM call;SMSGSM sms;char number[20];byte stat =0;int value =0;char value_str[5];//GPS Variable// L'objet TinyGPS++TinyGPSPlus gps;const char *googlePrefix ="http://maps.google.com/maps?q=";double Lat;double Long;int jour, mois, année;int heure, minute, seconde;int num_sat;boolean one_point_true =false;void setup(){ //Connexion série. Serial.begin(9600); //Connexion GPRS Serial.print(F("Démarrage GSM...")); //Démarrer la configuration du shield avec baudrate. if (gsm.begin(9600)) Serial.println(F("READY")); else Serial.println(F("IDLE")); //Connexion GPS Serial.println(F("Démarrage du GPS")); //Port de communication GPS Serial2.begin(9600); //Démarrage de la carte SD Serial.print(F("Initialisation de la carte SD...")); // assurez-vous que la broche de sélection de puce par défaut est définie sur // sortie, même si vous ne l'utilisez pas :pinMode(53, OUTPUT); // voir si la carte est présente et peut être initialisée :if (!SD.begin(chipSelect)) { Serial.println(F("Card failed, or not present")); // ne rien faire de plus :return; } Serial.println(F("carte initialisée."));}//************************************ **************************************************//Loopvoid principale loop(){ Get_GPS(); // Récupère la position Check_call(); //Voir si quelqu'un appelle} ;////////////////////////////////////////////////////// ///////////////////////////////////////********* ******************************************************** *******************// Obtenir la position du GPSvoid Get_GPS(){ while (Serial2.available()> 0) if (gps.encode(Serial2.read ())) num_sat =gps.satellites.value(); //Série.println(num_sat); if (gps.location.isValid() ==1) { Lat =gps.location.lat(); Long =gps.location.lng(); if (Lat !=0 &&Long !=0) one_point_true =true; } if (gps.date.isValid()) { jour =gps.date.day(); mois =gps.date.mois(); année =gps.date.année(); } if (gps.time.isValid()) { hour =gps.time.hour(); minute =gps.heure.minute(); seconde =gps.temps.seconde(); } smartDelay(500); if (millis()> 5000 &&gps.charsProcessed() <10) { Serial.println(F("Aucun GPS détecté :vérifiez le câblage.")); tandis que (vrai); }}//************************************************ ******************************** // Cette version personnalisée de delay() garantit que l'objet gps // est en cours "fed".static void smartDelay(unsigned long ms){ unsigned long start =millis(); do { while (Serial2.available()) gps.encode(Serial2.read()); } while (millis() - start =3 &&one_point_true ==true) { char sms_OK[160]; sprintf(sms_OK, "L'emplacement de Hugo est maintenant :Lat :%s, Log :%s. %s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println(sms_OK); erreur =sms.SendSMS(nombre, sms_OK); retard (500); if (error ==0) //Vérifier l'état { Serial.println(F("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } else if (num_sat <3 &&one_point_true ==true) { char sms_NOK[150]; sprintf(sms_NOK, "Je n'arrive pas à trouver Hugo. La dernière fois que je l'ai vu, c'était dans :Lat :%s, Log :%s. %s%s,+%s\n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println(sms_NOK); erreur int =sms.SendSMS(nombre, sms_NOK); if (error ==0) //Vérifier l'état { Serial.println(F("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } else if (one_point_true ==false) { Serial.println(F("Pas de point GPS valide")); }//Sauvegarder tout dans le fichier de la carte SD dataFile =SD.open("datalog.txt", FILE_WRITE); // si le fichier est disponible, écrivez-y :if (dataFile) { dataFile.print(Date); dataFile.print(" "); dataFile.print(time1) ; dataFile.print(" "); dataFile.print(nombre); dataFile.print(" "); dataFile.print(lat_print); dataFile.print(", "); dataFile.print(Long_print); dataFile.print(" "); dataFile.print(erreur); dataFile.println(); dataFile.close(); } // si le fichier n'est pas ouvert, affiche une erreur :else { Serial.println(F("error opening datalog.txt")); }}///////////////////////////////////////////// /////////////////////////////////////////////

Schémas


Processus de fabrication

  1. Robot utilisant Raspberry Pi &Bridge Shield
  2. Contrôleur DMX Web
  3. Arduino Spybot
  4. UnifiedWater v1
  5. HSVClock
  6. Robot chasse-neige
  7. Boîte de vote mobile
  8. Whac-A-Mole (édition bouton)
  9. Jukebox moderne