Optimisation de cartes de contrôle de robot mobile

De Wiki de Projets IMA
Révision datée du 23 août 2016 à 01:06 par Mherwegh (discussion | contributions) (Carte Pression)

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

1) http://fr.farnell.com/silicon-labs/si7034-a10-im/capteur-temp-humidite-4-deg-c/dp/2473678?ost=temperature+humidite&selectedCategoryId=&categoryId=700000004362&searchView=table&iscrfnonsku=false

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

Composant Quantite Lien
Atmega 1 http://fr.farnell.com/atmel/atmega328p-au/micro-8-bits-avr-32k-flash-32tqfp/dp/1715486?selectedCategoryId=&exaMfpn=true&categoryId=&searchRef=SearchLookAhead&searchView=table&iscrfnonsku=false
Quartz 1 http://fr.farnell.com/epson/q22fa23800181-fa-238-16-mhz-12-5pf/quartz-fa-238-16mhz-50ppm-12pf/dp/1712816

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

Composant Quantite Lien
Capteur de pression 1 http://fr.farnell.com/measurement-specialties/ms563702ba03-50/sensor-barometric-0-01-1-2bar/dp/2362663
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 :

-2016-IMA4-EC1-Equivalence Atmegas.png

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 :

-2016-IMA4-EC1-Carte principale-v4.png

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) :

-2016-IMA4-EC1-TypicalCircuit Capteur TempHumi.gif

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 :

-2016-IMA4-EC1-TypicalCircuit RegTension.gif

En prenant en compte ces elements, on obtient donc le schematique complet de la mini-carte temperature suivant :

-2016-IMA4-EC1-Carte Temperature-v6.png

Carte pression

D'apres la documentation du capteur, les pins SDA et SCL demandent un resistance pull-up superieur a 1kohm et l'alimentation doit etre reliee a la masse avec une capacite comprise entre 0.1uF et 0.47uF. Il est donc choisi d'utiliser des resistances de 10kohm et une capacite de 0.1uF pour etre sur le meme format que la carte de temperature.

En prenant ces specificites en compte, on obtient le schematique suivant pour cette mini carte :

-2016-IMA4-EC1-Carte Pression-v2.png

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

-2016-IMA4-EC1-PCB Principale-v3.png

Mini-carte Temperature

Pistes : 16mil

vias : 0.4mm diameter / ring 0.3mm

-2016-IMA4-EC1-PCB Temperature-v9.png

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 : 24mil

vias : 0.4mm / ring 0.3mm

-2016-IMA4-EC1-PCB pression-v4.png

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-2.zip

Sources

Documentation sur l'I2C de Honeywell (capteur de pression) : http://forums.parallax.com/uploads/attachments/63206/81041.pdf