Micro-robots auto-organisés : Différence entre versions

De Wiki d'activités IMA
(Code)
 
(15 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<include nopre noesc src="/home/pedago/pimasc/include/video-MicrorobotsOrganises-iframe.html" />
 +
__TOC__
 +
<br style="clear: both;"/>
 
= '''Présentation générale du projet''' =
 
= '''Présentation générale du projet''' =
  
Ligne 168 : Ligne 171 :
 
  | 11/02 - Conception de la carte et des librairies sous eagle
 
  | 11/02 - Conception de la carte et des librairies sous eagle
 
  |-
 
  |-
  ! scope="row" | Semaine x Vacances de février
+
  ! scope="row" | Vacances de février
 
  | X
 
  | X
 
  | Conception de la carte et des librairies sous eagle. Fin du schematic
 
  | Conception de la carte et des librairies sous eagle. Fin du schematic
Ligne 203 : Ligne 206 :
 
  | Programmation et partie mécanique
 
  | Programmation et partie mécanique
 
  |-
 
  |-
   ! scope="row" | Vacance
+
   ! scope="row" | Vacance d'Avril
 
  | x
 
  | x
 
  | Soudure et partie mécanique
 
  | Soudure et partie mécanique
Ligne 209 : Ligne 212 :
 
  |-
 
  |-
 
  ! scope="row" | Semaine 10
 
  ! scope="row" | Semaine 10
  | Communication
+
  | Programmation
  | Fin soudure & Communication
+
  | Fin soudure & Programmation
 
  | x
 
  | x
 +
|-
 +
! scope="row" | Semaine 11
 +
| Programmation
 +
| Programmation
 +
| Programmation
 
  |-
 
  |-
 
  |}
 
  |}
Ligne 306 : Ligne 314 :
  
 
Dans un soucis d'économie nous voulions que le contrôleur fonctionne avec son horloge interne de 8 MHz. Dans ce mode de fonctionnement le contrôleur n'a pas besoin d'oscillateur à quartz. Ce mode est difficile à mettre en oeuvre car il faut configurer l'atmega328p en 8 MHz à l'aide de l'IDE arduino.
 
Dans un soucis d'économie nous voulions que le contrôleur fonctionne avec son horloge interne de 8 MHz. Dans ce mode de fonctionnement le contrôleur n'a pas besoin d'oscillateur à quartz. Ce mode est difficile à mettre en oeuvre car il faut configurer l'atmega328p en 8 MHz à l'aide de l'IDE arduino.
Nous ne sommes pas parvenu à configurer le contrôleur en 8 MHz donc nous avons porté notre système sur une breadboard afin de tester le programme.
+
Nous ne sommes pas parvenu à configurer le contrôleur en 8 MHz donc nous avons porté notre système sur une breadboard afin de tester le programme. Nous avons placer des phototransistors selon la même configuration que sur le robot. Les moteurs sont simulés par des LEDs. Ces dernières sont éteintes quand les moteurs sont éteints et allumées quand les moteurs sont allumés. Pour le microcontrôleur nous avons utilisé un atmega328p en traversant.
 +
 
 +
Nous avons codé notre robot en langage arduino.
 +
 
 +
[[Fichier:Breadboard.JPG‎|thumb|center|alt=Texte alternatif|système porté sur la breadboard]]
  
 
=== Code  ===
 
=== Code  ===
  
 
Nous avons programmé le contrôleur de façon à ce qu'il se dirige vers une source de rayonnement infrarouge. A la manière d'un animal vers de la nourriture.
 
Nous avons programmé le contrôleur de façon à ce qu'il se dirige vers une source de rayonnement infrarouge. A la manière d'un animal vers de la nourriture.
 +
Nous utilisons les phototransistors en interruption. Cependant il n'y a qu'un seul vecteur d'interruption par port. Il est donc nécessaire que le programme d'interruption scrute toutes les broches du port pour savoir laquelle a déclenché l'interruption.
 +
