IMA4 2018/2019 P46 : Différence entre versions
(→Programmation Blockly Arduino) |
(→Application Bluetooth) |
||
Ligne 953 : | Ligne 953 : | ||
Par exemple: 0xA2 = 0b1010 00010 demande au robot d'avancer à la vitesse 100% | Par exemple: 0xA2 = 0b1010 00010 demande au robot d'avancer à la vitesse 100% | ||
+ | Apk de l'application mobile Androïde: [[Fichier:ApkRobotKit.zip]] | ||
[[Fichier:Application_BT_prog.PNG|thumb|center|Code de l'application]] | [[Fichier:Application_BT_prog.PNG|thumb|center|Code de l'application]] | ||
<div style="clear: both;"></div> | <div style="clear: both;"></div> |
Version du 29 avril 2019 à 20:22
Sommaire
- 1 Kit Robot
- 2 Présentation générale
- 3 Analyse du projet
- 4 Préparation du projet
- 5 Réalisation du Projet
- 6 Documents Rendus
Kit Robot
Présentation générale
Description
Il existe de nos jours de nombreux kits d'assemblage de robots programmables.
Ils permettent aux utilisateurs de créer leurs propres robots à l'aide de pièces, de moteurs et de capteurs. Il existe des kits pour tous les niveaux, du débutant à l'expert en robotique ; les robots sont programmables via une application mobile en Bluetooth ou via des langages de programmations (Scratch, C++, Python ...)
Le problème de ces kits est qu'ils sont souvent assez chers et surtout propriétaires. C'est à dire qu'ils ne sont pas Open-Source et que la perspective d'évolution du kit est limitée à la même marque.
Durant notre cursus, nous avons eu l'occasion de tester par exemple les kits MindStorm NXT, Bioloid et MakeBlock.
L'objectif de ce projet est d'y proposer une alternative, en concevant un kit Open-Source (open source en logiciel comme en matériel) permettant l’assemblage d’un robot et une programmation aisée et facilement modifiable à sa convenance.
Objectifs
Pour la réalisation de ce projet nous allons tout d'abord réaliser notre propre carte programmable qui sera le cerveau du robot. Elle permettra de connecter (principalement via RJ12 avec un protocole SPI ou I2C pour faciliter le câblage) les capteurs, les actionneurs, les moteurs, les modules de communication et de les contrôler facilement.
Ensuite nous trouverons un système d’alimentation du robot, proposant une autonomie correcte (par exemple batterie lithium). Nous ajouterons également un système de recharge simple et un régulateur de tension adapté aux besoins des composants du robot.
Ensuite nous allons réaliser ou adapter différents modules électroniques permettant d’aider à la conception des différents modèles (capteurs, actionneurs, modules de communication).
Ensuite nous réaliserons, à l'aide de la Découpeuse Laser et des imprimantes 3D du Fabricarium de l'école, les différentes pièces du Kit qui peuvent être facilement assemblées pour former plusieurs modèles de robots.
Enfin nous réaliserons différentes bibliothèques proposant un outil de programmation et d'utilisation simplifié du modèle et de ses modules.
Le Kit créé pourra être utilisé au club Robotech de Polytech Lille. Il permettra aux nouveaux membres de se familiariser avec la robotique, d'utiliser les machines du Fabricarium et de créer un robot.
Il pourra également être utilisé pour la coupe de France à laquelle Robotech participe chaque année. Il constituera une base solide pour la fabrication et la programmation des deux robots (primaire et secondaire)
Analyse du projet
Positionnement par rapport à l'existant
Tous les kits disponibles de nos jours possèdent des points positifs et des points négatifs (autonomie, prix, facilité de programmation, facilité d'assemblage, diversité des modèles disponibles, possibilité d'additionner plusieurs kit...)
Notre kit sera, à l'inverse de la plupart des kits existants, Open Source en matériel et en logiciel.
Les utilisateurs pourront eux-mêmes imprimer les pièces du kit grâce à des fichiers stl (imprimante 3D) et svg (Découpeuse Laser). Ils pourront également reproduire la carte et les différents capteurs, actionneurs, modules de communication grâce aux fichiers partagés et à la liste des composants nécessaires. Cela permettra une économie d'argent considérable et également à l'utilisateur de comprendre en détails avec quels composants sont réalisés tout les éléments du kit et comment ceux-ci fonctionnent. De plus si un élément du Kit ne fonctionne plus ou est défectueux, il suffit de le réimprimer. Ce n'est pas le cas des Kit déjà existants qui ne sont pas Open Sources.
Notre Kit sera simple d'utilisation avec des codes couleurs pour faciliter les branchements et la programmation.
Analyse du premier concurrent
Notre premier concurrent est la marque Makeblock. Cette marque propose différents Kits pour construire des robots.
Nous étudierons ici deux de leurs kits :
Robot mBot V1.1 et Ultimate 2.0
Voici les différentes caractéristiques de ces kits:
Connectivité
- Type d'interface: Wi-Fi ou Bluetooth
- Port de chargement USB
- Applications: Arduino IDE
- Câbles inclus: LAN (RJ-45), USB
Puissance
- Batteries requises
- Type de source d'alimentation: Non-rechargeable battery
- Tension des piles: 1,5 V
- Type de batterie: AA
- Nombre de batteries prises en charge: 4 pour le mBot et 6 pour l'Ultimate
Robot mBot V1.1
Caractéristiques
- Nombre de moteurs: 4
- Nombre de capteurs: 3
- Ligne suivante: Oui
- Support smartphone à distance: Oui
- Support d'application: Oui
- Applications: Graphical, Arduino , Python, Node JS, Mblock, Scratch
- Chargeur: Oui
- Guide de démarrage rapide: Oui
- Piles fournies: Non
Ultimate 2.0
Caractéristiques
- Nombre de pièces: 40 pièces
- Nombre de robots programmables: 1
- Chargeur: Oui
- Guide de démarrage rapide: Oui
- Piles fournies: Non
- Nombre de moteurs: 2
- Nombre de capteurs: 3
- Ligne suivante: Oui
- Nombre de haut-parleurs: 1
- Compatible avec les effets de lumière: Oui
- Couleur de la lumière: Multi
- Nombre de DEL d'éclairage: 2
- Support smartphone à distance: Oui
- Support d'application: Oui
Robot mBot V1.1: Ce Kit est l'un des moins cher du marché (100 euros), il est néanmoins moins complet que certain autres Kit. La marque revendique ce Kit comme étant spécialement conçu pour les enfants. Il permet d'apprendre facilement les bases de la programmation.
Avertissement de sécurité pour le mBot
- Pas pour les enfants âgés entre 0 et 3 ans
- À utiliser sous la surveillance directe d'un adulte
Ultimate 2.0: Ce Kit propose un ensemble de 10 configurations programmables. Ce Kit n'est pas destiné aux jeunes enfants car il contient de nombreux petits éléments et le montage se fait à l'aide de vis. Ce Kit est au prix de 400 euros.
Avantages des 2 Kits:
- Pièces très résistantes et assemblage robuste grâce aux vis
- Compatible avec plusieurs moyens et langages de programmation
- Compatibles avec des capteurs de marque autre que Mblock
- Facile d'utilisation
- Prix abordable pour le Robot mBot V1.1
Inconvénients des 2 Kits:
- Autonomie limitée
- Nombre et types de pièces très limités et non remplaçables pour le Robot mBot V1.1
- Non évolutif
Analyse du second concurrent
Notre second concurrent est la marque LEGO. Elle propose des Kits de programmation de robots qui sont plus accessibles aux enfants. Le construction de ce kit est simplifiée: il n'y a pas besoin de vis.
Ces deux kits sont très utilisés pour l'enseignement et l'éducation des sciences et techniques.
Les prix de ces Kits sont autour de 300 euros.
Voici les différentes caractéristiques de ce kit:
- Brique intelligente programmable NXT 4 ports d'entrée et 3 ports de sortie de forme proche du standard RJ12
- Connexions USB et Bluetooth
- Trois servomoteurs interactifs
- Quatre capteurs : sonore, photosensible, ultrason, tactile (possibilité d'utiliser d'autres capteurs qui ne sont pas dans le Kit :couleur, autodirecteur infrarouge, gyroscopique, infrarouge, accéléromètre, boussole...)
- NXT-G, le logiciel de programmation graphique, basé sur Labview compatible avec Windows et Mac
- Alimentation : six piles AA (1,5 V) ; une batterie 9 V est commercialisée par Lego.
Il est possible d'utiliser des accessoires supplémentaires (non fournis dans la boite principale) comme une clé Bluetooth USB, une batterie rechargeable, des moyens de communication Wi-Fi, XBee (modules radio compatibles), des multiplexeurs, des panneaux solaires, des pilotes de relais, des roues holonomiques...
Avantages
- Logiciel de programmation simplifié
- Facile à assembler
Inconvénients
- Capteurs et moteurs propriétaires cher à l'achat
- Puissance des actionneurs limitée
- Possibilité limitée du nombre de capteurs (4) et d'actionneurs (4) sur un même robot à cause du nombre de ports disponibles
Scénario d'usage du produit ou du concept envisagé
Scénario:
Hervé est en Peip à Lille et il s'est découvert une nouvelle passion pour la Robotique. Il a vu plusieurs reportages et vidéos sur le sujet. Il veut travailler plus tard dans ce domaine. Il décide alors qu'il ira en IMA . En attendant, il décide d'apprendre toutes les facettes de cette discipline. Mais il ne sait pas par quoi commencer. Il veut apprendre étape par étape et se renseigne alors sur des moyens d'apprendre la robotique facilement. Sur internet il découvre l'existence de Kit de robotique programmable qui constitue une excellente base de Robotique et qui sont accessibles aux débutants. Mais ils sont assez chers et il n'a pas les moyens (il est étudiant).
Il découvre alors l'existence du Club "Robotech". Quelle chance ! Les membres du club l'informent de l'existence d'un tout nouveau Kit crée par des étudiants pour leur projet de 4ème année. Hervé se renseigne alors : ce kit est Open Source et il pourra grâce à l'imprimante 3D et la découpeuse Laser du Fab fabriquer les pièces de son Kit. Cela lui permettra également de faire des économies d'argent. Pour ce qui est des capteurs et de la carte, les membres de Robotech (qui sont curieusement principalement des IMA) lui fournissent de l'aide et il pourra tout réaliser à Polytech.
Quelques semaines plus tard, Hervé réalise son premier robot qui est commandable en Bluetooth et possède toute une panoplie de capteurs lui proposant un champs d'application très varié. Il est également très content de la batterie en Lithium du Kit qui assure une bonne autonomie à son robot et qui se recharge très facilement.
Malheureusement il a fait tomber son robot (il est maladroit) et le capteur infrarouge ne fonctionne plus du tout. Pas de soucis ! Grâce au fichier opensource il peut en fabriquer un nouveau facilement.
Au fur et à mesure, Hervé crée les capteurs dont il a besoin et fabrique de nouvelles pièces pour améliorer son robot. Grâce à ce Kit il a pu apprendre à programmer son propre robot et à comprendre comment sont fabriqués les différents capteurs et comment ils fonctionnent.
Un an plus tard, le voilà nommé Secrétaire et Responsable de la communication de Robotech. La date de la compétition phare du club, la Coupe de France de Robotique, approche. Surchargés de travail entre les cours de réseau et d'électronique, les membres du club n'ont pas eu le temps de fabriquer le robot secondaire et il ne leur reste qu'un mois. Hervé décide alors, sur un éclair de génie, d’utiliser de nouveau le Kit : celui-ci est robuste et permettra de confectionner n'importe quel type de robot. L'avantage est qu'il est facilement programmable via l'IDE Arduino pour les jeunes IMA3, et on pourra y brancher énormément de capteurs sans un nombre incalculable de fils qui se prendront dans les roues !
Réponse à la question difficile
Qu'est-ce que notre Kit apportera de nouveau par rapport aux autres?
Notre Kit sera Open Source en logiciel et en matériel. Des bibliothèques seront conçues et des codes déjà implémentés. De plus les fichiers pour créer les pièces et les capteurs seront accessibles. Il sera donc facile pour un étudiant, grâce à tous les moyens mis à disposition à Polytech, de fabriquer tout ce dont il a besoin
Ce kit sera conçu par des étudiants pour des étudiants (Robotech). Nous allons faire notre possible pour pouvoir proposer un Kit contenant les principales pièces et capteurs à un prix abordable.
Pour ce qui est des possibilités d'extension du Kit, nous proposerons plusieurs capteurs et pièces pour ajouter au robot.
Nous allons faciliter la programmation et l'assemblage en utilisant des connectiques adéquates et des codes couleur.
En d'autres termes, nous voulons combiner les avantages de tous ces kits en 1 seul (prix, pièces, Open Source, facilité de programmation...) et les améliorer en proposant la possibilité de produire des pièces de rechange soi même.
Préparation du projet
Cahier des charges
- Concevoir des bibliothèques pour faciliter la programmation sur l'IDE Arduino
- Proposer des modèles et une programmation simplifiée par blocks
- Concevoir les pièces du robot dans un matériel résistant, peu cher et facile à usiner : plexiglass
- Créer et/ou modifier des capteurs pour le robot pour être adapté à l'I2C
- Créer une carte programmable optimisée permettant le branchement facile des capteurs et actionneurs sur un ATMega2560
- Faciliter la construction (code couleur, câbles simples à brancher)
Choix techniques : matériel et logiciel
Matériaux
- Plaque de plexiglas 1m2, 3mm d'épaisseur pour des fines pièces
- Plaque de plexiglas 1m2, 6mm d'épaisseur pour des pièces plus grosses et résistantes
Actionneurs
- Moteur CC + Encodeur + contrôleur moteur
- Motoréducteur + encodeur FIT0520: [1]
Capteurs
- 1 Capteur de distance par Ultrasons HCSR04: [2]
- 2 Capteurs de distance par Infrarouges de type SHARP: [3]
- 1 Gyroscope: [4]
- 2 Capteurs de lignes: [5]
- 2 Fin de courses: [6]
Composants électroniques
Autre
- Vis M4 12mm,16mm et écrous M4: [9] + [10] + [11]
- câbles RJ12
- RJ12 femelle
- Batterie Lithium-ion + chargeur
- Arduino Mega: [12]
Carte électronique Principale
- Micro contrôleurs:
- Alimentation:
- Résistances CMS 0603:
- Condensateurs:
- 1x Condensateurs électrolytiques en aluminium - CMS 470UF[26]
- 1x Condensateurs électrolytiques en aluminium - CMS 330uF [27]
- 4x Condensateurs électrolytiques en aluminium - CMS 100uF[28]
- 13x Condensateur céramique 100nF [29]
- 1x Condensateur céramique 0603 1uF [30]
- 2x Condensateur céramique 0603 10uF [31]
- 4x Condensateur céramique 0603 22pF [32]
- 1x Condensateur céramique 0603 120pF [33]
- 1x Condensateur céramique 0603 68pF [34]
- 1x Condensateurs électrolytiques en aluminium - CMS 470UF[26]
- Connectique:
- Leds:
- Autre:
Contrôleurs moteurs Pour 1 contrôleur moteur: (pour le projet on en aura besoin de 4):
- Résistances CMS 0603:
- Condensateurs:
- Autre:
Liste des tâches à effectuer
Les différentes tâches à effectuer :
Tâche 1 :Création de la carte principale Après en avoir parlé avec nos enseignants, nous utiliserons comme base de notre carte programmable, un Arduino Mega.
Tâche 2 :Création des pièces
Nous avons défini les différents capteurs et actionneurs de notre Kit. Il s'agit maintenant de créer les pièces du Kit pour pouvoir créer son robot selon différents modèles disponibles.
Tâche 3 :Création carte moteurs et capteurs Pour pouvoir contrôler le robot, on peut utiliser différents capteurs et des moteurs pour la pince et pour le faire avancer.
Tâche 4 :Programmation Nous allons créer des bibliothèques pour faciliter la programmation des différents modèles. La programmation se fera avec l'IDE Arduino (langage C) ou avec ArduBlock (langage Java)
Calendrier prévisionnel
Septembre à Décembre
- Présentation du projet(description et objectif)
- Analyse du projet
- Préparation du projet (cahier des charges, matériel)
- Discussion avec les encadrants pour valider les différents choix proposés
Janvier
- Analyse et répartition des différentes tâches à effectuer
- Début de la création de la carte principale
- Recherche sur le logiciel Ardublock
- Recherche sur le protocole I2C
Février
- Fin création de la carte principale et ajout du matériel à commander dans la liste
- Création des pièces du Kit (en imprimante 3D et découpeuse laser sur du plexiglas)
- Début programmation via IDE Arduino
Mars
- Soudure de la carte principale
- Création des différentes bibliothèques Arduino
- Création ou modification des pièces du Kit (capteurs)
Avril
- Création application Bluetooth
- (Programmation Ardublock)
- Conception de modèles de Robot de base
Mai
- Rapport pdf et création d'un manuel d'utilisation pour le Kit
- Soutenance
Réalisation du Projet
Feuille d'heures
Les heures indiquées dans ce tableau sont approximatives.
Tâche | Prélude | Heures S1 (14/01) | Heures S2 (21/01) | Heures S3 (28/01) | Heures S4 (04/02) | Heures S5 (11/02) | Heures S6 (25/02) | Heures S7 (04/03) | Heures S8 (11/03) | Heures S9 (18/03) | Heures S10 (25/03) | Total |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Analyse du projet | 7 h | |||||||||||
Création de la carte principale | 4h | 4h | 4h | 4h | 4h | 4h | 4h | 2h | 4h | |||
Création des pièces du KIT | 2h | 7h | 3h | 2h | 2h | 2h | 6h | 4h | ||||
Protocole I2C | 4h | 4h | 2h | 4h | 4h | 5h | 5h | |||||
Programmation bibliothèques IDE Arduino et test | 2h | |||||||||||
Programmation bibliothèque ArduBlock | 4h | 4h | ||||||||||
Programmation Bluetooth et création Application |
Avancement des objectifs
- Carte électronique principale:
- Schématic: Terminé
- Routage: Terminé
- Soudure: Terminé
- Tests: En cours
- Cartes électroniques secondaires:
- Schématic: Terminé
- Routage: Terminé
- Soudure: Non commencé
- Tests: En cours, vérifié sur breadboard
- Librairies:
- Arduino: Terminé 90%
- Programmation en Blocks: Terminé 100%
- Pièces du kit: Terminé 95%
- Application bluetooth: Terminé
Prologue
Semaine 1
Carte principale
Nous avons commencé par créer la carte. La première question est de savoir avec quel logiciel nous allions router notre carte(Fritzing ou Eagle). Nous avons décidé de prendre Eagle qui, même si il nous ne l'avons jamais utilisé contrairement à Fritzing, est plus performant pour notre application et est utilisé dans les entreprises de nos jours.
Nous avons effectué des recherches pour pouvoir créer notre carte et nous voulions nous inspirer des cartes Arduino crées dans les BE PEIP. Néanmoins nous voulons comme base un Arduino MEGA, donc nous nous sommes inspirés de schémas sur internet: Schematic Arduino Mega (open source).
Protocole I2C
Ce protocole est très utilisé en Robotique. Il permettra de simplifier le montage du Robot. En effet il y aura moins de fil à connecter!
Le Kit mBot de Makeblock utilise ce protocole par exemple pour un de son capteur de couleurs. De plus, toutes les communications entre la brique intelligente Lego Mindstorms NXT et les capteurs s’effectuent grâce au protocole I2C.
C'est quoi l'I2C?
Il s'agit d'un bus permettant d'échanger des données entre plusieurs systèmes numérique. Généralement, ce type de bus sert à connecter un micro-controlleur (dans notre carte principale) à plusieurs périphériques tel que des afficheurs, des capteurs ou des actionneurs.
Ce bus se compose de 2 fils :
- SDA : qui sert à transmettre les données, c’est par cette ligne que transitent les informations échangée entre les deux systèmes.
- SCL : qui sert à transmettre une horloge permettant la synchronisation entre les 2 systèmes échangeant des données.
Les systèmes étant numérique, ces fils ne transmettent que des niveaux logiques binaire :
- pour transmettre un '0', le périphérique connecte le fil à la ligne de masse Gnd. C’est la référence des potentiels.
- pour transmettre un '1', le périphérique ne fait rien et une résistance dite de pull-up se charge d'élever la tension de la ligne au niveau de la tension d'alimentation Vcc. Il permet d’alimenter le capteur.
Principe de fonctionnement
Par défaut, les 2 fils sont au niveau logique '1' grâce à la résistance de pull-up. Pour commencer à transmettre des données, un périphérique met la ligne SDA à l'état '0'. En détectant ce passage à '0', les autres périphériques savent qu'ils vont alors recevoir des données. Après avoir passé la ligne SDA à l'état '0', le périphérique émetteur génère un signal d'horloge sur la ligne SCL en passant alternativement la ligne de '0' à '1' et vice versa. Grace à cette alternance, les autres périphériques peuvent se synchroniser à la même vitesse que le périphérique émetteur. Il ne reste alors plus qu'au périphérique émetteur d'envoyer les bits qu'il souhaite transmettre un à un sur la ligne SDA.
Autre
Nous avons discuté au sujet des différents modèles de Robot que nous pourrions réaliser pour le Kit. Ces modèles seront expliqué dans le manuel et permettront à l'utilisateur d'avoir des modèles de base pour commencer à utiliser notre Kit. Nous allons faire en priorité:
- Robot voiture
- Robot voiture + pince (le plus utile pour la Coupe de France)
Nous avions également pensé à réaliser d'autres modèles de Robot si nous avons le temps:
- Robot qui danse
- Robot détecteur (style robotino mais attention au budget)
- Robot 2 roue (nécessite un PID)
- Robot sans roues (araignée,tortue...)
- Robot caméra (attention au budget)
Semaine 2
Nous nous sommes répartis les tâches. L'un s'occupe de continuer l'élaboration de la carte électronique. Pendant ce temps, l'autre s'est informé sur le logiciel Ardublock afin de créer des blocks de programmation dédiés à notre kit de robots.
Carte Principale
Nous commençons a dessiner et router la partie communication série de la carte électronique. Pour cela nous nous basons sur les plans officiels de l'arduino mega puisque nous n'avons pas besoin d'y apporter d'améliorations.
Logiciel Ardublock
Le logiciel ArduBlock est un plugin qui s’ajoute à l’IDE d'Arduino et qui vous permet de programmer en blocs de fonctions.
Il se code en langage JAVA, nous avons donc commencé à regarder des cours de Java sur Internet.
Nous avons installé l'IDE Eclipse, un environnement de développement destiné au langage Java. Il contient déjà tout le nécessaire pour le développement et la compilation. Nous avons également besoin du JRE (Java Runtime Environment) qui peut traduire le byte code généré lors de la compilation. En effet, lors de la phase de compilation de notre code source, celui-ci prend une forme intermédiaire appelée byte code : c'est un code inintelligible pour notre machine, mais interprétable par la machine virtuelle Java (JRE).
Semaine 3
Nous avons continué de travailler sur la création de la carte principale (début du routage) et nous avons continué les recherches sur la création de blocs sous ArduBlock
Carte principale
Etude des différents entrées et sorties de la carte qui seront nécessaires et disposition des pins puis routage. La partie la plus importante à prévoir est l'emplacement des pins des contrôleurs moteurs, il a donc fallu effectuer des recherches dessus en parallèle et à commencer à imaginer ce composant.
Logiciel Ardublock
D'autres recherches sur la création de blocs sous Ardublock nous ont amené à découvrir un nouveau moyen de réaliser ses blocs sans utiliser Eclipse.
Lors du téléchargement de Ardublock nous obtenons une archive. Dans Arduino\tools\ArdublockTool\tool\ardublock-all-20130712\com\adublock\Block nous pouvons créer nos différents blocs en modifiant à 3 fichiers:
- ardublock.xml décrire tous les blocs boutons, connexion, choix multiples et autres.
- ardublock.properties faire la déclaration pour les noms.
- bloc-mapping.properties connecter les « noms » avec des fichiers de classe.
Semaine 4
Nous avons routé la carte principale et commencé à créer des pièces pour le kit.
Carte Principale
Suite du routage et recherche/création des librairies pour les composants à utiliser. Cette étape a été bien plus fastidieuse et longue que prévu.
Pièces du kit
Nous avons comme objectif de modéliser une vingtaine de pièces avec l'outil de modélisation en ligne TinkerCad. Nous pouvons extraire nos fichiers en .stl pour les pièces en 3D et ainsi les imprimer grâce à l'imprimante 3D du Fabricarium. Enfin, nous pouvons extraire les en .csv pour les fichiers 2D et ainsi pouvoir imprimer nos pièces avec du plexiglas grâce à la découpeuse laser.
Semaine 5
Protocole I2C
Nous avons choisi d'utiliser des ATtiny 85 pour la partie I2C. L'ATtiny 85 est un microcontrôleur d'Atmel (même famille que l'ATmega des Arduino).
Les ATTiny ne disposent pas à proprement parler d'une stack I2C ou TWI, mais intègrent un USI (Universal Serial Interface) qui peut se programmer pour communiquer en I2C.
Nous utiliserons de ATtiny 85 en CMS par soucis d'encombrement (pour prendre moins de place).
Partie Électronique
Choix de la partie alimentation de la carte:
- Nous souhaitons pouvoir alimenter la carte entre 6V et 12V afin d'alimenter directement les moteurs, sans sources extérieur.
- Les moteurs ayant une consommation sous 6 Vcc à vide de 0,1 A et bloqué de 2,7 A nous nous orientons sur une solution permettant de transmettre assez de courant.
Composant choisi: TPS54331[50]
Ce dernier est un Step-Down DC/DC permettant sur une alimentation de 3.5V à 12V de ressortir une tension de 5V sous une limite de 3A.
En parcourant la data sheet du constructeur, il est alors facile de reconstituer le circuit grâce aux formules et exemples fournis.
Semaine 6
Carte Principale
La carte est pratiquement terminée, il faut lui rajouter des trous pour pouvoir la placer plus facilement sur le robot. Il reste quelques composants à trouver. Pour finir, il faudra alors la faire vérifier par un enseignant et lancer sa production.
Pièces du Kit
Nous avons modélisé la plupart des pièces du Kit, nous en avons imprimé en 3D pour voir le rendu : il nous reste les donc les roues et les chaînes à modéliser.
Cf : voir tableau Résumé des éléments du Kit à la fin du Wiki pour avoir les fichiers SVG et STL
Protocole I2C
Nous allons, à l'aide de Fritzing, créer des PCB pour mettre dessus les ATtiny85 et permettre la connexion I2C entre les différents capteurs. Deux choix s'offrent à nous: chaque PCB peut contrôler 1 ou plusieurs capteurs. L'avantage d'en contrôler 2 est évident mais nécessite des fils.
Nous allons créer 5 cartes différentes pour les 5 capteurs. Certaines cartes accueilleront 2 capteurs identiques et d'autres plusieurs
Chaque carte comprendra:
- une entrée et une sortie (RJ12)
- l'ATtiny85 ou ADS (pour le non digital)
- un ensemble de 6 pins afin de pouvoir la connecter à la carte principale et pouvoir la programmer (et ainsi programmer le capteur correspondant)
- un cavalier (ensemble de pins) pour connecter le capteur en question
Semaine 7
Carte principale
Création des cartes des driver moteur à connecter à la carte principale. Nous avons choisi contrôleur TB6612FNG[51] qui permet de contrôler 2 moteur DC et peut délivrer jusqu'à 1,2A en continu et 3,2A en impulsionnel pour une alimentation maximale de 15V. Ce composant est donc parfaitement adapté au moteurs que nous avons sélectionnés. L'avantage est également d'avoir un compostant CMS compacte afin de sauvegarder le maximum de place. A l'image du contrôleur délivré par Adafruit[52], nous assurons une protection contre le "Reverse-power".
Protocole I2C
Nous continuons à créer les cartes I2C pour les capteurs (distance SHARP, gyroscope, lignes, fin de courses, ultrason). Nous utilisons le logiciel Eagle pour cela.
Pièces du KiT
Nous avons commencé à modéliser les dernières pièces : les roues, la pince et la chaîne.
Semaine 8
I2C
Le gyroscope n'a pas besoin d'ATtiny85 car il est déjà programmé pour l'I2C.
Voici les différentes cartes à base d'ATtiny85 (pour réaliser le protocole I2C)
- fin de courses: 2 sur une même carte
- ultrason: 1 par carte
- suiveur de ligne: 1 par carte
Le capteur SHARP nécessite un ADC (analogic to digital). Nous n'utilisons pas un ATtiny85 mais un ADS1015 qui contient une interface I2C.
L'ADS1015IDGST est un convertisseur de précision Analogique-Numérique (ADC) avec une résolution de 12 bits. Il a une faible consommation en courant. Il comporte une référence et un oscillateur intégrés. Les données sont transférées via une interface série compatible I2C, quatre adresses esclaves I2C peuvent être sélectionnées. Il fonctionne avec une alimentation unique allant de 2,0 à 5,5V.
Pièces du KiT
L'engrenage et la roue sont prêts. Nous les avons réalisés sous OnShape.
Engrenage : 56 dents, épaisseur 4mm, dents de 2mm, diamètre 58mm, module 1, diamètre primitif 56mm (58-2*(2/2))
Roue : 90 dents, épaisseur 8mm, dents de 1mm, diamètre 58mm, module 1, diamètre primitif 57mm (58-2*(1/2))
Carte principale et cartes moteurs
Nous avons fait vérifier les différentes cartes électroniques auprès de l'enseignant Alexandre Boé. En prenant en compte ses remarques nous avons amélioré les schématiques et le routage de la carte, notamment concernant le quartz de l'ATMEGA2560 qui n'était pas assez isolé des autres pistes de la carte. Il a également fallu rajouter des capacité de découplage à plusieurs endroits. Après cette correction nous pouvons enfin valider notre liste de matériel. Certains composants n’étant plus en stocks entre le début du routage de la carte et le moment d'envoyer la commande. Il a donc fallu en choisir d'autre et redessiner en urgence par nous même leur empreinte pour la carte, notamment pour les interrupteurs donc l'empreinte n'est pas standardisée. Pour cela nous avons créé notre propre librairie contenant les composants dessinés en se basant sur les Datasheet constructeur. La carte principale est terminée, nous allons la faire imprimer.
Carte + Fichier gerber + Fichier Eagle | Schematic | Board | Composants |
---|---|---|---|
Carte "Arduino" |
| ||
Contrôleurs moteurs |
Pour 1 contrôleur moteur (pour le projet on en aura besoin de 4): |
Semaine 9
Cartes I2C
Nous continuons le routage des cartes I2C pour les 5 différents capteurs. Nous allons les faire vérifier par un enseignant et allons lancer leur production à Polytech à partir de la semaine prochaine. Nous avons déjà les composants pour souder.
Pièces du Kit
Avec la plupart des pièces que nous avons découpé à la découpeuse laser ou imprimé en 3D nous avons construit un chassis pour un exemple de Robot. Les moteurs des roues sont en place. Nous avons défini un espace pour placer la carte principale. Nous réfléchissons à l'endroit où sera placé la pince ainsi que les cartes I2C des capteurs. Nous essayons de faire un modèle de Robot optimal qui serait facile à mettre en œuvre et utiliserait tous les capteurs.
Programmation
Nous avons commencé à réaliser des tests sur un ATtiny85 pour la programmation des capteurs. L'objectif de test est de récupérer la valeur d'un bouton connecté sur l'Attiny et d'envoyer sa valeur sur requête de l'arduino en I2C. L'arduino est connecté en tant que Master et l'Attiny en tant que Slave.
Plusieurs librairies Opensource existent sur Internet pour faciliter cette démarche. Mais pour beaucoup ne sont plus à jour où fonctionne avec un retard important. Après plusieurs test nous avons trouvé la librairie suivante[90] qui a l'avantage de pouvoir fonctionner par interruption.
Dans un premier temps, l'ATtiny85 n'est pas directement programmable via un port USB. Pour cela de nombreux tutoriels existent proposant de le programmer grâce à un arduino, comme celui-ci[91]. Nous réalisons donc, en s'inspirant de ce tutoriel, un shield pour Arduino UNO permettant facilement de programmer l'ATtiny avec des Leds permettant de visualiser lorsque le téléversement du programme est en cours où qu'une erreur est survenue. Coté arduino, il suffira de lui téléverser l'exemple "ArduinoISP". Puis pour téléverser le programme il suffit alors de connecter l'ATtiny sur le shield, et de sélectionner le profil ATtiny85 et le profil de téléversement "Arduino as ISP" sur l'IDE.
Tout est maintenant réunit pour effectuer les tests. Voici le code adapté pour l'esclave:
#include <TinyWireS.h> #define I2C_SLAVE_ADDRESS 0x34 // Address of the slave #define LED PB3 #define Bouton PB4 uint8_t capteur; void setup() { TinyWireS.begin(I2C_SLAVE_ADDRESS); // join i2c network //TinyWireS.onReceive(receiveEvent); // not using this TinyWireS.onRequest(requestEvent); // Turn on LED when program starts pinMode(LED, OUTPUT); pinMode(Bouton, INPUT); digitalWrite(LED, HIGH); } void loop() { // This needs to be here TinyWireS_stop_check(); } // Gets called when the ATtiny receives an i2c request void requestEvent() { capteur = digitalRead(Bouton); TinyWireS.send(capteur); }
Et maintenant le code du maître:
#include <Wire.h> #define I2C_SLAVE 0x34 void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial } void loop() { Wire.requestFrom(I2C_SLAVE, 1); // request 1 byte from slave device address 0x34 while(Wire.available()) // slave may send less than requested { int i = Wire.read(); // receive a byte Serial.println(i); // print the byte } delay(50); }
Semaine 10
Carte Principale et cartes moteurs
La carte principale et les cartes moteurs sont arrivées. Nous avons commencé la soudure cette semaine.
Carte I2C
Nous avons fait vérifier les cartes des 5 capteurs par un enseignant. Nous avons rencontré un problème : elles ne sont réalisables à Polytech. Nous allons donc les refaire d'une autre manière: nous n'allons plus faire une carte pour chaque capteur mais une carte pour les capteurs avec ATtiny, une avec l'ADS et une pour le gyroscope qui ne nécessite pas de micro-contrôleur. Nous n'aurons donc pas les cartes pour les vacances. Nous allons les souder à la rentrée et allons tout de même continuer à faire la programmation du Kit pendant les vacances car nous possédont un ATtiny non Cms que nous pouvons utilisé grâce à une BreadBoard.
Semaine 11
Carte Principale et cartes moteurs
Les cartes sont soudées et nous démarrons les tests.
Carte I2C
Finalement nous ne faisons pas de carte pour le Gyroscope. Nous avons donc 2 modèles de cartes : 1 carte pour les 2 capteurs Sharp, 1 carte ATtiny pouvant être adaptée pour les capteurs ultrasons, fin de lignes et fin de course. Nous les avons envoyé pour être imprimées.
Pièces du Kit
Nous avons à ce jour modélisé 2 types de roue pour le Kit :
- des roues adaptées pour la chenille
- des roues sans chenille
Les fichiers sont disponibles dans le tableau récapitulatif.
Semaine 12 & 13
Librairie Arduino
La création de la librairie Arduino a pour but de simplifier la programmation de notre kit. Elle est codée en C++ et est constituée d'un ou plusieurs fichiers .h où seront déclarés les classes ainsi que le fichier .cpp où seront explicitées les fonctions des classes. De nombreux exemples doivent également être inclus pour guider les utilisateur dans le maniement de la librairie.
Ici nous n'expliciteront pas les classes dans leur entièreté pour ne pas que cela soit indigeste.
Nous feront le choix de diviser notre librairie en 4 fichiers .ccp et .h :
- Driver_moteur : cette partie déclare la classe représentant les moteurs encodeurs. Ses attributs sont entre autre les pins sur lesquels il est connecté, les paramètres mécaniques du moteur et les différentes valeurs déduites des encodeurs: vitesse réelle/voulue, nombre de pulsations, etc...
Parmi les fonctions, on y trouvera trois modes de mouvements différents:
- Contrôle du moteur par PWM
- Contrôle du la vitesse en rpm du moteur. Ici on implémentera un régulateur fonctionnant grâce aux valeurs reçues de l'encodeur. Un simple régulateur P suffira, nous n'avons pas besoin d'être particulièrement précis sur la vitesse du moteur.
- Contrôle du moteur en position. On y trouve là l’intérêt principal de l'encodeur sur un moteur à courant continu. On peut ainsi contrôler l'angle de l'arbre moteur (et des roue) avec un moteur bien plus léger et moins volumineux qu'un moteur pas à pas. Ici on implémente non pas un simple régulateur P mais un régulateur PD qui permettra d'atteindre un angle donnée de la manière la plus optimisée possible.
Nous avons dû effectuer de nombreux tests pour trouver les paramètres des régulateurs.
- MotorDC: cette partie est dédiée au contrôle des moteurs à courant continu simples grâce aux contrôleurs moteurs. On y déclarera la classe MotorDC mais aussi deux classes héritières pour la pince et le bras. Pour ces dernières on aura alors des fonctions plus parlantes comme "open()" et "close()" ou encore "up()" et "down()". Elles auront comme attributs les pins sur lesquels le moteur est branché.
- Sensors_kit: On définit ici les classes pour chaque type de capteur et les fonctions permettant de recueillir leurs valeurs.
- MyRobot: la classe présente dans cette librairie représente le robot où on lui attribuera un moteur gauche, un moteur droite, des capteurs, etc... On y renseignera également la largeur entre les roues du robot ainsi que leur diamètre. Ces valeurs permettent alors de créer des fonctions d'odométrie comme "avancer de 10cm" ou encore "tourner à droite de 90 degrés". On y trouvera également une fonctionnalité pour être contrôlé en Bluetooth.
A chaque classe ainsi créée on écrira un programme d'exemple pour montrer l'utilisation de chaque fonction.
Le développement de la librairie a pris énormément de temps: 4h par jour de travail pendant 2 semaines. Le plus long a été la partie sur l'encodeur qui possède un fonctionnement bien particulier. En effet outre la programmation et quelques 1300 lignes de code plus tard, il a fallu tester les programmes et les corriger en conséquence.
Vous retrouverez le GitHub de la librairie ci dessous. Il ne faudra également pas oublier d'installer la librairie correctement comme décrit sur le GitHub.
Application Bluetooth
Pour la création de l'application bluetooth sur Android destinée à contrôler le robot nous nous sommes orienté vers Appinventor. N'ayant pas de connaissances préalables sur le développement d'applications mobiles et surtout de communication en bluetooth, Appinventor est un outil parfait pour les débutants et permet d'économiser du temps. De plus, il propose des outils simplifiés pour la communication en bluetooth.
Après s'être familiarisé avec le logiciel, nous avons programmé une application de base permettant de transmettre un octet à un module bluetooth HC-05. Il faut maintenant choisir les fonctionnalités de l'application vis à vis du robot. Nous avons décidé d'implémenter les fonctionnalités de base du robot, à savoir avancer, reculer, tourner à gauche, tourner à droite, monter le bras, descendre le bras, ouvrir la pince et fermer la pince. Un "slider" permet de régler la vitesse du robot.
Pour l'envoi des données nous nous sommse accordé sur l'envoi des données sous 1 seul octet. Ce format a pour avantage de limiter les erreurs causées par l'envoi de plusieurs octets et améliorer le temps de réponse du robot. Nous disposons de 9 boutons, nous avons donc besoin de 4 bits pour coder le bouton appuyé. Ils se trouveront sur les bits de poids faible. Il reste donc les 4 bits de poids fort pour encoder la vitesse soit 15 valeurs possibles. Il faut donc limiter la plage de vitesse autorisées. Nous avons choisi une sélection de la vitesse par pas de 10% (min=10%, max=100%) donc 9 valeurs différentes.
Par exemple: 0xA2 = 0b1010 00010 demande au robot d'avancer à la vitesse 100%
Apk de l'application mobile Androïde: Fichier:ApkRobotKit.zip
Programmation Blockly Arduino
Après les différents renseignements collectés, nous en avons déduit que la création d'une nouvelle librairie sur Ardublock est un travail extrêmement long et trop complexe pour un rendu final peu attractif. Après de quelques recherches nous sommes tombés sur Blockly, un outil de programmation en blocs sur navigateur créé par un enseignant français. Il a la particularité d'être plus récent qu'Ardublock, d'avoir une interface de travail plus accueillante et surtout d'être ouvert à l'ajout de nouvelles librairies de blocs. Cette dernière fonctionnalités est très bien documentée sur le site suivant, ce qui rend notre tâche plus facile.
Pour ajouter des blocs à Blockly nous "forkons" le code source de la page disponible sur le GitHub de Blockly. La programmation se fait en Javascript et en HTML. Dans le dossier "Blockly-at-rduino/blocks/", nous venons créer un dossier où 2 fichiers seront présents. Le premier permet de définir les visuels du bloc, ses entrées, sorties, type, etc... Le deuxième fichier permet de faire le lien entre les blocs créés et les fonctions Arduino associées qui se trouvent elles dans un nouveau fichier dans le dossier "Blockly-at-rduino/generators/arduino/". Dedans, nous récupérons les entrées du bloc et nous notons le code Arduino correspondant.
Ainsi nous traduisons chaque fonction de la librairie Arduino dans un bloc correspondant. Nous nous permettons d'y ajouter les couleurs afin de différentier les différentes sortes (fonctions liées aux encodeurs, fonctions liées au capteur, etc). Chaque bloc quand il est utilisé peut effectuer 4 sortes d'actions différentes sur le code .ino. Il peut écrire dans la loop, écrire dans le setup, définir des fonctions ou des variables globales et inclure des librairies. Lorsque le bloc n'a pas encore l'objet ou les fonctions qu'il utilise il vient les créer une fois pour toute et ils ne seront pas recréés par la suite. Ainsi pas de code inutile est créé et aucune déclaration de variable n'est nécessaire à l’exception de ce qui va suivre.
Nous avons tout de même créé 2 blocs spéciaux. L'un s'appelant "Générer le code pour le kit" permettra de déclarer des éléments et des fonctions de base du Kit. Une partie des éléments ainsi créés auraient pu être fait directement de la manière explicitée plus haut. Mais comme une autre partie ne peut être créée au fur et à mesure, nous avons fait le choix de le faire d'un seul coup via ce bloc de départ. Le deuxième bloc spécial est celui qui permet de définir en autre un modèle de robot en choisissant un moteur gauche et droit et qui nous renseigne des dimensions du robot pour l'odométrie. Étant donné qu'il est trop lourd de redemander ces informations dans chaque block lié à cette structure, ce dernier permet de la déclarer une fois pour toute.
Nous testons ainsi les éléments au fur et à mesure de leur programmation et nous observons leur comportement dans le code .ino qui est généré par Blocky. Les tests se font localement dans le répertoire en ouvrant le fichier index.html sur un navigateur web. Attention il se trouve que Chrome 64bits ne soit pas pleinement compatible avec l'application, il faudra donc passer par Mozilla ou Chrome 32bit.
Pour finir il faudra rajouter les différents blocs créés dans une librairie, pour cela il faudra remplir l'un des fichiers présents dans le dossier "Blockly-at-rduino/toolbox/" en y renseignant le nom de notre nouvelle librairie et le nom de chaque fonction. En fonction du fichier rempli, la librairie s'ajoute dans des catégories différentes: "niveau 1", "niveau 2" ... "all" qui permettent de classer toutes les librairies présentes par difficulté. Comme notre kit n'est pas destiné à être commercialisé il ne sera pas utile de publier nos modifications sur le répertoire git du créateur de l'application. Nous resterons alors sur un répertoire annexe et nous pouvons alors nous permettre de placer notre librairie comme librairie par défaut dans toutes les catégories pour la trouver facilement.
Pour résumé, nous sommes maintenant capable de programmer notre kit en blocs. Pour cela il suffit soit de télécharger le zip du projet sur github et de lancer index.html. Soit directement de lancer notre version du logiciel via github.
Une fois le logiciel lancé vous cliquerez sur "Configuring Blocks" pour venir importer notre librairie via l'une des catégories ("all" par exemple). En cliquant sur "view Source Code" vous aurez accès au code Arduino généré. Vous pourrez alors le coller dans l'IDE Arduino pour le téléverser dans l'Arduino. En effet le seul défaut de Blockly Arduino est que le téléversement vers une carte Arduino est possible directement depuis l'interface web, mais pas lorsque nous utilisons des librairies C++ externes comme celles que nous avons créé.
L'ensemble de la programmation ne fût non pas extrêmement complexe mais a nécessité un bon temps d'adaptation avant de connaître les différents paramètres de création de blocs. Ce fût également fastidieux de créer les blocs pour chaque fonction puis de les tester et de corriger les oublis de ";" ou de parenthèses qui se glissaient rapidement. L'ensemble nous a pris 20h de travail étalées sur une semaine.
Résumé des éléments du Kit
Élément | Etat | Description | Instructions de montage | Fichiers |
---|---|---|---|---|
Pince | Modélisée et imprimée | 1x Base 2x Crochet |
Pour l'écrou central: glisser un écrou métallique de type M4 pendant l'impression (ou programmer un pause) afin qu'il soit bloqué
Les pièces sont à assembler avec des vis M4 16mm |
Fichier:Pince P46.zip |
Chenilles | Modélisé et imprimée en3D | 65x Maillon_chenille | Assembler les maillons en glissant un morceau de PLA 1.75mm dans les orifices prévus à cet effet | Fichier:Maillon chenille.zip |
Roue et engrenage | Modélisés et imprimés en 3D | 1x Roue 1x Engrenage |
Trou central de 4,4mm de diamètre adapté à notre Kit | Fichier:Engrenage roue.zip |
Roue sans chenille | Modélisées | 2x Roues |
Épaisseur 10mm, diamètre 56mm | Fichier:Roue sans chenille P46.zip |
Pièces assemblage du Kit (angle,base etc...) | Modélisées | Les pièces 3D sont en .stl et celles 2D sont en .stl et .svg | Fichier:Pièces Kit stl svg.zip | |
Pièces assemblage du Kit (pièces longues) | Modélisées à découper à la découpeuse laser |
|
Compatible vis M4. Grosses pièces à découper sur du plexiglas 6mm, petites pièces sur plexiglas 3mm. | Média:Kitrobot.svg |