Optimisation de cartes de contrôle de robot mobile
Sommaire
Cahier des charges
Présentation générale du projet
Reprendre la carte du stage Plateforme robotique pour l'enseignement secondaire.
Remplacer l'ATMega328P traversant par un ATMega328P de surface mais soudable à la main. Trouvez un quartz de surface plus compact. Minimiser les via.
Réaliser deux mini-cartes pour réaliser des capteurs I2C. Les mini-cartes doivent comporter un connecteur RJ11 pour se connecter vers la carte mère et un connecteur RJ11 pour chaîner un autre capteur. L'un des capteurs doit être un capteur d'humidité et de température, le second doit être un capteur de pression. Si possible trouver des composants de surface pour les capteurs I2C. Une sonde étanche pour le capteur de température serait appréciée.
Ecrire les fonctions permettant de récupérer les valeurs des capteurs. Ces fonctions doivent être écrites pour avr-gcc. Pour la partie I2C vous pouvez vous baser sur le projet IMA4 ordonnanceur de 2014/2015 (Malette Arduino éducative I).
Créer un châssis unique pour les deux motorisations avec des fixations propres sans utilisation de fil de fer.
Avancement du Projet
Cahier des charges
Afin d'optimiser et améliorer le robot mobile dont il est question, nous allons chercher à réduire la taille de certains composants électroniques et ajouter la fonction suivante :
Possibilité d'ajouter des capteurs en chaîne.
Pour cela, il est convenu d'utiliser deux types de capteurs dans un premier temps : un capteur de pression et un capteur de temperature/humidité. Il est convenu qu'il serait appréciable d'avoir des capteurs étanche à la plongée dans l'eau (IP67 ou supérieure serait idéal).
Enfin, le châssis devra être retravaillé pour être en une seule pièce et contenir l'ensemble des composants déjà existants.
Possibilites Hardware
Mini-carte Temperature
Ce capteur repond a toutes les contraintes : I2C, SMD, temperature et humidite, de taille correcte. Il a besoin d'etre soude a l'aide d'un four a refusion.
2) http://fr.farnell.com/honeywell/hih6130-021-001/capteur-humidicon-5-soic-8/dp/1961727
Ce capteur repond au cahier des charges. il demande d'etre alimente en 3.3V et demande donc un regulateur de tension. Il est soudable a la main.
3) Une autre solution envisageable serait de differencier deux capteurs, un de temperature et un d'humidite, sur la meme carte avec des adresses I2C differentes. En regardant chez le fournisseur Farnell, le prix semble superieur a la seconde solution qui offre les memes fonctionnalites/caracteristiaues en un seul composant.
Si l'on souhaite eviter l'utilisation d'un four a refusion, le second capteur est la solution. Si l'utilisation de ce four est possible, la premiere solution semble la plus adapte avec un circuit simple et un prix inferieur.
Mini-carte Pression
1) http://fr.farnell.com/honeywell/asdxavx010ng2a5/capteur-jauge-10-in-h2o-axial/dp/1784667
Ce capteur offre une mesure de pression differentielle entre la pression atmospherique courante et la pression qu'on lui applique. Alimente en 5V et de taille raisonnable, il communique en I2C avec le systeme.
2) http://fr.farnell.com/honeywell/asdxacx030pa7a5/capteur-30psi-absolue-axial/dp/1784657
Ce capteur offre une mesure de pression absolue. Alimente en 5V et de taille raisonnable, il offre lui aussi une communication I2C.
3) http://fr.farnell.com/honeywell/sscmann060pg2a3/sensor-60psi-smd-axial-gauge/dp/1823239
Ce capteur offre une mesure de pression diffenretielle comme le premier. Alimente en 3.3V et de taille legerement inferieur au precedent, il permet de communiquer en I2C.
Parmi ces trois capteurs, les deux premiers sont traversants tandis que le dernier est SMD. Je pense que cela n'est pas un probleme si l'on considere que l'avantage du SMD est le gain de place et l'economie financiere du au percage. Notre carte comportant principalement deux connecteurs RJ11, ce nouveau capteur ne viendra pas augmenter la taille de la carte ni rajouter un surcout de percage.
Le troisieme composant, SMD, existe aussi en pression absolu mais n'est plus disponible chez Farnell. De plus, son prix eleve ne favorise pas ce choix.
Au vu de l'application voulu, je pense que le second capteur est le plus adapte : pression absolu, I2C, taille correcte, prix abordable. Son prix legerement superieur sera compense par la suppression des composants necessaires a l'adaptation en tension et la possibilite de faire la carte en une seule couche au lieu de deux.
Liste de composants
Carte principale
Carte Temperature/Humidite
Composant | Quantite | Lien |
---|---|---|
Capteur Temp/Humi | 1 | http://fr.farnell.com/sensirion/sht21/capteur-d-humidite-temp-3x3mm/dp/1855468 |
Regulateur de tension | 1 | http://fr.farnell.com/texas-instruments/tps79325dbvr/regulateur-ldo-2-5v-sot-23/dp/1460963 |
Resistances 10 Kohm | 2 | par 5000 : http://fr.farnell.com/multicomp/mc0063w0603110k/res-couche-epaisse-10k-1-0-063w/dp/2130939
par 50 : http://fr.farnell.com/multicomp/mc0063w0603110k/res-couche-epaisse-10k-1-0-063w/dp/9330399RL |
Resistances 100 Kohm | 1 | par 5000 : http://fr.farnell.com/multicomp/mc0063w06031100k/res-couche-epaisse-100k-1-0-063w/dp/2131019
par 10 : http://fr.farnell.com/multicomp/mc0063w06031100k/res-couche-epaisse-100k-1-0-063w/dp/9330402 |
Condensateur 0.1uF | 2 | par 10 : http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834 |
Condensateur 0.47 uF | 1 | par 5 : http://fr.farnell.com/tdk/c1608x7r1h474k080ac/condensateur-mlcc-x7r-470nf-50v/dp/2346908 |
RJ11 femelle | 2 | https://www.sparkfun.com/products/132 |
Carte Pression
A meetre a jour : resistances / regulateur / capacites
Composant | Quantite | Lien |
---|---|---|
Capteur de pression | 1 | http://fr.farnell.com/measurement-specialties/ms563702ba03-50/sensor-barometric-0-01-1-2bar/dp/2362663 |
Regulateur de tension | 1 | http://fr.farnell.com/texas-instruments/tps79325dbvr/regulateur-ldo-2-5v-sot-23/dp/1460963 |
Resistances 10 Kohm | 2 | par 5000 : http://fr.farnell.com/multicomp/mc0063w0603110k/res-couche-epaisse-10k-1-0-063w/dp/2130939
par 50 : http://fr.farnell.com/multicomp/mc0063w0603110k/res-couche-epaisse-10k-1-0-063w/dp/9330399RL |
Condensateur 0.1uF | 1 | par 10 : http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834 |
RJ11 femelle | 2 | https://www.sparkfun.com/products/132 |
Divers
3 cables RJ11 male-male
Schématique
Carte principale
La carte principale est realisee en se basant sur celle deja realisee pour la plateforme robotique. L'atmega etant remplace par un atmega de surface, les pins sont quelques peu differentes. L'equivalence est visible sur l'image ci-dessous :
On remarque aussi le changement du quartz ainsi que l'ajout d'un connecteur RJ11 femelle pour la connection I2C. L'ajout de cette connection implique de changer le branchement de "capteur_ligne2" et "capteur_ligne3" qui etait branches sur les ports SDA et SCL de l'atmega.
On obtient alors le schematique suivant :
Carte temperature
Il est conseille d'integrer le capteur de temperature choisi dans le circuit suivant (la tension d'alimentation conseillee du nouveau capteur est 3.0V et non 1.8V) :
Pour cela, il faut donc se pencher sur un regulateur de tension afin d'avoir une tension fiable et sans variation en entree. Le regulateur choisi est quant a lui conseille dans le circuit suivant :
En prenant en compte ces elements, on obtient donc le schematique complet de la mini-carte temperature suivant :
Carte pression
documentation capteur : pull up ...
documentation regulateur : resistances capa etc
En prenant ces specificites en compte, on obtient le schematique suivant pour cette mini carte :
PCB
Les mini-cartes seront normees en dimension et en placement. Les percages pour les fixations sont places en coordonnees (25.042, 1.943) et (2.027, 53.684). Les mini-cartes auront pour dimension 31x59.
Carte principale
Pistes : 16;il
Vias : 0.4mm diameter / ring 0.3mm
Mini-carte Temperature
Pistes : 16mil
vias : 0.4mm diameter / ring 0.3mm
De la place est prevu autour du capteur de temperature pour que ce dernier ne soit pas influence par la chauffe possible des composants alentours.
Mini-carte Pression
Pistes : 16mil
vias : 0.4mm / ring 0.3mm
Programme C
Dans un premier temps, les differentes connections sont initialisees : i2c, serie, capteurs.
Ensuite, une boucle infinie prend place. La lecture des capteurs se fait de facon alterne avec un delai de 100ms entre deux capteurs. Si un capteur ne repond pas 5 fois d'affiles, il est choisi d'envoyer un code d'erreur a la place de la reponse habituelle.
Initialisation
Le port serie est initialise a 9600 baud par seconde. Apres l'initialisation dues deux ports, un delai de 50ms est prevu afin de laisser le temps au differents capteurs de s'allumer.
Le capteur de pression ne necessite pas d'initialisation particuliere. Le capteur de temperature/humidite quant a lui peut etre parametre pour choisir la resolution voulue.
Une resolution de 11bit est choisi pour chacun. Cette resolution est choisi car elle offre un temps de reponse inferieur a 15ms pour les deux mesures. Avec une amplitude de 175.72 degre, la precision en temperature est de 0.086degre celsius. Le capteur d'humidite offre une precision de 0.049%.
Boucle
Les capteurs sont interroges un par un. Si un capteur ne repond pas, une variable est incrementee, sinon elle est remise a zero. Une fois chaque capteur interroge, les variables sont evaluees. Si le nombre d'erreur est inferieur a la limite fixee, les valeurs sont envoyes sur le port serie, sinon un code d'erreur est envoye.
Frame pour les valeurs : adresse - registre - valeurs
Frame pour le code d'erreur : adresse - 0x55 - 0xFF
Entre deux envois de capteurs, un delais de 100ms est utilise pour temporise la communication.
Librairie I2C
Dans la librairie I2C, on s'interesse aux fonctions pour se conneter aux differents elements et pour lire/ecrire.
- i2c_receive(address, buffer, length) : pour lire les donnees d'une cible sans utiliser de registre
- i2c_readReg(address, register, buffer, length) : pour lire les donnees d'un registre particulier d'une cible
Ces deux donctions utilisent les fonctions telles que i2c_start et i2c_stop pour se connecter et se deconnecter aux cibles ainsi que i2c_write et i2c_read_ack pour faire des demandes de lecture et lire la reponse. Dans le fonction i2c_readReg, un delai de 1ms a ete ajoute juste apres la demande de lecture. Ce delai est present car le capteur de pression recommande d'inserer un delai de 20us juste apres la requete. Le choix d'un delai plus grand est fait par securite pour etre fonctionnel avec tout type de capteur qui pourrait etre ajoute a l'avenir.
Code arduino : Fichier:-2016-IMA4-EC1-Code arduino-v1.zip
Livrables
Schematique & PCB : Fichier:IMA4-EC1-Schematique&PCB-3.zip
Soudage et tests
Lors du soudage des cartes, plusieurs problèmes ont été détectés :
- LEDs TX/RX sur le FTDI montées à l'envers : elles ont été désignées comme si les pins passaient de l'état bas à l'état haut lors d'une transmission. En réalité, ces pins passent d'un état tristate à un état bas. Pour résoudre ce problème, les LEDs ont été retournées et les résistances soudées différemment pour pouvoir les ramener vers le 5V et non le GND.
- le quartz nécessitait d'avoir deux pads reliés. Ces pads n'ont pas été reliés, la piste n'ayant pas été imprimés. La solution a donc été de relier les pistes par un fil volant. Le quartz ne fonctionnant toujours pas, un quartz traversant directement sur les pins des condensateurs.
- Pour installer le bootloader, un arduino uno est utilisé avec le programme ArduinoISP. L'atmega 328P-AU utilisé pour ce projet est le même que celui de l'arduino Nano. Il faut donc choisir
Sources
Documentation sur l'I2C de Honeywell (capteur de pression) : http://forums.parallax.com/uploads/attachments/63206/81041.pdf