Lorsqu'un phototransistor passe à l'état haut il déclenche un programme d'interruption qui scrute le port C de l'Atmega afin de trouver quel phototransistor a déclenché l'interruption.
 +
 +
Après différents tests nore programme fonctionne de la manière suivante.
 +
 +
Lorsque le phototransistor à l'avant du robot capte des infrarouges, les deux moteurs sont activés pour faire avancer le robot.
 +
 +
Lorsqu'un des phototransistors de gauche capte, un seul moteur tourne pour placer le robot face à la source infrarouge.
 +
 +
Il en va de même pour le côté droit.
 +
 +
Lorsque le phototransistor à l'arrière capte un seul moteur tourne pour retourner le robot.
 +
 +
Quand aucun phototransistor ne capte, les moteurs sont à l'arrêt.
 +
 +
Le port sur lequel sont connectés les phototransistors est utilisé en interruption. C'est dans le programme d'interruption qu'est réalisé la gestion des phototransistors. En dehors du programme d'interruption, le code réalise une boucle sans fin dans laquelle les moteurs sont à l'arrêt.
 +
 +
Voici le code Arduino:
 +
 +
[[Média:CodeArduino_micro_robot.txt]]
  
 
== Partie mécanique ==
 
== Partie mécanique ==
  
Notre projet nous impose d'avoir un robot le plus petit possible et à bas coût. Nous avons choisi d'utiliser notre carte électronique comme base de notre robot. Comme nos robots doivent vibrer pour avancer, nous placerons des petites pattes métalliques pour que le robot soient surélevés.  
+
Notre projet nous impose d'avoir un robot le plus petit possible et à bas coût. Nous avons choisi d'utiliser notre carte électronique comme base de notre robot. Comme nos robots doivent vibrer pour avancer, nous placerons des petites pattes métalliques pour que le robot soient surélevés. Pour ces pattes métalliques nous utilisons des connecteurs grande taille que nous soudons aux quatre coins de la carte.
 +
 
 +
Pour alimenter nos robots, nous devrions avoir des batteries. Ces batteries sont cependant un peu grandes (7 cm de longueur), mais c'était le format le moins cher. Pour fixer les batteries aux robots, nous avons décidé de créer une petite pièce avec l'imprimante 3D du Fablab. Cette solution nous permettra de construire une pièce légère. Par choix, nous simplifions notre pièce, la batterie n'étant toujours pas arrivé (Arrivée le 27 Avril) nous avons trouvé une solution de secours à la batterie (alimentation externe). Nous simplifions notre pièce afin qu'elle ne fasse office que de support moteurs.
 +
 
 +
Pour emboîter la carte électronique et notre pièce  3D, nous avons percé la carte électronique à quatre endroits différents lors du routage. Ces quatre trous de fixation ont été placés là où la carte électronique nous le permettait. Nous avons donc construit notre pièce 3D en fonction de ces 4 points de fixation.
 +
 
 +
Cette pièce est donc utilisé comme support des moteurs vibreurs. Pour la conception, nous devons prendre en compte que les moteurs doivent être placés à égales distance du centre de gravité de la carte. En effet, pour commander une avance en ligne droite du robot, nous devons alimenté nos deux moteurs à condition qu'ils soient placés à égales distance du centre de gravité du robot. Nous supposons donc que le centre de gravité de la carte se trouve au milieu de la carte.
 +
 
 +
<gallery widths=200px>
 +
Fichier:3D.JPG|Support moteur
 +
Fichier:Robot réel.jpg|Robot
 +
</gallery>
 +
 
 +
 
 +
= '''Fichier rendu''' =
  
