Affichage des articles dont le libellé est /Flash. Afficher tous les articles
Affichage des articles dont le libellé est /Flash. Afficher tous les articles

/Flash: Après le proto ...

Après pas mal de km parcourus, et surtout avant les km à parcourir pour les vacances, il était temps de passer sur un avertisseur un peu plus facile à intégrer dans la voiture, en passant sur un modèle avec un ATMega 328 en stand alone.
Toutes les fonctions logicielles développées sur le proto sont présentes, par contre les sketchs en V0.x ne sont pas compatibles.

Le schéma

Le PCB est composé de 2 cartes: une partie dans le compartiment moteur, une seconde (encadrement orange) dans l'habitacle. La carte SD, le bouton poussoir permettant l'enregistrement de nouveaux radar, le buzzer (avec un inter permettant de le faire taire au cas où), restent à portée de main et d'oreille ...

Le sketch vient prochainement, le temps de faire un peu de ménage dedans ...

/Flash: Bilan après quelques 500km

Un bilan s'impose après plus de 500km en compagnie de la dernière release du proto de l'avertisseur radar.

Tout d'abord, je me suis rendu compte que la version 0.83 diffusée n'était pas la bonne ... la faute au fait que je bosse sur plusieurs ordi en parallèle.
Je comptais donc re-uploader le fichier, mais je pense apporter quelques modifs suite à mon petit voyage.

Au titre des évols envisagées:
- le remplacement des LED par un buzzer fait apparaître un pb invisible (et surtout inaudible !) avec les LED: lorsque des trames GPS arrivent sur le port COM, il arrive parfois que ça grésille dans le buzzer. Il faut que je regarde ça. Les premières investigations ne semblent pas mettre en cause des parasitages, mais plutôt des lourdeurs dans les traitements, qui font que le traitement des trames prend trop de temps, et "déborde" sur les temps d'émission des bips.

- Lorsqu'on roule sur des axes rapides urbains (périph, rocades), on se fiche un peu d'être prévenus des radars feu: il y a tout de même rarement des feux sur les axes à 110km/h. Un traitement particulier va être rajouté.

- en complément du point ci-dessus, je vais même peut-être purement ne pas prendre en compte les radar feux si la vitesse GPS est supérieure à un seuil (80km/h par exemple), et forcer des extracts en cas de franchissement du seuil. Un extract de radar de la BDD prend dans les 350m à 130km/h en province (bdd de 1790 radar), il y a donc peu de chance pour qu'un radar passe à la trappe, surtout sur des vitesses inférieures, mais ça m'est arrivé ...

- sur les zones super chargées (IDF surtout), il y a largement plus de 10 radar sur la zone d'extract. Hors actuellement je relance un extract en BDD seulement lorsque la position GPS arrive en limite du bord de zone. Il faut que je modifie le bord de zone afin qu'il soit ramené au 10 ieme radar le plus loin, et pas systématiquement à la valeur théorique.

Je pensais partir sur la version 1 de /Flash après ces quelques km, mais une nouvelle version du proto va voir le jour.

/Flash: les fichiers radar

Voici les fichiers radar:

Nouvelle version de la BDD Ile de France, datée du 27/05.


Liste des radar en Ile de France, daté du 27/05/2011

Liste des radar sur le reste de la France, daté du 04/05/2011

Cette liste est extraite d'une "souche" provenant de la liste des radar fournis par gpspassion.com (base de radar en version standard d'octobre 2010) et disponible ici
De cette base ont été supprimés tous les radar mobiles (il y en a 12000 !), puis quelques-uns ont été rajoutés, au gré de mes besoins.

Dans les 2 listes de radar utilisés dans mon avertisseur, seul le paramètre 'vitesse' est inutilisé aujourd'hui.
Une explication sur le contenu de ces fichiers a été faite dans un billet précédent

/Flash: Explications sur le code

Voici, dans les grandes lignes, l'approche que j'ai retenu pour réaliser mon avertisseur sonore ...

