SmartWay
Composants et fournitures
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Outils et machines nécessaires
![]() |
|
Applications et services en ligne
![]() |
| |||
![]() |
|
À propos de ce projet
Présentation
Les parents s'inquiètent toujours pour leurs enfants. Les parents veulent que leurs enfants arrivent à l'école à l'heure et rentrent à la maison à l'heure, en empruntant le chemin assigné.
SmartWay vise à éliminer ce souci de la vie quotidienne des parents. SmartWay surveillera votre enfant pendant qu'il se rend à l'école et en revient, en veillant à ce que votre enfant emprunte toujours le chemin approprié pour arriver à sa destination, l'école.
SWay surveillera la géolocalisation de votre enfant à l'aide du GPS et enverra immédiatement un e-mail au parent si l'enfant dévie du chemin que vous lui avez assigné. SmartWay enverra également au parent un e-mail lorsque l'enfant arrive à la maison ou à l'école, ainsi que pour l'informer si l'enfant est en retard. De cette façon, les parents peuvent s'asseoir et profiter de leur café en sachant que leur enfant arrive en toute sécurité à l'école et à la maison.

Fonctionnalité
SmartWay surveillera en permanence la géolocalisation de votre enfant depuis son réveil jusqu'à son arrivée à la maison. L'appareil est également équipé d'une LED RGB et d'un moteur vibrant pour avertir votre enfant s'il ne prend pas le bon chemin pour se rendre à l'école ou est en retard, et le féliciter à son arrivée à l'école.
L'appareil fonctionne à travers de nombreuses fonctions pour assurer la sécurité de votre enfant.


- La première boucle
if(hors piste)
détecte si l'enfant a dévié du chemin assigné, l'appareil dispose d'un système qui détecte le nombre de fois que cela se produit ; si votre enfant dévie du cap la première fois, l'appareil l'avertit en tournant la LED rouge et en faisant vibrer le moteur, puis l'enfant aura deux minutes pour reprendre le cap. Si l'enfant reste en déviation pendant encore deux minutes, le parent recevra un e-mail l'avertissant que son enfant est en déviation ainsi que sa géolocalisation, l'e-mail sera réceptif envoyé toutes les 2 minutes jusqu'à l'arrivée de l'enfant à la maison ou à l'école. if(heure scolaire)
etif(heure du domicile)
les boucles détectent s'il est temps pour l'école et la maison, puis l'appareil vérifie si l'enfant est arrivé à l'école ou à la maison, s'il est arrivé à temps, la LED deviendra verte et l'appareil enverra au parent un e-mail l'informant que son l'enfant est arrivé à destination avec l'heure d'arrivée. Sinon, s'il est temps que l'école commence et que l'enfant n'est pas à l'école, cela
L'appareil ne peut envoyer que 12 byes d'informations, un paquet compact est donc nécessaire lors de l'envoi. D'autres variables seront configurées dans le backend SigFox.



Il y a quatre paquets que l'appareil peut envoyer
- l'enfant est hors cours - ("hors cours")
- l'enfant est arrivé à la maison - ("à la maison")
- l'enfant est arrivé à l'école - ("à l'école")
- l'enfant est en retard - ("en retard")
Système d'avertissement
L'enfant qui porte l'appareil sera alerté chaque fois qu'il arrive à l'école, arrive à la maison, arrive en retard à destination ou a dévié de sa route



L'appareil en action



Avantages
Les parents utilisant cet appareil bénéficieront de :
- s'assurer que leur enfant arrive en toute sécurité vers et depuis l'école
- s'assurer que leur enfant arrive ponctuellement à ces endroits
- s'assurer que leur enfant ne dévie pas bien sûr
- Économie d'énergie et faible coût - Batteries longue durée
Construire le projet
Étape 1 : Appareil requis
Pour commencer à réaliser le projet, nous devons rassembler nos matériaux. Pour ce projet, vous aurez besoin de :
- fils de connexion
- 1, transistor NPN
- 1, condensateur céramique (0,1 µF)
- 3, résistances (220Ω)
- 1, résistance (1KΩ)
- 1, LED RVB
- 1, module GPS
- 1, Cellule motrice vibrante
- 1, Arduino MKR1200 renard
- 1, 2x boîtier de piles AAA/AA
- 2, piles AA

Étape 2 : Connecter le circuit
L'étape suivante consiste à connecter le circuit ; les images Fritzing ci-dessous illustreront comment cela est fait. Le câblage comporte plusieurs parties, elles sont donc divisées en différentes images.