Pour alimenter nos robots, nous devrions avoir des batteries. Ces batteries sont cependant un peu grandes (7 cm de longueur), mais c'était le format le moins cher. Pour fixer les batteries aux robots, nous avons décidé de créer une petite pièce avec l'imprimante 3D du Fablab. Cette solution nous permettra de construire une pièce légère.
+
Rapport de projet : [[Fichier:Rapport_P30_Casier_Debock_.pdf‎]]
Pour emboîter la carte électronique et notre pièce en 3D, nous avons percé la carte électronique à quatre endroits différents. Ces quatre trous de fixation ont été placés là où la carte électronique nous le permettait. Nous avons donc construit notre pièce 3D en fonction de ces 4 points de fixation.
 

Version actuelle datée du 14 juin 2016 à 08:28


Vidéo HD


Présentation générale du projet

Objectif

Le but de ce projet est de concevoir et fabriquer des robots mobiles relativement petits, simples et peu coûteux. Les robots devront pouvoir communiquer entre eux par infrarouge. La simplicité et le bas coût de fabrication des robots doit permettre d'en fabriquer en nombre suffisant pour simuler des comportements d'essaim d’insectes.


Cahier des charges

Suite à un échange de mails avec Alexandre Boé, nous sommes parvenu à un premier cahier des charges ainsi qu'a une liste de matériel.

Suite à une entrevue avec notre tuteur Alexandre Boé nous avons remanier notre cahier des charges afin de se rapprocher de l'objectif. En effet notre premier cahier des charges décrivait un robot roulant, lourd et un peu cher. Notre cahier des charges actuel décrit un robot qui se déplace par vibrations.


Partie mécanique

  • Par soucis d'économie et de limitation de la masse du robot, le châssis du robot sera constitué de la carte électronique et de cylindres métalliques très fins faisant offices de pattes.
  • Le robot se déplacera par des vibrations générées par deux moteurs à courant continu utilisés dans les vibreurs de téléphones ou de manettes.


Partie électronique

  • Toute l'électronique (que ce soit la gestion d'énergie, les capteurs ou l'intelligence embarquée) sera placée sur un seul circuit imprimé.
  • L'énergie sera fournie par une batterie 5V (la capacité sera à déterminé après estimation de la consommation électrique du robot).
  • Un régulateur de tension linéaire fournira l'énergie de la batterie au robot.
  • Les moteurs seront commandés par des montages hacheurs constitués d'un transistor et d'une diode.
  • La communication infrarouge sera réalisée par plusieurs ensembles émetteurs/récepteurs. Les émetteurs seront des diodes infrarouges et les récepteurs seront des photos transistors.
  • Un microcontrôleur ATmega328P-au contiendra l'intelligence du robot.

Liste de matériel nécessaire

Composants Liens vers fournisseurs Prix unitaire Quantité pour 1 robot
Microcontrôleur Atmega 328P-AU [1] 2,74€ 1
Moteur vibreur [2] 3,65€ 2
Batterie lithium ion [3] 13,06€ 1
Chargeur de batterie lithium ion [4] 0,79€ 1
Régulateur de tension [5] 0,75€ 1
Cable micro USB / USB X X 1
Micro USB - type B connecteur [6] 1,76€ 1
Photo transistor [7] 0,16€ 8
LED IR [8] 0,16€ 4
LED CMS rouge [9] 0,19 2
LED CMS verte [10] 0,13 1
LED CMS bleu [11] 0,31 1
Interrupteur X X 1
Transistor NPN [12] 0,25€ 2
Diode (roue libre) [13] 0,25€ 2
Résistance 470 ohm [14] 0,0171€ 12
Résistance 4,7 kohm [15] 0,0185€ 10

Liste des tâches

  • Spécification des besoins
  • Étude de consommation de la carte
  • Réalisation de la carte électronique
    • Choix des composants (valeurs des résistances, condensateurs)
    • Réalisation du PCB
  • Dimensionner le corps du robot
  • Fabrication d'un premier robot
  • Test de la carte
  • Fabrication du deuxième robot
  • Programmation de l'atmega