L'exploitation des radar en base de données se fait de la façon suivante:
1- On extrait un nombre de radar max (défini à 10 pour l'Arduino 2009, car l'Arduino plante au dessus. On doit s'approcher du max de consommation de RAM) les plus proches de la position actuelle GPS.

L'extract est limitée à une zone autour de la position actuelle, définie à 0.18° (soit environ 15km²)
et réduite à 0.08° (soit environ 7km²) sur l'Ile de France car il y a beaucoup de radar, ce qui provoque des temps de traitement trop long pour que l'avertisseur soit réactif.
Si la zone d'extract n'entraine pas un extract de 10 radar, on n'aggrandit pas la zone de recherche
(inutile de prévenir le conducteur s'il y a des radar à 50km).
Ce point est traité dans la fonction 'extract_liste_rdr

2- Lorsque la zone est extraite, l'avertisseur calcule en permanence la distance véhicule-radar la plus faible et prévient le conducteur si certaines conditions sont remplies:
- le véhicule se rapproche du radar
- le véhicule se dirige vers le radar, avec un cone d'approximation
- le véhicule est à une distance raisonnable du radar, distance dépendant du type de radar
- le véhicule n'est pas arrêté (histoire de ne pas être inondé de bip lorsque le feu est rouge ou dans les bouchons)
Ce point est traité dans la fonction 'calc_distance_rdr'


3- Lorsque le véhicule se rapproche du bord de la zone d'extraction, une nouvelle extraction est lancée.
Deux critères définissent le déclenchement de ce nouvel extract:
- la distance par rapport au bord de la zone, définie à 2,5km sur l'IDF
- l'écart mini entre la pos actuelle du véhicule et le radar, défini à 1,5km sur l'IDF

Si on passe sous la distance mini ET que l'écart avec le radar le plus proche est supérieur à l'écart min, on lance un nouveau calcul.
Le calcul est effectué dans la fonction 'calc_distance_bord_zone' et la décision est prise dans la fonction 'calc_distance_rdr'

La fonction 'recup_trame_gps' lit le port série pour récupérer la position GPS.
En cas de perte de trame ou de récupération erronée, la fonction attend 10 secondes avant de faire savoir qu'il y a un problème (en arrêtant de prévenir le conducteur de la proximité d'un éventuel radar).
A l'avenir, dans ce cas de figure, la position du véhicule sera rafraîchie par projection. Cela permettra de prévenir d'une éventuelle présence de radar dans un tunnel par exemple.

La fonction 'buzzer' permet de prévenir le conducteur en fonction du type et de la distance du radar

Enfin, les fonctions 'writeString' et 'writeNumber' permettent de logguer des infos sur la carte SD: axe des radar, et, pour contrôle, la liste des radar extraits dans la fonction 'extract_liste_rdrainsi que la position du véhicule lors de l'extraction.

/Flash: Le code du sketch

Ci-joint le code de l'avertisseur de radar.

La version courante est la 0.83.
Elle reprend donc les principales fonctionnalités décrites dans les billets précédents, et notamment dans celui-ci.

Le code est téléchargeable ici:
Version 0.83

Finalisation du proto ...

Après pas mal de km de tests, le proto de l'avertisseur de radar a encore bénéficié de quelques modifications.

Pêle-mêle:

  • C'est bien parti pour rester sur un avertisseur de radar à base de buzzer: les LED obligeaient de jeter un oeil permanent pour savoir s'il y avait un risque. Le buzzer prévient désormais de la manière suivante:
    1 bip: avertisseur de radar fixe
    2 bips: avertisseur de radar mobile
    3 bips: avertisseur de radar feu

    Il y a une petite inversion dans l'ordre des radar depuis mon dernier billet. La raison est purement pratique: dans la majorité des cas, j'ai affaire soit à des radar fixe, soit à des radar feux. Distinguer 3 bips d'1 seul est plus simple de que 2.
    J'ai par ailleurs franchement allégé la base de données concernant ces foutus radar mobiles, sinon l'avertisseur n'arrête pas de sonner. En plus, comme je ne fais pas franchement d'excès de vitesse, ça ne me sert pas à grand chose (d'autant que les radar mobiles sont plus tolérants en terme d'excès de vitesse ...)

  • L'avertisseur de radar émet un son sous certaines conditions:
    - il faut rouler (à plus de 7km/h)
    - il faut s'approcher du radar
    - il faut être dans l'axe du radar (à + ou - 10° près, ce qui pourrait bien être revu à la baisse si ça sonne de trop)
    - il faut être à moins de 500m d'un radar feu, et à moins de 1000m d'un radar fixe ou mobile

    Pb résiduel: un radar fixé situé sur une route parallèle à moins de 1000 mètres provoquera une alerte. Il faudrait rajouter un contrôle sur le relèvement

  • Pour améliorer les performances sur l'Ile de France (où il y a pas mal de radar), la base de données à été séparée en 2.

  • Pour permettre de mettre à jour les caps des radar sans trop se prendre la tête, tous les radar "croisés" sur la route sont sauvegardés dans un fichier, avec le cap GPS.
Voilà pour les dernières news ... bientôt le code !

/Flash: la base de données

Voici un extrait de la base de données des radar:

6.54937;48.96629;0;50;361;1213;XXX
1.74705;48.96686;0;110;361;2312;XX
2.09068;48.97220;0;90;361;13224;XX
2.23332;48.97715;0;110;361;10476;X

Dans l'ordre:
- longitude sur 7 digits, point compris
- latitude sur 8 digits, point compris
- type de radar sur 1 digit:
  • 0 pour un radar fixe
  • 1 pour un radar mobile
  • 2 pour un radar feu
- vitesse de contrôle sur 3 digit maxi
- cap de radar sur 3 digits maxi (1 cap à 361° indique que le cap du radar est inconnu)
- identifiant unique, sur 5 digits max
- complément de chaine, pour avoir des chaines de longueur constante de 36 caractères

Les données en rouge ne sont pas utilisées actuellement:
- J'ai dernièrement retiré le contrôle du respect de la vitesse car ça alourdissait l'affichage, en rajoutant des séquences de clignotement
- un petit bug empêche de déterminer avec exactitude les cohérences de cap entre le véhicule et le radar. J'espère trouver une solution. Cela permettrait d'affiner les avertissements.

/Flash: Schéma électrique

/Flash: Affichage

Mon choix de LED s'est porté sur des modèles diamètre 5mm, de couleurs rouge, orange, jaune.
En fonction de la distance restant à parcourir pour rejoindre le radar, la LED allumée change de couleur: jaune, puis orange, puis rouge.

Les paliers sont modifiés en fonction de la vitesse de déplacement. Les voici:

SeuilV<80km/hv>80km/h
S long1000m2000m
S moy500m1000m
S min250m5000m

En fonction du type de radar et de la distance, l'allumage des LED est le suivant:
Type radar              D<S min           D<S moy         D<S long

Fixe / mobile                                                   

Feu                                                                        

Un radar feu situé à plus de 500m ne sera pas détecté différemment d'un radar feu situé à 1000m. Ce n'est pas génant car ces radar sont en ville et une détection si éloignée est sans intérêt.


En complément, d'autres séquences sont prévues en fonction du statut de fonctionnement:

Erreur de lecture carte SD
Recherche des radars en BDD
Trame GPS invalide ou GPS hors portée

/Flash: modules logiciels

/Flash se base sur plusieurs librairies externes:
- TinyGPS pour la mise en oeuvre du GPS sur port série
- SDFATlib pour la mise en oeuvre du lecteur SD
- NewSoftSerial, permettant de définir plusieurs ports série (GPS, terminal pour debugger)

Le déroulement séquentiel s'approche de ceci:

Acquisition d'une trame valide
Véhicule dans zone géo ?
non         .
          oui
Calcul d'une nouvelle zone avec VHL au centre
Calcul/affichage distance radar le plus proche
Retour début

La seule contrainte imposée lors du calcul de la distance avec le radar le plus proche est la suivante: le radar le plus proche de la liste n'est pris en compte que si la distance diminue entre 2 calculs (véhicule se rapproche effectivement du radar)

/Flash: présentation ...

/Flash ... (lire flash barre)

Je viens partager ma première réalisation ayant une "utilité", dans le sens où c'est un produit, pas un embryon de truc roulant vers la lumière, ou vers l'obscurité, ou je ne sais quoi d'autre encore ...

/Flash est censé protéger de la lumière ... pas de celle du soleil: une bonne paire de lunettes appropriées devrait suffire, mais ce celle des flashs, qui bordent de plus en plus les côtés de nos chaussées, ou le pied de nos feux de circulation. /flash est un avertisseur de radar ...

J'habite dans le 95, qui est le département le plus peuplé en terme de radar feu. Je dois vous dire que c'est hallucinant: on en voit partout !

Ayant un vieux GPS série, je me suis dit qu'en le couplant avec un Arduino, un lecteur de carte SD et 2-3 LED, ça devrait donner quelque chose de potable.
C'est pas que je vais en avoir une utilité folle: je me déplace exclusivement en électrique, à 50km/h, en silence ... Je vous invite d'ailleurs à visiter LE forum de référence en terme de véhicule électrique.
Enfin, revenons-en à /Flash ...
Le but est donc de réaliser un avertisseur de radar grâce à un GPS embarqué, et de prévenir lorsque "la menace" s'approche.

Le matériel
  1. La base de données:
    La liste des radar est stockée sur carte SD. Cette liste est issue de celle mise à disposition gratuitement sur gpspassion. J'ai cependant supprimé beaucoup de radar mobiles pour l'alléger, puis je l'ai mis manuellement à jour, surtout sur les zones qui m'intéressent.
    Il en ressort une liste de radar fixes & feu (et quelques radar mobiles) avoisinant les 2000 !
  2. Le contrôleur:
    L'Arduino utilisé est un '2009'. Un Uno fonctionnerait tout autant. Un Mega serait largement plus approprié aux futures évolutions. Vu la quantité de données à traiter, j'ai été obligé de tailler dans les fonctions proposées, pour n'en garder que le minimum
  3. L'affichage:
    Réduit à son plus strict minimum: 3 LED 1 buzzer
L'approche logicielle
  • A partir des coordonnées actuelles du véhicule, effectuer une recherche sur une zone de proximité de tous les radar présents. La capacité en RAM de l'Arduino m'a vite imposée de limiter la liste des radar pris en considération en la limitant à 10.
  • Vérifier en permanence la distance entre le véhicule et chacun des 10 radar, et remonter une info en fonction de la distance et du type de radar: le comportement 'préventif' à adopter n'est pas le même entre un radar en bord de route et un radar feu: dans un cas il vaut mieux anticiper un changement de la couleur des feux, dans l'autre vérifier qu'on respecte la limitation de vitesse
  • Lorsque le véhicule qui la zone de recherche, relancer une nouvelle recherche par rapport à la position actuelle ...

Les évolutions possibles

Moyennant une évolution matérielle, soit en passant sur un Arduino Mega, soit en mettant 2 '2009' en parallèle, il serait intéressant:
  • de virer les LED buzzer au profit d'un LCD: les LED qui clignotent c'est joli, mais au bout d'un moment, on n'a plus vraiment la logique en tête: radar fixe, mobile, feu, en fonction de la distance, du respect de la vitesse ... ça fait beaucoup de combinaisons pour pas beaucoup de LED
  • de pouvoir rajouter des radar en live, au moyen d'un petit poussoir par exemple
  • d'affiner le calcul de l'approche véhicule-radar. Actuellement, le radar peut être en contresens, dans une rue perpendiculaire ... on est tout de même prévenu.