Étape 3 :Reconnaissance du code
Le code se compose de plusieurs fonctions, chaque fonction joue un rôle spécifique dans la constitution du projet.
- Système d'avertissement
- Obtenir un GPS
- Synchronisation RTC
- Emplacement du processus
- Envoyer le colis
- Faire des actions
Ces sections sont expliquées ci-dessous.
- Système d'avertissement
void setOutputs(){ pinMode(R, OUTPUT); pinMode(G, SORTIE); pinMode(B, SORTIE); pinMode(motorPin, OUTPUT);}void vibrateMotor() // fait vibrer la cellule du moteur{ digitalWrite(motorPin, HIGH); retard(1000); digitalWrite(motorPin, LOW);}void ledGreen() // LED, Green{ analogWrite(R, 0); analogWrite(G, 255); analogWrite(B, 0);}void ledOrange() // LED, Orange{ analogWrite(R, 255); analogWrite(G, 45); analogWrite(B, 0);}void ledRed() // LED, Rouge{ analogWrite(R, 255); analogWrite(G, 0); analogWrite(B, 0);}void resetLED() // Éteint la LED{ analogWrite(R, 0); analogWrite(G, 0); analogWrite(B, 0);}
Cette section du code se trouve dans le functions.h
déposer. Le code informera l'enfant portant l'appareil de l'état actuel. Globalement, ces boucles contrôlent la LED RVB et la cellule motrice vibrante.
- Obtenir un GPS
bool getGPS(int run){ while(Serial1.available()> 0) { if(gps.encode(Serial1.read())) { if(run ==1) { processData(); } else if(run ==2) { synchRTC(); } if(gps.location.isValid() &&gps.time.isValid() &&gps.date.isValid()) { return true; } else { return false; } } } if(millis()> 10000 &&gps.charsProcessed() <10) { Serial.println("Erreur - Le module GPS a répondu avec une erreur"); Serial.println ("Code de terminaison"); Serial.println("________________________________________"); tandis que(1) {}; }}
C'est la boucle en charge de recevoir l'emplacement et l'heure du module GPS. Il y a 3 choses que fait cette boucle, elle est utilisée dans la boucle de configuration
pour synchroniser le GPS, il est ensuite utilisé pour synchroniser le RTC embarqué au GPS' et il est utilisé dans la boucle principale pour obtenir la géolocalisation de l'appareil.
- Synchronisation RTC
void synchRTC(){ Serial.println("Synchronisation RTC"); Serial.println("________________________________________"); Serial.println(" OK - Initialisation RTC"); rtc.begin(); Serial.println("OK - Temps de synchronisation"); // nous devons couper les 2 premiers chiffres de la variable (2018 -> 18) uint16_t yearRAW =gps.date.year(); Chaîne annéeChaîne =Chaîne(annéeRAW); annéeString.remove(0,1) ; uint16_t année =annéeString.toInt(); rtc.setTime(gps.time.hour(), gps.time.minute(), gps.time.second()); rtc.setDate(gps.date.day(), gps.date.month(), année); Serial.println ("Succès - Synchronisation RTC"); Serial.println("________________________________________"); Serial.println(""); Serial.println(""); Serial.println("");}
Cette section de code synchronise le RTC embarqué avec l'heure reçue du module GPS, elle lit d'abord les données du module GPS puis les traite. La boucle règle ensuite l'heure actuelle du RTC embarqué sur l'heure reçue et démarre le RTC.
- Traiter Emplacement
bool processData(){ if(gps.location.isValid()) { latitude =gps.location.lat(); longitude =gps.location.lng(); latitude =53,355504 ; longitude =-6.258452; if(check.isOut()) { if(check.track()) { Serial.println("HORS LIMITES"); warn.offTrackLoop(); } } if(check.isHomeTime() &&arrivéSchool) { if(check.isHome()) { Serial.println("AT HOME"); warn.arrivedHomeLoop(); } else { Serial.println("LATE -> HOME"); warn.lateLoop(); } } else if(check.isSchoolTime() &&arrivéHome) { Serial.println("."); if(check.isSchool()) { Serial.println("À L'ÉCOLE"); warn.arrivedSchoolLoop(); } else { Serial.println("LATE -> SCHOOL"); warn.lateLoop(); } } else { Serial.println("ON WAY"); } }}
Cette boucle traitera l'emplacement de l'appareil et le comparera à l'heure actuelle pour voir où l'enfant devrait être à ce moment-là. Il effectuera ensuite l'action appropriée en fonction du résultat.
- Faire Actions
struct Do{ void offTrackLoop() { if(offTrackVar) { parseData(0); } vibreMoteur(); ledRouge(); retard(1000); vibrerMoteur(); resetLED(); offTrackVar =vrai ; retard (120000); } void lateLoop() { if(!lateVar) { parseData(1); } vibreMoteur(); ledOrange(); retard(1000); resetLED(); tardiveVar =vrai ; } void arrivéHomeLoop() { lateVar =false; offTrackVar =faux ; vibrerMoteur(); ledVert(); retard(1000); resetLED(); parseData(2) ; arrivéAccueil =vrai ; arrivéÉcole =faux; } void arrivéSchoolLoop() { lateVar =false; offTrackVar =faux ; vibrerMoteur(); ledVert(); retard(1000); resetLED(); parseData(3) ; arrivéHome =false; arrivéÉcole =vrai; }} ;
Cette structure est appelée pour agir sur la réponse donnée par Process Location il avertira l'enfant en basculant la LED RVB et la cellule motrice vibrante. Il enverra également un colis à SigFox si nécessaire.
- Envoyer Forfait
void parseData(int state){ SigFox.beginPacket(); // commencer le processus d'envoi du message if(state ==0) // hors piste { SigFox.print("hors piste"); // envoyer le message } else if(state ==1) // tard { SigFox.print("late"); // envoyer le message } else if(state ==2) // arrivé à la maison { SigFox.print("at home"); // envoyer le message } else // arrivé à l'école { SigFox.print("à l'école"); // envoyer le message } SigFox.endPacket();}
Cette fonction envoie les données à SigFox, l'envoi du paquet commence puis la valeur appropriée est analysée.
Configuration des variables
Le code contiendra plusieurs variables avec TODO écrit comme commentaire après eux, ces variables doivent être personnalisées pour s'adapter au client, le client sera invité à configurer
- L'heure de l'école
- Le temps nécessaire à l'enfant pour voyager
- Heure de fin des cours
- Débogage ?
- Géolocalisation de l'école (LAT, LNG) ;
- Géolocalisation du domicile (LAT, LNG) ;
Le guide ci-dessous vous guide dans la configuration des variables.











Bibliothèques
SigFox - copyright (c) 2016 Arduino LLC GNU Lesser General Public License cette bibliothèque est dans le domaine public
ctype - copyright (c) 2006 Free Software Foundation sous la licence publique générale GNU, cette bibliothèque est dans le domaine public
RTCZero - copyright (c) 2015 Arduino LLC sous la licence publique générale limitée GNU, cette bibliothèque est dans le domaine public
Chaîne - copyright (c) 2009-10 Hernando Barragan, copyright (c) 2011 Paul Stoffrengen sous la licence publique générale limitée GNU, cette bibliothèque est dans le domaine public
TinyGPS++ - copyright (c) 2008-13 Mikal Hart sous licence publique générale limitée GNU, cette bibliothèque est dans le domaine public
Configuration
Assurez-vous que le circuit est correctement câblé. Pour plus de détails sur la configuration de votre renard MKR, cliquez ici pour le didacticiel Arduino. Si vous souhaitez en savoir plus sur la bibliothèque Arduino SigFox, cliquez ici.
Programme Backend
Vous devez avoir un renard Arduino MKR1200 enregistré pour programmer le backend.
- Étape 1
Ouvrez le backend SigFox et connectez-vous à votre compte SigFox.
- Étape 2
cliquez sur "Type d'appareil" dans le menu déroulant en haut de la page

- Étape 3 :
sélectionnez votre Arduino MKRfox et cliquez sur modifier

- Étape 4 :
Sélectionnez les rappels dans le menu de gauche et accédez au bouton "nouveau" dans le coin supérieur droit.

- Étape 5 :
Après avoir cliqué sur nouveau, un certain nombre d'options de configuration de rappel vous seront présentées, cliquez sur Rappels personnalisés

Ensuite une fenêtre s'ouvrira, vous devez remplir le formulaire donné pour créer votre rappel
À la fin, votre message devrait ressembler à ceci :

Maintenant, cliquez sur OK et vous êtes prêt.
Finale
La dernière chose que vous devez faire est de télécharger le code ci-dessous, assurez-vous d'avoir personnalisé la variable marquée "À FAIRE" selon vos préférences, attendez que le voyant bleu du module GOS clignote, puis déconnectez le microcontrôleur de votre ordinateur et placez les piles dans le boîtier de piles. Vous êtes prêt.
J'ai conçu un boîtier pour garder l'appareil en sécurité et pour le rendre attrayant, j'ai utilisé deux morceaux d'acrylique et j'ai fait fondre les bords en les incurvant à 90 degrés. J'ai placé tout le circuit à l'intérieur et le boîtier de la batterie en dessous, puis j'ai attaché les morceaux de plastique ensemble à l'aide de deux attaches de câble.


À la fin, j'ai recouvert un morceau du dessus (couvercle transparent) pour cacher tous les fils de la vue et ne laisser apparaître que le cerveau du projet.
Contexte
Personnellement, je sais à quel point il peut être stressant d'exécuter la simple tâche d'envoyer votre enfant à l'école, tout le monde s'inquiète de tout ce qui peut arriver à son enfant alors qu'il se rend à l'école.
Ce projet s'adresse à toutes les personnes qui se sentent stressées lorsqu'elles envoient leur enfant à l'école. SWay vous permettra de vous détendre, sachant que votre enfant arrivera à l'école en toute sécurité.

Code
SmartWay
Le code completPièces et boîtiers personnalisés
Non inclus dans Fritzing par défaut arduino_mkr_fox_1200_fixed_gwlzp1tuih_uh8ucYEGxI.fzpzSchémas

Processus de fabrication