Répartition du travail

Avant le début officiel de notre projet nous avons rencontré Mr Boé pour mettre au point notre cahier des charges, notamment sur la technologie à utiliser et la taille des robots.

Lundi 12-14h Mercredi 14-18h Jeudi 8-10h
Semaine 1 25/01 - Choix des actions des robots 27/01 - Recherche des composants 26/01 - Début du schéma de la carte
Semaine 2 01/02 - Recherche des composants 03/02 - Modification des composants (traversants -> CMS) 04/02 - Conception du schéma de la carte
Semaine 3 08/02 - Conception de la carte sous eagle 10/02 - Conception de la carte et des librairies sous eagle 11/02 - Conception de la carte et des librairies sous eagle
Vacances de février X Conception de la carte et des librairies sous eagle. Fin du schematic X
Semaine 4 Modification schematic et librairies Début routage et librairies Routage et librairies
Semaine 5 Fin des librairies et Routage Routage et test communication routage et test communication
Semaine 6 Routage Fin routage puis discution de la taille de la carte Remaniement du routage pour que la carte soit suffisement petite
Semaine 7 Routage Fin routage et design partie mécanique Communication
Semaine 8 Communication Communication Communication
Semaine 9 férié Programmation et partie mécanique Programmation et partie mécanique
Vacance d'Avril x Soudure et partie mécanique x
Semaine 10 Programmation Fin soudure & Programmation x
Semaine 11 Programmation Programmation Programmation

Etude préalable

Conception carte électronique

Lors des deux premières semaines, nous avons fait essentiellement des recherches sur les composants pour concevoir notre carte et sur les mini-robots déjà existants.

Carte électronique

schématic

D'après nos premières recherches, il faudrait que nous options pour une géométrie circulaire pour la base du robot, cette forme nous permet d'avoir l'aire la plus grande avec la forme la plus petite. De plus, Notre robot n'ayant pas besoin de faire beaucoup d'actions, et par besoin de maximiser la place nous allons essayer d'avoir notre carte électronique comme base du robot.

Pour la carte électronique, nous avions commencé par chercher des composants traversants, mais étant donné que nous voulons construire un robot le plus petit possible, nous avons modifié tous nos composants par des composants CMS pour optimiser la place. Dans le choix de nos composants, nous avons fait attention aux tensions de sortie afin d'avoir du 3V. Nous avons choisi nos composants de manière à ce qu'ils supportent ces 3V.

Le régulateur de tension

Ce régulateur va permettre d'obtenir une tension constante quelque soit l'état de la batterie.

Les moteurs vibreurs

Pour avoir un mouvement rectiligne, nous devrons positionner nos moteurs à égale distance du centre de gravité du robot. Pour ce faire, nous allons créer une pièce à l'imprimante 3D. Cette pièce aura plusieurs utilités, dans un premier temps elle nous permettra de fixer la batterie sur le robot, puis nous disposerons nos moteurs de chaque côté de cette pièce afin qu'il soient à égale distance du centre de gravité de notre carte électronique. Ainsi, cette pièce aura donc les dimensions de notre batterie.

Placement des éléments

schématic

Pour le routage de la carte électronique, certains de nos composants doivent être positionnés à des emplacements bien spécifiques. Les émetteurs et les récepteurs doivent être positionnés tout autour du robot afin d'obtenir la meilleure communication possible. Nous avons choisi, de positionner nos 4 émetteurs aux différents points cardinaux, et nos récepteurs aux points cardinaux ainsi qu'entre ces derniers.

De plus, pour faciliter l'utilisation des robots, nous plaçons le micro USB au bord de la carte. Une fois, tout ces éléments placés nous avons positionné les autres éléments de manière à optimiser le routage de la carte.

Étant donné que certains de nos composants sont traversants et d'autres en CMS, nous pouvons faire du double face, ce qui nous simplifie un peu le routage.

Cependant, à la fin de ce premier routage, nous nous sommes rendus compte que notre carte était encore un peu grande. Nous avons choisi d'optimiser notre carte en recommençant le routage plutôt que de l'imprimer pour la tester. Certains des composants ont changé de place. Nous obtenons au final une carte électronique carré de 7cm de côté. Idéalement, nous aurions voulu une carte électronique circulaire puisque c'est la forme géométrique qui optimise le mieux l'espace. Étant à mi-parcours du projet, nous préférons rester sur notre carte carré qui optimise déjà un peu plus l'espace.

Soudure

carte électronique
carte électronique


Nous avons reçu notre carte, nos gardes autour des pistes étaient légèrement trop petites et nous avons eu des bavures sur certaines pistes, pour y remédier, nous avons utiliser un scalpel pour creuser les pistes. Puis ayant de nombreux composants CMS, nous avons pris contact avec l'entreprise INODESIGN qui nous a conseillé et nous a permis de souder notre carte dans leurs locaux.

Nous avons par la suite souder tous les autres composants, dans cet ordre: - Les pattes qui permettrons au robot d'avancer. Pour ces pattes, nous utilisons des petites tiges métalliques. Nous soudons ces pattes en premier, car nous avons les émetteurs et les récepteurs à souder des deux côtés de la carte. Cela, nous permet d'avoir la carte surélevée.

- Les émetteurs, les phototransistors sur la face du dessus du robot. Nous plaçons 8 émetteurs à égales distance les uns des autres sur les extrémités du robot.

- Les récepteurs sur la face du dessous du robot. Nous les plaçons de manière a ce qu'ils ne dépassent pas du robot et n'interfèreront pas avec les émetteurs placés sur le dessus du robot.

- Les via, on utilise les chutes des branches des émetteurs et récepteurs pour les effectuer.

- L'interrupteur ON/OFF, les pins de connections ainsi que les moteurs.

Communication entre les différents robots

Pour la communication de nos robots nous avons eu plusieurs idées. L'idée retenue est que chaque robot émettra à une fréquence propre. Ainsi, nous pourrons faire la différence entre les robots chasseurs et les autres robots.

Notre objectif est de pouvoir construire au minimum deux robots qui communiqueront ensemble. L'un sera le chasseur et essayera d’attraper le deuxième robot qui simulera par exemple une fourmi.

Test

Nous avons choisi comme communication, la communication par infrarouge. Pour cela nous avons utilisé une plaque d'essai afin de vérifier que la communication est possible. Nous plaçons dans un premier temps, un récepteur ainsi qu'un émetteur face à face. Une LED Rouge devra s'allumer lorsque la communication entre ces deux capteurs est interrompue. Ce test va nous permettre de connaître les limites de notre système de communication : angle d'inclinaison, distance. -- Les tests A permettent de vérifier que cette communication marche correctement -- Les tests B permettent de vérifier la distance

En conclusion, nous pouvons utiliser cette communication pour nos robots. Il faudra cependant soigner la disposition de nos récepteurs et émetteurs pour qu'ils soient à la même hauteur. Nous avons de plus un angle de communication acceptable pour notre utilisation. En effet, nos robots ne font que vibrer, ils n'auront pas un angle de tangage très important. Nous avons une distance de communication entre nos deux robots d'environ 15 cm. Ce qui nous semble acceptable.

Programmation

Le contrôleur étant un atmega328p, le robot peut être programmé en C ou en langage Arduino. La programmation se fait avec les broches ISP du contrôleur. Nous avons utilisé une arduino uno en tant que programmateur ISP.

Dans un soucis d'économie nous voulions que le contrôleur fonctionne avec son horloge interne de 8 MHz. Dans ce mode de fonctionnement le contrôleur n'a pas besoin d'oscillateur à quartz. Ce mode est difficile à mettre en oeuvre car il faut configurer l'atmega328p en 8 MHz à l'aide de l'IDE arduino. Nous ne sommes pas parvenu à configurer le contrôleur en 8 MHz donc nous avons porté notre système sur une breadboard afin de tester le programme. Nous avons placer des phototransistors selon la même configuration que sur le robot. Les moteurs sont simulés par des LEDs. Ces dernières sont éteintes quand les moteurs sont éteints et allumées quand les moteurs sont allumés. Pour le microcontrôleur nous avons utilisé un atmega328p en traversant.

Nous avons codé notre robot en langage arduino.

Texte alternatif
système porté sur la breadboard

Code

Nous avons programmé le contrôleur de façon à ce qu'il se dirige vers une source de rayonnement infrarouge. A la manière d'un animal vers de la nourriture. Nous utilisons les phototransistors en interruption. Cependant il n'y a qu'un seul vecteur d'interruption par port. Il est donc nécessaire que le programme d'interruption scrute toutes les broches du port pour savoir laquelle a déclenché l'interruption. Lorsqu'un phototransistor passe à l'état haut il déclenche un programme d'interruption qui scrute le port C de l'Atmega afin de trouver quel phototransistor a déclenché l'interruption.

Après différents tests nore programme fonctionne de la manière suivante.

Lorsque le phototransistor à l'avant du robot capte des infrarouges, les deux moteurs sont activés pour faire avancer le robot.

Lorsqu'un des phototransistors de gauche capte, un seul moteur tourne pour placer le robot face à la source infrarouge.

Il en va de même pour le côté droit.

Lorsque le phototransistor à l'arrière capte un seul moteur tourne pour retourner le robot.

Quand aucun phototransistor ne capte, les moteurs sont à l'arrêt.

Le port sur lequel sont connectés les phototransistors est utilisé en interruption. C'est dans le programme d'interruption qu'est réalisé la gestion des phototransistors. En dehors du programme d'interruption, le code réalise une boucle sans fin dans laquelle les moteurs sont à l'arrêt.

Voici le code Arduino:

Média:CodeArduino_micro_robot.txt

Partie mécanique

Notre projet nous impose d'avoir un robot le plus petit possible et à bas coût. Nous avons choisi d'utiliser notre carte électronique comme base de notre robot. Comme nos robots doivent vibrer pour avancer, nous placerons des petites pattes métalliques pour que le robot soient surélevés. Pour ces pattes métalliques nous utilisons des connecteurs grande taille que nous soudons aux quatre coins de la carte.

Pour alimenter nos robots, nous devrions avoir des batteries. Ces batteries sont cependant un peu grandes (7 cm de longueur), mais c'était le format le moins cher. Pour fixer les batteries aux robots, nous avons décidé de créer une petite pièce avec l'imprimante 3D du Fablab. Cette solution nous permettra de construire une pièce légère. Par choix, nous simplifions notre pièce, la batterie n'étant toujours pas arrivé (Arrivée le 27 Avril) nous avons trouvé une solution de secours à la batterie (alimentation externe). Nous simplifions notre pièce afin qu'elle ne fasse office que de support moteurs.

Pour emboîter la carte électronique et notre pièce 3D, nous avons percé la carte électronique à quatre endroits différents lors du routage. Ces quatre trous de fixation ont été placés là où la carte électronique nous le permettait. Nous avons donc construit notre pièce 3D en fonction de ces 4 points de fixation.

Cette pièce est donc utilisé comme support des moteurs vibreurs. Pour la conception, nous devons prendre en compte que les moteurs doivent être placés à égales distance du centre de gravité de la carte. En effet, pour commander une avance en ligne droite du robot, nous devons alimenté nos deux moteurs à condition qu'ils soient placés à égales distance du centre de gravité du robot. Nous supposons donc que le centre de gravité de la carte se trouve au milieu de la carte.


Fichier rendu

Rapport de projet : Fichier:Rapport P30 Casier Debock .pdf