Projets d'UE 2023-2024 Comment documenter ? [Projets d'UE] Liste des salles et rangements Esclangon LU1SXPFL - projet fablab L1 CMI Physique L'UE LU1SXPFL est une UE d'initiation aux principales techniques utilisées dans les fablabs (conception et fabrication numérique et prototypage électronique) proposée aux étudiants du CMI Physique au niveau L1. L'UE commence par un historique des fablabs, d'où ils viennent, ce qu'on y fait, etc. Suivent, quelques séances de formation aux outils de conception 2d/3d (Inkscape, OpenSCAD, FreeCAD), un introduction aux machines (découpeuse laser, imprimantes 3d) et une initiation au prototypage électronique utilisant des cartes de développement (Arduino Uno, M5Stack) et des modules (capteurs, afficheurs, LEDs, etc.). Le reste du temps est dédié à la réalisation d'un projet au fablab combinant conception - fabrication - prototypage. Enseignant responsable: Vincent Dupuis Descriptif de l'UE Descriptif L'UE LU1SXPFL est une UE d'initiation aux principales techniques utilisées dans les fablabs (conception et fabrication numérique et prototypage électronique) proposée aux étudiants du CMI Physique au niveau L1. L'UE commence par un historique des fablabs, d'où ils viennent, ce qu'on y fait, etc. Suivent, quelques séances de formation aux outils de conception 2d/3d (Inkscape, OpenSCAD, FreeCAD), un introduction aux machines (découpeuse laser, imprimantes 3d) et une initiation au prototypage électronique utilisant des cartes de développement (Arduino Uno, M5Stack) et des modules (capteurs, afficheurs, LEDs, etc.). Le reste du temps est dédié à la réalisation d'un projet au fablab combinant conception - fabrication - prototypage. Enseignant responsable: Vincent Dupuis Période et volume horaire: janvier 2024- mai 2024, 30h par étudiant (10 séances de 3h) Séance 1: 29 et 30 janvier : Introduction de l'UE, introduction aux fablabs, aux projets, à la documentation de projet, présentation de l'espace prototypage - visite, constitution d'équipe, temps libre par équipe sur PC pour explorer et s'approprier la plateforme de documentation du fablab (wiki) et y résumer la séance. Séance 2: 5 et 6 février: introduction à l'impression 3d et à la découpe laser, introduction aux outils associés de conception 2d/3d : inkscape, openSCAD, freeCAD, éventuellement TinkerCAD. Réalisation d'un dessin 2d, 3d à découper/imprimer pour les semaines suivantes. Documentation de la séance sur le wiki avec documentation individuelle des réalisations (phase de conception, fabrication, photo de l'objet final). Présentation pratique de l'utilisation des machines (et des règles à respecter) par un des ingénieurs du fablab. Séance 3: 12 et 13 février: introduction au prototypage électronique dans les fablabs. Repères historiques. Approches et outils. La plateforme Arduino Uno, description, exemple de programmation (blink). Environnement de programmation (IDE), structure d'un code Arduino, compilation, téléversement, interaction avec le PC - moniteur/traceur série. Approche classique: breadboards et fils Dupont. Inconvénients. Approche simplifiée: le système Grove de SeeedStudio. Shield, Modules capteurs, interface 1wire, I2C, UART, etc., autres plateformes Arduino, M5Stack Séance 4: 26 et 27 mars: projet Séance 5: 4 et 5 mars: projet Séance 6: 11 et 12 mars: projet Séance 7: 18 et 19 mars: projet Séance 8: 25 et 26 mars: projet Séance 9: 22 et 23 avril: projet Séance 10: 29 et 30 avril: soutenance/démonstration des projets et discussions (30 min par équipe) avec diapos et vidéoprojecteur. Effectifs: L1 CMI Physique, ~ 30-40 étudiants, 2 groupes (lundi/mardi matin) Quelques liens: fablabs.io : carte interactive du réseau international des fablabs, beaucoup d'informations fabacademy : page de la formation de haut niveau dispensée au sein des fablabs du réseau de janvier à juin. Plus interessant, l'archive des documentations de la fabacademy qui rassemble les documentations des étudiants quelques sites où l'on trouve un grand nombre de projets documentés : hackster.io,instructables, hackaday.Super Groupe A1 Nom des participants: Antoine, François, Jean, Yves, Guerrien Antoine, , Pierre Graziani Basile, Jules, Massimo Cortinovis Sassi, M'hamed Ben Halima Les quatre personnes citées ci-dessus suivent le cursus CMI-Physique (Cursus Master en Ingénierie, spécialité Physique). Nous avons la chance d'avoir une UE "Projet Fablab", grâce à laquelle nous pouvons apprendre et comprendre les éléments qui composent les fablabs de l'UPMC. Enfin, nous devons réaliser un projet d'ici la fin de l'année. Nous espérons pouvoir faire un ballon qui analyse l'air dans l'atmosphère parisien. Voici donc la documentation de notre UE ! Bonne lecture ! En espérant que ça vous plaise ! Journal de bord: Découverte du Fablab Séance 1 - 30/01/2024 : Découverte des Falblabs Séance 1 - 30/01/2024 C'est notre 1ère séance de l'UE [1] projet fablab ! L'objectif de cette UE sera de nous introduire les outils du Fablab puis de nous laisser réaliser notre propre projet. La séance s'est décomposée en deux grandes parties : une présentation générale de l'histoire des Fablab, de ce que nous allons faire dans l'UE. Puis nous avons fait un tour du lieu et des outils qui le composent. L'idée de recréer le "technicien du garage" nous a beaucoup plus, et les outils à notre disposition nous permettent de réaliser presque tout, laissant libre cours à notre esprit créatif. Nous sommes motivé quant à la suite de cet enseignement, et impatient d'en découvrir les retours sur investissement ! Le fablab de Sorbonne UPMC se décompose en 5 grandes parties : La salle de "brainstorming" (ou tempête de cerveau), où nous pouvons faire des recherches, mettre nos idées à plats, revoir la théorie... Des ordinateurs avec accès à internet, des livres ainsi que des tableaux et des feutres sont mis à disposition. On peut aussi y trouver des composants électroniques et des outils bricolages dans des rangements spécifiques. Une salle d'impression 3D, où nous pouvons imprimer des objets en volume selon le patron numérique réalisé sur un logiciel ou repris sur internet. On peut y imprimer des mécanismes en une fois, sans post-montage (image 3). Une salle de découpage laser ou à jet d'eau sous pression permettant la création de pièces dans tous types de matériaux (bois, métal...) (image 1 et 2). Une salle où nous pouvons graver des circuits imprimer à l'aide de lasers ou de fraiseuses accompagnée d'un espace soudure. Une salle de menuiserie possédant toutes les machines nécessaires pour travailler le bois. Nous vous mettons quelques photos d'objets créés au fablab que nous avons prises durant la 2ème partie du cours (la visite).       Image 1 : Morceaux de bois découpés                       Image 2 : Patron de cerf découpé puis assemblé Image 3 : Objets imprimé en 3D [1] : Unité d'Enseignement Séance 2 - 06/02/2024 : Découverte des logiciels du Fablab Séance 2 - 06/02/2024 Notre seconde séance c'est décomposé en deux axes majeurs. Nous avons dans un premier temps découvert et essayé différents logiciels de design 2D avec Inkscape et 3D avec OpenScad et FreeCad. Monsieur Vincent nous entrecoupait son cours d'exercices d'applications sur ces logiciels. La particularité d'OpenScad est que l'interface est textuelle ! C'était très différent de ce que l'on a déjà fait auparavant ou fait sur Inkscape ou FreeCad. Ils sont tous les 3 libres d'accès (téléchargements gratuits) et leurs codes sources est publié. Ce sont des outils transparents, avec lesquels nous sommes assurés de notre droit d'auteur : des logiciels "propriétaires", peut-être plus efficaces en termes d'interfaces, pourraient extraire certains de nos modèles. Pour prendre en main les logiciels nous avons réalisé pendant la séance quelques formes géométriques respectant plusieurs contraintes qui nous avait été données. Par exemple, un carré dont les 4 coins contiennent des cercles sur Inkscape.   Figure réalisée sur Inkscape Ou un cube pour lequel on a soustrait 3 cylindres sur OpenScad. Forme réalisée sur OpenScad Code utilisé pour réaliser ce cube Nous avons également réalisé la même figure sur FreeCad. Sur ce logiciel, l'interface était moins intuitive que sur OpenScad, bien qu'elle n'était pas textuelle ! Puis, dans un second temps, Clara, une Fablab Manager, diplômée du diplôme supérieur des responsable fablab, nous a montré comment utiliser les logiciels associés aux découpeuses lasers et imprimantes 3D et a fait une démonstration du fonctionnement des premières en découpant et gravant un petit morceau de bois. En ce qui concerne les découpeuses lasers, on peut par exemple faire plusieurs teintes de gravures (en gris) et découper par là même ! Elle nous a montré que les découpeuses sont bien plus rapides que les imprimantes 3D ainsi que les conditions d'utilisation. Séance 3 - 13/02/2024 : Découverte Arduino Séance 3 -13/02/2024 Dans un premier temps, nous avons été introduis l'Arduino ! C'est une carte en circuit intégré complexe, réduit, composé d'un microcontrôleur. Avec une carte Arduino, nous pouvons programmer des actions à l'infini ! En effet, il n'y a plus besoin de souder un circuit pour réaliser chaque tâches que l'on veut : une carte Arduino peut être programmée et reprogrammé pour réaliser des actions complètements différentes (dans la limites des capteurs et actionneurs reliées à celle ci) Nous avons premièrement réalisé un programme blink, lequel est ci dessous. Code Blink void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(2, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(200); // wait for a second digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(300); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(200); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(200); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(300); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(1000); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(300); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(200); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(300); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(200); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(1000); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(200); digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(2, LOW); // turn the LED off by making the voltage LOW digitalWrite(2, LOW); // turn the LED off by making the voltage LOW delay(5000); } Blink_morse.ino (fichier du code) Le 2ème exemple de code pour Arduino était avec un capteur d'humidité et de température. Voici le code ci-dessous (code que l'on retrouve sur le site du vendeur) Code Capteur température et humidité #include #include #include "SHT31.h" SHT31 sht31 = SHT31(); void setup() { Serial.begin(9600); while(!Serial); Serial.println("begin..."); sht31.begin(); } void loop() { float temp = sht31.getTemperature(); float hum = sht31.getHumidity(); Serial.print("Temp = "); Serial.print(temp); Serial.println(" C"); //The unit for  Celsius because original arduino don't support speical symbols Serial.print("Hum = "); Serial.print(hum); Serial.println("%"); Serial.println(); delay(1000); } Arduino_Capteur.ino (fichier du code) Ces codes peut être écrit dans l'application Arduino IDE 2.3.2, libre de droit. Il suffit alors de brancher le capteur sur la carte et d'envoyer ce code sur la carte Arduino pour faire fonctionner le système. Les cartes Arduino sont très faciles d'utilisation et le fait que les codes sont souvent déjà fourni avec les composants utilisés nous permet de construire et d'utiliser des composants électroniques sans connaissances en codage. En deuxième partie, nous avons continuer notre recherche de projet. Maintenant que nous connaissons tout les objets et machines à notre disposition, nous avons une idée plus claires de ce qui était à notre porté. Nous ne nous sommes pas encore décidé mais avons déjà quelques pistes concrètes. Voici notre 1ère planche de brainstorming. Mise en place du projet Séance 4 - 27/02/2024 : Début du projet Séance 4 -27/02/2024 Ceci est la première séance de réalisation de notre projet. Nous avons au départ hésité entre un thermostat intelligent, un détecteur de qualité d'acoustique d'une pièce, et un détecteur de gaz pour donner la qualité de l'air. C'est finalement ce dernier projet que nous allons réaliser. Nous pensions aussi décliner notre projet en un ballon, qui analyserait les gaz en altitudes, ou tout simplement un capteur d'incendie / de viabilité de l'air dans une pièce (plus d'aération, etc). Nous pensons y avancer par étapes : Tester les capteurs (particules fines, HCHO, et autres) Monter un 1er prototype, puis le tester Augmenter l'autonomie de notre projet (batterie externe, stockage de l'information) Concevoir un ballon qui puisse monter à une certaine altitude avec tout le matériel (ajouter un altimètre) Tester un Prototype, l'améliorer.... Présenter notre projet Voici le site informatif du capteur principal, le détecteur de particule/poussière (Laser PM25 Sensor) : https://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301/#software Voici le site informatif du capteur secondaire, le détecteur de gaz (Grove - HCHO Sensor) : Grove - HCHO Sensor | Seeed Studio Wiki Voici un lien qui nous a aidé à installer la bibliothèque qui permet à l'Arduino de communiquer avec ce capteur : https://wiki.seeedstudio.com/How_to_install_Arduino_Library/ Voici le code basique pour faire fonctionner le capteur Laser PM25 Sensor. Actuellement, il nous renvoie des valeurs matricielles, mais seulement une est importante : "particulate matter PM2.5". Nous comptons l'améliorer afin qu'il renvoie un graphique de l'évolution des concentrations en gaz en fonction du temps (puis en fonction de l'altitude si on réussi à aller au bout du projet). Code capteur Laser PM25 Sensor #include #ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE #define SERIAL_OUTPUT SerialUSB #else #define SERIAL_OUTPUT Serial #endif HM330X sensor; uint8_t buf[30]; const char* str[] = {"sensor num: ", "PM1.0 concentration(CF=1,Standard particulate matter,unit:ug/m3): ", "PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): ", "PM10 concentration(CF=1,Standard particulate matter,unit:ug/m3): ", "PM1.0 concentration(Atmospheric environment,unit:ug/m3): ", "PM2.5 concentration(Atmospheric environment,unit:ug/m3): ", "PM10 concentration(Atmospheric environment,unit:ug/m3): ", }; HM330XErrorCode print_result(const char* str, uint16_t value) { if (NULL == str) { return ERROR_PARAM; } SERIAL_OUTPUT.print(str); SERIAL_OUTPUT.println(value); return NO_ERROR; } /*parse buf with 29 uint8_t-data*/ HM330XErrorCode parse_result(uint8_t* data) { uint16_t value = 0; if (NULL == data) { return ERROR_PARAM; } for (int i = 1; i < 8; i++) { value = (uint16_t) data[i * 2] << 8 | data[i * 2 + 1]; print_result(str[i - 1], value); } return NO_ERROR; } HM330XErrorCode parse_result_value(uint8_t* data) { if (NULL == data) { return ERROR_PARAM; } for (int i = 0; i < 28; i++) { SERIAL_OUTPUT.print(data[i], HEX); SERIAL_OUTPUT.print(" "); if ((0 == (i) % 5) || (0 == i)) { SERIAL_OUTPUT.println(""); } } uint8_t sum = 0; for (int i = 0; i < 28; i++) { sum += data[i]; } if (sum != data[28]) { SERIAL_OUTPUT.println("wrong checkSum!!"); } SERIAL_OUTPUT.println(""); return NO_ERROR; } /*30s*/ void setup() { SERIAL_OUTPUT.begin(115200); delay(100); SERIAL_OUTPUT.println("Serial start"); if (sensor.init()) { SERIAL_OUTPUT.println("HM330X init failed!!"); while (1); } } void loop() { if (sensor.read_sensor_value(buf, 29)) { SERIAL_OUTPUT.println("HM330X read result failed!!"); } parse_result_value(buf); parse_result(buf); SERIAL_OUTPUT.println(""); delay(5000); } Seeed_PM2_5_sensor_HM3301-master.zip Notre première étape a consister à allumer une LED lorsque le tôt de particules détectées dépassait un certain cap. Nous avons définis ce cap par une valeurs légèrement inférieure à celle affichée lorsqu'une allumette était soufflée juste à côté du capteur. Soit : Code du seuil de déclenchement de la LED void setup() { pinMode(2, OUTPUT); } void loop() { if("PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): ">=920) { digitalWrite(2, HIGH); } } On pensait aussi à faire clignoter la LED lorsque les détecteurs captaient un niveau trop important de gaz. Nous nous sommes alors familiarisé avec les élément du 1er capteur, il est maintenant temps de nous familiariser avec le 2ème (le HCHO Sensor de grove). Cependant, nous laisserons ces parties pour la prochaine séance. Séance 5 - 05/03/2024 : Un projet satisfaisant Séance 5 -05/03/2024 Lors de cette séance, nous nous sommes séparés en 2 groupes : un qui s'occupait du codage de l'Arduino et des différents capteurs, et un autre du cahier des charges de notre éventuel ballon. Caractérisation du détecteur HCHO Ce capteur détecte plusieurs composés volatils organiques, dont le HCHO. La famille des composés organiques volatils est très vaste : on en trouve en facilement dans l'atmosphère, mais la plupart ont des effets avérés sur la santé. Ils se caractérisent par un point d'ébullition très bas, et s'évaporent (ou se subliment) facilement. Le HCHO, autrement dit le formaldéhyde, est un bactéricide en petite quantité, mais peut devenir dangereux pour la santé si sa concentration dans l'air augmente. On peut en trouver dans différentes industrie, mais aussi dans un intérieur pas suffisamment aéré : c'est un des problèmes majeures de pollution d'intérieurs (nocive à partir de 1 ppm). Nous pensions tester le capteur au fablab de chimie, en faisant varier les concentration de COV quelconques : si la valeur d'HCHO qu'il nous renvoie varie en faisant varier la concentrations des COV, alors on devra prendre ce module comme un détecteur de COV et non juste de HCHO. Voici le wiki du capteur HCHO : Grove - HCHO Sensor | Seeed Studio Wiki Nous avons rajouté un capteur : le détecteur de flammes de Gotronics. Alors, pour ce module, nous avons bien ris ! Il détecte bien la présence d'une flamme grâce aux infrarouges qu'elle émet, cependant, il détecte aussi le Soleil comme une flamme ! Nous devons augmenter la sensibilité du capteur, afin que notre seuil différencie une flamme du Soleil lui-même (s'ils renvoient des valeurs différentes...). On remarque que plus le capteur reçoit d'infrarouges, plus la valeurs qu'il renvoie est petite. Voici le PDF explicatif du module détecteur de flamme (et d'autres) de Gotronics à la page 7 : gotronic.fr Ecran : Grove - 16*2 LCD, par seed studio Nous n'avons pour l'instant que pris ce module dans notre boîte. Nous nous laisserons le temps de la prochaine séance pour l'étudier. On compte afficher les valeur de notre "super capteur" sur cette écran en temps réel. Détecteur CO, et autres : Grove - Gas sensor(MQ3) Pour ce module, il y a besoin de vapeur d'alcool pour l'étalonnage. Nous ne pensons donc pas le garder... On a pour projet de tester chaque capteur avec un gaz que lui seul peut détecter, ce que nous ferons surement à la prochaine séance. Voici une photographie légendée de notre montage En parallèle, on a fais quelques recherches sur le ballon s'il se réalise : Il est composé de fuseaux, une documentation approfondie est requise. La différence de poids entre l'air chaud plus léger à l'intérieur du ballon et l'air froid à l'extérieur Séance 6 - 12/03/2024 : Fin des tests de nos capteurs Séance 6 -12/03/2024 Au début de cette séance, on étudie le Multichannel gas sensor : En ne faisant qu'exécuter le code test, on s'est heurté à un problème : la DEL s'allumait bel et bien en fonction du capteur, mais aucune valeur ne s'affichait dans le "print Monitor" de l'application Arduino. En effet, ce capteur est habituellement utilisé avec un autre module, qui réalise certaines fonctions du codage à la place de celui-ci : sur le code, il manquait la fonction "serial.print();" car il doit être couplé à un écran, et que les valeurs devaient s'afficher sur celui-ci et non le Serial Monitor. Seeed_Arduino_MultiGas-master.zip Notre code se résume à la somme des codes de références avec quelques modifications (les bons output et input, quelques modifications pour afficher les valeurs sur le serial moniteur, avec une petite mise en page) et à l'ajout de seuils (pour faire bipper le buzzer et clignoter la DEL au dessus ou en dessous d'une certaine valeur) Voici ce qu'il nous renvoie : Code du programme #include int m = 0; float flamme; int val ; boolean up = true; int analog = A3; int buttonpin = 3; int f = 0; #define NUM_LEDS 5 int n = 0; ChainableLED leds(7, 8, NUM_LEDS); float hue = 0.32; void setup(){ leds.init(); Serial.begin(9600); int n=0; int f=0; } void loop() { flamme = analogRead(analog); Serial.print("température = "); Serial.println(flamme); // Affiche la température via le moniteur série Serial.println(""); val = digitalRead (buttonpin) ; for (byte i=0; i= 50){ f=0; } if (flamme < 50 && flamme >= 35){ f=1; } if (flamme < 35 && flamme >= 20){ f=2; } if (flamme < 20){ f=3; } if (f > n){ n = f; } if (n == 0){ hue = 0.32; } if (n == 1){ hue = 0.17; } if (n == 2){ hue = 0.05; } if (n == 3){ hue = 0.00; } Serial.println(n); Serial.println(f); if (flamme >= 50){ m = m + 1; } if (m > 100){ n = 0; f = 0; m = 0; } } Quant à notre idée d'affichage sur un écran comme ceci Cette idée est tombée à l'eau car on peut seulement afficher des dessins et non des fonctions qui s'actualisent en temps réel. Pour faire ça, on devrait recoder chaque pixel de l'écran, ou alors retrouver quelqu'un qui l'a fait. On décide alors de ne pas prendre l'écran (Grove - 16*2 LCD, par seed studio). Séance 7 - 19/93/2024 : La vie en rouge, vert, bleu. Séance 7 -12/03/2024 Nous avons décidé de ne plus ajouter de composant. Nos composants sont : Laser PM2Sensor Buzzer Détecteur de flammes Multichannel gas sensor DEL RVB HCHO Sensor Les 3 cas où on utiliserait notre capteur : Détecteur incendie. Détecteur qualité d'air. (Ballon, détecteur qualité air de Paris en altitude.) Objectifs de la séance : brancher une DEL RGB pour montrer la qualité de l'air / dangerosité de l'endroit. Pour certaine valeurs renvoyés par nos capteurs, on veut qu'elle s'illumine en rouge, orange, jaune, ou vert en fonction du niveau de dangerosité. Problème : les outputs de la DEL étaient les mêmes que celles de du buzzer et du détecteur de flammes. Le code de la DEL n'était donc pas compatible avec les reste de notre code. Nous avons changé les output du détecteur de flammes et du buzzer respectivement des digital 7 et 8 aux digital 3 et 4. La DEL est codé en hue, chaque code correspond à une couleur. On a trouvé : Vert : 0.32 hue Jaune : 0.17 hue Orange : 0.05 hue Rouge : 0.00 hue ChainableLED.zip On doit coder pour chaque seuil d'un capteur atteint, une couleur qui s'approche du rouge, pour décrire la qualité de l'air. Seuil du détecteur de flammes (valeurs décroissantes quand il y a plus de flammes). On choisi : x>50 (vert) - 50>x>35 (jaune) - 35>x>20 (orange) - 20>x (rouge) Code flamme seuils exemple #include /*initialisation de nos valeurs*/ int m = 0; float flamme; int val ; boolean up = true; int analog = A3; int buttonpin = 3; int f = 0; #define NUM_LEDS 5 int n = 0; ChainableLED leds(7, 8, NUM_LEDS); float hue = 0.32; void setup(){ leds.init(); Serial.begin(9600); int n=0; int f=0; } void loop() { flamme = analogRead(analog); Serial.print("température = "); Serial.println(flamme); // Affiche la température via le moniteur série Serial.println(""); val = digitalRead (buttonpin) ; for (byte i=0; i= 50){ /*mise en place de nos seuils*/ f=0; } if (flamme < 50 && flamme >= 35){ f=1; } if (flamme < 35 && flamme >= 20){ f=2; } if (flamme < 20){ f=3; } if (f > n){ n = f; } if (n == 0){ hue = 0.32; } if (n == 1){ hue = 0.17; } if (n == 2){ hue = 0.05; } if (n == 3){ hue = 0.00; } Serial.println(n); Serial.println(f); if (flamme >= 50){ m = m + 1; } if (m > 100){ n = 0; f = 0; m = 0; } } On réalise le même système de seuil pour les autres capteurs, soit 3 autres fois. Ces opérations prendront du temps et nous utiliserons plusieurs heures pour le faire. Séance 8 - 26/03/2024 : Finalisation Séance 8 -26/03/2024 Voici donc notre code final : Code final complet pas propre int Led = 13 ; // Déclaration de la 13 sur la broche 13 int buttonpin = 3; // Déclaration de l'entrée digitale sur 3 int analog = A3; // Déclaration de l'entrée analogique sur A3 float flamme; // Lecture de la valeur analogique (Flamme) #include #include #define NUM_LEDS 5 ChainableLED leds(7, 8, NUM_LEDS); int vale = 0; #define Vc 4.95; int f = 0; int n = 0; int m = 0; int o = 0; int pm = 0; int hcho = 0; int p = 0; int val1 = 0; int val2 = 0; int val3 = 0; int val4 = 0; int q = 0; int co = 0; boolean up = true; float hue = 0.32; int speakerPin = 4; // Définition du buzzer sur la broche 8 (Buzzer) #include "Seeed_HM330X.h" #define R0 52.84 #ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE #define SERIAL_OUTPUT SerialUSB #else #define SERIAL_OUTPUT Serial #endif #include #include GAS_GMXXX gas; int PM25=0; int PM252=0; HM330X sensor; u8 buf[30]; const char *str[]={"PM1.0 ug/m3 : ", "PM2.5 ug/m3 : ", "PM10 ug/m3 : ", "PM1.0 ug/m3 : ", "PM2.5 ug/m3 : ", "PM10 ug/m3 : ", }; HM330XErrorCode print_result(const char* str,u16 value) { if(NULL==str) return ERROR_PARAM; SERIAL_OUTPUT.println(value); return NO_ERROR; } /*parse buf with 29 u8-data*/ HM330XErrorCode parse_result(u8 *data) { u16 value=0; if(NULL==data) return ERROR_PARAM; for(int i=1;i<8;i++) { value = (u16)data[i*2]<<8|data[i*2+1]; print_result(str[i-1],value); if (i==3) {PM25=value;} if (i==5) {PM252=value;} } return NO_ERROR; } HM330XErrorCode parse_result_value(u8 *data) { if(NULL==data) return ERROR_PARAM; for(int i=0;i<28;i++) { SERIAL_OUTPUT.print(data[i],HEX); SERIAL_OUTPUT.print(" "); if((0==(i)%5)||(0==i)) { SERIAL_OUTPUT.println(" "); } } u8 sum=0; for(int i=0;i<28;i++) { sum+=data[i]; } if(sum!=data[28]) { SERIAL_OUTPUT.println("wrong checkSum!!!!"); } SERIAL_OUTPUT.println(" "); SERIAL_OUTPUT.println(" "); return NO_ERROR; } /*30s*/ void setup() { SERIAL_OUTPUT.begin(115200); delay(100); SERIAL_OUTPUT.println("Serial start"); if (sensor.init()) { SERIAL_OUTPUT.println("HM330X init failed!!"); while (1); } pinMode(2, OUTPUT); pinMode (speakerPin, OUTPUT); pinMode (Led, OUTPUT) ; // Définition de Led en tant que sortie pinMode (buttonpin, INPUT) ; // Définition de buttonpin en tant qu'entrée pinMode (analog, INPUT) ; // Définition de analog en tant qu'entrée Serial.begin(9600); gas.begin(Wire, 0x08); // use the hardware I2C Serial.begin(115200); leds.init(); } void loop() { if (sensor.read_sensor_value(buf, 29)) { SERIAL_OUTPUT.println("HM330X read result failed!!"); } for (byte i=0; i 999){ val1 = 999;} Serial.print(val1); Serial.println(" NO2 ppm"); // GM302B C2H5CH sensor val2 = gas.getGM302B(); if (val2 > 999){ val2 = 999;} Serial.print(val2); Serial.println(" C2H5CH ppm"); // GM502B VOC sensor val3 = gas.getGM502B(); if (val3 > 999){ val3 = 999;} Serial.print(val3); Serial.println(" VOC ppm"); // GM702B CO sensor val4 = gas.getGM702B(); if (val4 > 999){ val4 = 999;} Serial.print(val4); Serial.println(" CO ppm"); Serial.println(); if (flamme >= 50){ f=0; } if (flamme < 50 && flamme >= 35){ f=1; } if (flamme < 35 && flamme >= 20){ f=2; } if (flamme < 20){ f=3; } if (f > n){ n = f; } if (n == 0){ hue = 0.32; } if (n == 1){ hue = 0.17; } if (n == 2){ hue = 0.05; } if (n == 3){ hue = 0.00; } if (flamme >= 50){ m = m + 1; } if (m > 12){ n = 0; f = 0; m = 0; } if (PM25 <= 500){ pm=0; } if (PM25 > 500 && PM25 <= 900){ pm=1; } if (PM25 > 900 && PM25 <= 1200){ pm=2; } if (PM25 > 1200){ pm=3; } if (pm > n){ n = pm; } if (PM25 <= 1200){ o = o + 1; } if (o > 12){ n = 0; pm = 0; o = 0; } if (ppm <= 5){ hcho=0; } if (ppm > 5 && ppm <= 50){ hcho=1; } if (ppm > 50 && ppm <= 100){ hcho=2; } if (ppm > 100){ hcho=3; } if (hcho > n){ n = hcho; } if (ppm <= 100){ p = p + 1; } if (p > 12){ n = 0; hcho = 0; p = 0; } if (val4 <= 500){ co=0; } if (val4 > 500 && val4 <= 600){ co=1; } if (val4 > 600 && val4 <= 700){ co=2; } if (val4 > 700){ co=3; } if (co > n){ n = co; } if (val4 <= 500){ q = q + 1; } if (q > 12){ n = 0; co = 0; q = 0; } if (n == 2){ analogWrite (speakerPin, 255); // Signal haut sur broche 8 delay (250); analogWrite (speakerPin, 0); // Signal bas sur broche 8 delay (500);} else {analogWrite (speakerPin, 0);} if (n == 3){ analogWrite (speakerPin, 255); // Signal haut sur broche 8 delay (250); analogWrite (speakerPin, 0); // Signal bas sur broche 8 delay (125);} else {analogWrite (speakerPin, 0);} SERIAL_OUTPUT.println(""); SERIAL_OUTPUT.println(n); SERIAL_OUTPUT.println(pm); SERIAL_OUTPUT.println(f); SERIAL_OUTPUT.println(co); SERIAL_OUTPUT.println(hcho); SERIAL_OUTPUT.println(""); } On doit encore réduire et annoter notre code pour le rendre utilisable et compréhensible. On voudrait y ajouter plus de commentaires, et le rendre plus lisible encore. Nous sommes alors passé aux réflexions sur la planche. On pense à tout fixer sur une planche et mieux présenter notre montage. Voici les dimensions de chaque composants : Breadboard 8*6*1 cm ; Laser PM2Sensor 8*4*2 cm ; Arduino 7,5*5,5 cm ; Buzzer 2*1,5 cm ; Détecteur de flammes 3,6*1,5 cm ; Multichannel gas sensor 4*2 cm ; DEL RVB 4,5*2 cm ; HCHO Sensor 2*2,5cm. On a aussi conçu un support en PLA de notre montage. Support en impression 3D support PFL.scad $fn=100; /* Panche rectangulaire */ module crp (){ cube ([20,24,2.5]); } module HCHO (){ cube ([2.2,2.7,0.5]); } module LED (){ cube ([4.7,2.7,1.1]); } module multi (){ cube ([2.4,4.5,0.4]); } module flam (){ cube ([4.0,1.7,0.5]); } module buz (){ cube ([2.2,1.7,0.4]); } module ard (){ cube ([7.7,6.3,1.6]); } module PM (){ cube ([8.6,4.2,0.6]); } module brd (){ cube ([8.4,6.2,1.1]); } module coupe(){ cube([2.,25.2,2.7]); } module trous (){ difference(){ crp(); translate([-0.1,-0.1,-0.1]) coupe(); translate([2.8,1.3,2.1]) HCHO(); translate([8.3,20.4,1.5]) LED(); translate([16.5,1.3,2.2]) multi(); translate([16.01,7.2,2.1]) flam(); translate([2.5,7.2,2.2]) buz(); translate([7.0,8.1,1]) ard(); translate([6.6,15.1,2.0]) PM(); translate([6.7,1.2,1.5]) brd(); } } module crenaux(){ translate([19.8,8.41,2.1]) cube([0.2,0.5,0.4]); translate([19.8,7.19,2.1]) cube([0.2,0.5,0.4]); } module enRectangle(){ crenaux(); trous(); } /* Planche en T */ module crp (){ cube ([20,24,2.5]); } module HCHO (){ cube ([2.2,2.7,0.5]); } module LED (){ cube ([4.7,2.7,1.1]); } module multi (){ cube ([2.4,4.5,0.4]); } module flam (){ cube ([4.0,1.7,0.5]); } module buz (){ cube ([2.2,1.7,0.4]); } module ard (){ cube ([7.7,6.3,1.6]); } module PM (){ cube ([8.6,4.2,0.6]); } module brd (){ cube ([8.4,6.2,1.1]); } module coupe(){ cube([2.,25.2,2.7]); } module T1(){ cube([3,19,2.7]); } module T2(){ cube([3,19,2.7]); } module trous2(){ difference(){ crp(); translate([-0.1,-0.1,-0.1]) coupe(); translate([1.89,10,-0.1,]) T1(); translate([17.1,10,-0.1,]) T2(); translate([2.8,1.3,2.1]) HCHO(); translate([8.3,20.4,1.5]) LED(); translate([16.5,1.3,2.2]) multi(); translate([16.01,7.2,2.1]) flam(); translate([2.5,7.2,2.2]) buz(); translate([7.0,8.1,1]) ard(); translate([6.6,15.1,2.0]) PM(); translate([6.7,1.2,1.5]) brd(); } } module crenaux(){ translate([19.8,8.41,2.1]) cube([0.2,0.5,0.4]); translate([19.8,7.19,2.1]) cube([0.2,0.5,0.4]); } module enT(){ crenaux(); trous2(); } // ON PEUT AFFICHER UN DES DEUX ICI EN CHANGEANT CELUI QU'ON OCCULTE enT(); //enRectangle(); On a dû découper le support à la scie à métaux pour l'emplacement du cable de l'arduino, et lîmer la breadboard sur les côtés : On veut coller les capteurs sur le support, on teste en 1er lieu avec du scotch double face. On décide d'abandonner cette idée puisqu'on ne la trouve pas assez efficace. On teste aussi la possibilité de faire un support en bois. On se rappelle des mesures de des vis de chaque capteurs. 2.5mm : HCHO Sensor ; multichannel gas sensor V2.0 ; Buzzer actif ; DEL RGB 3mm : Arduino ; Laser PM2.5 Sensor ; Détecteur de flammes La breadboard quant à elle a un sticker en dessous qui permet de la coller. Support en découpe laser Planche détecteur de gaz 2.svg Voici donc notre rendu final : Séance 9 - 16/04/2024 : Résumé Séance 9 -16/04/2024 Sur cette séance nous avons fais le support en bois et vissé notre détecteur dessus, mais j'aimerais consacrer cette rubrique à un résumé de notre travail. J'y enlève toutes nos idées irréalisées et y laisse seulement ce qu'on a fait. Voici les composants qu'on utilise et leurs surfaces : Breadboard 8*6*1 cm Laser PM2Sensor 8*4*2 cm Arduino 7,5*5,5 cm Buzzer 2*1,5 cm Détecteur de flammes 3,6*1,5 cm Multichannel gas sensor 4*2 cm DEL RVB 4,5*2 cm HCHO Sensor 2*2,5cm Voici le code implémenté à l'arduino et les bibliothèques nécessaires : Code complet + bibliothèques Code int Led = 13 ; // Déclaration de la 13 sur la broche 13 int buttonpin = 3; // Déclaration de l'entrée digitale sur 3 int analog = A3; // Déclaration de l'entrée analogique sur A3 float flamme; // Lecture de la valeur analogique (Flamme) #include #include #define NUM_LEDS 5 ChainableLED leds(7, 8, NUM_LEDS); int vale = 0; #define Vc 4.95; int f = 0; int n = 0; int m = 0; int o = 0; int pm = 0; int hcho = 0; int p = 0; int val1 = 0; int val2 = 0; int val3 = 0; int val4 = 0; int q = 0; int co = 0; boolean up = true; float hue = 0.32; int speakerPin = 4; // Définition du buzzer sur la broche 8 (Buzzer) #include "Seeed_HM330X.h" #define R0 52.84 #ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE #define SERIAL_OUTPUT SerialUSB #else #define SERIAL_OUTPUT Serial #endif #include #include GAS_GMXXX gas; int PM25=0; int PM252=0; HM330X sensor; u8 buf[30]; const char *str[]={"PM1.0 ug/m3 : ", "PM2.5 ug/m3 : ", "PM10 ug/m3 : ", "PM1.0 ug/m3 : ", "PM2.5 ug/m3 : ", "PM10 ug/m3 : ", }; HM330XErrorCode print_result(const char* str,u16 value) { if(NULL==str) return ERROR_PARAM; SERIAL_OUTPUT.println(value); return NO_ERROR; } /*parse buf with 29 u8-data*/ HM330XErrorCode parse_result(u8 *data) { u16 value=0; if(NULL==data) return ERROR_PARAM; for(int i=1;i<8;i++) { value = (u16)data[i*2]<<8|data[i*2+1]; print_result(str[i-1],value); if (i==3) {PM25=value;} if (i==5) {PM252=value;} } return NO_ERROR; } HM330XErrorCode parse_result_value(u8 *data) { if(NULL==data) return ERROR_PARAM; for(int i=0;i<28;i++) { SERIAL_OUTPUT.print(data[i],HEX); SERIAL_OUTPUT.print(" "); if((0==(i)%5)||(0==i)) { SERIAL_OUTPUT.println(" "); } } u8 sum=0; for(int i=0;i<28;i++) { sum+=data[i]; } if(sum!=data[28]) { SERIAL_OUTPUT.println("wrong checkSum!!!!"); } SERIAL_OUTPUT.println(" "); SERIAL_OUTPUT.println(" "); return NO_ERROR; } /*30s*/ void setup() { SERIAL_OUTPUT.begin(115200); delay(100); SERIAL_OUTPUT.println("Serial start"); if (sensor.init()) { SERIAL_OUTPUT.println("HM330X init failed!!"); while (1); } pinMode(2, OUTPUT); pinMode (speakerPin, OUTPUT); pinMode (Led, OUTPUT) ; // Définition de Led en tant que sortie pinMode (buttonpin, INPUT) ; // Définition de buttonpin en tant qu'entrée pinMode (analog, INPUT) ; // Définition de analog en tant qu'entrée Serial.begin(9600); gas.begin(Wire, 0x08); // use the hardware I2C Serial.begin(115200); leds.init(); } void loop() { if (sensor.read_sensor_value(buf, 29)) { SERIAL_OUTPUT.println("HM330X read result failed!!"); } for (byte i=0; i 999){ val1 = 999;} Serial.print(val1); Serial.println(" NO2 ppm"); // GM302B C2H5CH sensor val2 = gas.getGM302B(); if (val2 > 999){ val2 = 999;} Serial.print(val2); Serial.println(" C2H5CH ppm"); // GM502B VOC sensor val3 = gas.getGM502B(); if (val3 > 999){ val3 = 999;} Serial.print(val3); Serial.println(" VOC ppm"); // GM702B CO sensor val4 = gas.getGM702B(); if (val4 > 999){ val4 = 999;} Serial.print(val4); Serial.println(" CO ppm"); Serial.println(); if (flamme >= 50){ f=0; } if (flamme < 50 && flamme >= 35){ f=1; } if (flamme < 35 && flamme >= 20){ f=2; } if (flamme < 20){ f=3; } if (f > n){ n = f; } if (n == 0){ hue = 0.32; } if (n == 1){ hue = 0.17; } if (n == 2){ hue = 0.05; } if (n == 3){ hue = 0.00; } if (flamme >= 50){ m = m + 1; } if (m > 12){ n = 0; f = 0; m = 0; } if (PM25 <= 500){ pm=0; } if (PM25 > 500 && PM25 <= 900){ pm=1; } if (PM25 > 900 && PM25 <= 1200){ pm=2; } if (PM25 > 1200){ pm=3; } if (pm > n){ n = pm; } if (PM25 <= 1200){ o = o + 1; } if (o > 12){ n = 0; pm = 0; o = 0; } if (ppm <= 5){ hcho=0; } if (ppm > 5 && ppm <= 50){ hcho=1; } if (ppm > 50 && ppm <= 100){ hcho=2; } if (ppm > 100){ hcho=3; } if (hcho > n){ n = hcho; } if (ppm <= 100){ p = p + 1; } if (p > 12){ n = 0; hcho = 0; p = 0; } if (val4 <= 500){ co=0; } if (val4 > 500 && val4 <= 600){ co=1; } if (val4 > 600 && val4 <= 700){ co=2; } if (val4 > 700){ co=3; } if (co > n){ n = co; } if (val4 <= 500){ q = q + 1; } if (q > 12){ n = 0; co = 0; q = 0; } if (n == 2){ analogWrite (speakerPin, 255); // Signal haut sur broche 8 delay (250); analogWrite (speakerPin, 0); // Signal bas sur broche 8 delay (500);} else {analogWrite (speakerPin, 0);} if (n == 3){ analogWrite (speakerPin, 255); // Signal haut sur broche 8 delay (250); analogWrite (speakerPin, 0); // Signal bas sur broche 8 delay (125);} else {analogWrite (speakerPin, 0);} SERIAL_OUTPUT.println(""); SERIAL_OUTPUT.println(n); SERIAL_OUTPUT.println(pm); SERIAL_OUTPUT.println(f); SERIAL_OUTPUT.println(co); SERIAL_OUTPUT.println(hcho); SERIAL_OUTPUT.println(""); } Voici le wiki des composants ; leurs bibliothèques : HCHO Sensor Grove - HCHO Sensor | Seeed Studio Wiki Laser PM2.5 Sensor Grove - Laser PM2.5 Sensor (HM3301) | Seeed Studio Wiki ; Seeed_PM2_5_sensor_HM3301-master.zip Buzzer Actif pj-1780.pdf (gotronic.fr) Détecteur de flammes pj2-35218-1765.pdf (gotronic.fr) Multichannel gas sensor Grove - Multichannel Gas Sensor | Seeed Studio Wiki ; Seeed_Arduino_MultiGas-master.zip DEL RVB  Grove - Multichannel Gas Sensor | Seeed Studio Wiki ; ChainableLED.zip Voici le fichier de découpe de la planche en bois : Fichier inkscape + tailles des vis selon les composants Planche détecteur de gaz 2.svg Ecrous et boulons de 2.5mm : HCHO Sensor ; multichannel gas sensor V2.0 ; Buzzer actif ; DEL RGB Ecrous et boulons de 3mm : Arduino ; Laser PM2.5 Sensor ; Détecteur de flammes Voici le rendu final : Nous avons grandement aimé ce projet. Toutefois, le C++ est un système de codage assez compliqué sans bien plus de cours avant. Ce fut l'activité la plus chronophage de notre projet. Nous aurions préféré avoir bien plus de temps sur la réalisation de notre projet : nous n’avons fait que 2 objectifs sur 6. Cependant, les apprentissages qu’on retire de cette UE ont énormément de valeurs. Son seul défaut est qu’elle n’est pas assez longue ! Projets individuels Projets individuels : Planche et impression 3D Projets individuels Les projets individuels sont de 2 types : une gravure/découpe laser sur une planche de 30*30cm, et une impression 3D de 15*15*15cm^3. Ainsi, chaque personne de ce groupe documentera ses projets personnels Antoine Graziani : Ode à l'artiste qu'on aime IMPRESSION 3D : Mon projet d'impression 3D j'ai utilisé OpenScad, j'ai utilisé le code suivant pour créer un sablier, une forme qui me plaît particulièrement et me rappelle une musique que j'aime beaucoup "Transcending Time" de Dream Theater : Voici le lien scad : Sablier.scad Et voilà le résultat : DECOUPE LASER : Pour le projet de découpe laser, j'ai reproduis et fusionné les logos/pochette d'album de deux de mes groupes de musique préférés sur Inkscape : GOJIRA : Avenged Sevenflod : voilà le résultat : Antoine Guerrien : Projet 3D : J'ai réalisé ce projet en utilisant le logiciel OpenSCAD. J'ai souhaité concevoir un petit présentoir, non pas pour son côté esthétique ou pratique, mais plutôt pour l'intérêt que j'ai pu accorder au code qui le compose. En effet, la réalisation de cet objet m'a permis d'appliquer certaines commandes ou fonctions qui me semblaient particulièrement intéressantes. C'est en somme l'aboutissement d'une série d'apprentissages sur la conception 3D. Voici le fichier .scad : présentoir.scad Le code se décompose en deux parties, la première correspond à la réalisation du plateau incliné à l'aide d'une somme de Minkowski, et la seconde à la conception du support au moyen d'une transformation "hull". L'impression s'est déroulé sans problème. L'objet est robuste et présente un bon niveau de finissions. Rendu 3D du présentoir sur OpenSCAD Objet imprimé Projet 2D : Pour la réalisation de mon projet 2D, j'ai souhaité concevoir un badge pour sac à dos ou valise, ayant sur une face un motif décoratif et sur l'autre des informations utiles (nom, prénoms...). J'ai ainsi décalqué un dessin trouvé sur internet à l'aide du logiciel Inskape. Voici le fichier correspondant .svg : Badge sac à dos.svg Voici le résultat obtenu après impression à la découpeuse laser. Basile Cortinovis : Projet 3D : J'ai décidé d'utiliser le logiciel OpenScad pour mon projet. Je l'ai trouvé plus intuitif et plus simple à prendre en main que FreeScad. Je voulais modéliser quelque chose d'organique et ai choisi de modéliser une pieuvre pour sa symétrie ce qui m'a grandement facilité la tâche. Mon code a été le suivant : $fn=100; module htt(){ difference(){ translate([0,0,1.005]) sphere(0.51); translate([-1.0,-1.0,0]) cube([2.0, 2.0, 1.0]); } } htt(); module bst(){ minkowski(){ cylinder(01.0,0.25,0.5); sphere(0.01); } translate([0,0,0.025]) sphere(0.26); } bst(); module sgm2(){ translate([0, 0, 0]) rotate_extrude(angle=120, convexity=10) translate([0.6, 0]) circle(0.075); } module tcl2(){ rotate([90,150,90]){ translate([-1.0,0.2,0]){ sgm2(); translate([-0.575,01.0526,0]){ rotate([0,0,180]){ sgm2(); } } rotate([180,180,0]){ translate([-1.0, 0, 0]) rotate_extrude(angle=50, convexity=10) translate([0.4, 0]) circle(0.075); } translate([-1.175,1.0526,0]) sphere(0.075); } } } module tcl8(){ tcl2(); rotate([0,0,45]) tcl2(); rotate([0,0,90]) tcl2(); rotate([0,0,135]) tcl2(); rotate([0,0,180]) tcl2(); } tcl8(); mirror([1,0,0]) tcl8(); module aa(){ sphere(0.075); cylinder(0.2,0.075,0.075); translate([0,0,0.2]) sphere(0.075); } module bb(){ difference(){ aa(); translate([0.05,-0.1,-0.11]) cube(4); } } module eye0(){ bb(); translate([0.05,0,0.1]){ resize([0.055,0.055,0.15]) sphere(1); } } module eye(){ translate([0.45,-0.2,0.9]) eye0(); translate([0.45,0.2,0.9]) eye0(); } eye(); Le rendu est le suivant : Et voici le fichier .scad : pieuvre.scad Mon code peut être séparé en trois parties. La première sert à former le corps et est constituée des modules htt(); et bst();. La seconde partie sert à former les tentacules et est constituée des modules sgm2();, tcl2(); et tcl8();. La troisième partie sert à former les yeux et est constituée des modules aa();, bb();, eye0(); et eye();. Les tentacules étant trop fins, l'impression s'est mal réalisée et un des tentacules s'est cassé lors du décollage du modèle de l'imprimante. Pour résoudre ce problème, il faudrait soit placer manuellement des supports entre les tentacules pour qu'ils se supportent entre eux ou agrandir les tentacules. Projet 2D : Le logiciel Inkscape nous a ici été imposé. J'ai décidé de décalquer la scène suivante du célèbre film d'animation Totoro de Miyasaki. Voici le fichier obtenu après le décalquage. J'ai ensuite utilisé une découpeuse laser XXX pour graver le résultat sur du bois. Le résultat obtenue est le suivant. Ben Halima Sassi : Le japonisme renouvelé Pour ma planche, je vous joins l'image vectorielle. Je compte utiliser l'entièreté de la planche. J'espère tellement que ma gravure ressortiras comme je l'espère. Voici ci-dessous mon image vectorielle, ca m'a pris énormément de temps et je ne pense pas pouvoir en sacrifier autant pour l'impression 3D : PFL Planche 30.30.svg Voici l'image qui m'a inspiré : C'est ma petite sœur qui l'a trouvé sur Pinterest. Ca a été posé par l'utilisatrice mi_novaissantos. J'ai réalisé un test sur une planche poubelle, et le résultat ne m'a pas déplu! Prototype 1 Cependant, la planche n'apparaît pas comme je voulais qu'elle le fasse : je m'attendais à une teinte grise moins prononcé pour l'intérieur de la branche, et pourtant elle est ressortie blanche comme un sou neuf. Je ne sais pas encore si je m'arrêterai sur ce résultat. Et pour l'impression 3D je veux faire un champignon Mario en pixel. Je me suis inspiré de ces images : D'après nicepng.com J'aimerais bien que mon champignon soit creux et que son chapeau puisse s'ouvrir (ou plutôt se retirer) : un petit rangement de bureau ! Avec cette envie, plusieurs contraintes viennent : il faut faire la tête et le chapeau sur 2 fichiers différents (ce que je ne ferai pas car j'ai oublié), il faut faire une sorte de jeu entre le chapeau et la tête, ferai-je en sorte que le rangement aie un loquet? des charnières..? (je ne pense pas mais au cas où) Finalement, je n'ai fait qu'un champignon en pixel, que j'ai essayé de remplir au maximum. Voici le fichier (réalisé sur FreeCad) terminé : Tête de champi pixel - PFL.FCStd Mon impression avait raté une première fois car il n'y avait pas de support. Plusieurs problèmes sont survenus : J'ai parfois superposé quelques formes, qui se sont alors supprimés sur le rendu final, Les supports qui ont remplies l'intérieurs ne collaient pas assez les parois, qui sont donc tombés par endroits, Voici donc le rendu final : Je ne suis pas réellement déçu car les enseignements que j'en ressorts sont très utiles. Je garderai ce champignon comme il est, et la prochaine fois que j'imprimerai autre chose en 3D, je ferai attention aux problèmes que j'ai rencontré. J'espère que ces projets vous ont emportés autant que nous ! J'aimerais exprimer un grand merci aux autres groupes qui nous ont donné beaucoup d'inspiration pour la documentation, ainsi qu'à Vincent Dupuis et aux autres fablabs managers.Groupe A2 : testeur de réflexe Prima BARCIET, Jules LAMARE, Milo BERTRAND, Coline CHEVALLIER Journal de bord : Activités d'introduction : 30/01/2024 : découverte du Fablab Objectifs du FabLab : Le premier FabLab fut créé au MIT par Neil Gershenfeld en lien avec son cours "How to make (almost) anything". "Fab" correspond à fabrication numérique et "Lab" à laboratoire de prototypage. Son objectif était de proposer aux étudiants un espace ouvert leur permettant de donner vie à leurs projets scientifiques. Depuis, un réseau international dans le monde entier à été développé, le FabLab de Sorbonne Université en faisant partie. Pour prendre part à ce réseau, plusieurs conditions doivent être respectées, notamment la présence de certaines machines. Outils et machines : On retrouve ainsi au FabLab parmi tant d'autres machines: - des imprimantes 3D - des découpeuses laser (pour le plastique et bois) et à eau (pour le métal) - des fraiseuses électroniques, ... Il y a aussi des salles réservées à l'électronique (soudure) ou encore le travail du bois, un espace bibliothèque, un espace pédagogique, et des tables et tableaux blancs disponibles pour travailler en groupe. Des outils et composants électroniques sont également à disposition. Documentation : Une des valeurs principales du FabLab est le partage, c'est pourquoi il est recommandé de travailler en groupe mais surtout il est important de veiller à la reproductibilité des projets et expériences réalisés par tous, via la documentation sur la plateforme Wiki. Il est obligatoire de fournir un résumé de nos travaux. On retrouve ainsi sur le site des tutoriels pour la prise en main des machines et les archives de tous projets, personnels et pédagogiques, réalisés par les étudiants et personnels du FabLab. 06/02/2024 : introduction à la CAO Lors de cette séance, nous avons pu découvrir le Computer-Aided Design, Conception Assistée par Ordinateur (CAO) en Français, qui est une partie importante de l'apprentissage de la FabAcademy. Nous utiliserons des logiciels gratuits, en accord avec les valeurs de partage du FabLab. Design 2D : Le design 2D, pour les découpeuses laser, se fait sur ordinateur via le logiciel Inkscape au FabLab. Ce logiciel permet d'obtenir des fichiers vectoriels au format SVG sans pixellisation ou problèmes de résolution, en créant les images avec des formes géométriques. Des conventions doivent être absolument respectées pour que les découpeuses laser marchent correctement : - utiliser des lignes d'1 pixel d'épaisseur - utiliser des lignes rouges (#FF0000) pour la découpe - le bleu correspond au marquage (juste des traits) - utiliser des lignes noires pour la gravure (qui correspond à une puissance plus faible du laser) Certaines commandes peuvent être utiles également : Ctrl + Maj + F pour déterminer la largeur des traits, clic sur l'objet + Maj + couleur pour changer la couleur du trait par exemple. Il est utile de regarder les tutos disponible sur ce wiki pour s'approprier d'avantage le logiciel. Nous nous sommes entraînés au dessin 2D en suivant le modèle donné par l'enseignant : Il nous faudra d'ici quelques semaines, dans le cadre de l'UE, faire un dessin 2D sur Inkscape sur une planche 30cm*30cm pour essayer les découpeuses laser par nous même. Design 3D : Nous pouvons utiliser 2 logiciels différents pour le design 3D nécessaire à l'impression 3D : OpenSCAD et FreeCAD. Ces logiciels nous donnent des fichiers 3D au format STL en générant du G-code, correspondant aux déplacements selon x, y et z de la pointe de l'imprimante. Les éléments suivants peuvent être utiles sur les logiciels : - sur OpenSCAD : il faut fermer chaque ligne de code par des points virgules, la fonction F5 pour avoir un aperçu de l’objet généra par le code, F6 pour avoir l’objet final, - sur FreeScad : si le logiciel bug, c’est sûrement qu’une tâche en cour n'a pas été terminée/fermée, on peut utiliser la section “Part” pour générer des objets 3D directement et “Sketcher” pour travailler en 2D avant de transformer le dessin en objet 3D. Nous pouvons chercher sur Internet “nom du logiciel + cheatsheet” pour de l’aide sur les commandes Nous nous sommes aussi entraînés au dessin 3D en suivant les modèles donnés par l'enseignant : Il nous faudra d'ici quelques semaines, dans le cadre de l'UE, faire une modélisation 3D sur un de ces deux logiciels dans des dimensions 15cm*15cm*15cm pour essayer les imprimantes 3D par nous même. Démonstration imprimantes 3D et découpeuses laser : Avant d’utiliser une machine/un ordinateur des salles de découpe et impression 3D, il faut noter que l’on s’est connecté sur les carnets de log in. On utilise du matériau PLA dans les imprimantes 3D, il est disponible en plusieurs couleurs. 2 types d’imprimantes sont disponibles : Pro2 et Pro2Plus. Nous devons choisir la densité de remplissage et la hauteur des couches. Plus les couches sont fines, plus l’impression est longue : c’est pourquoi il nous est conseillé d’utiliser des épaisseurs de 0.4mm et un remplissage de 15 ou 20%. Différents rendus des épaisseurs de couches des imprimantes 3D Les fichiers 3D doivent être ouverts sur IdeaMaker, un autre logiciel, avant d'imprimer sur les machines. Cela nous permet notamment de visualiser les supports automatiquement créés, ainsi que l’aide à l’adhérence et les différentes remplissages grâce à un code couleur. Si l’aperçu nous convient, on télécharge le fichier sur l’imprimante en réseau ou on “exporte sur le disque local” (clé USB) avant de la connecter sur la machine. Il est important de rester pendant les 20 premières minutes de l'impression, car la majorité des problèmes ont lieu au début (fil mal équipé, plateau pas droit, ...). A la fin de l’impression, il faut décoller l’objet du plateau avec une raclette. Au Green FabLab est aussi disponible une imprimante 3D à base de résine liquide qui est ensuite solidifiée, ce qui permet des rendus plus lisses. Quant aux découpes laser, il ne faut pas monopoliser les machines pendant plus de 30mn, la découpe en soit ne dure que quelques secondes. Si nous sommes les premiers de la journée à utiliser la machine, il faut l'allumer et la laisser se remettre en place avec le capot fermé. Il faut toujours tester sur des chutes au préalable, pour vérifier si c’est la bonne épaisseur de matériau notamment (surtout lorsqu’on découpe des encoches). Nous devons rester pendant tout l'usinage pour prévenir des potentiels départs de feu. Il ne faut pas utiliser son propre matériau à moins d’en connaître précisément la constitution : par exemple, le PVC contient du chlore qui, en brûlant sous le laser, dégage des vapeurs similaires au gaz moutarde. Il faut placer la plaque de matériau à la distance focale de la lentille de la découpeuse à l’aide d’un calpige sur les Speedy100, et placer l’origine du laser sur le dessin (en haut à gauche préférablement). Avant de commencer la découpe, on vérifie que l’on a sélectionné la bonne machine (comme une impression classique sur papier) et le bon matériau dans le logiciel. Différents rendus de la découpeuse laser sur les différents matériaux disponibles Les autres découpeuses sont réglées automatiquement sur la bonne distance focale, et le logiciel sur lequel le dessin 2D ne s’ouvre pas sur Inkscape mais Trotec. Dans tous les cas, les explications et tutoriels sur l’utilisation des machines sont disponibles en salles d’impression et de découpage, mais aussi sur le Wiki. 13/02/2024 : capteurs et cartes Arduino Nous nous sommes concentrés sur l'utilisation de capteurs et la programmation de cartes Arduino. Dans Arduino IDE, en branchant le circuit Arduino à l'ordinateur, nous pouvons entrer du code et effectuer des actions. Un exemple de code bien connu est le blink, qui permet de faire clignoter une LED à court intervalle de temps, et nous avons eu l'occasion de le tester. Premièrement, directement sur la LED de la carte Arduino avec le code suivant : // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } En remplaçant (LED_BUILTIN, OUTPUT) par (2, OUTPUT) (ce qui correspond au port D2 de la carte), et en branchant ce port à une breadboard, on a pu faire clignoter la LED de la breadboard. En changeant delay(1000) par delay(100), il y a un intervalle de 100ms et non plus 1000ms quand on éteint et allume la LED. Par la suite, on a utilisé un capteur d'humidité et de température SHT31 Sensor, branché au port IC2 du shield de la carte. En cherchant sur internet "nom du capteur + wiki", on peut trouver facilement le site fabriquant, ce qui nous permet de télécharger la library qui correspond au langage dans lequel le capteur a été fabriqué et doit être utilisé. Dans les exemples fournis avec cette library, nous en avons tester un dont le code se trouve ci-dessous, qui nous permet d'afficher toutes les secondes la température et l'humidité en temps réel : #include #include #include "SHT31.h" SHT31 sht31 = SHT31(); void setup() { Serial.begin(9600); while (!Serial); Serial.println("begin..."); sht31.begin(); } void loop() { float temp = sht31.getTemperature(); float hum = sht31.getHumidity(); Serial.print("Temp = "); Serial.print(temp); Serial.println(" C"); //The unit for Celsius because original arduino don't support speical symbols Serial.print("Hum = "); Serial.print(hum); Serial.println("%"); Serial.println(); delay(1000); } Sur le site internet GoTronic qui est le fournisseur des capteurs du FabLab, nous pouvons retrouver la majorité des capteurs disponibles ici pour nos projets finaux. Nous avons ensuite eu l'occasion de brainstorm sur notre projet. Nous avons penser à faire une machine interactive pour calculer le temps de réaction d'une personne. Il faudra nous assurer d'avoir un protocole précis pour calculer une grandeur cohérente avec incertitudes. Par exemple, quel type de personne utilise la machine : sportif ou non, entraîné ou non, femme/hommes, debout ou assis; pour faire des prédictions et tracer des graphiques de données. Nous utiliserons des capteurs sensoriels, des led colorées piur indiquer le moment où appuyer, et des fonctions permettant de calculer le temps et la moyenne de temps entre les actions. Projets personnels Prima Objet 2d à la découpeuse laser Pour mon projet 2D j'ai d'abord voulu utilisé un dessin que j'avais réalisé moi même Or, en vectorisant l'image via inskape je me suis rendu compte que les contrastes n'étaient pas assez apparents, j'ai donc préféré changer d'image. J'ai donc choisi la vague de Kanagawa comme dessin à imprimer avec la découpeuse laser. J'ai choisi une version de la vague en noir et blanc pour que les contrastes soient cette fois bien visibles. J'ai incorporé cette image dans inskape et j'ai ensuite effectué un clique droit afin de sélectionner l'action "vectoriser l'image". j'ai ensuite supprimer le premier calque del 'image originale. On obtient donc notre image en 2D sous format .svg que l'on peut transférer dans l'ordinateur de la découpeuse laser trotec speedy 360. j'ai choisi une plaque de chute de peuplier 3mm et j'ai ajouté autour de mon dessin un rectangle rouge afin que la découpeuse laser puisse graver le dessin mais aussi en découper le pourtour. Le résultat de cette gravure est visible ci dessous : je suis satisfaite du résultat à l'exception d'un endroit sur les cotés de la gravure au niveau de a signe du milieu ou la découpeuse a semblé surchauffé puisque le bois a légèrement brulé. Objet 3D à l'imprimante 3D Nous avions la possibilité d'utiliser les logiciels freecad et openscad, or , je n'ai pas réussi à les prendre en main et j'ai eu du mal à dédier du temps à ce projet personnel en raison du projet de groupe qui a subi de nombreux pas en arrière dus à des difficultés techniques. J'ai donc essayé de créer moi même un cylindre sur freecad dans l'optique d'imprimer un pot a crayon mais impossible de prendre en main le logiciel sur Mac, je n'ai donc pu me consacrer à ce projet qu'au fablabs et j'avoue n'avoir jamais réussi à créer un cylindre car je bloquais systématiquement à l'étape de relier le cercle du haut et le cercle du bas. J'ai finalement choisi d'utiliser une banque de modèle d'objet 3D et j'ai choisi ce modèle-ci. Pour des raisons de timing nous avons décidé avec Jules et milo de lancer nos 3 impressions dans la même imprimante. Le temps d'impression était de 18h nous avons donc lancé l'impression le jeudi 2 mai vers 16h et mol est revenu récupérer les impressions le vendredi. Il a été informé par un fablabs manager que l'impression n'avait pas marchée en raison d'un problème avec l'extruder. Comme nous étions déjà le vendredi 3 mai et que nous ne pouvions pas lancer une nouvelle impression en raison de la deadline du 4 mai pour finir nos projet personnels  nous n'avons finalement pas pu obtenir nos objets 3D. Cependant, nous avions réussi à utiliser les imprimantes 3D pour notre projet de groupe afin de créer des demi-sphères en PLA Translucide placées au dessus des LED afin de diffuser la lumière. Le résultat de ces impressions est le suivant : Milo Objet 2D à la découpeuse laser Pour mon objet en 2d, j'ai eu l'idée d'utiliser une photo issu de mon téléphone. C'est un tableau de Claude Monet exposé au Musée d'Orsay. J'ai pensé que gravé sur du bois l'effet impressionniste pourrait être joli. J'ai donc importé l'image sur Inkscape. Afin de le graver, il suffit de cliquer droit sur l'image et sélectionner l'option vectoriser un objet matriciel. Pour ensuite enlever le calque "image1", On obtient ceci : Maintenant que j'avais mon image en format .svg, je l'ai importé sur l'ordinateur de la découpeuse laser trotec speedy 360. J'ai choisi une chute de bois naturel 3mm car il ne restait plus de peuplier 3mm. Ensuite sur le logiciel de la découpeuse laser, g tracer un carré "rouge" autour de mon dessin pour le découper, en effet le rouge est assigné à la découpe et le noir à la gravure. J'ai pu lancer ma découpe La découpe s'est bien passé, j'ai pu obtenir mon tableau gravé sur du bois : Je suis content du rendu, la gravure marche très bien sur ce genre de style de peinture. Objet 3D à l'imprimante 3D Pour la conception de mon objet, j'ai eu vraiment du mal car je n'arrive pas du tout à assimiler soit openscad soit freecad. De plus, notre projet de groupe a été chronophage, j'ai totalement oublié l'existence de cette tâche. Il fallait que je sois efficace sur la conception car on approchait de la date limite et que les imprimantes 3D sont très souvent occupés, le temps d'impression est long et il est possible que l'impression échoue. J'ai donc décidé de prendre un fichier stl déjà crée sur internet et de l'imprimer. Je cherchais quelque chose de plutôt petit pour que l'impression soit rapide, j'ai eu l'idée de faire des recherches de porte-clefs à l'imprimante 3D. En tapant "keychain 3d print" je suis tombé sur le site printables où j'ai pu faire mes recherches. J'ai trouvé ce porte-clefs que je trouvais joli et qui correspondait à mes attentes : J'ai lancé une première impression de cet objet, je suis revenu le lendemain et je n'ai pas trouver mon impression. Je n'ai pas pu savoir pourquoi elle n'était pas la. L'impression n'a pas marché ? Il y avait un souci sur le modèle ? Quelqu'un l'a pris ? Impossible de savoir. J'ai donc relancé une autre impression dans l'espoir de le retrouver le lendemain. Sur la même plaque, avec Jules et Prima, on a tous mis nos projets personnels pour simplifier la logistique mais aussi pour gagner du temps. L'impression durait 18h elle imposait de revenir le lendemain et nous avons utilisé du PLA noir. Lorsque je suis revenu chercher nos projets, un membre du fablab m'a informé qu'il y a eu un souci avec l'extruder et que l'impression avait seulement commencé les premières couches. Or cette impression a été lancé jeudi 2 mai, je suis revenu le vendredi, comme la date limite est le week end du 4 mai au 5, il n'a pas été possible de lancer une autre impression. De plus aucune des imprimantes n'était disponible en raison du nombre de personnes présentes au fablab. Coline Objets 2D à la découpeuse laser : Je vais faire une médaille pour le chien de ma sœur, elle la veut de dimensions 5cm sur 3 cm environ, avec le nom du chien sur le recto, et son numéro de téléphone ainsi que ses coordonnées Instagram sur le verso. Pour pouvoir imprimer le resto et le verso, je prendrai un matériaux opaques (un des bois disponibles au FabLab). J'ai fait plusieurs croquis au brouillon sur papier au crayon, elle a sélectionné son préféré, que j'ai alors scanné sur mon téléphone avec l'application CamScanner et importé via mon ordinateur sur Inkscape. J'ai baisser l'opacité du calque de l'image puis créer un autre calque par dessus, sur lequel j'ai retracé au propre l'image en transparence en faisant quelques modifications. Les lettres sont en noir car elles seront gravées. J'ai utilisé l'outil plume (au milieu à gauche) en mode séquence de segments de lignes droites (en haut à gauche) pour faire des formes, puis l'outil nœud (en haut à gauche) pour modifier les coins des lettres qui ne me convenaient pas. J'ai ensuite tracé le contour de la médaille avec une ligne de 1px en rouge car il devra être découpé. Je me suis aidé de lignes (tracées en vert sur l'image, je l'ai ai ensuite supprimée) pour essayer d'avoir un contour le plus symétrique possible. En retournant verticalement l'image comme dans un miroir, on voit que ce n'est pas totalement symétrique mais ça ne ne voit pas à l'œil nu donc j'ai gardé cette forme. A plusieurs reprises, j'ai modifié la taille du dessin, ce qui a aussi modifié l'épaisseur des lignes ce qui était très énervant. J'ai ensuite rajouter l'attache de la médaille en créant deux cercles. J'ai reproduit à l'échelle le dessin sur du papier pour m'assurer que les dimensions étaient bonne, notamment que l'on peut faire passer une attache de porte clé dedans, puisque c'est comme ça qu'elle sera attaché au collier du chien. Pour que l'intersection entre le demi cercle et les lignes droites rouges du reste de contour soit bien nette, j'ai ajouté des rectangles blancs (qui ne se voient donc pas sur le fond blanc). J'ai ensuite créer un carré autour en bleu (1px, marquage) qui me servira de repère pour que le verso soit bien superposé au recto. J'ai ensuite copié le contour rouge et le carré bleu puis l'ai retourné. En bleu, avec l'outil texte, j'ai noté le numéro de téléphone (pas celui sur la photo évidemment, c'est juste un exemple) ainsi que le compte Instagram (allez vous abonner). Le plus important lors de la découpe sera que les lettres stylisées du devant soient bien dans le cadre rouge, c'est pas très grave si les textes derrière ne sont pas très bien centrés et qu'il y ai un petit décalage. Il faudrait donc d'abord que je découpe le grand carré autour et que je marque les numéro et l'Instagram, puis que retourne le carré et que je fasse gravé les lettres et découpe le contour rouge de la médaille. Le contour rouge ne devra être découpé qu'une fois par la machine pour être sure que la découpe soit nette.  J'ai donc supprimé la version retournée du contour rouge autour du numéro de téléphone et est mis le grand carré en rouge à la place. Il faut maintenant que je fasse deux fichiers différents tout en gardant les mêmes dimensions pour le recto et le verso pour que la machine fasse l'un après l'autre. J'ai donc simplement fait un couper coller du recto sur un autre fichier, en m'assurant que les dimensions et épaisseur des lignes n'est pas étaient modifiées. Parmi les bois disponibles à l'impression , j'ai pris un chute de peuplier 3mm. J'ai commencé par le verso (marquage du numéro) qui a été très rapide (moins d'1mn). Mais pour le resto, j'ai du changer mon fichier Inkscape car les rectangles blancs n'apparaissaient pas donc l'attache aurait été découpée du reste de la médaille. J'ai réutilise l'outil plume en commençant à gauche de l'attache, puis en faisant le tour du contour et en finissant à droite de l'attache. De près, les finissions/l'intersection entre l'arc de cercle et les lignes rouges n'est pas très nette mais cela sera suffisant pour la découpeuse laser. Sur l'ordinateur de la découpeuse, le dessin ne voulait être déplacer jusque dans le coin de la planche, j'ai donc décalé la planche du coin de quelques centimètre et ai essayer de replacer le cadre bleu pour que cela correspond au rectangle de la planche, avant de placer le curseur sur une des lignes rouges. Le cadrage n'était pas exact, ce qui a décentré les écritures du verso par rapport à l'avant mais la découpe a réussi. Voici le résultat final : (il est pas très à son avantage soyez indulgents) Comme nous devions faire un objet sur une planche de maximum 30cm sur 30cm et que la médaille était petite, j'ai décidé en plus de graver une image que j'ai pris sur internet. Je l'ai importée sur Inkscape puis je l'ai redimensionné environ au format A5 (21cm sur 14cm au lieu de 14.8cm pour ne pas déformer ou couper l'image). Elle est issue d'un manga donc elle est déjà en noir et blanc mais il fallait tout de même vectorisé l'image. J'ai adapté le seuil de luminosité de la vectorisation pour conserver le maximum de détails mais certains détails ne me convenait pas donc j'ai utiliser les outils gomme et calligraphie pour corriger certaines imperfections. J'ai également rajouter une ligne rouge de 1px tout autour pour la découpe (rectangle de même dimension et même position en X et Y que l'image pour que ça suive bien les bords).         J'ai pris une chute de CP peuplier 3mm. Voici le résultat, parfaitement réalisé : Objet 3D à l'imprimante 3D : porte-clé J'ai décidé de faire un lanceur de paintball en 3D pour en faire un porte-clé. J'utiliserai OpenSCAD. Voici une des images que j'ai utilisée comme référence : J'ai commencé par réalisé le canon et le corps du lanceur avec des cylindre et pavé. J'ai utiliser la fonction rotate pour les orientations de la manière dont je voulais mais j'ai fait en sorte que toute mes formes restent au centre avec une coordonnée en y de 0 pour faciliter le placement (je changerai donc uniquement les coordonnées des x et z en utilisant la fonction translate). J'ai ajusté plusieurs fois la taille des composants jusqu'à ce que cela me convienne. J'ai aussi augmenté au fur et à mesure la fonction $fn= pour lisser les cylindres et par la suite les sphères. Ensuite, j'ai généré des sphères et d'autres cylindres/cônes pour la bouteille d'air comprimé et le loader. Pour la gâchette, j'ai utilisé la fonction difference() entre deux cylindres pour faire une forme de croissant de lune. En remontant au début du code, j'ai à nouveau utilisé la fonction difference() entre deux cylindres pour faire le creux du canon. Les détails des vis en dessous du loader et sur le air source adaptater ont été faits avec 3 cylindres simples. Enfin, j'ai ajouté l'attache du porte clé au bout de la bouteille d air comprimé en faisant une difference() entre deux cercles , et j'ai également ajouté un couvercle au loader en faisant une différence entre un disque et la sphère du loader pour avoir une surface plane sur la sphère, puis en ajoutant un disque : Voici le modèle 3d final : Nous verrons à l'impression si les détails ne sont pas trop petits pour avoir un bon rendu. Avant de le mettre sur l'ordinateur de la salle des imprimantes 3D, il faut convertir le fichier en STL, et avant ça render avec F6 pour avoir l'aperçu final. Un warning c'est affiché me disant que les objets 2D ne pouvaient être combinés avec les objets 3D et certains des objets ont disparu de l'aperçu, j'ai du donc remplacer tous les cercles par des cylindres. Voici le code final, certaines modifications pourraient être apportées pour qu'il soit optimisé : $fn=100; rotate([0,90,0]) { difference(){ cylinder(h=30,r=0.8); translate([0,0,25]){ cylinder(h=6,r=0.5);}} cube([3,3,13],center=true); translate([0,0,6]) cylinder(6,1.5,0.9); } rotate([0,190,0]) translate([0,0,5]) cube([4,2,10],center=true); rotate([0,180,0]) translate([-9,0,0]) cylinder(h=9,r=1.1); translate([1,0,-10]) rotate([0,-90,0]) cylinder(h=10,r=1); translate([-2,0,0]){ translate([-10,0,-10]) sphere(4); translate([-16,0,-10]) sphere(4); rotate([0,90,0]) translate([10,0,-16]) cylinder(h=6,r=4);} cylinder(h=6,r=1.2); rotate([0,-5,0]) translate([-2,0,8.5]) rotate([0,110,0]) cylinder(8,5,1.9); difference(){ rotate([0,-5,0]){ translate([-3.1,0,8.9]) sphere(5.06);} rotate([0,-47,0]){ translate([3.5,0,12.8]) cylinder(h=2,r=3);}} difference(){ rotate ([0,90,0]){ translate([3,0,3]) cube([5,1.5,5], center=true);} rotate ([0,90,0]){ translate([3,0,3]) cube([4.5,2,4.5], center=true); }} difference(){ rotate([90,0,0]){ translate([2.9,-2.8,0]){ cylinder(h=1,r=1.7,center=true);}} rotate([90,0,0]){ translate([3.5,-2.9,0]){ cylinder(h=2,r=1.5,center=true);}}}; translate([-7,0,-11.5]) cylinder(h=3,r=0.6); translate([-7,0,-12.1]) cylinder(h=0.7,r=1); translate([-0.5,0,3]) cylinder(h=1, r=1.8, center=true); translate([-23,0,-10]){ rotate([90,0,0]) difference(){ circle(h=1, r=2,center=true); circle(h=1, r=1.3, center=true);}} rotate([0,-47,0]) translate([3.6,0,12.6]) cylinder(h=0.5, r=3); A la première simulation, le temps d'impression était estimée à 56mn pour une échelle de 8cm de long. Comme le lanceur est "debout" (pas couché à plat), les supports étaient plutôt nombreux. J'ai donc décidé de créé un autre fichier avec le lanceur à plat (rotate sur l'ensemble de mon code), pour voir si je peux avoir un temps moins long. J'ai pu resimuler et l'impression dure 49mn. J'ai utiliser le PLA noir qui était déjà dans la machine. L'impression a été un succès. Jules Présentation du projet individuel de fablab : OBJET 2D : pour mon projet 2D j’ai eu l’idée d’utiliser une photo de mon téléphone et de la graver pour ensuite l’utiliser comme décoration. J’ai donc choisit cette photo : une photo prise avec deux de mes amis et coéquipiers en équipe de France pendant les championnats d’Europe à Padoue en Août 2023. Il fallait utiliser le logiciel inkscape. Sur le logiciel il fallait copier coller la photo et ensuite la vectoriser pour obtenir seulement les contours. Aller dans calques pour retirer l’image de base et n’avoir plus que les contours de l’image. Après avoir fait ça et enregistrer le fichier sur une clé il fallait le mettre sur l’ordinateur de la machine. J’avais déjà réalisé cette action à plusieurs reprises pendant la fabrication de notre projet de groupe donc ça n’a pas été très compliqué pour moi. Après avoir fait le calibrage de la machine le laser commence à gravure et j’ai obtenu le résultat suivant : OBJET 3D : La consigne pour la réalisation de l’objet 3d était de imprimer à l’imprimante 3D un objet de maximum 15cm par 15cm. Le projet de groupe ayant prit énormément de temps et comme je n’étais pas très alaise sur le logiciel Freecad je n’ai pu le réaliser moi même. J’ai donc trouver un fichier de porte clé sur internet. Après avoir trouver et télécharger le fichier sur une clé j’ai du le configurer sur l’ordinateur et l’envoyer à la machine. Tout comme la gravure de l’objet en 2D le projet de groupe m’a permis de réaliser la manipulation assez rapidement car je l’avais déjà fait plusieurs fois. J’ai donc lancer l’impression. En revenant chercher mon objet il était cassé. Les bras et le bec étant trop à l’horizontal le plastique n’a pas pu se solidifier de la bonne manière et a donc coulé. J’ai donc relancer une impression en ajoutant des supports en dessous des bras et du bec pour que le plastique puisse se solidifier de la bonne façon. Comme les imprimantes étaient toutes utilisées nous avons avec Milo et Prima mit nos 3 objets en même temps. L’impression a été un échec mais comme nous étions vendredi nous n’avons pas pu réimprimer nos objets. Projet : testeur de réflexes / machine qui calcule le temps de réaction d'une personne : 27/02/2024 : 1ère séance dédiée au projet, réflexion sur la conception et premier test Lors de cette séance, nous avons testé différents capteurs afin de réaliser notre projet. Le capteur qui nous semble le plus adapté est un capteur de vibration : Grove-Vibration Sensor (SW-420). Nous avons donc essayé de tester le seuil de vibration du capteur pour essayer dans un premier temps de comprendre comment il fonctionne. Pour y parvenir, nous avons donc utiliser et modifier le code ci-dessous. Ce code permet de voir si le capteur marche en nous indiquant si les vibrations captées sont basses ou hautes (code exemple de base que l'on trouve sur internet). Il n'y a besoin d'installer aucune library. // constants won't change. They're used here to set pin numbers: const int buttonPin = 2; // the number of the pushbutton pin const int buzzer = 3; // the number of the buzzer pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(buzzer, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); Serial.begin(9600); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: Serial.println("niveau haut"); delay(500); } else { // turn LED off: Serial.println("niveau bas"); delay(500); } } Nous avons modifier le code pour ne pas utiliser de buzzer : le serial monitor affiche bien le niveau haut ou bas du capteur. Pour le reste de notre montage, nous souhaitons avoir 5 "boutons"/plaques deux placés au niveau des épaules, deux placés au niveau des hanches et un au niveau du buste. 05/03/2024 : 2ème séance du projet et test de l'accéléromètre Aujourd'hui, nous allons essayer d'autres capteurs pour voir lequel nous semble le plus adapté à notre projet, ayant eu un peu de mal à utiliser le capteur de vibration la semaine dernière. Nous avons pensé au capteur de gestes et à l'accéléromètre. Pour l'accéléromètre, on doit le brancher à la port I2C de la carte Arduino et il faut installer la library suivante : https://github.com/Seeed-Studio/Seeed_Arduino_LIS3DHTR/archive/master.zip Nous avons copier l'exemple de code suivant, en mettant le serial monitor en 115200 baud sinon on n'a pas de chiffres affichés en coordonnées mais des symboles illisibles. // This example use I2C. #include "LIS3DHTR.h" #include LIS3DHTR LIS; //IIC #define WIRE Wire void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } void loop() { if (!LIS) { Serial.println("LIS3DHTR didn't connect."); while (1) ; return; } //3 axis Serial.print("x:"); Serial.print(LIS.getAccelerationX()); Serial.print(" "); Serial.print("y:"); Serial.print(LIS.getAccelerationY()); Serial.print(" "); Serial.print("z:"); Serial.println(LIS.getAccelerationZ()); delay(1000); //ADC // Serial.print("adc1:"); Serial.println(LIS.readbitADC1()); // Serial.print("adc2:"); Serial.println(LIS.readbitADC2()); // Serial.print("adc3:"); Serial.println(LIS.readbitADC3()); } On ouvre le serial plotter pour afficher le graphique en temps réel. Nous avons fait un prototype avec une petite plaque en bois trouvée dans la salle de découpe et des ressorts en scotchant l'accéléromètre à la plaque. Lorsqu'on laisse le capteur en position repos horizontale sur la plaque, puis qu'on appuie sur la plaque, on voir bien une modification très soudaine des coordonnées, surtout de z (la hauteur). Nous allons donc pouvoir fixer un seuil en dessous de la valeur normale (1) mais suffisamment basse pour que les plus faibles perturbations passe au dessus de ce seuil : -1.2 semble correspondre. Nous utiliserons cette valeur lors des prochaines séances pour le calibrage du capteur. Pour les prochaines séances, nous devons réfléchir à un moyen de différentier les plaques et indiquer à l'utilisateur sur laquelle appuyer. Utiliser une LED pour chacune des plaques semble trop encombrant. Nous pourrions utiliser une LED RBG au centre entre les plaques qui s'allumerai de différentes aléatoirement parmi celles formatées, et chaque plaque serait associée à une couleur de la LED. 12/03/2024 : 3ème séance du projet, LED RGB et plaques Nous avons tenter de programmer la LED RGB pour la faire s'allumer de 4 couluers différentes aléatoirement. Il faut télécharger sa library avec ce lien : https://github.com/pjpmarques/ChainableLED/releases Nous avons utiliser le code d'exemple suivant disponible sur internet bien que nous n'utilisons qu'une LED et pas 5. La ligne 11 indique qu'il faut la brancher au port D7 de la carte Arduino. /* * Example of using the ChainableRGB library for controlling a Grove RGB. * This code cycles through all the colors in an uniform way. This is accomplished using a HSL color space. */ #include #define NUM_LEDS 5 ChainableLED leds(7, 8, NUM_LEDS); void setup() { leds.init(); } float hue = 0.0; boolean up = true; void loop() { for (byte i=0; i=1.0 && up) up = false; else if (hue<=0.0 && !up) up = true; } Le code suivant ne marche pas mais nous l'avons garder en ébauche pour la séance suivante. Nous avons tenter d'introduire les fonctions millis pour mesurer le temps puis faire la différence pour avoir le temps de réaction puis en calculer la moyenne, ainsi que programmer la LED pour qu'elle s'allume aléatoirement parmi 4 couleurs différentes définies par la variable hue. /* * Example of using the ChainableRGB library for controlling a Grove RGB. * This code cycles through all the colors in an uniform way. This is accomplished using a HSL color space. */ #include #define NUM_LEDS 5 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 void setup() { leds.init(); int Moyenne (int pp,int mes) { // sur 4 mesures int total; for (byte i=0; i<4; i++) { total += mes; delay(pp); } return (total/4) ; } byte Ldr; } float hue = 0.0; boolean go = true; long num; //variable numéro pour choisir chiffre aléatoire byte i=0; // initialise sa valeur à 0 void loop() { for (byte i=0; i MaxLight) ... } Pour le code de l'accéléromètre, nous avons tenter de rajouter le seuil à z=-1.2 mentionné plus haut en reprenant le code de la séance précédente. bool go = false; //à mettre avant void setup //à la fin if(LIS.getAccelerationZ()<-1.2); //valeur normale à -1 car capteur retourné go = true; delay (1000); go = false; Pendant ce temps, nous avons aussi  découper les 4 plaques à la découpeuse 3D, des carrés de 12cm de coté qui nous semblait être une dimension adaptée. Durant la prochaine séance, nous devrons corriger le code de la LED qui ne marche pas et trouver une manière de différencier les différents ports I2C, pour différencier les accéléromètre comme chacun des 4 capteurs sera brancher sur 1 des 4 ports I2C de la carte. 19/03/2024 : 4ème séance du projet, code combinant tous les capteurs Durant cette séance, nous nous sommes concentrée sur le code, car si il ne marche pas rien d'autre ne marchera dans notre projet. Nous avons repris les codes des 2 dernières séances et après avoir corriger de nombreuses erreurs pendant un long moment, voici un code sans erreur que nous obtenons. // This example use I2C. #include "LIS3DHTR.h" #include LIS3DHTR LIS; //IIC #define WIRE Wire #include #define NUM_LEDS 1 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } float hue = 0.0; unsigned long d; unsigned long f; long t = 0; void loop() { leds.init(); Serial.print("z:"); Serial.println(LIS.getAccelerationZ()); for (byte i=0; i LIS3DHTR LIS; //IIC #define WIRE Wire #include #define NUM_LEDS 1 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } float hue = 0.0; unsigned long d; unsigned long f; long t = 0; void loop() { leds.init(); for (byte i=0; i-1.2);{ //valeur normale à -1 car capteur retourné Serial.print("z:"); Serial.println(LIS.getAccelerationZ()); Serial.println("Attente "); delay(100); } f=millis(); //mesure du temps (correspond à la fin/quand la plaque est touchée) delay(100); t = f - d; // t le temps de réaction Serial.print("le temps de réaction est de : "); Serial.print(t); Serial.println("ms"); for (byte i=0; i LIS3DHTR LIS; //IIC #define WIRE Wire #include #define NUM_LEDS 1 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } float hue = 0.0; unsigned long d; unsigned long f; long t = 0; byte power = 0; float z; void loop() { leds.init(); for (byte i=0; i(-1.1)) { //valeur normale à -1 car capteur retourné z = LIS.getAccelerationZ(); Serial.print("Attente, z boucle :"); Serial.println(z); delay(50); } f=millis(); //mesure du temps (correspond à la fin/quand la plaque est touchée) delay(100); t = f - d; // t le temps de réaction Serial.print("le temps de réaction est de : "); Serial.print(t); Serial.println("ms"); for (byte i=0; i LIS3DHTR LIS; //IIC #define WIRE Wire #include #define NUM_LEDS 1 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 #define POEPIN A0 void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } float hue = 0.0; unsigned long d; unsigned long f; long t = 0; byte power = 0; float z; void loop() { leds.init(); int val; // lecture de la tension sur la broche A0 -> brancher la carte centrale sur A0 val = analogRead(POEPIN); // affichage de la tension sur le moniteur serie Serial.println(val); if (val<500) { val = analogRead(POEPIN); Serial.println(val); } else { for (byte i=0; i(-1.1)) { //valeur normale à -1 car capteur retourné z = LIS.getAccelerationZ(); Serial.print("Attente, z boucle :"); Serial.println(z); delay(5000); } f=millis(); //mesure du temps (correspond à la fin/quand la plaque est touchée) delay(100); t = f - d; // t le temps de réaction Serial.print("le temps de réaction est de : "); Serial.print(t); Serial.println("ms"); for (byte i=0; i LIS3DHTR LIS; //IIC #define WIRE Wire #include #define NUM_LEDS 1 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } float hue = 0.0; unsigned long d; unsigned long f; long t = 0; byte power = 0; float z; float c; //compteur float moy; //moyenne float mesures; // nombre de mesures à réaliser float somme; //somme des t pour après faire la moyenne void loop() { leds.init(); mesures = 10; // nb de mesures qui seront réalisées (jsp si on met un fonction ici pour pouvoir changer) Serial.println(" "); Serial.print("nous effectuerons "); Serial.print(mesures); Serial.println(" mesures"); Serial.println(" "); c = 0; somme = 0; moy = 0; unsigned long temps; while (c(-1.1)) { //valeur normale à -1 car capteur retourné z = LIS.getAccelerationZ(); Serial.print("Attente, z boucle :"); Serial.println(z); delay(50); } f=millis(); //mesure du temps (correspond à la fin/quand la plaque est touchée) delay(100); t = f - d; // t le temps de réaction Serial.println(" "); Serial.print("le temps de réaction instantané est de : "); Serial.print(t); Serial.println("ms"); for (byte i=0; i LIS3DHTR LIS; //IIC #define WIRE Wire #include #define NUM_LEDS 1 ChainableLED leds(7, 8, NUM_LEDS); //brancher au port D7 void setup() { Serial.begin(115200); while (!Serial) { }; LIS.begin(WIRE,0x19); //IIC init //LIS.begin(0x19); LIS.openTemp(); //If ADC3 is used, the temperature detection needs to be turned off. // LIS.closeTemp();//default delay(100); LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); } float hue = 0.0; unsigned long d; unsigned long f; long t = 0; byte power = 0; float z; float c; //compteur float moy; //moyenne float mesures; // nombre de mesures à réaliser float somme; //somme des t pour après faire la moyenne void loop() { leds.init(); Serial.println("Attente de 30sec avant de commencer pour mettre en place"); for (byte i=0; i(-1.1)) { //valeur normale à -1 car capteur retourné z = LIS.getAccelerationZ(); Serial.print("Attente, z boucle :"); Serial.println(z); delay(50); } f=millis(); //mesure du temps (correspond à la fin/quand la plaque est touchée) delay(100); t = f - d; // t le temps de réaction Serial.println(" "); Serial.print("le temps de réaction instantané est de : "); Serial.print(t); Serial.println("ms"); for (byte i=0; i comparer avec valeurs usuelles fiabilité -> vérifier les delay() pour voir si on a pas qql millisecondes qui s'ajoutent au temps moyen obtenus ce qu'on peut améliorer : mettre les valeurs de temps de réaction dans un tableur qui calcule la moyenne des 4 plaques, fonction qui choisit le nombre de mesures prises (plutôt que forcément 10 ou autre nombre fixe), résultat plus propre (pas de scotch, cacher les cartes et les fils derrière les plaques, ...), fixer au mur, écarter plus les plaques 29/04/2024 : matinée au FabLab, veille de la présentation Nous avons dédié ces 3h à brancher et finaliser la construction de notre appareil de mesure du temps de réaction. Nous avons continuer de coller certains ressort et dômes en PLA, nous en avons scotcher d'autres. Il nous manque toujours un dôme car il n'y a plus de PLA transparent, ce qui n'empêche pas le fonctionnement de notre appareil bien que cela ne soit pas esthétique. Avec le quadruple embout USB de Milo, nous pouvons relié les 4 cartes à 1 seul ordi. Cela n'est pas idéal car afficher les 4 Serial Monitor sur un même écran et y lire les valeurs renvoyées est quelque peu contraignants mais c'est la solution la plus pratique que nous ayons trouvée. Parfois, le code ne veut pas s'uploader sur une des 4 cartes, ou alors les ports n'apparaissent pas lorsqu'on doit choisir la carte sur le Arduino IDE. On ne connaît pas la raison, mais c'est sûrement car l'ordinateur bug de devoir communiqué avec 4 cartes en même temps. Nous avons tout de même réussi à faire 2 mesures avec le temps qu'il nous restait. Voici le résultat final : (le dessous de chaque plaque) Pour le code, j'ai réduit la longueur d'attente du début à 15sec plutôt que 30s qui était vraiment trop long quand on voulait faire des essais. 30/04/2024 : présentation finale du projet Pendant les 45minutes précédent les présentations de chaque groupe, nous avons finalisé notre diaporama (disponible en pièce jointe de cette page) qui résume tout notre projet avec des schémas, ainsi que fait plusieurs mesures pour vérifier le bon fonctionnement/la fiabilité de notre appareil. Les valeurs obtenues sont cohérentes, bien que nous n'ayons pas eu le temps de tester tous les paramètres que nous avions lister dans notre protocole (voir diapo). C'est un projet qui était très intéressant à réaliser pour ma part et qui m'en a appris pas mal sur le codage en C++, m'étant chargée du code dans son intégralité pendant toutes les séances alors que je n'en avait jamais fait. Nous sommes très satisfaits du résultat bien que beaucoup d'améliorations pourraient encore être apportées. Il y a une semaine encore l'appareil ne marchait pas du tout donc c'est un vrai soulagement que nous ayons trouvé des solutions. J'espère que la documentation était suffisamment claire/détaillée pour que les personnes souhaitant s'inspirer de notre travail disposent de suffisamment de ressources pour ne pas peiner autant que nous ! Groupe à la uuuuune...à la deeeeuuux...à l'A3 !! Noms participants : HENRY Lola BENIKHLEF Inès SERBANESCU Vlad BRÉMOND Lison Découverte du Fablab Séance 1 : Introduction de l'UE Séance 1 : Présentation de l'UE et du FabLab Lors de la première séance de l’UE LU1SXPFL, le Projet FabLab, nous avons pu découvrir l’intérêt de pouvoir s’ouvrir à une autre méthode d’apprentissage scientifique, bien différente des cours traditionnels, en disposant ici d’un espace dédié à l’élaboration de projets communs ainsi que la découverte et l’utilisation d’outils en vigueur. En plus de l’aide des Fabmanagers travaillant sur place, ainsi que de notre référent d’UE,  imprimantes 3D, outils de découpe de bois et métaux, matériel informatique et machines de coupe de précision seront à disposition pour nous permettre de mener à bien nos futurs projets, à savoir l’élaboration d’un appareil de mesure ou d’une expérience physique. Imprimantes 3D L’objectif premier du FabLab, bien avant l’avancée innovante et technologique, sera la mise en commun, la documentation et le caractère reproductible de chaque projet, afin de créer un point d’échange et de coopération entre étudiants, le tout conservé sur la plateforme numérique Wiki, alimentée en images, descriptions, programmes et codages de chaque projet, et consultable par tous. L’espace FabLab reste accessible l’après-midi en dehors des cours dédiés à l’UE, où les groupes de projets pourront y consacrer le temps nécessaire en autonomie afin de peaufiner leurs objectifs et leur présentation orale à la classe qui fera l’objet d’une évaluation. Objets imprimés grâce à l'imprimante 3D Gravure sur bois Séance 2 : Découverte des logiciels de dessin Séance 2 : Découverte des logiciels de dessin Durant cette deuxième séance au FabLab, nous avons découvert plusieurs logiciels de dessin 2D et 3D permettant la conception d'objets plus ou moins complexes dans un plan et dans l'espace. Après une courte initiation, nous nous sommes essayés au logiciel de dessin 2D à InkScape, mettant à disposition de nombreux outils, formes et couleurs. ce logiciel sera principalement utilisé pour la gravure et la découpe laser, où il faudra veiller à respecter les codes couleurs de la machine (ligne rouge = découpe, ligne noire = gravure). Puis, nous avons utilisé le logiciel OpenSCAD, afin de comprendre les bases de la conception 3D et du codage. Nous avons ainsi modélisé un cube percé sur chaque face, avec un codage comportant un module (3 cylindres inclinés selon les 3 axes x, y, z) et une différence entre ce dernier et un cube (on ''enlève'' les volumes des 3 cylindres au cube) : module space () { cylinder (12,3,3, center=true); rotate([90,0,0]) cylinder(12,3,3, center=true); rotate([0,90,0]) cylinder(12,3,3, center=true); }; $fn=100; difference () { cube(10, center=true); space (); }; Enfin, notre responsable FabLab nous à présenté le logiciel 3D FreeCAD, permettant également une visualisation 3D complète des objets modélisés et de l'ensemble des coordonnées et valeurs de la représentation. Bien que moins maniable et intuitif qu'OpenSCAD, FreeCAD nous a tout de même permis de modéliser le même cube percé, avec cette fois-ci, non pas un codage mais une modification des coordonnées des polyèdres : Ces deux logiciels 3D seront principalement utilisés pour l'impression 3D (imprimantes 3D à filament). Enfin, la séance s'est achevée avec la présentation des machines de découpe par Clara Devanz, FabManager de l'espace prototypage, où nous ont été données quelques caractéristiques et protocoles de sécurité des machines :                                                      Imprimante 3D                                                                 Découpeuse laser Pour les imprimantes 3D, il est nécessaire de bien vérifier que le filament est chargé et que le plateau est droit, pour ne pas que l'impression soit décalée. De plus, il est important de surveiller l'impression durant ses 15 premières minutes et d'éviter les impressions trop longues (plus de 10h), pour permettre à chacun d'utiliser les machines. Pour les découpes laser, nous devons surveiller la machine tout du long de l'usinage (qui ne doit pas dépasser 30 minutes) et bien régler le plateau selon la focale du laser afin d'avoir une puissance et une précision optimale lors de la découpe. Les matériaux extérieurs au FabLab sont interdits (risque de dégagement de gaz irritants, inflammables...) et un code couleur précédemment évoqué est de rigueur pour les découpes (lignes rouges) et gravures (zones noires). Les FabManagers restent à disposition au moindre doute, afin de nous guider au mieux et nous expliquer le fonctionnement des machines disponibles. Séance 3 : Découverte de l'Arduino Séance 3 : Découverte de l'Arduino et réflexion de projet Cette troisième séance du projet Fablab a débuté par un court historique de l'électronique. De la découverte de l'électromagnétisme au XIXéme siècle jusqu'à la micro-électronique comme on la connait aujourd'hui, nous avons pu voir les avancements du monde de l'électronique au fil du temps. Nous avons été ensuite introduits à la carte Arduino, qui a pour but d'offrir une approche plus simplifiée au prototypage que les circuits gravés, ainsi qu'au logiciel Arduino IDE qui permet d'écrire, compiler et envoyer des programmes sur la carte avec le langage Arduino, notamment la fonction setup pour l'initialisation et loop pour faire répéter certaines informations. Afin de nous familiariser plus avec le fonctionnement des plaquettes Arduino et avec le langage de programmation, nous avons pu les manipuler, réaliser des branchements de capteurs et tester de différents codes.   void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); } #include #include #include "SHT31.h" SHT31 sht31 = SHT31(); void setup() { Serial.begin(9600); while(!Serial); Serial.println("begin..."); sht31.begin(); } void loop() { float temp = sht31.getTemperature(); float hum = sht31.getHumidity(); Serial.print("Temp = "); Serial.print(temp); Serial.println(" C"); Serial.print("Hum = "); Serial.print(hum); Serial.println("%"); Serial.println(); delay(1000); } Projet Final Séance 4 : Premières idées de Projet Final Séance 4 : Début du Projet Final Après les trois premières séances de découverte du Fablab et des différents outils que nous avons à disposition, cette quatrième séance nous amène au début du projet final. Nous avons alors commencé à réfléchir à ce que nous souhaiterions réaliser et plusieurs idées nous sont venues : La première était de créer un arroseur de plantes qui, au travers de différents capteurs, pourrait mesurer l’humidité de la fleur et l'arroser en cas de terre trop sèche, grâce à un système de réservoir à valve. Nous avons finalement décidé de ne pas retenir cette idée, puisque celle-ci avait déjà été réalisée les années précédentes. Nous avons eu ensuite l’idée de faire une tasse qui, grâce à un capteur de température enverrait un signal à des résistances situées en dessous de la tasse pour que celles-ci se mettent à chauffer quand le liquide à l'intérieur deviendrait trop froid. Même si nous tenions à cette idée, elle ne remplissait pas la consigne du projet (qui est de créer un objet par lequel nous pourrions prendre des mesures physiques exploitables sur un graphique).  L'idée finalement retenue est un mélange des deux premières. L'idée est de créer un instrument de mesure qui réunit tous les différents capteurs évoqués précédemment : on garde l'idée de créer un capteur pour les plantes, avec un capteur d'UV pour déterminer si le taux d'UV est propice au développement de la plante et un capteur d’humidité et de température pour nous assurer de ses bonnes conditions de croissance. Nous avons ensuite pensé qu'il faudrait pouvoir afficher les données envoyés par les capteurs. Pour cela, nous choisissons d’inclure dans l’instrument un écran LCD qui permettra, après avoir interprété les données, d'offrir une information claire sur l'état de l'environnement de croissance de la plante. Choix des capteurs : Une fois les capteurs choisis, nous avons commencé à les tester un à un pour comprendre leur fonctionnement : 1. Grove 16x2 LCD Alimentation: 3.3V/5V Interface: I2C Lien: https://wiki.seeedstudio.com/Grove-16x2_LCD_Series/ Nous avons d’abord essayé d’utiliser l'écran, qui était l'étape la plus facile puisqu'aucune bibliothèque spécifique n'est à installer. Pour cela nous avons pris le code disponible sur le site du constructeur et nous l'avons modifié de sorte à obtenir différents messages : #include #include "rgb_lcd.h" rgb_lcd lcd; /* const int colorR = 255; const int colorG = 0; const int colorB = 0; */ void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); //lcd.setRGB(colorR, colorG, colorB); // Print a message to the LCD. lcd.print("hello, world!"); // ou lcd.print("The incredibles"); delay(1000); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000); delay(100); } 2. Capteur d’humidité Alimentation: 3.3V/5V Interface: A0 Lien: https://wiki.seeedstudio.com/Grove-Capacitive_Moisture_Sensor-Corrosion-Resistant/ Pour le capteur d’humidité, la prise en main a été plus longue, puisque celui-ci nécessite de télécharger une bibliothèque spécifique. Le premier essai a débouché sur un message d'erreur (dû à une mauvaise bibliothèque), mais nous avons réussi à comprendre son fonctionnement et à l'utiliser. Nous avons d’abord trempé l'extrémité du capteur dans l’eau et observé le taux d’humidité affiché sur l'ordinateur.  Celle-ci se trouvait aux alentours de 600 ce qui nous a paru faible sachant que, selon le constructeur, le taux maximal d'humidité pour l'eau se trouve à 950. Nous avons ensuite testé le capteur dans différents pots de plantes présents dans le Fablab, et trouvé des valeurs aux alentours de 370. /* AnalogReadSerial Reads an analog input on pin 0, prints the result to the Serial Monitor. Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu). Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. https://arduino.cc/en/Tutorial/AnalogReadSerial */ // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(100); // delay in between reads for stability } 3. Capteur d'UV Alimentation: 3.3V/5V Interface: A0 Lien: https://wiki.seeedstudio.com/Grove-UV_Sensor/ Nous avons également testé le capteur d’UV, et trouvé dans la pièce, un taux aux alentours de 4 (à l'ombre). Au cours d’une journée, l’indice UV varie normalement entre 1 et 13. // calculate UV index directly void setup(){ Serial.begin(9600); } void loop() { int sensorValue; long sum=0; for(int i=0;i<1024;i++)// accumulate readings for 1024 times { sensorValue=analogRead(A0); sum=sensorValue+sum; delay(2); } long meanVal = sum/1024; // get mean value Serial.print("The current UV index is:"); Serial.print((meanVal*1000/4.3-83)/21);// get a detailed calculating expression for UV index in schematic files. Serial.print("\n"); delay(20); } 4. Capteur de lumière En ce qui concerne le capteur de lumière, nous en avons trouvé deux : le premier est un capteur analogique qui mesure, à travers une photo résistance, l'intensité de la lumière. L'idée derrière ce capteur est d’observer la résistance de la photodiode de sorte à ce que lorsque celle-ci diminue, l'intensité augmente. Le deuxième capteur, un capteur digital cette fois, qui peut mesurer plusieurs spectre de lumière, dû à ses deux diodes: l’infrarouge et le spectre complet. Ces deux capteurs fonctionnent de manière complètement différente, c’est pour cette raison que nous n'avons pas encore choisi le notre. A. Capteur de Lumière Analogique: Alimentation: 3.3V/5V Interface: A0 Lien Capteur Analogique: https://wiki.seeedstudio.com/Grove-Light_Sensor/ void setup() {Serial.begin(9600); } void loop() { int value = analogRead(A0); // value = map(value, 0, 800, 0, 10); delay(100); Serial.println(value); } B. Capteur de Lumière Digital: Alimentation: 3.3V/5V Interface: I2C Lien Capteur Digital: https://wiki.seeedstudio.com/Grove-Digital_Light_Sensor/ #include #include void setup() { Wire.begin(); Serial.begin(9600); TSL2561.init(); } void loop() { Serial.print("The Light value is: "); Serial.println(TSL2561.readVisibleLux()); delay(1000); } Séance 5 : Modélisation 3D et choix des capteurs Séance 5 : Avancée du projet Au cours de cette séance nous avons continué de tester les programmes de nos capteurs et modélisé la boite qui les contiendra. Pour des questions de temps, nous avons également décidé de remplacer le capteur d’UV choisi à la séance précédente par un capteur de lumière simple qui permettra de déterminer si l'éclairage ambiant est assez élevé pour la plante étudiée. A. Conception de la "Boite Maison" : 1. Capteurs Pour concevoir notre boite qui abritera nos capteurs, nous avons pensé un modèle pratique et simpliste, à savoir un cube qui sera posé à la surface de la terre étudiée, et dont nous perçons certaines faces afin d'avoir une première impression des emplacements des capteurs. Nous prévoyons ainsi un trou sur le haut pour l'écran, et un second sur la face du bas, pour le capteur d'humidité (de sorte à ce qu'il soit en contact direct avec la terre). 2. Pic à planter Pour maintenir notre "Boite Maison" droite, nous prévoyons un cône sur sa face du dessous, à planter dans la terre. De cette manière, le cube sera en surface et maintenu par ce pieux. B. Modélisation 3D du capteur sur OpenSCAD : Séance 6 : Modification du modèle 3D et test de capteurs Séance 6 : Modification du modèle 3D et test de capteurs Lors de cette séance, nous nous sommes concentrés sur la prise des mesures des capteurs, afin de faire correspondre les dimensions de notre modèle 3D. Pour cela, nous avons pris appui sur la modélisation 3D préparée la semaine précédente (voir séance 5), qui nous a permis d'avoir une première approche visuelle de notre projet et des emplacements des éléments : écran, capteurs d'humidité et capteur de lumière. A. Prises des mesures des capteurs : Nous rassemblons ces données dans le tableau suivant (on assimilera qu'une unité sur Openscade vaut 1 mm réel) : Éléments Longueur Largeur Épaisseur À noter Écran 7 cm 2,3 cm / Support : 8 cm x 3,8 cm Capteur humidité 9,5 cm 2 cm 1 mm Hauteur max = 7 mm Capteur lumière 1,9 cm 1,9 cm 1 mm Hauteur max = 1,7 cm Arduino 8 cm 5,8 cm 3,3 cm / Prise câbles 1 cm 5 mm / / Nous conservons ainsi le modèle du "cube+pic" pour notre modèle, solon la modélisation précédente. Néanmoins, nous souhaitions placer un écran d'affichage sur la face du haut du cube et un capteur de lumière (qui nécessite également de ne pas être placé sur une des faces pour des soucis d'ombrage). La face du haut n'offrant pas assez de place pour les deux éléments, nous avons décidé de remplacer ce côté par deux facettes, une pour l'écran, l'autre pour le capteur, qui donnent à notre modèle une forme de maison : B. Modélisation "Base Maison" : Premièrement, pour notre modèle, nous venons former une "base maison" qui sera la forme externe de notre projet. Nous utilisons pour cela une combinaison d'un cube de 110 unités de côté et d'un cylindre à facettes (en fn=4) qui viendra être placé en biais sur la face du haut du cube avec la fonction "rotate" et ajusté aux bonnes dimensions avec "scale". Par la suite, nous venons créer un seconde "base maison" aux dimensions plus petites que la première (cube de 100 unités de côté), que nous incluons dans une fonction "difference" avec la base 1. Cela permet de faire le vide dans cette dernière, et donc de pouvoir venir y placer l'Arduino après impression. $fn=4; //maison externe module ext() { cube (110, center=true); translate ([0,0,55.5]) rotate ([180,90,180]) scale ([1.7,2.76,1.1]) cylinder (100,20,20, center=true); }; //maison interne module int() { cube (100, center=true); translate ([0,0,55.5]) rotate ([180,90,180]) scale ([1.5,2.72,0.9]) cylinder (100,20,20, center=true); }; //vide maison difference () { ext(); int(); translate ([-50,0,5]) scale ([0.2,1,1]) cube (80, center=true); //porte façade translate ([0,-50,5]) scale ([1,0.2,1]) cube (80, center=true); //porte latérale }; Pour mieux visualiser notre modèle et venir percer les trous qui accueillerons nos futures portes, nous créons deux cubes identiques de 80 unités de côté, que nous déplaçons sur deux faces de la "base maison" et ajoutons à la fonction "différence" précédemment écrite (voir code ci-dessus avec les annotations "//porte façade" et "//porte latérale"). C. Ajouts des emplacements percés : Par la suite, nous viendrons ajouter différents éléments à cette même fonction "difference", afin de venir définir nos emplacements. Écran Pour placer notre écran sur une des deux facettes hautes, nous venons créer un cube de 70,2 unités de côté (nous prenons légèrement plus grand que notre mesure réelle : 7 cm), que nous venons placer sur le toit de la maison avec "rotate" et ajusté selon nos valeurs de mesures avec "scale". Code à ajouter à la fonction "difference" : translate ([0,-30,72]) rotate ([0,56,90]) scale ([0.5,1,0.32]) cube (70.2, center=true); //écran Capteur de lumière Pour l'emplacement de notre capteur de lumière, nous ne perçons par la deuxième facette haute de la maison mais créons simplement un léger renfoncement pour pouvoir l'y accueillir. Pour cela nous venons ajouter un cube  de 21 unités de côté (toujours selon nos mesures), que nous déplaçons avec "translate" et "rotate". Code à ajouter à la fonction "difference" : translate ([0,35,70]) rotate ([-34,0,0]) scale ([1,1,0.2]) cube (21, center=true); //creux lumière Câbles Comme l'Arduino se situera à l'intérieur de notre "base maison", il était nécessaire de venir prévoir des trous pour passer les câbles qui la reliera aux capteurs externes. Nous venons donc les ajouter avec des cubes de 10 unités de côté, (positionnés proches des emplacements des capteurs d'humidité et de lumière), déplacés et redimensionnés avec "translate", "rotate" et "scale". Code à ajouter à la fonction "difference" : translate ([20,35,68]) rotate ([0,34,90]) scale ([1,0.5,0.5]) cube (10, center=true); //trou lumière translate ([40,56,-40]) scale ([1,2,0.5]) cube (10, center=true); //trou humidité D. Derniers rajouts externes 1. Capteur d'humidité Le capteur d'humidité doit être en contact avec la terre, et doit donc être placé de préférence sur la face du dessous de la "base maison". Pour visualiser son futur emplacement, nous venons créer un cube de 97 unités de côtés, aplatit avec "scale", de sorte à créer une bande légèrement avancée sur la face du bas, où nous viendrons fixer notre capteur. 2. Pic-à-planter Sur le même principe que la modélisation de la semaine précédente, nous venons former un cylindre que nous déplaçons avec "translate" pour venir le placer à côté du capteur d'humidité, et créer ainsi le pic qui nous permettra de planter notre "base maison" dans la terre. //pic translate ([0,0,-95]) rotate ([0,0,90]) cylinder (80,1,25,center=true); //humidité translate ([40,0,-54]) scale ([0.2,1,0.05]) cube (97, center=true); 3. Portes Pour cacher l'intérieur de notre "base maison" et protéger l'Arduino de la terre, nous venons créer deux portes pour les trous des faces du cube de base. Pour cela nous créons un assemblage de 2 cubes aplatis de 80 et 85 unités de côté, que nous perçons au centre (pour pouvoir les retirer aisément). module PORTE() { module porte() { translate ([0,-130,0]) scale ([1,1,0.08]) cube (80, center=true); translate ([0,-130,5.1]) scale ([1,1,0.05]) cube (85, center=true); }; //trou porte difference () { porte (); translate ([0,-130,5.1]) scale ([1,1,1]) cylinder (25,10,10, center=true); }; }; translate ([1,100,1]) PORTE(); translate ([1,1,1]) PORTE(); E. Vue d'ensemble et impression : Nous avons convenu de séparer le pic de la "base maison" lors de la modélisation sur IdeaMaker pour considérablement réduire le temps d'impression et les supports nécessaires. Séance 7 : Calibrage des capteurs et courbe de mesures Séance 7 : Calibrage des capteurs et courbe de mesures Pour cette séance, nous nous sommes concentrés sur la réimpression de notre modèle 3D (le premier essai fut un lamentable échec), ainsi que le calibrage des capteurs. Les capteurs sont la partie principale du projet que l'on veut réaliser. Cependant on ne peut obtenir des valeurs exploitables si on ne les calibre pas. Chacun d’entre nous a sans doute déjà eu des fleurs d'intérieur et a connaissance de l’importance de bien les entretenir : le manque ou le trop-plein d'eau ainsi que l'exposition solaire peuvent avoir des conséquences sur la durée de vie de la plante. A. Calibrage Capteur d'humidité Calibrage capteur d'humidité Pour le capteur d'humidité nous avons pu trouver un protocole de calibrage sur internet qui nous donnait une idée des étapes à suivre. Avant de détailler le protocole, il faut d’abord comprendre le fonctionnement du capteur capacitif : ce-dernier mesure la permittivité électrique entre l’eau et le sol, avec une permittivité relative pour les sols secs entre 2 et 6 et aux environ de 80 pour l’eau. Nous faisons néanmoins face à un léger problème : comme chaque type de sol a une porosité différente, (c'est-à-dire que l’eau peut occuper jusqu'à 60% du volume de terre), le calibrage doit impérativement être refait pour chaque environnement dans lequel le capteur est utilisé. 1. Matériel nécessaire : Capteur Grove d’humidité (https://wiki.seeedstudio.com/Grove-Capacitive_Moisture_Sensor-Corrosion-Resistant/) Arduino Une balance de précision Un becher gradués de 200 mL Un échantillon de terre Attention : Comme mentionné lors de la séance 4, le capteur doit être connecté sur les ports analogiques et à 3.3V. 2. Protocole de calibrage : Mesurer la masse du bécher Ajouter dans le bécher 20g de terre sèche Ajouter 5 g d'eau Mélanger le sol de sorte à avoir une mixture homogène et mesurer l'humidité avec le capteur Mesurer la masse de la terre après chaque ajout d’eau Répéter les étapes 3,4 et 5 jusqu’à ce que le sol arrive à saturation Après être arrivé à saturation, étaler le sol mouillé sur du papier-cuisson et attendre qu’il sèche ( cela peut prendre jusqu’à 7 jours, donc étaler le plus finement possible afin qu’il sèche au plus vite) Quand la terre est sèche, mesurer la masse de celle-ci ( elle correspondra à la masse du sol séché utilisé dans le calcul de la teneur en eau dans le sol). 3. Interprétation des résultats : Après avoir mis les données dans un excel, on calcule la densité apparente qui sera utilisée dans le calcule de la teneur en eau de la terre. Pour cela, il faut connaître la masse de l'échantillon de terre et son volume. Dans notre cas, on a pris un échantillon de 30g pour un volume de 200mL. On obtient alors une densité apparente ("Bulk Density") de 0,15 g cm^(-3), ce qui est raisonnable sachant que l'échantillon de terreau est constitué de poussière et de terre plus compacte. La teneur en l’eau du sol, étant en fait le rapport entre le volume d’eau et celui de terre, nous donne une idée de la quantité d'eau dans la terre qui nous permettra, à partir des besoins de la plante, d’estimer la nécessité en eau de celle-ci. On note (Theta)v la teneur d'eau me la masse d'eau mi la masse initiale de terre (rho)e la densité d'eau (rho)s la densité apparente de la terre On a alors tous les valeurs nécessaire pour calculer la teneur d'eau de la terre: Masse du becher= 216g Valeur du capteur dans l'air=400 Valeur du capteur dans l'eau= 220 Masse de la terre initiale= 30g Volume de l'échantillon= 200mL Densité apparente de la terre= 0,15 g/cm^3 Densité de l'eau= 0,997 g/cm^3 Masse terre initiale(g) Masse d'eau (g) Masse terre mouillée(g) Valeur du capteur Teneur d'eau de la terre (cm^3/cm^3) 30 0 30 403 0 30 5 35 392 0,025075226 30 10 40 365 0,050150451 30 15 45 355 0,075225677 30 20 50 335 0,100300903 30 25 55 308 0,125376128 30 30 60 285 0,150451354 30 35 65 270 0,17552658 30 40 70 255            0,200601805 30 45 75 242 0,225677031 30 50 80 228 0,250752257 30 55 85 220 0,275827482 30 60 90 220 0,300902708 Les résultats du calibrage et l'équation de la courbe peuvent être retrouvés dans le graphique plus bas: Avec ce type de sol et en utilisant spécifiquement ce capteur, nous avons pu trouver l'équation de la droite : Les valeurs peuvent être différente pour chaque capteur 4. Programmation du Capteur d'humidité : En ce qui concerne le code écrit pour le capteur d’humidité, nous avons d’abord introduit les constantes ( la valeur du capteur dans l’air et dans l’eau et les paramètres libres de l'équation de la droite) puis on a définit l'entrée sur laquelle se trouve le capteur sur l’Arduino. On a ensuite utilisé l'équation de la droite pour calculer la valeur de la teneur d’eau pour toutes valeurs et on a pris comme minima la valeur quand le capteur est dans l’air et comme maxima quand celui ci est dans l’eau et, donc, la terre est à saturation. const int air=403; // valeur capteur sec const int eau=220; // valeur capteur dans l'eau float courbe1= -0.015;// la pente de la droite float courbe2= +0.5876; void setup() { Serial.begin(9600); } void loop() { int entree=analogRead(A0); float Humidite; // Humidité du sol float air_Hum; // Humidité de l’air float eau_Hum; // Humidité de l’eau Serial.print("Humidité:"); Humidite=((courbe1*entree)+courbe2); eau_Hum=((courbe1*eau)+courbe2);// humidité eau air_Hum=((courbe1*air)+courbe2);// humidité air int procenthum=map(Humidite,eau_Hum,air_Hum,100,0);// pourcentage d'humidité Serial.print(procenthum);// Imprimer le pourcentage d’humidité Serial.println("%"); delay(500); } B. Calibrage Capteur de lumière Calibrage capteur de lumière Le calibrage du capteur de lumière a été une toute autre histoire. Comme nous ne disposons pas de luxmètre, nous n’avons pas pu faire un calibrage qualitatif, mais plutôt quantitatif. Nous avons d’abord tenté de trouver l’intensité lumineuse de la lampe torche d’un de nos téléphones, mais nous n’avons pas réussi à trouver une information claire. Nous avons ensuite pensé à chercher la luminosité de l'écran qui est plus facile à trouver.  Nous connaissons aussi la valeur du capteur dans le noir et à la lumière du jour. Cela nous a donné trois points, assez pour avoir une droite et pouvoir déterminer sa pente. Nous sommes conscients que cela ne nous permet pas d’avoir des résultats concluants, mais seulement approximatifs. 1. Matériel Nécessaire: Capteur de lumière Grove Digital(https://wiki.seeedstudio.com/Grove-Digital_Light_Sensor/) Arduino Un appareil dont on connaît son intensité lumineuse Pour un calibrage plus précis un luxmètre peut être utilisé 2. Protocole de Calibrage: Nous avons essayé de réduire le plus possible les incertitudes et en n’ayant pas de luxmètre nous avons voulu calibrer le capteur dans les meilleures conditions. Comme mentionné aussi plus haut, nous avons réussi à trouver sur internet la luminosité de l'écran d’un téléphone, celle d’un PC et on a estimé la luminosité en plein jour nuageux et ensoleillé. Nous avons aussi penser que calibrer le capteur en plein jour peut fausser les résultats de la luminosité des appareils électroniques, c’est pour cette raison que nous avons décidé de le calibrer dans le noir. Pour le protocole de calibrage en soit même, nous avons juste mis le capteur devant la source de lumière, on a attendu que les valeurs se stabilisent et puis on l’a noté dans l’Excel. 3. Interpretations des resultats: Nous avons ensuite introduit les données dans un excel afin d’avoir l'équation de la droite pour le calibrage final. Valeur capteur LUX 0 0 172 500 231 1000 7000 17500 49000 100000 Les résultats du calibrage et l'équation de la courbe peuvent être retrouvés dans le graphique plus bas: Dans ces conditions et en utilisant spécifiquement ce capteur, nous avons pu trouver l'équation de la droite: Les valeurs peuvent être différente pour chaque capteur 4. Programmation du Capteur de lumière : En ce qui concerne le code écrit pour le capteur de lumière, nous avons d’abord introduit les constantes ( la valeur du capteur dans le noir et à la lumière du jour, qui est aussi la valeur maximale, et les paramètres libres de l'équation de la droite) puis on a définit l'entrée sur laquelle se trouve le capteur sur l’Arduino (“Wire.begin();” est la commande utilisé pour les capteurs qui utilisent un port I2C). On a ensuite utilisé l'équation de la droite pour calculer la valeur de la luminosité en LUX en on la affichée sur l’écran. Il y a quand même une petite différence du capteur d’humidité, nous avons décidé de ne plus calculer le pourcentage parce que chaque plante a des besoins différents de lumière, donc nous souhaitons dans le code final enlever complètement les valeurs numériques de l’affichage sur l'écran et faciliter l’utilisation de l’objet final en affichant des messages qui permettent de savoir exactement les nécessités de la plante. #include #include float courbe1= +2.4773;// pente de la courbe float courbe2= +165.07; void setup() { Wire.begin(); Serial.begin(9600); TSL2561.init(); } void loop() { int entree=TSL2561.readVisibleLux(); int LUM; Serial.print("Luminosité: "); LUM=((courbe1*entree)+courbe2); // La Luminosité en LUX après calibrage Serial.println(LUM); delay(1000); } Séance 8 : Découpe de la boîte Séance 8 : Découpe de la boîte Pour fabriquer notre structure externe qui contiendra l'Arduino, nous avions premièrement conçu un modèle 3D que nous avons eu grand mal à imprimer (série d'erreurs d'impression et problèmes de supports). Après un énième échec, nous nous sommes finalement convaincus que l'impression 2D serait un moyen bien plus rapide et pratique pour la conception de notre boîte (découpe en quelques minutes seulement (face à 46h pour la 3D !) et possibilité de redimensionner rapidement les ouvertures des capteurs si besoin). Nous avons commencé par réaliser un test de boîte miniature en découpant un modèle déjà enregistré sur l'ordinateur du Fablab. Nous avons utilisé du MDF 3mm et la découpeuse laser Trotec Speedy 360 pour construire une mini boîte de 4x4cm : A. Conception Nous avons ensuite découpé notre boîte taille réelle (10x10cm)  en ajoutant les trous nécessaires pour faire passer les câbles et insérer l'écran et les capteurs sur leurs faces respectives. B. Assemblage des facettes On assemble les faces avec de la colle à bois express : Pour faire le pic qui sera planté dans la terre, nous avons modélisé sur le logiciel Ruby 3 triangles. Après les avoir découpés et assemblés à l'aide du pistolet à colle, nous avons collé le pic sous la boîte. Nous avons également réalisé une porte pour pouvoir accéder facilement au contenu interne de la boîte. Séance 9 : Fin du programme et fixation des capteurs Séance 9 : Fin de la programmation des capteurs et fixation dans la boîte Lors de cette dernière séance, nous avons terminé les programmes de nos deux capteurs ainsi que de l'écran d'affichage, puis avons fixé le tout contre les parois de notre boîte. Enfin, nous avons préparé notre diaporama de présentation de projet pour la semaine suivante. En discutant avec nos camarades d'autres groupes, nous nous sommes inspirés d'une de leurs idées : graver sur une planche de bois le nom de notre projet. Pour se faire, on utilise Microsoft Word afin de créer le modèle à graver, qu'on importe ensuite sur Inkscape. On vectorise l'image et on ajoute un cadre rouge pour que la plaque soit découpée, puis on exporte en fichier ".svg" pour l'envoyer à la graveuse laser. En terme de dimensions, nous choisissons la longueur de la plaque à 7cm. Code final et résumé de la partie calibrage Code final et résumé de la partie calibrage: Pour cette dernière séance technique, nous avons achevé de rédigé le programme des capteurs en faisant quelques modifications sur le code écrit lors du calibrage. Comme mentionné à la séance 7, nous avons voulu faciliter un maximum l’utilisation de l’objet final, c’est pour cette raison que nous avons traité les valeurs avant de les afficher sur l’écran et pouvoir envoyer des messages concrets. Pour le code final, nous avons donc des morceaux des codes de calibrage en ajoutant quelques conditions supplémentaires. Étant donné que chaque plante a des besoins différents, il faut ajuster le code pour bien tenir compte de ceux-ci : dans notre cas, le capteur d’humidité a été calibré pour le terreau et, comme expliqué dans la séance 7, si le type de sol est modifié, le capteur doit être recalibré. Concernant le capteur de lumière, il a été calibré pour fonctionner pour chaque type de plantes. Seulement, comme nous n’avions pas de luxmètre à disposition, le capteur de luminosité a été calibré à la main à l'aide de valeurs témoins trouvées sur internet. Pour ce qui est des détails du code, nous avons d’abord initialisé les bibliothèques nécessaires pour chaque capteur et avons introduit les constantes trouvées lors du calibrage (les équations de la droite nous permettant de trouver pour le capteur d’humidité, la teneur en eau de la terre, et pour le capteur de lumière, la valeur de la luminosité). Nous avons ensuite défini les ports d’entrée pour chaque capteur (le port analogique A0 pour le capteur d’humidité et les ports digitaux I2C avec la commande “Wire.begin()” pour l’écran et le capteur de lumière). Dans la boucle, nous avons premièrement introduit les variables que nous avons cherché à trouver, à travers le calibrage : la valeur de la luminosité et de l’humidité avec les équations de la droite correspondante. Nous avons mentionné plus haut les conditions supplémentaires que nous avons introduites : en utilisant des simples formules (if-else) pour diviser les valeurs en plusieurs parties, nous avons pu créer des messages plus faciles à comprendre pour afficher sur l'écran : Pour le capteur d’humidité: Entre 0 et 40% : il y a trop peu d’eau, il faut en rajouter. Entre 40% et 60% : ce sont les conditions parfaites pour la plante. Et au-dessus de 60% :  il y a trop d’eau, la plante risque d'être noyée. Pour le capteur de lumière, nous avons utilisé le même raisonnement, les mesures inférieures à 12550 LUX ne sont pas assez élevées pour la plante, au-dessus de 12550 mais inférieures à 24938 LUX ce sont les bonnes conditions de vie, et au-delà, la plante est soumise à un trop grand éclairement. #include #include #include "rgb_lcd.h" rgb_lcd lcd; // couleurs écran float courbe11= +2.4773;// pente de la courbe capteur lumière float courbe22= +165.07; float courbe1= -0.015;// la pente de la droite du capteur d'humidité float courbe2= +0.5876; void setup() { Wire.begin(); Serial.begin(9600); TSL2561.init(); } void loop() { int entree1=TSL2561.readVisibleLux();// capteur de lumière int LUM; int entree=analogRead(A0);// capteur d'humidité float Humidite; float air_Hum; float eau_Hum; LUM=((courbe11*entree1)+courbe22); // La Luminosité en LUX après calibrage Humidite=((courbe1*entree)+courbe2); eau_Hum=-2.7124;// humidité eau air_Hum=-5.4574;// humidité air int procenthum=map(Humidite,eau_Hum,air_Hum,100,0);// pourcentage d'humidité // les conditions pour la lumière if(LUM<12550 ) { lcd.begin(16, 2); // numéro de ligne et colonne de l'écran lcd.print("Trop sombre"); // Afficher sur la première ligne de l'écran } else if(LUM>=12550 && LUM<24938){ lcd.begin(16, 2); // numéro de ligne et colonne de l'écran lcd.print("Lumiere ok"); // Afficher sur la première ligne de l'écran } else if(LUM>=24983){ lcd.begin(16, 2); // numéro de ligne et colonne de l'écran lcd.print("Trop clair"); // Afficher sur la première ligne de l'écran } // les conditions pour l'humidité if(procenthum>=0 && procenthum<40){ lcd.setCursor(0, 1);// pour imprimer sur la deuxième ligne lcd.print("J'ai soif"); } else if(procenthum>=40 && procenthum<60){ lcd.setCursor(0, 1); lcd.print("Humidite ok"); } else if (procenthum>=60){ lcd.setCursor(0, 1); lcd.print("Trop d'eau"); } delay(100); } Séance 10: Présentation finale Séance 10 : Présentation finale Lors de cette dernière séance du Fablab, nous avons terminé de fixer les capteurs dans la boîte, pour ensuite présenter notre projet. Nous voulons remercier les équipes du Fablab pour leur aide et cet incroyable accueil et espérons pouvoir revenir bientôt. Projets Personnels Projets 3D Inès Bouboule bonheur Dans le cadre de l'UE, mes camarades et moi devons réaliser un projet à imprimer en 3D rentrant dans un cube de 15cm d'arête. Pour réaliser le même chat, il ne suffit qu'à copier et coller dans l'ordre les trois blocs de codes dans le logiciel OpenScad. Pour réaliser le Bouboule bonheur, voici le ce qui vous sera nécéssaire : un ordinateur avec le logiciel Openscad de la patience une clé USB un accès à l'ordinateur à impressions 3D du Fablab avec le logiciel IdeaMaker une bobine de filament de diamètre 1.75mm un accès à une imprimante Raise3D Pro 2 I_ Modèle du projet J’avais envie de faire un petit objet simple et mignon, alors je me suis inspirée de mon chat Bouboule. Il est très gros alors j’ai voulu faire un chat comme lui en m’inspirant des maneki neko (chats asiatiques qui attrapent de l’argent avec leur patte). Alors j’ai fait un schéma qui me servira de modèle : II_ Organisation du code Pour documenter ce projet au mieux et le plus clairement que possible, je créerai des modules pour des parties du corps afin de ne pas créer de code trop long et incompréhensible. Avant tout, dès la première ligne je définis la résolution de ma modélisation à fn=100. 1. La tête $fn=100; module tete (){ //forme de la tête resize ([28,25,20]) sphere(r=7); //oreilles G+D translate ([7,0,7]) rotate ([0,25,0]) cylinder (h=6, r1=6, r2=0); translate ([-7,0,7]) rotate ([0,-25,0]) cylinder (h=6, r1=6, r2=0); //museau translate ([1,12,-1]) resize ([4,2,3.5]) sphere(r=1); translate ([-1,12,-1]) resize ([4,2,3.5]) sphere(r=1); translate ([0,12,0.5]) resize ([2.3,2,1.5]) sphere(r=2); //yeux translate ([5.5,10.5,1.5]) sphere(r=1.5); translate ([-5.5,10.5,1.5]) sphere(r=1.5); //collier translate ([0,0,-9]) cylinder (h=2, r1=10, r2=10); module collier (){ translate ([0,10,-9.8]) cylinder (h=0.4, r1=1.3, r2=1.3); difference(){ translate ([0,10,-9.5]) sphere(r=1.2); translate ([0,12,-10]) rotate([90,0,0]) cylinder (h=2, r1=0.2, r2=0.2); translate ([-0.05,10,-11]) cube([0.1,1,1]); }; }; rotate ([35,0,0]) translate ([0,-5.5,-3]) collier (); }; La forme Je créé un module “tete” et travaille dessus avec comme base une ellipsoïde. Les oreilles Je fais d’abord l’oreille gauche en forme de cône que je place sur le haut de la tête (pour l’instant à l’origine du repère). Puis je copie le code et le colle juste en dessous (ligne 12) mais en mettant la coordonnée x dans le négatif pour avoir des oreilles positionnées symétriquement. Les babines Comme pour les oreilles, je fais d’abord une petite ellipsoïde que je place dans le milieu bas de visage et je la copie et colle en inversant la coordonnée en x. Puis j’ai fait une petite sphère que j’ai placée au niveau du nez. Les yeux Je voulais suivre mon modèle et faire des yeux en arc de cercle, or n’ayant pas trouvé de code pour le faire, j’ai trouvé une alternative simple, j'ai simplement fait deux sphères qui dépassent un peu de la tête. Le collier Pour commencer, j’ai fait un simple cylindre pour faire le tour du cou du chat. Puis j’ai fait un pendentif clochette en m'inspirant de l'image ci-dessous. J’ai donc créé un module (ligne 38). J’ai placé une sphère pour la base de la clochette à laquelle j’ai retiré un cylindre très fin sur l’horizontale et un pavé très fin. Puis j’ai incliné la cloche pour faire comme si elle était posée sur le torse du chat. https://www.fruugo.be/dog-bell-collier-en-laiton-tags-cat-bells-pleasant-sound-pets-pendent-pet/p-195490491-416796237?language=fr 2. Le corps module corps (){ // forme du corps difference(){ resize ([35,35,33]) sphere(r=30); translate ([-20,-20,-17]) cube([30,30,3]); }; //jambes translate ([12,0,-7]) resize ([10,15,15]) sphere(r=5); translate ([-12,0,-7]) resize ([10,15,15]) sphere(r=5); //ventre translate ([0,13,0]) resize ([20,10,20]) sphere(r=30); //bras translate ([13,0,5]) rotate ([10,-20,0]) resize ([10,10,20]) sphere(r=5); translate ([-13,5,15]) rotate ([-20,0,0]) resize ([10,10,20]) sphere(r=5); //parchemin translate ([-17,10.5,21.5 ]) rotate ([90,0,90]) cylinder (h=8, r1=1, r2=1); translate ([-16.5,10.7,10]) cube([7,0.5,11]); translate ([-17,10.5,10]) rotate ([90,0,90]) cylinder (h=8, r1=1, r2=1); }; La forme Je réalise un module “corps”. J’ai d’abord fait une grosse sphère pour le ventre à laquelle j’ai retiré un fin pavé sur le bas pour que le chat puisse tenir debout. Les jambes J’ai réalisé deux ellipsoïdes que j’ai relativement planes pour faire des cuisses comme sur mon schéma. Le ventre J’ai fait une grande ellipsoïde comme pour les jambes mais cette fois je l’ai placée au milieu du ventre pour faire un relief. Les bras Comme on le voit sur le schéma, le chat n’a pas les bras dans les mêmes positions alors la méthode que j’utilisais pour faire mes formes en symétrie ne pourra pas être appliquée ici. Je commence par réaliser le bras à gauche, celui sur le long du corps. Je joue d’abord avec ses coordonnées pour qu’il y ait une moitié qui rentre dans le corps du chat et une autre qui dépasse. Je fais ensuite une ellipsoïde que j’incline pour montrer que c’est un bras posé le long du corps du chat.Pour le bras droit, je fais également une ellipsoïde mais que j’incline vers l’avant et vers le haut comme s’il levait la patte. Je fais ensuite rentrer une extrémité de la forme dans le corps du chat. Le parchemin J’ai réalisé deux cylindres que j’ai pivoté sur l’horizontale pour imiter les extrémités en bois du parchemin (image ci-dessous). J’ai ensuite lié les deux avec un pavé très fin pour imiter la feuille. https://fr.lovepik.com/image-611745558/hand-drawn-chinese-style-chinese-scroll-illustration.html III_ Résultat J'affiche le module corps et le module tête en le déplaçant de manière à ce qu'elle soit posée sur le corps. corps (); translate ([0,0,23]) tete(); En ce qui concerne l'impression, je "calcule le rendu (F6)" sur Openscad, puis j'exporte le document en fichier .stl sur une clé que je branche à l'ordinateur du Fablab chargé de lancer les impressions 3D. J'ouvre le fichier et avec le IdeaMaker de l'ordinateur, je set la taille du chat à 15cm de hauteur. Ensuite je n'ai plus eu qu'à mettre une bobine de filament gris de diamètre 1.75mm sur une des machines Raise3D Pro 2 et à lancer l'impression. Après environ 19h d'impression, j'ai pu récupérer mon chat et voici le résultat : Vlad L’Oie Guerrière I. Introduction: Dans le cadre de l’UE Fablab, nous avons dû réaliser deux projets personnels: Une impression en 3D d’un objet de notre choix, mais pas plus grand de 15x15x15 cm Un en 2D sur une plaquette en bois de 30x30 cm. Ces deux projets viennent à la suite de la présentation des deux logiciels de dessin, OpenSCAD ou FreeCAD en 3D et InkScape en 2D. II. Choix de Projet: Pour mon projet en 3D, je dois avouer que j'étais un peu en panne d'idée, j’ai donc commencé a demandé à mes amis proches ce qu’ils aimeraient que j’imprime ( une grande erreure de ma part, parce que maintenant je dois coder pour chacun quelque chose). Mais cela nous amène à l'oie, j’ai donc eu une très bonne amie à moi qui a décidé de me lancer le défi de faire une oie en 3D ( la deuxième erreur, parce que coder dans OpenSCAD des formes aussi…particulière… n’est pas du tout une tâche facile). Comme source d’inspiration, parce que… appelons le défaut professionnel, dans la physique tous les objets sont assimilés à des rectangles, donc pour moi une oie et un canard sont à peu près la même chose en terme de forme. Elle a tout de même eu la gentillesse de m’envoyer un exemple ( vous voyez maintenant pourquoi je regrette ma décision) : https://www.naturiou.fr/figurines-en-bois-holztiger/7004874-petite-oie-en-bois-holztiger-4013594800297.html?gad_source=1&gclid=Cj0KCQjwwYSwBhDcARIsAOyL0fiAUvKLRbetGOPu71jYnzFPJNcGlCoXIb4anJWME5AwnG5oZ3z2DD8aAi49EALw_wcB III. Modélisation III. Modélisation: En partant de la photo et en essayant de garder la forme de début, j’ai donc commencé à réfléchir à comment réaliser l’oie. Avant d’expliquer concrètement le code et en vue du fait qu’il est assez complexe, vous pouvez retrouver après chaque ligne de code un court commentaire “//” avec l'élément correspondant de l’oie. Ce type de commentaire à deux buts: le premier est de pouvoir s'orienter soi même dans les lignes de code et aussi, de permettre à une autre personne de faire des modifications dans celui-ci sans avoir à chercher longtemps. Il se peut qu’il y ait des commentaires en anglais et/ou en français en fonction de ce qui décrit mieux la ligne de code. La résolution de la modélisation est définie depuis le début à 100 ($fn=100). $fn est un paramètre qui fixe le nombre de fragments utilisés pour créer un objet. Plus le fn est grand, plus l’objet sera lisse. Un fn supérieur à 128 est fortement déconseillé à cause du fait qu’il augmentera la durée d’impression, mais peut endommager l’ordinateur aussi: il utilisera plus de la mémoire centrale et du CPU. 1. Les pâtes    1.  Les pâtes: Comme les pâtes de l’oie sont un peu courbées, j’ai décidé de partir d’un cube puis utiliser la fonction “difference” pour créer les angles nécessaires. L’une des pâtes est un peu plus grande que l’autre. Pour la plus grande, j’ai commencé avec un cylindre qui donnait la première courbure en bas de la pâte, mais cela créait un angle qui la faisait ressembler à une voiture miniature. J’ai décidé alors de mettre avec la fonction “union” un petit rectangle qui me redonnait l’angle droit souhaité, tout en gardant la première courbure. Ensuite, j’ai continué à faire la deuxième courbure en haut de la pâte toujours avec un cylindre. Je me suis aussi confronté à un problème, les deux cylindres rendait la pâte un peu trop courber, j’ai donc mis un autre rectangle incliné entre les deux afin d’obtenir la bonne forme. Pour la petite pâte, le procédé est le même, sauf que j’ai utilisé des cylindres plus petits. $fn=100; module pieds(){ difference(){ union() { cube([5,4,2 ],center=true);//cube pieds ; translate([2.3, 2,-0.537]) rotate([90,90,0 ]) cylinder(4,0.5,0.5);//cilindre en bas translate([2.45,-2,-1 ])cube([0.3,4,0.3 ]);// angle droit pieds translate([-2.75,-2,-1 ])cube([0.3,4,0.3 ]);// angle droit petit pieds translate([-2.3, 2,-0.537]) rotate([90,90,0 ]) cylinder(4,0.5,0.5);//cilindre bas petit pieds } translate([2.5,-4,-0.08 ]) rotate([7,0,90 ]) cube([9,1.6,0.95 ]); //partie droite du pieds translate([1.1,3.6,0.6 ]) rotate([90,0,0 ]) cylinder(9,0.5,0.5);//courbure pieds translate([1.1,-3,0.11 ]) rotate([0,2,0 ])cube([0.2,6,0.2 ]); translate([-1.6,-4,0.35])rotate([-25,0,90 ]) cube([9,1,1 ]);//courbure pieds droit translate([-1.7,3,0.8 ])rotate([90,0,0 ]) cylinder(9,0.5,0.5 );//courbure pieds gauche translate([-1.8,-3,0.3 ]) rotate([0,-2,0 ])cube([0.2,6,0.2 ]); translate([-3.4,-3,0.6 ]) rotate([0,65,0 ])cube([0.5,6,0.6 ]);// petit pieds 2 translate([2.3,-3,-0.05 ]) rotate([0,11,0 ])cube([1.4,6,1 ]); } } scale([2,2,2 ]) pieds(); 2. Le corps 2.  Le corps: Pour le corps, j’ai beaucoup réfléchi à comment le faire pour qu’il reste comme dans la photo, mais malheureusement je n’ai pas pu trouver une assez bonne solution. J’ai donc changé un peu (beaucoup) de la photo de départ en faisant le corps à l'horizontal avec une sphère tassée. J’ai ensuite introduit la ligne de code de la sphère dans la "différence" créée pour les pieds afin que les cylindres coupent aussi une partie du corps pour obtenir une continuité dans les angles. translate([0,0,5.5]) rotate([0,90,0 ]) scale([1.8,1.2,3 ]) sphere(3);//corps 3. Les ailes 3.  Les ailes: Les ailes ont été réalisées un peu dans la même idée que le corps: en utilisant la fonction “rescale” pour tasser plusieurs sphères et ensuite, avec la fonction “translate”, les positionner de sorte à créer un relief. //Ailes translate ([0,6.5,11])resize([20,2,10 ]) sphere(r=50); translate ([-1,7.3,11]) resize ([15,1,8]) sphere(r=50); translate ([-2.5,7.9,11])resize ([10,0.5,4]) sphere(r=50);//aile gauche translate ([0,-6.5,11])resize([20,2,10 ]) sphere(r=50); translate ([-1,-7.3,11]) resize ([15,1,8]) sphere(r=50); translate ([-2.5,-7.9,11])resize ([10,0.5,4]) sphere(r=50);// aile droite 4. Le cou 4.  Le cou: Pour le cou, j’ai dû créer un cylindre courbé, mais malgré toutes les heures passées dessus je ne suis pas arrivé. J’ai donc trouvé un code en ligne qui m’a permis d’obtenir la forme que je voulais. module tube(inner=5, outer=10, angle=45, length=250){ // the real length of the back rotated piece rlength = (sin(angle) * (length * 2)) / cos(angle/2); // the dimension for x can be calculated as well (used for the intersection r = (length*2); s = 2 * r * sin(angle/2); rwidth = r - 0.5*sqrt(4*r*r - s*s); echo("Bounding box:"); echo(x=rwidth, y=outer, z=rlength-(2*offset)); echo(x=rwidth, y=outer, z=rlength-(2*offset)+10); offset = sin(angle/2) * outer; trans = 10; translate([outer+trans/2,0,5]) rotate([90, 0, 0]) { union(){ // Because of Rotation: // x z y echo((cos(angle/2)*outer+outer)); echo(outer/cos(angle/2)); translate([-outer-trans, -5, -outer]) intersection(){ translate([-outer-eps, 0, -outer-eps]) // the tube structure // beware: rotation and translation are not communtative // move down and recenter translate([-outer/cos(angle/2)+outer, -offset, 0]) rotate([0, 0, -angle/2]) // put into 0,0 translate([-r, 0, 0]) rotate_extrude(angle=angle, $fn=fn) translate([r, 0, 0]) difference(){ circle(r = outer, $fn=fn); if (inner > 0){ circle(r = inner, $fn=fn); } }; } } }; }translate([15,-4.7,30 ]) rotate([0,221,0])tube(0, 2, 90, 6);//Cou https://gist.github.com/reox/92a8e7cf59fa4574cfcdb5fd3c9bfd46 5. La queue 5.  La queue: Avec la queue j’ai eu un peu le même souci qu’avec le coud, j’ai donc copié un petit code trouver en ligne. J’ai ensuite fais deux petites queues, la première orientée horizontalement et la deuxième, en utilisant la fonction “rotate”, orienté légèrement vers le haut. module queue(){ hull() { cylinder(10,r=4); translate([8,8,0 ]) cylinder(10,r=1); } } queue(); https://www.google.com/url?sa=i&url=https%3A%2F%2Fimprovements418.rssing.com%2Fchan-8071126%2Flatest.php&psig=AOvVaw1-PgkHsaO_57oncNO7KEFM&ust=1711569434160000&source=images&cd=vfe&opi=89978449&ved=0CBQQjhxqFwoTCLiw0pLbkoUDFQAAAAAdAAAAABAF 6. La tête 6.  La tête: Pour la tête, j’ai juste créé une sphère que j’ai collé au cou avec la fonction “union”. union(){ translate ([23,-1,26])resize([6.5,6,6.5 ]) sphere(r=50);//Tête translate([15,-4.7,30 ]) rotate([0,221,0])tube(0, 2, 90, 6);//Cou for([0:90:359 ]) translate([-14,-2,7 ])rotate([-90,170,0 ]) scale([1.2,0.4,0.4 ])queue();//queue du bas for([0:90:359 ]) translate([-16,2,10.3 ])rotate([-270,200,0 ]) scale([1.2,0.4,0.4 ])queue();// queue du haut } 7. Les yeux 7.  Les yeux: Un peu de la même façon que pour la tête, j’ai créé deux sphères que j’ai ensuite ajoutées à la fonction “union” de la tête. La couleur est juste pour que les yeux se voient plus facilement sur OpenSCAD. Elle ne sera pas utilisée dans le code final. union(){ translate ([23,-1,26])resize([6.5,6,6.5 ]) sphere(r=50);//Tête //yeux translate ([23,1.1,28]) scale([0.5,0.5,0.5 ]) sphere(r=1.5);// gauche translate ([23,-3.1,28])scale([0.5,0.5,0.5 ]) sphere(r=1.5);//droite translate([15,-4.7,30 ]) rotate([0,221,0])tube(0, 2, 90, 6);//Cou for([0:90:359 ]) translate([-14,-2,7 ])rotate([-90,170,0 ]) scale([1.2,0.4,0.4 ])queue();//queue du bas for([0:90:359 ]) translate([-16,2,10.3 ])rotate([-270,200,0 ]) scale([1.2,0.4,0.4 ])queue();// queue du haut } 8. Le Bec 8.  Le Bec: Et enfin, le bec, je l’ai d’abord modélisé comme un cylindre avec l’une des faces plus petites, mais ça ressemblait un peu à une glace. J’ai ensuite voulu, en utilisant la fonction “difference”, couper un peu du cylindre avec un rectangle pour qu’il ait un bord droit, mais par hasard j’ai mis le rectangle a la moitié du cône. Ca m’a paru assez amusant, d’avoir l’oie avec la bouche ouverte, j’ai donc envoyé une photo à mon amie et elle a décidé de la laisser comme ça… c’est elle aussi qui est venue avec l'idée de l’appeler “l’Oie Guerrière”. //Tête difference(){ union(){ translate ([23,-1,26])resize([6.5,6,6.5 ]) sphere(r=50);//Tête translate([25.5,-1,25.9 ]) rotate([0,85,0 ]) cylinder(6,2,0.7);//Bec //yeux translate ([23,1.1,28]) scale([0.5,0.5,0.5 ]) sphere(r=1.5);// gauche translate ([23,-3.1,28])scale([0.5,0.5,0.5 ]) sphere(r=1.5);//droite translate([15,-4.7,30 ]) rotate([0,221,0])tube(0, 2, 90, 6);//Cou for([0:90:359 ]) translate([-14,-2,7 ])rotate([-90,170,0 ]) scale([1.2,0.4,0.4 ])queue();//queue du bas for([0:90:359 ]) translate([-16,2,10.3 ])rotate([-270,200,0 ]) scale([1.2,0.4,0.4 ])queue();// queue du haut } translate([25.6,-4,25.5])rotate([0,0,0 ])cube([10,5,1 ]);// Bouche } 9.  Résultat final de la modélisation: Une fois le code fini, on obtient: L’Oie Guerrière IV. Impression IV. Impression: Maintenant la modélisation finit et le fichier converti en STL, j’ai alors importé le fichier sur IdeaMaker afin de mettre les paramètres d’impression. 1. Dimension 1.  Dimension: Pour rappel, nous pouvons imprimer un objet de 15x15x15 cm, j’ai donc mis les dimensions suivantes: Sur X: 150 mm Sur Y: 41.637 mm Sur Z: 80.015 mm 2. Support 2. Support: L’imprimante ne peut pas imprimer dans le vide, il est donc nécessaire de générer des supports afin qu’elle puisse imprimer correctement. 3. Début de l'impression 3. Début de l'impression: Après avoir mis les supports et vérifier tous les paramètres, j’ai “Slice” le fichier pour pouvoir le télécharger vers l’imprimante. Durée de l’impression: 5h19 Filament utiliser: 54.8g Début de l'impression 4. Premières couches 4. Premières couches: Les imprimantes peuvent avoir des erreurs au début de l’impression. Il est impératif de rester à côté de l’imprimante pendant les premières 15 minutes afin de voir si tout se passe bien. V. Resultat final: Après les 5 heures d’impression, j'obtiens ceci, il reste juste a enlever les supports VI. Le code en entier VI. Le code en entier: Vous trouverez ici le code en entier pour être plus facile à copier si vous souhaitez. $fn=100; //Ailes translate ([0,6.5,11])resize([20,2,10 ]) sphere(r=50); translate ([-1,7.3,11]) resize ([15,1,8]) sphere(r=50); translate ([-2.5,7.9,11])resize ([10,0.5,4]) sphere(r=50);//aile gauche translate ([0,-6.5,11])resize([20,2,10 ]) sphere(r=50); translate ([-1,-7.3,11]) resize ([15,1,8]) sphere(r=50); translate ([-2.5,-7.9,11])resize ([10,0.5,4]) sphere(r=50);// aile droite module pieds(){ difference(){ union() { cube([5,4,2 ],center=true);//cube pieds ; translate([2.3, 2,-0.537]) rotate([90,90,0 ]) cylinder(4,0.5,0.5);//cilindre en bas translate([2.45,-2,-1 ])cube([0.3,4,0.3 ]);// angle droit pieds translate([-2.75,-2,-1 ])cube([0.3,4,0.3 ]);// angle droit petit pieds translate([-2.3, 2,-0.537]) rotate([90,90,0 ]) cylinder(4,0.5,0.5);//cilindre bas petit pieds translate([0,0,5.5]) rotate([0,90,0 ]) scale([1.8,1.2,3 ]) sphere(3);//corps } translate([2.5,-4,-0.08 ]) rotate([7,0,90 ]) cube([9,1.6,0.95 ]); //partie droite du pieds translate([1.1,3.6,0.6 ]) rotate([90,0,0 ]) cylinder(9,0.5,0.5);//courbure pieds translate([1.1,-3,0.11 ]) rotate([0,2,0 ])cube([0.2,6,0.2 ]); translate([-1.6,-4,0.35])rotate([-25,0,90 ]) cube([9,1,1 ]);//courbure pieds droit translate([-1.7,3,0.8 ])rotate([90,0,0 ]) cylinder(9,0.5,0.5 );//courbure pieds gauche translate([-1.8,-3,0.3 ]) rotate([0,-2,0 ])cube([0.2,6,0.2 ]); translate([-3.4,-3,0.6 ]) rotate([0,65,0 ])cube([0.5,6,0.6 ]);// petit pieds 2 translate([2.3,-3,-0.05 ]) rotate([0,11,0 ])cube([1.4,6,1 ]); } } scale([2,2,2 ]) pieds(); //coud fn = 250; eps = 0.1; module tube(inner=5, outer=10, angle=45, length=250){ // the real length of the back rotated piece rlength = (sin(angle) * (length * 2)) / cos(angle/2); // the dimension for x can be calculated as well (used for the intersection r = (length*2); s = 2 * r * sin(angle/2); rwidth = r - 0.5*sqrt(4*r*r - s*s); echo("Bounding box:"); echo(x=rwidth, y=outer, z=rlength-(2*offset)); echo(x=rwidth, y=outer, z=rlength-(2*offset)+10); offset = sin(angle/2) * outer; trans = 10; translate([outer+trans/2,0,5]) rotate([90, 0, 0]) { union(){ // Because of Rotation: // x z y echo((cos(angle/2)*outer+outer)); echo(outer/cos(angle/2)); translate([-outer-trans, -5, -outer]) intersection(){ translate([-outer-eps, 0, -outer-eps]) // the tube structure // beware: rotation and translation are not communtative // move down and recenter translate([-outer/cos(angle/2)+outer, -offset, 0]) rotate([0, 0, -angle/2]) // put into 0,0 translate([-r, 0, 0]) rotate_extrude(angle=angle, $fn=fn) translate([r, 0, 0]) difference(){ circle(r = outer, $fn=fn); if (inner > 0){ circle(r = inner, $fn=fn); } }; } } }; } //Tête difference(){ union(){ translate ([23,-1,26])resize([6.5,6,6.5 ]) sphere(r=50);//Tête translate([25.5,-1,25.9 ]) rotate([0,85,0 ]) cylinder(6,2,0.7);//Bec //yeux translate ([23,1.1,28]) scale([0.5,0.5,0.5 ]) sphere(r=1.5);// gauche translate ([23,-3.1,28])scale([0.5,0.5,0.5 ]) sphere(r=1.5);//droite translate([15,-4.7,30 ]) rotate([0,221,0])tube(0, 2, 90, 6);//Coud for([0:90:359 ]) translate([-14,-2,7 ])rotate([-90,170,0 ]) scale([1.2,0.4,0.4 ])queue();//queue du bas for([0:90:359 ]) translate([-16,2,10.3 ])rotate([-270,200,0 ]) scale([1.2,0.4,0.4 ])queue();// queue du haut } translate([25.6,-4,25.5])rotate([0,0,0 ])cube([10,5,1 ]);// Bouche } module queue(){ hull() { cylinder(10,r=4); translate([8,8,0 ]) cylinder(10,r=1); } } L'Oie Guerrière Lola Cumengéite en 3D : Dans le cadre de l'UE Projet Fablab, nous avons dû réaliser une impression 3D d'un objet de15x15x15cm modélisé sur FreeCAD ou sur OpenSCAD. Pour ce projet personnel, j'ai donc choisi de réaliser un bloc de cumengéite, un minéral très particulier de par sa géométrie cristalline parfaite. Bloc de cumengéite exposé au musée de minéralogie de Jussieu Inspiration Pour la modélisation de mon bloc, je me suis inspirée de la modélisation de la ville 1 de lichen de l'Exposition Voyage autour du lichen réalisée en 2023. Modélisation FreeCAD est le logiciel utilisé ici. Le socle Pour modéliser le socle de mes minéraux, j'ai commencé par créer un pavé. J'ai ensuite réalisé un sketch sur une de ses faces. Il a ensuite fallu extruder le sketch. Pour réaliser les étages sur le socle, on répète l'opération, on place le sketch extrudé sur le socle et on réalise l'opération booléenne "Différence". Les minéraux L'étape suivante est la création des minéraux. Pour cela j'ai créé un cube et ajouté une pyramide tronquée sur chacune des faces. Une fois le minéral créé, il suffit de le dupliquer et de modifier ses dimensions. Impression L'impression en double extrusion était particulièrement appropriée pour une impression de ce type d'objet. Pour une impression en double extrusion, il faut créer deux fichiers différents puis les superposer sur Ideamaker. J'ai donc créé un fichier comportant uniquement le socle et un autre comportant tous les minéraux. Paramètres d'impression Hauteur de couche : 0,1 mm Remplissage : 20 % Aide à l'adhérence : Radeau uniquement Tour de purge Paramètres de la tour de purge : Matériaux Socle en PLA 1,75mm (mustard) Minéraux en PLA Bleu 1,75mm (electric blue) Machine Raise 3D Pro Lison Projet 3D Maisonnette : Dans le cadre de l'UE FabLab et suite à notre initiation aux logiciels de dessin 3D (Openscad et Freecad), nous avons dû créer individuellement un modèle 3D au choix de 15x15x15 cm sur un de ces deux logiciels, afin de pouvoir ensuite l'imprimer avec les imprimantes 3D disponibles au FabLab. Pour mon projet individuel, j'ai choisi de modéliser un bâtiment détaillé et fantaisiste, à savoir une maisonnette qui reprendra certains des codes d'architecture des habitations d'animations types contes pour enfants et maisons médiévales. Pour tirer les grandes lignes de caractéristiques de ma maison, je me suis inspirée des modèles ci-dessous : https://www.pinterest.fr/pin/615796949018955145/ https://fr.vecteezy.com/photo/22513412-fantaisie-maison-fee-conte-peu-chalet-dans-magique-foret-par-ai-genere Je reprendrai ainsi certains éléments comme la physionomie générale des maisons, relativement biscornues, en me basant sur les trois formes géométriques qui en ressortent le plus : cube, rond, triangle. I. Choix du logiciel Openscad étant le logiciel de dessin 3D que je maîtrisais le mieux (et nécessitant des notions de codage), j'ai fait le choix d'y créer mon bâtiment, en me basant sur ce que nous avions appris lors de la séance d'initiation et en piochant sur internet des codes qui me seraient utiles pour modéliser des formes plus complexes que des sphères ou des cubes. II. Modélisation de la maison En partant d'une base de premières idées, j'ai pu élaborer une liste d'éléments que je souhaitais faire apparaître sur ma construction pour, d'une part, éviter l'image d'une maison simple et droite, et d'une autre tirer un maximum d'éléments des caractéristiques de maisons fantaisistes ci-dessus, comme par exemple des fenêtres arrondies et circulaires à croisillons, des murs penchés, des briques apparentes, etc.. Comme la maison comportera beaucoup de détails, j'écris, au-dessus de chaque partie de mon codage, l'élément de la maison correspondant avec ''//...'' (fonction commentaire, qui n'agit pas sur le code déjà écrit). Cela me permettra de repérer rapidement la partie à modifier si besoin, sans avoir besoin de chercher longtemps. 1. Bases des murs et ouvertures des fenêtres J'ai premièrement choisi un modèle de maison cubique. Comme nous avions déjà vu comment faire apparaître un cube sur Openscad, j'ai pu faire le ''vide'' dans ce-dernier pour créer un sol, un plafond et 4 murs, que je nomme le "cube Maison". Ensuite, je suis venue placer des polyèdres pour les ouvertures de fenêtres : des sphères pour les rondes, des parallélépipèdes pour les carrées et ces deux mêmes formes simultanément pour les fenêtres en voute (forme de vitraux d'église). Avec la fonction ''difference'', je crée des trous dans les murs, qui viendront former mes portes et fenêtres : //vitraux trous translate ([12.5,5,-5]) scale ([0.5,2.5,0.2]) cube (3, center=true); translate ([12.5,-5,-5]) scale ([0.5,2.5,0.2]) cube (3, center=true); difference () { cube ([25,25,20],center=true); cube ([24,24,19],center=true); rotate ([90,0,90]) translate ([-5,2,12.5]) scale ([1,2,0.3]) sphere (3, center=true); rotate ([90,0,90]) translate ([-5,-1.5,12.5]) scale ([1,1.2,0.5]) cube (6, center=true); rotate ([90,0,90]) translate ([5,2,12.5]) scale ([1,2,0.3]) sphere (3, center=true); rotate ([90,0,90]) translate ([5,-1.5,12.5]) scale ([1,1.2,0.5]) cube (6, center=true); translate ([-6,-12.7,0.5]) scale ([1,1,1.5]) sphere (2, center=true); 2. Croisillons Pour rendre les fenêtres plus réalistes et remplir les ouvertures, j'ai voulu créer des croisillons. J'ai donc formé des cubes que j'ai allongés et amincis avec la fonction ''scale'' puis déplacés avec ''translate'' pour les faire correspondre à la taille des ouvertures de fenêtre. Pour l'ouverture de la porte d'entrée (celle carrée), j'ai voulu placer 4 cubes et faire la différence entre le mur et ces-derniers. Les croisillons ainsi créés n'étant pas exactement centrés sur le trou, j'ai donc procédé de la même manière qu'avec les fenêtres voutées. Toujours avec la fonction ''scale'', je place une poignée de porte avec une sphère allongée, et des rebords de fenêtres avec des cubes amincis. //barreaux fenêtres translate ([12,-5,-1.1]) scale ([0.1,2,0.1]) cube (4, center=true); translate ([12,-5,2.5]) scale ([0.1,2,0.1]) cube (4, center=true); rotate ([90,0,90]) translate ([-5,1.1,12]) scale ([0.1,4,0.1]) cube (4, center=true); translate ([12,5,-1.1]) scale ([0.1,2,0.1]) cube (4, center=true); translate ([12,5,2.5]) scale ([0.1,2,0.1]) cube (4, center=true); rotate ([90,0,90]) translate ([5,2.1,12]) scale ([0.1,4,0.1]) cube (4, center=true); 3. Briques et façade Pour créer des briques apparentes, sortant des murs, j'ai d'abord utilisé les fonctions "scale" et "translate" avec des cubes. Souhaitant créer des colonnes de briques plus ou moins grandes sur les arrêtes latérales de mon cube Maison, j'ai utilisé la fonction "minkowski" qui permet d'arrondir les angles des briques, et donc de casser l'aspect droit et lisse des murs. minkowski () { translate ([12,12,-8.5]) cube ([1,1,2.5],center=true); cylinder (r=0.5,h=0.5,center=true); }; }; translate ([0,-24,0]) briques(); translate ([0,0.2,0]) briques(); translate ([-24,0,0]) briques(); translate ([-24,-24,0]) briques(); En utilisant "translate", et en variant la taille des briques, je modélise mes colonnes de briques, que je déplace en utilisant des modules que je nomme en fonction de la partie de ma construction que je souhaite manipuler. Cela évite de copier de nombreuses lignes de code pour les mêmes actions et me permet de déplacer chacune des 4 colonnes de briques comme un seul bloc, et non pas les 10 briques qui les composent une à une. Je dispose également des briques sortant des murs de part et d'autre du cube Maison, en utilisant la fonction "translate" sur le module de brique principal que j'avais précédemment codé. 4. Tour Pour reprendre quelques éléments de contes, j'ai voulu ajouter au cube Maison une tourelle cylindrique. Pour cela j'utilise la fonction "cylinder", en choisissant un diamètre supérieur plus petit que celui inférieur, l'idée étant de former une tour légèrement conique de ce type : https://www.deviantart.com/pocketmana/art/Wizard-s-Tower-aka-Rocket-Ship-683486330 Comme fait précédemment, je rajoute une fenêtre ronde, des croisillons et des briques apparentes de la même manière qu'avec le cube Maison. Pour créer une ouverture, je prends soin de faire "le vide" dans ma tour, en faisant la différence entre cette dernière et un autre cylindre aux dimensions plus petites. //vide grande tour difference () { translate ([-16,6,2.5]) cylinder (25,6,4,center=true); translate ([-16,6,2.5]) cylinder (24,5,3,center=true); translate ([-21,6,2.3]) sphere (3,center=true); }; //détail grande tour translate ([-20.5,6,2.3]) rotate ([5,0,90]) scale ([0.2,0.2,4]) cube (2, center=true); translate ([-19.5,6,2]) rotate ([90,0,0]) scale ([0.05,0.2,3]) cube (2, center=true); 5. Toits et étage Pour rendre la maison plus ronde, j'opte pour un toit conique. J'utilise donc, comme pour la tour, la fonction "cylinder", avec une base plus large que la face du haut, tout en veillant à ce que le cylindre soit assez haut pour accueillir un étage. Je procède de la même manière pour le toit de la tour, avec cette fois-ci un toit conique pointu (je choisi un diamètre de 0,5 pour la face du haut). Enfin, je rajoute une marquise sur la façade avec la fonction "cylinder"  que j'élargis avec "scale" et déplace avec "translate". //marquise translate ([0,-12.2,6]) scale ([0.5,0.2,4]) cylinder (0.5,20,10,center=true); //toit difference () { translate ([0,0,15]) scale ([0.7,0.7,5]) cylinder (3,30,10,center=true); translate ([0,0,12]) scale ([0.7,0.7,5]) cylinder (2,29,9,center=true); }; //vide toit tour difference () { translate ([-16,6,22]) cylinder (15,7,0.5,center=true); translate ([-16,6,20]) cylinder (13,6,0.2,center=true); }; Pour créer l'étage, j'incruste un cylindre dans le toit, et rajoute une fenêtre avec "sphere" et ''difference". J'y place un toit conique de la même façon que celui du cube Maison, en faisant le vide dans le cylindre (pour créer  une fenêtre oeil-de-boeuf) et dans le toit. J'ajoute, à chacun des 3 toits, des lisières avec "circle", dont j'ajuste le diamètre et que je déplace avec "translate". Je place des croisillons et un rebord de fenêtre à l'étage, en faisant la différence entre deux cylindres. Puis, je rajoute une cheminée avec 4 cubes de tailles différentes (fonction "scale"), inclus par paire dans deux fonctions "difference" pour créer les parois. J'ajoute à cela des briques apparentes avec la fonction ''translate'' sur mon modèle de brique initial. //cheminée difference () { translate ([9,0,18]) scale ([0.8,0.8,4]) cube (5,30,10,center=true); translate ([9,0,20]) scale ([0.7,0.7,5]) cube (4,30,10,center=true); }; difference () { translate ([9,0,21.5]) scale ([0.7,0.7,1.5]) cube (7,30,10,center=true); translate ([9,0,18]) scale ([0.8,0.8,4]) cube (5,30,10,center=true); }; translate ([15.5,-12.5,20]) murs (); translate ([15.5,-11.7,22]) murs (); /étage difference () { translate ([0,-12.2,12]) cylinder (10,5,7,center=true); translate ([0,-12.2,12]) cylinder (11,4,6,center=true); translate ([0,-16,14.5]) sphere (3.5,center=true); }; difference () { translate ([0,-16.7,14]) rotate ([0,90,90]) scale ([1,1.5,4]) circle (2.5,center=true); translate ([0,-16.7,14]) rotate ([0,90,90]) scale ([1,1.5,4]) circle (2,center=true); }; //oeil de boeuf translate ([0,-17.5,13]) rotate ([0,0,0]) scale ([0.2,0.2,4]) cube (2, center=true); translate ([0,-17.7,14]) rotate ([0,90,0]) scale ([0.2,0.2,3]) cube (2, center=true); //toit étage + cercles toits translate ([0,-10,19.5]) cylinder (6,10,1,center=true); translate ([0,-10,17]) circle (9,center=true); translate ([0,0,9]) circle (20,center=true); translate ([0,0,21]) circle (9,center=true); translate ([-16,6,16]) circle (6.5,center=true); translate ([-16,6,19]) circle (4.5,center=true); translate ([-16,6,21]) circle (4.5,center=true); 6. Derniers rajouts Maintenant que nous avons une base de construction, j'ai tenu à y ajouter des détails extérieurs plus ou moins longs à modéliser. Porte et volet Je viens à présent créer un encadrement de porte d'entrée avec 3 cylindres fins (diamètre 0,5) que je déplace avec "translate". Je place ensuite un volet ouvert sur la fenêtre de la façade. J'utilise pour cela une sphère, que j'aplatie avec "scale". Puis, avec "translate", je déplace mon volet, que je positionne à 60° du mur avec "rotate". //porte translate ([6,-12.7,-3]) scale ([1,1,1.7]) sphere (0.4, center=true); //volet avant translate ([-9,-13.9,0.5]) rotate ([0,0,60]) scale ([1,0.2,1.5]) sphere (2, center=true); //barreaux porte + fenêtre façade translate ([-6,-12.2,0.5]) scale ([0.2,0.2,4]) cube (2, center=true); translate ([-6,-12.2,0.5]) rotate ([0,90,0]) scale ([0.2,0.2,4]) cube (2, center=true); translate ([4,-12.2,0.5]) scale ([0.2,0.2,4]) cube (2, center=true); translate ([4,-12.2,1]) rotate ([0,90,0]) scale ([0.2,0.2,4]) cube (2, center=true); //colonnes portes translate ([0.5,-12.7,-2.5]) cylinder (13,0.5,0.5,center=true); translate ([8,-12.7,-2.5]) cylinder (13,0.5,0.5,center=true); translate ([4.3,-12.7,4]) rotate ([0,90,0]) cylinder (9,0.5,0.5,center=true); Contre-bas Pour remplir le vide des murs, je viens modéliser des contre-bas aux pieds de 3 des murs du cube Maison. Je place donc un long cylindre, que je fais pivoter de 90° avec "rotate", de sorte à avoir un cylindre à l'horizontale. Ensuite, je forme un cylindre vertical plus court, que je positionne sous l'extrémité du plus grand. J'inclus ce petit cylindre dans un module, que je reproduis et déplace à distance régulière 11 fois. Enfin, avec un autre module comprenant le long cylindre et les 11 plus petits, je reproduis le modèle sur deux autres murs avec les fonctions "rotate" à 90° et "translate". //contre bas module contrebas() { translate ([13,0,-7]) rotate ([0,90,90]) cylinder (25,0.5,0.5,center=true); translate ([13,0,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,2,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,4,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,6,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,8,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,10,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,-2,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,-4,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,-6,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,-8,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); translate ([13,-10,-8.5]) rotate ([0,0,90]) cylinder (3,0.5,0.5,center=true); }; translate ([0,0,0]) contrebas (); translate ([-26,0,0]) contrebas (); translate ([0,0,0]) rotate ([0,0,90]) contrebas (); Banc Pour meubler le mur extérieur du fond, je viens créer un petit banc, avec 4 cylindres courts pour les pieds, tournés à 90° selon l'axe z (à la verticale) et 2 cubes que je rends plats et longs avec "scale". Avec "rotate", je penche légèrement le dossier à -70° selon l'axe x. //banc translate ([3,13,-5.5]) rotate ([-70,0,0]) scale ([4,1.5,0.2]) cube (2, center=true); translate ([3,15,-7.5]) scale ([4,1.5,0.2]) cube (2, center=true); translate ([0.2,13.5,-8.3]) rotate ([0,0,90]) cylinder (3.5,0.4,0.4,center=true); translate ([6,13.5,-8.3]) rotate ([0,0,90]) cylinder (3.5,0.4,0.4,center=true); translate ([6,16,-8.5]) rotate ([0,0,90]) cylinder (2.9,0.4,0.3,center=true); translate ([0.2,16,-8.5]) rotate ([0,0,90]) cylinder (2.9,0.4,0.3,center=true); Échelle et support La partie la plus complexe fut la création d'une échelle menant à la fenêtre de la tour. Pour cela, j'ai modélisé 2 cylindres longs et fins et 5 cylindres plus courts horizontaux, qui joignent les deux pieds. J'ai pris soin de pencher légèrement certains des échelons avec "rotate". Enfin, avec un module comprenant tous les cylindres, je penche le tout à 30° contre la tour. //échelle module echelle () { translate ([-27,18,2.3]) cylinder (14,0.4,0.4,center=true); translate ([-27,22,2.3]) cylinder (14,0.4,0.4,center=true); translate ([-27,20,7]) rotate ([90,0,0]) cylinder (5,0.4,0.4,center=true); translate ([-27,20,5]) rotate ([90,0,0]) cylinder (5,0.4,0.4,center=true); translate ([-27,20,2]) rotate ([90,0,0]) cylinder (5,0.4,0.4,center=true); translate ([-27,20,0]) rotate ([100,0,0]) cylinder (5,0.4,0.4,center=true); translate ([-27,20,-2.5]) rotate ([85,0,0]) cylinder (5,0.4,0.4,center=true); }; //translate échelle translate ([-1,-14,-20]) rotate ([0,30,0]) echelle (); Je viens ensuite créer un support de corde sur le mur de gauche avec des cylindres fins et longs que je viens placer horizontalement et verticalement avec "rotate". Je place enfin un troisième cylindre à 45° rejoignant les deux, de sorte à créer une équerre. Puis j'y ajoute une corde qui pend avec un cylindre vertical très fin. //support lanterne translate ([-15,-6,2.5]) rotate ([0,-45,0]) cylinder (7,0.5,0.5,center=true); translate ([-16,-6,5]) rotate ([0,90,0]) cylinder (6,0.5,0.5,center=true); translate ([-12.9,-6,0]) rotate ([0,180,0]) cylinder (14,0.5,0.5,center=true); translate ([-18.5,-6,1]) rotate ([0,180,0]) cylinder (8,0.2,0.2,center=true); Clôture et boite aux lettres Pour finaliser les détails extérieurs, je viens placer une boite aux lettre devant la façade, avec une cube allongé ("scale") et une différence entre un parallélépipède et ce-dernier pour créer l'ouverture. Je place le tout sur un cylindre vertical. Puis, je crée une petite clôture à trois pieds, sur le même principe que l'échelle. //cloture translate ([-18,-19,-7]) rotate ([0,180,0]) cylinder (8,0.5,0.5,center=true); translate ([-23.7,-11,-7]) rotate ([0,180,0]) cylinder (7,0.5,0.5,center=true); translate ([-9,-23,-7]) rotate ([0,180,0]) cylinder (7.2,0.5,0.5,center=true); translate ([-14.5,-21.2,-7]) rotate ([0,180,0]) cylinder (6,0.5,0.5,center=true); translate ([-22.3,-15,-6.5]) rotate ([0,180,0]) cylinder (7.4,0.5,0.5,center=true); translate ([-16,-20,-5]) rotate ([32,95,0]) cylinder (6,0.5,0.5,center=true); translate ([-20,-17,-4]) rotate ([43,90,0]) cylinder (7,0.5,0.5,center=true); translate ([-23,-13,-5]) rotate ([70,90,0]) cylinder (5.5,0.5,0.5,center=true); //BoiteAuxLettres difference () { translate ([-9,-23,-2]) scale ([1.5,1,1]) cube (3,center=true); translate ([-9,-25,-1]) scale ([1,1,0.2]) cube (3,center=true); }; 7. Socle Enfin, pour souder les éléments entre eux, je viens créer un socle circulaire avec "circle", sous l'ensemble de ma structure. Je rajoute ensuite, au-dessus, une sphère aplatie avec "scale" pour donner du volume et de la rondeur. //socles translate ([-2.5,0,-10]) scale ([1,1,0.06]) sphere (25, center=true); translate ([-2.5,0,-11]) cylinder (2,26,26,center=true); translate ([3,-16,-9]) scale ([1.5,1,1]) cylinder (1,2,2,center=true); translate ([6,-18.5,-9]) scale ([1.5,1,1]) cylinder (1,1,1,center=true); translate ([5,-21.5,-9.5]) scale ([1.5,1,1]) cylinder (1,1.5,1.5,center=true); Je place 3 cylindres plats allongés devant l'emplacement de la porte d'entrée pour former des pierres plates. Et voici le résultat final : Merci de m'avoir lue ! :) Projets 2D Inès Les Dents du Spitfire Dans le cadre de l'UE, le second projet personnel à réaliser est une gravure sur une plaque de dimension maximale 30x30cm. Pour réaliser les Dents du Spitfire, voici ce qui vous sera nécessaire : un ordinateur avec le logiciel Inkscape une clé USB un accès à l'ordinateur à graveuse laser du Fablab avec le logiciel Ruby une planche de bois MDF ou contreplaqué un accès à la graveuse laser Trotec Speedy 100 I_ Modèle du projet En tant que pilote et passionnée d’aéronautique, j’ai choisi une référence aux avions des deux guerres mondiales : les dents de requin en nose art ! Les Spitfire (chasseurs britanniques de la ww2) étaient très souvent peints de ces peintures, les rendant amusant et menaçant. Je choisi donc de graver sur bois l’image ci-dessous à droite. BITE ME! The Story of the Shark Mouth, the World’s Most Enduring Nose Art — Vintage Wings of Canada (gauche) (163) Pinterest (droite) II_ Utilisation du logiciel Inkscape J'ouvre un nouveau document sur Inkscape et j’importe mon modèle. Ensuite il faut faire un clic droit sur l’image et "Vectoriser un objet matriciel". Pour un rendu optimal et propre, il faut choisir comme mode de détection “Autotrace” et “Appliquer” Maintenant il n’y a plus qu’à supprimer le calque contenant l’image d’origine pour ne garder que celui contenant l’image vectorisée. Il faut cliquer sur celle-ci et la mettre en noir à l’aide de la palette de couleurs en bas de l’écran pour que la Trotec grave le motif, et il faut faire un cadre vide tout autour avec l’outil “rectangle” de couleur rouge pour que la machine découpe la plaque. Il faut maintenant exporter le fichier sous le format .svg sur une clé USB. III_ Résultat Maintenant le projet est quasiment fini, il faut seulement brancher sa clé USB sur l’ordinateur branché à la Trotec, ouvrir le fichier sur Ruby et l’envoyer en file d’attente. Il faut calibrer la machine et lancer la gravure ! Voici le résultat final : Lola La Vache de bois Pour ce projet de gravure sur bois, j'ai décidé de reprendre le dessin d'un artiste que j'apprécie. Modélisation Une fois l'image enregistrée, il suffit de l'ouvrir dans le logiciel InkScape et de la vectoriser. Pour l'écriture, j'ai simplement utilisé l'outil calligraphie, et ajouté un remplissage noir (noir étant la couleur pour la gravure, rouge pour la découpe). Pour finir, il faut ajouter un rectangle rouge autour du dessin pour le séparer de la planche en bois. Conception On ouvre ensuite notre modèle dans l'interface Ruby (raccourci de l'interface sur le bureau de l'ordinateur du Fablab). On choisit les paramètres suivants : Pour l'utilisation de la découpeuse laser, il faut se référer au manuel d'utilisation se trouvant à côté de la machine. Ne pas oublier de faire la focale (elle se fait automatiquement sur la découpeuse Trotec Speedy 360 en appuyant simultanément  sur les flèches haut et bas). Lison Projet 2D Mésange gravée Rappel des consignes et présentation du projet : Le projet personnel 2D sera modélisé avec le logiciel de dessin 2D Inkscape, de dimensions 30x30 cm et usiné avec la découpeuse laser du Fablab pour une durée maximum de 30 minutes. Pour ma modélisation, j'ai choisi de graver un modèle d'oiseau à offrir, ici une mésange. Impression en MDF 3 mm - 7 minutes A. Choix du modèle Pour choisir une image de mésange apte à être gravée, je recherche sur internet une catégorie "dessin" pour retrouver des illustrations en noir et blanc, qui seront alors plus faciles à modéliser. Après avoir sélectionné un modèle qui me convient, je l'enregistre et l'importe sur le logiciel Inkscape. http://www.association-oiseaux-nature.com/accueillir-la-biodiversite-chez-soi/mesange-bleue-dessin-catherine-bernardin-2/ B. Modélisation Inkscape Sur le logiciel de dessin 2D, j'importe mon image et la vectorise : Une fois cette étape passée, je supprime l'ancienne photo pour ne garder que la nouvelle et ajoute un rectangle rouge autour du dessin pour préparer la découpe. Enfin, en important ce fichier sur le logiciel Trotec, je viens modifier les paramètres d'usinage en déplaçant mon dessin et en veillant à sélectionner la rubrique MDF 3 mm. C. Conception Une fois que les paramètres sont rentrés et vérifiés, on lance l'exécution en restant proche de la machine tout le long de l'usinage : Et voici le résultat : Vlad Le logo de la Sorbonne I.  Introduction: Pour rappel, dans le cadre de l’UE Fablab, nous devons chacun réaliser un projet en 3D, sur OpenSCAD ou FreeCad, et en 2D sur Inkscape. Comme consigne pour le projet en 2D, nous devons modéliser un dessin avec le logiciel InkScape et l’usiné avec la découpeuse laser disponible au Fablab sur une planche en bois pas plus grande de 30x30 cm. II. Choix du projet: Comme le logiciel InkScape est beaucoup plus facile à utiliser que OpenSCAD en 3D et en pouvant importer n’importe quelle image depuis l’internet, le choix était assez difficile. Cependant, pendant l’une des séances de Fablab j’ai remarqué dans l’une des salles l'emblème de Sorbonne graver dans du bois, j’ai donc voulu faire un peu la même chose, sauf qu’en gravant aussi le nom de la Sorbonne. Il faut trouver sur internet une photo de bonne qualité pour pouvoir l'utiliser. J’ai donc trouvé sur internet ce logo, que j’ai ensuite importé dans Inkscape https://fr.wikipedia.org/wiki/Fichier:Logo_Sorbonne_Universit%C3%A9.png III. Modélisation III. Modélisation: Après avoir importé la photo sur InkScape, je la vectorise et je supprime l’ancienne photo afin de ne garder que la nouvelle. Étapes à suivre: Importer la photo dans InkScape La vectoriser ( Trace Bitmap en anglais):   3. Supprimer l’ancienne photo:   4. Tracer un rectangle rouge autour de la photo afin de la découper de la plaquette.   5. Exporter le fichier en SVG   6. Importer le fichier en SVG sur la logiciel Trotec pour pouvoir l’imprimer   7. Bien modifier les paramètres d’usinage en déplaçant le dessin et en vérifiant que le bon type de bois a été choisi (MDF 3mm dans mon cas). IV. Conception IV.  Conception: Après avoir bien vérifié que tous les paramètres ont bien été choisis et sauvegardés, on peut lancer l'exécution. Durée: 3 min Il faut rester à côté de la machine tout au long de l’usinage afin de surveiller le bon déroulement. En cas de départ de feu, arrêter l’impression, alerter les FabManagers et l'éteindre avec l’extincteur. .  V.  Résultat: En voici le résultat: Groupe Feuille A4 Le boitier solaire Contexte Il nous a été demandé de fabriquer un dispositif contenant un ou plusieurs capteurs, capable de remplir la fonction de notre choix, à l’aide d’un microcontrôleur Arduino et d’une grande partie du matériel du fablab. Nous avons donc décidé de fabriquer un boitier délivrant des informations permettant de protéger une personne fragile lors des périodes de forte chaleur. Objectif Notre objectif est de fabriquer un boitier contenant affichant l’humidité et la température de l’air aux alentours de la boite et émettant un signal sonore lorsque l’ensoleillement est élevé pendant une longue période, ce que nous voulons mesurer à l’aide de la température de surface d’un rectangle sombre placé au-dessus de la boite. Informations Noms des participants : DERGHAL Sarah JUILLARD Luka MEIMOUN Samuel WOODHEAD Wilson CMI Physique 30/01/2024 - 30/04/2024 Matériel 1 Arduino Méga et son shield 3 capteurs : Température Humidité (dans notre cas les deux sont assurés par : Grove - I2C High Accuracy Temp&Hum Sensor (SHT35) ) Température d'une surface (ici : Grove - Infrared Temperature Sensor) 1 écran (ici : Grove - 16x2 LCD Black on Yellow) 1 buzzer batterie externe 1 planche de CP peuplier 3mm (dimensions 300*600mm) colle à bois pâte à fixe Machine utilisée Trotec Speedy 360 Construction Étape 1 Vérifier le bon fonctionnement de la batterie externe, puis de l'Arduino Mega (à l'aide d'un Blink par exemple). Vérifier le bon fonctionnement des deux capteurs, de l'écran et du buzzer, à l'aide de programmes de base. Nous avons personnellement utilisés ceux-ci (certains demandent des bibliothèques particulières, elles se trouvent plus bas dans la section "Autres ressources Arduino" -> "Bibliothèques") : ProgrammeTestTempHumSensor.ino ProgrammeTestInfraredTempSensor.ino ProgrammeTestEcran_HelloWorld.ino ProgrammeTestBuzzer.ino Étape 2 Écrire un programme permettant d'atteindre les objectifs avec les capteurs, l'écran et le buzzer. A noter que (Arduino le fait généralement automatiquement) il faut que vos programmes soit chacun seul dans un dossier (ou sous dossier), sinon lors de la compilation une erreur de type "redefinition of ..." risque de s'afficher sur un programme pourtant fonctionnel. Notre programme : Programme_final.ino Étape 3 Déterminer la distance nominale réelle du capteur de température infrarouge comme décrit à la séance 6 du journal de bord. Il est possible de se référer à celle indiquée par le constructeur, mais elle restera moins précise que si on la détermine ainsi. Étape 4 Concevoir une boite capable de contenir l'ensemble des éléments avec les emplacements permettant d'encastrer le buzzer, l'écran et les capteurs. Le capteur de température de surface nécessite une surface de couleur sombre positionnée face à lui à une distance égale à sa distance nominale. Étape 5 Monter la boite avec à l'intérieur la batterie externe, l'arduino et son shield, ainsi que, encastré dans les emplacement prévu à cet effet, l'écran, le buzzer, et les capteurs. Vérifier le bon fonctionnement de l'appareil ainsi formé. Pour plus de précisions, voir le journal de bord. Autres ressources Arduino : Wiki : _Capteur de température et humidité : https://github.com/SeeedDocument/wiki_english/blob/master/docs/Grove-I2C_High_Accuracy_Temp%26Humi_Sensor-SHT35.md _Capteur infrarouge de température de surface : https://wiki.seeedstudio.com/Grove-Infrared_Temperature_Sensor/ _Ecran : https://wiki.seeedstudio.com/Grove-16x2_LCD_Series/ _Buzzer : https://arduinofactory.fr/buzzer/ Bibliothèques : _Capteur de température et humidité : https://github.com/Seeed-Studio/Seeed_SHT35 _Ecran : https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight/archive/master.zip Journal de bord : 1ère séance : 30/01/2024 - Découverte du fablab Nous avons lors de la première séance découvert le Fablab, un espace unique du campus. Comme son nom l'indique, le Fablab est un espace dans lequel étudiants et enseignants peuvent venir réaliser leurs projets académiques ou personnels. Pour se faire, ils peuvent compter sur un grand nombre de machines et d'outils différents, ainsi que sur l'aide de l'équipe d'ingénieurs du fablab. Lorsqu'on entre, la première chose qui nous saute aux yeux est l'espace de travail à notre disposition. Il est possible d'y retrouver tout le matériel électronique nécessaire pour, non seulement discuter et concevoir nos projets, mais aussi faire des prototypes. Les machines et matériels plus spécifiques sont divisés par salle. La première auquel on a accès est celle d'impression 3D : Il s'y trouve une multitude d'imprimantes 3D pour réaliser tout type de projet, ainsi qu'un dispositif pour recycler le plastique inutilisé après impression. La salle suivante est la salle de découpe : Il est possible d'y trouve plusieurs découpeuses différentes (découpeuse laser, découpeuse à eau, découpeuse vinyle,...) permettant de découper en 2D et de graver dans toute sorte de matériaux, telle que le bois, le carton, le méta, le plexiglas... ainsi qu'une machine de découpe à fil chaud pour découper en 3D le polystyrène, une machine à coudre et une presse pour floquer les textiles. Les usages pour ces machines sont, pour ainsi dire, infinis, et on en retrouve quelques exemples disposés dans la salle : Gravure et objet de décoration de Noël en 3D réalisés à la découpeuse laser Dans le fond du fablab, à coté des bureaux, se trouvent 3 autres salles. Deux d'entre elles sont réservés à des usages plus complexes : l'une est sert à la soudure tandis que la seconde permet de graver au laser ou à la fraiseuse des plaques de cuivre en vu de la fabrication de composants électroniques. La dernière salle du fablab que nous avons visité est la menuiserie. Elle contient plusieurs machines dont l'une servant à couper dans des surfaces planes de bois et une autre servant à découper dans le bois des formes à symétrie cylindrique, ainsi que tous les outils utiles à la fabrication d'objets en bois : perceuses, papier de verre, vis, etc. C'est par cette salle que s'est achevé notre visite du fablab. Ce qu'il nous reste en tête en sortant alors, c'est l'impression qu'au fablab, il est possible de tout créer. Cela stimule grandement notre imagination et nous motive à revenir pour apprendre à utiliser tous les outils à notre disposition et réaliser tous les projets dont nous pourrions rêver. 2e séance : 06/02/2024 - Découverte modélisation 2D et 3D et machines Cette seconde séance était dédiée à la découverte et à l'explication de plusieurs logiciels de modélisation 2D et 3D open source. Dans un premier temps, nous avons observé l'utilisation du logiciel de modélisation 2D Inkscape et appris les outils de base du logiciel. Il a ensuite été temps pour nous d'appliquer ce que nous avions appris en reproduisant une figure rouge composée d'un rectangle et de cercles dont les mesures nous avaient été imposées au préalable. Nous avons alors de la même manière découvert le logiciel Openscad qui permet de faire de la modélisation 3D en tapant des commandes dans l'interface du logiciel. Pour finaliser nos premiers pas sur le logiciel nous avons tenter de réaliser une figure formée d'un cube à l'intérieur duquel se trouve plusieurs trous cylindre. Le dernier logiciel qui nous a été présenté est Freecad. Il permet, tout comme Openscad, de réaliser de la modélisation 3D mais se distingue par le fait qu'il ne se base pas sur la rédaction de commandes mais sur l'utilisation du pointeur de la souris avec différent outil du logiciel pour tracer les figures. Notre découverte du logiciel s'est finalisé en réalisant la même figure qu'avec Openscad, ce qui nous a permis de réellement comprendre les différences entre chaque logiciel, et de trouver lequel des deux nous correspond le plus. Pour finir la séance, la FabManageur Clara Devanz nous a expliqué le fonctionnement des imprimantes 3D et découpeuses laser, la manière de s'en servir ainsi que les règles de sécurité à respecter absolument. Elle nous a aussi donné des indications concernant certains détails techniques d'impression 3D comme le pourcentage de remplissage qui permet d'influer sur la solidité de l'objet : ou l'épaisseur du plastique fondu utilisé lors de l'impression qui permet de modifier la précision : Coronavirus imprimé en 3D avec une épaisseur de 0,4mm Coronavirus imprimé en 3D avec une épaisseur de 0,1mm Nous avons ainsi pu nous faire une meilleure idée de contraintes et conseils à prendre en compte lors de la conception et réalisation de nos projets personnels et du projet de l'UE. 3ème séance : 13/02/2024 - Présentation Arduino et brainstorming du projet La troisième séance était dédiée à la présentation des microcontrôleurs Arduino, à l'apprentissage des bases nécessaires à leur utilisation, et au brainstorming de notre projet de groupe. Dans un premier temps, nous avons découvert les microcontrôleurs Arduino, quelques événements important de l'histoire de l'électronique qui en ont permis l'existence, ainsi que le langage de programmation qui y est associé. Nous avons alors fait nos premiers pas avec ce langage de programmation en utilisant le logiciel Arduino. Comme il est coutume lors de l'apprentissage d'un nouveau langage de programmation, nous avons réalisé l'équivalent d'un Hello World (programme qui consiste à afficher "Hello World" sur un écran) pour Arduino, le Blink (programme qui consiste à faire clignoter la LED intégrée au microcontrôleur, étant donné qu'il ne contient pas d'écran). Une fois le Blink réalisé, nous avons essayé de reproduire le même résultat en modifiant légèrement le programme pour cette fois  faire clignoter une LED externe au microcontrôleur, en utilisant une BreadBoard, des fils électriques et une LED rouge. Ayant rapidement réussi l'exercice, nous avons voulu aller un peu plus loin et avons tenté de réaliser un message en morse, avec succès : Ensuite, nous avons continué notre expérimentation de la programmation Arduino avec un module utile pour notre projet : un capteur, ici d'humidité et de température. Nous avons alors cherché le wiki du capteur, fournit par le fabriquant et disponible sur internet, à partir des informations notées sur le capteur, et avons pu y récupérer les instructions d'utilisation, ainsi que la bibliothèque et le programme à utiliser avec Arduino. Il suffisait ensuite d'importer la bibliothèque sur le logiciel et de coller le programme du wiki pour directement pouvoir mesurer l'humidité et la température de la classe avec le capteur et retrouver ces informations en temps réel sur l'interface du logiciel : Une fois nos premiers pas faits avec le microcontrôleur Arduino Uno, nous avons eu le reste de la séance pour rassembler nos idées pour notre projet et expérimenter plus le fonctionnement du microcontrôleur et des capteurs. 4ème séance : 28/02/2024 - Début du projet, capteurs et codage Nous sommes arrivés au Fablab, avec une annonce frappante, aujourd'hui aller être la première séance de notre projet de groupe. Plusieurs éléments ont ainsi étaient disposé sur notre table a notre dès notre arrivé, un Arduino et un Base Shield pour notre Arduino, qui permettra plus de branchement a celui-ci. Avec ces deux outils qui servirons de base pour notre projet. Nous avons discuté de ce que nous voulions créer, Sarah a proposé a que ce projet ait pour but de créer un boitier portable avec un écran intégré (ou connecté a distance si nous avons le temps) pour informer directement l'utilisateur de la température, les rayons UV et l'humidité d'une façon plus précise que la météorologie générale. Un consensus c'est formé et nous avons décider que cet outils sera le plus pertinent que nous pourrions créer ensemble car quand il sera finaliser, il permettra a des personnes a risques d'avoir des informations directement accessible pour éviter ce qui donc nous avons nous allons crée ce boitier avec 2 capteurs différents, un capteur d'UV, de température/humidité. Ces capteurs ont été retrouvées plutôt facilement, nous les avons ensuite testé en les connectant a l'Arduino qui était lui connecté a l'ordinateur dont le logiciel Arduino Ide a été installé.  Le premier capteur température/humidité a bien été vérifié en le comparant a la température de la pièce et vérifiant le pourcentage d'humidité dans l'air qui correspondais bien au niveau normal, nous avons aussi constater une augmentation de la température et de l'humidité lorsque nous avions le capteur dans notre main ce qui était un résultat logique et cohérent mais pour tester le capteur UV, nous avons été confronté a une panoplie de problème, pour vérifié son fonctionnement, le capteur  a été submergé dans une machine qui envoyé un ensemble de rayon UV pour tester ces réponses on été utilisé mais ce premier capteur été bloqué a 3,5UV. Nous l'avons remplacé avec un deuxième capteur mais encore une fois ce capteur ne fonctionnait pas. 5ème séance : 05/03/2024 - Remplacement de capteur, documentation, écran et alarme Lors de cette séance nous avons essayé de refaire fonctionner les capteurs UV à notre disposition cependant les résultats furent les mêmes, les capteurs continuèrent de donner des valeurs incohérentes avec toutes les mesures qu'on a essayé. On a donc décidé de revoir notre objectif principal et de s'attarder uniquement sur l'humidité et la température. Néanmoins on a voulu aller un peu plus loin que mesurer la température de l'air, en effet pour un usage tel que prévenir en cas de danger pour l'être humain, la température de surface serait plus adapté. On peut observer facilement dans plusieurs régions du monde que la température ressentit par le corps humain est souvent bien plus élevée que la température de l'air, cette grande différence est causée par les différents rayonnements réfléchis sur toutes les surfaces du milieu ainsi que le niveau d'humidité. En fin de séance nous avons essayé de configurer, de programmer et de récolter des informations sur le Grove Infrared Temperature Sensor et nous avons aussi commencer à réfléchir à comment on pourrait faire des test de mesures pour s'assurer de son bon fonctionnement et de la cohérence de ses résultats. Enfin nous avons récupéré des alarmes sonores ainsi qu'un écran pour pouvoir retranscrire les résultats à l'utilisateur de notre projet, l'alarme se mettra en route lorsque l'humidité et la température de surface sera trop élevée et l'écran qui affichera continuellement la température de l'air. 6ème séance : 12/03/2024 - Etalonnage du Infrared Temperature Sensor et programmation Lors de cette séance nous avons configuré non sans difficulté le Infrared Temperature Sensor et pendant ce temps l'autre partie du groupe a continué les recherches sur ce capteur. Nous avons appris que le capteur avait une distance de mesure nominale représentée ici par la distance D : Le constructeur a estimé que la distance de mesure nominale était de 9cm cependant ils ne peuvent le garantir précisément pour chaque capteur. Ainsi nous avons décidé de suivre la procédure pour trouver la distance D de notre capteur de manière précise. Cela consiste à mettre dans des récipients de couleur sombre de l'eau à 0°C et attendre que la surface du récipient ait la même température. Une fois s'être assuré de cela avec un thermomètre de surface, on mesure la température avec notre capteur. On mesurera la distance entre le capteur et la surface du récipient lorsqu'on obtient la valeur de 0°C. On refera exactement la même expérience mais pour de l'eau à 100°C. On obtiendra alors notre distance de mesure optimale précise pour ce capteur là. N'ayant pas le matériel nécessaire à notre disposition, on décide qu'on fera cette mesure chez nous, une fois qu'on aura un programme complet fonctionnel. En terme de programmation, notre défi est de faire un programme contenant 4 éléments : 2 entrées (capteur d'humidité/température, et capteur de température infrarouge) et 2 sorties (buzzer et écran). Pour se faire, n'ayant que peu expérimenté la programmation en C++, nous nous basons sur les différents programmes donnés sur le wiki de chaque appareil et essayons de les modifier et assembler pour obtenir un programme fonctionnel. Cependant nous nous heurtons rapidement à un problème, en faisant un programme avec le capteur temp/hum et l'écran, nous nous rendons compte que les bibliothèques de chacun sont très lourdes, et qu'il ne reste que très peu de place ensuite dans l'Arduino Uno, et nous n'avons alors  pas encore les bibliothèques et les variables associées aux deux autres éléments dans le programme. Nous décidons de passer à l'Arduino Mega qui contient une plus grande mémoire. 7ème séance : 19/03/2024 - Programmes intermédiaires et problèmes Lors de cette séance nous avions deux objectifs principaux, concevoir une première version de la boite de notre appareil qu'on adapterait ensuite, et réussir à élaborer un programme qui nous permette de répondre à nos objectifs. Pour le programme, il a été décidé qu'on essaierai dans un premier temps de faire fonctionner chaque appareil seul donc avec 4 programmes, puis de faire 2 programmes pour faire fonctionner les appareils 2 à 2, et enfin de fusionner ces deux programmes pour obtenir le programme final. De cette manière, on peut diviser le travail de programmation et si le programme final ne fonctionne pas, il sera plus facile de trouver la source du problème. Après s’être renseigné sur les différences entre Arduino Mega et Arduino Uno (dans notre cas, la seule différence est que "INTERNAL" devait être remplacé par "INTERNAL1V1"), nous essayons avec succès de faire fonctionner tous les éléments. Les capteurs donnent des valeurs cohérentes de température et humidité, nous arrivons à faire jouer au buzzer une petite mélodie, et l'écran affiche avec succès un message de notre choix. Nous élaborons alors un programme assemblant ceux du capteur de température infrarouge et du buzzer, afin de faire retentir un son lorsque le capteur de température mesure une certaine température. La valeur est pour le temps des test arbitraires, nous choisissons alors 30 degrés car les objets alentours tels que la table y sont inférieur, mais nos mains ont une température supérieure, il est ainsi assez simple de vérifier le bon fonctionnement du programme. Ce programme étant fonctionnel, nous élaborons alors un second programme avec le capteur d'humidité et de température et l'écran afin que celui ci affiche la température et le pourcentage d'humidité de l'air. La première difficulté est que le capteur donne les données sous forme de variable, tandis que l'écran ne peut afficher que des données sous forme de "mot", on tente de régler ce problème en utilisant la fonction "word( )". Une fois toutes les erreurs de syntaxe trouvées sur le programme, on upload celui ci sur l'arduino mais malheureusement cela ne fonctionne pas. Nous faisons plusieurs essais en modifiant le programme pour retirer de potentielles erreurs, ou essayer de trouver d'où vient le problème mais la situation reste la même : le capteur fonctionne, il mesure des données et les envoie à l'arduino, mais l'écran ne les affiche pas, et ne démarre même pas. C'est sur ce semi échec que se termine la séance pour nous. Nous préférons réessayer la partie programmation une prochaine fois, nous disant que le problème sera peut être facilement visible lorsque nous nous y pencheront à nouveau à tête reposée. 8ème séance : 26/03/2024 - Programme final Lors de cette séance, il est temps pour nous de réellement finir le programme de notre appareil. On commence par réessayer le programme qui ne fonctionnait pas, et faire quelques modifications mais encore une fois cela ne fonctionne pas, le problème ne semble  pas venir du programme. Après avoir réfléchi longuement, une possible explication nous vient en tête : les deux éléments étant branché sur des prises I2C, il est possible que les "instructions" destinées à l'écran soit en réalité envoyées au capteur. On tente alors d'utiliser un autre écran, le "Grove - 16x2 LCD Black on Yellow". On teste rapidement le fonctionnement de l'écran avec le programme fournit sur le wiki associé, puis on modifie notre programme complet pour l'adapter à cet écran, d'abord de manière un peu précaire. Et là, victoire ! le problème était bien que le capteur et l'écran avaient la même adresse. En discutant avec M. Dupuis, on apprend que deux solutions sont envisageable, garder ce nouvel écran ou utiliser un dispositif permettant de changer l'adresse de l'ancien écran. Notre choix se porte sur la première possibilité, plus simple et plus rapide, avec en plus, la constations que ce nouvel écran affiche de manière plus visible les données, ce qui est mieux pour notre usage. On reprend le programme qui était amplement satisfaisant pour un test, pour qu'il affiche proprement les données (pour le test on ne l'avait fait affiché que la température et seulement la valeur de celle ci) et ait les caractéristiques les plus intéressantes pour notre usage (principalement en ce qui concerne le temps entre 2 mesures). Il suffit alors de le mélanger avec le programme contenant le Infrared Temperature Sensor et le buzzer, et on obtient notre programme final. 9ème séance : 23/04/2024 - Boitier de l'appareil et premières mesures Lors de cette séance, le programme étant fonctionnel et donc définitif, on s'est occupé de la boite. On a  voulu construire une boîte sous forme de pavé assez grande pour pouvoir accueillir la batterie, la carte Arduino Mega ainsi que le câble reliant les deux. Nous avons trouvé sur internet ce modèle facile à monter et nous l'avons directement mis sur l'imprimante laser. Le résultat fut convaincant : (Les trous présents ont été faits après l'impression de la boîte avec le modèle vu juste au dessus, ces trous accueilleront les éléments électroniques de notre projet, le choix de découpe pour les éléments électroniques sera expliqué juste après.) Nous avons ensuite monter la boite pour vérifier sa fiabilité : Cependant le travail est loin d'être fini, nous avons donc réfléchi à comment et où placer les capteurs, l'écran ainsi que l'alarme. Nous allons couper un rectangle sur un des côtés long de la boite, de taille à juste pouvoir sortir l'écran de la boîte. La partie circuit bleue restera à l'intérieur de la boite accroché par de la pâte à fixe. Même système pour la caméra qui sera cependant de l'autre coté long de la boîte avec le capteur humidité/température. Il n'y aura que la partie en forme de cône noire de la caméra qui sortira de la boîte, Le capteur température/humidité sera collé sur la paroi du même côté de la caméra. Enfin le capteur Infrared Temperature Sensor sortira du plafond à la verticale, le petit cercle argenté qui est la partie qui fait les mesures sera pointé vers un pilier de surface sombre à la distance nominale précédemment calculé. Nous aurons donc la température de surface du pilier, la température de l'air et d'humidité avec les valeurs affichées sur l'écran, la caméra émettra lorsque la température maximale préalablement calibré sera atteinte. Second côté de la boîte : En parallèle de la conception de la boite finale, le reste du groupe s'est occupé de tester le fonctionnement du programme et des capteurs dans des situations différentes. Armés d'un thermomètre, d'un hygromètre et de notre appareil, nous avons fait des mesures dans différents endroits du fablab, à l'ombre et sous le soleil, pour voir les caractéristiques de nos capteurs. Nous avons ainsi pu réfléchir à comment mener des séries de mesures que nous avons décidé de faire les jours suivants. Hors séance : du 24/04 au 29/04 - Mesures Pour vérifier la fiabilité de nos capteurs, nous avons décider de faire des séries de mesures en comparant les mesures données par nos capteurs et celles données par des appareils du marché. Nous prenons ces mesures en plusieurs fois, nous privilégions des séances courtes de prise de mesures mais nombreuses plutôt que l’inverse, car cela nous permet d’avoir une plus grande étendue de mesures. Pour le capteur de température qui mesure la température de l’air et le capteur d’humidité, nous n’avons pas de montage particulier, nous mettons simplement le capteur et le thermomètre/hygromètre de référence les plus proche possible l’un de l’autre avec le même ensoleillement. Nous évitons de faire des mesures au soleil car le capteur est à l’extérieur de la boite donc les valeurs qu’il donne varie plus rapidement que celles du capteur de référence qui à l’intérieur d’un boitier. Les résultats (rassemblés dans 2 graphes) sont les suivants avec 169 valeurs de température et 89 valeurs d'humidité : Pour le capteur de température de surface, nous faisons un montage, un peu précaire pour être honnêtes, avec des bâtons de bois et une règle en métal permettant de percher le capteur à une distance du sol égale à la distance nominale établie en amont. Nous versons alors de l’eau bouillante dans un récipient sombre au-dessus duquel nous plaçons notre montage, et nous prenons des mesures au fur et à mesure que l’eau refroidi. Notre capteur de référence est un thermomètre de cuisine, seul thermomètre de surface que nous avons trouvé. Les résultats sont les suivants, avec 144 valeurs : Dernière séance : 30/04/2024 - Présentations Lors de cette séance nous avons d'abord assemblé complètement notre appareil. Nous avons alors vérifié qu'il fonctionnait toujours parfaitement. Nous avons ensuite répété une dernière fois ce que nous avions prévu de dire lors de notre présentation et fait les dernières corrections sur notre diaporama. Et puis les présentations ont commencé, nous avons écouté avec intérêt les autres groupes présenter leurs projets, puis posé nos questions. C'est fascinant de voir les idées qu'ont eu les autres groupes, les problèmes qu'ils ont rencontrés (qui étaient parfois les mêmes que les nôtres), les solutions trouvées, et le résultat final qui était vraiment impressionnant. Nous avons ensuite présenté le fruit de notre long et dur travail. C'était plaisant d'avoir enfin le résultat de tous ce travail entre les mains et de pouvoir le présenter. Et puis après avoir discuté avec les autres de notre projet, la dernière séance de l'UE s'est finie, et nous sommes partis avec l'assurance de revenir pour nos propres projets. Projets personnels MEIMOUN Samuel Lors de la séance 2, notre professeur nous as donnés 2 devoirs : une modélisation en 2 dimensions et une modélisation en 3 dimensions, sans plus de contraintes que celle de la taille : pour la modélisation 2d, une taille maximum de 30*30 cm et pour celle en 3d, une taille maximum de 15*15*15 cm. 3D : STYLO Au début je me suis dit qu'avec le logiciel OpenSCAD, qui le semblait facile a prendre en main, je pourrais fairs des objets tirer de la culture pop mais je me suis rapidement rendu compte que la visualisation de l'objet puis la modélisation  et la réalisation sur OpenSCAD  me faisait default, donc j'ai voulu faire l'objet le plus simple possible par mes propres moyens j'ai donc décider de faire  un stylo. Voici la modélisation du stylo sur OpenSCAD: Il ma fallut 30 minute pour pouvoir faire se modèle pour qu'il soit au bonne dimension pour pouvoir insérait une mine de stylo bic classique dans le trous en haut. Le but de se projet était de pouvoir se passer d'acheter un nouveau stylo mais de se contenter d'acheter des recherche pour limiter mon impacte écologique. Pour se faire j'ai coder ceci: Le code est assez simple pour pouvoir etre recopier par n'importe qui qui commence la modélisation 3D sur OpenSCAD le resultat finale ressemble a sa: Au finale le stylo ne pourra pas servir car il a était conçu trop grand pour être un stylo fonctionelle et a cause des vacances je n'ai pas pu en imprimer un autre. 2D: IZUKU Pour mon projet en 2D j'ai eu beaucoup d'idée qui me son venu en tête je voulais absolument faire une planche de mon manga préferer a savoir My Hero Academia. Pour cela il me fallait une image qui me plaisait et qui rendait bien après la vectorisation de l'image sur Insckape. Le problems c'est que les plus belle planche de My Hero Academia joue sur la nuance de gris (vu qu'un manga est en noir et blanc). La vectorisation ne pouvant avoir que deux tinte différente il ma fallut trouver la bonne image. L'image finale aprés vectorisation ressemble donc a sa: Il ne me rester plus qu'a la passer dans le logiceil de la decoupeuse laser, rajouter les bordures pour la decoupe, placer une plache de peuplier 6mm et obtenir se magnifique resultat JUILLARD Luka Projet 2D : Pour mon projet 2D, j'ai éprouvé quelques difficultés. Je me suis très vite rendu compte que mes capacités en dessins étaient plus que limitées et de plus je n'avais aucune inspiration pour une découpe. C'est en discutant avec ma camarade de mon groupe Sarah que j'ai trouvé mon projet 2D : une gravure. Si à ce moment là des milliards d'images me sont venus en tête, dans les faits cela s'est avéré un peu plus compliquer que prévu. En effet seul les images en noir et blancs et vectorisées pouvaient être gravées. Cependant les images en couleurs avec plus teintes ainsi que des jeux de lumières comme les affiches de film ou de jeux vidéos étaient très compliquées, voir impossible, à vectoriser en noir et blanc. Les rendus étaient soient médiocres soient complètement inutilisables. A ce moment là j'ai réfléchi à où trouver des images déjà en noir et blanc et évidemment j'ai pensé aux mangas (bande dessiné japonaise). J'ai cherché l'une de mes planches favorites de mon manga préférée Berserk représentant le personnage principal Guts : L'image semblait presque déjà vectorialiser néanmoins il fallait quand même le faire sur Inkscape : Après l'avoir vectorisé il fallait donc le graver en l'envoyant à l'imprimante 3D, mon image faisait 30cm de long pour 15cm de large. On a donc un rectangle rouge de largeur 1 pixel pour la découpe sur du CP peuplier 3mm car je trouvais que le bois clair faisait ressortir mieux l'image. La gravure prendra une quinzaine de minutes, pour donner un résultat qui a dépassé mes espérances faisant honneur à Kentaro Miura l'auteur de Berserk . J'ai été le premier à faire une gravure toujours en duo avec ma camarade Sarah néanmoins après l'avoir partagé beaucoup d'autres de mes camarades de classes y compris ceux du groupe B se sont lancés dans les gravures. Je vous conseille d'aller jeter un œil à chacune de leurs créations qui sont toutes uniques et intéressantes. Projet 3D : Pour choisir mon projet 3D j'ai eu encore quelques complications entre mon imagination et ma réelle capacité à réaliser mes projets. J'ai donc commencé à réfléchir à un projet qui me plairait tout en restant à porter d'atteinte. J'ai ainsi fait le symbole du groupe de power metal Gloryhammer, leur marteau : J'ai donc utilisé openscad pour réaliser mon projet et voilà le résultat : J'ai attaché le lien du ficher ".scad" si vous voulez le consulter et voir en détail mon projet. Il y a le nom des modules permettant de savoir quels modules correspondent à quels parties du marteau. Le carré rouge ainsi que les parties circulaires sur les côtés sont les parties qui ont été les plus complexes à réalisés et surtout à ajuster. Enfin sur le logiciel permettant l'impression 3D, donne ceci : On a décidé de faire l'impression sur la même imprimante pour gagner du temps et car il y avait peu de place sur les imprimantes. Pour la simplicité du support, on a mis la tête du marteau vers le bas, le manche pourra être imprimer directement sur la tête du marteau. DERGHAL Sarah Projet 3D : Pour le projet d'impression 3D, plusieurs idées me sont venues en tête. La première était de modéliser un pot à crayon en forme de Rondoudou (le Pokemon), ce que j'ai commencé à faire, avant de me rendre compte que j'avais un besoin plus urgent. En effet, je possède un lightstick (voir image ci-dessous) qui est souvent posé sur mon étagère, mais est peu stable à cause de sa forme (le moindre coup, ou objet s'appuyant contre, pourrait le faire tomber et le casser). J'ai donc voulu concevoir un support sur lequel le poser. A l'aide d'OpenSCAD, j'ai conçu un cylindre creux d'une épaisseur de 0,5cm, dont le diamètre du cylindre intérieur mesure 4,5cm (soit 1cm de plus que le diamètre du bas du manche, qui s'épaissit en montant), avec une base elle aussi constituée d'un cylindre, plat (0,3cm de hauteur) et d'un diamètre de 9cm. Projet_Perso_Sarah-socle.scad Projet_Perso_Sarah-socle.stl Je me suis décidée assez tard sur le projet 3D que je voulais faire, ce qui fait que les imprimantes 3D étaient souvent toutes occupées. Nous nous sommes mis d’accord avec Luka, après que Nans du groupe B1 nous l’ait suggérer, pour rassembler nos deux projet 3D en un seul fichier, et ainsi réaliser les deux impressions en une fois. Notre objectif était de diminuer le nombre d’imprimante utilisée simultanément pour permettre aux autres usagers du fablab d’utiliser l’imprimante libérée. Après avoir généré le document au format stl avec openscad, puis importé celui-ci sur le logiciel IdeaMaker, nous avons suivi les instructions de la documentation des imprimantes 3D. Nous avons alors obtenu le document au format gcode que nous avons importé sur l’imprimante « Claudius » du fablab et nous avons pu enfin lancé l’impression. Projet 2D : Pour le projet d'impression laser 2D, mon choix s'est porté vers un marque page en forme de page de plateforme de streaming de musique. J'ai fait un montage photo mélangeant captures d'écran de page de ces plateforme et images trouvées sur internet, puis j'ai tenté de vectorialiser le tout avec l'outil d'inkscape permettant de le faire automatiquement. Cependant seul le dé et l'écriture de la pochette d'album "Whatever Comes Our Way" (voir image ci-dessous) a été vectorialisé de manière satisfaisante alors je me suis lancée dans la réalisation du reste à la main. J'ai dans un premier temps utilisé l'outil Plume du logiciel avec le mode "Chemin de Bézier régulier" pour faire la barre de progression ainsi que les icones en dessous, puis en tentant de faire les arabesques de la pochette d'album je me suis rendue compte que le mode "B-spline" était beaucoup plus confortable, c'est ce que j'ai utilisé pour le reste. J'ai ainsi obtenu l'image vectorielle que je voulais graver en noir, autour de laquelle j'ai ajouté un rectangle rouge à découper, ainsi qu'un petit cercle rouge en haut pour éventuellement mettre une jolie chaine. J'obtiens alors ceci : Projet_Perso_Sarah-marque_page.svg Il ne reste plus qu'à graver et imprimer à l'imprimante laser, sur une planche de peuplier 3mm pour obtenir... ceci : WOODHEAD Wilson Projet Personel 2D : J’ai longtemps pondéré sur l’idée de mon projet personnel 2D. J’ai hésité entre un dessin inspiré de mon livre préféré, ou une impression liée a mes passions. Mais finalement j’ai décidé de représenté mon équipe et mes amis que j’ai fais au cours de ces séances au FabLab. Apres avoir prise la photo de nous quatre,j e l’ai simplement importer dans inkscape, puis ensuite vectorialiser. Car la gravure finale est seulement représenté avec deux couleurs : soit aucune gravure = blanc, soit une gravure plus profonde = une échelle de gris puis noir. Cependant cette tache fut plutôt complexe, car cette vectorialisation nécessite de nombreux réglages pour rééquilibrer les nuances de la photo pour que les contours des visages ainsi que, la scène derrière reste visible. Apres mes modifications de l’opacité de la vectorialisation. J’ai pu la mettre sur l’imprimante 2D. J’ai ensuite choisi une taille de planche, pour cette occasion une planche de 6mm me convenait. Et ensuite j’ai pu programmer le laser pour une découpe de cette largeur de planche. J’ai aussi choisit la taille du contour autour de la photo que je voulais faire. Mais un soucis est vite arrivé mon projet voulait pas ce lancer. J’ai réalisé qu’une erreur de file d’attente a bloqué mon impression. J’ai du aller chercher de l’aide, et c’est grâce a un des managers du FabLab que avec le reset du système. J’ai enfin pu lancer l’impression 2D. Cette impression c’est faite en deux parties. La première étant le design puis la deuxième étant la découpe avec un laser plus fort pour séparer la planche de l’impression. Mon projet maintenant terminé, j’ai pu regarder le résultat et voir la belle impression de mon équipe, la seule amélioration que j’apporterais serais la qualité de mon image de base, qui aurait pu avoir plus de nuances fortes et ainsi être plus intéressant. Mais ce fut très interessant et enrichissant de découvrir ce monde d’impressions 2D. Projet 3D Pour ce projet je voulais créer un projet simple mais utile, en créant un objet qui m’avais passionné pendant ma jeunesse : les lego ! L’utilisation d’OpenScad était plutôt complexe car c’était la première fois que je l’avais utilisé. Mais après un peu d’aide et un peu de navigation sur le Web psr rapport aux tailles des legos. J’ai pu combiner un ensemble de de différents prisme et construire mon tout premier lego. La première pièce de lego était terminé a partir de ça le projet est devenu beaucoup plus simple. Il fallait maintenant recopier cette première pièce plusieurs fois et aménager sa taille pour avoir les pièce que je voulais. Soit des lego de taille carré et rectangles ainsi que des rectangles plus fins. Une fois terminé j’ai pu sauvegarder mon dossier avec me bon format et le placer sur une clé USB et l’importer sur l’ordinateur en charge des imprimantes 3D. Sur le softwear installé j’ai remarqué la possibilité de multiplier le dossier importer ainsi j’ai pu tripler le nombre de pièces de lego que je voulais imprimer. Quelques réglages plus tard, l’impression était lancer. A la dernière séance j’ai pu retrouver mes pièces de lego, et les retirer du support (très dur a faire ! ) et les inspecter. L’ensemble des lego des carré et rectangle avait parfaitement marché, ils se sont empiler parfaitement. J’était relativement fière de mon projet le seul truc à améliorer aurait était le nombre de pièces de lego ! Merci au FabLab ! Groupe B1 Nom des participants : MABIRE Léna OLAGNIER Nans PENOT Léonard TROUDE Thibault Séance 1 : Présentation de l'UE et du FABLAB (Espace de détente à l'entrée du Fablab)       Nous avons commencé cette première séance de l'UE LU1SXPFL, qu'on appelle plutôt "Projet Fablab" en découvrant le principe du Fablab, que l'on peut résumer en un bac à sable scientifique accessible à tout niveau, et que l'on peut utiliser en respectant le principe d'ouverture et de partage. Dans l'Openspace du Fablab, on a accès à diverses machines (imprimante 3D, fraiseuse numérique, découpeuse laser, etc...) afin de faire, comme le disait Neil Gershenfeld, le professeur au M.I.T. créateur du concept des Fablabs : "anything [we want]", soit "tout [ce qu'on veut]".      Le plus important à retenir est que dans cette UE, et dans notre utilisation du Fablab en général, même pour un usage personnel, il faut entretenir ce wiki, et accompagner nos projets d'une documentation la plus précise possible afin que chacun, même dans le futur, puisse utiliser ce que nous avons fait, comme nous utilisons ce que d'autres ont fait dans le passé. (Imprimantes 3D du FabLab) Séance 2 : Découverte des logiciels de dessin      Lors de la deuxième séance du Projet Fablab, nous avons appris à utiliser 3 logiciels de dessin numérique : Inkscape pour le dessin 2D, ainsi que OpenSCAD et FreeCAD pour le dessin 3D. A la fin de la séance, on nous as montré comment utiliser les différentes machines que nous aurons à notre disposition lorsque nous mettrons en oeuvre notre projet : imprimante 3D et découpeuse laser.      Commençons par décrire un peu les logiciels : Inkscape est un logiciel de modélisation numérique en 2 dimensions. Pour faire simple, c'est de la géométrie dans un plan en 2 dimensions. L'utiliser nous permettra de faire les plans à mettre dans la découpeuse laser.      Voici ci-dessus le dessin que nous avons réalisé pendant le cours. Notre professeur nous avait demandé de faire seulement un rectangle avec des cercles à l'intérieur, mais nous avons voulu nous amuser en creusant les coins et en ajoutant des rectangles sur les côtés pour agrandir ou rétrécir la pièce, comme un puzzle.      Ensuite, nous avons appris à utiliser le logiciel OpenSCAD. C'est un logiciel de modélisation en 3 dimensions, cette fois, et qui est basé sur du codage. Ainsi, on peut avec ce logiciel créer des formes plus ou moins complexes dans les 3 dimensions d'un plan, avec simplement quelques lignes de code (cela peut sembler compliqué, mais ça ne l'est pas tant que ça en vérité, les lignes de code sont simples à comprendre et à utiliser).      Voici pour illustrer une création que nous avons fait ainsi que le code qui nous as permis de la produire. Normalement, en copiant exactement le même code sur OpenSCAD, vous devriez obtenir le même résultat (à la seule différence que l'image de gauche est tirée de la visionneuse 3d de Windows 11 avec le fichier STL créé avec ce code, car le rendu est plus joli que celui directement disponible sur le logiciel OpenSCAD). Notre professeur nous demandait uniquement de trouer un carré, mais nous avons aussi voulu aller plus loin, en créant des carrés et des sphères, et en les emboîtant les uns dans les autres $fn=300; module coque(){ difference(){ sphere(d=30); translate([0,0,-16])cylinder(h=40,r=9); rotate([0,90,0])translate([0,0,-16])cylinder(h=40,r=9); rotate([90,0,0])translate([0,0,-20])cylinder(h=40,r=9); }; }; difference(){ coque(); sphere(d=28); }; module tesseract(){ rotate([45,45,45])difference(){ cube(12,center=true); translate([0,0,-8])cylinder(h=30,r=5); translate([-12,0,0])rotate([0,90,0])cylinder(h=30,r=5); translate([0,12,0])rotate([90,0,0])cylinder(h=30,r=5); sphere(d=15); }; }; tesseract(); module boule(){ rotate([-45,-45,-45])difference(){ sphere(d=9); translate([0,0,-16])cylinder(h=40,r=2.7); rotate([0,90,0])translate([0,0,-16])cylinder(h=40,r=2.7); rotate([90,0,0])translate([0,0,-20])cylinder(h=40,r=2.7); sphere(d=8); }; }; boule(); cube(3,center=true); sphere(d=3.5);      En soit ici, le code est globalement le même pour chaque partie de la figure, si ce n'est que nous n'utilisons pas les mêmes figures géométriques à chaque fois.      Le troisième logiciel que nous avons appris à utiliser est FreeCAD qui est aussi un logiciel de modélisation 3D. C'est aussi un logiciel dit paramétrique comme OpenSCAD à la différence que FreeCAD n'est pas basé sur le codage mais sur l'utilisation de fonction comme la création de bloc, l'extrusion et autres. Bien que cela paraisse plus simple que OpenSCAD, le logiciel FreeCAD est moins intuitif et donc plus difficile à prendre en main. (Modèle fait avec FreeCAD)      Enfin, nous avons terminé la séance en découvrant un peu le fonctionnement des machines. Nous ne détaillerons pas ici la façon exacte d'utiliser l'imprimante 3D et la découpeuse laser. Tout ce que nous dirons, c'est que ces machines sont assez impressionnantes (notamment la découpeuse laser, qui nous as laissés bouche bée par sa rapidité et sa précision). Séance 3 : Découverte de l'Arduino      Lors de la troisième séance, nous avons appris les bases de codage d'une carte Arduino et des différents capteurs qui peuvent lui être attachée.      Tout d'abord, on nous a distribué du matériel : une carte Arduino, des câbles, une LED, des résistances... tout ce qu'on utilise comme matériel en temps normal en cours d'électronique (mis-à-part l'Arduino qui est nouveau pour nous). L'Arduino, c'est un système reposant sur deux choses : un logiciel pilotable depuis l'ordinateur (gratuit) et une carte que l'on peut brancher directement à l'ordinateur. Le mélange de ces deux choses, et quelques connaissances de base en électronique, nous permettent de faire ce qu'on appelle de "l'électronique embarqué", c'est-à-dire de l'électronique, mais qu'on peut facilement faire à la maison, sans avoir besoin de tout le matériel des TP d'électro qu'on fait sur le campus de la fac.      Alors immédiatement, on a appris à faire utiliser l'Arduino. On a commencé par faire le circuit "Blink". C'est l'équivalent en Arduino du "Hello World" dans les autres langages de programmation. Le but est très simple : faire clignoter une LED.      Après avoir fait ce code, on a continué sur un circuit un peu plus utile : en branchant un capteur d'humidité et de température sur notre Arduino, on a pu contrôler à chaque seconde l'humidité et la température autour du capteur. Séance 4 : Début du projet en groupe      Dans cette séance nous avons commencé à préparer notre projet en groupe. Notre idée a été de faire un gravimètre (et détecteur de planètes). L'objectif est donc, à la fin de notre projet, d'obtenir un capteur capable de nous donner l'accélération de la pesanteur, et donc de nous indiquer sur quelle planète on se trouve.      Voici un premier schéma de notre idée (sans beaucoup de développement :      L'idée est la suivante : on fait tomber un accéléromètre, et avec une étude mécanique, on réussit à trouver l'accélération de la pesanteur (l'idée serait de supprimer l'incidence des frottements et de la poussée d'Archimède). Pour cela, on a eu l'idée de fixer l'accéléromètre sur un support mobile, que l'on pourrait facilement faire tomber à l'intérieur d'un tube (que l'on pourrait créer nous-même avec l'imprimante 3D et la découpeuse laser). Avec un baromètre (placé en haut), on pourrait connaître la pression pour calculer la poussée d'Archimède. Ensuite, en reliant le tout à une carte Arduino, on pourrait envoyer les données sur un écran, et afficher ainsi la valeur de g (l'accélération de la pesanteur). En mettant dans une base de donnée les valeurs tabulées des accélérations de pesanteur des différentes planètes du système solaire, par comparaison, notre système pourrait nous dire sur quelle planète on se trouve.      Cependant, en fin de séance, on s'est rendu compte que l'accéléromètre qu'on souhaitait utiliser nous donnait déjà, sans aucun mouvement, l'accélération de la pesanteur. Notre projet, dans sa conception, ne sert donc à rien et il faut le changer. Une de nos idées est de partir sur un capteur de distance et de mouvement. Séance 5 : Gravimètre, équations et impression      Notre première idée n'ayant pas abouti, nous avons commencé cette séance en réfléchissant à comment faire notre gravimètre, mais sans accéléromètre. Après avoir réfléchi à un capteur de distance, nous sommes finalement partis sur une idée de capteur de présence. Voici l'idée : dans un tube d'une soixantaine de centimètres, on place trois capteurs de présence : deux tout en bas du tube, très proches l'un de l'autre, et un tout en haut du tube. Une fois cela fait, grâce à un ressort nous envoyons une petite boule de métal par le bas du tube monter jusqu'au 3e capteur, puis redescendre.      Les deux premiers capteurs nous permettent de calculer la vitesse initiale de la boule, le 3e capteur nous permet, grâce au temps que la boule a mis pour atteindre le haut, de connaître l'accélération de la pesanteur (on néglige toute autre force, comme la poussée d'Archimède et les frottements pour le moment parce qu'ils sont compliqués à calculer et surtout assez négligeables ; on les rajoutera dans nos calculs à la fin du projet si nous avons le temps).      Voici ci-dessous un schéma de travail de notre système. C'est Léonard et Nans qui ont fait ce schéma, et Thibault et Léna qui ont par la suite aidé à le fignoler en fonctions des différentes valeurs que l'on devait avoir avec les capteurs :      Et ci-dessous, une photo du tableau sur lequel nous avons réfléchi aux calculs que l'on devrait faire avec les capteurs :      La valeur α est la hauteur, tandis que t est le temps. Pour les valeurs, α1 correspond à la hauteur du premier capteur, α2 à celle du 2e et α3 à celle du 3e tandis que les temps t1, t2 et t3 correspondent aux instants où la bille en métal passe devant les capteurs 1, 2 et 3.      Grâce aux capteurs 1 et 2, on calcule avec le Théorème des Accroissements Finis la valeur v0, la de la boule lorsqu'elle est au premier capteur (en vérité, ce n'est pas exactement ça, mais on placera les capteurs suffisamment proche pour qu'on puisse l'approximer). Ensuite, en connaissant le temps t3 où la boule arrive au 3e capteur, on finit par trouver la dernière formule pour trouver g, l'accélération de la pesanteur. On a retrouvé cela en faisant une analyse mécanique et cinématique de la situation, en considérant que la boule n'est soumise qu'à son propre poids.      À la fin de la séance, Léna et Thibault avaient réussi à faire fonctionner les capteurs tandis que Nans et Léonard ont imprimé une première pièce de la machine finale, à savoir le support de la boule, qui accroché au ressort, permettra d'envoyer la boule faire une chute libre. Voici la pièce :      Sur cette photo la modélisation de la pièce sur IdeaMaker. On ne le voit pas bien, mais c'est un cylindre avec un trou en son centre pour que la boule y tombe et une surface en hauteur légèrement creusée, afin d'être sûr que la boule, lorsqu'elle y reviendra, parte du milieu.      Voici le code utilisé pour modéliser la pièce (sur OpenSCAD) : $fn=100; module cylindre(){ difference(){ cylinder(h=1,d=3); translate([0,0,1])resize([3,3,0.5])sphere(d=2); translate([0,0,0.5])sphere(d=0.75); }; }; cylindre(); Séance 6 : Prototypage      Maintenant que toute la partie la plus théorique était au point, était venue l'heure du prototypage. Au début de la séance, Thibault et Léna ont donc commencé par essayer de faire fonctionner correctement les capteurs ensemble (faire fonctionner un seul capteur n'est pas en soit d'une très grande difficulté, mais en faire fonctionner trois simultanément et les uns en fonction des autres l'est plus).      Pendant ce temps, Léonard et Nans ont commencé le prototypage "matériel" en tentant de faire, mais sans encore de grande précision, la partie basse, ou "support" sur lequel on doit poser la plateforme de la boule/bille. Codage : unsigned T1; unsigned T2; unsigned vitesse ; bool variable1 = true ; bool variable2 = true ; //description des variables et départ des variables bolléennes en vrai void setup() { Serial.begin(9600); pinMode(6,INPUT); } void loop() { delay(500); if (variable1 ==true){ // tant que la première variable est vrai if(digitalRead(6)==LOW) { //Si un objet passe devant le premier détecteur Serial.println("yes1"); T1 = millis(); // On extrait le temps auquel l'objet est passé devant le détecteur et on met la variable en fausse pour que cette partie de la boucle s'arrete variable1 = false; } else { Serial.println("No1"); } } if (variable2 ==true){ // if(digitalRead(7)==LOW) { //Si un objet passe devant le second détecteur Serial.println("yes2"); T2 = millis(); // On extrait le temps auquel l'objet est passé devant le détecteur et on met la variable en fausse pour que cette partie de la boucle s'arrete variable2 = false; } else { Serial.println("No2"); } } if (variable1 ==false and variable2 ==false ){ // Une fois que l'objet est passé devant les deux détecteurs, on calcule sa vitesse vitesse = 1/ (T2 - T1) ; Serial.println("vitesse ="); Serial.println (vitesse); } } Code prototype calcul vitesse initial      Pour ce code le but est de déterminer la vitesse initiale du projectile. Pour cela, il décrit un fonctionnement assez simple : On détermine le temps T1, le moment le projectile passe devant le premier capteur. On détermine ensuite le temps T2, moment où le projectile passe devant le deuxième capteur. Enfin on calcule la vitesse en connaissant la distance entre les deux capteurs.      On utilise pour cela des variables booléennes pour ne calculer les temps T1 et T2 une seule fois et éviter de fausser notre calcule si un capteur se rallume et ne change donc la valeur de temps stocké. PS : ce code n'est pas définitif et sera changé plus tard. Séance 7 : Montage final, première partie      La séance d'aujourd'hui avait pour but d'imprimer et de découper les pièces qui nous manquaient ainsi que de finaliser le code.      D'abord, nous avons fini d'imprimer notre système de "catapulte", c'est à dire le système qui va lancer une bille en l'air. Pour cela, nous avons décidé de reprendre presque à 0, juste en gardant le principe. Nous avons donc créé un nouveau support, avec un rail de guidage pour qu'il reste bien droit tout au long de son chemin. $fn=100; module support(){ cylinder(h=2,r1=1,r2=1); translate([0.8,-0.25,0])cube([0.4,0.5,1.9]); translate([-1.2,-0.25,0])cube([0.4,0.5,1.9]); translate([-0.25,-1.2,0])cube([0.5,0.4,1.9]); translate([-0.25,0.8,0])cube([0.5,0.4,1.9]); }; module support2(){ difference(){ support(); translate([0,0,2])resize([2.5,2.5,0.5])sphere(1); translate([0,0,1.5])sphere(0.5); resize([0.5,0.5,1])sphere(0.25); }; translate([-0.25,-0.25,0])cube([0.25,0.5,0.1]); }; support2(); module creuset(){ cylinder(h=2,r1=1.05,r2=1.05); translate([0.8,-0.30,0])cube([0.45,0.6,1.5]); translate([-1.25,-0.3,0])cube([0.45,0.6,1.5]); translate([-0.3,-1.25,0])cube([0.6,0.45,1.5]); translate([-0.3,0.8,0])cube([0.6,0.45,1.5]); }; //creuset(); module corps(){ difference(){ cylinder(6,r1=1.7,r2=1.7); for(i=[-1:1:5]){ translate([0,0,i])creuset(); }; }; }; module couloir(){ difference(){ corps(); translate([0,0,6])resize([3.5,3.5,0.5])sphere(1); }; }; couloir();      Le fichier en .scad utilisé sur OpenSCAD est le suivant : support-couloir.scad      Il a ensuite fallu créer une boite suffisamment longue pour que la bille puisse monter et pour pouvoir mettre les capteurs à une distance assez longue pour réduire les incertitudes que nous devrons calculer une fois les premières mesures faites. Pour cette boite nous nous sommes servit du code Python www.festi.info/boxes.py/ présent sur le wiki du fablab pour créer une boite de 10cm*10cm*50cm à découper à l'imprimante laser puis à assembler.      Pour le code, nous avons mis le calcul de l'accélération dans le code. Séance 8 + vacances : Montage final, deuxième partie      Lors de cette séance, certain se sont concentré sur l'assemblage de la boite et des capteurs pendant que les autres terminaient le code. Pour être sur que la bille retombe dans le propulseur il a fallu créé une pièce qui réceptionne la bille et qui la ramène au centre. Nous avons aussi revu le code et les formules liée aux capteurs, pour corriger les erreurs et ajouter les parties manquantes. $fn=100; difference(){ translate([0,0,5]) cube([9.4,9.4,10], center = true); translate([0,0,15.8]) sphere(10) ; translate([0,0,-1]) cylinder(8,r1=1.7,r2=1.7); cube(11,center=true); };       Cette pièce a ensuite été accrochée au propulseur.      Dans l'atelier menuiserie, nous avons percé les trous pour les capteurs. Ceux ci étaient trop sensible et voyait donc la paroi de la boite face à eux. Nous avons donc peint l'intérieur de la boite en noir. Enfin nous avons vissé les capteurs et assemblé tous les composants ensemble.      Nous avons cependant rencontré le problème que la bille ne passait pas devant tout les capteurs car ceux ci n'étaient pas correctement aligné.      Pour le code, il a fallu faire attention que l'ordre de priorité des opérations dans les calculs soit correcte. Nous en sommes arrivé à ce résultat final : float T1; float T2; float T3; float v ; float g; bool variable1 = true ; bool variable2 = true ; //description des variables et départ des variables bolléennes en vrai bool variable3 = true ; bool variable4 = true ; bool variable5 = true ; void setup() { Serial.begin(9600); pinMode(6,INPUT); } void loop() { delay(0); if (variable1 ==true){ // tant que la première variable est vrai if(digitalRead(7)==LOW) { //Si un objet passe devant le premier détecteur T1 = millis(); // On extrait le temps auquel l'objet est passé devant le détecteur et on met la variable en fausse pour que cette partie de la boucle s'arrete Serial.println("T1 ="); Serial.println(T1); variable1 = false; } } if (variable2 ==true){ // if(digitalRead(6)==LOW) { //Si un objet passe devant le second détecteur T2 = millis(); // On extrait le temps auquel l'objet est passé devant le détecteur et on met la variable en fausse pour que cette partie de la boucle s'arrete Serial.println("T2 ="); Serial.println(T2); variable2 = false; } } if (variable3 ==true) { if(digitalRead(5)==LOW) { T3 = millis(); Serial.println("T3 ="); Serial.println(T3); variable3 = false; } } if (variable1 ==false and variable2 ==false and variable4 ==true ){ // Une fois que l'objet est passé devant les deux détecteurs, on calcule sa vitesse v = 0.05/ ((T2 - T1)/1000) ; Serial.println("vitesse ="); Serial.println (v,6); variable4 = false ; } if (variable1 ==false and variable2 ==false and variable3 ==false and variable5 ==true ){ g = (-2*(0.3-v*((T3-T1)/1000)))/(((T3-T1)/1000)*((T3-T1)/1000)); Serial.println("g = "); Serial.println (g,6); variable5 = false; } } Après les séances : résolution des problèmes      Comme les trous des capteurs n'étaient pas aligné nous avons décidé de refaire la partie haute de notre gravimètre. Pour cela nous avons redessiner une boite à découper à la découpeuse laser et nous y avons directement ajouté les trous pour les capteur pour que leurs découpe soit nette et être sûr qu'ils soient bien alignés. Modèle de la boite : BasedBox-2-2.svg      Ensuite nous avons, comme pour le prototype précédent, peint les parois intérieur en noir puis vissé les capteurs pour les maintenir en place. Voici donc le modèle final du gravimètre. Projet personnels :      En plus du projet de groupe, il nous est demandé de faire deux projets personnels ; créer une illustration en 2D et modéliser un objet en 3D. Le but de ces deux projets est de nous familiariser avec les logiciel de modélisation présenter au dessus mais aussi d'apprendre à nous servir des imprimantes 3D et de la découpeuse laser présentes au fablab. Projets personnels de Léna Projets personnels de Léna Projet 2D : Pour mon projet 2D, j'ai choisi de graver une carte de tarot que j'ai pris sur internet et vectorisé à l'aide de InkScape. J'ai ensuite détouré l'image me laissant ainsi avec ceci : J'ai ensuite mis le fichier sur la découpeuse laser qui a donc graver la partie noire et découpé la partie rouge. Voici le résultat : Projet 3D : Pour mon projet 3D, j'ai choisi de faire un petit chaudron à l'aide du logiciel OpenSCAD. Voici ci-dessous une photo de la représentation ainsi que le code : $fn = 200;module dif1(){;    difference(){        base();        translate([0,0,4])cube(6, center = true);        sphere(d = 4.5);    };};module pied(){;    cube(1, center = true);    rotate([45,0,0])translate([0,0.5, -1])cube([1,1,2], center = true);   };module base(){;    sphere(d = 5);    translate([1, 1, -2])rotate([-20,0,-45])pied();    translate([1, -1, -2])rotate([-20,0,-135])pied();    translate([-1, 1, -2])rotate([-20,0,45])pied();    translate([-1, -1, -2])rotate([-20,0,135])pied();}module poign(){;    rotate([90,0,0])cylinder(1, 0.2, 0.2, center = true);    rotate([90,0,90])translate([0.5, 0, 0.3])cylinder(0.5, 0.19, 0.19, center = true);    rotate([90,0,90])translate([-0.5, 0, 0.3])cylinder(0.5, 0.19, 0.19, center = true);    translate([0, 0.5, 0])sphere(d = 0.4);    translate([0, -0.5, 0])sphere(d = 0.4);};module poigne(){;    translate([-2.9,0,0])poign();    rotate([0, 180, 0])translate([-2.9,0,0])poign();};module rond1(){;    difference(){        sphere(d = 4);        translate([2.1,0,0])cube(4, center = true);        translate([-2.1,0,0])cube(4, center = true);    };};module rond2(){;    difference(){        sphere(d = 3);        translate([2.1,0,0])cube(3.9, center = true);        translate([-2.1,0,0])cube(3.9, center = true);    };};module lune(){;    difference(){        rond1();        translate([0,0.74,0])rond2();    };};module lunatique1(){;    rond1();    translate([0, 4,0])lune();    translate([0, -4,0])rotate([0,0,180])lune();}; module lunatique(){;    resize([0.4,1.2,0.8],1)lunatique1();};module marmiton(){;    poigne();    dif1();    translate([0,2.5,0])rotate([0,0,90])lunatique();};marmiton(); Malheureusement, la première impression a dû être arrêté au bout de 5-6 minutes car le support s'était décollé puis la deuxième impression s'est arrêté pour manque de filament mais je n'ai pas pu la reprendre car elle avait déjà été enlevé de l'imprimante me laissant avec ceci : Projets personnels de Nans Projets personnels de Nans      Lors de la séance 2, notre professeur nous as donnés 2 devoirs : une modélisation en 2 dimensions et une modélisation en 3 dimensions, sans plus de contraintes que celle de la taille : pour la modélisation 2d, une taille maximum de 30*30 cm et pour celle en 3d, une taille maximum de 15*15*15 cm. 3D : Le RER D      J'ai très rapidement eu beaucoup d'idées pour la modélisation 3d (moins pour celle en 2d), et comme j'aimais bien le logiciel OpenSCAD, j'ai passé du temps dessus, et j'ai alors eu l'idée de modéliser un RER (en fait une rame de type Z2N qui équipe notamment la ligne de RER D).      Voici d'abord le résultat de la modélisation :      Il m'a fallu environ 1h30 à 2h pour arriver à ce résultat, en comptant sur l'aide de Léonard et de Thibault notamment, ainsi que d'autres élèves d'autres groupes du CMI Physique, et en ayant déjà utilisé un peu le logiciel auparavant (voir notre partie sur la séance 2).      Dans la suite, je vais vous détailler un peu comment je suis arrivé à ce résultat, c'est-à-dire vous expliquer le code que j'ai utilisé.      J'ai utilisé le logiciel OpenSCAD, et voici le code utilisé : module rame(){ cube([4.5,14,5]); }; module cut(){ translate([-1,0,0])rotate([0,-10,-90])cube([3,6,10]); translate([-1,0.7,0])rotate([0,20,-90])cube([3,6,10]); }; module rame2(){ difference(){ rame(); cut(); translate([4,14,0])rotate([0,0,180])cut(); }; }; //rame2(); module porte(){ translate([-1,3,1])cube([6,1.5,3]); translate([-1,10,1])cube([6,1.5,3]); }; //porte(); module fenetresp(){ translate([-2,3.1,2.5])cube([8,1.3,0.9]); translate([-2,10.1,2.5])cube([8,1.3,0.9]); }; //fenetresp(); module fenetresr(){ for(i=[4.6:1:9]){ translate([-1,i,1.5])cube([8,0.94,3]); }; translate([-1,1.2,2.2])cube([8,0.5,1.2]); translate([-1,12.2,2.2])cube([8,0.5,1.2]); }; //fenetresr(); module fenetresc(){ rotate([-10,0,0])translate([0.2,-0.5,2])cube([4.1,0.6,2]); }; //fenetresc(); module arrondi(){ translate([-0.2,0,4.4])rotate([0,-45,0])cube([1,16,1]); translate([4,0,5.1])rotate([0,45,0])cube([1,16,1]); translate([-1,0,-0.2])rotate([0,45,0])cube([1,16,1]); translate([4.6,0,-1.1])rotate([0,-45,0])cube([1,16,1]); }; module diff1(){ difference(){ rame2(); porte(); fenetresr(); fenetresc(); translate([4.5,14,0])rotate([0,0,180])fenetresc(); arrondi(); }; }; //diff1(); module remplissage(){ difference(){ translate([0.1,2,1])cube([4.3,10,3.8]); fenetresp(); }; translate([0.2,2,1])cube([4.1,10,3.8]); translate([0,4.6,2.4])cube([4.5,5.1,1.2]); translate([0.1,1.2,2.2])cube([4.3,0.5,1.2]); translate([0.1,12.2,2.2])cube([4.3,0.5,1.2]); }; //remplissage(); module train(){ diff1(); remplissage(); }; //train();      On voit que c'est un code assez long, mais en partie parce qu'il est aéré, et aussi parce qu'il est composé de plusieurs modules, c'est à dire des genres de "fonctions" qu'on peut réutiliser plus tard. La première chose que j'ai fait c'est modéliser un cube que j'ai découpé sur les côtés afin d'obtenir la forme du train. Ensuite, j'ai fait une découpe à l'intérieur du train afin d'obtenir des trous pour les portes. Pour les fenêtres, j'ai aussi fait des découpes, mais en utilisant en plus la fonction "for", un boucle qui permet de faire une même opération plusieurs fois d'affilée. Pour donner un effet fenêtre, j'ai créé un bloc plus petit que le train à l'intérieur même du train pour creuser les fenêtres sur une toute petite distance. Ce bloc laissait un petit "surplus" en haut, mais que j'ai décidé de laisser car ça donnait l'impression d'un câble qui passait sur le surface du train, moins lisse et donc un peu plus "réaliste" même si ce n'est pas vraiment l'image réelle d'un train.      Petite précision : il y a plusieurs lignes avec "//" devant, ce sont des commentaires qui sont en fait des "lignes de construction". Pendant la modélisation, j'ai plusieurs fois modélisé les modules seuls, sans le reste du train, ou joué justement avec les modules que j'affichais et ceux que je n'affichais pas pour ajuster mes valeurs.      Enfin, on a lancé l'impression. J'ai eu pas mal de chance, puisque cela a fonctionné du premier coup, et j'ai eu mon train, dès le lendemain. Voici une photo du résultat final :      On voit que globalement, l'impression a assez bien réussi, il y avait quelques petits morceaux un peu en trop sur le haut mais qui ont facilement été limés, et il y a une très légère casse en bas, mais je ne suis pas sûr qu'elle ne vienne pas de moi. L'impression s'est faite avec une couche de protection autour du train, option qui avait été activée pour une impression précédente que que mon impression a donc récupéré. Ce n'était ni volontaire ni utile, mais ça a été fait, et même on s'en est rendus compte alors que l'impression était déjà trop avancée pour qu'on l'arrête et la relance sans la coque de protection.      Voici le fichier STL utilisé pour l'impression : RERD3.stl 2D : Malénia, Épée de Miquella      Pour la modélisation en 2D, j'ai eu beaucoup moins d'idées. Finalement, en voyant d'autres amis modéliser des personnages de mangas ou simplement de fiction, j'ai décidé de modéliser Malénia, un personne du jeu Elden Ring. Pour ce faire, j'ai choisi une image sur internet. Je voulais à la base faire le personnage de Godfrey, mais la seule image bien que j'ai trouvé, était trop sombre, et la vectorisation sur Inkscape n'était pas belle (trop de zones noires qui ne rendaient pas bien), j'ai donc finalement opté pour une image plus simple de la demi déesse Malénia, un des personnages les plus emblématiques du jeu.      Mais je n'étais pas totalement satisfait de l'image. Sur le site internet Dafont, j'ai donc installé la police d'écriture Angel Wish, une police d'écriture qui rappelle un style médiéval. J'ai alors écrit la légende "Malenia, Blade of Miquella" en dessous de l'image de mon personnage, ce qui est son nom et titre complet, dans le jeu. Voici une capture d'écran du fichier Inkscape que j'ai utilisé :      La trace rouge autour est le contour que l'imprimante laser devait découper pour séparer le dessin du reste de la planche de bois.      Est venu le temps de l'impression, et s'il a fallu repasser trois fois sur le contour pour découper la planche complétement (elle faisait 6 mm) l'impression s'est très bien passé, en une quinzaine de minutes au total.      Voici une photo du résultat : Projets personnels de Léonard Projets personnels de Léonard      Nous avons un total de 2 projets personels à produire en solitaire, l'un en 2D et l'autre en 3D. Lors des ces projet, je ne produirais pas un objet réellement utile mais plus à usage décoratif. Projet 2D :      Ce projet est réalisé avec le logiciel Inkscape puis gravé ou découpé avec une découpeuse laser. Dans un premier temps, on utilise le logiciel Inkscape pour obtenir un fichier 2D, personnellement j'ai simplement importé une image en noir et blanc. La couleur noir est utilisée pour la gravure. Projet 3D :      Ce projet est réalisé avec le logiciel OpenScad et Ideamaker pour modéliser l'objet afin de finalement l'envoyer à l'impression 3D dans le Fablab. Le projet ne comprend qu'une seule condition, la taille limité à 15*15*15 cm soit jsuqu'à 25 cm de long en diagonale. Mon idée de modélisation est une épée, plus exactement un glaive qui donnerait une impression d'être entouré de ronces. Je n'ai pas finis le projet en une seule fois et l'ai revu à plusieurs reprises pour finalement avoir ce résultat :      J'ai produit le code en solitaire mais j'ai profité de conseils vis à vis du design de l'épée en elle même, par exemple l'idée de la lune (à l'intérieur de l'étoile sur la poignée) vient de Nans et delle des embouts de la garde avec une précision différente entre les boules qui creusent et celles creusées provient de Léna.      Maintenant je vais détailler les lignes de codes qui m'ont permis de faire celà. J'ai définit une première précision sur 15 grâce à "$fn =15;", elle est modifiée dans les modules directement lorsque j'en ai le besoin. Je ne rentrerais pas toujours dans le détail de la raison des tailles ou positionnement des différents objets.      Tout d'abord mes 3 modules principaux sont les suivants :      Ils structurent les 3 parties principale du glaive et sont le résultat final affiché. Les 3 dernières lignes permettent de les afficher. Ces modules sont tous des différences d'une forme de base simple (ensemble avec rectangle, cylindre ou boule) qui est "taillée" à l'aide d'autres modules comprenant des ensembles de formes simples. Les modules ont des noms correspondants aux zones associées de l'épée. Lorsque l'objet "taillé" est un ensemble de formes et pas uniquement un rectangle (ou autre), cet ensemble est nommé avec le "e" à la fin du nom du module en moins pour avoir un code clair. Dans ce même but, j'ai créé différent groupe de modules, comme les "af", "marq" ou "spir" pour distinguer les fonctions de ces différent modules sans s'embrouiller. La raison pour laquelle la 4ème ligne du module "poigne" est en commentaire est que cette ligne modélise un design ressemble trop à certains signes mulsumans et bien que celà soit un bel ajout, je ne souhaite pas donner une vision autre que décorative à cet objet.      Ces 5 modules sont les ensembles qui vont permettre de changer la forme des modules principaux avec une différence. Le module "marq1", aurait pu être simplifié avec une fonction qui répète une action et modifie à chaque répétition les coordonnées des sphères mais pour pouvoir modifier plus rapidement et simplement les positions des objets, j'ai plutôt opté pour modifier une à une la position, dans le cas d'un ensemble plus grand (ici 10 formes passe encore) comme nous allons le voir, la méthode sera différente.      Ce groupe de module m'a permis de définir et créer les spirales présentent sur la garde et la poignée. "spir2" est le module qui définit les positions des 2 spirales sur la garde et "spir1" celle sur la poignée.      Le module "spir" définit la spirale de base qui est ensuite déplacée dans les autres modules. Pour ce faire, j'ai créer un ensemble de sphères qui se succcèdent avec un déplacement qui eest définit par une fonction cosinus et sinus pour la rotation des sphère autour de l'axe z et juste un facteur pour changer la hauteur de la sphère et donner cette impression de spirale. La fonction "for" permet cette répétition d'action, et la variable i de modifier les valeurs des positions. Voici le résultat :      Enfin, il a fallu lancer l'impression 3D pour ce faire, j'ai produit un fichier que l'imprimante pouvait lire grace au logiciel ideaMaker. Ce dernier permet d'ajouter les supports pour fabriquer l'objet et de le positionner pour minimiser les surplus de matériel.      L'impression aura pris 6 heures, en voici le résultat : Projets personnels de Thibault Projets personnels de Thibault Projet 3D : Rubik's Cube      Pour le projet en 3D, j'ai voulu essayer de faire un système capable de bouger. J'ai donc pensé a faire un Rubik's cube.      J'ai fais un premier essai mais il les pièces ne s'ajustaient pas donc je ne parlerai pas de cet essai. J'ai cependant pu récupérer la partie centrale du Rubik's cube. Partie qui permet au pièce de bouger les unes par rapport aux autres. $fn=30; module centre(){ union(){ difference(){ sphere(1.5); sphere(1.2); rotate([90,0,0]) cylinder(h=15,r=0.5,center=true); rotate([0,90,0]) cylinder(h=15,r=0.5,center=true); rotate([0,0,90]) cylinder(h=15,r=0.5,center=true); }; difference(){ union(){ sphere(1.1); rotate([90,0,0]) cylinder(h=4,r=0.4,center=true); rotate([0,90,0]) cylinder(h=4,r=0.4,center=true); rotate([0,0,90]) cylinder(h=4,r=0.4,center=true); }; sphere(0.9); cube(1.6,center=true); }; sphere(0.8); }; }; difference(){ //permet juste de voir le fonctionnement interne, a retiré lors de l'impression centre(); cube(10); };      Lors du deuxième essai je suis partie d'une base d'un cube formé d'autre petits cube grâce à une fonction for(). Cube que j'ai ensuite creusé avec une sphère pour pouvoir par la suite y rajouter la partie centrale montrer au dessus et les différentes formes pour que les pièces s'emboite. Grand cube formés de petit cube et creusé par une sphère. $fn=20; module extrude_cote(){ difference(){ cube([1.9,4.5,2.7],center=true); translate([0,1.8,0]) cube(1.7,center=true); translate([0,-1.7,0]) cube(1.9,center=true); }; }; //extrude_cote(); module cube_plein(){ //Toutes les pieces for(i=[-1.8:1.8:1.8], j=[-1.8:1.8:1.8], k=[-1.8:1.8:1.8]) { translate([i,j,k]) intersection(){ cube(1.7, center=true); sphere(1.3); }; }; }; module total(){ difference(){ cube_plein(); union(){ extrude_cote(); //creusage des pieces de coté rotate([90,0,0]) extrude_cote(); rotate([0,90,0]) extrude_cote(); rotate([0,0,90]) extrude_cote(); rotate([90,0,90]) extrude_cote(); rotate([90,90,0]) extrude_cote(); sphere(2.45); //Zone de la piece centrale }; }; }; difference(){ //permet juste de voir l'intérieur total(); cube(10); };      Dans un Rubik's cube il y a trois type de pièces mobiles; les faces qui seront directement accrochées à la parties centrales, les coins et les cotés. Dans le code au dessus les pièces de coté ont été creusées sur les bords en plus. Cela permettra a la partie inférieur des faces de s'emboiter.      Pour les coins, on obtient ceci : module coin(){ q=1.8; translate([q,q,q]) cube(1.29,center=true); translate([q,q,-q]) cube(1.29,center=true); translate([q,-q,q]) cube(1.29,center=true); translate([q,-q,-q]) cube(1.29,center=true); translate([-q,q,q]) cube(1.29,center=true); translate([-q,q,-q]) cube(1.29,center=true); translate([-q,-q,q]) cube(1.29,center=true); translate([-q,-q,-q]) cube(1.29,center=true); x= 1.21/sqrt(3); y = 1.21/sqrt(3); z = 1.21/sqrt(3); // point coordinates of end of cylinder length = norm([x,y,z]); // radial distance b = acos(z/length); // inclination angle c = atan2(y,x); // azimuthal angle h=5; r=0.2; t=0.5; difference(){ union(){ rotate([180, b, c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([180, b, -c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b+180, c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b+180, -c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, -c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, c+180]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, -c+180]) cylinder(3, r=0.5/sqrt(3),$fn=3); }; sphere(1.6); }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([180, b, c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([180, b, -c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b+180, -c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b+180, c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, -c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, c+180]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, -c+180]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; }; q=1.8; coin();      Pour les faces nous avons : module face(){ w=0.47; k=0.65; difference(){ intersection(){ union(){ hull(){ translate([k,k,0]) cylinder(4.7,w,w,center=true); translate([-k,k,0]) cylinder(4.7,w,w,center=true); translate([k,-k,0]) cylinder(4.7,w,w,center=true); translate([-k,-k,0])cylinder(4.7,w,w,center=true); }; rotate([90,0,0]) hull(){ translate([k,k,0]) cylinder(4.7,w,w,center=true); translate([-k,k,0]) cylinder(4.7,w,w,center=true); translate([k,-k,0]) cylinder(4.7,w,w,center=true); translate([-k,-k,0])cylinder(4.7,w,w,center=true); }; rotate([0,90,0]) hull(){ translate([k,k,0]) cylinder(4.7,w,w,center=true); translate([-k,k,0]) cylinder(4.7,w,w,center=true); translate([k,-k,0]) cylinder(4.7,w,w,center=true); translate([-k,-k,0])cylinder(4.7,w,w,center=true); }; }; sphere(2.4); }; sphere(2.25); }; difference(){ union(){ cube([5,1.7,1.7],center=true); cube([1.7,5,1.7],center=true); cube([1.7,1.7,5],center=true); }; sphere(2.25); }; }; face(); Et enfin les cotés : module cote(){ difference(){ union(){ cube([0.9,3.7,3.7],center=true); cube([3.7,0.9,3.7],center=true); cube([3.7,3.7,0.9],center=true); }; union(){ cube([1,1,3.8],center=true); cube([3.8,1,1],center=true); cube([1,3.8,1],center=true); sphere(1.6); }; }; //rotate([45,0,0]) cube([3,1,3],center=true); intersection(){ difference(){ union(){ rotate([45,0,0]) cube([2.1,0.9,5],center=true); //rectangles initiaux rotate([-45,0,0]) cube([2.1,0.9,5],center=true); rotate([0,45,0]) cube([0.9,2.1,5],center=true); rotate([0,-45,0]) cube([0.9,2.1,5],center=true); rotate([0,0,45]) cube([5,0.9,2.1],center=true); rotate([0,0,-45]) cube([5,0.9,2.1],center=true); }; union(){ rotate([45,0,0]) cube([1.7,1.3,4.1],center=true); rotate([-45,0,0]) cube([1.7,1.3,4.1],center=true); rotate([0,45,0]) cube([1.3,1.7,4.1],center=true); rotate([0,-45,0]) cube([1.3,1.7,4.1],center=true); rotate([0,0,45]) cube([4.1,1.3,1.7],center=true); rotate([0,0,-45]) cube([4.1,1.3,1.7],center=true); }; union(){ rotate([45,0,0]) cube([1.9,1.2,3.8],center=true); rotate([-45,0,0]) cube([1.9,1.2,3.8],center=true); rotate([0,45,0]) cube([1.2,1.9,3.8],center=true); rotate([0,-45,0]) cube([1.2,1.9,3.8],center=true); rotate([0,0,45]) cube([3.8,1.2,1.9],center=true); rotate([0,0,-45]) cube([3.8,1.2,1.9],center=true); }; sphere(2.2); rotate([-45,0,0]) cube([4.2,0.1,3.1],center=true); //séparation des parties rotate([45,0,0]) cube([4.2,0.1,3.1],center=true); rotate([0,0,45]) cube([3.1,0.1,4.2],center=true); rotate([0,0,-45]) cube([3.1,0.1,4.2],center=true); rotate([0,45,0]) cube([0.1,4.2,3.1],center=true); rotate([0,-45,0]) cube([0.1,4.2,3.1],center=true); }; sphere(2.4); }; }; cote();      Ensuite il a fallu découper une pièce appartenant à la pièce centrale pour pouvoir remonter le Rubik's cube après l'impression. module centre(){ //piece de centre for(i=[0:3]){ translate([5,i,0]) intersection() { union(){ translate([0,.0]) difference(){ //sphere creusée et troué sphere(1.5); sphere(1.2); rotate([90,0,0]) cylinder(h=16,r=0.5,center=true); rotate([0,90,0]) cylinder(h=16,r=0.5,center=true); rotate([0,0,90]) cylinder(h=16,r=0.5,center=true); rotate([90,0,0])translate([0.95,0.95,0]) cylinder(0.5,0.1,0.1,center=true); rotate([90,0,0])translate([-0.95,0.95,0]) cylinder(0.5,0.1,0.1,center=true); }; }; translate([-8,-10,0]) cube(10); }; translate([5.95,-0.95+i,0]) cylinder(0.5,0.08,0.08,center=true); translate([4.05,-0.95+i,0]) cylinder(0.5,0.08,0.08,center=true); }; difference(){ //Axe de rotation des faces union(){ sphere(1.1); rotate([90,0,0]) cylinder(h=5,r=0.4,center=true); rotate([0,90,0]) cylinder(h=5,r=0.4,center=true); rotate([0,0,90]) cylinder(h=5,r=0.4,center=true); }; sphere(0.9); cube(1.6,center=true); }; sphere(0.8); //sphere pour callé les axes }; centre();      Ce n'est pas très visible mais le but de chaque morceaux est que toute les pièces se maintiennent les une les autres et ainsi que l'ont puisse les bouger entre elles alors qu'elles ne sont pas collées.      Le code entier du Rubik's cube est le suivant : module centre(){ //piece de centre for(i=[0:3]){ translate([5,i,0]) intersection() { union(){ translate([0,.0]) difference(){ //sphere creusée et troué sphere(1.5); sphere(1.2); rotate([90,0,0]) cylinder(h=16,r=0.5,center=true); rotate([0,90,0]) cylinder(h=16,r=0.5,center=true); rotate([0,0,90]) cylinder(h=16,r=0.5,center=true); rotate([90,0,0])translate([0.95,0.95,0]) cylinder(0.5,0.1,0.1,center=true); rotate([90,0,0])translate([-0.95,0.95,0]) cylinder(0.5,0.1,0.1,center=true); }; }; translate([-8,-10,0]) cube(10); }; translate([5.95,-0.95+i,0]) cylinder(0.5,0.08,0.08,center=true); translate([4.05,-0.95+i,0]) cylinder(0.5,0.08,0.08,center=true); }; difference(){ //Axe de rotation des faces union(){ sphere(1.1); rotate([90,0,0]) cylinder(h=5,r=0.4,center=true); rotate([0,90,0]) cylinder(h=5,r=0.4,center=true); rotate([0,0,90]) cylinder(h=5,r=0.4,center=true); }; sphere(0.9); cube(1.6,center=true); }; sphere(0.8); //sphere pour callé les axes }; // cube(1.75,center=true); //sphere(0.8); //sphere pour callé les axes module cube_plein(){ //Toutes les pieces for(i=[-1.8:1.8:1.8], j=[-1.8:1.8:1.8], k=[-1.8:1.8:1.8]) { translate([i,j,k]) intersection(){ cube(1.7, center=true); sphere(1.3); }; }; }; module total(){ difference(){ cube_plein(); union(){ extrude_cote(); //creusage des pieces de coté rotate([90,0,0]) extrude_cote(); rotate([0,90,0]) extrude_cote(); rotate([0,0,90]) extrude_cote(); rotate([90,0,90]) extrude_cote(); rotate([90,90,0]) extrude_cote(); sphere(2.45); //Zone de la piece centrale }; }; }; module coin(){ q=1.8; //translate([q,q,q]) cube(1.29,center=true); translate([q,q,-q]) cube(1.29,center=true); translate([q,-q,q]) cube(1.29,center=true); translate([q,-q,-q]) cube(1.29,center=true); translate([-q,q,q]) cube(1.29,center=true); translate([-q,q,-q]) cube(1.29,center=true); translate([-q,-q,q]) cube(1.29,center=true); translate([-q,-q,-q]) cube(1.29,center=true); x= 1.21/sqrt(3); y = 1.21/sqrt(3); z = 1.21/sqrt(3); // point coordinates of end of cylinder length = norm([x,y,z]); // radial distance b = acos(z/length); // inclination angle c = atan2(y,x); // azimuthal angle h=5; r=0.2; t=0.5; difference(){ union(){ rotate([180, b, c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([180, b, -c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b+180, c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b+180, -c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, -c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, c]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, c+180]) cylinder(3, r=0.5/sqrt(3),$fn=3); rotate([0, -b, -c+180]) cylinder(3, r=0.5/sqrt(3),$fn=3); }; sphere(1.6); }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([180, b, c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([180, b, -c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b+180, -c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b+180, c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, -c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, c]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, c+180]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; intersection(){ difference(){ sphere(1.8); sphere(1.6); }; rotate([0, -b, -c+180]) hull(){ translate([t,0,0]) cylinder(h,r,r); rotate([0,0,120]) translate([t,0,0]) cylinder(h,r,r); rotate([0,0,-120]) translate([t,0,0]) cylinder(h,r,r); }; }; }; q=1.8; //coin(); module extrude_cote(){ difference(){ cube([1.9,4.5,2.7],center=true); translate([0,1.8,0]) cube(1.7,center=true); translate([0,-1.7,0]) cube(1.9,center=true); }; }; /*extrude_cote(); rotate([90,0,0]) extrude_cote(); rotate([0,90,0]) extrude_cote(); rotate([0,0,90]) extrude_cote(); rotate([90,0,90]) extrude_cote(); rotate([90,90,0]) extrude_cote();*/ difference(){ union() { centre(); total(); cote(); face(); coin(); }; //translate([0.9,0.9,0.9]) cube(10); }; module face(){ w=0.47; k=0.65; difference(){ intersection(){ union(){ hull(){ translate([k,k,0]) cylinder(4.7,w,w,center=true); translate([-k,k,0]) cylinder(4.7,w,w,center=true); translate([k,-k,0]) cylinder(4.7,w,w,center=true); translate([-k,-k,0])cylinder(4.7,w,w,center=true); }; rotate([90,0,0]) hull(){ translate([k,k,0]) cylinder(4.7,w,w,center=true); translate([-k,k,0]) cylinder(4.7,w,w,center=true); translate([k,-k,0]) cylinder(4.7,w,w,center=true); translate([-k,-k,0])cylinder(4.7,w,w,center=true); }; rotate([0,90,0]) hull(){ translate([k,k,0]) cylinder(4.7,w,w,center=true); translate([-k,k,0]) cylinder(4.7,w,w,center=true); translate([k,-k,0]) cylinder(4.7,w,w,center=true); translate([-k,-k,0])cylinder(4.7,w,w,center=true); }; }; sphere(2.4); }; sphere(2.25); }; difference(){ union(){ cube([5,1.7,1.7],center=true); cube([1.7,5,1.7],center=true); cube([1.7,1.7,5],center=true); }; sphere(2.25); }; }; //face(); module cote(){ difference(){ union(){ cube([0.9,3.7,3.7],center=true); cube([3.7,0.9,3.7],center=true); cube([3.7,3.7,0.9],center=true); }; union(){ cube([1,1,3.8],center=true); cube([3.8,1,1],center=true); cube([1,3.8,1],center=true); sphere(1.6); }; }; //rotate([45,0,0]) cube([3,1,3],center=true); intersection(){ difference(){ union(){ rotate([45,0,0]) cube([2.1,0.9,5],center=true); //rectangles initiaux rotate([-45,0,0]) cube([2.1,0.9,5],center=true); rotate([0,45,0]) cube([0.9,2.1,5],center=true); rotate([0,-45,0]) cube([0.9,2.1,5],center=true); rotate([0,0,45]) cube([5,0.9,2.1],center=true); rotate([0,0,-45]) cube([5,0.9,2.1],center=true); }; union(){ rotate([45,0,0]) cube([1.7,1.3,4.1],center=true); rotate([-45,0,0]) cube([1.7,1.3,4.1],center=true); rotate([0,45,0]) cube([1.3,1.7,4.1],center=true); rotate([0,-45,0]) cube([1.3,1.7,4.1],center=true); rotate([0,0,45]) cube([4.1,1.3,1.7],center=true); rotate([0,0,-45]) cube([4.1,1.3,1.7],center=true); }; union(){ rotate([45,0,0]) cube([1.9,1.2,3.8],center=true); rotate([-45,0,0]) cube([1.9,1.2,3.8],center=true); rotate([0,45,0]) cube([1.2,1.9,3.8],center=true); rotate([0,-45,0]) cube([1.2,1.9,3.8],center=true); rotate([0,0,45]) cube([3.8,1.2,1.9],center=true); rotate([0,0,-45]) cube([3.8,1.2,1.9],center=true); }; sphere(2.2); rotate([-45,0,0]) cube([4.2,0.1,3.1],center=true); //séparation des parties rotate([45,0,0]) cube([4.2,0.1,3.1],center=true); rotate([0,0,45]) cube([3.1,0.1,4.2],center=true); rotate([0,0,-45]) cube([3.1,0.1,4.2],center=true); rotate([0,45,0]) cube([0.1,4.2,3.1],center=true); rotate([0,-45,0]) cube([0.1,4.2,3.1],center=true); }; sphere(2.4); }; }; x= 1.21/sqrt(3); y = 1.21/sqrt(3); z = 1.21/sqrt(3); // point coordinates of end of cylinder length = norm([x,y,z]); // radial distance b = acos(z/length); // inclination angle c = atan2(y,x); // azimuthal angle h=5; r=0.2; t=0.5;      Et voici le fichier STL : Rubik's cube 2_test4.stl      Une première impression a échoué surement à cause d'une courroie qui a sauté un cran (problème totalement aléatoire). Mais à la seconde impression toutes les pièces se sont imprimées correctement. Ici on voit, de gauche à droite, la boule au centre du rubis cube, une pièce du centre, un coin du cube , une face et un coté. Une fois monter le cube ressemble à ceci : Malheureusement le jeu entre les pièces est beaucoup trop grand et certaines parties coulissent mal entre elles. Son rendu en image parait correcte mais il est impossible de l'utiliser. Je vois conseille de ne pas l'imprimer et peut être que je réessayerai une prochaine fois de le rendre vraiment fonctionnel. Projet 2D : porte clé      Pour le projet 2D j'ai pensé à faire des portes clés.      Il a donc fallu choisir quels dessins graver sur le bois. Mon choix s'est porté sur les versions Chibi de personnages tirés du manwha Solo Leveling .      Je suis donc parti de l'image suivante.      Il a donc ensuite fallut que je choisisse les personnages qui me plaisait le plus. J'en ai alors choisit quatre:        Igris                                              Kaisel                                             Beru                                                Acier      Ensuite, grâce à l'outil vectorisation de Inkscape, je les ai mis en noir et blanc et j'ai tracé les contours ainsi que les trous pour mettre les boucles porte les accrocher sur un trousseau de clé. Lien du fichier :    Porte clé Solo Leveling.svg Groupe B2 Nom des participants : Axelle Mano Vangu Nlandu Vangu Clémence Pereira Ibtyssam Seddiki Groupe : CMI Physique B Journal de bord : Séance 1 - 29/01/2024 Pour cette première séance de l’UE LU1SXPFL, nous avons commencé par une présentation de l’origine et du fonctionnement du Fablab mais aussi de l’objectif final de ce cours. Nous devrons donc documenter notre avancée sur le projet final à rendre et présenter en fin de semestre. Les valeurs fondamentales du Fablab sont le partage, l’ouverture et l’interdisciplinarité. Nous avons visionné un cours de la fabacademy enseigné par Neil Gershenfeld, créateur du créateur du Fablab et du cours How to make (almost) anything. Nous avons également rencontré l’équipe des Fabmanagers. Ensuite, nous avons visité le FabLab en commençant par la salle des imprimantes 3D. Nous avons pu y observer différents objets qui ont été imprimés avec ces imprimantes et tout le matériel utilisé. Salle d’impression 3D Imprimante 3D Après la salle d’impression 3D, nous avons visité la salle de découpe, dans laquelle nous avons pu découvrir des machines qui utilisaient différentes méthodes de découpe précises :  laser, jet d’eau, fil chaud, etc. Salle de découpe Découpeuse à jet d'eau Puis nous nous sommes rendus dans la salle d’électronique, où se trouvent les appareils à soudure et le matériel de protection (gants, masques, casques). Salle d'électronique Nous avons visité la salle de préproduction dans laquelle nous avons  découvert la fraiseuse. Puis nous avons eu accès à la salle de menuiserie dans laquelle nous avons découvert la fraiseuse à bois. Troisièmement et dernièrement, nous avons formé nos groupes, Vincent Dupuis nous a présenté comment documenter notre Wiki et donc nous avons commencé notre documentation sur la première séance du projet FabLab. Séance 2 - 05/02/2024 Lors de cette seconde séance nous avons été initié au design 2D, 3D, à l’impression 3D et à la découpe laser. Premièrement, nous avons découvert Inkscape, un logiciel qui permet de dessiner les modèles 2D que nous voulons obtenir à la découpeuse laser. Nous avons découvert les fonctionnalités du logiciel, par exemple les différentes couleurs à utiliser en fonction de si on veut graver ou découper le matériau, et puis nous les avons explorées et testées en dessinant un modèle précis indiqué par monsieur Dupuis composé d’un rectangle et de 4 cercles situés à une distance précise des cotés du rectangle. Il a donc fallut calculer et régler les positions de chaque objet afin d’obtenir ce dessin : Ensuite, nous avons découvert OpenSCAD, un logiciel de modélisation pour les imprimantes 3D. Nous avons aussi pris en main le logiciel en explorant un maximum de ses fonctionnalités, notamment le codage. En effet, il faut utiliser un langage de code spécifique pour exprimé ce que nous souhaitons modéliser. Comme pour Inskape, notre professeur nous à donné un modèle à reproduire afin que l’on se familiarise avec le logiciel. Nous avons pu modéliser un cube avec des des trous sur chacune de ses faces. Aussi, nous avons découvert la « CheatSheet » d’OpenScad, page web sur laquelle est regroupé toutes les lignes de code et le langage à écrire pour modéliser. Puis, nous avons découvert FreeCAD, un logiciel qui permet d’utiliser la modélisation volumique, la modélisation fonctionnelle, et la modélisation surfacique, trois types de modélisation entièrement paramétrables. Nous avons également pris en main le logiciel et explorer en modélisant un cube, puis en dessinant des cercles sur ses faces et en les extrudant, on obtenait des cylindres à l’intérieur du cube. Il suffisait de soustraire les cylindres au cube pour avoir un cube troué similaire à celui réalisé sur OpenScad. Cependant, nous avons pu voir que ce logiciel n’était pas le meilleur pour la modélisation 3D car pas très intuitif à l’utilisation. Enfin, en fin de séance, une Fabmanager nous a monter en détails comment faire une impression 3D en nous montrant comment utiliser les imprimantes, et aussi comment faire de la gravure et de la découpe laser. Nous avons ainsi été informés de toutes les étapes à réaliser avant de laisser une imprimante 3D ou une découpeuse laser, comme régler les paramètres de structure interne ou la présence de support pour une impression 3D et le réglage de la focale pour la découpeuse laser qui est automatique sur certaines machines. Nous nous avons également été avertis des précautions à prendre afin d’avoir une utilisation responsable des machines mises à notre disposition mais aussi pour notre sécurité. Séance 3 - 12/02/2024 Cette troisième séance a été une initiation au prototypage électronique avec l’aide d’arduino. L’Arduino UNO est une plateforme électronique de prototypage rapide qui offre la possibilité de connecter facilement des capteurs en tant qu’entrées et des actionneurs en tant que sorties. Elle intègre divers composants électroniques, dont un élément central, un microcontrôleur capable de stocker et d’exécuter des programmes informatiques. L’arduino permet des tests rapides de prototypes d’appareils électroniques. La première étape est de créer un programme dans un environnement de développement (Integrated Development Environment), c’est-à-dire une application sur laquelle on code. L’ide Arduino permet de créer du code puis de compiler ce code en un fichier compréhensible par le microcontrôleur (langage binaire) en le téléversant. Le language utilisé est le C. Il existe trois parties essentielles à un programme : commence par include → permet d’inclure du code dans le code/réutiliser du code déjà existant, les fonctions associées au capteur sont empaquetées dans une bibliothèque et pour parler avec le capteur il faut inclure du code externe fonction setup → permet d’initialiser le code et il sera exécuté 1 seule fois fonction loop → exécute une action en boucle Blink.ino sur arduino est équivalent au Hello world utilisé dans les autres langages informatiques tels que Python pour démontrer leur fonctionnement de manière simple et rapide. Après cette introduction théorique sur le fonctionnement d’Arduino, nous nous sommes mis en binômes afin de faire une première prise en mains d’un capteur. Le premier exercice consistait à brancher une LED rouge et une résistance en série et de télécharger un programme disponible dans la base de donnée de l’ide Arduino pour faire clignoter la LED (allumée 1 seconde, éteinte 1 seconde). En connectant la Breadboard, l’Arduino Uno et l’ordinateur nous avons téléversé le programme afin qu’il soit exécuté : Le programme utilisé était un des exemples dans les programmes basiquesde l’IDE et s’appelait « Blink » : void setup() { pinMode(LED_BUILTIN, SORTIE) ; } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000);                    digitalWrite(LED_BUILTIN, LOW);  delay(1000);                    } Puis nous avons réalisé un deuxième circuit comportant un capteur d'humidité et de température. Pour obtenir les informations voulues du capteur, nous avons téléchargé une bibliothèque disponible du site du fabriquant et nous l'avons  inclue dans l'IDE : A la fin de la séance, nous avons pu découvrir tous les capteurs disponibles pour notre projet final et réfléchir à ce que l'on voudrait faire. Séance 4 - 26/02/2024 Lors de cette quatrième séance, nous avons commencé notre projet de groupe. L’objectif est concevoir un système usant d’au moins un détecteur/ capteur, d’effectuer une expérience physique avec et de réaliser une série de mesures. Nous avons décidé de concevoir un détecteur d’intensité sonore. Le principe est de mesurer l’intensité et le volume sonore selon l’endroit et les matériaux présents dans ces endroits, mesurer l’atténuation de chaque matériau (verre, bois, plexiglas) et vérifier la loi physique sur le niveau d’intensité sonore : L = 10log(I/Io). Pour nos premiers tests, nous avons eu besoin d’un capteur de son et d’une carte Arduino Uno. Tout d’abord, nous avons tester le détecteur de son, soit le Grove - Sound Sensor : Ainsi, nous avons dû calibrer le détecteur pour pouvoir tester ses fonctionnalités. Nous avons utilisé un code qui permettait de prendre des mesures du niveau sonore, nous avons pris ce code sur : https://sensorkit.arduino.cc/sensorkit/module/lessons/lesson/06-the-sound-sensor int sound_sensor = A2 ; //assigner à la broche A2 Configuration du vide () { Série.début(9600) ; //begin Communication série } Boucle du vide () { int soundValue = 0 ; //create pour stocker de nombreuses lectures différentes for (int i = 0 ; i < 32 ; i++) //crée une boucle for à lire { soundValue += analogRead(sound_sensor) ; } //lire le capteur de son soundValue >>= 5 ; Opération //bitshift Série.println(valeurduson) ; //affiche la valeur du capteur de son Si une valeur supérieure à 500 est enregistrée, nous imprimerons ce qui suit Ceci est fait pour que nous puissions voir clairement si le seuil est atteint if (soundValue > 500) {   Série.println( » || »);   Série.println( » |||||| »);   Série.println( » ||||||||| »);   Série.println( » ||||||||||||| »);   Série.println( » ||||||||||||||||| »);   Série.println( » ||||||||||||| »);   Série.println( » ||||||||| »);   Série.println( » |||||| »);   Série.println( » || »); } delay(50); //a shorter delay between readings } Observation d’un graphe de valeurs (unités des axes encore pas très claires pour nous : peut-être des Volts) Cela nous confirme que notre capteur focntionne ! La prochaine étape est de réfléchir à comment modifier le code pour avoir des résultats en dB. Objectifs pour les prochaines séances : Il faut prendre un certain nombre de mesures (échantillonnage) à intervalle régulier (idée du forum : arduino decibel meter) OU Faire un échantillonnage nous-même : on prend une mesure en envoyant une certaine valeur en dB ensuite on observe le signal en Volts que l’on reçoit, on trace une courbe sur Regressi pour avoir la fonction correspondante et donc pouvoir par la suite passer de Volt à dB. C’est une bonne piste pour la prise de mesure. Puis pour tester l’atténuation on prendra différents matériaux et on voit si l’atténuation est linéaire/continue/autre et fonction des dB de la source. Il est nécessaire de connaître les caractéristiques des matériaux que l’on utilise. Pour la source sonore, on prendra un bruit blanc (par exemple) qu’on trouve sur Youtube dont on connaît le niveau sonore, on mesurera son volume sonore avec Phyphox (sur un autre téléphone) et on le laissera le son en continu lors de notre expérience afin d’avoir un résultat cohérent. Pour utiliser Phyphox on procèdera à un étalonnage grâce à un sonomètre et une source afin de connaître la valeur précise du son pour avoir une valeur de référence. On relèvera ensuite les sons selon les matériaux en comparant avec le son initial et on calculera l’atténuation sonore. On répète la même expérience pour tous les matériaux.  Pour vérifier nos résultats, on regardera sur internet les atténuations des différents matériaux afin d’avoir un ordre de grandeur pour nos mesures. Aussi, il faut qu’on choisisse des matériaux avec des valeurs d’atténuation assez différentes. Enfin, il faut comparer nos mesures aux mesures connues et discuter de la fiabilité et de la précision de notre dispositif. Idées de matériaux : Verre BOIS Chlorure de polyvinyle LIÈGE Séance 5 - 04/03/2024 Objectifs du jour : étalonner nos téléphones (Phyphox) prendre une première série de mesure faire une courbe sur Regressi : corrélation Volts et dB Première étape : Étalonnage Nous avons étalonné Phyphox sur nos téléphones à l’aide d’un « bruit rose ». Nous avons ainsi mesuré 70 dB. Expérience : Nous nous sommes installés dans la salle de réunion du FabLab car assez insonorisée et silencieuse. La source de son (téléphone de Clémence) était placée à 1m de nos téléphones, pour préserver l’étalonnage, nous avons enregistré le décalage (113 dB pour le téléphone utilisé lors des prises de mesures par la suite). Deuxième étape : Prise de mesure Une fois Phyphox étalonné, nous avons pris une série de valeurs à l’aide du capteur « Grove - Sound Sensor », cependant, les valeurs obtenues n’étaient malheureusement pas du tout cohérentes. En effet, en parallèle de la prise de mesure, nous avons ouvert Regressi afin de pouvoir tracer la courbe et donc pouvoir faire une corrélation entre Volts et dB. On s’attendait à ce que la corrélation soit à peu près linéaire, ou du moins cohérente, cependant ça n’a pas fonctionné. Résultats : Troisième étape : changement de capteur Nous avons ensuite changé de capteur en prenant le capteur d’intensité sonore. Par manque de temps, nous n’avons fait que très peu de mesures. Programme utilisé pour le capteur « Grove - Loudness Sensor » : int val ; Configuration du vide () { Série.début(9600); } Boucle du vide () { analogRead(0); retard(10); val = analogRead(0); Série.println(val); retard(200); } Source : https://seeeddoc.github.io/Grove-Loudness_Sensor/ Mais les premières valeurs obtenues restaient quand même plus cohérentes, nous obtenons une droite linéaire. Objectifs pour la prochaine séance : Pour la prochaine séance nous comptons donc faire le plus de mesures possibles avec ce capteur. L’objectif est aussi de faire varier la résistance qui est lié à la sensibilité du capteur. Ainsi on prendra les valeurs les plus cohérentes. Il nous reste un dernier capteur à tester le grove Analog Microphone qui se rapproche plus du microphone présent sur nos téléphones. En testant ce dernier capteur nous pourrons ainsi choisir avec lequel parmi les 3 nous obtenons les valeurs les plus cohérentes, pour avoir la meilleure fonction reliant Volts et dB. Nous essaierons également de prendre des mesures avec différents matériaux situés entre la source et le capteur afin de pouvoir calculer un rapport qui représenterait l'atténuation du matériau et voir si on obtient des valeurs cohérentes. Grove- Analog Microphone : Nous essaierons également de prendre des mesures avec différents matériaux situés entre la source et le capteur afin de pouvoir calculer un rapport qui représenterait l’atténuation du matériau et voir si on obtient des valeurs cohérentes. Séance 6 - 11/03/2024 Après plusieurs essais, nous nous sommes rendues compte que phyphox posait un problème et avons donc utilisé une autre application de mesure sonore : sound meter. Nous avons testé un microphone analogique : Avec le code suivant : /*Entrée analogique, sortie analogique, sortie série Lit une broche d’entrée analogique, mappe le résultat sur une plage comprise entre 0 et 255 et utilisele résultat pour définir la modulation de largeur d’impulsion (PWM) d’une broche de sortie. Imprime également les résultats sur le moniteur série.*/ Ces constantes ne changeront pas. Ils sont utilisés pour donner des noms aux broches utilisées :const int analogInPin = A0 ; Broche d’entrée analogique à laquelle le potentiomètre est attaché constint analogOutPin = 9 ; Broche de sortie analogique à laquelle la LED est fixée int sensorValue = 0 ; valeur lue à partir du potint outputValue = 0 ; sortie de valeur vers le PWM (sortie analogique) void setup() { Serial.begin(9600) ; // initialise les communications série à 9600 bps} void loop() {sensorValue = analogRead(analogInPin) ; // lit la valeurde l’entrée analogique outputValue = map(sensorValue, 0, 1023, 0, 255) ; // la mappe à la plage de la sortieanalogique analogWrite(analogOutPin, outputValue) ; // change la valeur de la sortie analogique Serial.println(outputValue) ; imprimer les résultats sur le moniteur série attendre 2 millisecondes avant la boucle suivante pour que le convertisseur // analogique-numériquese stabilise après la dernière lecture :delay(2) ;} Trouvé sur ce site : https://wiki.seeedstudio.com/Grove-Analog-Microphone/ décibels bits (0 à 1023) 68 327 - 300 64 312 - 315 60 300 - 301 55 294 - 295 Séance 7 - 18/03/2024 Pour cette 7ème séance, nous avons commencé par essayer de modifier le code de notre capteur afin d’obtenir les valeurs directement en décibels à partir du rapport que nous avions trouvé la semaine précédente. Cependant, nous nous sommes rendus compte que cette conversion n’était pas forcément utile car notre expérience consiste à calculer un rapport entre le niveau d’intensité sonore de la source et celui perçu par le capteur après les matériaux. Ainsi, nous allons garder le code fourni par le constructeur du capteur. Ensuite, nous avons voulu commencer à tester l’atténuation de certains matériaux et définissant des conditions expérimentales spécifiques qui nous permettraient d’avoir une meilleure précision et de pouvoir comparer les résultats entre eux. Nous avons donc scotché le capteur à plat sur une table, puis nous avons tracé deux traits à 20 et 40 centimètres du capteur. Au niveau du premier trait nous avons placé le matériau et sur le deuxième, la source (téléphone). Le bruit utilisé était une vidéo Youtube avec un bruit de 1 kHz à volume constant. Nous mesurions d’abord le niveau d’intensité sonore perçu par le capteur sans le matériau au milieu, puis en ajoutant le matériau afin de mesurer la différence. Cependant, nous avons rencontré des difficultés car les valeurs mesurées ne changeaient pas de manière significative et que les variations étaient plutôt aléatoires. Nous en sommes arrivés à trois conclusions : la source n’est pas assez puissante et une grande partie du son est perdue dans l’environnement le capteur ne peut donc mesurer les différences de manière exacte le capteur est directionnel en le mettant à plat, la meilleure manière de mesurer les variations de pressions est de mettre la source au dessus pour comparer les niveaux d’intensité sonores, nous ne devons pas prendre les valeurs affichées, mais comparer les amplitudes Pour palier aux deux premiers problèmes, nous avons créé un dispositif inspiré d’un appareil utilisé en TP que nous avons trouvé sur le site de Jeulin (https://jeulin.com/jeulin_fr/302328.html) : L’objectif est donc d’utiliser un tube qui forcerait la propagation du son dans une direction et nous permettrait ainsi moins de pertes dans l’environnement mais aussi de l’orienter pour qu’il soit perçu correctement par le capteur. Nous avons trouvé un tube en carton don’t nous avons bouché une extrémité avec un cercle de polystyrène d’environ 3 centimètres d’épaisseur et nous avons percé un trou pour faire passer le capteur. De cette manière, le bout du tube est isolé et permet une meilleure mesure, de plus, le capteur est orienté vers l’autre extrémité du tube. Une autre amélioration que nous avons apportée au dispositif est que nous avons changé de source. Auparavant, nous utilisions notre téléphone qui n’est pas très puissant et le bruit venait de Youtube, nous ne pouvions pas vraiment être certains que le volume était parfaitement constant ni même que la fréquence était exacte. Notre professeur nous a fourni un haut parleur circulaire qui a un diamètre proche de celui du tube. Il nous a montré comment souder des fils au haut parleur afin de le connecter à un générateur de basses fréquences qui nous permettrait à la fois de choisir l’amplitude et la fréquence de l’onde. Pendant le temps qui nous restait, nous avons effectué des mesures sans matériau à différentes fréquences et en ne prenant en compte que l’amplitude de l’onde donnée par la fonction Serial Plotter d’Arduino. Pour la prochaine séance, nous devrons trouver un moyen d’insérer des matériaux entre la source et le capteur. Pour l’instant nous avons deux options : soit nous allons faire une fente dans le tube pour glisser les matériaux dedans, cependant le matériau ne pourra boucher la totalité du diamètre du tube et nous devrions donc mettre un morceau de polystyrène dans la partie non couverte mais cela risque de perturber la mesure ; sinon nous pourrions utiliser un autre tube (ou couper celui que nous avons en deux) de cette manière toute la surface du tube serait remplie, mais il faudrait tenir les tubes et le matériau ou trouver un moyen de les faire tenir. Enfin, nous allons essayer de trouver des matériaux d’épaisseurs proches afin que les mesures puissent être comparables entre elles. Séance 8 -25/03/2024 Objectif de la séance : construire le vrai support qui nous permettra de tester les différents matériaux pour mesurer leur atténuation avec le capteur. Nous avons décidé de réaliser d’abord un prototype qui nous servirai de test pour voir ce qu’on pourrait améliorer sur le vrai support ( forme, distance ...) Pour pouvoir insérer les matériaux, nous avons décidé de faire une fente dans un des tubes que nous avions à disposition. Le problème est qu’il fallait remplir la partie restante lorsqu’on insérait le matériaux car il était à bord plat et le tube circulaire. Nous avons donc découpé dans du carton une forme qui comblerait ce trou : mettre photo. Nous avons ensuite collé la forme à l’extrémité d’un des tubes avec un pistolet à colle pour que ce soit plus solide. Puis nous avons comblé les petits trous qu’ils restaient avec la colle pour être sur qu’aucuns sons ne passent. Pour la fente, nous avons opté pour le système suivant : un morceau de carton bouchera le bas du cylindre on découpera le cylindre jusqu’au morceaux de carton afin qu’on est pas besoin de boucher les côtés du cylindre étant donné que notre morceau de matériau aura une forme rectangulaire ainsi, on aura juste à faire glisser le matériau jusqu’à la fente pour prendre nos mesures Nous avons ensuite découper notre fente à l’aide d’une scie. Une fois notre prototype prêt, nous avons testé des matériaux trouvés au fablab en prenant une longueur du tube deux fois plus grande que sur le prototype final. Nous avons relevé les valeurs suivantes : Les valeurs obtenues nous semblent cohérentes donc nous avons décidé de passer au vrai prototype. Cependant, il faut noter que nous avons pris des références trouvées sur internet qui dépendent de beaucoup de facteurs. Avec le temps qu’il rester, nous avons réussi à découper la forme finale qui sera à coller et à couper la fente dans notre tube. Pour la prochaine et dernière séance, il nous restera donc à tester notre prototype final. Séance 9 - 22/04/2024 Nous avons consacré cette dernière séance au test de notre capteur avec 8 matériaux d'absorbance variable. Nous avons réalisé ces tests à 1kHz car il s'agit de la valeur de référence pour les mesures en acoustique et qu'il fallait que l'on choisisse une fréquence pour fixer les conditions expérimentales et pouvoir comparer les résultats à la fin. En début de séance, nous avons finalisé notre prototype. Il ne restait plus qu'à redécouper légèrement la fente à la scie après avoir coller le morceau de carton qui sert pour combler le vide lorsque l'on insert une plaque de matériau. Ensuite, nous nous sommes mis au mesures. Nous avions une multitude de matériaux à notre disposition, d'épaisseurs différentes grâce à notre camarades Clémence. Nous avons tout d'abord commencé par les matériaux de "petites" épaisseurs, qui rentrent dans notre fente. Pour faire tous nos test nous avons appliqué une fréquence 1kH à l'aide du générateur basse fréquence et nous avons fais de notre mieux pour reproduire, pour chaque mesure, exactement les mêmes conditions d'expériences afin d'avoir les résultats les plus précis possibles. Par la suite, lorsque nous avons effectué nos tests pour des matériaux plus épais, nous avons élargie la fente afin que ceux-ci puisse rentrer au fur et à mesure. Voici quelques images de nos prises de mesure : Ainsi, pour chacun des matériaux, nous relevions l'épaisseur et l'amplitude. 1) Pour les petites épaisseures : 10 Vpp 1 KHz Regupol Treppenlager SB10 Granit Sans rien fente ouverte Sans rien fente scotchée Epaisseur 5 mm 8 mm 8 mm fente fente Amplitude 1 10 5 2X2 27 17 Amplitude 2 11 4 4 22X2 17 Amplitude 3 10 3 1X2 18 19 2) Pour les grosses épaisseurs : 10 Volts 1000 Hz A vide fente ouverte A vide scotchée laine de bois Bouteille en plastique recyclée Plaque de plâtre Laine de coton recyclée Mousse mélamine Epaisseur 0 mm 0 mm 15 mm 12 mm 12,5 mm fente fente Amplitude 1 19 28 20 8 2 6 8x2 Amplitude 2 17X2 21X3 21X4 8 2 7 12x2 Amplitude 3 18 30 24 27X2 29 24 8 3 8x2 11 13 Pour chaque matériau, nous avons des séries de 3 mesures afin d'observer une possible récurrence des mêmes résultats. On peut voir que pour la plupart des matériaux, les résultats sont très rapprochés et que pour d'autres les résultats varient légèrement. A présent, nous devons calculer les atténuations de chacun des matériaux afin de déterminer si cela correspond bien au registres des atténuations que nous possèdons. En effet, avec les matériaux, Clémence a pu obtenir une sorte de registre dans lequel l'atténuation de chaque matériau est répertoriée. Matériau Regupol (caoutchouc) Treppenlager (plastique bulle) Granit Laine de bois Plastique recyclé Plâtre Laine de coton Mousse mélamine Épaisseur (mm) 5 8 8 15 12 12,5 fente fente Atténuation 0,58 0,23 0,15 0,94 0,33 0,1 0,3 0,44 Ainsi, les mesures semblent plutôt cohérentes car pour les matériaux les plus denses et épais et donc les plus absorbants, le coefficient est faible et inversement pour les moins épais et moins denses. On peut dire que notre disposition fonctionne plutôt bien. Bien sûr il n'est parfais car pas très précis, aussi lors des prises de mesures il faut tenir le haut-parleur à chaque fois ce qui n'est pas très pratique et la fente n'est pas modifiable. En effet, on a du épaissir la fente pour les matériaux plus épais donc il n'est plus possible de refaire des  mesures avec les matériaux les moins épais. Projets personnels Axelle I/ Impression 3D Objectif : faire une règle de 15 cm environ avec des motifs à l’intérieur qui rentre dans ma trousse. J’ai d’abord décidé de me concentrer sur les motifs de la règle (règle pour enfant qui sert a dessiner plusieurs choses comme des fleurs des maisons ou des coeurs). Je ferais donc à la fin les graduations. Première étape : la règle J’ai donc commencé par faire un rectangle basique avec le code pour créer un cube que j’ai adaptée de sorte à faire un rectangle qui a une petite épaisseur comme une règle cube([4,20,0.25],true); Deuxième étape : les motifs Pour réaliser les motifs, j’ai utilisé uniquement la fonction « différence » . Premier motif : le coeur J’ai d’abord décidé de faire un coeur. Pour cela, j’ai créé deux cylindres que j’ai positionné a des coordonnées différentes de sortes a formé la partie haute du coeur. Pour la partie basse du coeur, J’ai utilisé un cube tourné à 45 degrés et j’ai utilisé la fonction Union. translate([0,-7.5,0]) rotate([0,0,45]) cube([1.5,1.5,1.5],true); union(){ translate([-0.5,-7,-1]) cylinder(h=1.5,d=1.5,$fn=50); translate ([-0.5,-8,-1]) cylinder(h=1.5,d=1.5,$fn=50); };                                             Deuxième motif : l’idée m’est venue en travaillant mes cours d’électronique numérique. Sachant que nous devons dessiné beaucoup de portes logiques, j’ai décidé de représenter les principales, c’est à dire les portes AND et OR. Pour la porte And, la plus simple, j’ai commencé par faire une sorte d’ellipse que j’ai rempli avec un cube. Je pense qu’il y avait plus simple, mais je n’ai pas réussi à faire un demi-cercle directement. Puis j’ai rajouté un texte « AND » en faisant la différence avec le cube. J’ai fait exactement le même procédé pour ma porte OR, mais au lieu de remplir avec un carré, je l’ai rempli avec une autre ellipse qui était moins « courbée ». J’ai aussi écris un texte « OR » à côté de ma porte de la même manière, Comme ce sont des volumes, mes formes dépassaient j’ai donc soustrait un cube juste au dessus de ma règle. J’ai obtenu le résultat suivant don’t je suis très satisfaite : translate([0,7.5,0]) scale([1.75,2.5])sphere(r=0.5,$fn=50); translate ([0,3.7,0]) scale([1.75,2.5])sphere(r=0.5,$fn=50); r(n=10, id=30, d=50); C’est le code correspondant aux ellipses de bases translate([-0.25,3.2,-0.1]) cube([0.1,0.4,0.2]); translate([0.05,3.2,-0.1]) cube([0.1,0.3,0.2]); translate([0.3,7,-0.1]) cube([0.08,0.4,0.2 ]); Code pour relier les lettres comme le O le R ou le D car elles tomberaient sans difference(){ translate([-1,5.5,-0.125]) cube([2,2,0.25]); translate([-0.45,7,-0.5]) linear_extrude(4) text("AND", size=0.35); }; difference(){ translate ([0,3,0]) scale([2,2.25,0.5])sphere(r=0.5,$fn=50); translate([-0.4,3.25,-0.5]) linear_extrude(4) text("OR", size=0.35); translate([0,0,0.26]) cube([4,20,0.25],true); translate([0,0,-0.26]) cube([4,20,0.25],true); }; Code pour « AND » « OR » et les cubes qui servent à enlever le haut des ellipses Motif suivant : soleil J’ai réfléchi à différentes manières de faire mon soleil. J’ai choisi la plus simple, c’est à dire un rond et des traits autour. J’ai donc faire mon cercle sans difficulté puis j’ai commencé à faire mes traits. J’ai commencé par les plus simples soit ceux aux angles de 0 ,90, 180 et 270 degrés. J’ai donc utilisé la fonction translate et j’ai changé les dimensions de mon cube pour les traits de côté. Pour les traits situé sur les « diagonales », j’ai utilisé la fonction rotate en tournant à chaque fois mon trait de 90 degrés. J’ai eu beaucoup de difficulté avec la fonctions traduites car après avec tourner mes traits à 90 degrés lorsque je voulais déplacer sur les x mon trait, il bougeait sur un autre axe. Mais je suis tout de même parvenue à un résultat satisfaisant en tatonnant et en raisonnant avec logique. translate([0,-3,-1]) cylinder(h=2,r=0.5,$fn=50); translate([0,-4.25,-0.5]) cube([0.1,0.5,2]); translate([0,-2.25,-0.5]) cube([0.1,0.5,2]); translate([-1.25,-3,-0.5]) cube([0.5,0.1,2]); translate([0.75,-3,-0.5]) cube([0.5,0.1,2]); rotate([0,0,45]) translate([-1.3,-2.25,-0.5]) cube([0.5,0.1,1]); rotate([0,0,135]) translate ([-1.25,2,-0.5]) cube([0.5,0.1,1]); rotate([0,0,225]) translate ([2.95,2,-0.5]) cube([0.5,0.1,1]); rotate([0,0,315]) translate ([2.95,-2.1,-0.5]) cube([0.5,0.1,1]);                                                         Dernier élément : j’ai décidé d’ajouter mon prénom « AXELLE » au milieu de ma règle car je n’avais plus d’idée. J’ai donc repris le même code que pour le AND et OR en ajoutant un rotate de 90 degrés. J’ai donc fini la partie motif de ma règle. Voici le code complet difference(){ cube([4,20,0.25],true); translate([0,-7.5,0]) rotate([0,0,45]) cube([1.5,1.5,1.5],true); union(){ translate([-0.5,-7,-1]) cylinder(h=1.5,d=1.5,$fn=50); translate ([-0.5,-8,-1]) cylinder(h=1.5,d=1.5,$fn=50); }; translate([0,-7.4,0]) rotate ([0,0,45]) cube([1,1,1],true); translate([0,7.5,0]) scale([1.75,2.5])sphere(r=0.5,$fn=50); translate ([0,3.7,0]) scale([1.75,2.5])sphere(r=0.5,$fn=50); r(n=10, id=30, d=50); translate([0,-3,-1]) cylinder(h=2,r=0.5,$fn=50); translate([0,-4.25,-0.5]) cube([0.1,0.5,2]); translate([0,-2.25,-0.5]) cube([0.1,0.5,2]); translate([-1.25,-3,-0.5]) cube([0.5,0.1,2]); translate([0.75,-3,-0.5]) cube([0.5,0.1,2]); rotate([0,0,45]) translate([-1.3,-2.25,-0.5]) cube([0.5,0.1,1]); rotate([0,0,135]) translate ([-1.25,2,-0.5]) cube([0.5,0.1,1]); rotate([0,0,225]) translate ([2.95,2,-0.5]) cube([0.5,0.1,1]); rotate([0,0,315]) translate ([2.95,-2.1,-0.5]) cube([0.5,0.1,1]); rotate([0,0,90]) translate([-1,0,-0.5]) linear_extrude(4) text("A X E L L E", size=0.40); }; difference(){ translate([-1,5.5,-0.125]) cube([2,2,0.25]); translate([-0.45,7,-0.5]) linear_extrude(4) text("AND", size=0.35); }; difference(){ translate ([0,3,0]) scale([2,2.25,0.5])sphere(r=0.5,$fn=50); translate([-0.4,3.25,-0.5]) linear_extrude(4) text("OR", size=0.35); translate([0,0,0.26]) cube([4,20,0.25],true); translate([0,0,-0.26]) cube([4,20,0.25],true); }; translate([-0.25,3.2,-0.1]) cube([0.1,0.4,0.2]); translate([0.05,3.2,-0.1]) cube([0.1,0.3,0.2]); translate([0.3,7,-0.1]) cube([0.08,0.4,0.2 ]); Concernant les graduations, j'ai décidé de ne pas les faire et de rester sur l'objectif premier d'une règle c'est à dire tracer des traits droits. L'impression c'est très bien déroulé, elle a duré 19 min j'ai choisis du fil type PLA 0,5mm gris. Voici le résultat : II/ 2D J'ai choisis quelque chose de simple pour mon projet personnel de 2D et de prendre une image et de la vectoriser. Après avoir vectorisé, j’ai ensuite adapté la luminosité pour que les détails apparaissent bien J'ai choisis comme matériaux du cp peuplier 3mm. J’ai obtenu le résultat suivant sans rencontré de problème lors de la gravure. Vangu Projet 2D J'ai choisi de graver une page de mon manga préférée One Punch Man: Pour cela j'ai téléchargé la page en question: J'ai ensuite utilisé le logiciel InkScape et vectorisé l'image: Finale j'ai usé de la graveuse: J'ai atteint ce résultat: Projet 3D Gantelet articulé : Commencé par un doigt : On a la base, sans les articulations donc les parties qui vont recouvrir le doigt. Cette base a été faite en prenant les dimensions de mon majeur. Le reste de la main est un ratio à partir de cette partie. Voici le code : base du module ( ) { difference( ){ cube( [ 22,  22, 90] ) ; traduire( [1, 1, -2] ){cube( [20, 20, 88] ) ;} traduire( [-1, -2, 10] ){cube( [30, 30, 12] ) ;} traduire( [-1, -1, 52] ){cube( [30,30,12] ) ;}}} J’ai choisi une forme cylindrique plutôt que cubique pour des raisons purement esthétiques. Voici où le plus gros problème commence, les joints. Pour que la main puisse bouger à l’intérieur, je devais mettre en place des articulations fonctionnelles se trouvant à l’extérieur de la main. Les articulations sont constituées de deux parties principale : Celles du côté du dos de la main jav() ; Celles du côté de la paume jar() ; module jav(){ difference(){ union(){translate([21.5,19.5,-10]){cube([1,2,26]) ;} traduire([20,19.5,-25]){cube([1,2,20]) ;} traduire([-0.5,19.5,-10]){cube([1,2,27.5]) ;} traduire([1,19.5,-25]){cube([1,2,20]) ;} traduire([22.8,0,16.5]){cube([0.2,2,2]) ;} traduire([-1,0,16.5]){cube([0.2,2,2]) ;} traduire([20,19.5,14]){cube([1,2,45]) ;} traduire([1,19.5,14]){cube([1,2,45]) ;} traduire([21.5,19.5,55]){cube([1,2,20]) ;} traduire([-0.5,19.5,55]){cube([1,2,20]) ;}} translate([-2,20.5,-9]){ rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}} translate([-2,20.5,15]){ rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}} translate([-2,20.5,57.5]){ rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}}} traduire([-1,20.5,-9]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,19.5,-10]){cube([0.2,2,2]);} translate([22.8,19.5,-10]){cube([0.2,2,2]);} translate([-1,20.5,15]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,19.5,14]){cube([0.2,2,2]);} translate([22.8,19.5,14]){cube([0.2,2,2]);} translate([-1,20.5,57.5]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,19.5,56.5]){cube([0.2,2,2]);} translate([22.8,19.5,56.5]){cube([0.2,2,2]);}} module jar(){ {différence(){ union(){translate([-0.5,0,-20]){cube([1,2,40]) ;} traduire([1,0,-30]){cube([1,2,15]) ;} traduire([21.5,0,-20]){cube([1,2,40]) ;} traduire([20,0,-30]){cube([1,2,15]) ;} traduire([0.6,0,15]){cube([1,2,47]) ;} traduire([20.4,0,15]){cube([1,2,47]) ;} translate([-0.5,0,59]){cube([1,2,20]) ;} traduire([21.5,0,59]){cube([1,2,20]) ;}} translate([-1,1,-17.5]){rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}} ; translate([-2,1,18]){rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}} translate([-2,1,18]){rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}} translate([-2,1,60]){rotate([0,90,0]) {cylindre(25,0.9,0.9) ;}}} translate([-2,1,60]){rotate([0,90,0]) {cylindre(25,0.5,0.5) ;}} translate([-1,1,-17.5]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,0,-18.5]){cube([0.2,2,2]);} translate([22.8,0,-18.5]){cube([0.2,2,2]);} translate([-2,0.5,17.5]){rotate([0,90,0]) {cylinder(25,0.5,0.5);}} translate([22.8,0,16.5]){cube([0.2,2,2]);} translate([-1,0,16.5]){cube([0.2,2,2]);} translate([23,0,59.5]){cube([0.2,2,2]);} translate([-1,0,59.5]){cube([0.2,2,2]);}}} Les deux sont très similaires. La différence est dans leurs longueurs respectives pour permettre un déplacement d’un côté mais pas de l’autre. Relier les bases sans les paralyser: -barres d’extension Les barres sont directement implantées dans une base et mises en parallèle. Elles sont assez proches et ont un trou pour permettre à un cylindre d’y passer afin qu’il serve d’axe de rotation. Les cubes sont présents pour empêcher le cylindre de sortir. translate([-2,1,60]){rotate([0,90,0]) {cylinder(25,0.5,0.5);}} translate([-1,1,-17.5]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,0,-18.5]){cube([0.2,2,2]);} translate([22.8,0,-18.5]){cube([0.2,2,2]);} translate([-2,0.5,17.5]){rotate([0,90,0]){cylinder(25,0.5,0.5);}} translate([22.8,0,16.5]){cube([0.2,2,2]);} translate([-1,0,16.5]){cube([0.2,2,2]);} translate([23,0,59.5]){cube([0.2,2,2]);} translate([-1,0,59.5]){cube([0.2,2,2]);} Pour le reste des doigts j’ai utilisé la fonction scale à partir du majeur pour les créer. module doigt(){base();jar();jav();} La paume est tout simplement un cube vidé, assez grand. module main(){translate([0,100,0]){rotate([-90,0,0]){ translate([0,0,2]){doigt();} translate([-50,0,0]){scale([1,1,6/9]){doigt();}} translate([-25,0,0]){scale([1,1,8/9]){doigt();}} translate([25,0,0]){scale([1,1,7.5/9]){doigt();}} difference(){ translate([-52,0,-124.5]){cube([104,22,108]);} translate([-50,2,-125.5]){cube([100,18,112]);} translate([40,1,-100]){cube([20,20,30]);}}}} translate([60,0,0]){rotate([0,90,0]){scale([1,1.5,0.6]){doigt();}}}} J’ai ensuite customisé un peu pour mettre les pierre d’infinité un jour: module hole(){cube([20,20,10]);} module fini(){difference(){main(); translate([-15,0,-5]){cube([30,30,10]);} translate([-50,55,-5]){hole();} translate([-25,55,-5]){hole();} translate([0,55,-5]){hole();} translate([25,55,-5]){hole();} translate([30,7.5,-5]){hole();}}} Le code en entier donne: module base(){difference(){ cube([22,22,90]); translate([1,1,-2]){cube([20,20,88]);} translate([-1,-2,10]){cube([30,30,12]);} translate([-1,-1,52]){cube([30,30,12]);}}} module jar(){ {difference(){ union(){translate([-0.5,0,-20]){cube([1,2,40]);} translate([1,0,-30]){cube([1,2,15]);} translate([21.5,0,-20]){cube([1,2,40]);} translate([20,0,-30]){cube([1,2,15]);} translate([0.6,0,15]){cube([1,2,47]);} translate([20.4,0,15]){cube([1,2,47]);} translate([-0.5,0,59]){cube([1,2,20]);} translate([21.5,0,59]){cube([1,2,20]);}} translate([-1,1,-17.5]){rotate([0,90,0]) {cylinder(25,0.9,0.9);}}; translate([-2,1,18]){rotate([0,90,0]) {cylinder(25,0.9,0.9);}} translate([-2,1,18]){rotate([0,90,0]) {cylinder(25,0.9,0.9);}} translate([-2,1,60]){rotate([0,90,0]) {cylinder(25,0.9,0.9);}}} translate([-2,1,60]){rotate([0,90,0]) {cylinder(25,0.5,0.5);}} translate([-1,1,-17.5]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,0,-18.5]){cube([0.2,2,2]);} translate([22.8,0,-18.5]){cube([0.2,2,2]);} translate([-2,0.5,17.5]){rotate([0,90,0]) {cylinder(25,0.5,0.5);}} translate([22.8,0,16.5]){cube([0.2,2,2]);} translate([-1,0,16.5]){cube([0.2,2,2]);} translate([23,0,59.5]){cube([0.2,2,2]);} translate([-1,0,59.5]){cube([0.2,2,2]);}}} module jav(){ différence(){ union(){translate([21.5,19.5,-10]){cube([1,2,26]);} translate([20,19.5,-25]){cube([1,2,20]);} translate([-0.5,19.5,-10]){cube([1,2,27.5]);} translate([1,19.5,-25]){cube([1,2,20]);} translate([22.8,0,16.5]){cube([0.2,2,2]);} translate([-1,0,16.5]){cube([0.2,2,2]);} translate([20,19.5,14]){cube([1,2,45]);} translate([1,19.5,14]){cube([1,2,45]);} translate([21.5,19.5,55]){cube([1,2,20]);} translate([-0.5,19.5,55]){cube([1,2,20]);}} translate([-2,20.5,-9]){ rotate([0,90,0]) {cylinder(25,0.9,0.9);}} translate([-2,20.5,15]){ rotate([0,90,0]) {cylinder(25,0.9,0.9);}} translate([-2,20.5,57.5]){ rotate([0,90,0]) {cylinder(25,0.9,0.9);}}} translate([-1,20.5,-9]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,19.5,-10]){cube([0.2,2,2]);} translate([22.8,19.5,-10]){cube([0.2,2,2]);} translate([-1,20.5,15]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,19.5,14]){cube([0.2,2,2]);} translate([22.8,19.5,14]){cube([0.2,2,2]);} translate([-1,20.5,57.5]){rotate([0,90,0]) {cylinder(24,0.5,0.5);}} translate([-1,19.5,56.5]){cube([0.2,2,2]);} translate([22.8,19.5,56.5]){cube([0.2,2,2]);}} module doigt(){ base(); jar(); jav();} module main(){translate([0,100,0]){rotate([-90,0,0]){ translate([0,0,2]){doigt();} translate([-50,0,0]){scale([1,1,6/9]){doigt();}} translate([-25,0,0]){scale([1,1,8/9]){doigt();}} translate([25,0,0]){scale([1,1,7.5/9]){doigt();}} difference(){ translate([-52,0,-124.5]){cube([104,22,108]);} translate([-50,2,-125.5]){cube([100,18,112]);} translate([40,1,-100]){cube([20,20,30]);}}}} translate([60,0,0]){rotate([0,90,0]){scale([1,1.5,0.6]){doigt();}}}} module hole(){cube([20,20,10]);} module fini(){ difference(){ main(); translate([-15,0,-5]){cube([30,30,10]);} translate([-50,55,-5]){hole();} translate([-25,55,-5]){hole();} translate([0,55,-5]){hole();} translate([25,55,-5]){hole();} translate([30,7.5,-5]){hole();}}} fini(); La forme générale est respectée mais le résultat reste un échec. Les joints n’ont pas été correctement imprimés. Il aurait fallu les faire plus gros et plus espacés pour réduire l’importance de l’imprécision de la machine. De plus, les supports sont placés de telle sorte qu’il soit quasi impossible de les retirer. Une bonne solution au problème de faire en sorte que les parties du gantelet puissent être imprimés séparément pour l’assembler. Clémence 2D Pour ma gravure, j’ai d’abord eu l’idée de créer un puzzle à 16 pièces avec un dessin assez simple dessus ((bien que je n’aie pas réussi à réaliser ce projet j’ai tout de même tenu à le documenter). J’ai utilisé Inkscape pour mon dessin et j’ai commencé par définir les contours de mon puzzle en traçant un carré de 200 pixels de côté. Puis j’ai dessiné une fleur en faisant un cercle (70 de rayon dont le centre est situé à équidistance de tous les côtés) pour le centre, puis huit ovales inclinés à différents angles pour les pétales. J’ai ensuite fait une union entre tous les pétales et une intersection entre le contour et les pétales pour qu’ils ne dépassent pas des bords du puzzle : Je me suis ensuite lancée dans le tracé des lignes qui seraient découpées pour séparer les pièces. Cependant, j’ai rencontré des difficultés pour faire des lignes courbées au milieu de lignes droites. J’ai donc séparé les pièces en 16 carrés avec des lignes droites : Mon objectif était de faire les formes qui permettraient aux pièces de s’emboiter puis de réaliser une opération pour le combiner à la ligne droite déjà tracée. Cependant, je n’ai pas réussi à trouver le bon moyen de parvenir au résultat que je recherchais je n’ai réussi qu’à faire des formes similaires aux bouts des puzzles mais pas à les combiner à une ligne. En effet, il reste toujours la ligne droite même à l’endroit du bout et si je le fait graver les parties supposées s’emboiter se détacheraient du reste du puzzle : Après cela je me suis arrêtée car je ne réussis pas à trouver de solution. J'ai ensuite appris qu'il était possible de prendre une image sur internet et de la vectoriser pour qu'elle puisse être lue et gravée par la découpeuse laser. J'ai choisi le logo de mon équipe de rugby préférée, l'Union Bordeaux-Bègles : (adresse de l'image : https://www.ubbrugby.com/application/uploads/idev_news/logo-ubb_380.png) J'ai copié l'image sur Inkscape puis je l'ai vectorisée et j'ai réglé l'échelle de gris pour que les détails soit bien visibles à la gravure. Enfin, j'ai ajouté un cercle rouge autour pour que la machine découpe autour du logo. Voilà le résultat (il manque une petite partie sur la gauche car le morceau de bois que j'avais choisi était découpé sur le coté et que je l'ai placé sans prendre cela en compte) : 3D Pour la partie 3D du projet personnel, j’ai décidé de faire un champignon simplifié. je ne me suis pas inspirée d'une image en particulier car c'est plus difficile de reproduire un modèle mais dans l'idée je voulais que ça ressemble à une maison de Stroumpfs. J'ai donc commencé par réaliser le pied du champignon à l'aide de cylindres empilés de différentes tailles pour arrondir les bords au maximum. J'ai aussi du adapter la hauteur des cylindres entre eux afin qu'ils soient bien  les uns au dessus des autres. $fn=100; //pied du champignon translate([0,0,4]) cylinder(h=25,r1=14,r2=9); translate([0,0,2]) cylinder(h=2,r1=14.5,r2=14); cylinder(h=2,r1=15,r2=14.5); translate([0,0,-1]) cylinder(h=1,r1=14.9,r2=15); translate([0,0,-2]) cylinder(h=1,r1=14.7,r2=14.9); translate([0,0,-3]) cylinder(h=1,r1=14.4,r2=14.7); translate([0,0,-4]) cylinder(h=1,r1=14,r2=14.4); translate([0,0,-5]) cylinder(h=1,r1=13.5,r2=14); translate([0,0,-6]) cylinder(h=1,r1=12.9,r2=13.5); translate([0,0,-7]) cylinder(h=1,r1=12.3,r2=12.9); translate([0,0,-8]) cylinder(h=1,r1=11.5,r2=12.3); translate([0,0,-9]) cylinder(h=1,r1=10,r2=11.5); translate([0,0,-10]) cylinder(h=1,r1=8,r2=10); J'ai ensuite ajouté le chapeau du champignon en utilisant la même méthodes d'empilement de cylindres mais en ajoutant une sphère au sommet pour que le haut soit bien arrondi et pas pointu. //chapeau du champignon translate([0,0,29]) cylinder(h=2,r1=30,r2=32); translate([0,0,31]) cylinder(h=1,r1=32,r2=32.5); translate([0,0,32]) cylinder(h=2,r1=32.5,r2=33); translate([0,0,34]) cylinder(h=1,r1=33,r2=33); translate([0,0,35]) cylinder(h=2,r1=33,r2=32.5); translate([0,0,37]) cylinder(h=3,r1=32.5,r2=31); translate([0,0,40]) cylinder(h=2,r1=31,r2=29.5); translate([0,0,42]) cylinder(h=2,r1=29.5,r2=27); translate([0,0,44]) cylinder(h=6,r1=27,r2=18); translate([0,0,50]) cylinder(h=4,r1=18,r2=10); translate([0,0,54]) cylinder(h=2,r1=10,r2=4); translate([0,0,42.6]) sphere(r=14); Enfin, j'ai décidé d'ajouter un motif sur le chapeau pour me rapprocher d'une maison de Stroumpfs. Pour cela j'ai fait des sphères et je les ai placées de manière à ce qu'elle sortent un petit peu du haut du champignon : //motif sur le champignon translate ([26,0,37]) sphere(r=7); translate ([13,-18,41]) sphere(r=7); translate ([-16,-19,38.5]) sphere(r=7); translate ([-25.8,10,35]) sphere(r=6); translate ([5,11,47]) sphere(r=7); translate ([-8,25,38]) sphere(r=6); Mon code final et le rendu sur openscad sont : $fn=100; //pied du champignon translate([0,0,4]) cylinder(h=25,r1=14,r2=9); translate([0,0,2]) cylinder(h=2,r1=14.5,r2=14); cylinder(h=2,r1=15,r2=14.5); translate([0,0,-1]) cylinder(h=1,r1=14.9,r2=15); translate([0,0,-2]) cylinder(h=1,r1=14.7,r2=14.9); translate([0,0,-3]) cylinder(h=1,r1=14.4,r2=14.7); translate([0,0,-4]) cylinder(h=1,r1=14,r2=14.4); translate([0,0,-5]) cylinder(h=1,r1=13.5,r2=14); translate([0,0,-6]) cylinder(h=1,r1=12.9,r2=13.5); translate([0,0,-7]) cylinder(h=1,r1=12.3,r2=12.9); translate([0,0,-8]) cylinder(h=1,r1=11.5,r2=12.3); translate([0,0,-9]) cylinder(h=1,r1=10,r2=11.5); translate([0,0,-10]) cylinder(h=1,r1=8,r2=10); //chapeau du champignon translate([0,0,29]) cylinder(h=2,r1=30,r2=32); translate([0,0,31]) cylinder(h=1,r1=32,r2=32.5); translate([0,0,32]) cylinder(h=2,r1=32.5,r2=33); translate([0,0,34]) cylinder(h=1,r1=33,r2=33); translate([0,0,35]) cylinder(h=2,r1=33,r2=32.5); translate([0,0,37]) cylinder(h=3,r1=32.5,r2=31); translate([0,0,40]) cylinder(h=2,r1=31,r2=29.5); translate([0,0,42]) cylinder(h=2,r1=29.5,r2=27); translate([0,0,44]) cylinder(h=6,r1=27,r2=18); translate([0,0,50]) cylinder(h=4,r1=18,r2=10); translate([0,0,54]) cylinder(h=2,r1=10,r2=4); translate([0,0,42.6]) sphere(r=14); //motif sur le champignon translate ([26,0,37]) sphere(r=7); translate ([13,-18,41]) sphere(r=7); translate ([-16,-19,38.5]) sphere(r=7); translate ([-25.8,10,35]) sphere(r=6); translate ([5,11,47]) sphere(r=7); translate ([-8,25,38]) sphere(r=6); Aperçu en mode "Render" L'impression a duré 1 heure et 17 minutes et a fonctionné du premier coup. Voici le résultat final : La gomme à coté sert d'échelle, elle mesure environ 6 cm et le champignon, autour de 4 cm. Ibtyssam I- Impression 3D Pour le projet d’impression 3D, j’ai hésité entre plusieurs choses : j’ai d’abord voulu imprimer la Lune, cependant je me suis rendu compte que cela avait déjà été fait donc ça n’aurait pas été très original. Après plusieurs plusieurs recherches et j’ai eu l’idée d’imprimer un dé. Étant fan de jeu de société je me suis dis que ceserai une super idée, normalement tout petit, mais en grand, soit un dé géant de 15 cm d’arrête. De plus, un dé n’est pas l’objet le plus compliqué à modéliser, certes, cependant cela reste un objet indémodable qui a bercé notre enfance et qui continue aujourd’hui d’ailleurs, car il n’y a pas d’âge pour jouer aux jeux de société. J’ai utilisé l’application OpenScad car je la trouve beaucoup plus simple et plus intuitive à la prise en main que FreeCad, autre logiciel qui permet la modélisation 3D. Pour m’aider à mener à bien ce projet, je me suis inspiré de certains codes et surtout de la SheetCheat d’OpenScad qui regroupe tous les composés de code dont on a besoin pour modéliser. Voilà comment je m’y suis prise pour modéliser mon dé : Étape 1 : la modélisation du cube avec les bords arrondis Ici, il a fallu d’abord modéliser un cube, puis une sphère l’englobant et puis 3 cylindres (rotate) englobant le tout pour enfin faire une intersection entre ses composants et obtenir les bords arrondis. Ensuite, pour toutes les faces du cube, il a fallu appliquer des sphères et à chaque fois modifier leur position sur chaque face (translate). Étape 2 : la face du 1 Etape 3 : face du 2 Étape 4 : la face du 3 Etape 5 : la face du 4 Etape 6 : la face du 5 Etape 7 : la face du 6 (fin) On peut voir que le travail n'est pas très complexe niveau technique car enfait, pour chaque face, on utilise la même fonction (translate), ce sont juste les coordonnées du vecteur afin de placer les demis-sphères sortantes qui changent à chaque fois. translate(v = [x, y, z]) { ... } La commande translate applique une translation (déplace) à son élément enfant (ici la sphère de rayon 1,5 et de résolution 50) le long du vecteur spécifié. De plus, pour les dimensions des arrêtes du cube et diamètre des sphères, il faudra voir au stade de l'impression l'échelle à choisir car il n'y a pas d'unité sur OpenScad. Aussi, j'aurai pu appliquer une différence au tout afin d'avoir un résultat réaliste, comme un vrai dé, mais j'ai décider de  faire des demi-sphères sortantes et non rentrantes pour l'originalité. Aussi, j'ai décidé de faire un dé géant car cela me rappel les grands dés en mousse avec lesquelles je jouait étant petite et desquels je me suis inspirés pour ce projet. https://www.google.com/url?sa=i&url=https%3A%2F%2Ftoutpourlejeu.com%2Ffr%2Fde-geant-4-a-8-cm%2F6010-de-mousse-4-cm-couleur-geant-pour-jeu-4260586155433.html&psig=AOvVaw1DCH54Uy-8EMnfUtOVulu9&ust=1711401128672000&source=images&cd=vfe&opi=89978449&ved=0CBIQjRxqFwoTCMDy0pXojYUDFQAAAAAdAAAAABAF Il reste maintenant à effectuer l'impression ! Le 25 mars 2024, lors d'une séance de Fablab, j'ai lancé la toute première impression de mon objet. J'ai tout d'abord choisi une imprimante qui était libre et j'ai choisi ma couleur de filament. Pour faire quelque chose d'un peu original, j'ai choisi du verre. Étant donné que nous ne pouvons pas changer le filament tout seul, j'ai demandé l'aide d'un fabmanager qui a bien voulu le faire pour moi. Pendant que celui ci changeait le filament j'ai préparer mon fichier d'impression avec l'aide d'un de mes camarades, Vangu, car je ne savais pas exactement comment procéder. En amont, j'ai converti mon fichier OpenScad en format STL, format spécifique l’impression 3D. Je l'ai ensuite mis sur ma clé USB. Pour préparer le fichier d'impression, il faut brancher la clé USB sur le poste, ouvrir le logiciel IdeaMaker (slice pour imprimante 3D Raise2pro présente au Fablab) et ouvrir le fichier STL. Ensuite, on choisi les dimensions de notre objet, dans mon cas le sens du dé et le support car la machine ne peut pas imprimer à partit de rien. On visualise le tout et on vérifie que c'est bien ce qu'on veut, on sélectionne l'imprimante et on télécharge le résumé (slice) de l'impression qui nous indique le temps d'impression, le matériau (PMA), l'imprimante et la masse de l'objet. Enfin, on envoie vers l'imprimante et on lance l'impression. Aussi, il est très important de remplir le registre des impressions en indiquant : date, nom, numéro d'imprimante, matériau (PMA), temps d'impression (pour moi, 2h12), masse (pour moi, 23 g) et résultat. Pour mon objet, le Fabmanager m'a indiqué que je devais faire attention à la température car selon les filaments elle n'est pas la même. J'ai du choisir une température de 205°. Aussi, j'ai indiqué précédemment que je voulais imprimer un dé géant de 15 cm d’arête, mais en faisant le fichier d'impression je me suis rendu compte que cela allait être beaucoup trop long (31h). Je ne pouvais pas prendre le risque de faire une impression aussi longue car rien ne me garanti que l'imprimante ne sera pas défaillante. De plus, si c'est le cas, il faudrait que je recommence et c'est beaucoup trop long et de filament gâché. J'ai donc choisi 5 cm d’arête. Enfin, j'ai pu lancé mon impression. J'ai fais quelque allers retours pour vérifier que tout allait bien. Cependant, à la fin de la séance, un de mes camarades m'a fait remarquer qu'il y a eu un nœud dans mon filament. Enfaite, pendant un certains temps, l'imprimante a continué d'imprimer mais sans filament ce qui a causé la création d'un espace vide en plain milieu de mon dé. J'ai décidé de laisser l'impression se terminer pour voir si le résultat est si mauvais ou non. En allant chercher mon dé je me suis rendu compte qu'en plus du défaut décrit précédemment, le haut de mon dé s'est imprimé en décalé. Néanmoins, j'ai décidé de ne pas refaire d'impression car je n'ai pas envie de gâcher plus de filament et car je considère que je sais utiliser les logiciels et faire une impression  3D. Voici quelques photos du résultat : II- Gravure Pour mon projet 2D, j’ai décidé de graver un dessin de mon personnage de manga préféré, Jotaro Joestar du manga Jojo’s Bizarre Adventure. J’ai décidé de graver cela car j’ai toujours voulu avoir un poster de ce personnage et je trouve ça encore plus stylé d’en avoir une gravure. Voici l’image que j’ai décidé de graver : J’ai donc utilisé le logiciel Inskape pour vectoriser l’image et la mettre en noir et blanc, mais aussi pour modifier certains paramètres afin que la gravure soit à mon goût (résolution, intensité du noir, nuances de gris...). Aussi, il a fallu que je dessine l'encadré du dessin en rouge pour la découpe. Après avoir fini tous mes réglages, j'ai enregistré mon projet et l'ai mis sur une clé USB. Ensuite, je me suis rendu en salle de découpe pour mener à bien ma gravure. J'ai pu la faire grâce à l'aide d'un camarade nommé Vlad qui a eu la gentillesse de m'expliquer comment il fallait procéder. Donc il faut mettre sa clé, puis sur le logiciel Trotec Ruby il faut sélectionner son fichier (qui est en .svg), attendre que le logiciel le télécharge et puis faire quelques réglages notamment au niveau des dimensions. Il faut aussi indiquer le bois que nous utilisons (pour moi c'était du peuplier 3mm), pas besoin de sélectionner la découpeuse car c'est un ordi pour une découpeuse. Il faut déposer le morceau de bois dans la découpeuse en dessous du laser dans le coin supérieur gauche et ajuster le laser sur l'ordinateur pour faire en sorte qu'il commence bien sur la coin supérieur gauche de la plaque de bois. Enfin tous les ajustements fait, la machine nous indique qu'elle est  prête et on peut la mettre en marche. Voici quelques images de ma gravure : Et voila le résultat final ! Groupe B3: L'altimaître pour les maîtres des hauteurs alpines! GROUPE B3 CMI PHYSIQUE-B Leila Lazzem Sacha Ferry Milo Reiss Ramdani Medhurst L'altimaître 1 ERE SEANCE Lors de cette 1ère séance au fablab, notre responsable d'UE monsieur Vincent Dupuis nous a expliqué les origines et l'histoire du fablab, le 1er étant née au MIT, à l'initiative de Neil Gershenfeld, il a notamment créer la charte des fablabs dans laquelle on peut retrouver les valeurs que tous les fablabs véhiculent. Celles-ci le partage et l'accessibilité afin de permettre à n'importe qui de créer presque n'importe quoi et d'avoir accès a des machines de pointe à la seule condition de documenter précisément la réalisation de chaque projet, afin de faciliter sa réalisation par tout ceux qui le voudrait. Ils nous a ensuite expliqué l'importance du Wiki (nous avons compris qu'il est très important de documenter tout ce que nous allons réaliser), comment aller se dérouler l'UE, avant de nous faire visiter les différentes salles du fablab et le matériel qu'elles abritent , notamment la salle des imprimantes 3d, la salle des découpeuses laser (pour plastiques et pour métaux avec découpeuses laser, fil chaud et jet d'eau à très haute pression), la salle électronique ainsi que la salle de menuiserie. Les machines que nous allons principalement utiliser et que nous allons apprendre à utiliser sont les imprimantes 3d et les découpeuses lasers Nous avons ensuite pu commencer à chercher des idées pour le projet que nous allons réaliser lors de ces 10 séances au fablab, notamment en explorant les capteurs en tout genre mis à notre disposition. 2 EME SEANCE Lors de cette séance, nous avons pu être formé à l'utilisation de 3 logiciels en opensource de modélisation et dessin numérique : ces 3 logiciels étant : Inkscape pour la modélisation en deux dimensions. OpenScad pour la modélisation en 3 dimensions. Freescad pour la modélisation en 3 dimensions. INKSCAPE Ce logiciel de modélisation 2d est principalement utilisé pour réaliser des plans utilisable par une découpeuse laser. Notre professeur nous a donc appris les bases de ce logiciel, avant de nous donner comme consigne de réaliser un rectangle dans lequel sont percés 4 cercles de rayon 10 cm situé à 15 cm des bord du rectangle le plus proche. Voici donc ce fameux rectangle. A noter que la couleur rouge du trait permet à la machine de savoir qu'il faut découper le matériau suivant le trait. OPENSCAD Ce logiciel de modélisation en 3d est utilisé pour créer des plans utilisables par des imprimantes 3d. ce logiciel est basé sur l'utilisation du C++ (un langage informatique) pour coder des formes plus ou moins complexes, nous avons donc appris les bases de ce logiciel, et notamment nous avons appris l'existence du site CheatSheet d'OpenScad, recensant toute les commandes et informations nécessaire à la création de presque n'importe quelles formes, simples ou complexes. Nous avons ainsi réalisé un cube percé sur chaque axe du plan par un cylindre, lequel est ensuite enlevé à la structure, nous laissant avec ce résultat : FREESCAD Le dernier logiciel que nous avons appris à utilisé est Freescad un logiciel, de modélisation 3D paramétrique, qui contrairement à Openscad, se base sur l'utilisation de la souris pour modéliser, modifier et interagir avec la forme que l'on cherche à créer. Nous avons du réaliser le même travail que pour Openscad, mais en utilisant ici directement notre souris et le logiciel en lui même pour la modélisation : La séance c'est fini sur la démonstration par une fabmanager de l'utilisation d'une imprimante 3d, de l'importation du plan jusqu'à l'impression, en passant par la formatation du fichier, l'ajout des supports pour la structure, le choix du matériau pour l'impression, la vérification du bon fonctionnement de l'imprimante et l'export des fichiers vers l'imprimante. La fabmanager a ensuite pu nous montrer le fonctionnement des découpeuses laser, et toutes les étapes nécessaires à leur utilisation, notamment le calibrage et l'import des fichiers. 3 EME SEANCE: Lors de la troisième séance du projet Fablab, le professeur a introduit aux groupes du CMI physique la carte Arduino. Cet équipement est fondamental pour la conception d'objets électroniques. Il se compose d'un microcontrôleur et d'autres composants qui facilitent la connexion des entrées et des sorties, permettant ainsi le stockage et l'exécution de programmes informatiques.Voici le modèle Arduino mis à notre disposition: Par la suite, nous avons reçu les éléments suivants : un breadboard, des résistances, des fils et des câbles pour faire un montage et faire fonctionner l'Arduino à l'aide d'un ordinateur portable. Notre tâche consistait à tester le bon fonctionnement de l'Arduino en exécutant le programme "blink", qui fait clignoter la LED intégrée à l'Arduino. Grâce aux câbles fournis permettant de connecter l'Arduino à notre ordinateur, nous avons réussi à téléverser le programme "blink" suivant : void setup() { pinMode(LED_BUILTIN, OUTPUT);} void loop() {  digitalWrite(LED_BUILTIN, HIGH); delay(1000);                    digitalWrite(LED_BUILTIN, LOW);  delay(1000);                     } Après avoir vérifié que notre Arduino marchait nous avons procédé a une utilisation plus concrète de l'Arduino: La mesure d'un facteur physique. En effet, nous avons pu, en branchant un capteur d'humidité et de température à notre Arduino mesurer à tout instant l'humidité et la température de notre environnement. Voici le code utilisé: #include "DHT.h" // Définit la broche de l'Arduino sur laquelle la // broche DATA du capteur est reliée #define DHTPIN 2 // Définit le type de capteur utilisé #define DHTTYPE DHT11 // Déclare un objet de type DHT // Il faut passer en paramètre du constructeur // de l'objet la broche et le type de capteur DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // Initialise la capteur DHT11 dht.begin(); } void loop() { // Récupère la température et l'humidité du capteur et l'affiche // sur le moniteur série Serial.println("Temperature = " + String(dht.readTemperature())+" °C"); Serial.println("Humidite = " + String(dht.readHumidity())+" %"); // Attend 10 secondes avant de reboucler delay(10000); } 4 EME SEANCE: PROJET: Nous avons pour projet de réaliser un appareil capable de détecter l'altitude par rapport au sol et de l'afficher sur un écran LED. Cet appareil pourrait être très utile dans le cadre d'une activité comme l'alpinisme ou l'escalade de montagne ainsi que pour les pilotes d'avion . En effet, les vols à très hautes altitudes peuvent être très dangereux . La raison principale est que à haute altitude il y a moins d'air, donc moins de résistance à l'air. À mesure que l'avion s'élève dans l'atmosphère, la quantité d'oxygène disponible à l'extérieur diminue jusqu'au point où elle n'est plus suffisante pour assurer une respiration efficace. Les pilotes risquent donc l'asphyxie. Pendant cette séance, on s’est intéressé au choix du capteur pour élaborer par la suite le montage de notre instrument de mesure.On a donc comparé plusieurs capteurs afin de choisir le meilleur et celui qui pourra donner la mesure la plus précise.Par la suite, on a écrit notre protocole expérimental de telle sorte à avoir un plan clair et net et de connaître  les composants dont on a besoin. Concernant le capteur, nous avons deux idées principales: soit d'utiliser un laser afin de mesurer la distance au sol, soit un d'utiliser un capteur de pression atmosphérique qui nous permettra d'associer la pression de l'air à l'altitude. Chacun de ces capteurs présentent des avantages et inconvénients que nous détailleront ci-dessous: Capteur Laser: Avantages Inconvénients La lumière laser fournit un petit point lumineux condensé, qui est visible même de loin. Ainsi, il est plus facile de bien ajuster le détecteur et de détecter sûrement les petites pièces sur de longues distances. La lumière laser focalisée est très riche en énergie avec à la clé une détection fiable de surfaces très variées, même en présence de lumière parasite. un alignement plus facile, une plus grande précision. L’angle d’inclinaison de la personne portant le dispositif peut totalement fausser le résultat. Si il y’a un obstacle sur le trajet du laser, le capteur va seulement mesurer la distance entre la personne et l’obstacle. Capteur Baromètre:Grove-BarometerSensor(BME 280): Avantages Inconvénients Multifonctions: mesure à la fois la pression atmosphérique, la température et l'humidité. peut-être utilisé pendant les expériences, les voyages etc.. Facile à utiliser Très précis Hautes résolutions pour la pression et la température Pression atmosphérique affectée par l'altitude et la pression Une haute humidité peut affecter le capteur et donner de fausses mesures par la suite. Capteur Grove-GPS: Avantages Inconvénients Capteur très utilisé Renseigne sur la localisation de la personne portant l'équipement ce qui permet de déterminer l’altitude par la suite. Un capteur pas du tout précis qui est perturbé généralement par les bâtiments ou par toute autre source dans la nature. Ne se comporte pas comme les GPS qu’on retrouve dans nos téléphones vu que ceux-ci sont très précis grâce aux bornes télécom. N’est pas utilisé en intérieur mais seulement en extérieur. Après avoir comparé nos différents capteurs, on a fini par choisir le capteur baromètre BME 280 car celui-ci est multifonctions c'est-à-dire qu'il nous donne la température, la pression et l'humidité en une seule mesure.D'autre part, ce capteur a une consommation d'énergie très réduite, des taux de mesures plus élevés et des filtres contre les interférences environnementales. Dans un second temps, nous avons choisi les composants dont on aura besoin afin de mettre en place notre projet: Capteur de distance Microcontrôleur : un microcontrôleur pour traiter les données provenant du capteur et les afficher sur l'écran LED. Des microcontrôleurs comme Arduino ou Raspberry Pi sont souvent utilisés dans ce type de projet en raison de leur polyvalence et de leur facilité d'utilisation. Écran LED : Pour afficher la hauteur détectée, on peut utiliser un petit écran LED. Vous pouvez opter pour un écran à matrice de points ou un écran à sept segments, en fonction de la précision de l'affichage que vous souhaitez et de vos préférences en termes de design. Alimentation électrique : Assurez-vous d'avoir une source d'alimentation électrique adéquate pour alimenter votre dispositif, que ce soit à l'aide de piles, d'une batterie rechargeable ou d'une alimentation secteur. Boîtier et composants de montage :on aura besoin d'un boîtier pour abriter tous les composants de votre appareil, ainsi que des composants de montage. Protocole Expérimental: Sélectionnez votre capteur de distance : Choisissez le type de capteur de distance qui convient le mieux à vos besoins en termes de portée, de précision et de budget. Configurez votre microcontrôleur : Connectez le capteur de distance au microcontrôleur et programmez-le pour lire les données du capteur. Programmation : Écrivez un code pour votre microcontrôleur qui prendra les lectures du capteur de distance et les affichera sur l'écran LED. Montage et assemblage : Montez tous les composants dans votre boîtier, en vous assurant que le capteur est correctement positionné pour détecter la hauteur par rapport au sol. Test et débogage : Testez votre appareil pour vous assurer qu'il fonctionne correctement. Finalisation : Une fois que votre appareil fonctionne correctement, finalisez le boîtier et assurez-vous que tout est sécurisé et prêt à être utilisé dans des conditions réelles. 5 EME SEANCE: Suite à la 4ème séance dans laquelle on a choisi le bon capteur qui correspond bien à l’instrument de mesure qu’on veut créer, l’objectif majeur de la séance 5 est de mettre en marche l’instrument, d’élaborer notre montage à la perfection et de le tester à des distances différentes. On a commencé par connecter notre Arduino à un pc portable et on a mis le code ci-dessous: Nous avons ensuite procédé aux tests de notre capteur, en mesurant l'altitude à différents étages du bâtiment Esclangon, à l'aide des mesures relevées nous avons réalisés une courbe sur google sheets pour observer la dérivation de la mesure de l'altitude du capteur en fonction de la pression atmosphérique. On a ainsi pu observer que la courbe étant linéaire, cette dérivation était négligeable à l'échelle de nos mesures. Dans un troisième temps, on connecte notre écran Led à l’Arduino afin qu’il affiche les mesures directement sur l’écran, on a pour ce faire besoin de modifier le code afin que les mesures s'affiche à la fois sur l'écran LCD et sur l'ordinateur. on a donc utilisé le code ci-dessous: #include "Seeed_BME280.h" #include #include #include"rgb_lcd.h" rgb_lcd lcd; /* const int colorR=255; const int colorG=0; const int colorB=0; */ BME280 bme280; void setup() {   Serial.begin(9600);   if (!bme280.init()) {       Serial.println("Device error!");   } } void loop() {   float pressure;    //get and print temperatures   Serial.print("Temp: ");   Serial.print(bme280.getTemperature());   Serial.println("C");//The unit for  Celsius because original arduino don't support special symbols   //get and print atmospheric pressure data   Serial.print("Pressure: ");   Serial.print(pressure = bme280.getPressure());   Serial.println("Pa");   //get and print altitude data   Serial.print("Altitude: ");   Serial.print(bme280.calcAltitude(pressure));   Serial.println("m");   //get and print humidity data   Serial.print("Humidity: ");   Serial.print(bme280.getHumidity());   Serial.println("%"); lcd.begin(16, 2); lcd.print("Altitude: "); lcd.print(bme280.calcAltitude(pressure)); lcd.println("m");   delay(1000); } Puis, on voulait rajouter une deuxième ligne sur l'écran qui indique la pression mise à part l'altitude. On a donc opté pour ce code ci-dessous à la fin: #include "Seeed_BME280.h" #include #include #include"rgb_lcd.h" rgb_lcd lcd; /* const int colorR=255; const int colorG=0; const int colorB=0; */ BME280 bme280; void setup() {   Serial.begin(9600);   if (!bme280.init()) {       Serial.println("Device error!");   } } void loop() {   float pressure;   Serial.print("Temp: ");   Serial.print(bme280.getTemperature());   Serial.println("C");   Serial.print("Pressure: ");   pressure = bme280.getPressure();   Serial.print(pressure/100);   Serial.println("hPa");   Serial.print("Altitude: ");   Serial.print(bme280.calcAltitude(pressure));   Serial.println("m");   Serial.print("Humidity: ");   Serial.print(bme280.getHumidity());   Serial.println("%"); lcd.begin(16, 2); lcd.print("Altitude: "); lcd.print(bme280.calcAltitude(pressure)); lcd.println("m"); lcd.setCursor(0,2); lcd.print("Pres: "); pressure = bme280.getPressure(); lcd.print(pressure/100);   lcd.println("hPa");     delay(1000); } L’objectif est que l’instrument de mesure soit facile à utiliser, pratique et surtout léger à porter. On s’intéresse donc au design du boitier dans lequel on va mettre notre instrument: 6 EME SEANCE Vlog de la Séance 6 : Sécurité et Alimentation de Notre Instrument de Mesure Durant cette séance,Nous nous sommes penchés sur cette question dans le but de garantir la portabilité et la sécurité de notre appareil, que ce soit pour un alpiniste aguerri ou tout autre utilisateur. Dans un premier temps, nous avons envisagé l'utilisation d'une batterie Li-Ion. Cependant, après avoir évalué les risques potentiels, nous avons réalisé que cette option présentait des inconvénients majeurs. En effet, les batteries Li-Ion peuvent être sensibles aux courts-circuits et à la surcharge, ce qui pourrait entraîner des situations dangereuses, voire des accidents. Les précautions d'utilisation sont extrêmement strictes, ce qui pourrait rendre l'utilisation de notre instrument moins pratique pour nos utilisateurs. Par conséquent, après mûre réflexion, nous avons décidé d'opter pour une solution plus sûre et plus pratique : la batterie externe. Cette alternative présente plusieurs avantages significatifs. Tout d'abord, elle est facile à brancher, ce qui simplifie grandement son utilisation. Ensuite, elle offre un niveau de sécurité plus élevé, car elle ne présente pas les mêmes risques de surchauffe ou d'explosion que les batteries Li-Ion. Cela garantit une expérience utilisateur plus fiable et sécurisée, ce qui est essentiel pour un équipement destiné à des activités de plein air. En résumé, cette séance nous a permis de prendre une décision éclairée et stratégique concernant l'alimentation de notre instrument de mesure. Nous avons opté pour une solution qui offre à la fois praticité et sécurité, répondant ainsi aux besoins de nos utilisateurs tout en garantissant une expérience d'utilisation optimale. Finalement, on a opté pour la batterie externe car premièrement elle est très facile à brancher et deuxièmement cette alternative n'est pas du tout risqué comme le cas de la batterie Li-Ion. On a donc obtenu le montage ci-dessous: 7 EME SEANCE DESIGN BOITIER Cette semaine, nous avons plongé tête la première dans le processus de conception de la boîte 3D pour notre instrument de mesure. C'était excitant, mais aussi un peu intimidant, car nous sommes tous novices dans l'utilisation de ce logiciel de modélisation. Au début, nous avons été confrontés à un défi de taille : apprendre à naviguer dans le logiciel et à comprendre ses fonctionnalités. Pour y parvenir, nous avons passé du temps à regarder des tutoriels en ligne et à consulter différentes documentations. Petit à petit, nous avons commencé à nous sentir plus à l'aise, même si nous avions encore beaucoup à apprendre. Une fois que nous avons eu une certaine maîtrise du logiciel, nous nous sommes attaqués à la tâche de prendre les mesures de notre instrument à l'aide d'une règle. C'était important pour nous de nous assurer que la boîte serait parfaitement adaptée et fonctionnelle. Ensuite, nous avons laissé libre cours à notre créativité pour imaginer le design de la boîte. Au départ, nous étions un peu perdus quant au type de design à adopter. Mais après avoir exploré différentes idées, nous avons finalement trouvé l'inspiration pour créer une boîte innovante. Notre idée principale était d'incorporer un écran dans la boîte, capable d'afficher en temps réel l'altitude et la pression atmosphérique. De plus, nous avons pensé à rendre l'instrument polyvalent en lui permettant d'être porté soit au poignet, soit à la taille du sportif, grâce à une ceinture de fixation. Une autre considération importante était de s'assurer que la boîte permettrait une circulation d'air adéquate, nécessaire pour mesurer avec précision la pression atmosphérique. Pour cela, nous avons expérimenté différents designs avec des trous stratégiquement placés. Après avoir testé plusieurs prototypes, nous avons finalement opté pour celui qui combinait esthétique et fonctionnalité de la meilleure façon possible. Il faut avouer que cette tâche était tout sauf facile, surtout pour des débutants comme nous, mais notre engagement envers la perfection nous a poussés à donner le meilleur de nous-mêmes. CODE Au niveau du code, nous avons remarqué qu'avec la fluctuation de la pression atmosphérique, l'Altitude affichée, ( calculé par rapport à la valeur médiane de la pression atmosphérique au niveau de la mer : 1013,25 PA) n'est jamais la même, ce qui peut induire une très grande incertitude lors d'utilisation prolongée, ou en cas de changement météorologique ambiant. Nous avons donc cherchés à résoudre ce problème en recalculant à tout instant la pression à l'endroit ou le capteur se trouve par rapport à une valeur de pression mesurée lors de la mise en marche du capteur. Cette différence nous donne ainsi l'altitude par rapport au point ou l'on a allumé le capteur. Nous avons donc cherché comment le capteur calcule la pression à partir de sa bibliothèque de donnée : "Seeed_BME280.h" Le calcul entier est donné dans cette bibliothèque : https://github.com/Seeed-Studio/Grove_BME280/blob/master/Seeed_BME280.cpp#:~:text=README.md-,Seeed_BME280.cpp,-Seeed_BME280.h Malheureusement, après avoir passé la majorité de la séance à étudier ce code, nous avons été incapable de modifier la façon dont la pression est calculée, de par notre inexpérience en C+. En conclusion, cette séance a été une véritable leçon d'apprentissage et de créativité. Nous avons surmonté nos obstacles et avons réussi à créer un design qui nous rend fiers, bien que le code nous pose toujours problème, mais nous allons régler cela à la prochaine séance. 8 EME SEANCE Dans cette huitième séance de notre aventure FabLab, nous avons été confrontés à un défi intéressant et instructif. Comme toujours, notre objectif principal était de perfectionner notre instrument de mesure destiné aux sportifs, en particulier aux alpinistes et aux pilotes d'avion de chasse, pour leur fournir des données précises sur l'altitude et la pression atmosphérique. Dès le début de la séance, en vérifiant le fonctionnement de notre instrument, nous avons été surpris par des valeurs aberrantes : une altitude affichée de -0.25 et une pression de seulement 20 hPa. Ces chiffres n'avaient aucun sens et nous ont immédiatement alertés sur un possible problème de programmation. En effet le problème de dérivation des valeurs c'est empiré à cause d'une boucle de calcul dans le code qui a pour effet d'augmenter au fur et à mesure la pression atmosphérique, diminuant ainsi l'altitude mesurée par notre capteur. Afin de régler ce problème, nous avons donc repris le raisonnement de la séance dernière, mais plutôt que de modifier le code de la bibliothèque pour impacter directement le calcul de la pression, nous avons décidé de calculer une pression initiale dans le "void setup" avant d'effectuer une différence par rapport à cette pression dans le "void loop", ce qui nous donne l'altitude par rapport au point ou nous avons allumé le capteur. Voici donc le code : #include "Seeed_BME280.h" #include #include "rgb_lcd.h" rgb_lcd lcd; const int colorR = 255; const int colorG = 0; const int colorB = 0; float pressure; float Altitudemin; float z; BME280 bme280; void setup() {   Serial.begin(9600);   if (!bme280.init()) {       Serial.println("Device error!");   } pressure = bme280.getPressure(); Altitudemin = bme280.calcAltitude(pressure);   Serial.print("Altitudemin"); } void loop() {   Serial.print("Temp: ");   Serial.print(bme280.getTemperature());   Serial.println("C");   z = ((bme280.calcAltitude(pressure))-(Altitudemin));   Serial.print("Altitude :");   Serial.print((bme280.calcAltitude(pressure))-(Altitudemin));   Serial.println("m");   Serial.print("Humidity: ");   Serial.print(bme280.getHumidity());   Serial.println("%"); lcd.begin(16, 2); lcd.print("Altitude : "); lcd.print((bme280.calcAltitude(pressure))-(Altitudemin)); lcd.println("m"); lcd.setCursor(0,2); lcd.print("Pres: "); pressure = bme280.getPressure(); lcd.print(pressure/100);   lcd.println("hPa");     delay(1000); } Ceci nous a permis de régler le problème de boucle de calcul causant la dérivation, tout en nous donnant une altitude qui ne change que très peu au cours du temps d'utilisation (une dérive de 1,5m sur une utilisation de 1h30) Une fois le problème résolu, nous avons décidé de consacrer une partie importante de notre temps à peaufiner le design de la boîte de notre instrument. En considérant notre produit comme le fleuron d'une entreprise visant à servir les sportifs de haut niveau, nous avons pris soin de chaque détail pour offrir à nos utilisateurs une expérience optimale. Nous avons pris une approche pratique en prenant les mesures à l'aide d'une règle pour garantir des dimensions précises. Ensuite, nous avons utilisé une méthode d'impression 3D pour fabriquer les composants de la boîte, un processus itératif qui nous a permis d'obtenir un résultat final à la hauteur de nos attentes. En résumé, cette séance nous a confrontés à des défis techniques et esthétiques, mais nous avons su les surmonter avec succès grâce à notre collaboration et à notre détermination. Nous sommes impatients de voir notre projet prendre forme et de le présenter fièrement en fin d'année, sachant qu'il répondra aux besoins des sportifs les plus exigeants. Restez à l'écoute pour la suite de nos aventures dans le monde fascinant des FabLabs ! 9 EME SEANCE Cette séance était sans aucun doute la plus stressante de toutes, car nous savions que c'était la dernière ligne droite avant de dévoiler le fruit de notre travail acharné tout au long de l'année. Nous avions tant investi de temps, d'efforts et de passion dans ce projet, et maintenant, il était temps de le montrer au monde. Notre principal objectif était de nous assurer que tout fonctionnait parfaitement. Nous avons donc passé la séance à revoir minutieusement chaque détail de notre instrument de mesure. Nous avons vérifié et revérifié les codes de programmation pour nous assurer qu'ils étaient exempts d'erreurs. C'est ainsi que l'on a remarqué qu'il était important de relancer le code toute les 2 à 3h d'utilisation, car sur une semaine entière la pression atmosphérique pouvant changer grandement, on se retrouve avec une dérivation de + ou - 200m. Nous avons également testé le capteur pour nous assurer qu'il fonctionnait correctement, ainsi que la batterie externe pour garantir qu'elle était pleinement chargée. Un autre aspect crucial était de s'assurer que le design de la boîte était parfaitement adapté aux besoins d'un sportif. Nous avons pris le temps de vérifier que la boîte était légère, confortable à porter et résistante aux conditions extérieures. Malgré le stress omniprésent, nous étions plutôt satisfaits du travail accompli. Chaque difficulté surmontée, chaque erreur corrigée nous avait rapprochés un peu plus de notre objectif final. Notre détermination avait porté ses fruits, et cela se reflétait dans la qualité de notre projet. Enfin, nous avons sollicité les conseils avisés de notre professeur. Nous voulions nous assurer que nous n'avions rien laissé au hasard et que notre projet était aussi solide que possible avant la présentation finale. Son feedback nous a été extrêmement précieux et nous a permis d'apporter les dernières modifications nécessaires pour peaufiner notre projet. Maintenant, avec nos esprits concentrés et nos cœurs battant la chamade, nous sommes prêts à affronter la prochaine étape : la présentation de notre projet devant un public attentif. Quelle que soit l'issue, nous sommes fiers du chemin parcouru et reconnaissants pour toutes les leçons apprises au cours de cette incroyable aventure au FabLab. Soutenance Le Lundi 29 Avril 2024 était le jour de la soutenance dans laquelle on présentait notre projet final. Donc, on s'est tous réunis, un peu nerveux mais aussi pleins d'énergie pour partager ce sur quoi on a tant travaillé. On a mis sur pied un PowerPoint aux petits oignons pour guider notre présentation. Dans un premier temps, on a pris le temps d'expliquer en détail ce qu'était exactement notre objet et surtout à quoi il servait. On voulait vraiment que tout le monde comprenne bien l'importance de notre altimètre dans diverses applications, de l'escalade à l'aéronautique en passant par la météorologie. Ensuite, on est entré dans le cœur du sujet en exposant nos arguments et la démarche réfléchie derrière le choix des capteurs pour cet instrument de mesure. Ça a été une partie cruciale de notre présentation, car chaque décision que nous avons prise était le fruit d'une réflexion intense et de nombreuses recherches. On voulait vraiment montrer que notre altimètre était conçu avec précision et qu'il pouvait répondre aux besoins les plus exigeants. Mais ce n'était pas tout ! On a aussi consacré une bonne partie de notre présentation à expliquer en détail le processus de conception de notre boîtier. C'était vraiment intéressant de voir comment chaque détail a été pensé et comment nous avons travaillé dur pour atteindre le résultat final. Du choix des matériaux à la conception 3D, rien n'a été laissé au hasard. Et bien sûr, on ne pouvait pas oublier la partie codage ! C'était l'une des parties les plus importantes de notre projet, car c'est ce qui permet à notre altimètre de fonctionner de manière précise et fiable. On a expliqué en détail notre approche, les langages de programmation utilisés et les défis auxquels nous avons été confrontés en cours de route. Enfin, on a pris un moment pour discuter des points d'amélioration potentiels si on avait eu plus de temps et d'expérience en termes de codage. C'était important pour nous de montrer que nous sommes conscients des limites de notre projet et que nous sommes prêts à continuer à travailler pour l'améliorer. Voici notre PowerPoint si besoin: https://docs.google.com/presentation/d/1PdFZM-EM4Mc8fHf4S9anVTqJ9auLIkGUdizjuGPwPnQ/edit?usp=sharing Projet Personnel de Leila Lazzem Projet Personnel 2D: Pour mon projet personnel en 2D, j'ai décidé de réaliser le fameux symbole du geai moqueur du grand film Hunger Games. Il s'agit d'un oiseau fictif provenant de cette saga qui symbolise la rébellion et la résistance.Celui-ci se présente sous cette forme: Afin de le réaliser, j'ai utilisé le logiciel Inkscape. Dans un premier temps, j'ai téléchargé la photo du symbole ensuite je l'ai importé sur Inkscape en appuyant sur "Fichier" ensuite "importer" (sur Mac). Ensuite, j'ai vectorisé  l'objet matriciel et j'ai fait les contours à la main et à l'aide de "l'outil noeuds"avec une couleur rouge car le laser découpe tout ce qui est en rouge et garde tout ce qui est en noir. Après avoir perfectionné mon objet en faisant varier plusieurs paramètres tels que la luminosité, la résolution ,etc... , j'ai téléchargé mon objet 2D sur clé USB et je me suis rendu à la salle où se trouve la découpeuse laser au FabLab. J'ai inséré la clé sur le poste et je me suis rendue sur le site trottes ruby qui va permettre l'impression de mon objet. J'ai choisi le type de bois que je veux et je l'ai bien mis en place dans la machine en prenant en compte les axes pour qu'il soit droit durant l'impression. Finalement, j'ai envoyé le fichier au laser et j'ai exécuté la tâche.Voici le résultat obtenu! Projet Personnel 3D: Au commencement de mon projet 3D, j'avais pour ambition de créer une pièce unique : une dame d'échec. Après avoir minutieusement conçu le modèle, j'ai été confrontée à un défi inattendu : une erreur persistante empêchait l'impression de l'objet sur l'imprimante. Malgré des heures passées à tenter de résoudre ce problème, je me suis vite rendu compte que mes compétences ne suffisaient pas à en venir à bout. Confrontée à cette impasse, j'ai pris la décision de mettre de côté ce modèle pour me consacrer à une nouvelle création. Cette expérience m'a enseigné l'importance de la persévérance et de l'adaptabilité dans la poursuite de mes projets, et m'a motivée à persévérer jusqu'à atteindre mes objectifs. Étant une passionnée de Chimie, j'ai donc décidé de créer une molécule de caféine sur FreeCad. Étant donné la pression du timing, avec la date limite du projet qui approchait à grands pas, je me suis retrouvée dans un état de stress intense. Consciente qu'il me fallait une solution rapide et réalisable, j'ai opté pour la conception d'une petite molécule, à la fois simple et rapide à imprimer. Cette nouvelle approche avait pour avantage de pouvoir être finalisée en seulement 26 minutes, tout en offrant une expérience de conception plaisante et gratifiante. La réalisation de cet objet se résume en ces quelques étapes: Installation de FreeCAD : Assurez-vous d'avoir FreeCAD installé sur votre système FreeBSD. Vous pouvez l'installer en utilisant les ports FreeBSD ou en utilisant un gestionnaire de paquets tel que pkg. Recherche de la structure moléculaire : Utilisez des bases de données chimiques en ligne pour trouver la structure moléculaire de la caféine. Vous pouvez rechercher des fichiers de données de structures moléculaires dans des formats pris en charge par FreeCAD, tels que .xyz, .pdb, ou .mol2. Importation dans FreeCAD : Importez la structure moléculaire de la caféine dans FreeCAD en utilisant le module "Part" ou "OpenSCAD". Assurez-vous que la structure est correctement importée et alignée dans l'espace de travail de FreeCAD. Modélisation 3D : Utilisez les outils de modélisation 3D de FreeCAD pour créer une représentation 3D de la molécule de caféine. Vous pouvez utiliser des primitives telles que des sphères pour représenter les atomes et des cylindres pour représenter les liaisons entre les atomes. Assurez-vous de respecter les distances et les angles des liaisons chimiques dans votre modèle. Préparation pour l'impression 3D : Une fois que vous êtes satisfait de votre modèle 3D, préparez-le pour l'impression 3D en utilisant le module "Part" de FreeCAD pour fusionner tous les composants de votre modèle en un seul solide. Assurez-vous également que votre modèle est correctement orienté et prêt à être exporté au format STL, qui est largement utilisé pour l'impression 3D. Exportation au format STL : Exportez votre modèle 3D au format STL en utilisant l'option d'exportation de FreeCAD. Assurez-vous de spécifier les paramètres d'exportation appropriés, tels que la résolution et l'unité de mesure. Impression 3D : Enfin, utilisez une imprimante 3D compatible avec les fichiers STL pour imprimer votre modèle de molécule de caféine en 3D. Assurez-vous de sélectionner les paramètres d'impression appropriés pour obtenir un résultat de haute qualité. Voici le résultat final: Projet Personnel de Sacha Ferry Projet personnel 2D Pour mon projet personnel en 2D, j'ai décidé de réaliser à l'aide d'InkScape une gravure de l'une de mes peintures préférées, La nuit étoilé de Van Gogh. Afin de la réaliser, plusieurs étapes sont nécessaires, tout d'abord, il faut trouver l'image de la Nuit étoilé avec la meilleure résolution possible, puis l'on va l'importer dans InkScape et créer un calque On va ensuite créer un chemin et redimensionner l'image sur l'ensemble de la feuille, afin de se préparer à la vectoriser. On va ensuite pouvoir transformer notre calque en image vectoriel de notre image de base, ce qui nous permettra ensuite d'obtenir une image qui puisse être lue par la découpeuse laser afin de pouvoir graver. Après avoir régler les différents niveaux de luminosité et de résolution des détails, il faut faire en sorte que l'image vectoriel ne soit constituée que d'un seul trait, pour ce faire on supprime les noeuds inutiles qui compliqueront le processus de découpe (dans mon cas, et étant donné la nature de l'image cette étape n'a pas été nécessaire. On change enfin la couleur du trait en rouge pour vérifier que tout est bien connecté. Enfin, nous obtenons l'image vectoriel de la nuit étoilé, que nous pourrons utiliser dans la découpeuse laser. Il faut ensuite se rendre au fablab, afin d'importer notre fichier inkscape sur l'ordinateur de la salle de découpe, et l'ouvrir avec le logiciel ruby. On cadre l'image et la place sur la grille, puis on ajoute autour de notre image un cadre rouge afin que lorsque la gravure soit finie, elle soit découpée hors de la plaque. On règle ensuite la qualité de gravure et de découpe ainsi que la puissance du laser ,puis l'on sélectionne le type de bois que l'on va utiliser (ici du CP peuplier de 3mm d'épaisseur) avant de préparer la découpeuse pour la gravure. Finalement, on envoie le fichier au laser et on exécute la tâche, en prenant garde de rester à coté de la machine durant l'opération. Lorsque l'opération est terminée, on sort la plaque de la découpeuse et l'on détache la gravure. Dans mon cas le bois n'était en réalité pas du CP peuplier 3mm, j'ai donc du détacher ma gravure à l'aide d'une scie sauteuse. le résultat final est le suivant: PROJET PERSONNEL 3D : Pour mon projet personnel en 3D, j'ai décidé de réaliser à l'aide d'OpenScad 3 briques de lego, respectivement les briques 4*2, 2*2 et 4*1. J'ai tout d'abord mesuré les 3 briques à l'aide d'une règle. Mais la précision des mesures ayant une incertitude d'environ ± 1mm, j'ai préféré chercher la fiche technique de ces briques sur internet. Voici donc la fiche que j'ai pu trouvé t sur laquelle seront basé mes briques. CODE DES BRIQUES Le code étant similaire pour les 3 briques, je détaillerai le code de la brique 4*2, et je n'expliquerai pour les briques 2*2 et 4*1 que les changement dans les codes. BRIQUE 4*2 $fn=25; difference(){    cube([31.80,15.80,9.60]);    translate([1.45,1.45])    cube([28.90,12.90,8.60]);} translate([3.90,3.90])    for ( a = [0:1] ) {       for ( b = [0:3] ) {          translate([b*8,a*8,9.60])          cylinder(h=1.80,r=2.42);       }    } translate([7.90,7.90])for ( c = [0:2] ) {    translate([c*8,0])    difference(){    cylinder(h=8.60,r=3.25);    cylinder(h=8.60,r=2.40);    }} On commence tout d'abord par définir la résolution de nos cylindre à l'aide de la fonction $fn, dont la valeur est mise à 25. On cherche ensuite à effectuer la forme de base de la brique, qui est un cube creux de 3,18*1,58*0,96 cm. Pour ce faire, on va réaliser une différence, une opération booléenne qui va nous permettre de soustraire deux formes, ici deux cubes. Pour s'assurer que les bords de notre cube creux sont bien épais de 2,9 mm, il va falloir décaler le cube que l'on va soustraire de la moitié de cette valeur dans les x et y, avec la transformation translate([1.45,1.45]) . On va ensuite faire les petits cylindre au-dessus de la brique, qui servent à clipser une brique avec une autre. Afin d'alléger le code, on va utiliser la fonction for( X = [0,N] ). Celle-ci va nous permettre de définir une variable que l'on pourra incorporer dans la transformation translate, au niveau des axes x et y, ce qui va avoir pour effet de répéter l'action de translation, nous donnant ce rendu : Finalement, on va ajouter les piliers de support de la brique, on va pour ce faire combiner les deux techniques utilisé précédemment, la différence et le for. On obtient ainsi trois cylindres creux qui vont permettre de clipser des briques lego en dessous de notre brique : BRIQUE 2*2 Voici le code de la brique 2*2 : $fn=25; difference(){    cube([15.80,15.80,9.60]);    translate([1.45,1.45])    cube([12.90,12.90,8.60]);} translate([3.90,3.90])    for ( a = [0:1] ) {       for ( b = [0:1] ) {          translate([b*8,a*8,9.60])          cylinder(h=1.80,r=2.42);       }    } translate([7.90,7.90])   difference(){    cylinder(h=8.60,r=3.25);    cylinder(h=8.60,r=2.40);  } La différence principale avec le code de la brique 2*2 réside dans les dimensions de la brique, qui est un véritable cube de coté 1,58 cm et dans le support de la brique, puisqu'elle n'a besoin que d'un seul cylindre creux, ce qui enlève le besoin d'utiliser un for dans la 3ème partie du code. Voici les rendus de la brique 2*2: BRIQUE 4*1 Voici le code de la brique 4*1 $fn=25; difference(){    cube([31.80,7.90,9.60]);    translate([1.45,1.45])    cube([28.90,4.90,8.60]);} translate([3.85,3.85])       for ( b = [0:3] ) {          translate([b*8,0,9.60])          cylinder(h=1.80,r=2.42);        } translate([7.90,3.85])for ( c = [0:2] ) {    translate([c*8,0])    cylinder(h=8.60,r=1.90);    } Les différences avec le code de la brique 4*2 réside dans les dimensions et le support de la brique. Au niveau des dimensions, celle-ci étant moitié moins large que la brique 4*2, elle ne nécessite qu'une seule rangée de cylindres positionnés sur le dessus de la brique, ce qui signifie que le translate du deuxième bloc ne comporte qu'une seule variable, qui se situe dans l'axe x. Au niveau des supports, la brique 4*1 étant plus fine, les. cylindres de supports sont en conséquences plus petit et surtout, ils ne sont pas creux, c'est pourquoi l'on à enlevé la différence dans le 3ème bloc. Voici le rendu de la brique 4*1 : Voici le rendu post-impression, réalisé en paramètre rapide, en PLA avec une épaisseur de 2 mm Comme vous pouvez l'observer, l'impression a été un succès, mais la qualité de l'impression est assez moyenne, la plupart des supports internes se sont cassé lors de la sortie de l'imprimante et la brique 4*2 est très fragile. Je recommande donc d'utiliser un meilleur paramètre de qualité d'impression que celui d'impression rapide. Projet Personnel de Milo Reiss Ramdani Medhurst TOKEN OF NEW PHYREXIA CREATION (projet 2d) Informations Milo Reiss Ramdani Medhurst b.rmmedhurst@gmail.com CMI Physique 21/04/2024 Contexte Je suis fan du jeu de cartes Magic: The Gathering et en vu de mon UE SXPFL je vais créer un token 2d du symbole "Phyrexian" (type de créature dans l'univers de ce jeu de carte). Matériel utilisé 1 planche de bois CP Bouleau (dimensions 330 × 330 × 3 mm) Découpeuse laser Logiciel de design 2d: Inkscape Objectif : l’objectif peut être décomposé en plusieurs parties : Créer un cercle noir et pas rempli Insérer une droite verticale passant par le milieu du cercle. Attacher “All Will Be One” au cercle Création du cercle Pour créer le cercle étape par étape : Insérez cercle. Sélectionner le cercle et appuyer sur “stroke styles” ou simplement faire Ctrl+Shift+F Aller sur l’onglet “stroke paint” puis appuyer sur “flat colour” afin d’avoir un extérieur de cercle visible. Aller sur l’onglet “stroke style” et mettre l’épaisseur à 2.124 Sélectionnez le cercle, puis enlevez le remplissage en appuyant sur le symbole de croix en bas à gauche Création de la droite Pour créer la droite étape par étape : Insérez un rectangle de hauteur 140. Mettez l’épaisseur du rectangle à 0.177 Pour placer la droite de façon à traverser le milieu du cercle, vous pouvez localiser les coordonnées du centre du cercle puis placer le milieu de la droite à ce point-là. Cependant, placer la droite à un endroit vraisemblable à la moitié du cercle marche aussi. Texte attaché : Pour créer le texte attaché au cercle : Insérez un texte “All Will Be One” en sans-serif et de police 36.5732 Sélectionnez le cercle, appuyez sur “path” en haut à gauche et appuyez sur “object to path” Sélectionnez le cercle, appuyez sur Shift et sélectionnez le texte. Appuyez sur l’onglet “text” en haut à gauche, puis appuyez sur “put on path” Ajustez le texte sur le cercle de façon à ce que la droite passe entre les mots “Be” et “Will” Tada! Gyroscope de la new Phyrexia (projet 3d) Informations Milo Reiss Ramdani Medhurst b.rmmedhurst@gmail.com CMI Physique 21/04/2024 Contexte Je suis un grand fan et joueur du jeu de carte Magic: The Gathering depuis mes 8 ans. Mes créature préférées dans l'univers de ce jeux de cartes sont les phyrexians. Donc en vu de mon UE SXPFL et de ma passion pour l'astrophysique, j'ai décidé de travailler sur un projet 3d qui regroupe ces deux passions. Objectif Créer un gyroscope (non fonctionnel) sous le theme de la New Phyrexia. Matériel PLA Machine utilisée Imprimantes Raise3D Pro2 Réalisation Ouvre OpenScad : Le symbol Phyrexian : cylinder(150,0,0) Tout d’abord, tu commences par faire un symbole phyrexian. Simple, tu vas créer un cylindre de rayon 4 et de hauteur 150. Pour faire apparaitre le cercle, tu fais la difference entre un cercle de rayon 50 et un cercle de rayon 45, comme ca tu as ton cercle creux fin. Puis tu le fais tourner de 90 degrés selon z et tu le remonte jusqu’a la moitié de la hauteur du cylindre. difference(){ rotate([90,0,0]) translate([0,75,0])circle(50); rotate([90,0,0]) translate([0,75,0])circle(45); } Ok, maintenant tu as ton symbole phyrexian en 2d erigé vers le haut. Mais en effet il y a un tout petit probleme. Généralement le symbole fait des “vagues” selon le cylindre (personellement je prefere quand il n’y a pas de vagues, ca fait plus Elesh Norn) mais ici on vas ajouter les vagues. Pour ce faire, nous allons soustraire pleins de petites spheres au cylindre. On va soustraire un cercle de rayon 3.7 déplacer de 4 selon l’axe x. Pour les vagues, nous allons faire cela symétriquement selon l’axe x puis diagonallement symétriquement selon l’axe y, en avançant de 4 en 4. Plus simplement le code pour les spheres va ressembler a translate([(-1)^k *4, 0, 4k])sphere(3.7) Pour le cylindre en question, le code final ressemble a ceci: difference(){ cylinder(150, 4, 4); translate([4,0,0])sphere(3.7); translate([-4,0,4])sphere(3.7); translate([4,0,8])sphere(3.7); translate([-4,0,12])sphere(3.7); translate([4,0,16])sphere(3.7); translate([-4,0,20])sphere(3.7); translate([4,0,24])sphere(3.7); translate([-4,0,28])sphere(3.7); translate([4,0,32])sphere(3.7); translate([-4,0,36])sphere(3.7); translate([4,0,40])sphere(3.7); translate([-4,0,44])sphere(3.7); translate([4,0,48])sphere(3.7); translate([-4,0,52])sphere(3.7); translate([4,0,56])sphere(3.7); translate([-4,0,60])sphere(3.7); translate([4,0,64])sphere(3.7); translate([-4,0,68])sphere(3.7); translate([4,0,72])sphere(3.7); translate([-4,0,76])sphere(3.7); translate([4,0,80])sphere(3.7); translate([-4,0,84])sphere(3.7); translate([4,0,88])sphere(3.7); translate([-4,0,92])sphere(3.7); translate([4,0,96])sphere(3.7); translate([-4,0,100])sphere(3.7); translate([4,0,104])sphere(3.7); translate([-4,0,108])sphere(3.7); translate([4,0,112])sphere(3.7); translate([-4,0,116])sphere(3.7); translate([4,0,120])sphere(3.7); translate([-4,0,124])sphere(3.7); translate([4,0,128])sphere(3.7); translate([-4,0,132])sphere(3.7); translate([4,0,136])sphere(3.7); translate([-4,0,140])sphere(3.7); translate([4,0,144])sphere(3.7); translate([-4,0,148])sphere(3.7); translate([4,0,148])sphere(3.7); } Le gyroscope: Pour transformer ce beau symbole phyrexian en gyroscope nous allons copier la figure puis la translater jusqu’a la moitié de la hauteur du cylindre, et tourner la nouvelle figure de 90 degrés selon l’axe x. Pour ce nous allons ajouter “translate([0,75,75])rotate([90,0,0]){“ devant le meme code copié collé. 4. Allez propager la perfection de la New Phyrexia. Groupe B4 Nom et Prénom: Emile WHEWELL Paul BELLENGER Lucien FIQUET Gabriel WERNAIN Cursus: CMI-PHY-B Séance 1 Pour notre Première séance du Projet FabLab consistait à nous faire découvrir les lieux, nous avons notamment visité les différentes salles. Il y avait la salle à imprimantes 3D, la salle à Menuiseries, la salle électronique et la salle à découpe. Notre professeur Vincent Dupuis nous a aussi expliqué l’origine du FabLab mais aussi le déroulement des séances lors de ce semestre. Salle à imprimantes 3D Hall Principale Côté détente Séance 2 Durant cette séance, on a appris à utiliser de nouveaux moyens de conceptions grâce à des logiciels de modélisation (Inkscape, OpenScad, Freecad,...) pour s'en servir afin de concevoir des objets avec l'aide d'imprimante 3D. En effet, de la modélisation logicielle au fonctionnement de l'imprimante et de ses paramètres, Vincent Dupuis nous a tout passé en revue. (Impression 3D d'un projet) Séance 3 Lors de cette séance, nous avons eu un premier contact avec des technologies "emportées", à savoir des cartes Arduino. Nous avons dû apprendre à effectuer des programmes basiques sur celles-ci, comme les faire clignoter. Dans ce cours nous avons vu dans un premier temps, comment marchait les cartes Arduino. Après nous avons vu le plus intéressant comment les programmées. Ce qui est fascinant car cela peut nous permettre de le faire cher nous et de nous faire nos propre projet tout seul, facilement. Moyennent tout de même en acheter une. De plus, comme pour les autres logiciels, celui pour programmé les Arduino est open source, donc pas besoin d’acheter le logiciel. Pour finir, on a vu comment utilisé les impriment 3d dans le cadre du fablab a Sorbonne université. Et certain on profité de cela pour lancer leur propre impression de lors projet personnel. Objet qu’il avait réalisé, sur les logiciels qu’on avait vu au dernier cours. On a notamment eu le droit a l'impression d'une réplique d'une rame de RER                                    Séance 4 Durant cette séance, nous avons commencé à chercher pour notre projet. Nous avons opté pour un détecteur de force qui relâche quelque chose à partir d'une valeur seuil. Soit en d'autre mot une mine ! En effet, notre détecteur de force détecterai le poids qui est on le rappel une force (P=mg avec g=10 m/s^-2). On aurait donc un balance qui a partir d'un poids critique lâcherai des confettis, de l'eau ou bien de l'huile. Nous avons fait un prototype, dont voici une photo Pour ce system nous avons utilisé un capteur Grove - Round Force Sensor (FSR402), qui fonctionne grâce a deux plaque conductrice sépare par un espace d'une épaisseur h, et tout l'astuce tient en le faite que lorsque qu'on applique un force F sur ce capteur l'épaisseur h diminue, diminuant ainsi la résistance entre les deux plaque conductrice, c'est cela que le capteur capte et c'est aussi cela que renvoi le capteur. Ceci entraine que les valeurs de sortie ne sont pas des newtons ou de kg, mais cela n'est pas grave car la valeur de sortie dépend quand même des newton. On a donc simplement a nous même calibre ce capteur. Pour avoir le code qui fait fonctionne le Round Force Sensor, nous avons chercher sur internet. Nous l'avons trouve sur le site simple duino /* How to use a Force sensitive resistor to fade an LED with Arduino More info: http://www.ardumotive.com/how-to-use-a-force-sensitive-resistor-en.html Dev: Michalis Vasilakis // Date: 22/9/2015 // www.ardumotive.com */ //Constants: const int ledPin = 3; //pin 3 has PWM funtion const int sensorPin = A0; //pin A0 to read analog input //Variables: int value; //save analog value void setup(){ pinMode(ledPin, OUTPUT); //Set pin 3 as 'output' Serial.begin(9600); //Begin serial communication } void loop(){ value = analogRead(sensorPin); //Read and save analog value from potentiometer Serial.println(value); //Print value value = map(value, 0, 1023, 0, 255); //Map value 0-1023 to 0-255 (PWM) analogWrite(ledPin,255-value); //Send PWM value to led delay(100); //Small delay Séance 5 Durant cette séance, nous avons en quelque sorte finalisé (le) notre prototype (de plaque pour permettre de poser des objets et  les mesurer) de notre balance. (Nous avons aussi commencé à conceptionner notre boite via l'imprimante 3D.) On peut voir ci-dessous un schéma de la  version finale. On remarquera que le capteur ce trouve en bas du cylindre. Ceci permet d'après nos expériences d'avoir une mesure plus précise. En effet, le pilier ayant un diamètre exactement égale au diamètre du capteur, il permet de mettre tout le poids de l'objet sur le capteur et donc de réellement capté tout le poids de l'objet. * Vu qu'on rappel que notre objet n'est pas une simple balance mais un mine ! Nous avons voulu rajouter a notre projet un moteur pour pouvoir éjecter a l'aide d'une hélice des confettis. Pour cela nous sommes aller dans un premier temps chercher des moteurs dans le fablab pour voir si il possédait des moteurs susceptible de nous intéressé. Dans un premier temps nous avons trouvé ce moteur : Malheureusement, le moteur s'avère être trop faible pour pouvoir propulser quoique ce soit même en le calibrant au maximum de sa puissance. En cherchant sur internet, nous avons trouver le code relier au servomotor. #include "Servo.h" Servo servo; // création de l'objet "servo" void setup() { servo.attach(10); // attache le servo au pin spécifié } void loop() { servo.write(1000); // demande au servo de se déplacer à cette position delay(100); } Séance 6 Dans cette séance nous avons voulu découper dans un premier temps la boite. Cependant, nous avons rencontre plein de problème pour découper cette boite. En effet, pour la faire a la bonne taille on devait la découper en plusieurs fois. Sauf que problème quand on découpait en plusieurs fois c'est que la découpeuse ne faisait pas exactement la même taille ce qui nous empêchais d'assemble correctement la boite. Pour faire le model de la boite, nous avons utilise ce logiciel en ligne : Make A Box: Generate Laser Cutter Templates for Enclosures! En effet, ce logiciel nous a été conseiller par le prof car il permet d'avoir rapidement un model de boite de n'importe quel taille. Séance 7 Lors de cette séance, nous avons réussi des les premières minutes (et oui en seulement 10 minute !!) a faire cette boite dont nous avons eu tellement de mal a faire. dont voici une photo : Cependant le soucis avec cette boite c'est la taille. En effet, les est trop petit, pour un raison assez simple c'est que une boite de la taille qu'on avait prévu de découpe au départ est trop grande pour la découpeuse laser du fablab on a donc du crée une boite plus petite. On a donc du pour remédier a ce problème réimprimé notre pilier, pour un pilier plus petit (6,3 cm de haut contre X) et nous allons découper aussi une autre boite plus petit, pour y mettre les confettis et le moteur a propulsion des confettis. De plus, lors de cette séance nous avons voulu calibre notre capteur de force. Pour cela nous avons pris une balance et deux bouteille d'eau ainsi que le système pilier plus capteur. Cependant on c'est rendu compte d'un phénomène plutôt intéressant. Le capteur envoi un signale de plus en plus élevé si on laisse l'objet longtemps dessus. Soit la valeur renvoyé par le capteur dépend du temps. On a quand même fait quelque mesure, mais on a pas eu le temps de finir a cause de la durée des séances. Nous avons reproduit chaque mesure 3 fois pour une plus grande précisions et pour pouvoir mesure facilement une incertitude. Pour les valeurs de sortie nous avons pris la moyenne des valeurs. Pour faires ces mesures nous n'avons pas utilisé notre création car celle si n'étais pas encore fini. Nous avons don utilise un système. Nous avons pris une bouteille d'eau car avec l'eau c'est simple de faire varie le poids ! Nous avons bien évidemment utilise un balance car pour pesé un objet ca reste le top. Ci-dessus une photo de  notre système: Séance 8 Pour cette séance nous voulions commencer par refaire le pilier. En effet, celui que nous avions fait la séance précédant a eu un défaut de fabrication. Ce qui a fait qu'il a cassé. Pour ne pas perdre de temps a réimprime en trois D un nouveau pilier, nous avons pris la décision de découper le pilier trop grand que nous avions pour qu'il soit a la bonne taille. Pour cela, nous avons utilise une simple scie a bois classique. par la suite nous avons continue a chercher comment augmenter la puissance de notre Arduino pour correctement alimenter notre moteur. Pour cela nous avons décide de souder plusieurs pile entre elle. En effet, nous avions essaye avec 4 piles mais même la ce n'étais pas assez puissant ! On sait donc dit que vu la loi des nœuds si nous mettions plusieurs pile en séries alors la nous aurions assez de puissant vu que les puissances des piles allais s'additionnés. On les a donc souder ensemble a l'aide d'un fer a souder. Pour cela on a utilise un fil en mental spécialement fait pour la soudure. En effet, une membre d'un autre groupe nous a dit que la température de fusion des câbles électriques était plutôt élevé contenue de l'effet joules, il était donc plus simple d'utiliser un autre câble pour souder. Sceance 9 Dans cette séance, il nous restait plus qu’a finalisé le projet. En effet, notre travail, qu’on avait rudement mené, avait payé et on entrevoyait enfin les derniers composant de notre création s’emboîter. Dans cette séance nous avions donc fait la To-do liste suivant: Faire un trou dans notre boîte pour laisser le fils de l'Arduino passer et pouvoir enfin relier nos deux boite résoudre notre problème avec qu’on avait avec notre moteur. faire une grille pour éviter que le polystyrène retourne en l’hélice ressayer d'étalonne notre capteur Pour faire le trou, ça a été un chantier peu fastidieux. Moi (Gabriel) et mon vaillant camard (Émile) nous sommes partis en exil dans le coin menuiserie du fablab, pour à l’aide d’une perceuse percer sans merci ce magnifique bois qui composait le mur du fond de notre boîte. Hélas, aucun des nombreux forets que nous avions trouvés sur le chemin de notre exode ne possédait la taille du trou que nous voulions faire. Nous avons donc dû penser à une solution, percer beaucoup de petits trous avec un foret plus petit pour faire notre grand trou. Là, on pourrait se dire que notre périple arrive à son permis. Après tous, rien de plus simple que percer un trou avec une perceuse. Mais c’était sans compter notre bravoure inconsciente ! En effet, nous avions fait une des plus graves erreurs quand l’on veut se jouer menuisier, nous tenions la perceuse a une main ! L’autre servant à stabiliser la boîte. Entraînant un risque, un risque qui heureusement nous n’ai pas arrivé ! Un risque, pour lequel un enseignant est venu nous prévenir en courant ! On pouvait se percer la main. Pour éviter ce danger, il fallait utiliser la méthode s'salvatrice suivante: fixe a l'aide de clef la boite a l'établie et ensuite percer mais a deux mains ! de tel sorte que la machine puise plus nous déraper sur notre autres mains, ce qui nous aurait probablement fait ressemblé à notre bebe, notre boite. Par la suite, on a essaye 12c Motor driver TB6612FNG on a essaye que arduino relai Pour continuer, vers la fin du cours on a essayer d'étalonner capteur. Pour cela, on a refait le même système que plus haut ce qui nous a donnés ces valeur ( la valeur pour 50g à disparue du a un problème technique) les barres d'erreurs ne ce vois pas du a leur taille, face a l'échelle du graphique et la taille du point tout les graphique suivant sont les valeur du capteur pour un poids donné, en pensant que la balance est a une précision de 1g, les incertitudes des moyennes sont tous a 6 aussi écart type de population de17, moyenne de 446,7, ecart type de 0,8, valeur moyenne de 65 ecart type de 16.3, valeur moyenne 495 ecart type de 24.8, valeur moyenne de 455 ecart type de 12.2, valeur moyenne de 500 ecart type de 19.3 , valeur moyenne de 491,66 Projet personnel Paul Bellenger Pour ma partie sur l'impression 3D j'ai voulu faire l'icone du jeu Waven auquel je joue en ce moment il s'agit d'un cube bleu avec un W en relief autour j'ai décidé de le faire sur le logiciel Blender car j'avais envie de le tester et de voir comment on l'utilisait.pour faire le logo j'ai donc procédé en traçant un W sur sur le Cube puis j'ai ensuite extruder les faces j'avais désormais mon super objet de fini mais mais je voulais l'imprimer en deux couleurs pour qu'il soit encore plus ressemblant au logo de Waven mais j'étais donc face à un problème : Si je l'imprime en deux couleur avec ce fichier il y aura énormément de changements de couleur lors de l'impression ce qui entraîne beaucoup de filament gâché ainsi qu'un temps d'impression beaucoup plus long. j'ai donc choisi de séparer le W du cube de base pour pouvoir faire deux impressions j'ai ainsi pu lancer mes deux impressions qui se sont bien passé avec seulement un petit défaut sur le W que je pourrais poncer (en haut à droite) Pour la partie avec la découpeuse laser j'ai décidé de faire une gravure d'un plan de fabrication d'un robot qu'on retrouve dans le jeu Portal j'ai donc mis l'image ci dessous dans Inkscape et j'ai ensuite procédé par vectorisation j'ai choisi de vectoriser par contour car si je vectorisait par degré de couleur je perdais les traits fins comme dans les pieds de la tourelle ou encore les mesures, Malheureusement procédé par contour me faisait perdre un peu de la résolution.je me suis ensuite assuré que tout était bien noir pour que la découpeuse laser comprenne qu'il faille seulement faire une gravure et j'ai ensuite mis le fichier sur le logiciel. Si l'on se rapproche on voit que l'image n'était pas très bien résolue mais la gravure est très belle et je suis content du résultat final Projet personnel Lucien Fiquet Pour mon projet d'impression 3D, j'ai décidé de faire un objet assez commun mais pas trop facile non plus. Un avion m'a paru une bonne idée sur un coup de tête et j'ai commencé à écrire le programme sur OpenSCAD. En commençant, je suis parti du plus facile vers le plus dur pour faire quelques ajustements à la fin. $fn=50; module base (){ rotate([0,90,0])cylinder(10,1,1); translate([10,0,0])rotate([0,90,0])cylinder(3.5,1,0.6); translate([13.5,0,0])rotate([0,90,0])cylinder(0.2,0.6,0.5); translate([13.7,0,0])rotate([0,90,0])cylinder(0.1,0.5,0.1); translate([-0.8,0,0])rotate([0,90,0])cylinder(0.8,0.7,1); translate([5,1.7,0])rotate([0,90,0])cylinder(2,0.5,0.4); translate([5,3.1,0])rotate([0,90,0])cylinder(2,0.5,0.36); translate([5,-1.7,0])rotate([0,90,0])cylinder(2,0.5,0.4); translate([5,-3.1,0])rotate([0,90,0])cylinder(2,0.5,0.36); }; translate([0,0,0.5])polyhedron( points=[[0.3,0,3], [0,0.5,0.3], [0,-0.5,0.3], [4,0,0.5]], faces=[[0,2,1],[1,2,3],[3,0,1],[2,0,3]] ); module wings (){ translate ([5.5,0,0.3])polyhedron( points=[[-1,7,0], [-2,0.5,0.5], [-2,0.5,-0.3], [5,0,0]], faces=[[0,1,2],[1,3,2],[3,1,0],[3,0,2]] ); translate ([5.5,0,0.3])polyhedron( points=[[-1,-7,0], [-2,-0.5,0.5], [-2,-0.5,-0.3], [5,0,0]], faces=[[1,0,2],[1,2,3],[0,1,3],[0,3,2]] ); }; module swings(){ translate ([0,0,0])polyhedron( points=[[0,-2.5,0], [0,0.5,0.5], [0,0.5,-0.3], [4,0,0]], faces=[[1,0,2],[1,2,3],[3,0,1],[3,2,0]] ); translate ([0,0,0])polyhedron( points=[[0,2.5,0], [0,0.5,0.5], [0,0.5,-0.3], [4,0,0]], faces=[[0,1,2],[1,3,2],[1,0,3],[3,0,2]] ); }; //translate ([30,0,0])polyhedron( //points=[[1,0,4], [0,0.5,0.3], [0,-0.5,0.3], [4,0,1]], // faces=[[0,1,2],[1,2,3],[3,0,1],[3,0,2]] // ); //translate([30,0,0])cube([4,4,25],center=true); //translate([30,7,0])cube([4,4,25],center=true); base(); wings(); swings(); J'ai donc d'abord commencé par le module que j'ai appelé "base", pour simuler le corps de l'avion avec une succession de cylindre pour y donner forme, auxquels j'ai plus tard rajouté des moteurs se situant sous les ailes. Ensuite est venue la partie compliquée, j'ai utilisé la fonction "polyhedron" pour les ailes ce qui s'est révélé être une torture. Pour l'utiliser il faut définir une combinaison de points formants les sommets de la figure, puis définir les faces en fonction des sommets auxquelles elles sont jointes. Mais après cela, il faut également vérifier que les sommets sont définis dans le sens horaire de la face, sans quoi on peut avoir un aperçu mais pas de rendu car c'est comme si la face était à l'envers. Et je m'estime heureux car je n'ai fait que des formes à quatre sommets et quatre faces, simplifiant ainsi la chose pour les ailes. Celles-ci sont divisées en trois groupes : les deux principales définies dans le module "wings", les deux horizontales arrières définies dans le module "swings" pour "small wings" car j'ai oublié l'existence du mot aileron et la dernière définie hors module car je n'avais plus de nom. Ce qui nous donne ce résultat : Cela ne paye pas de mine et nécessitera un peu de support au niveau des ailes, mais je suis plutôt satisfait du résultat. Voilà maintenant à quoi cela ressemble en vrai : Le fil a eu un léger problème au niveau du dessous des ailes mais cela reste globalement une réussite. Pour mon projet de découpe 2D, je suis parti d'une image d'une œuvre que j'aime beaucoup et je l'ai retouchée sur le logiciel Inkscape. J'ai modifié le grain pour obtenir un contraste moins flagrant sur la gravure, modifié légèrement l'ombrage, et rajouté un cadre de découpe pour avoir une pièce centrée. Voilà le résultat : Je suis entièrement satisfait du résultat. Il y a un petit défaut du bois mais ça n'a pas non plus déformé l'image. Projet personnel Gabriel Wernain Imaginez-vous un monde où vous découvrez une super application qui vous permet de transformer votre tablette en deuxième écran, mais hélas, vous n’avez pas de quoi maintenir votre tablette en position écran d’ordinateur. Ne serait-ce pas un monde frustrant, un monde où votre bonheur serait enchaîné par ce contre-temps? C’est pour cela que j’ai employé mon projet 3D à faire un support pour mon iPad de telle sorte que mon bonheur soit enfin complet. Pour cela, j’ai utilisé le logiciel Openscade. J’ai fait ce code (il est intéressant de noter que le code est à échelle 1=1cm. De plus, les mesures sont faites de telle sorte que ma tablette puisse tenir dans les deux sens.): cube([13,2,1]); translate([3,-5,0])rotate([0,0,90])cube([15,3,1]); translate([13,-5,0])rotate([0,0,90])cube([15,3,1]); rotate([270,0,0])cube([3,2,1]); translate([0,2,0])rotate([270,0,0])cube([3,2,1]); translate([10,0,0])rotate([270,0,0])cube([3,2,1]); translate([10,2,0])rotate([270,0,0])cube([3,2,1]); ce qui m’a donné ce résultat : le résultat après impression a donné cela : Pour mon projet 2d j'ai aussi réfléchi a qu'est-ce qui pourrait être fait avec la découpeuse laser est qui pourrait m'être utile. Il se trouve que je joue à un jeu de cartes nommé YU-GI-OH. Or ma passion me fait toujours acheter une quantité indécente de cartes. Entraînant systématiquement la recherche d'endroits où les ranger. C'est pour cela que j'ai découvert qu'on pouvait faire des boîtes avec la découpeuse laser j'ai foncé sur cette option. Pour faire la boîte j'ai utilisé le site Make A Box: Generate Laser Cutter Templates for Enclosures! qui génère automatiquement des boîtes. Une fois, mis le patron mis sur inskape cela m'a donné ça: Hélas, je n'ai pas de photo de ma boîte à vous présenter, car ayant réussi mon projet j'ai voulu me vanter auprès de mes parents et comme si l’on avez voulu me punir de ma vantardise, j'ai oublié ma boîte chez mes parents. Mais voilà une photo que j'ai trouvée sur internet qui ressemble beaucoup au résultat que j'ai eu. Mon résultat ressemble a la boite de gauche. Projet personnel Emile Whewell Pour mon projet personnel, j'avais deux idées en tête qui m'était venue. La première était de faire une figurine d'un personnage, celui-ci était Perfect Cell. Mais je vite appris que le projet devais se faire par sois-même et non par une copy de fichier pris sur internet. J'ai donc opté pour mon deuxième choix qui était une épée lourde pris du manga Berserk. $fn=100; module Nuts(){ rotate([90,0,0])translate([0,0,3])cylinder(7,1,1); translate([0,-25,0])cube([12,30,2.5],center=true); rotate([90,0,0])translate([0,0,2])cylinder(1.5,1.5,1) ; }; module af1(){; translate([1,5,0])rotate([0,0,35])cube([2,5,31], center = true); translate([1,-5,0])rotate([0,0,145])cube([2,5,31], center = true); translate([-1,5,0])rotate([0,0,-35])cube([2,5,31], center = true); translate([-1,-5,0])rotate([0,0,-145])cube([2,5,31], center = true); }; module mamads(){; translate([0,-25,0])rotate([90,90,0])af1(); translate([0,-50,0])rotate([90,90,0])af3(); }; difference(){ Nuts(); mamads(); }; module af2(){; translate([1,0,-7.7])rotate([0,-55,0])cube([2,5,2], center = true); translate([-1,0,-7.7])rotate([0,55,0])cube([2,5,2], center = true); }; module af3(){; translate([2.5,4,-9])rotate([45,0,-25])cube(8, center = true); translate([-2.5,4,-9])rotate([45,0,25])cube(8, center = true); translate([2.5,-4,-9])rotate([45,0,25])cube(8, center = true); translate([-2.5,-4,-9])rotate([45,0,-25])cube(8, center = true); }; Je n'ai pas totalement finit au niveau de la pointe et au niveau du manche. Il faudrait que la pointe soit un peu plus "penché" et que le manche ai plus de details. Au final j'ai trouvé un moyen de rendre l'épée plus pointue et donner au manche plus de details. $fn=100; module Nuts(){ rotate([90,0,0])translate([0,0,2])cylinder(8,0.9,0.9); translate([0,-25,0])cube([12,30,2.5],center=true); rotate([90,0,0])translate([0,0,1])cylinder( 1.5,1.4,1) ; }; module af1(){; translate([1,5,0])rotate([0,0,35])cube([3,5,31], center = true); translate([1,-5,0])rotate([0,0,145])cube([3,5,31], center = true); translate([-1,5,0])rotate([0,0,-35])cube([3,5,31], center = true); translate([-1,-5,0])rotate([0,0,-145])cube([3,5,31], center = true); }; module mamads(){; translate([0,-25,0])rotate([90,90,0])af1(); translate([0,-50,0])rotate([90,90,0])af3(); }; difference(){ Nuts(); mamads(); }; module af2(){; translate([1,0,-7.7])rotate([0,-55,0])cube([2,5,2], center = true); translate([-1,0,-7.7])rotate([0,55,0])cube([2,5,2], center = true); }; module af3(){; translate([2.5,4,-9])rotate([45,45,-25])cube(9, center = true); translate([-2.5,4,-9])rotate([45,-45,25])cube(9, center = true); translate([2.5,-4,-9])rotate([45,45,25])cube(9, center = true); translate([-2.5,-4,-9])rotate([45,-45,-25])cube(9, center = true); }; module manche(){; rotate([90,0,0])translate([0,0,2.5]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,3.6]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,4.7]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,5.8]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,6.9]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,7]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,8.1]) cylinder(h=1,r1=1,r2=1); rotate([90,0,0])translate([0,0,9.2]) cylinder(h=1,r1=1,r2=1); }; manche(); Maintenant que j'ai finis mon projet personnel en 3D, il me reste plus qu'a l'imprimer. Je me suis aussi attaqué a mon projet en 2D qui consistait à utiliser l'application InkScape. Je me suis permis de decalquer une image que j'ai trouver sur internet et je n'ai donc plus qu'à utiliser la découpeuse laser. MU5BIQ01 - Projet scientifique et technique en "nutrition and health" Descriptif de l'UE Projet RIZOA Informations Nom et Prénom : Souad MAHIOUS (souad.mahious@etu.sorbonne-universite.fr), Liz NGUYEN (liz_yen_ny.nguyen@etu.sorbonne-universite.fr), Morgane LONGUET (morgane.longuet@etu.sorbonne-universite.fr), Angelina MARINI (angelina.marini@etu.sorbonne-universite.fr), François DRIEU (francois.drieu@etu.sorbonne-universite.fr) Cursus : Master 2 BIP, parcours Nutrition, Qualité et Santé (NQS). Date de début : 04/09/2023 Date de fin : --/01/2024 Description de la startup RIZOA est née du désir de réconciliation des enjeux économiques, environnementaux et nutritionnels auxquels les restaurateurs font face. Notre proximité avec les métiers de la restauration des enseignes du groupe Agapes nous permet d’appréhender les difficultés d’un secteur sous tension. Nous développons chez RIZOA une solution tech destinée aux restaurateurs en transition, avec le souhait de mettre le vivant à la racine de la chaîne de valeur de la restauration. Pour cela nous voulons équiper les acteurs de la restauration d’un outil de gestion pragmatique pour améliorer leur performance économique en s’engageant dans la transition alimentaire. Deux piliers majeurs de la transformation sont la capacité à délivrer aux restaurateurs de manière très simple une information pourtant particulièrement complexe, et faciliter l’accès à un approvisionnement plus durable qui respecte les contraintes logistiques et économiques. Problématique Pour permettre aux restaurateurs d’améliorer leur marge économique tout en diminuant l’impact environnemental, la végétalisation des plats revêt un enjeu majeur. Cependant, la végétalisation de l’alimentation s’accompagne généralement de l’augmentation du degré de transformation des produits (steaks végétaux, protéines de soja ultra transformées,…). Objectifs Définir un/des indicateur(s) d’ultra transformation des recettes qui soit adapté au client (simple mais rigoureux); Travailler sur des propositions de protéines végétales faciles et rapides d’utilisation en cuisine (importance de la faisabilité) et ayant un faible degré de transformation du produit. Pour cela, le restaurateur doit pouvoir conserver la typologie de cuisine proposée et la typologie d’ingrédients (exemple : travail des algues pour  les produits de la mer). Projet Paupiettes Informations Prénom et nom  Emma SKUDDER, Aurélie VIELRECOBRE, Louis MANIN Adresse mail : emma.skudder@etu.sorbonne-universite.fr ; aurelie.vielrecobre@etu.sorbonne-universite.fr ; louis.manin@etu.sorbonne-universite.fr Cursus / Laboratoire / Association : M2 BIP parcours Nutrition, Qualité et Santé Date de début - Date de fin estimée (ou réelle) : 04/09/2023 - __/01/2024 Contexte PAUPIETTES, c'est des repas frais, sains et gourmands spécialement conçus pour les enfants de +3 ans et livrés partout en France. La start-up travaille avec des experts de la nutrition pour mener à bien la mission : d'aider les parents à servir à leurs enfants des plats équilibrés, variés et tout ça le plus simplement possible. Plus qu'un plat, PAUPIETTES c'est une manière d'intéresser les enfants à ce qu'ils ont dans leur assiette grâce à des cartes ludo-éducatives offertes avec chaque plat.www.paupiettes.com PAUPIETTES, c’est donc des plats préparés, peu salés, frais, cuisinés avec des produits de saison et qui respectent l'équilibre alimentaire des enfants. Les plats se conservent entre 6 et 9 jours au frigo (conservation mise sous atmosphère protectrice).Les plats ont été élaborés par Olivier Chaput, ainsi que son équipe de nutritionnistes.Les parents commandent chaque semaine au minimum 6 plats sur le site internet et sont livrés la semaine suivante. Cela permet de ne produire que ce que l'on aura vendu et d'éviter ainsi le gaspillage alimentaire et la surproduction.Les recettes sont cuisinées par un traiteur partenaire. Objectifs - Nous souhaitons mettre en place un outil fiable et précis pour réaliser les valeurs nutritionnelles de l’ensemble des recettes. Aujourd’hui la start-up travaille avec des outils qui ne sont pas très précis qui ne convient pas à la start-up qui souhaiterait être plus précise pour les clients.- Concernant la DLC des recettes sous atmosphère protectrice, nous souhaiterions réaliser des tests de DLC pour chacune des recettes afin de vérifier si la DLC des recettes peut être pousser en toute sécurité, à 12 jours au lieu de 10, ce qui apporterait un avantage marketing fort et répondant davantage aux besoins des clients. Projet Eau Exquise Informations Prénom et nom : JOUET Auriane, GHANZOURI Karmen, HADJIJ Sherian Adresse mail : Auriane.jouet@etu.sorbonne-universite.fr    karmen.ghanzouri@etu.sorbonne-universite.fr      sherian.hadjij@etu.sorobnne-universite.fr Cursus / Laboratoire / Association : Master 2 BIP parcours nutrition, qualité et santé Date de début - Date de fin estimée (ou réelle) : 04/09/2023 - /01/2024 Contexte Eau exquise est une Start-up innovante qui crée des aromatisants d'eau naturels ultraconcentrés, nomades, pratiques et légers faits à base de recettes de jus concentrés, extraits de fruits et végétaux, infusions de fruits et arômes naturels. Ces aromatisants sont sans sucre, sans édulcorants, sans colorant, sans matières animales, sans gluten. Objectifs Les objectifs sont de d'offrir une signature gustative légère à l'eau et en transformant le simple est de désaltération en moment de plaisir subtile et raffiné, de proposer une façon de boire plus d'eau du robinet, de diminuer l'empreinte carbone, de proposer une alternative saine aux boissons sucrées en tous genres et donc de consommer moins de sucre, moins de plastique, plus d'eau avec plaisir l'esprit tranquille. Projet Sagya Projet SAGYA Informations : Elèves : Théo CHAN (theochan01@gmail.com), Yara GERGI (yaragergi87@gmail.com), Eléonore LEULLIER-SWARTWAGHER (leoleullier@gmail.com), Axel RANSON (axelranson78@gamil.com) Responsable :  Odile CASTAGNE (oca@casa-veg.com) Cursus : Master 2 BIP, parcours Nutrition, Qualité et Santé (NQS). Start-up : CASA VEG' Description de la startup et de l’activité : Sagya est une start-up qui développe des plats à haute valeur nutritive à base de protéines végétales naturelles et animales bas carbone. Ces plats, appelés Green Boc’, sont distribués dans hôtels et entreprises à travers des frigos connectés, un nouveau service de restauration d’entreprise. Ces plats sont élaborés afin d’être riches en fibres, minéraux, vitamines, pauvre en graisses saturées et à Indice Glycémique (IG) bas. Nous possédons également 2 points de vente - communément appelés salad’bar - dans le 15ème et le 5ème arrondissement. Dans l’optique d’une amélioration continue de la qualité protéique de nos plats à haute valeur nutritive, nous développons une farce à base de sources de protéines végétales naturelles, sans additifs ni ultra-transformation. Cette farce sera ensuite utilisée pour préserver le potentiel nutritionnel de nos plats. Elle pourra également être commercialisée auprès d’industriels ou restaurants désireux de cuisiner des plats végétariens à haute valeur protéique. Description du projet et de la problématique envisagée : Objectif : Améliorer la valeur et la qualité nutritionnelle de la farce végétale par procédé de fermentationMU5BEB41 - Environnement et éco-innovation végétales (EPET) Descriptif de l'UE Nova genetic - Conception et utilisation de capteurs climatiques pour le développement d’un Outils d’Aide à la Décision OAD Projet réalisé en co-working avec NOVA GENETIC par les étudiants : Bertin Léandre ,leandre.bertin@etu.sorbonne-universite.fr, Munier Anthony, anthony.munier1@etu.sorbonne-universite.fr Encadré par novagenetic : Salah FGAIER (Chargé de projet de recherche, Research project manager), salah.fgaier@novagenetic.com Clément ALESTRA (coordinateur chef de culture), clement.alestra@novagenetic.com Présentation de l’entreprise Nova Genetic est le pôle Recherche & innovation du groupe Novalliance France. Nous sommes spécialisés dans les zones tropicales et subtropicales principalement pour la zone sub- saharienne de l’Afrique de l’Ouest.Notre ambition est d’être créatif et innovant, à travers la sélection de nouvelles variétés performantes. Mais, nous souhaitons également faire avancer l’agriculture face aux grands défis du futur, comme l’adaptation des cultures, le changement climatique, la rareté de l’eau, la salinisation des sols, etc. Toujours dans l’optique de mettre à disposition de nos paysans des variétés performantes adaptées à leurs conditions, respectueuses de l’environnement et à un coût abordable. Contexte L’agriculture de précision est devenue essentielle pour relever les défis liés à la demande alimentaire croissante et à l’adaptation au changement climatique. Elle permet de mieux comprendre et à s’adapter à ces changements, en prenant en compte les données météorologiques et en ajustant les pratiques agricoles en conséquence. Les avancés technologiques ont rendu l’agriculture de précision plus accessible et plus efficace. Dans ce cadre, nous nous intéressons actuellement au développement des outils d’aide à la décision pour nos stations de recherche en Afrique. Afin de mieux répondre aux exigences environnementales et techniques de nos sites, nous souhaitons développer et utiliser des capteurs fiables, efficaces et rustiques. Les données collectées de ces capteurs serviront à la création des outils d’aide à la décision. Période : du  01/09/2023  au 30/01/2024 Objectif : Conception et utilisation de capteurs climatiques pour le développement d’un Outils d’Aide à la Décision OAD Démarches: Réalisation d’une étude bibliographique et technique sur les capteurs utilisés en agriculture, essentiellement les capteurs climatiques Réflexion autour de la conception des prototypes des capteurs climatiques dans les ateliers de FabLab (Arduino, capteurs à bas coût, etc) Réalisation des premiers tests de mesure avec les capteurs dans la serre de Sorbonne Université Conception d’une base des données pour la collecte des mesures réalisés Réflexion sur la création d’un modèle agronomique dont le but de l’intégrer dans un outil d’aide à la décision Matériaux / Outils / Machines : Capteurs Arduino, sondes et abris, imprimante 3D, Serre de SU, base de données. Journal de bord : tenu en interne Aglae - Optimisation de l'absorption de fluorochrome chez les plantes pour obtenir des plantes vivantes luminescentes dès le stade de la graine/bouturage jusqu'à la plante adulte Aglae - Optimisation de l'absorption de fluorochrome chez les plantes pour obtenir des plantes vivantes luminescentes dès le stade de la graine/bouturage jusqu'à la plante adulte Projet réalisé en co-working avec Aglae et des étudiants du Master Biodiversité, Écologie et Évolution parcours Écophysiologie et écophysiologie (EPET) de Sorbonne Université. Contacts étudiants : DEHAUDT Alexis : alexisdehaudt1@gmail.com GOURY Kilian : kilian.goury@gmail.com ROYON Léa : lea.royon6@gmail.com Contact partenaire Aglae : MURIETTA Ingrid, responsable R&D : ingrid@design-aglae.com Présentation de l’entreprise : Aglaé a mis au point un sérum nutritif sans modification génétique, qui permet à de véritables végétaux de s’illuminer sous lumière noire, à l’aide d’une lampe UV. Ce sérum est absorbé par capillarité dans les racines par le végétal, ce qui révèle les nervures naturelles des pétales et des feuilles. Nos perspectives de recherches s’instaurent dans une démarche environnementale. Objectif : Conceptualisation et mise au point d’un protocole qui, à terme, permettrait de produire des plantes vivantes luminescentes dès le stade graine/bouture. Méthode : Étude bibliographique afin de choisir les espèces et mettre en place un protocole Mise en place d’un protocole de culture in vitro Préparation du milieu de culture avec une concentration optimale en fluorochrome Culture in vitro et sélection des graines qui absorbent le mieux Acclimatation des plantes Mise en culture contrôlée dans un environnement de culture classique Suivi de la capacité à être luminescentes Période : Du 01/09/2023 au 31/01/2024 Cueillette Urbaine - Suivi de croissance d'une culture sur toiture de Curcubitaceae sur différentes épaisseurs de substrat organique Projet réalisé en co-working avec l'entreprise Cueillette Urbaine et les étudiants du Master 2 BEE Ecophysiologie et Ecotoxicologie (EPET) de Sorbonne Université. Contacts étudiants : ANNIBAL Alizée ; BERRAHOU-BOISSEAU Bilal ; MONTEIRO Gwendoline & SOUBESTE Marine Contacts Cueillette Urbaine : BUREL Arnaud & GIRARDON Julien Contacts Sorbonne Université : BAILLY Christophe ; HUBERT Steve & SAVOURÉ Arnould Projet : Faire le suivi de croissance d'une espèce de courgette (Curcubitaceae) sur différentes épaisseurs de substrat organique dans le cadre de toiture végétalisée en milieu urbain Présentation de Cueillette Urbaine : Cueillette Urbaine est une entreprise qui œuvre pour le développement de l’agriculture et de ses bienfaits en milieu urbain. Nous avons pour objectif de concevoir, installer et exploiter des espaces de production maraîchère sur des toits, des terrasses, des cours... Notre activité principale consiste en l’exploitation de fermes urbaines productives et écologiques en ville. Nous développons également des offres de services sur les thèmes du lien social et de la cohésion d’équipe, au moyen de potagers participatifs, d’ateliers de team building autour de la cuisine de saison et du jardinage permaculturel. Nous avons aussi un pôle R&D où nous traitons des sujets afin de répondre à différents enjeux et contraintes agronomiques et logistiques. Contexte et objectif du projet : La principale problématique des cutlutures sur toiture en milieu urbain est la limite de portance. L’objectif de ce sujet est de réduire au maximum l'épaisseur de substrat des cultures tout en ayant des rendements intéressants. Méthodes et Matériels : Etude bibliographique sur l'état de l'art des toitures végétalisées Elaboration d'un protocole de culture de courgettes allongée goldy F1 Bio (Agrosemens) (Cucurbita pepo L.), sous serre à Sorbonne Université, afin de tester 5 épaisseurs de substrats : 15, 20, 25, 30 et 40 cm. Mise sur plaque percée des semences puis semis dans des pots Mesures et suivi des paramètres morphologiques des plantes Traitements et analyses des données Période : Du 01/09/2023 au 22/12/2023IEES - Transformation de biodéchets d'ananas en matériau permettant la rétention d'eau Projet réalisé en co-working avec le laboratoire IEES et des étudiants du Master Biodiversité, Écologie et Évolution parcours Écophysiologie et écophysiologie (EPET) de Sorbonne Université. Contacts étudiants : LEBOT Tanguy : tanguylebot94@gmail.com FONTIMPE Laure : lfontimpe@gmail.com LAPALU-DELORD Odilon : lapaluodilon@gmail.com Contact technicien LCMCP : HAYE Bernard : bernard.haye@upmc.fr Présentation de l’entreprise : Le laboratoire de Chimie de la Matière Condensée de Paris (UMR 7574 Sorbonne Université, CNRS, Collège de France) est un acteur reconnu dans le domaine de l’élaboration par des voies de chimie douce de matériaux fonctionnels inorganiques ou hybrides organiques-inorganiques, et sur l’évaluation de leurs propriétés physico-chimiques à différentes échelles. Contexte : La gestion des biodéchets est un secteur polluant et peu optimisé : chaque année en France des millions de tonnes de déchets d'origine végétale sont jetés alors qu'ils proposent une véritable utilité. Le but de ce projet est de valoriser un biodéchet, la peau d'ananas, afin de lui offrir une seconde vie : en effet, une fois broyée et séchée, cette dernière présente une qualité d'absorption d'eau potentiellement utilisable par les plantes. Objectif : Evaluer l'utilité d'un nouveau matériau à base de peaux d'ananas broyées et séchées dans la croissance et le développement des plantes, notamment dans l'apport et le stockage d'eau. Déterminer les meilleures conditions d'utilisation et perfectionner la mise au point de ce matériau pour en optimiser l'efficacité. Méthode : Expérience préliminaire : Toutes les conditions ci-dessous sont réalisées en triplicat, la terre est mélange terreau/sable de composition connue et le substrat est une galette de broyat de peau d'ananas séchée. 2 conditions contrôle sont ici étudiées : une avec la plante seule sur de la terre pour observer la croissance habituelle, et une avec de la terre et du substrat pour évaluer la capacité de rétention d'eau de ce dernier. Le premier test porte sur une plante poussant uniquement sur du substrat pour déterminer si le substrat seul suffit à l'apport nutritif de la plante. De plus, 2 autres tests sont menés sur des plantes semées dans de la terre : un où le substrat sera à la surface de la terre et un où le substrat sera au niveau des racines pour en déterminer la meilleure utilisation. Résumé : Condition contrôle : plante sur terre seule Condition contrôle terre seule + substrat Plante sur substrat seul Plante sur substrat à la surface de la terre Plante sur terre avec substrat enfoui Expérience finale : Plantation de Vigna ungiculata, 3 conditions selon la galette, répétées avec 2 types de terre et d’arrosage, 4 réplicats par condition. Galette : soit absente, soit placée sur la terre ou sous la terre, Terre : soit mélange sable-terreau, soit terre agricole, Arrosage : soit continu, soit stress hydrique. Total de 48 galettes réparties en 12 conditions. Différentes mesures : masse fraîche, hydratée et sèche (teneur relative en eau), croissance des plantes, quantité de chlorophylle, fluorescence (Fv/Fm), proline. Période : Du 01/09/2023 au 31/01/2024 MU4MN011 - Processus d'innovation Introduction au prototypage rapide au FabLab. CAO et impression 3D. OpenSCAD et Arduino. Descriptif de l'UE Introduction au prototypage rapide. 1ère partie : conception et fabrication additive (impression 3D). 2ème partie : introduction à Arduino et objets interactifs.Première séance : introduction OpenSCAD Découverte d'OpenSCAD, commandes simples, boucles et union et différence.Sarah DELAPILLE 18/10/23 : Cours Découverte d'OpenSCAD et d'IdeaMaker Opérations simples sur OpenSCAD 27/10/23: Devoirs : Imprimer en 3D un objet original conçu avec OpenSCAD + un objet qui soit impossible à construire sans l’impression 3D. Objet : Fourchette 1er jet : possibilité d'améliorer l'objet et de faire un code plus simple. 24/10/23 : Impression 3D de la fourchette Fourchette est très petite. Un des piques est déformé. Problème dû au fait que ça soit trop petit ? --------------------------------------------------------------------------------------------------------------------------------------------- Objet qui soit impossible à construire sans impression 3D : un globe dans un rectangle. 27/10/2023 : Cours Insérer un autre objet dans l'objet que nous voulons imprimer en 3D. Le faire en faisant un réglage sur IdeaMaker pour qu'il pause l'impression et qu'on puisse insérer l'objet. Attention à ne pas faire en sorte que l'objet insérer soit plus grand que la dernière couche de l'objet imprimé en 3D. Essayant de travailler en plusieurs plusieurs couleurs (réglage dans IdeaMaker) Post traitement : Prendre un becher, mettre l'objet et du sable tout autour. Mettre le tout dans un four et monter à 115 degrés pour durcir, renforcer la cohésion. Prendre un bécher, mettre un solvant selon le polymère utilisé, on chauffe le temps que le solvant s'évapore et l'objet deviendra brillant et lissant. 14/11/2023 : Objet en collaboration avec Alix DELOBELLE : le Ying et le Yang aimanté $fn=100; wall=3; walls=wall*2; Height=10; Diameter=100; Ying();  module Ying() { difference(){ translate([Diameter/4  ,0,0])color("black",1) cylinder(h=Height,d=Diameter/2,$fn=100,center=true); //top Circle color("white",1){ translate([Diameter/4,0,1]) cylinder(10,d=Diameter/4-walls,$fn=100,center=true);} color("blue",1) translate([4.2, 3, 0]) cube(6,6,4, center=true,$fn=100);} difference() {color("black",1)cylinder(h=Height,d=Diameter,$fn=100,center=true);   translate([0,Diameter/2,0]) cube([Diameter,Diameter,Height+4],$fn=100,center=true); color("white",1){ translate([Diameter/4,0,1]) cylinder(h=Height,d=Diameter/4-walls,$fn=100,center=true);} translate([-Diameter/4  ,0,0]) cylinder(h=Height+4,d=Diameter/2 ,$fn=100, center=true); } } Le cube dans le programme a pour fonction d'insérer l'aimant.  Sur ideaMaker, nous avons créer un modificateur aux dimensions du trou av=fin de permettre la bicolore. Il faut utiliser deux extruders pour les deux couleurs et avant d'étiter le slide, il faut programmer un arret à 7mm pour introduire l'aimant. Première impression : Echec car l'extruder droit ne fonctionnait pas Deuxième impression : Impression sur une autre machine Jade Mahé 18/10/23 : Cours Découverte d'OpenSCAD et d'IdeaMaker Opérations simples sur OpenSCAD 24/10/23: Impression 3D Fablab Devoirs pour le 27/10/23 : Imprimer en 3D un objet avec union et différence Imprimer en 3D un objet qui soit impossible à construire sans l’impression 3D. Sphère avec bille : voir code aux bonnes dimensions plus bas. Vide poche :  voir code aux bonnes dimensions plus bas. Problèmes rencontrés : Impression au mm au lieu de cm. (Je n'avais pas fait attention que l'on était sur une échelle en mm et non cm sur OpenSCAD. 25/10/23: --> Remise des maquettes en cm sur OpenSCAD. Codes OpenSCAD : Sphère avec bille  : difference(){ color("pink")sphere(r=20, $fn=100);  color("pink") sphere(r=15.7,$fn=100);  color("pink")  cylinder(h=70,r=10.7, center=true, $fn=100);   color("pink") rotate ([90,0,0]) cylinder(h=70,r=10.7, center=true, $fn=100);  color("pink")  rotate ([0,90,0]) cylinder(h=70,r=10.7, center=true, $fn=100); } color("white") sphere(r=11.8,$fn=100); Lien Fichier OpenSCAD : sphere in sphere PLUS.scad Vide poche : union(){ difference(){  color("black") cube (size=[70,70,20], center=true); color("gold") translate([0,0,-0.7])cylinder(h=20,r=33.5,$fn=100); } color("gold") translate ([30,30,-14])sphere(r=6,$fn=100); color("gold") translate ([-30,-30,-14])sphere(r=6,$fn=100); color("gold") translate ([-30,30,-14])sphere(r=6,$fn=100); color("gold") translate ([30,-30,-14])sphere(r=6,$fn=100); } Lien Fichier OpenSCAD : porte bijoux.scad Réglages IdeaMaker  1 : Ajout de support de façon manuelle Résultats d'impressions : Problèmes rencontrés : Manque d'adhésion, décrochage lors de l'impression : Réglages IdeaMaker 2 : Mise en place de supports Mise en place de supports d'adhérence types radeaux (notamment pour essayer d'éviter le décrochage de la sphère) Résultats d'impressions : --> Utilisation de PLA blanc Impression vide poches : Réussite Impression sphère : Problème d'adhérence, de support il faudrait peut-être utiliser une jupe ou bien modifier le support et densité. 27/10/2023 : Cours Présentation des diverses méthodes d'utilisation de l'imprimante 3D Devoir pour le 16/11 : réaliser un objet en bi-colore dans lequel on peut insérer un autre objet en arrêtant l'impression Codes OpenSCAD : union(){ difference(){ cylinder(6,13,13, $fn=100);   translate([0,0,2])cylinder(6,10.2,10.2, $fn=100); } translate([0,0,6.5])cube([26,2,2], center=true); translate([0,0,6.5])rotate (90,0,0) cube([26,2,2], center=true); } Lien Fichier OpenSCAD : Porte pièce.scad Réglages IdeaMaker : Mise en place  d'un modificateur (cylindre) au niveau de la base + réglage des extrudeurs gauche et droit afin d'obtenir un objet bi-colore. Réglage d'un temps d'arrêt à 5mm afin de pouvoir intégrer une pièce à l'intérieur de l'objet. (Pour cela aller dans slice > Editer > Autre > Régler la pause ) Résultats d'impressions : 14/11/23 --> Utilisation de PLA orange et marbré Impression : réussite et pause effectué automatiquement pour insérer la pièce Petit manque de précision Alix Delobelle 18/10/2023 : Cours de prototypage Première approche du logiciel Openscad pour créer des objets en 3D Compréhension du langage Matérialisation de l'objet sur Ideamaker afin de pouvoir l'imprimer 25/10/2023 : Création et impression de deux objets 1- Objet 1 : créer un objets utilisant différence et addition Réalisation de deux briques type Légo, un rectangle et un carré Cependant, erreur dans le codage sur openscad car la face du dessous n'a pas été enlevée correctement, ce qui ne permet pas d'emboiter les deux briques Changement à réaliser dans le programme avec réalisation d'une différence pour enlever la face du dessous Programme réalisé sur OPENSCAD : $fn=100; difference(){    color ("white")cube([32,16,9]);    translate([0,0,-9]) color ("white") cube([32,16,9]);}; translate([3.5,3.5,8.5]) color("pink") cylinder(2,2.5,2.5) ;translate ([3.5,12.5,8.5]) color("green")cylinder(2,2.5,2.5);translate ([11.8,3.5,8.5]) color("black")cylinder(2,2.5,2.5);translate ([11.8,12.5,8.5]) color("red")cylinder(2,2.5,2.5);translate ([20.1,3.5,8.5]) color("blue")cylinder(2,2.5,2.5);translate ([20.1,12.5,8.5]) color("purple") cylinder(2,2.5,2.5);translate ([28.4,3.5,8.5]) color("orange") cylinder(2,2.5,2.5);translate ([28.4,12.5,8.5]) color("brown") cylinder(2,2.5,2.5); translate ([8,8,0]) difference (){    cylinder(8,3.5,3.5);    cylinder (8,2.5,2.5);} translate ([16,8,0]) difference (){    cylinder(8,3.5,3.5);    cylinder (8,2.5,2.5);} translate ([24,8,0]) difference (){    cylinder(8,3.5,3.5);    cylinder (8,2.5,2.5);} 2- Objet 2 : créer un objet que l'on peut imprimer qu'en 3D Réalisation d'une tirelire à destination d'un test de dextérité manuelle en psychomotricité Programme réalisé sur openscad mais échec lors de l'impression --> non réalisation de l'épaisseur des murs ce qui a conduit à une mauvaise impression de la la boite (en 2D et non 3D) Reprise du programme sur openscad et ajustement de l'épaisseur des murs 27/10/2023 : Cours de prototypage Présentation des réalisations à la classe Présentation du fonctionnement de l'imprimante 3D et des différents fil que l'on peut utiliser Consigne : réaliser un objet en bi-colore dans lequel on peut insérer un autre objet en arrêtant l'impression 3 Réalisation d'un yin-yang aimanté avec Sarah DELAPILLE $fn=100;wall=3; walls=wall*2;Height=10;Diameter=100; Ying();   module Ying() { difference(){ translate([Diameter/4  ,0,0])color("black",1) cylinder(h=Height,d=Diameter/2,$fn=100,center=true); //top Circle color("white",1){ translate([Diameter/4,0,1]) cylinder(10,d=Diameter/4-walls,$fn=100,center=true);}  color("blue",1) translate([4.2, 3, 0]) cube(6,6,4, center=true,$fn=100);} difference(){color("black",1)cylinder(h=Height,d=Diameter,$fn=100,center=true);    translate([0,Diameter/2,0])cube([Diameter,Diameter,Height+4],$fn=100,center=true);color("white",1){ translate([Diameter/4,0,1]) cylinder(h=Height,d=Diameter/4-walls,$fn=100,center=true);}  translate([-Diameter/4  ,0,0]) cylinder(h=Height+4,d=Diameter/2 ,$fn=100, center=true); } } Création sur open-scad Modèle Ying Yang double couleur avec introduction à l'intérieur d'un cube Les deux modèles sont identiques Le cube a pour fonction d'y placer l'aimant afin de pouvoir relier les deux parties. Il est plus grand que l'aimant afin que l'on puisse stopper l'impression et le placer sans que la structure ne s'effondre Sur ideamaker : Création d'un modificateur aux dimension du trou afin de permettre la bicolore (procédure : onglet modifier, ajouter un modificateur, donner les dimensions et le placer au bon endroit) Utilisation des deux extruders pour les deux couleurs : sur le menu de gauche (les trois traits horizontaux) --> cocher trancher les modèles actifs uniquement, puis sélectionner que le yang, aller dans la clé à molette sur le côté et sélectionner extruder de gauche. Puis, désélectionner le yang et sélectionner le cylinder, aller dans la molette et mettre extruder de droite) Avant d'éditer le slide, réalisation d'un arrêt de l'impression à 7 mm, afin de pouvoir y introduire l'aimant (procédure : slice, démarrer le slice, éditer, autre, hauteur (sélectionner la bonne)) 14/11/2023 : Tentative d'impression mais échec car l'extruder de droite ne fonctionnait pas Arrêt de l'impression, tentative sur une autre machine Erreur dans la programmation du rond central car la couleur noir est restée accrochée sur la radeau Changement dans le code open-scad à revoir Chloé El Kassis 18/10/2023 Découverte des logiciels OpenScad et IdeaMaker Code: d=5; a=10; H=100; R=40; N=10; color("red") cube(a,center=true); union(){   for (i=[1:1:N){       rotate([0,0,i*360/N)translate([R-1/2),0,H+a/2])       cube(a,center=true);   }   color("red")cylinder(h=H,r=R); } 26/10/2023 Perle en Forme de cœur difference(){ color("gold") union(){   $fn=100;   cube(20);   translate([10,0,0])   union(){       cylinder(h=20,d=20);       translate([-10,10,0])cylinder(h=20,d=20);}             } rotate([45,90,0])translate([-10,4,-20]) cylinder(h=40,r=2,center = false,$fn=100);   }     Lors de la première impression, le petit bou de plastique est resté accroché. Qualité standard La deuxième impression s’est bien déroulée. La perle était cependant trop grande pou une perle. Porte-Bouquet difference(){ union(){ translate([0,0,-6]) linear_extrude(1,center=true,scale=1) circle(d=62); rotate_extrude($fn=300) translate([30,0,0]) scale([0.5,1.5]) circle(d=10,$fn=100); } translate([0,0,-10]) cylinder(h=20,r=2,$fn=100) ; N=10; F=20; union(){   for(i=[1:1:N]){       rotate([0,0,i*360/N])translate([10,0,-10])       cylinder(h=20,r=2,$fn=100);   } union(){   for(i=[1:1:F]){       rotate([0,0,i*360/F])translate([20,0,-10])       cylinder(h=20,r=2,$fn=100);   } } } } Les trous ne sont pas assez larges pour mettre des tiges à l’intérieur, ils ne sont également pas bien délimités. (Insérez photo) 11/13/2023 L'exercice consistait à créer un objet et de mettre quelque chose à l'intérieur. J'ai décidé de faire une maracas en mettant des pates dedans (pates alphabet) selon le code suivant: J'ai utilisé une bobine de PLA de couleur violet. J'avais réglé sur IdeaMaker d'utiliser l'extruder de droite. En emprimant une première fois, l'extruder n'a pas rempli le centre du cylindre et donc j'ai arrêté l'impression. Pour la deuxième impression j'ai diminué la taille de l'impression. J'ai vite remarqué que le remplissage se faisant avec l'extruder de gauche. Vu que la taille de la maracas était réduit, cela n'était pas une bonne idée. Il y avait des fils de partout. Après avoir retiré l'objet, et l'avoir déposé sur la table, celui la s'est cassé. 12/08/2023 Avec le kit arduino, le premier objectif était de faire clignotté deux LED de facon alternée. void setup() { pinMode(9,OUTPUT); pinMode(13,OUTPUT); } void loop() { digitalWrite(9,HIGH); digitalWrite(13,LOW); delay(1000); digitalWrite(9,LOW); digitalWrite(13,HIGH); delay(1000); } Ensuite, l'objectif était d'aleterner 3 LED: void setup(){ pinMode(9,OUTPUT); pinMode(13,OUTPUT); pinMode(11,OUTPUT); } void loop() { digitalWrite(9,HIGH); digitalWrite(13,LOW); delay(1000); digitalWrite(11,HIGH); delay(500); digitalWrite(9,LOW); digitalWrite(13,HIGH); delay(1000); digitalWrite(11,LOW); delay(500); } Ryan BOURA 18/10/23 Premier cours de prototypage et découverte du logiciel openSCAD et ideaMAKER 26/10/2023 Voici les deux choses que j'ai decidé d'imprimer en 3D Tout d'abord l'objet auquel j'ai pensé est un couteau, voici une image via openscad En ce qui concerne les codes j'ai pensé que la façon la plus simple de le faire était d'utiliser des polyèdre en effet la lame est composé de 1 pyramide pour la pointe et de 4 prismes pour la longue La manche ainsi que la garde sont des rectangle pour rester simple Image finale en attente Point de progression : Augmenter la largeur de la manche car elle est en réalité petite même si proportionné sur openscad Pour mon objet impossible j'ai décidé d'imprimer 3 anneau qui sont imbriqué les uns dans les autres : Pour les imbriquer j'ai décidé de juste les rotate et de les translater tentative d’impression des anneaux améliorer le lundi 13 Novembre 2023 translate([-5,14,2]){rotate_extrude(convexity = 100, $fn = 100)translate([10, 0, 0])circle(r = 1, $fn = 100);} rotate([0,30,0]){ rotate_extrude(convexity = 100, $fn = 100)translate([10, 0, 0])circle(r = 1, $fn = 100);} translate([-12,5,0]){rotate([0,-30,0]){ rotate_extrude(convexity = 100, $fn = 100)translate([10, 0, 0])circle(r = 1, $fn = 100);};} Voici le code amélioré avec un peu plus d’espace pour l’impression. Cependant cela n’a pas marché car il y avait d’autre impression et la machine n’a pas réussi à mettre le physique sur le soluble voir photo On ne vois que le soluble 07/11/2023 : Notre mission étant d’imprimer un objet en collaboration avec Sanjay, Héloïse et Maria dans un autre objet la première idée qui nous est venu a l’esprit est quelque chose de type cage, avec le thème d’Halloween on voulait une citrouille et un fantôme dedans. Cependant la nature plate du haut de la citrouille posait des problème on avait peur d’avoir trop de support, donc on a décider de tester avec une sphère simple avec un remplissage de 0 dans lequel on a mis un morceau de PLA puis cette même sphère on l’a mise dans une plus grosse pour tester la transparence. voici le résultat 10/11 Puis on a codé la sphère finale qui est une sphère avec des cube que l’on a enlever grâce à la fonction de différence Voci le code : a=5;H=0;R=40;N=90; difference()    { difference() {    sphere(r=R-a/2);    for (i=[1:1:N]) {        rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2])        cube([100,a-4,a], center=true);    }};   sphere(r=(R-a/2)-2);}; La majeure différence avec l’ancienne méthode est que cette fois il a fallu enlever la sphère intérieur nous meme et pas juste enlever le remplissage Voilà le résultat du dernier test avant l’objet final 13 et 14 novembre 2023 : objet final et objet à mettre dedans : l’objet que j’ai décidé de mettre dans la sphère est une étoile de mario (Luma) trouve sur Thingiverse On peut voir l’étoile à gauche qui a été imprimé en même temps que le Renne de Sanjay et l’objet finale est le suivant avec un stickers pour tester l’adhérence intérieur Version finale avec le stokers rouge et blanc ainsi que l’étoile à l’intérieur 07/12/2023 Création d'un système qui active une LED a l'aide d'un Arduino, et une résistance de 200Ohm. Voici une photo du montage inititiale                                                 Voici une photo du montage allumé :                                                                 Puis j'ai décidé de brancher les LED en série et de les faires clignoter grâce au code suivant : void setup() { pinMode(12, OUTPUT); pinMode(11, OUTPUT); } void loop() { digitalWrite(12, HIGH); digitalWrite(11, LOW); delay(500); digitalWrite(12, LOW); digitalWrite(11, HIGH); delay(500); } voici le montage J'ai ensuite placé en dérivation un buzzer trouvé dans la boite ce qui a donné un montage qui buzzer lorsque le voyant était au rouge Ossian BENGTSSON Seance du 18/10 Initiation au prototype sur OpenSCAD Impression du 26/10, Première idée de forme : entonnoire avec spirale dans le tube mais trop compliqué à imprimer avec les supports à l'intérieur code : " $fn=100; // Définit la résolution module spirale(hauteur=100, rayon=10, tours=10) {    for(i = [0:0.1:hauteur]) {        cylindre_helice(i, hauteur, rayon, tours);    }} module cylindre_helice(pos, hauteur, rayon, tours) {    angle = 360 * tours * pos / hauteur;    x = rayon * cos(angle);    y = rayon * sin(angle);    translate([x, y, pos])    cylinder(r1 = 6, r2 = 0, h = 0.1);} spirale(); cylinder(100,10,10); module tube(externe_rayon=16.1, interne_rayon=16, hauteur=97) {    difference() {        cylinder(r=externe_rayon, h=hauteur);        translate([0, 0, -1]) // Ajustement pour s'assurer que le cylindre intérieur enlève bien toute la matière du haut au bas        cylinder(r=interne_rayon, h=hauteur + 2);    }} tube(); // Dimensions de l'entonnoirhauteur = 50;ouverture_superieure = 12;ouverture_inferieure = 70;epaisseur_mur = 1; // Épaisseur du mur de l'entonnoir module entonnoir() {    // Cône extérieur    difference() {        cylinder(r1=ouverture_superieure/2, r2=ouverture_inferieure/2, h=hauteur);            // Cône intérieur        translate([0, 0, epaisseur_mur]) {            cylinder(r1=(ouverture_superieure - epaisseur_mur * 2)/2, r2=(ouverture_inferieure - epaisseur_mur)/2, h=hauteur);                }    }} // Déplace l'entonnoir à une hauteur de 50 unitéstranslate([0, 0, 80]) {    entonnoir();}// Dimensions de l'entonnoir_2hauteur_2 = 50;ouverture_superieure_2 = 10;ouverture_inferieure_2 = 33;epaisseur_mur_2 = 1; // Épaisseur du mur de l'entonnoirmodule entonnoir_2() {    // Cône extérieur    difference() {        cylinder(r1=ouverture_superieure_2/2, r2=ouverture_inferieure_2/2, h=hauteur);            // Cône intérieur        translate([0, 0, epaisseur_mur_2]) {            cylinder(r1=(ouverture_superieure_2 - epaisseur_mur_2 * 2)/2, r2=(ouverture_inferieure_2 - epaisseur_mur_2)/2, h=hauteur_2);                }    }}translate([0, 0, -49]) {    entonnoir_2();} " Deuxième impression : Forme pas imprimable sans imprimante 3D : Cube vide avec 3 cylindre imbriqués qui la traverse. Plus simple à coder et à imprimer. Séance du 13/11 Avec Arielle GAL, nous avons pensé à faire une sphère vide avec un manche afin de faire des maracasses avec une pause d'impression afin d'y placer différents objets à l'intérieur. Code : $fn=200; // Augmenter le nombre de faces pour une sphère plus lisse R = 40; // Rayon externe de la sphèreepaisseur = 2; // Épaisseur des parois de la sphère // Créer une sphère videdifference() {    sphere(R);  // Sphère externe    sphere(R - epaisseur); // Sphère interne à soustraire} translate([0, 0, -80])cylinder(100,10,20,center=true); $fn=200; // Augmenter le nombre de faces pour une sphère plus lisse R = 40; // Rayon externe de la sphèreepaisseur = 2; // Épaisseur des parois de la sphère // Créer une sphère videdifference() {    sphere(R);  // Sphère externe    sphere(R - epaisseur); // Sphère interne à soustraire} translate([0, 0, -80])cylinder(100,10,20,center=true); Yasmine Hamed - Prototypage  18/10/23 - Séance 1 Découverte de OpenSCAD et IdeaMaker Découverte du langage Pyhton 26/10/23 - Séance 2 Le premier objet que j'ai crée est un stylo avec un bouchon afin de me formaliser avec le code ainsi que openSCAD. J'ai choisi de ne pas imprimer cet objet car j'était plus enthousiaste d'imprimé le second. Pour le deuxième objet qui est réalisable que par imprimante 3D j'ai pensé tout d'abord à un nœud lié. Je me suis donc tourné vers des maillons de chaines. J'ai choisi d'imprimé cet objet. Tout c'est très bien passer sauf  pour un détail. En effet la gravure que j'avais mise n'a pas été reproduite. On ne voit pas le prénom sur l'objet. 14/11/2023 - Séance 3 Création d'un jeu pour chat : c'est une sphère avec des trous pour que le chat puisse voir la boule qui se trouve à l'intérieur. Dans un premier temps j'ai fait la sphère : // Paramètres sphere_radius = 100; hole_radius = 25; num_holes = 8; // Créer la sphère difference() { color("green") sphere(r = sphere_radius); // Créer les trous for (i = [0:num_holes-1]) { angle = i * 360 / num_holes; x = sphere_radius * cos(angle); y = sphere_radius * sin(angle); translate([x, y, -13]) cylinder(h = 4 * sphere_radius, r = hole_radius, $fn = 100); } translate([0, 0, 0]) sphere(sphere_radius-3); } J'ai ensuite réaliser la boule difference (){ translate([0, 0, 0]) sphere(40); translate([0, 0, 0]) sphere(30); } Je voulais dans un premier temps réaliser la boule puis ensuite en imprimé la sphère avec les trous. Lors de cette deuxième impression je mettrais la boule dans la sphère lors de l'impression. Apres réflexion concernant l'impression et les supports j'ai décider de tout imprimé d'un seul coup. J'ai fusionné les deux objet dans idea maker. J'ai ensuite eu l'idée des pendentifs ou il y a des fleurs dedans j'ai donc eu l'idée de faire une sorte de cage à oiseau Mais comme j'était préoccupé par le fonctionnement du jeu pour chat je me suis arrêté au code de la pièce extérieur. //base de la cage cylinder(3,17,17); //barreaux num_bares = 11; sphere_radius = 15; bares_radius = 2; for (i = [0:num_bares-1]) { angle = i * 360 / num_bares; x = sphere_radius * cos(angle); y = sphere_radius * sin(angle); translate([x, y, 0]) cylinder(h = 4 * sphere_radius, r = bares_radius, $fn = 100);} difference() { translate([0, 0, 4 * sphere_radius]) sphere(17); translate([-20, -20, 20]) cube(40); } difference(){ translate([0, -3.5, 76]) cube([2,7,7]); translate([0, -2.5, 77]) cube([2,5,5]); } 16/11/2024 j'attend donc le résultats final de l'imprimante.Bachir Ammache Prototypage J'ai utilisé OpenSCAD pour créer une structure de toile d'araignée, démontrant ainsi les capacités de ce logiciel open-source. Cette modélisation 3D de la toile d'araignée a été un exemple convaincant de l'application d'OpenSCAD pour la conception de structures complexes, tout en mettant en évidence les possibilités de personnalisation offertes par ce logiciel. avec le code suivant : $fn = 200; // High resolution for smooth lines web_radius = 100;  // Radius of the entire webradial_lines = 16;  // Number of radial linescircle_count = 10;  // Number of circlescircle_gap = web_radius / circle_count;  // Distance between circlesweb_height = 5;     // Height of the 3D web // Module to draw radial linesmodule draw_radials() {    for(a = [0:360/radial_lines:360-360/radial_lines]) {        p1 = [0, 0];        p2 = [web_radius * cos(a), web_radius * sin(a)];        draw_line(p1, p2);    }} // Module to draw linemodule draw_line(p1, p2) {    hull() {        translate(p1) circle(0.1);        translate(p2) circle(0.1);    }} // Module to draw concentric arcs connecting radialsmodule draw_arcs() {    for(i = [1:circle_count]) {        r = i * circle_gap;        for(a = [0:360/radial_lines:360-360/radial_lines]) {            p1 = [r * cos(a), r * sin(a)];            p2 = [r * cos(a + 360/radial_lines), r * sin(a + 360/radial_lines)];            draw_line(p1, p2);        }    }} // Construct the spider web in 3Dlinear_extrude(height = web_height) {    draw_radials();    draw_arcs();} Soulaimane ZARIOUH 18/10/23 : Cours Découverte d'OpenSCAD et d'IdeaMaker Opérations simples sur OpenSCAD 27/10/23: Devoirs : Imprimer en 3D un objet original conçu avec OpenSCAD, impossible à construire sans l’impression 3D. Objet : Sphère emprisonnée dans une cage OpenScad // Taille du cubeT = 10; // Épaisseur des arêtesE = 1;// Longueur du pavéL = T + 2;  // Diamètre de la sphèreD = T; difference() {    // Cube principal    cube(T, center=true);   // Soustraction des pavés pour chaque axe    // Axe X    translate([0, 0, 0])    cube([L, T - 2 * E, T - 2 * E], center=true);    // Axe Y    translate([0, 0, 0])    cube([T - 2 * E, L, T - 2 * E], center=true);    // Axe Z    translate([0, 0, 0])    cube([T - 2 * E, T - 2 * E, L], center=true);} // Sphèresphere(r=D/2, $fn=100); La sphère étant trop simplifiée, j'ai trouvé la commande $fn pour améliorer le lissage de celle-ci. IdeaMaker Paramètres de l'impression: Modèle d'imprimante utilisé : RAISE3D E2. Type de filament: PLA de 1.75mm. Profil d'impression sélectionné: qualité rapide. Paramètres spécifiques Hauteur de couche: 0,2500 mm. Densité de remplissage: 10%. Poids de l'objet imprimé: 8.6 Coût théorique de l'impression: 0.21 S Temps d'impression prévu initialement : 54 min. Temps d'impression réel: 47 min Le bas de la sphère est mal fini, plus de support permettrait de surement une meilleure finition. 16/11/23 : Titre du Projet : Impression 3D d'un Textile Type "NASA Fabric" en PLA Objectif du Projet : Créer un objet complexe inspiré du tissu développé par la NASA, composé d'unités hexagonales interconnectées. Ce design devait permettre un certain degré de liberté de mouvement dans une direction, tout en restant rigide dans l'autre. Première Tentative : Paramètres d'Impression : Mode ultra-rapide, utilisation d'un radeau et de supports partout. Problèmes Rencontrés : Fusion de l'objet avec le radeau, dû à la finesse de la base de l'objet. Difficulté d'enlever les supports, surtout dans les mailles fines. Utilisation d'un cutter à ultrasons pour essayer de redéfinir les hexagones, mais manque de précision et difficulté d'enlever suffisamment de matière. Deuxième Tentative : Changements Apportés : Suppression du radeau. Utilisation d'un support soluble sur l'extrudeuse de droite, PLA multicouleur sur l'extrudeuse de gauche. Réglage de la qualité d'impression sur "ultra". Durée d'Impression : 89 heures. Problème : En modifiant la qualité d'impression à "Bonne qualité", les paramètres précédents ont été réinitialisés sans que je m'en rende compte. Résultats : Réapparition du radeau. Seuls les supports extérieurs ont été imprimés, pas à l'intérieur. Supports imprimés en PLA, pas en soluble. La transition de couleur n'est pas perceptible en raison de l'utilisation limitée de filament. Réflexions et Perspectives : Cette expérience m'a appris l'importance de vérifier attentivement les paramètres d'impression, surtout après des modifications. La qualité d'impression laisse aussi à désirer; une buse d'impression plus fine et un temps d'impression plus long pourrait permettre d'améliorer le rendu. La structure complex rend surement l'utilisation du four compliqué Conception du Prototype avec Arduino Uno Objectif du Projet Problématique : Développer un prototype pour détecter et alerter sur une répartition inégale du poids dans un sac à dos. Utilisation de l'Arduino Uno : Choisi pour sa facilité d'utilisation, sa communauté de support étendue, et sa compatibilité avec divers capteurs et modules. Choix des Composants Capteurs de Force Résistifs (FSR) : Dimension et Type : Carrés de 4 cm, choisis pour leur taille adéquate et leur capacité à mesurer la force exercée sur les sangles. Justification : Les FSR sont faciles à intégrer avec Arduino et suffisamment sensibles pour détecter des variations de poids. Système de Notification par Vibration : Choix du Feedback Haptique : Sélectionné pour sa discrétion et sa capacité à communiquer directement avec l'utilisateur sans distraction visuelle ou sonore. Compatibilité avec Arduino : Les moteurs de vibration sont simples à contrôler via l'Arduino Uno. Conception du Circuit Intégration avec Arduino Uno : Connexion des FSR et du moteur de vibration à l'Arduino, avec les résistances nécessaires pour assurer une lecture précise des capteurs. Schéma du Circuit : Conception d'un schéma clair pour documenter la connexion des composants. Développement du Logiciel Programmation avec Arduino : Écriture du code pour lire les données des FSR et activer le moteur de vibration lorsque la répartition du poids est inégale. Seuils de Déclenchement : Définition des seuils pour les alertes basée sur des tests préliminaires et des données biomécaniques. Tests et Validation Prototypage : Assemblage du circuit sur une breadboard pour des tests initiaux. Tests de Charge : Utilisation de poids standard pour calibrer et tester la précision des FSR. Ajustements du Code : Optimisation du code pour améliorer la réactivité et la fiabilité des notifications. . const int vibpin1 = 4; const int buttonpin= 2 ; const int vibpin2 = 5; int button_state=0; int enable_state=0; int i =0; // last button state int sensorVal1= 0; int sensorVal2= 0; float voltage1 = 0 ; float voltage2 = 0 ; float delta = 0; int current_buttonState; int oldState =0 ; int butval=0; unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(vibpin1, OUTPUT); pinMode(buttonpin, INPUT_PULLUP); pinMode(vibpin2, OUTPUT); } void loop() { // put your main code here, to run repeatedly: //button_state = digitalRead(buttonpin); if (digitalRead(buttonpin)== HIGH && !button_state ){ enable_state =1; button_state = !button_state; delay(500); } if (digitalRead(buttonpin)== HIGH && button_state ){ enable_state =0; button_state = !button_state; delay(500); } /* if (button_state ==1) { // reset the debouncing timer enable_state= 1 ; }else{ enable_state=0 ; } */ if (enable_state==1 ){ sensorVal1= analogRead(A0); sensorVal2= analogRead(A1); voltage1 = sensorVal1*(5.0/1023) ; voltage2 = sensorVal2*(5.0/1023) ; delta = abs(voltage1-voltage2) ; Serial.println(delta); delay(200); if (delta>0.8){ if (voltage1 > voltage2){ digitalWrite(vibpin1, HIGH); delay(100); digitalWrite(vibpin1, LOW); }else if (voltage2>=voltage1){ digitalWrite(vibpin2, HIGH); delay(100); digitalWrite(vibpin2, LOW); } }else if (delta<=0. && delta>0.2 && voltage1>0.2 && voltage2>0.2){ digitalWrite(vibpin1, HIGH); digitalWrite(vibpin2, HIGH); delay(500); digitalWrite(vibpin1, LOW); digitalWrite(vibpin2, LOW); delay(1500); enable_state=0; button_state = !button_state; // pas sur }else{ digitalWrite(vibpin1, LOW); digitalWrite(vibpin2, LOW); } // end if enable state } } Ishika PATEL 18/10/23 : Première séance de processus d'innovation Introduction de l'UE Processus d'innovation Découverte de OpenSCAD et IdeaMaker Sur OpenSCAD, pour se familiariser avec le logiciel, on a réalisé un cylindre comportant au-dessus 10 cubes. De plus, on a appris à utiliser l'addition et la différence. 26/10/23 : Prototype 3D On nous a demandé de réaliser un objet uniquement réalisable en impression 3D. J'ai choisi d'imprimer une fleur en 3D. Sur IdeaMaker, j'ai tout d'abord mis pour la dimension 3D avec x = 5cm. En revanche, il demandait beaucoup de temps avec environ 1h19min d'impression. Pour réduire le temps d'impression, j'ai donc réduit les dimensions avec x = 3cm. Au final, l'impression 3D a duré uniquement 27 min. L'impression s'est très bien déroulé. Vers le dessus, on observe que le remplissage n'est pas net au début de l'impression mais vers la fin elle est plus lisse. 27/10/23 Deuxième séance de processus d'innovation Présentation des objets en impression 3D, les améliorations possibles à faire pour nos objets grâce aux différentes méthodes et différents matériaux 14/11/23 : Impression 3D d'un diamant Réalisation d'un objet utilisant une autre couleur, un autre matériau que le PLA, un objet dans un objet J'ai prototypé un diamant avec du PLA transparent Voici le code sur OpenSCAD : function make_facets(start,increment,limit,axial_angle,height) = start <= limit ? concat([[start/limit*360, axial_angle, height]] , make_facets(start+increment,increment,limit,axial_angle,height)) : [] ; // CORPS DU DIAMANT module body(Size=100) { cube(Size,center=true); } module cut_facet_data(index_angle,axial_angle,height,Width=200,Depth=50) { rotate([0,0,index_angle]) rotate([0,axial_angle,0]) translate([0,0,Depth/2 + height]) cube([Width,Width,Depth],center=true); } module cut_facets(facets, n) { for (i =[0:n-1]) cut_facet(facets[i]); } module cut_facet(facet) { cut_facet_data(facet[0],facet[1],facet[2]); } // FACE DES DIAMANT module gem(facets,n) { difference() { if (n==1) body(); else gem(facets,n-1); cut_facet(facets[n-1]); } } // BRILLANCE DU DIAMANT function brilliant_facets() = concat( make_facets(1,1,1,0,2.28), make_facets(1,1,1,180,7.8), make_facets(1,2,32,35,5), make_facets(4,4,32,30,4.46), make_facets(2,4,32,16,3.46), make_facets(2,2,32,90,8.5), make_facets(1,2,32,42+180,6) ); facets = brilliant_facets(); scale(3) gem(facets,len(facets)); Le diamant devrait ressembler à l'image ci-dessous : Sur IdeaMaker, j'ai choisi que la densité de remplissage sera de 10%. Vu que mon objet sera transparent je souhaite que à l'intérieur ça soit vide. A voir si cela à marcher à l'impression 3D ou s'il faut modifier. L'impression 3D a duré 2h30 avec un autre objet mis à côté pour l'impression, afin de gagner du temps et ne pas occuper plusieurs machines en même temps. J'ai décidé cette fois-ci d'utiliser du PLA transparent pour représenter au mieux un diamant. Impression 3D de l'objet: Malheureusement, la pointe du diamant n'est pas présente et a fait un trou à la place. Je suis quand même satisfaite du résultat malgré la pointe manquante. Sur IdeaMaker, j'aurais dû inverser la position du diamant pour avoir un meilleur résultat. On voit quand même les traces de l'impression 3D. De plus, je voulais que l'intérieur soit vide, j'ai configuré les paramètres avec un remplissage de 10%. J'étais sceptique à l'idée de mettre à 0% le remplissage. POST-TRAITEMENT : https://www.youtube.com/watch?v=Jv-CbnB8Uz4&t=83s Avec Maeva, nous avons vu une méthode post-traitement qui consiste à lisser l'objet pour le rendre brillant grâce à l'immersion dans l'acétone. Si j'ai l'occasion je souhaiterais le faire. 16/11/23 : Troisième séance de processus d'innovation Introduction à l'Arduino 8/12/23 : Quatrième séance de processus d'innovation Camille Chen Séance 18/10/2023 Première séance nous avons appris à utiliser l'outil OpenScad. Voici ce qu'on a fait : Le programme est le suivant : d=5;a=10;color("blue") cube(a,center=true);for(i=[1:1:10]) {    translate([i*(a+d),0,0]) color("cyan") cube(a,center=true);} C'était la première chose que nous avions faites : des cubes alignés. Ensuite, nous avons fait un cylindre avec au sommet des cubes pour faire une tour. Ensuite, je me suis permise de le décorer un peu à ma guise, voici le résultat :       Le programme est  le suivant : d=5;a=10; // arrête des cubesH=100; // hauteur de la tourR=40; // rayon de la tourN=10; // nombre de cubes color("blue") cube(a,center=true);for(i=[1:1:N]) {    rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2]) color("beige") cube(a,center=true);    color("turquoise") cylinder(h=H,r=R);} color("white") rotate_extrude(convexity=100)translate([67,40,52])circle(r=10,$fn=100); t="      Welcome to Paradise"; color("lightskyblue") linear_extrude(15) {     text(t,50);} color("darkslategray") {    linear_extrude(2) {        offset(4) {            fill() {               text(t,50);            }        }    }} Le but de cette première séance a été de nous familiariser avec ce nouvel outil. J'ai donc laissé mon esprit créatif prendre place. 27/10/2023 : 2e séance Pour cette séance, il fallait créer des objets qu'on voulait. J'ai choisi de créer un porte-clé car j'ai récemment cassé le mien. Voici le résultat : En réalité, ça donne ceci étant donné que j'ai beaucoup réduit la taille et que je n'ai pas choisi la couleur de la bobine que je voulais utiliser pour l'imprimante 3D. Le programme est le suivant : $fn=127; text1="Life is short";text2="Like";text3="you :)"; color("skyblue") difference(){union(){  translate([-20,-3,0]) cube([50,40,2]); hull(){translate([-50-5,0,0])cylinder(r=5,h=2);translate([50+5,0,0])cylinder(r=5,h=2); translate([-50-5,40-5,0]) cylinder(r=5,h=2);translate([50+5,40-5,0])  cylinder(r=5,h=2); }  linear_extrude(height=3.5){translate([0,20,0]) text(text1, size=10, halign="center", font="InkFree:style=bold");translate([-15,10,0]) text(text2, size=10, halign="center", font=signfont,font="InkFree:style=bold");translate([17,10,0]) text(text3, size=10, halign="center", font=signfont,font="Elephant:style=bold"); }}translate([-50-3,33,-0.5])cylinder(r=2.5,h=3); Pour mon deuxième objet, je n'avais pas d'idée donc j'ai laissé mon imagination faire, et je me suis arrêtée à ça car je n'avais plus d'idée.       Puisque j'ai beaucoup diminué la taille de mon objet, j'ai eu un petit problème sur le haut de ma tour : en effet, je n'ai pas obtenu les diamants que je voulais en haut de ma tour puisque leur taille était minuscule.   Le programme est le suivant : // Parametersbase_height = 2;  // Height of the basebase_radius = 30; // Radius of the baseplatform_height = 3; // Height of the platformplatform_radius = 22; // Radius of the platformrotation_height = 2; // Height of the rotation cylinderrotation_radius = 15; // Radius of the rotation cylinder // Basecolor("lightcyan") cylinder(h = base_height, r1 = base_radius, r2 = base_radius); // Platformtranslate([0, 0, base_height])color("steelblue") cylinder(h = base_height, r1 = platform_radius, r2 = platform_radius); // Rotation Cylindertranslate([0, 0, base_height + base_height])color("lightskyblue") cylinder(h = rotation_height, r1 = rotation_radius, r2 = rotation_radius); // Hole for Insertd=4;a=1;H=15;R=4;N=15; union(){    for(i=[1:1:N]){        rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2]) color("beige") sphere(a,center=true);    }    color("dodgerblue") cylinder(h=H,r=R);} color("blue"){    linear_extrrude(2){        offset(4) {        }    }} Pour la séance du 16/11/2023 : On devait faire pour la séance dernière un objet réalisable que en imprimante 3D. Après avoir visionné un film d'action, j'ai été fascinée par une scène où une balle était tirée d'un pistolet. Les images reflétée était incroyablement belles avec des perspectives captivantes. La trajectoire de la balle a traversé un cube posé sur la table, et ce dernier a été transpercé sous différentes couches, ce qui m'a donné l'idée de créer l'objet suivant :       Le programme pour réaliser ce cube est le suivant : $fn=50; difference() {    color("lightcyan") cube(10,center=true);    cylinder(r=4.5,h=12,center=true);    rotate([90,0,0]) cylinder(r=4.5,h=12,center=true);    rotate([0,90,0]) cylinder(r=4.5,h=12,center=true);} difference() {    color("paleturquoise") cube(8,center=true);    cylinder(r=3.5,h=12,center=true);    rotate([90,0,0]) cylinder(r=3.5,h=12,center=true);    rotate([0,90,0]) cylinder(r=3.5,h=12,center=true);} difference() {    color("skyblue") cube(6,center=true);    cylinder(r=2.5,h=12,center=true);    rotate([90,0,0]) cylinder(r=2.5,h=12,center=true);    rotate([0,90,0]) cylinder(r=2.5,h=12,center=true);} difference() {    color("lightsteelblue") cube(4,center=true);    cylinder(r=1.5,h=12,center=true);    rotate([90,0,0]) cylinder(r=1.5,h=12,center=true);    rotate([0,90,0]) cylinder(r=1.5,h=12,center=true);} Concernant l'objet à réaliser dans lequel on doit déposer un objet PENDANT l'impression 3D (ce qui inclue l'arrêt de l'impression 3D de notre produit en cours), j'ai pensé à un pot fermé. En approfondissant mes recherches, j'ai décidé de faire un objet comme un porte crayons puisque je perds toujours mes crayons et stylos à la maison... Voici à quoi ressemble mon pot de crayons : Voici le programme qui en résulte : Diametre=50;Hauteur=150;Qualite=6;Nb_barreaux=32;Epaisseur_barreaux=2;Decalage=5;Epaisseur_fond=6; for(i=[1:Nb_barreaux]) color("lightskyblue"){    hull()    {    rotate([0,0,360/Nb_barreaux*i])    translate([Diametre/2,0,0])    color("lightskyblue") sphere(d=Epaisseur_barreaux,$fn=Qualite);    rotate([0,0,360/Nb_barreaux*(i+Decalage)])    translate([Diametre/2,0,Hauteur])    sphere(d=Epaisseur_barreaux,$fn=Qualite);    }    hull()    {    rotate([0,0,360/Nb_barreaux*i])    translate([Diametre/2,0,0])    sphere(d=Epaisseur_barreaux,$fn=Qualite);    rotate([0,0,360/Nb_barreaux*(i-Decalage)])    translate([Diametre/2,0,Hauteur])    sphere(d=Epaisseur_barreaux,$fn=Qualite);    }}translate([0,0,-Epaisseur_barreaux])color("lightcyan") cylinder(d=Diametre+Epaisseur_barreaux*2,$fn=Nb_barreaux,h=Epaisseur_fond); translate([0,0,Hauteur-Epaisseur_barreaux])color("lightcyan") cylinder(d=Diametre+Epaisseur_barreaux*2,$fn=Nb_barreaux,h=Epaisseur_fond); EL NOUEIRY Marya - Impressions 3D Impression 3D - 26 Octobre 2023 Aujourd'hui, j'ai eu l'opportunité de mettre en pratique ce que j'ai appris lors du cours d'introduction au prototypage du 18 octobre.  L'objectif était de créer des prototypes en utilisant l'impression 3D et de documenter le processus, voici comment tout s'est déroulé. J'ai décidé de créer deux objets différents pour expérimenter davantage avec l'impression 3D. Mon premier choix était une bouteille stylisée, tandis que le second objet était un cube comportant un cône imbriqué à l'intérieur, créant un design intéressant. Tout a commencé par la phase de conception sur un logiciel de modélisation OpenScad. ; j'ai créé des fichiers .STL pour chaque objet, en veillant à ce que les mesures et les dimensions soient précises.  Une fois les fichiers prêts, j'ai transféré les modèles sur l'ordinateur qui contrôlait l'imprimante 3D. J'ai utilisé du PLA pour mon impression. L'imprimante 3D a commencé à produire mes objets couche par couche. Le processus a été fascinant à observer, et il a fallu un peu de temps pour imprimer les deux prototypes. Après l'impression, j'ai retiré soigneusement les objets de la plateforme d'impression et éliminé tout support inutile. Résultats et Images : Vous trouverez ci-dessous des images des prototypes imprimés, ainsi que des photos des modèles en 3D pour mieux comprendre le processus : Cette expérience d'impression 3D au FabLab m'a permis de mieux comprendre le prototypage et la fabrication additive, ainsi que les avantages de l'impression 3D en tant qu'outil de conception. Impression 3D - 16 Novembre 2023 Test d'une sphère dans une sphère (Avec Eloise, Ryan et Sanjay) En codant une simple sphère sur OpenScad, et en la vidant de son remplissage sur Idea maker nous avons réussit a imprimer uniquement la coque de la sphère.  Ensuite, nous avons réimprimé la même sphère avec un PLA transparent en y plaçant notre première petite sphère dans le but de savoir si la technique était possible avec une sphère de taille plus importante mais aussi pour tester le PLA transparent. Code : $fn=1000; // Augmenter le nombre de faces pour une sphère plus lisse d=5;a=5;H=0;R=40;N=90 difference()    { difference() {    sphere(r=R-a/2);    for (i=[1:1:N]) {        rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2])        cube([100,a-4,a], center=true);    }};   sphere(r=(R-a/2)-2);}; Résultat final : Notre sphère est de 5cm de diamètre et contient une sphère de 2cm de diamètre en jaune a l'intérieur. Étant donné que le test de la sphère dans un sphère fût concluant, nous avons réitérer le test mais cette fois ci de manière plus complexe en y insérant des trous pour visualiser davantage l'objet a l'intérieur mais toujours avec un PLA transparent. Nous avons décidé d'imprimer cette sphère en 4 copies pour que chacun ait la sienne en y insérant l'objet de notre choix. J'ai choisi d'imprimer un flocon de neige bicolore : Une face en blanc et l'autre face en rouge pour placer a l'intérieur de la sphère. Lien thingiverse du flocon : https://www.thingiverse.com/thing:12034 Visualisation sur idea maker : Au moment de l'impression, pour libérer des imprimantes et optimiser le temps, j'ai décidé d'imprimer mon objet sur le même plateau que 2 autres personnes qui voulaient imprimer un objet à l'aide des mêmes bobines. Cependant, l'impression a échoué car un des objet imprimé était trop peu stable et a donc perturbé l'impression de tous les objets du plateau. De ce fait, par manque de temps pour imprimer un nouvel objet, j'ai décidé de ne mettre que des bouts de plastique PLA oranges, trouvés au fablab, à l'intérieur de ma sphère. Processus d'impression : 1) Lancement de l'impression de la sphère de 5cm de diamètre 2) Arrêt de l'impression lorsque 1/4 de la sphère s'est formée (Ou on aurait pu optee pour une planification paramètres avancées sur IdeaMaker nous permettant de planifier une pause a l'hauteur souhaitée) 3) Insertion des bouts de PLA dans la sphère 4) Reprise et fin de l'impression de la sphère Le résultat final après décrochage du support : Rita Matar Cours : 18 Octobre 2023 Découverte d'OpenSCAD et de son language pour créer un objet 3D. Matérialisation de l'objet sur Ideamaker pour transférer sur une imprimante 3D 26 Octobre 2023 Créer des objets en utilisant la différence, la translation et l'union Lors de notre première séance, j'ai eu l'occasion de m'initier à l'utilisation d'une imprimante 3D. Pour préparer l'impression, j'ai appliqué les enseignements que j'ai acquis lors du cours du 18 octobre 2023 sur Openscad. Cela m'a permis de créer deux objets : l'un assez ordinaire et l'autre plutôt original. Objet ordinaire -> Verre à Pied : Objet Original -> Sphère dans une pyramide : J'ai choisi de n'imprimer que le premier objet, car imprimer les deux demandait beaucoup de temps, environ 1 heure pour le verre à pied seul, et 5 heures pour les deux. Une solution pour réduire le temps aurait été de réduire la taille, mais je tenais à ce que le verre à pied ait une taille d'au moins 4 cm, c'est pourquoi j'ai opté pour l'impression d'un seul objet. L'impression s'est bien déroulée, et le retrait du support et des soutiens n'a pas été difficile grâce aux pinces mises à disposition dans le FabLab. Résultat final du Verre à Pied : Conclusion Cette première expérience avec les imprimantes 3D du FabLab à été très agréable et instructif, cela ma permis d'avoir un avant gout et une première compréhension de la fabrication 3D et du prototypage. Cours : 27 octobre 2023 Pour la manipulation de deux filaments différents : dans ideaMaker, la configuration des deux extrudeurs de la machine (gauche et droite) peut être ajustée lorsque l'on utilise deux matériaux distincts. Les paramètres nécessaires peuvent être adaptés en dupliquant le code existant, en le divisant en deux, puis en insérant le nouvel objet à imprimer à côté de l'objet précédent sur ideaMaker. Post-traitements : Sable : prenez l'objet imprimé, placez-le dans un récipient avec du sable, tassez-le, puis mettez-le au four à 110 °C. Le PLA se ramollira légèrement, favorisant une meilleure adhérence entre les couches Solvant : l'évaporation avec la chaleur permet d'obtenir de la transparence, particulièrement efficace avec des filaments transparents Devoirs : Créez un objet pour lequel vous mettez l'impression en pause, puis insérez un autre objet à l'intérieur avant de reprendre l'impression Utiliser différentes couleur de files pour colorer un objet 3D 15 octobre 2023 Au vu de la période de l'année dans laquelle on se trouve j'ai décidé d'imprimer une boule de Noël bi-colore et d'insérer un grelot à l'intérieur. Boule de Noël -> visualisation sur Openscad                                               Grelots à insérer Lors de l'étape d'impression nous avons pris la décision avec deux de mes camarades d'imprimer nos objets en même temps, afin de libérer des imprimantes et de gagner du temps. Malheureusement, l'impression a rencontré un échec en raison de l'instabilité de mon objet 3D par manque de support. Perturbant ainsi l'ensemble du processus d'impression sur le plateau. En arrivant au Fablab pour récupérer nos objet, on nous a expliqué que nos objets on été jeté nous n'avons donc pas pu prendre le "résultat" en photo. Par manque de temps je n'ai pas pu imprimer de nouvel objet. Conclusion Cette expérience souligne l'importance de la planification minutieuse et de la stabilité des modèles 3D, tout en rappelant la nécessité de gérer efficacement le temps disponible dans des environnements comme le Fablab Bien que le résultat n'ait pas été conforme à mes attentes, cette expérience a néanmoins enrichi ma compréhension des défis liés à l'impression 3D et m'a incité à envisager des améliorations pour de futures collaborations dans des projets similaires. Cours : 16 Novembre 2023 Introduction à l'ARDUINO : cartes électroniques programmables (donc dotées d'un processeur et de mémoire) sur lesquelles nous pouvons brancher des capteurs de température, d'humidité, de vibration... Cours : 8 Décembre 2023 Sanjay APAVOU 18/10/23 Première séance prototypage et initiation avec d'un logiciel de code en 3D openSCAD et ideaMAKER pour imprimer nos objets 26/10/2023 Voici les deux objets que j'ai imprimé en 3D Le premier étant une gourde cylindrique avec le bas de la gourde plus fin que le haut. L'intérieur étant creuser avec la fonction translate. De plus j'ai rajouté un bouchon sphérique a l'intérieur d'un cylindre pour fermer cette gourde grâce a la fonction union puis translate pour visualiser si le bouchon correspondait bien au diamètre de la gourde. Cependant, j'aurais pu agrandir le trou dans la gourde pour améliorer sa contenance. Le deuxième objet que j'ai choisi de faire était a la base une bague en forme d'hélice double brin d'ADN cependant je n'ai pas réussi a faire la bague alors je me suis contenté de faire uniquement la double hélice d'ADN sur un support, plus un objet de décoration qu'une bague… Je me suis inspiré d'un code qui existait déjà que j'ai modifié pour ajouter le socle et faire les brins de manière plus réaliste. Cependant lors de l'impression, beaucoup de support était nécessaire pour que l'objet s'imprime correctement. Peut être qu'en utilisant un support issu de matériaux solvable en solution cela aurait été plus simple pour retirer les support. Code ADN : // VARIABLES // hauteur helix helix_height=150; // Degrés de rotation twist_amount=360.0; /* bras */ //  Distance du centre aux bras arm_distance=23; // Épaisseur des bras arm_thickness=15; // Largeur des bras arm_width=.35; // Angle pour décaler un bras afin qu'ils ne soient pas alignés. arm_offset=45; /* Poutres transversales */ // Hauteur de la poutre beam_height=3; // Largeur de la poutre beam_width=6; // Arrondi de la poutre beam_roundness=1.5; // Nombre de poutres num_beams=10.0; /* Base */ // Hauteur de la base base_height=5; // Rayon de la base base_radius=37; // Ratio du rayon supérieur au bas de la base base_taper=.95; module roundedcube(xx, yy, height, radius) { difference(){   cube([xx,yy,height]);   difference(){       translate([-.5,-.5,-.2])       cube([radius+.5,radius+.5,height+.5]);       translate([radius,radius,height/2])       cylinder(height,radius,radius,true);   }   translate([xx,0,0])   rotate(90)   difference(){       translate([-.5,-.5,-.2])       cube([radius+.5,radius+.5,height+.5]);       translate([radius,radius,height/2])       cylinder(height,radius,radius,true);   }   translate([xx,yy,0])   rotate(180)   difference(){       translate([-.5,-.5,-.2])       cube([radius+.5,radius+.5,height+.5]);       translate([radius,radius,height/2])       cylinder(height,radius,radius,true);   }   translate([0,yy,0])   rotate(270)   difference(){       translate([-.5,-.5,-.2])       cube([radius+.5,radius+.5,height+.5]);       translate([radius,radius,height/2])       cylinder(height,radius,radius,true);   } } } // CALCULATIONS beam_length=arm_distance*2-arm_thickness*.5; beam_twist=twist_amount/(num_beams+1.0); beam_delta=helix_height/(num_beams+1.0); beam_offset=arm_offset*.5; module arm_footprint(helix_r=50 ,arm_r=10 ) { skinny_arm = arm_r * arm_width; union() {   translate([ -helix_r + skinny_arm * .5,0]) square([skinny_arm,arm_r],center=true);   rotate([0,0,arm_offset])     translate([ helix_r - skinny_arm * .5,0])   square([skinny_arm,arm_r],center=true); } } module helix_coil(helix_r=100 , arm_r=10 , helix_h=100 ) { linear_extrude(height=helix_h, convexity=10, twist=-twist_amount, slices=500) arm_footprint(helix_r=helix_r ,arm_r=arm_r ); } // BASE linear_extrude(height=base_height, scale=base_taper)    circle(r=base_radius, $fn=400 ); // ARMS translate([0, 0, base_height]) helix_coil(helix_h=helix_height ,arm_r=arm_thickness ,helix_r=arm_distance ); // BEAMS translate([0, 0, base_height]) for ( i = [1:1:num_beams]) rotate([0,0,beam_twist*i])   translate([-.5*beam_length,           -.5*beam_width,           .5*beam_height + beam_delta*i])       rotate([0,90,beam_offset]) //beam       roundedcube(beam_height,beam_width,beam_length,beam_roundness); //rotate([0,0,-45]) //translate([100,0,0]) //cube([5,50,5], center=true); 27/10/2023 : Il nous a été demandé d'améliorer nos objets en utilisant différentes techniques présenté en cours notamment en utilisant deux filaments par exemple.Je pense modifier le code de la gourde pour la rendre plus profonde et faire le bouchon d'une autre couleur que la boule. Pour l'ADN je pense utiliser la technique des supports soluble Enfin il nous a été demandé de faire un troisième objet dans lequel nous devions mettre un objet dedans en arrêtant l'impression. 07/11/2023 : Test de la sphère dans une sphère : En codant une simple sphère sur open scad, et en la vidant de son remplissage sur idea maker nous avons réussit a imprimer uniquement la coque de la sphère. Nous avons a la suite réimprimer la même sphère avec un,PLA transparent en y plaçant notre première petite sphère. Nous avons fait cela car nous voulions voir si la technique était possible avec une sphère de taille plus importante mais aussi pour tester le PLA transparent. Ici nous avons une sphère de 5cm de diamètre avec une sphère de 2cm de diamètre en jaune a l'intérieur. 10/11/2023 : Nous avons réitérer le test de la sphère mais cette fois ci de manière plus complexe en y insérant des trous pour visualiser davantage l'objet a l'intérieur mais toujours avec un pla transparent. Voici le code que nous avons utilisé : $fn=100; // Augmenter le nombre de faces pour une sphère plus lisse d=5; a=5; H=0; R=40; N=90; difference()    { difference() {   sphere(r=R-a/2);   for (i=[1:1:N]) {       rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2])       cube([100,a-4,a], center=true);   } };   sphere(r=(R-a/2)-2);}; Voici la boule imprimer avec des morceaux de pla bleu dedans ainsi qu'une visualisation 3D avec idea maker. Pour mettre les morceaux de pla nous avons juste mis l'impression sur pause. A la suite nous avons en groupe imprimer 4 fois la même boule en y introduisant chacun un objet différent. Pour ma part j'ai choisi d'y introduire un renne jaune fluo pour qu'il soit visible a l'intérieur. Cependant je lui ai enlevé les pattes après l'impression sans faire exprès car l'ayant imprimer en petit elles étaient un peu fragile. Nous avons eu beaucoup de chances car l'imprimante c'est mis en pause seul a quasiment 3 quart de hauteur en raison de l'absence de fil ce qui nous a permis de mettre nos objets et de relancer. 07/12/2023 : En collaboration avec Ryan nous avons fait  un Arduino avec 3 leds qui clignotes en utilisant le code suivant : void setup() { pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(8, OUTPUT); } void loop() { digitalWrite(12, HIGH); digitalWrite(11, LOW); digitalWrite(8, LOW); delay(500); digitalWrite(12, LOW); digitalWrite(11, HIGH); digitalWrite(8, LOW); delay(500); digitalWrite(12, LOW); digitalWrite(11, LOW); digitalWrite(8, HIGH); delay(500); } Merci Ryan pour le débugEloïse Filley PROTOTYPAGE 18 / 10 / 2023 - 1ère séance au FabLab Introduction au prototypage Découverte du logiciel de code : openSCAD Découverte du logiciel d'impression 3D : ideaMaker Pour la fois suivante Imprimer un objet de notre choix Imprimer un objet infaisable sans imprimante 3D 25 / 10 / 2023 - Impression 3D 1) Imprimer un objet de notre choix Mon objet est un bouton de veste que j'ai codé à laide du logiciel open SCAD et que j'ai imprimé en 3D à l'aide du logiciel ideaMaker. J'ai choisi d'ajouter un rebord à mon bouton pour le rendre un peu plus complexe et plus design. J'ai inséré 4 cylindre au cendre de mon bouton pour compléter la forme de mon objet. Cependant, j'aurai pu compéter davantage mon bouton en codant des trous sur le logiciel openSCAD grâce à la commande difference() pour pouvoir coudre mon bouton à l'issue de l'impression. Code : DiametreBouton = 24;Epaisseur = 2;DiametreTrous = 4; DiametreRebord = 20;EpaisseurRebord = 1; //$fs is the minimum size of a fragment module boutonDeVeste() {    union() {         color("black") cylinder(h = Epaisseur, d = DiametreBouton, $fn = 100);              color("beige")        translate([0, 0, 2]) cylinder(h = EpaisseurRebord, d= DiametreRebord, $fn = 100);            // Crée les trous            for (i = [0:3]) {            angle = i * 90;            color("brown")            translate([cos(angle) * (DiametreBouton / 5), sin(angle) * (DiametreBouton / 5), 1])                rotate([0, 0, angle])                cylinder(h = Epaisseur +1, d = DiametreTrous, $fn = 100);                }    }}             // Affiche le boutonboutonDeVeste(); Résultat sur open SCAD : Résultat final : 2) Imprimer un objet infaisable sans imprimante 3D Mon objet est un smiley dont j'ai récupéré le code déjà existant que j'ai modifié pour choisir le caractère du visage puis je l'ai imprimé en 3D à l'aide du logiciel ideaMaker. Cependant, j'ai pris beaucoup de temps à comprendre le code pour pouvoir ensuite le modifier. Code : Visualisation sur idea maker : Résultat final : 27 / 10 / 2023 - 2ème séance au FabLab Améliorer nos objets imprimés Pour travailler avec 2 filaments différents : dans ideaMaker, on peut spécifier aux 2 extrudeurs de la machines (gauche et droite) si on utilise 2 matériaux différents, les valeurs changent. On peut garder le même code, le couper en 2 puis insérer le nouvel objet à créer et l'insérer à côté de l'ancien sur ideaMaker. Les différents post-traitements : Travailler avec le sable : prendre l'objet, le mettre dans un bécher avec du sable, on tasse puis on met au four à 110°, le PLA va se ramollir un petit peu et permettre aux couches d'adhérer entre elles Travailler avec du solvant : s'évapore avec la chaleur (permet d'obtenir de la transparence si on a utilisé un filament transparent) Note : Le radeau est la couche que l'on peut mettre en dessous de l'objet Pour la fois suivante Créer un objet dont ont met l'impression en pause puis on met un autre objet à l'intérieur avant de finir l'impression. Faire un post traitement sur l'ancien object pour faire mieux tenir entre elles les couches. 09 et 14 / 11 / 2023 - Recherches et impression 3D Les méthodes de post-traitements Lissage avec du solvant : certains matériaux d'impression 3D (ex: ABS), peuvent être lissés en utilisant des solvants comme l'acétone sur la surface de l'objet qui peut aider à fondre légèrement le plastique, créant ainsi une liaison plus forte entre les couches. Polissage mécanique : avec du papier de verre fin pour améliorer l'adhérence entre les couches et aider à éliminer les petites irrégularités de surface. Vaporisateurs adhésifs : certains sont conçus pour améliorer l'adhérence entre les couches et la surface du plateau d'impression, ils permettent d'aider à prévenir le décollement des bords pendant l'impression. Application d'adhésif : colles ou sprays d'adhérence utilisés sur le plateau d'impression pour une meilleure adhérence entre l'objet et la surface d'impression. Chauffage du plateau d'impression : peut améliorer l'adhérence en favorisant l'adhésion du matériau en fusion pendant l'impression (ex: l'ABS bénéficie particulièrement du chauffage du plateau). Modification des paramètres d'impression : des ajustements dans les paramètres d'impression (température d'extrusion, vitesse d'impression, résolution de la première couche) influencent l'adhérence entre les couches. Utilisation de l'aide à la dissolution : PVA (filament spécial, ex: alcool polyvinylique) est utilisé comme support soluble qui peut être dissous après l'impression pour laisser une surface plus lisse et favoriser une meilleure adhérence entre les couches. --> Les méthodes varient selon le matériau d'impression 3D et des spécificités de l'imprimante Impression 3D : objet avec arrêt d'impression Test de ma sphère dans une sphère (Avec Sanjay, Ryan et Marya) En codant une simple sphère sur open scad, et en la vidant de son remplissage sur idea maker nous avons réussit a imprimer uniquement la coque de la sphère. Ensuite, nous avons réimprimé la même sphère avec un PLA transparent en y plaçant notre première petite sphère dans le but de savoir si la technique était possible avec une sphère de taille plus importante mais aussi pour tester le PLA transparent. Code : $fn=1000; // Augmenter le nombre de faces pour une sphère plus lisse d=5;a=5;H=0;R=40;N=90 difference()    { difference() {    sphere(r=R-a/2);    for (i=[1:1:N]) {        rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2])        cube([100,a-4,a], center=true);    }};   sphere(r=(R-a/2)-2);}; Résultat final : Notre sphère est de 5cm de diamètre avec une sphère de 2cm de diamètre en jaune a l'intérieur. Étant donné que le test de la sphère dans un sphère fût concluant, nous avons réitérer le test mais cette fois ci de manière plus complexe en y insérant des trous pour visualiser davantage l'objet a l'intérieur mais toujours avec un PLA transparent. Nous avons décidé d'imprimer cette sphère en 4 copies pour que chacun ait la sienne en y insérant l'object de notre choix. J'ai choisi d'imprimer un bonhomme de neige bicolore : son chapeau en rouge et son corps en blanc. Visualisation sur idea maker : Au moment de l'impression, pour libérer des imprimantes et optimiser le temps, j'ai décidé d'imprimer mon objet sur le même plateau que 2 autres personnes qui voulaient imprimer un objet à l'aide des mêmes bobines. Cependant, l'impression a échoué car un des objet imprimé était trop peu stable et a donc perturbé l'impression de tous les objets du plateau. De ce fait, par manque de temps pour imprimer un nouvel objet, j'ai décidé de ne mettre que des grains de riz à l'intérieur de ma sphère. Processus d'impression : 1) Lancement de l'impression de la sphère de 5cm de diamètre 2) Arrêt de l'impression lorsque 1/4 de la sphère s'est formée (slice - éditer - autre - entrer la hauteur du stop) 3) Insertion des grains de riz dans le sphère 4) Reprise et fin de l'impression de la sphère Résultat final : Une sphère trouée transparente avec des grains de riz dedans. 16 / 11 / 2023 - 3ème séance au FabLab Retour sur l'impression 3D J'aurai pu améliorer l'impression de mon bonhomme de neige en l'imprimant seul sur le plateau en ajoutant plus de support pour optimiser l'impression. Avec le groupe, nous aurions pu planifier l'arrêt d'impression directement dans les paramètres de Idea Maker au lieu de le faire manuellement sur l'imprimante. Raccourci : Slice - Éditer - Autre - Entrer la hauteur du stop Introduction à l'Arduino 03 / 12 / 2023 - Apprentissage d'Arduino à la maison Lien pour voir les LEDs s'allumer https://www.canva.com/design/DAF17lzBbMo/2mA7eiOW7RgZ_L6_-h8MbQ/edit?utm_content=DAF17lzBbMo&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton Installation d'Arduino J'ai emprunté un Starter Kit Arduino au FabLab afin d'apprendre à utiliser un Arduino seule, à la maison. J'ai tout d'abord télécharger l'application Arduino IDE 2.2.1-arm64 sur mon ordinateur pour pouvoir coder un programme me permettant de faire clignoter des LED intégrées Arduino. 1) Faire clignoter une LED intégrée Arduino pendant 3 secondes Code : void fonctionnement() {         pinMode(13, OUTPUT);         //du courant est envoyé sur la borne 13 donc la LED est alimentée et s'allume } void boucle() {        digitalWrite(13, HIGH);        delay(3000);        //la LED reste allumée pendant 3s        digitalWrite(13, LOW);        //absence de courant sur la pin 13       delay(3000);        //la LED reste éteinte pendant 3s } 2) Faire clignoter 3 LEDs intégrées Arduino en alternance pendant 1 seconde Code : void fonctionnement() {        pinMode(13, OUTPUT);        pinMode(9, OUTPUT);        pinMode(7, OUTPUT); } void boucle() {        digitalWrite(13, HIGH);        digitalWrite(9, LOW);        digitalWrite(7, LOW);        delay(1000);       digitalWrite(13, LOW);       digitalWrite(9, HIGH);       digitalWrite(7, LOW);       delay(1000);       digitalWrite(13, LOW);       digitalWrite(9, LOW);       digitalWrite(7, HIGH);       delay(1000); } Résultat final : (Lien pour voir les vidéos des LEDs s'allumer en haut) 08 / 12 / 2023 - dernière séance au FabLab Les technologies Web Markup Language : formater avec des balises Cascading Style Sheets / CSS : définir des styles Javascript : dynamiser les pages Chaque page du site web est structurée suivant le DOM (Document Object Model) Les framework Javascript Manipuler et éditer "facilement" le DOM (Document Object Model) pour changer le texte, ajouter ou supprimer des éléments JS --> Node --> ANgularis JS, Vu JS et Recat JS Les applications web Site dynamique : HTML, CSS, JS, Node Transformateur du web en application : PhoneGap, Cordova, Capacitor. Ils récupèrent le programme d'un navigateur (son moteur) et il encapsule tout avec le site web, dans l'application Application : Site dynamique + navigateur inclus 1ère approche : 1 seule application pour 2 interfaces Interface Design : génère l'apparence c'est à dire HTML et CSS Interface Développement : language graphique Scratch homologue du Python, les blocs sont utilisés pour contrôler les façons de réagir à ce qu'il se passe dans l'interface Design App Inventor génère l'application : En phase de test : AppInventor génère un QR-code et l'application installée permet au projet de tourner sur le smartphone En phase de développement : AppInventor génère un fichier éxécutable pour chaque architecture (App Store et Google Play) Création d'une Application - MIT AppInventor https://ai2.appinventor.mit.edu/#6291003767914496 Liste de tous les boutons que l'on peut ajouter : Interface utilisateur : Cassandra d'ALMEIDA COURS 1 de prototypage, Avec Christian Simon Master Management de l'Innovation Le 18/10/23 par Cassandra d'ALMEIDA Apprentissage du logiciel OpenSCAD et de IdeaMaker Création d'un cône de glace. Code : //////cylinder(20,0.1,5); color("pink")translate([0,0,21])sphere(5); Le 16/11/2023 Création d'un objet bi-colore J'ai réalisé un cube avec écrit dessus "CASS" en 3D à l'aide des logiciels OpenScad et Idea Maker. L'objectif de cette impression était de réaliser un objet plus complexe avec deux couleurs. Après une heure d'impression, j'ai changé la bobine de PLA blanche par une autre bobine de couleur orange. J'ai réussi à faire un léger changement de couleur en suivant ce tutoriel : https://youtu.be/x09myaTBqHg?si=pT9wq2HO7ukT77Gd echo(version=version()); font = "Liberation Sans"; cube_size = 60; letter_size = 50; letter_height = 5; o = cube_size / 2 - letter_height / 2; module letter(l) { // Use linear_extrude() to make the letters 3D objects as they // are only 2D shapes when only using text() linear_extrude(height = letter_height) { text(l, size = letter_size, font = font, halign = "center", valign = "center", $fn = 16); } } difference() { union() { color("gray") cube(cube_size, center = true); translate([0, -o, 0]) rotate([90, 0, 0]) letter("C"); translate([o, 0, 0]) rotate([90, 0, 90]) letter("A"); translate([0, o, 0]) rotate([90, 0, 180]) letter("S"); translate([-o, 0, 0]) rotate([90, 0, -90]) letter("S"); } translate([0, 0, o]) letter("\u263A"); translate([0, 0, -o - letter_height]) letter("\u263C"); } Limites rencontrées : le temps d'impression étant très long (environ 9h car 3 objets à imprimer en même temps), je n'ai pas pu faire le changement de couleur à la moitié de mon objet comme prévu initialement. De plus, au niveau de l'emoji, l'impression n'est pas bien finie. En effet, cela est probablement due au fait que le cube soit vide. Or, l'imprimante , ne peut pas imprimer dans le vide. Enfin, je n'ai pas réussi à retirer le support complètement. GORNOV Polina GORNOV Polina Séance 2 Boite Séance 1 Vase à fleurs Réalisation d'un vase tournant Raihana ABDUL MU4MN011-Prototypage Séance n°1 : Introduction à OpenSCAD 18/10/2023 Première approche du logiciel OpenSCAD pour créer des objets en 3D Compréhension du langage Matérialisation de l'objet sur IdeaMaker afin de pouvoir transférer notre objet sur une imprimante 3D Première approche du logiciel : Code : d=5; a=10; // arrête des cubes H=100; // hauteur de la tour R=40; // rayon de la tour N=10; // nombre de cubes color("blue") cube(a,center=true); for(i=[1:1:N]) { rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2]) color("snow") cube(a,center=true); color("lightblue") cylinder(h=H,r=R); } Résultat : Exercices n°1 : Réalisation de l'objet de notre choix 26/10/2023 1. Réaliser n'importe quel objet 3D sur OpenSACD (essayer d'utiliser la différence ou l'addition). Micro : Code : color ("darkgrey") translate ([0,0,41]) rotate_extrude(convexity = 10, $fn = 100) translate([10, 0, 0]) circle(r = 0.5, $fn = 100); color ("Snow") translate([0,0,23]) cylinder(h=10, r=9.5, $fn = 200); color ("Bisque") translate([0, 9.3, 30]) sphere (r=1, $fn = 100); color ("Bisque") translate([0, 9.3, 27]) sphere (r=1, $fn = 100); color ("Bisque") translate([5, 8, 30]) sphere (r=1, $fn = 100); color ("Bisque") translate([5, 8, 27]) sphere (r=1, $fn = 100); color ("Bisque") translate([-5, 8, 30]) sphere (r=1, $fn = 100); color ("Bisque") translate([-5, 8, 27]) sphere (r=1, $fn = 100); color ("Chocolate") translate([2.5, 8.3, 28]) rotate([12, 90, 0]) square([2, 1]); color ("Chocolate") translate([-2.5, 8.3, 28]) rotate([-12, 90, 0]) square([2, 1]); color ("darkSalmon") cylinder(h=35, r=4, $fn = 50);  translate([0,0,40]) color ("darkgrey") sphere (r=10); color ("darkgrey") translate ([0,0,41]) rotate_extrude(convexity = 10, $fn = 100) translate([10, 0, 0]) circle(r = 0.5, $fn = 100); color ("Snow") translate([0,0,23]) cylinder(h=10, r=9.5, $fn = 200); Résultat : Résultat après impression : Commentaires : L'impression m'a pris 57min. Ne savant pas utiliser les différents bobines à disposition et ne savant pas encore paramétrer le logiciel d'impression Ideamaker mon micro à malheureusement qu'une seule et unique couleur. 2. Réaliser un objet 3D de notre choix sur OpenSACD qui ne peut être obtenu uniquement via l'impression 3D. Sorbonne Université : color ("DodgerBlue") rotate([0, 90, 0]) linear_extrude(height = 165, center = false, convexity = 10, twist = 4000, $fn = 100) translate([2, 2.5, 0]) circle(r = 1); color ("DarkTurquoise") linear_extrude(height=1) text ("SORBONNE UNIVERSITÉ", size = 10, valign = "centre", halign = "centre"); color ("DodgerBlue") rotate([0, 90, 0]) linear_extrude(height = 165, center = false, convexity = 10, twist = 4000, $fn = 100) translate([2, 2.5, 0]) circle(r = 1); color ("DarkBlue") rotate([0, 90, 0]) linear_extrude(height = 165, center = false, convexity = 10, twist = 4000, $fn = 100) translate([-2,-2.5, 0]) circle(r = 1); Je n'ai malheureusement pas réussi à l'imprimer en raison de problème lors de l'enregistrement de mon fichier sur OpenSCAD vers le ficher SQL. Dû à cette erreur de téléchargement que j'ai essayé de relancer plusieurs fois sans réussite, je n'ai pas la version imprimé de cet objet... Séance n°2 : Polyvalence des filaments et techniques d'impressions 1. Introduction Les imprimantes 3D offrent une grande polyvalence avec une variété de filaments et de techniques d'impression, ce qui élargit considérablement les possibilités de création. Elles sont compatibles avec différents types de filaments, chacun ayant des propriétés spécifiques. De plus, ces imprimantes prennent en charge des techniques avancées telles que l'impression multi-matériaux, l'impression bi-color/multi-couleurs, l'impression en double extrusion, et l'impression avec des supports solubles. Ces fonctionnalités permettent aux utilisateurs d'explorer des designs plus complexes et diversifiés. 2. Exemples de filaments PLA : Caractéristiques : Biodégradable, facile à imprimer, idéal pour le prototypage rapide. Avec aspect bois possible. Utilisations courantes : Projets non soumis à des contraintes de chaleur importantes. Fibres de carbone, de verre ou de métal : Caractéristiques : Filaments renforcés, offrent une résistance et une rigidité supérieures. Utilisations courantes : Pièces structurelles, prototypes haute performance. PVA : Caractéristiques : Soluble dans l'eau, utilisé comme support pour les impressions complexes. Utilisations courantes : Structures avec des surplombs, géométries complexes. Autres exemples : TPU (souple caoutchouteux), possibilité de faire varier les propriétés élastique, filament transparent, résine 3. Améliorer nos objets imprimés Pour travailler avec 2 filaments différents : dans IdeaMaker, on peut spécifier aux 2 extrudeurs de la machines (gauche et droite) si on utilise 2 matériaux différents, les valeurs changent. On peut garder le même code, le couper en 2 puis insérer un nouvel objet à créer et l'insérer à côté de l'ancien sur IdeaMaker. 4. Les différents post-traitements Travailler avec le sable : prendre l'objet, le mettre dans un bécher avec du sable, on tasse puis on met au four à 110°-120°, le PLA va se ramollir un petit peu et permettre aux couches d'adhérer entre elles. Cela va alors permettre de rendre l'objet plus adhésive, le durcir et renforcer la cohésion. Travailler avec des solvants : avec le fil métallique, mettre la pièce à l'intérieur d'un bêcher, le chauffer pour permettre l'évaporation du solvant (permet d'obtenir la brillance et la transparence de l’objet notamment si on a utilisé un filament transparent). Note : Le radeau est la couche que l'on peut mettre en dessous de l'objet Exercice n°2 Créer un objet un peu complexe et fonctionnel, dans IdeaMaker mettre l'impression en pause puis insérer un autre objet (comme une écroue, roulement en bille etc...) à l'intérieur puis reprendre l'impression. Si on veut mettre un objet solide il faut pas qu’il dépasse de la dernière couche -> à ras ou carrément à l'intérieur de la couche supérieur Faire un post traitement sur l'ancien object pour faire mieux tenir entre elles les couches. Naima DIKA 18/10/23 Lors de la première séance de prototypage : nous avons été initié au prototypage à l'aide des logiciels de code en 3D openSCAD et ideaMAKER pour imprimer nos objets. 27/10/2023 Pour ma première impression 3D, j'ai décidé de réalisé une "Toupie cône" avec OpenScad en utilisant le code suivant : $fn=100; // Réglage de la finesse de l'objet module toupie(){ difference() { rotate([0,0,0]) cylinder(h=10, r1=0, r2=5, center=true); translate([0,0,10]) rotate([0,0,45]) cube ([5,5,2], center=true); for (i = [0:90:360]) { rotate ([0,0, il) translate([6,0,01) cylinder(h=2, r=1, center=true); } } } toupie(); Il s'agit d'une toupie  cylindrique sous forme de cône avec une base circulaire. La rotation s'effectue via le pic du cône.  J'avais fait le choix de conserver le support de mon impression 3D afin de favoriser la rotation de ma toupie. 13/11/2023 Pour cette seconde impression, j'ai réalisé un kiosque en 3D à l'aide des logiciels OpenScad et Idea Maker. L'objectif de cette impression était de réaliser un objet plus complexe. J'ai décidé de mêler deux couleurs différentes pour mon objet. Au bout d'une heure impression j'ai changé la bobine de fil d'impression 3D par une autre bobine de couleur différente. Mon objet a le code openscad suivant : echo(version=version()); module example_translate() { translate([0, 0, -120]) { difference() { cylinder(h = 50, r = 100); translate([0, 0, 10]) cylinder(h = 50, r = 80); translate([100, 0, 35]) cube(50, center = true); } for (i = [0:5]) { echo(360*i/6, sin(360*i/6)*80, cos(360*i/6)*80); translate([sin(360*i/6)*80, cos(360*i/6)*80, 0 ]) cylinder(h = 200, r=10); } translate([0, 0, 200]) cylinder(h = 80, r1 = 120, r2 = 0); } } example_translate(); Lorsque j'ai récupéré mon objet, le support de l'impression était très épais et englobé la totalité du kiosque ainsi que les piliers. Il m'a été très difficile de l'enlever. Pour la prochaine fois, il serait intéressant que j'essaie de régler paramètre différemment pour obtenir un support moins épais. wissal haji Pour faire clignoter une led on a travaillé en groupe. ce code permet de clignoter une LED connectée au port 12 en boucle, on a configuré le port de la LED en mode sortie, ensuite On allume la LED , On attend 200 millisecondes, On éteint la LED et on attend à nouveau 200 millisecondes Pour l'objet dans objet , j'ai programmé une créer une boule à l'intérieure une cage. la cage est fermé j'ai juste pris une  capture d' écran pour montrer la boule à l'intérieure. Pour objets épais j'ai essayer de créer un bonne homme jardin avec fleur EL HELOU Muriel Prototypage Premièrement, dans ce cours on a appris les notions suivantes : OpenSCAD : OpenSCAD est un programme de modélisation 3D basé sur la programmation qui donne aux utilisateurs la possibilité de créer des objets tridimensionnels en écrivant du code plutôt que d'utiliser une interface graphique classique. Il se sert d'un vocabulaire particulier qui permet de définir des structures géométriques et d'effectuer des transformations complexes à partir de primitives simples. Il est possible d'exporter les modèles générés dans des formats qui sont compatibles avec l'impression 3D, comme le format STL. OpenSCAD est un logiciel gratuit et open source, ce qui implique qu'il est libre et modifiable en fonction des besoins de l'utilisateur. Ideamaker : Raise3D a développé IdeaMaker, un logiciel de découpage 3D qui permet de créer automatiquement des structures de support afin de simplifier l'impression de modèles complexes, notamment ceux avec des parties en surplomb. Il offre des options avancées qui offrent une grande personnalisation pour les utilisateurs expérimentés. Ce programme est particulièrement pratique pour créer des fichiers pour l'impression 3D en transformant des modèles 3D en instructions suivies par l'imprimante afin de créer l'objet final. De plus, cela offre une amélioration de la qualité d'impression, une diminution de la consommation de matériaux et la possibilité de visualiser le modèle découpé avant l'impression afin de repérer et corriger d'éventuelles erreurs. Impression 3D : Une imprimante en 3D est un dispositif qui permet de créer des objets en trois dimensions. Selon l'application et les caractéristiques de l'imprimante, ces imprimantes peuvent employer différents matériaux tels que des plastiques (par exemple le PLA), des céramiques ou des métaux. Elles permettent de fabriquer des prototypes rapidement et de concevoir des pièces aux formes complexes. Néanmoins, elles comportent également des contraintes, notamment en ce qui concerne la résolution et la précision. Devoir à faire On devait imprimer un objet en 3D en utilisant OpenSCAD et Ideamaker. Étape 1 : Pour ce devoir, puisque c'était notre première fois d'utiliser ce logiciel, j'ai décidé de choisir un objet à imprimer qui ne soit pas trop complexe, afin d'obtenir un objet réel. De ce fait, j'ai choisi d'imprimer une maison avec une porte et un toit. J'ai travaillé sur le code suivant pour obtenir ce premier brouillon de maison : module maison() {    difference() {        cube([40, 30, 20]);         translate([10, 0, 10]) cube([5, 2, 5]);       translate([25, 0, 10]) cube([5, 2, 5]);           translate([17.5, 0, 0]) cube([5, 2, 10]); hauteur = 10    }} module toit() {     {        translate([0, 0, 20])       rotate([0, 0, 0])        scale([1, 1, 0.7])        hull() {           translate([0, 0, 0]) cube([40, 30, 1]);            translate([20, 15, 15]) cube([0.01, 0.01, 15]);       }    }} maison();toit(); Étape 2 : Par la suite, j'ai dû modifier ce code pour ajuster les fenêtres et ajouter une cheminée. module maison() {    difference() {        cube([40, 30, 20]);       translate([10, 0, 10]) cube([5, 2, 5]);       translate([25, 0, 10]) cube([5, 2, 5]);       translate([17.5, 0, 0]) cube([5, 2, 12]);    }} module toit() {    {        translate([0, 0, 20])       scale([1, 1, 0.7])        hull() {           translate([0, 0, 0]) cube([40, 30, 1]);            translate([20, 15, 15]) cube([0.01, 0.01, 15]);       }    }} module cheminee() {    {        translate([30, 10, 25])       union() {            cylinder(h = 8, r = 2);           translate([0, 0, 8])            cylinder(h = 2, r1 = 2.5, r2 = 2);       }    }} module porte() {    {        translate([17.5, 0, 0])       union() {            cube([5, 0.5, 12]);                   translate([4, 0.75, 6]) sphere(r = 0.5);        }    }} maison();toit();cheminee();porte(); Étape 3 : Après encore quelques modifications, j'ai réussi à obtenir une maison que j'ai imprimée en 3D au Fablab. L'impression a pris environ 12 heures. Les microcontrôleurs C'est quoi ? La programmation et le prototypage électronique sont accessibles à tous grâce à l'intégration de microcontrôleurs Arduino sur une puce. Ces microcontrôleurs Arduino proposent un moyen efficace et accessible de mettre en œuvre des idées pour les expérimentés ainsi que les débutants. Utilisation : Il suffit de relier l'Arduino à un ordinateur, de créer un code simple dans l'environnement de développement Arduino, puis de le téléverser sur le microcontrôleur. Ce logiciel a donc la capacité de réguler des éclairages, des moteurs, et bien d'autres encore. Language : C/C++, mais qui a été simplifié afin de faciliter son apprentissage. App Inventor Cette application a été développée par le MIT. Elle offre la possibilité de concevoir et de développer des applications de manière visuelle. Les "blocs" de code de l'application sont convertis en code JavaScript. Au cours du test, un code QR est créé afin de visualiser l'application à l'aide de l'application "AI Companion". Toutefois, afin de proposer une application sur l'App Store (par exemple), il est indispensable d'avoir une licence Xcode.Maéva DORMANT Informations générales : UE : MU4IN011, Processus d'innovation, M1 Management de l'innovation Intervenant : M. SIMON, Directeur du Fablab de Sorbonne Université Étudiante : maeva.dormant@etu.sorbonne-universite.fr Notes de cours : Cours n°1 : Introduction à .openscad 1. Définition OpenSCAD est un logiciel de modélisation 3D basé sur le texte qui permet de créer des modèles 3D paramétriques en utilisant du code. Il est utilisé pour la personnalisation de pièces, la conception d'objets d'impression 3D, la réplication de pièces avec des variations et l'automatisation. C'est un outil utile dans l'éducation pour enseigner la modélisation 3D, la programmation et la géométrie. 2. Première approche du logiciel d=5; a=10; H=50; R=40; N=10; for (i=[1:1:N]) { rotate([0,0,i*360/N]) translate([(R-a/2),0,H+a/2]) cube(a,center=true); } cylinder(h=H,r=R,center=true); Cours n°2 : Polyvalence des filaments et techniques d'impressions 1. Introduction Les imprimantes 3D offrent une polyvalence en matière de choix de filaments et de techniques d'impression, permettant une vaste gamme de projets. Elles sont compatibles avec divers types de filaments. Chaque filament présente des propriétés spécifiques, offrant aux utilisateurs la flexibilité nécessaire pour choisir le matériau adapté à leurs besoins. En outre, les imprimantes 3D sont compatibles avec des techniques avancées d'impression, telles que l'impression multi-matériaux et multi-couleurs, l'impression en double extrusion, ainsi que l'impression avec des supports solubles. Ces fonctionnalités élargissent considérablement les possibilités de création. 2. Exemples de filaments PLA :- Caractéristiques : Biodégradable, facile à imprimer, idéal pour le prototypage rapide.- Utilisations courantes : Projets non soumis à des contraintes de chaleur importantes. Fibres de carbone, de verre ou de métal :- Caractéristiques : Filaments renforcés, offrent une résistance et une rigidité supérieures.- Utilisations courantes : Pièces structurelles, prototypes haute performance. PVA :- Caractéristiques : Soluble dans l'eau, utilisé comme support pour les impressions complexes.- Utilisations courantes : Structures avec des surplombs, géométries complexes. Cours n°3 : Les micro-contrôleurs 1. Introduction Les micro-contrôleurs Arduino sont de petits ordinateurs sur une puce, conçus pour rendre la programmation et le prototypage électronique accessibles à tous. Que l'on soit débutant ou confirmé, ils offrent un moyen puissant et abordable de donner vie à aux idées. 2. Utilisation simplifiée Pour les utiliser, il suffit de connecter l'Arduino à un ordinateur, d'écrire un code simple dans l'environnement de développement Arduino, puis de téléverser ce code sur le micro-contrôleur. Le programme peut contrôler des lumières, des moteurs, des capteurs, etc. 3. Langage accessible Le langage de programmation Arduino est basé sur C/C++, mais simplifié pour faciliter l'apprentissage. De nombreux exemples de code sont disponibles en ligne, ce qui facilite la création de projets amusants, éducatifs ou même pratiques. Cours n°4 : Développement d'applications mobiles pour les non-informaticiens 1. Un peu d'histoire Auparavant (avant 2007), les applications étaient natives en C++/C#. À la fin 2008, Apple et Android deviennent les 2 grands leaders du marché. À ces époques, les applications web étaient des pages de texte statique (HTML). Par la suite, le web 2.0 (pages actives) entrent en vigueur (HTML, CSS, JS). Les frameworks Javascript sont : React JS, Vue JS et ANGULAR JS. 2. App inventor C'est une seule application pour designer et développer créée par le MIT. Il permet de transformer le code de l'application en "bloc" en code JS. En phase de test, il génère un QR code et l'application "AI Companion" permet de la visualiser. Néanmoins, si l'on souhaite l'envoyer sur l'App store (par exemple), il faut une licence Xcode. Exercices : Exercices donnés lors du cours n°1 : Réalisation de l'objet de notre choix 1. Réaliser un objet 3D sur .openscad utilisant la différence ou l'addition. Mon choix s'est porté sur la réalisation d'un bonhomme de neige. J'utilise la différence pour créer des sphères creuses. Étape 1 : Code (Openscad) $vpt=[4,2.5,38]; $vpr=[83,0,29]; $vpd=250; // Boules difference(){ translate([0,0,10]) color("#FFFFFF") sphere(20); translate([-30,-30,-10]) color("#FFFFFF") cube([100,100,10]); color("#FFFFFF") sphere(13); } difference(){ translate([0,0,40]) color("#FFFFFF") sphere(15); translate([-30,-30,-10]) color("#FFFFFF") cube([100,100,10]); color("#FFFFFF") sphere(13); } difference(){ translate([0,0,60]) color("#FFFFFF") sphere(10); translate([-30,-30,-10]) color("#FFFFFF") cube([100,100,10]); color("#FFFFFF") sphere(10); } // Bras translate([-30,0,45]) rotate([0,100,0]) color("#582900") cylinder(20,2,2); translate([10,0,42]) rotate([0,80,0]) color("#582900") cylinder(20,2,2); // Nez translate([0,-10,60]) rotate([90,0,0]) color("#ff8000") cylinder(5,2,1); // Chapeau translate([0,0,65]) color("#000000") cylinder(2,12.5,12.5); translate([0,0,65]) color("#000000") cylinder(15,8,8); Étape 2 : Définition des paramètres d'impression (IdeaMaker) Pour imprimer en 1 heure(s) 57 min 18 sec, un objet de 50.000 x 32.936 x 66.235 : Type de filament : PLA 1,75 mm Couche : Hauteur de couche - 0,2500 mm / Coques - 1,0 Remplissage : Densité - 25% / Motif : Cubique Aide à l'adhérence : Radeau uniquement Étape 3 : Impression (Raise3D) Il suffit de lancer l'impression en respectant les paramètres d'impression. 2. Réaliser un objet 3D sur .openscad. Il doit être uniquement réalisable via l'impression 3D. Mon choix s'est porté sur la réalisation d'un chat assis. Étape 1 : Code (Openscad) $fn=30; // TÊTE difference(){ color("#E5E4E2") hull(){ translate([0,0,15]) scale([1,0.75,1]) sphere(7); } } // OREILLES module oreilles(){ hull(){ translate([2,0,0]) sphere(1); translate([-2,0,0]) sphere(1); translate([0,2,0]) sphere(1); }} translate([5,0,20]) rotate([-90,100,0]) color("#808080") oreilles(); translate([-5,0,20]) rotate([-90,-100,0]) color("#808080") oreilles(); // CORPS translate([0,1,1]) scale([1.8,1.5,1]) color("#E5E4E2") sphere(3); translate([0,1,2]) rotate([4,0,0]) color("#808080") cylinder(7.5,4,1.5); // QUEUE module queue(){ hull(){ translate([0,.5,13]) sphere(0.5); translate([0,4,18]) sphere(1); } } translate([0,4,-12]) color("#E5E4E2") queue(); // BRAS translate([-6,0,4.5]) rotate([0,75,0]) color("#808080") cylinder(5,1,1.5); translate([6,0,4.5]) rotate([0,-75,0]) color("#808080") cylinder(5,1,1.5); // MAINS module mains(){ scale([2,2,1]) sphere(.8); translate([0,-2,0]) scale([1,3,1]) sphere(.6); translate([-1,-2,0]) rotate([0,0,-20]) scale([1,3,1]) sphere(.6); translate([1.2,-1.5,0]) rotate([0,0,20]) scale([1,3,1]) sphere(.6); translate([-2,-.5,0]) rotate([0,0,-60]) scale([1,3,1]) sphere(.6); } translate([5.6,0,5 ]) rotate([-90,0,80]) color("#E5E4E2") mains(); translate([-5.6,0,5 ]) rotate([-90,0,80]) color("#E5E4E2") mains(); // JAMBES translate([-3,1,1]) rotate([-90,0,135]) color("#808080") cylinder(12,2,1.5); translate([3,1,1]) rotate([-90,0,-135]) color("#808080") cylinder(12,2,1.5); // PIEDS module pieds() { difference(){ scale([1,2,1]) sphere(2); translate([-2,-10,-2]) cube([5,20,2]); } translate([0,-3,.80]) sphere(.8); translate([-1,-3,.75]) sphere(.75); translate([1,-3,.75]) sphere(.75); } translate([-11.5,-8,3]) rotate([-90,15,-50]) color("#E5E4E2") pieds(); translate([11.5,-8,3]) rotate([-90,-15,50]) color("#E5E4E2") pieds(); Étape 2 : Définition des paramètres d'impression (IdeaMaker) Pour imprimer en 1 heure(s) 16 min 32 sec, un objet de 50.000 x 36.166 x 48.339 : Type de filament : PLA 1,75 mm Couche : Hauteur de couche - 0,2500 mm / Coques - 1,0 Remplissage : Densité - 25% / Motif : Cubique Aide à l'adhérence : Radeau uniquement Étape 3 : Impression (Raise3D) Il suffit de lancer l'impression en respectant les paramètres d'impression. Exercice donné lors du cours n°2 : Ajout de complexité 1. Réaliser un objet plus complexe. Par exemple, mettre un objet solide dans une impression 3D ou réaliser une impression bi-colore. Mon choix s'est porté sur la réalisation d'une sphère creuse. Étape 1 : Code (Openscad) $fn = 100; // Nombre de faces pour l-approximation de la sphère $r_ext = 20; // Rayon externe de la sphère $r_int = 15; // Rayon interne de la sphère creuse difference() { sphere($r_ext); translate([0, 0, 0]) sphere($r_int); } Étape 2 : Définition des paramètres d'impression (IdeaMaker) Pour imprimer en 2 heure(s) 38 min 33 sec, un objet de 60.000 x 60.000 x 60.000 : Type de filament : PLA 1,75 mm (transparent) Couche : Hauteur de couche - 0,500 mm / Coques - 1,0 Remplissage : Densité - 10% / Motif : Cubique Aide à l'adhérence : Radeau uniquement ⚠️ Lors de la définition de l'échelle, il faut veiller à ce que la sphère soit plus grande que l'objet à insérer. Étape 3 : Impression (Raise3D) Lors de l'impression, stopper l'impression à mi-hauteur (approximativement la moitié du temps d'impression) et insérer l'objet à l'intérieur de la sphère. 2. Réaliser un post-traitement sur l'objet précédent : https://www.youtube.com/watch?v=Jv-CbnB8Uz4&t=83s Réunir le matériel : Pièce imprimée avec du filament ABS - Boîte de conserve - Acétone Verser de l'acétone dans le récipient et le faire chauffer. Plonger la pièce dans la boîte et refermer. Exercice donné lors du cours n°3 : Montage simple À l'aide du cours, réaliser un projet simple à l'aide des micro-contrôleurs Arduino. Récupérer le cours. Réaliser le code. const int RED_LED_PIN = 0; // Broche pour la LED rouge const int GREEN_LED_PIN = 1; // Broche pour la LED verte void configurationInitiale() { pinMode(RED_LED_PIN, OUTPUT); // Configuration de la broche pour la LED rouge en sortie pinMode(GREEN_LED_PIN, OUTPUT); // Configuration de la broche pour la LED verte en sortie } void bouclePrincipale() { digitalWrite(RED_LED_PIN, HIGH); // Allumer la LED rouge digitalWrite(GREEN_LED_PIN, LOW); // Éteindre la LED verte delay(2000); // 2 secondes d'attente digitalWrite(RED_LED_PIN, LOW); // Éteindre la LED rouge digitalWrite(GREEN_LED_PIN, HIGH); // Allumer la LED verte delay(2000); // 2 secondes d'attente } void setup() { configurationInitiale(); } void loop() { bouclePrincipale(); } Simuler le montage sur Thinkercad. Réaliser le vrai montage Arduino. Exercice donné lors du cours n°4 : App inventor Mettre en place un premier programme, application et la tester sur notre téléphone.Salma MOSTAGHAT 18/10/23 : Découverte d'OpenSCAD (commandes simples, boucles et union et différence) ainsi qu'IdeaMaker. 26/10/23 : Tentative d'impression en 3D d'une coque de téléphone, grâce à un code élaboré sur Openscad : Voici le résultat obtenu :                           Je suis moyennement satisfaite du résultat, en effet les traits supérieurs ne sont pas compacts ce qui fait que la surface supérieure est très fragile. De plus, l'inscription sur ma coque n'est pas sortie lors de l'impression. Pour la prochaine séance : Reflechir à imprimer avec d'autres couleurs, d'autres matières 14/11/23 : Conception d'un objet 3D plus complexe que le précédent. Pour cet exercice, j'ai décidé de m'aventurer dans la modélisation d'un flocon de neige. Ce fut un challenge pour moi car je ne savais pas qu'on pouvait utiliser les fonctions sin et cos sur openSCAD. Voici mon programme : Par manque de temps, je n'ai pas pu l'imprimer au Fablab mais j'essaierai, la prochaine fois. Avec le trou que j'ai crée, je pourrai même le faire passer à travers un fil en guise de pendentif ou pour un bracelet. Louly NADJAR SÉANCE 1 Impression 3D d'une bobine pour fil Voici le code utilisé sur OpenSCAD : h = 20;r = 5;color("grey")translate([0,0,10])cylinder(h,r,r, center = true); color("red")for(i=[1:1:12]) {    rotate([0,0,i*30])translate([5,5,20]) circle(5);} color("red")for(i=[1:1:12]) {    rotate([0,0,i*30])translate([5,5,0]) circle(5);} Résultat souhaité : Résultat obtenu : Problèmes rencontrés : La plaque de haut de la bobine qui n'est pas présente. Elle était trop bien collée avec la machine et que c'était difficile à enlever. En bas du cylindre il y a eu un défaut mais je ne sais pas pour quelle raison. Impression 3D d'un objet impossible à réaliser autrement que par imprimante 3D Voici le code utilisé sur OpenSCAD : $fn = 100;ray_ext = 20;ray_cell = 2;distance_cell = 5;translate([0,0,20])sphere(r=ray_ext, $fn=$fn); module nid_ab(){    for (x = [-ray_ext : distance_cell : ray_ext]){        for (y = [-ray_ext : distance_cell : ray_ext]){            for (z = [-ray_ext : distance_cell : ray_ext]){                translate([x,y,z])                color("pink")sphere(r=ray_cell, $fn = 6);            }        }    }  }translate([0,0,20])nid_ab(); Voici le résultat souhaité : Malheureusement, je n'ai pas eu le temps d'arriver jusqu'à impression. ----------------------------------------------------------------------------------------------------------------------------- SÉANCE 2 Dans le but de persévérer pour créer ma bobine, j'ai réaliser un code un peu modifié, avec des extrémités plus épaisses notamment. De plus, pour le complexifier un peu, j'aimerai arrêter l'impression au milieu pour changer de couleur de fil. Voici le code utilisé : h = 30;r = 5;translate([0,0,15])cylinder(h,r,r, center = true); h2 = 5;r2 = 10;color("grey")translate([0,0,30])cylinder(h2,r2,r2, center = true); h2 = 5;r2 = 10;color("grey")translate([0,0,2.5])cylinder(h2,r2,r2, center = true); Ainsi que le résultat souhaité : Lahiaoui Zineb 27/10/2023 1er objet réalisé sur OpenSCAD : rosace Après une première séance d’initiation au codage 3D j’ai réalisé cette rosace avec le code ci-dessous. Avant l’impression j’ai rajouté des radeaux pour plus de stabilité pendant l’impression Malheureusement mon objet s’est décollé du support pendant l’impression, sûrement parce qu’il était trop fin il y’a eu un problème de cohésion ! De plus, non seulement il s’est décollé du support mais il aussi fondu 16/11/2023 Pour la troisième séance on devait faire un objet dans un objet j’ai eu deux idées pour cette partie ; La première faire un cube où je vais graver à l’intérieur un mot en l’occurrence ici j’ai rajouté le nom de mon projet PPE j’ai d’abord essayer avec ce code j’ai eu beaucoup de mal à placé le mot dans le cube Mais après plusieurs tentatives j’ai réussi à y parvenir ! Donc j’ai essayé de faire un autre objet complexe. C’est une fleur avec une boxe à l’intérieur. Sana MEBARKIA 18 / 10 / 2023 - 1ère séance au FabLab Introduction au prototypage Découverte du logiciel de code : openSCAD Découverte du logiciel d'impression 3D : ideaMaker 25 / 10 / 2023 - 2e séance au FabLab OBJET COMPLEXE : PARAPLUIE IMAGE PROTOTYPE : CODE: PROTOTYPE IDEA MAKER : OBJET AVEC UNION ET DIFFERENCE : TABOURET IMAGE PROTOTYPE : CODE : PROTOTYPE IDEA MAKER : RESULTAT À LA FIN DE L'IMPRESSION : Malheureusement, la anse du parapluie était trop fine et donc trop fragile et elle s'est facilement cassé. 15 / 11 / 2023 - 3e séance au FabLab Pour la conception d'un objet avec une pause durant l'impression, j'ai choisi de faire un support de téléphone bicolore. Je devrais donc mettre pause à l'impression au moment du changement de couleur. IMAGE PROTOTYPE : CODE : 08 / 12 / 2023 - 4e séance au FabLab ARDUINO : Le but de cette partie est d’allumer une Led à l’aide d’un Bouton poussoir. La led s’allume seulement si le bouton a été appuyer. La led est branchée sur la broche 2 et le bouton la broche 6 .On déclare deux variables qui prennent chacune la valeur d’une broches int ledPin = 2; int butPin = 6; Elles seront utilisées ensuite pour les configurer en entrer ou en sortie Ici la led est configurer en sortie et le bouton poussoir en entrer car celui-ci fournit une information logique Deux lignes de code suffisent pour permettre à la led de s’allumer il n’est donc pas nécessaire d’écrire une fonction elles serons directement dans la fonction principal (loop). Pour cela on déclare une variable val qui prendra la valeur du bouton poussoir en faisons une lecture si celui-ci est enfoncer il prendra elle prendra la valeur 1 sinon 0 cette valeur sera ensuite écrite dans le ledPin grâce au digitalWrite. BOUTON NON ENFONCÉ = LUMIERE ETEINTE BOUTON  ENFONCÉ = LUMIERE ALLUMÉBintou SIDIBE DRAME 1ER OBJET (25/10/2023) : UNION ET DIFFERENCE Code : union(){    intersection(){color ("white")cube(size=[8,8,8], center=true); color ("pink")sphere(r=4.50);} } difference()  {   color("lightcyan")cube(size=[7,6,7], center=true); sphere(r=3.75);} translate([0,0,6]) { union() {    color ("pink")cylinder (h = 5, r=0.7, center = true, $fn=100);    rotate ([120,10,0])color("white")cylinder (h = 5, r=0.7, center = true, $fn=100);rotate ([60,10,0])color("white")cylinder (h = 5, r=0.7, center = true, $fn=100); } }; translate([0,0,6]) { color ("lightcyan")sphere(r=1.60); } Aperçu : 2EME OBJET (26/10/2023) : LE POUVOIR DE L'IMPRESSION 3D Code : color ("peachpuff")linear_extrude(height = 8, center = true, convexity = 10, twist = -700, $fn=100) translate([2, 0, 0]) circle(r = 1); translate([2, 0, -4]) union() { color("salmon")circle(6,$fn=100);   } translate([1.2, -0.5, 6.60]) { difference() { color ("antiquewhite")sphere(r=3,$fn=100); rotate ([40,10,0])color ("antiquewhite")circle(10); } } translate([1, -0.80, 7]) { color ("peachpuff")cylinder (h = 4.2, r=0.70, center = true, $fn=100); } Aperçu : Je me suis rendue compte que le disque en rose est, contrairement à ce qu'on voit, un élément 2D donc pas imprimable. Il faudra le remplacer par un élément circulaire 3D. IMPRESSION 1ER OBJET (14/11/2023) Filament PLA transparent Impression 3D en 1h50 (imprimante Donatello) Impression du support en une dizaine de minutes Résultat (16/11/2023) : J'aurais aimé que le résultat soit moins opaque, que l'on puisse voir à travers mais je suis tout de même satisfaite du résultat car c'est ma première impression. La forme et la taille sont celles que je souhaitais. 1ER MONTAGE ARDUINO (05/12/2023) const int interrupteurPin = 7; const int ledPin = 13; void setup() { pinMode(interrupteurPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { int etatInterrupteur = digitalRead(interrupteurPin); if (etatInterrupteur == HIGH) { digitalWrite(ledPin, HIGH); // Allume la LED } else { digitalWrite(ledPin, LOW); // Éteint la LED } } ===> Allumage d'un LED jaune en fonction de l'état d'un interrupteur à glissièreHOURTZ Coralie 25 octobre 2023 1ère Séance au FabLab sur le thème du prototypage, prise en main du logiciel de modélisation 3D OpenSCAD pour l'impression. A la suite de cette première séance, j'ai dû utiliser ce logiciel pour modéliser en 3D un objet qui ne peut-être imprimé qu'à l'aide de l'imprimante 3D. Mon idée était de créer un tube dans lequel se déplacerait une boule sans jamais en sortir. J'ai donc commencé par la modélisation du tube creux fermé au deux extrémités. Premier problème rencontré : ma ne peut être synthétisée dans les airs, il faut donc qu'elle puisse reposer sur une surface lors de l'impression. Je l'ai donc codée pour qu'elle s'imprime à la base du tuyau. Cependant, avec une extrémité fermée, elle va s'imprimer sur la base et ne bougera donc plus a l'intérieur de mon tube. Face à ce deuxième problème, j'ai décidé de créer un trou dans la base du tube, dont le diamètre serait inférieur au diamètre de ma boule afin que celle-ci repose sur le support mais qu'elle ne puisse tout de même pas sortir de mon tube. Voici à quoi ressemble la modélisation 3D :   Voici à quoi ressemble le codage de cette pièce : La photo du résultat de l'impression est à venir... Victoria MISSAMOU MU4MN011-Prototypage Séance n°1 Exercice 1 : Réaliser un objet original color("black")translate([40, 5, 43]) sphere(r=5); color("white")translate([30, 5, 43]) sphere(r=5); color("white")translate([40, -3, 43]) sphere(r=5); color("purple")translate([30, -3, 43]) sphere(r=5); color("purple")translate([40, 6, 50]) sphere(r=5); color("black")translate([30, 6, 50]) sphere(r=5); color("black")translate([40, -6, 50]) sphere(r=5); color("white")translate([30, -6, 50]) sphere(r=5); color("purple")translate([47,5,43]) sphere(r=5); color("white")translate([47,1,43]) sphere(r=5); color("blue")translate([47,5,50]) sphere(r=5); color("black")translate([47,-1,50]) sphere(r=5); color("purple")translate([54,5,43]) sphere(r=5); color("purple")translate([60,5,43]) sphere(r=5); color("black")translate([68,5,40]) sphere(r=5); color("black")translate([75,5,35]) sphere(r=5); color("blue")translate([85,5,27]) sphere(r=5); color("purple")translate([35,1,53]) sphere(r=5); color("purple")translate([0,0,42])rotate([90, 0, 0]) scale([10, 10, 10]) difference() circle(2); color("white")translate([0,-15,42])rotate([90, 45, 60]) scale([10, 10, 10]) difference() circle(2); color("white")translate([0,15,42])rotate([90, 45, -60]) scale([10, 10, 10]) difference() circle(2); color("pink")polyhedron (points = [ [0, -10, 40], [0, 10, 40], [0, 10, 0], [0, -10, 0], [40, -10, 40], [60, 10, 40], [10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30, -10, 50], [30, 10, 50] ], faces = [ [0,2,3], [0,1,2], [0,4,5], [0,5,1], [5,4,2], [2,4,3], [6,8,9], [6,7,8], [6,10,11], [6,11,7], [10,8,11], [10,9,8], [0,3,9], [9,0,6], [10,6, 0], [0,4,10], [3,9,10], [3,10,4], [1,7,11], [1,11,5], [1,7,8], [1,8,2], [2,8,11], [2,11,5] ]); Remarque : Je pense que j'aurai du créer une boucle pour la création des minis boules. Le code est assez long et pas agréable à lire. Exercice 2 : Coder un objet  uniquement réalisable en impression 3D J'ai voulu réaliser un dodécaèdre. Je ne suis pas sure que cela soit réalisable uniquement en 3D. J'ai mis la boule dans une demi-sphère supporter par un cylindre Remarque : je me suis inspirée de la flamme olympique // Résolution $fn=50; translate (v=[0,0,12]) { difference() { difference() { // Sphère externe color("blue")sphere(r=10, $fn=50); translate(v=[0,0,2]) { //Sphère interne sphere(r=8, $fn=50); } } translate(v=[0,0,5]) { // Cube servant à couper cube(size = [20,20,10], center = true); } } color("blue")translate(v=[0,0,-10]) { cylinder (h=4, r1=5, r2=6, center = true); } } module dodecahedron(height) { scale([height,height,height]) //paramètre de taille { intersection(){ //faire un cube cube([5,5,4], center = true); intersection_for(i=[0:4]) //loop i from 0 to 4, and intersect results { rotate([0,0,72*i]) rotate([116.565,0,0]) cube([5,5,4], center = true); } } } } color("purple")translate([0,0,18])dodecahedron(4); Les prochaines étapes Définition des paramètres d'impression sur IdeaMaker Impression par Raise 3D  : travailler et approfondir la précision et la diversité de l'impression. Séance n°2 Exercice :  mettre un objet solide dans une impression 3D ou réaliser une impression bi-colore. color("pink")resize([20,8,20])translate([0,0,25])sphere(r=20); for (i=[0:12]){ angle = i*360/12; x = 20*cos(angle); y = 20*sin(angle); translate([x,y,0]) cylinder(h=2*20,r=5,$fn=100);} cylinder(h=2,r=20,$fn=100); translate([0,0,38])cylinder(h=2,r=20,$fn=100); Type de filament : PLA 1,75 mm (transparent) Séance n°3 Utilisation de l'arduino // C++ code // void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); // Wait for 1000 millisecond(s) digitalWrite(LED_BUILTIN, LOW); delay(1000); // Wait for 1000 millisecond(s) } J'ai réalisé le clignotement d'une LED via l'application TinkerCAD Yasemin SOGUTLU PROTOTYPAGE Open SCAD OpenSCAD est un logiciel de modélisation 3D basé sur un script qui permet aux utilisateurs de créer des modèles 3D en écrivant du code, plutôt qu'en utilisant une interface graphique interactive. Logiciel utilise un langage propre pour créer des modèles 3D. Ce langage permet de définir des formes géométriques, d'appliquer des transformations complexes à partir de primitives simples. Les modèles créés avec Open SCAD peuvent être exportés dans des formats de fichiers standard pour l'impression 3D tel que STL. C'est un logiciel libre et open source ce qui signifie qu'il est gratuit à télécharger, à utiliser et à modifier. Idea Maker Idea Maker es un logiciel de découpe 3D développé par Raise 3D qui peut générer automatiquement des structures de support. Le logiciel peut créer des supports nécessaires pour les parties en surplomb du modèle qui facilite ainsi l'impression de designs complexes. . Ils offrent des paramètres définis qui fournissent une personnalisation illimitée pour les utilisateurs avancés. C'est un logiciel idéal et utile pour préparer des fichiers pour l'impression 3D. Il convertit les fichiers de modèles 3D en instructions que l'imprimante 3D peut suivre pour créer l'objet physique. Il permet aux utilisateurs d'optimiser la qualité d'impression et d'économiser des matériaux. Il permet aussi aux utilisateurs de prévisualiser le modèle tranché avant l'impression ce qui peut aider à identifier et à corriger les problèmes éventuels. Impression 3D Une imprimante 3D est un dispositif qui permet de créer des objets tridimensionnels. Les imprimantes 3D peuvent utiliser une variété de matériaux, y compris des plastiques comme le PLA, des céramiques, des métaux et plus encore. Le choix du matériau dépend de l'imprimante et de l'application spécifique. Elle permet la production rapide de prototypes et la fabrication de pièces complexes. Cependant, elle peut présenter des inconvénients comme une résolution et une précision inférieures. SÉANCE 1 POT VÉGÉTAL Code: // Paramètrespot_diameter = 100;pot_height = 100;wall_thickness = 15;drain_hole_diameter = 5;num_drain_holes = 4; // Module pour créer des trous de drainagemodule drain_holes() {    for(i = [0:num_drain_holes-1]) {        angle = i * 360/num_drain_holes;        x = (pot_diameter/2 - wall_thickness) * cos(angle);        y = (pot_diameter/2 - wall_thickness) * sin(angle);        translate([x, y, 0])        cylinder(r=drain_hole_diameter/2, h=wall_thickness+1);    }} // Création du potdifference() {    // Extérieur du pot    cylinder(r=pot_diameter/2, h=pot_height);   // Intérieur du pot    translate([0, 0, wall_thickness])    cylinder(r=(pot_diameter/2 - wall_thickness), h=pot_height);   // Trous de drainage    drain_holes();} Photo OpenSCAD: Photo IdeaMaker: Impression 3D: NON OBJET COMPLEXE: Code: // Dimensionsheight = 100;  // Hauteur du prismeradius = 50;  // Rayon de l'hexagonesphere_radius = 10;  // Rayon des sphères // Création du prisme hexagonalcylinder(h=height, r1=radius, r2=radius, $fn=6); // Fonction pour ajouter une sphère à un sommet du prismemodule add_sphere(angle, height) {    x = radius * cos(angle);    y = radius * sin(angle);    translate([x, y, height])        sphere(r=sphere_radius);} // Ajout des sphères aux sommets du prismefor(i = [0:5]) {    angle = i * 360/6;    add_sphere(angle, 0);  // Sphères à la base du prisme    add_sphere(angle, height);  // Sphères au sommet du prisme} Photo Open SCAD: Photo IdeaMaker: Impression 3D: OUI Photo de l'objet imprimé: Durée de l'impression : 1 heure SÉANCE 2 UNE CUBE ROUGE (avec un objet à l'intérieur): Pour la première session, j'avais créé un objet de couleur blanche. Pour la deuxième session, j'ai voulu expérimenter avec une couleur différente en utilisant la couleur rouge. En même temps, avant de démarrer la machine, j'ai appris comment changer la bobine lorsque je souhaite utiliser un autre matériel ou une couleur différente. J'ai lancé l'impression 3D, et la machine a commencé à créer l'objet. Lorsque j'en étais à la moitié de l'objet, j'ai arrêté la machine et j'ai placé à l'intérieur un petit objet. Puis la machine a continué à créer l'objet. Code : // Module pour créer un cubemodule monCube(cote) {    cube([cote, cote, cote]);} // Paramètres du cubecote = 30; // Longueur du côté du cube // Utilisation du module pour créer le cubemonCube(cote); Photo Open SCAD : Photo Idea Maker : Impression 3D: OUI Photo de l'objet imprimé : Durée de l'impression : 55 minutes Qiancheng JIANG 1. PROTOTYPE 3D - CUBE HIGH 5 Au debut je voulais faire une balle avec le logo de High 5 dessus, après je me suis rendu compte que c'est très dur de le faire avec Openscad. Du coup j'ai pensé à le faire sur un cube. Code: echo(version=version());font = "Liberation Sans";cube_size = 40;letter_size = 30;letter_height = 5;o = cube_size / 2 - letter_height / 2; module letter(l) {  linear_extrude(height = letter_height) {    text(l, size = letter_size, font = font, halign = "center", valign = "center", $fn = 16);  }} difference() {  union() {    color("green") cube(cube_size, center = true);    translate([0, -o, 0]) rotate([90, 0, 0]) letter("H");    translate([o, 0, 0]) rotate([90, 0, 90]) letter("I");    translate([0, o, 0]) rotate([90, 0, 180]) letter("G");    translate([-o, 0, 0]) rotate([90, 0, -90]) letter("H");  } translate([0, 0, o])  letter("\u263B");  translate([0, 0, -o - letter_height])  letter("5"); } Malheureusement j'ai mis le 5 en inverse sur la face vers le bas. PHOTO EN REEL: 1. PROTOTYPE 3D - Car Pour le deuxième produit, Je vais essayer de faire quelque chose d'un peu plus difficile, comme une petite voiture. Code: cube([60,20,10],center=true);translate([5,0,10 - 0.001])    cube([30,20,10],center=true);translate([-20,-15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([-20,15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([20,-15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([20,15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([-20,0,0])    rotate([90,0,0])    cylinder(h=30,r=2,center=true);translate([20,0,0])    rotate([90,0,0])    cylinder(h=30,r=2,center=true); Malheureusement, c'est parce que le matériau ne cessait d'obstruer l'ouverture de la buse au démarrage de l'imprimante 3D, de sorte que les deux roues situées de l'autre côté de la voiture n'étaient qu'à mi-hauteur. Et je n'ai pas cherché la bonne occasion pour mettre l'un des autres objets dans la voiture. (Je ne sais pas pourquoi je ne peux pas transférer les photos). La prochaine fois, il devrait être possible d'imprimer les roues séparément et de fabriquer un mécanisme permettant à la voiture de se déplacer, puis de fabriquer un toit convertible pour la voiture afin de pouvoir ajouter d'autres objets à l'intérieur. Fatmagul OZGUL : Les péripéties d'un apprenti sculpteur 3D Pour m'initier à la programmation avec OpenSCAD, j'ai créé un objet qui reprend les concepts abordés lors du premier cours. Il s'agit d'un dispositif conçu pour vous aider à prendre des décisions lorsque vous vous trouvez dans une situation où vous ne savez pas quoi faire. Il vous suffit de faire tourner l'objet, et la face qui est face à vous détermine votre choix, en suivant le code couleur : le vert signifie "oui" et le rouge signifie "non". Ainsi, vous pouvez attribuer le résultat à la destinée si les choses ne se déroulent pas comme prévu. P.S. : Cet objet n'a pas été imprimé en raison de préoccupations éthiques. Ensuite, j'ai décidé de créer un objet arborant le symbole de la Sorbonne Université. En effet, pendant mes trois années passées à cette université, je n'ai jamais eu l'occasion d'obtenir un objet portant le fameux logo de la Sorbonne Université, malgré ma participation à toutes les journées portes ouvertes et à l'écoute attentive de la promotion de leurs associations. J'ai donc décidé de prendre les choses en main et de créer moi-même un objet avec le symbole de la SU. Lors du processus de codage de cet objet, j'ai rencontré plusieurs problèmes : j'ai passé des heures à le coder sur OpenSCAD pour réaliser à la fin que tout le code était en 2D, donc non imprimable. Comme vous pouvez l'imaginer, cela m'a profondément déçu. Plutôt que de chercher des moyens pour le rendre en 3D, j'ai décidé de recommencer depuis le début en utilisant des fonction 3D. Cependant, il était extrêmement compliqué de trouver un moyen d'écrire 'Sorbonne Université' sur l'objet. Je commençait à perdre l'espoir (j'ai même sollicité ChatGPT, mais ses codes semblaient transformer les objets sur OpenSCAD en quelque chose de plus proche d'une possession démoniaque que d'une modélisation 3D). Finalement, j'ai découvert la fonction 'linear_extrude', que j'ai surnommé affectueusement 'mon_héros'. Grâce à cette fonction, j'ai pu convertir mon travail précédent en 2D en une version 3D. Même avec cette magnifique modélisation, mon objet a lamentablement échoué lors de son impression en 3D. En fait, je n'ai pas su ajuster correctement des paramètres cruciaux tels que la densité de remplissage et le support. J'ai également considérablement réduit la taille de mon objet (3 cm) car je ne voulais pas attendre des heures pour voir le résultat. Cependant, cette décision a abouti à un objet tellement petit et fragile que les supports étaient impossibles à enlever. La déception était à la hauteur de mon ambition... Cependant, je n'ai pas baissé les bras. J'ai décidé d'investir encore plus de plastique et d'énergie pour atteindre mon objectif ultime. En augmentant l'échelle à 7 cm et en ajustant les paramètres de densité (30% de remplissage, 1% de support), j'ai finalement réussi à obtenir l'objet tant désiré après une impression de 5 heures et 49 minutes: J'ai dû me livrer à une bataille d'une heure avec cette petite merveille pour retirer les supports à l'intérieur et autour sans briser les lettres "SU" que j'avais soigneusement intégrées. Ça a été un véritable défi... Le résultat final a pleinement justifié toutes les difficultés et souffrances endurées tout au long du processus. Maintenant que je sais qu'il existe des matériaux permettant d'avoir des supports solubles dans l'eau, je n'aurai plus à me casser la tête (ou les doigts) lors de mes prochains projets. Comme on dit, à cœur vaillant, rien d'impossible :)Maélanne Revol Prototypage : Séance 1 - FabLab : 18/10/2023 Introduction au prototypage : Initiation à l’utilisation du logiciel OpenScad (codage) Découverte du logiciel IdeaMaker (impression 3D) Travail à faire pour la session suivante : 1) imprimer un objet en 3D qui implique des opérations simples sur OpenScad, 2) imprimer ou coder pour un objet impossible ou très difficilement réalisable autrement que par impression 3D. Impression 3D : 18/10/2023 1) Impression d’un objet simple Pour cette exercice, j’ai choisi d’imprimer un rond de serviette. En effet, il s’agit d’un objet du quotidien et ayant une forme simple que nous avions abordé en séance de découverte du logiciel OpenScad. J’ai alors codé l’objet sur OpenScad et je me suis ensuite servie de IdeaMaker afin de l’imprimer au FabLab. Concernant les dimensions de mon objet, j’ai choisi des mesures qui me paraissaient cohérentes avec celles d’un objet utilisable au quotidien. Code sur OpenScad : // Définition des dimensionsdiametre_exterieur = 50; // Diamètre extérieur en mmdiametre_interieur = 40; // Diamètre intérieur en mmepaisseur_anneau = 23; // Épaisseur de l'anneau en mm// Création de l'anneaudifference() { // Anneau extérieur cylinder(d=diametre_exterieur, h=epaisseur_anneau); // J'enlève l'intérieur pour créer un anneau vide translate([0, 0, -1])  // J'ajuste pour éviter des problèmes de rendu cylinder(d=diametre_interieur, h=epaisseur_anneau + 2);  // +2 pour m'assurer que l'intérieur est complètement retiré} Aperçu visuel : COLLER LE STL OU CAPTURE OPENSCAD 1) Impression d’un objet impossible ou difficilement réalisable autrement que par impression 3D Pour ce faire, j’ai eu une discussion avec une connaissance passionnée d’impression 3D. Cette personne m’a parlé de semelles de baskets à l’image de certaines existantes de la marque Nike. Alors, cette connaissance m’a aidé à imaginer le code suivant : // Paramètres de la semellehauteur_semelle = 10;epaisseur_semelle = 5;taille_semelle = 30; // Fonction pour créer la semellemodule semelle() {    difference() {        // Création de la semelle        cube([taille_semelle, taille_semelle, hauteur_semelle]);       // Enlèvement du matériau pour créer la forme de la semelle        translate([taille_semelle/4, taille_semelle/4, 0])            cylinder(h=hauteur_semelle, r1=0, r2=taille_semelle/2, $fn=100);        translate([3*taille_semelle/4, taille_semelle/4, 0])            cylinder(h=hauteur_semelle, r1=0, r2=taille_semelle/2, $fn=100);        translate([taille_semelle/4, 3*taille_semelle/4, 0])            cylinder(h=hauteur_semelle, r1=0, r2=taille_semelle/2, $fn=100);        translate([3*taille_semelle/4, 3*taille_semelle/4, 0])            cylinder(h=hauteur_semelle, r1=0, r2=taille_semelle/2, $fn=100);    }} // Afficher la semellesemelle(); Aperçu visuel : COLLER STL Séance 2 - FabLab : 27/10/2023 Améliorer nos impressions 3D : Pour travailler avec 2 filaments différents : dans ideaMaker, on peut spécifier aux 2 extrudeurs de la machines (gauche et droite) si on utilise 2 matériaux différents, les valeurs changent. On peut garder le même code, le couper en 2 puis insérer le nouvel objet à créer et l'insérer à côté de l'ancien sur ideaMaker. Méthodes de post-traitement : Travailler avec le sable : prendre l'objet, le mettre dans un bécher avec du sable, on tasse puis on met au four à 110°, le PLA va se ramollir un petit peu et permettre aux couches d'adhérer entre elles Travailler avec du solvant : s'évapore avec la chaleur (permet d'obtenir de la transparence si on a utilisé un filament transparent) NB : Le radeau est la couche que l'on peut mettre en dessous de l'objet Autres post-traitements pour faire plus adhérer les couches entre elles : Chaleur contrôlée : Pour certains thermoplastiques comme le PLA, l'utilisation d'une source de chaleur contrôlée après l'impression peut aider à fusionner légèrement les couches, améliorant ainsi l'adhérence. Vernis ou laque acrylique : Appliquez une fine couche de vernis ou de laque acrylique sur la surface de la pièce. Cela peut contribuer à renforcer les couches en créant une couche externe plus solide. Ponçage et polissage : Utilisez du papier de verre fin ou des tampons de polissage pour lisser la surface de la pièce. Cela peut éliminer les petites irrégularités entre les couches et favoriser une meilleure adhérence. Travail à faire pour la session suivante : 1) Créer un objet dont ont met l'impression en pause puis on met un autre objet à l'intérieur avant de finir l'impression. 2) Faire un post traitement sur notre dernier object pour mieux faire tenir les couches entre elles. Imression 3D : 13/11/2023 1) Impression d’un objet contenant d’autres objets solides non imprimés Pour réaliser un contenant en 3D, j’ai choisi de réaliser une boite avec une particularité esthétique, dans laquelle je placerai des bonbons (mes objets solides non imprimés). Code sur OpenScad : // Création de la boîte length=60; linear_extrude(height = 3, center = false) difference() { square([length,40],center); for ( i = [1 : (length / 3)] ){   translate([i*3,4,0]) {     square([1,32]);   } } } cube([length,1,15]); translate([0,40,0]) {   cube([length,1,15]); } cube([1,40,15]); translate([length-1,0,0]) { cube([1,40,15]); } module prism(l, w, h){ polyhedron(    points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],    faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]] ); } Aperçu visuel : 1) Post-traitement : améliorer l’adhérence des couches entre elles Pour augmenter l’adhérence entre elles des couches de ma boite à bonbons, pour des raisons de praticité, j’ai décidé d’utiliser le post-traitement qui consiste à l’utilisation d’une source de chaleur contrôlé, en me servant d’un four. Je peux me permettre d’utiliser cette méthode puisque ma pièce est petite. Par contre, elle nécessite une surveillance constante afin d’éviter la surchauffe. Étant donné les aspérités que l’on peut remarquer visuellement tant sur la partie orange que sur le reste du radeau (partie blanche), et la difficulté à décoller le radeau, je vais procéder à un ponçage d’abord grâce à une ponceuse à bandes, puis grâce à du papier de verre fin.BEN ABOUBOU Omayma 18/10/2023 Première séance prototypage et initiation avec d'un logiciel de code en 3D openSCAD et ideaMAKER pour imprimer nos objets 26/10/2023 Voici les deux objets que j'ai imprimé en 3D 1er objet: J'ai souhaité créer un objet 3D en forme de verre en utilisant OpenSCAD Dans ce script OpenSCAD : hauteur verre définit la hauteur totale du verre. diametre_haut et diametre_bas définissent les diamètres du haut et du bas du verre, respectivement. epaisseur_paroi spécifie l'épaisseur des parois du verre. La fonction cylindre crée un cylindre, et la fonction difference() est utilisée pour soustraire le cylindre intérieur (la paroi) du cylindre extérieur, formant ainsi la structure creuse d'un verre. // Paramètres du verrehauteur_verre = 100;diametre_haut = 50;diametre_bas = 30;epaisseur_paroi = 5; // Création du verredifference() {    // Verre extérieur    cylinder(h=hauteur_verre, d=diametre_haut, $fn=100);   // Creuser le verre pour former la paroi    translate([0, 0, epaisseur_paroi])        cylinder(h=hauteur_verre + epaisseur_paroi, d=diametre_bas, $fn=100);} 2ème objet: Dans ce deuxième objet, j'ai souhaité créer une forme composée de deux formes qui sont collées ensemble, je les ai positionnées de manière à ce qu'elles se chevauchent ou se touchent, puis les combiner en une seule forme en utilisant l'opération d'union. Voici un exemple de code qui combine un cube et une sphère pour former une forme composite : // Crée un cubecube([20, 20, 20]); // Crée une sphèretranslate([10, 10, 10])    sphere(15); // Commente la création du cylindre pour le supprimer/*translate([30, 30, 10])    cylinder(h = 20, r1 = 0, r2 = 10);*/ // Combine les deux formes restantes en une seule forme compositeunion() {    cube([20, 20, 20]);    translate([10, 10, 10])        sphere(15);} Impression 3d: 3ème objet J'ai essayé de  créer une raquette de Ping Pong , comme première étape, j'ai créé la tête de la raquette avec ce code : // Paramètres de la tête de la raquettelongueur_tete = 150;       // Longueur de la tête de la raquettelargeur_tete = 70;         // Largeur de la tête de la raquetteepaisseur_tete = 10;       // Épaisseur de la tête de la raquette // Création de la tête de la raquettetranslate([longueur_tete / 2, largeur_tete / 2, epaisseur_tete / 2])    rotate([90, 0, 0])        cylinder(h = largeur_tete, r1 = longueur_tete / 2, r2 = longueur_tete / 2, $fn = 100); pour la deuxième étape, j'ai créé le poignet de la raquette avec ce code: // Paramètres du poignetlongueur_poignet = 140;diametre_poignet = 20; // Création du poignet de la raquette de ping-pongtranslate([longueur_tete / 2, largeur_tete / 2, epaisseur_tete / 2 - longueur_poignet])    rotate([90, 0, 0])        cylinder(h = longueur_poignet, r = diametre_poignet / 2, $fn = 100); Après, j'ai essayé de faire la réunion de ces deux parties précédentes avec le code suivant: // Paramètres de la tête de la raquette longueur_tete = 150;     // Longueur de la tête de la raquettelargeur_tete = 70;      // Largeur de la tête de la raquetteepaisseur_tete = 10;    // Épaisseur de la tête de la raquette // Paramètres du poignetlongueur_poignet = 180;diametre_poignet = 20; // Création de la raquette complèteunion() {    // Tête de la raquette    translate([longueur_tete / 2, largeur_tete / 2, epaisseur_tete / 2])        rotate([90, 0, 0])            cylinder(h = largeur_tete, r1 = longueur_tete / 2, r2 = longueur_tete / 2, $fn = 100);   // Poignet de la raquette (ajusté pour être collé à la tête)    translate([longueur_tete / 2, largeur_tete / 2, epaisseur_tete / 2 + 1])  // Ajustez la translation ici        rotate([180, 0, 0])            cylinder(h = longueur_poignet, r = diametre_poignet / 2, $fn = 100);} 16/11/2023 1) Impression d’un objet contenant d’autres objets solides non imprimés J'’ai choisi de réaliser un vase avec une particularité esthétique, dans laquelle je placerai des fleurs (mes objets non imprimés). Code sur OpenScad : // Paramètres du vasediametre_bas = 80;diametre_haut = 60;hauteur_vase = 120;epaisseur_parois = 5;inclinaison_col = 10; // Angle d'inclinaison du coldecoupes_decoratives = 6; // Nombre de découpes décoratives à la base // Définition du vasemodule vase() {    difference() {        cylinder(h = hauteur_vase, r = diametre_bas / 2, $fn = 100); // Base du vase            translate([0, 0, hauteur_vase - epaisseur_parois])            rotate([inclinaison_col, 0, 0]) // Inclinaison du col                cylinder(h = hauteur_vase + epaisseur_parois, r = diametre_haut / 2, $fn = 100); // Partie supérieure pour créer le col du vase       // Ajout de découpes décoratives à la base        for (i = [0:decoupes_decoratives - 1]) {            translate([cos(i * 360 / decoupes_decoratives) * (diametre_bas / 2 - epaisseur_parois), sin(i * 360 / decoupes_decoratives) * (diametre_bas / 2 - epaisseur_parois), 0])                rotate([0, 0, i * 360 / decoupes_decoratives])                    cube([epaisseur_parois * 2, epaisseur_parois * 2, hauteur_vase]);        }    }} // Afficher le vasevase(); 2) Faire un post traitement pour renforcer la cohésion Pour renforcer la cohésion de mon objet, j'ai choisi la technique du post traitement d'insertion de composants et accessoires. "Pour améliorer encore la fonctionnalité de mon objet imprimé en 3D , incorporer des inserts et du matériel est une excellente idée. Les accessoires peuvent être ajoutés pendant le processus d'impression ou après, en fonction des exigences du projet. En incorporant des pièces métalliques ou des éléments filetés, je peux créer des points de fixation sûrs, faciliter l'assemblage et améliorer l'intégrité structurelle." https://www.nouvelleecole.fr/blog/post-traitement-3d Jacqueline YOGENDRAN Prototypage 18/10/2023 : 1er cours de prototypage Premier cours sur la découverte du logiciel Openscad pour créer des objets en 3D Compréhension du langage Initiation à Ideamaker pour matérialiser notre l'objet afin de pouvoir l'imprimer À l'issu de ce premier cours, nous avons 2 exercices à faire pour le cours du 27/10/2023 : Réaliser un objet 3D sur Openscad en utilisant la différence ou l'addition. Réaliser un objet 3D sur Openscad. Celui-ci doit être uniquement réalisable via l'impression 3DJ'ai décidé alors de créer un parasol sur Openscad. Voici ci-dessous le code : //Construction de la tige du parasolcolor("white") cylinder(h = 50, r1 = 3, r2 = 1); //Ajout d'une base supplementairetranslate([0, 0, 3])  color ("grey") cylinder(h=2, r=5); //Construction de la base du parasoldifference() {  translate([0, 0, 0])  color ("grey") cylinder(h=3, r=10); } //Construction du toit du parasoltranslate([0, 0, 35])difference() {    color("pink") cylinder(h = 15, r1 = 30, r2 = 0)    sphere(20);} 26/10/2023 : Impression de mon parasol L'impression a été une réussite au premier abord, cependant lorsque j'ai du enlever les supports, mon objet a été très fragile et s'est malheureusement cassé... Voici un aperçu de ce qu'il en reste : Base du parasol : Toit du parasol : 27/10/2023 : 2eme cours de prototypage Discussion afin de pouvoir améliorer nos objets imprimés : ajout de complexité possibilité de pouvoir imprimer avec 2 filaments différents Courte présentation des différentes techniques de post-traitements pour faire adhérer les couches entre elles : Travailler avec le sable : permettre aux couches d'adhérer entre elles Travailler avec du solvant : permet d'obtenir de la transparence si on a utilisé un filament transparent Chaleur contrôlée Vernis ou laque acrylique Ponçage et polissage Pour le prochain cours : Réaliser un objet plus complexe : mettre un objet solide dans une impression 3D ou réaliser une impression bi-colore. Réaliser un post-traitement sur l'objet précédent. L'objectif est de le durcir et de renforcer la cohésion. 14/11/2023 : Création de mon deuxième objet 3D sur OpenSCAD Voici mon code pour la création d'un sphère contenant une autre sphère : //Création de l'objetdifference(){color("white")sphere(r=20, $fn=100);   color("white") sphere(r=15.7,$fn=100);   color("white")  cylinder(h=70,r=10.7, center=true, $fn=100);    color("white") rotate ([90,0,0]) cylinder(h=0,r=0, center=true, $fn=100);   color("white")  rotate ([0,90,0]) cylinder(h=70,r=10.7, center=true, $fn=100);   }// Ajout d'une sphère   color("pink") sphere(r=13.9,$fn=100); 16/11/2023 : 3eme cours de prototypage Tour de table sur les différents objets conçus par les étudiants de la classe Introduction à Arduino apporte une aide intelligence à des objets que l'on peut fabriquer Pour le prochain cours : Étudier les ressources mises à disposition sur Moodle concernant les Arduino 24/11/2023 : Atelier de prototypage avec Keyne Dupont 08/12/2023 : 4eme cours de prototypage Présentation des outils web Technologies web : Markup Language : formater avec des balises Cascading style sheets : définir des styles Javascript : dynamiser les pages Chaque page du site web est structuré suivant le DOM (document object model) Les applications web Site dynamique : HTML, CSS, JS, Node Transformateur du web en application : PhoneGap, Cordova, Capacitor. Les framework Javascript : Manipuler et éditer le DOM pour changer/ajouter/supprimer des éléments Une seule application pour designer et développer. App Inventor génère l'application : En phase de test : AppInventor génère un QR-code En phase de développement : AppInventor génère un fichier exécutable pour chaque architecture (App Store et Google Play) 1ère utilisation de App Inventor : Création d'une application Grégoire SIMON Prototypage Séance du 18/10/2023 Cette première séance de prototypage au FabLab a servis de séance d'introduction à ce que nous allions faire par la suite et comment. Nous avons donc découvert deux logiciels: Le premier est OpenScad, un logiciel de modélisation paramétrique dont nous avons appris les rudiments Le second est ideaMaker, un logiciel d'impression 3D dont nous avons aussi vu les bases et qui nous servira par la suite pour nos premières impressions. Séance du 27/10/2023 Pour cette seconde séance de prototypage nous devions réaliser deux objets, l'un de notre choix et l'autre qui n'est faisable que par impression 3D. Voici donc les objets que j'ai décidé de faire. 1) Objet de notre choix Le premier objet que j'ai choisis de faire est une sorte de jeu basé sur 2 objet: une base en forme de lampe torche et une boule. L'objectif du jeu serait alors très simple, essaye de faire tenir le plus longtemps possible la boule sur la base en tenant à bout de bras cette dernière. Voici le code utilisé sur OpenScad: Code: cylinder(10,10,20,true);translate ([0,0,-30]) cylinder(50,5,5,true);translate([0,0,13]) sphere(7); Résultat sur OpenScad: Résultat après impression: 2) Imprimer un objet uniquement faisable à l'imprimante 3D L'objet que j'ai décidé de faire ici est simplement un cercle composé d'un millier de dents minuscules. L'idée derrière cette réalisation est de faire une sorte d'engrenage hyper précis. Pour cela, j'ai réaliser le code suivant sur OpenScad. Code: // Paramètres du cercletaille = 50; // Taille du cerclenombre_dents = 1000; // Nombre de dents // Fonction pour créer un cercle avec des dentsmodule etoile_avec_dents() {    difference() {        union() {            for (i = [0:nombre_dents - 1]) {                rotate([0, 0, i * 360/nombre_dents])                    translate([0, taille / 2, 0])                        rotate([0, 0, -45])                            scale([1, 0.4, 1])                                square([taille, taille], true);                translate([0, taille / 2 + 5, 0]) // Ajustez la valeur 5 pour l'espacement des dents                    rotate([0, 0, i * 360/nombre_dents])                        rotate([0, 0, -45])                            scale([0.2, 0.2, 1])                                square([taille, 2, 5]);            }        }        circle(taille/2, true);    }} // Affiche le cercle avec des dentsetoile_avec_dents(); Résultat sur OpenScad: Résultat final: 3) Contenu de la séance On peut travailler nos objets avec des filaments différents. Pour cela, dans ideaMaker, on peut spécifier aux 2 extrudeurs de la machines (gauche et droite) si on utilise 2 matériaux différents, les valeurs changent. On peut garder le même code, le couper en 2 puis insérer le nouvel objet à créer et l'insérer à côté de l'ancien sur ideaMaker. De plus, il peut être intéressant de faire du post-traitement de nos produits. Par exemple, il peut être utile de travailler avec du sable avec le protocole suivant: prendre l'objet, le mettre dans un bécher avec du sable, on tasse puis on met au four à 110°, le PLA va se ramollir un petit peu et permettre aux couches d'adhérer entre elles. On peut aussi travailler avec du solvant car ce dernier s'évapore avec la chaleur, ce qui permet d'obtenir de la transparence si on a utilisé un filament transparent. Séance du 16/11/2023 Pour cette séance nous devions faire un objet dans lequel on doit insérer un autre et, faire en sorte que cet objet soit bicolore. Je me suis alors dit assez vite que je voulais faire un oeuf KinderSurprise. J'ai assez facilement trouvé le modèle que je souhaitais en ligne et ai simplement séparé les deux morceaux pour faire en sorte d'ensuite pouvoir imprimer de couleur différente les deux morceaux. Résultat sur ideaMaker: Résultat final: Justine LANNI Séance du 18/10/2023 : Au cours de cette séance, le fonctionnement de OpenSCAD et de IdeaMaker nous a été présenté. Quelques fonctions de base nous ont également été introduites. Séance du 28/10/2023: Pour cette séance, il s'agissait de réaliser 2 objet : un objet montrant qu'on a compris le principe de soustraction et d'addition et un objet réalisable uniquement en impression 3D. J'ai donc choisi de créer une perle et une souris. La perle : Voici le code que j'ai utilisé sur OpenSCAD : La souris : Voici le code que j'ai utilisé : module corps_souris() {    union() {        // Corps de la souris        scale([2, 2, 2])            sphere(9);            // Tête de la souris        translate([0, 0, 25])            scale([1, 1, 1])                sphere(10);    }} module oreilles_souris() {    union() {        for (angle = [30, 150]) {            rotate([0, 0, angle])                translate([13, 0, 27])                    scale([1, 1, 1])                        circle(5);        }    }} module yeux_souris() {    translate([-2, 3, 34]) {        for (angle = [0, 180]) {            rotate([0, angle, 0])                cylinder(h=1, d=3);        }    }}module yeux_souriss() {    translate([3, 3, 34]) {        for (angle = [0, 180]) {            rotate([0, angle, 0])                cylinder(h=1, d=3);        }    }}module queue_souris() {    translate([0, 0, -40])        cylinder(h=60, d1=2, d2=1);} module souris() {    union() {        corps_souris();        oreilles_souris(); // Ajout des oreilles        yeux_souris();     // Ajout des yeux        yeux_souriss(); //ajut de l'oeil 2        queue_souris();    }} souris(); On obtient cette représentation sur OpenSCAD avec ce code : ORKUSH Iryna Prototypage Lors de la séance d’introduction nous avons appris les bases sur OpenScad et IdeaMaker, telles que l’utilisation et le paramétrage des différentes figures géométriques, leur duplication, ainsi que l’application des fonctions difference, translate et rotate sur ces dernières. Séance 1 : 27/10 Prototypage d’une gourde Grâce à ces outils, nous devions mettre en place un objet de notre choix. Voici un bout de code de ma fonction. Résultat : Attention : l'objet n'est pas imprimé avec les couleurs telles que représentées sur l'image. Il faudra faire des réglages sur IdeaMaker avant l'impression pour les changements de couleurs. Séance 2 : 16/11 Par la suite, il nous a été demandé de concevoir un autre objet mais qui serait plus complexe à imprimer (par exemple, arrêt de l'impression de l'objet à un certain moment pour insérer un autre objet à l'intérieur ou encore impression en plusieurs couleurs, en dégradé ou utilisation d'au moins 2 matières différentes). Tous ces paramètres sont réglables sur IdeaMaker ou sur l'imprimante 3D directement. Prototypage d’un porte-clé ourson Voici un extrait de code que j'ai obtenu pour mon ourson : Voici un extrait de code que j'ai obtenu pour créer la chaîne du porte-clé : Résultat : Cependant, il est à noter que lors de l'impression, la chaîne est susceptible de se casser en raison de sa finesse et donc de sa fragilité. Pour cela, il faut par exemple utiliser des matériaux plus résistant comme le PLA par exemple, que j'ai également utilisé pour imprimer mon premier objet (PLA Noir). On peut également penser à intégrer un support le long de la chaîne pour renforcer les zones les plus fragiles. Hayet BENSEDDIK Dans le cadre de l'UE Processus d'innovation, 1ère partie : conception et fabrication additive (impression 3D). 18/10/23: Cours 1 Découverte des logiciels OpenScad et IdeaMaker Modélisations simples sur OpenScad 24/10/23: Impression en 3D de nos premières modélisations Pour ma première modélisation, il est à noter que j'ai pris beaucoup de temps pour modéliser. Les représentations à partir d'un langage codé ne sont pas mon point fort mais après plusieurs tentatives j'ai réussi à comprendre le fonctionnement qui, en réalité est plus simple. Après cette première impression, j'ai pu paramétrer des objets plus techniques. Pour la première fois, je voulais réaliser quelque chose de basique comme mon prénom en toute lettres, sauf que la surprise était lors de l'impression 3D où le logiciel m'a informé qu'il fallait 320 jours d'impression ! Je me suis donc tourné vers la création d'objet simple pour m'entrainer et ensuite passer à un niveau supérieur. content = "HAYET"; font = "comic sans ms"; translate ([-20,0,0]) { linear_extrude(height = 3) { text(content, font = font, size = 10); } } Mon première objet est une cuve cylindrique. 07/11/23: Réalisation d'un objet solide dans une impression 3D Pour cette deuxième phase, j'ai modélisé un cube à paroi sphérique contenant un objet solide à l'intérieur. Pour ce faire j'ai d'abord modéliser la sphère, ensuite j'ai lancer l'impression du cube. A la moitié de l'impression du cube j'ai stopper la machine pour y insérer ma sphère. Et en second lieu, j'ai créée une espèce de roue, à vue d'œil on a l'impression qu'elle tourne. 08/12/2023 Pour cette seconde partie de cours, le but était par une création Arduino faire fonctionner  une lampe pour qu'elle clignote. const int LED=12; void setup(){ pinMode(LED, OUTPUT); //on l'active } void loop(){ digitalWrite(LED, HIGH); //on l'allume delay(200); //on attend digitalWrite(LED, LOW); //on l'éteint delay(200); //on attend } Arielle Gal PROTOTYPAGE 18 / 10 / 2023 - 1ère séance au FabLab Open SCAD = logiciel de code Un langage propre qui permet a définir des formes géométriques Prepare des formats STL pour IdeaMaker IdeaMaker = Logiciel d’impression 3D Peut créer des supports nécessaires pour des modèles complexes Prepare le format pour l’imprimante 3D Pour la semaine prochaine: 1 Imprimer un objet de notre choix 2 Imprimer un objet infaisable sans imprimante 3D 25 / 10 / 2023 - Impression 3D 1. Imprimer un objet de notre choix L’objet que j’ai decider de imprimer est un palmier que j'ai codé avec open SCAD. Et que j'ai imprimé en 3D à l'aide du logiciel ideaMaker. Code : Le code créé pour imprimer un modèle 3D d'un palmier: $fn = 200; // Resolution module palmier() {    sand_platform();    solid_trunk();    for (i = [0:5]) {        rotate([0, 0, i * 60])        feuille();    }} module sand_platform() {    color("khaki") // Sand color    translate([0, 0,100])   scale([1, 1, 0.3])   sphere(40); } module solid_trunk() {    color("brown")    cylinder(h=100, r=7);} module feuille() {    color("green")    translate([0, 0, -5])   rotate([180, 0, 0])    translate([0, 30, 0])   scale([1, 3, 1])   for (i = [-1, 1]) {        rotate([0, i*45, 0])       cylinder(h=1, r1=0, r2=20);   }} // Render the palm treepalmier(); Mon objet sur Open SCAD :  Format .stl de mon palmier. Mon objet 3D : Le palmier a été imprimé et la plateforme de sable ainsi que le tronc étaient stables. Cependant, l'épaisseur des feuilles était trop mince, donc l'objet n'a pas pu être imprimé correctement. De plus, les détails des feuilles étaient trop compliqués pour être correctement imprimés par la machine. 2) Imprimer un objet infaisable sans imprimante 3D Code : Visualisation sur Open SCAD: Résultat final : 27 / 10 / 2023 - 2ème séance au FabLab Améliorer nos objets imprimés: travailler avec 2 filaments différents (si on travaille avec 2 matériaux différents…les valeurs changent. Differents méthodes de post-traitent: Lissage avec du solvant Polissage mécanique Vaporisateurs adhésifs Chauffage du plateau d’impression Modification des paramètres d’impression Utilisation de l’aide à la dissolution Pour la semaine prochaine: 1 Créer un object dont ont met l’impression en pause puis on met un autre objet à l’intérieur avant de finir l’impression. 2 Faire un post traitement sur l’ancien object pour faire mieux tenir entre elles les couches. Impression 3D Avec Ossian BENGSTON, nous avons pensé à faire une sphère vide avec un manche afin de faire des maracasses avec une pause d'impression afin d'y placer différents objets à l'intérieur. Code : $fn=200; // Augmenter le nombre de faces pour une sphère plus lisse R = 40; // Rayon externe de la sphèreepaisseur = 2; // Épaisseur des parois de la sphère // Créer une sphère videdifference() {    sphere(R);  // Sphère externe    sphere(R - epaisseur); // Sphère interne à soustraire} translate([0, 0, -80])cylinder(100,10,20,center=true); $fn=200; // Augmenter le nombre de faces pour une sphère plus lisse R = 40; // Rayon externe de la sphèreepaisseur = 2; // Épaisseur des parois de la sphère // Créer une sphère videdifference() {    sphere(R);  // Sphère externe    sphere(R - epaisseur); // Sphère interne à soustraire} translate([0, 0, -80])cylinder(100,10,20,center=true); Notre objet sur Open SCAD : Notre objet sur IdeaMaker : Pour réduire le temps on a réduit la taille du objet sur Idea Maker. Nous avons programmé une pause temporaire dans l'impression 3D afin d'insérer de petites vis, qui servent de source sonore pour les maracas. Arrêt de l'impression lorsque 2/3 de la sphère s'est formée. Résultat final :  Les maracasses après 1h et 16 min. Kelly LUSINIER Soafaranirina Diagne 18/10/23 : Cours Découverte d'OpenSCAD et d'IdeaMaker Opérations simples sur OpenSCAD 27/10/23: Devoirs : Imprimer en 3D un objet original conçu avec OpenSCAD + un objet qui soit impossible à construire sans l’impression 3D. Présentation des réalisations à la classe Présentation du fonctionnement de l'imprimante 3D et des différents fil que l'on peut utiliser Consigne : réaliser un objet en bi-colore dans lequel on peut insérer un autre objet en arrêtant l'impression 3 Réalisation d'u objet complexe: Sommier d'un lit code : length=60;linear_extrude(height = 3, center = false)difference() {  square([length,40],center);  for ( i = [1 : (length / 3)] ){    translate([i*3,4,0]) {      square([1,32]);    }  }}cube([length,1,1]);translate([0,40,0]) {    cube([length,1,1]);} cube([1,40,1]);translate([length-1,0,0]) { cube([1,40,1]);} module prism(l, w, h){  polyhedron(     points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],     faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]] );} J'avais comme projet de construire un lit en miniature semblable au lego. Ce sommier en aurait été la base. Visuel de l'objectif que je voulais atteindre: J'ai néanmoins pu imprimer le socle du lit: Je n'ai pas pu retrouver le code cependant. Réalisation d'une limousine: Je n'ai malheureusement pas pu réaliser les fenêtres de la voiture ainsi que les portes code: cube([90,20,15],center=true);translate([5,0,10 - 0.001])    cube([70,20,10],center=true);translate([-20,-15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([-20,15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([20,-15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([20,15,0])    rotate([90,0,0])    cylinder(h=3,r=8,center=true);translate([-20,0,0])    rotate([90,0,0])    cylinder(h=30,r=2,center=true);translate([20,0,0])    rotate([90,0,0])    cylinder(h=30,r=2,center=true); Sarah Kolli Yokhébed BAYEYE 18/10/2013 – 1ère séance de prototypage au FABLAB Pour notre première séance nous avons découvert les logiciels OpenSCAD et IdeaMaker . 27/10/2023 – Séance 2 Consigne : Réaliser un objet de notre choix en 3D conçu avec OpenSCAD Pour mon premier objet, j’ai décidé de réaliser une bague sur laquelle on retrouve une pièce au dessus en forme de diamant. Voici le code : translate([0,0,4]){    scale([.5,.5,.5]){        translate([0,0,10]){            cylinder(10,r1=0.1,r2=10,true,$fn=10);            difference(){                translate([0,0,15]){                    rotate([0,180,0]){                        cylinder(5,r1=10,r2=10,true,$fn=10);}}                        translate([0,0,22]){                            cube(20,true);}}}}}                            translate([3.5,0,0]){                                rotate([0,-90,0]){                                    translate([0,0,2]){                                        difference(){                                            linear_extrude(3,true){                                                circle(10,$fn=1000);}                                                linear_extrude(5,true){                                                    circle(8,$fn=1000);}}}}} 15/11/2023 : Séance 3 La consigne pour cette séance était de créer un objet en interrompant l'impression à mi-parcours, puis d'insérer un autre élément à l'intérieur avant de reprendre l'impression. Pour cela, j'ai conçu une sphère avec des ouvertures permettant d'insérer une autre sphère à l'intérieur. Voici le code : difference(){    sphere(r=20, $fn=100);    sphere(r=15,$fn=100);    cylinder(h=70, r=10, center=true, $fn = 100)    rotate ([90,0,0]) cylinder(h=70,r=10, center=true, $fn = 100);    rotate ([0,90,0]) cylinder(h=70,r=10, center=true, $fn = 100);}sphere(r=10, $fn=100); Charlotte Forge Objet n1 : objet réalisé sur open scad : Porte clé, le code que j'ai saisi était le suivant : $fn = 20;difference () {hull () {  # translate([0,0,0]) cylinder(r=2,h=3);  translate([10,0,0]) cylinder(r=2,h=3);  translate([5,40,0]) cylinder(r=4,h=3);}  translate([5,38,-1]) cylinder(r=1,h=5);}4 Objet 2, objet uniquement réalisable avec imprimante 3D ou objet dans autre objet : code : translate([-24,0,0]) {    union() {        cube(16, center= true);        sphere(11);    }} Mariia Karpenko Création d'objets 3D Etape 1 : faire un objet simple pour comprendre l'utilisation de la machine 3D 16/12/2025 Objectifs : Imprimer un moule à biscuits en utilisant le modèle existant. Paramètres d'impression utilisés pour cette impression 3D : Buse : 200°CPlateau : 60°CDiamètre du filament: PLA, 1,75 mmRemplissage : 20 %Paramètres d'impression: paramètres par défaut de PrusaSlicer (qualité standard, épaisseur de couche classique) Logiciels utilisés pour toutes les impressions 3D : Slicing : PrusaSlicer Objet fonctionnel : Moule à biscuits Fonction : Changement de la forme des biscuits Modèle 3D : moule à biscuits Objet sur PrusaSlicer : Objet terminé : MU4MN014 - PPE 2023-2024 M1 Descriptif de l'UE Les étudiants réalisent dès la première année un projet à mener tout au long de l’année, en lien avec leurs UE disciplinaires. FoodSense Projet (HIGH 5) Informations Hayet Benseddik / Omayma Benaboubou / Zineb Lahiaoui / Wissal Haji / Qiancheng JIANG xxxxx Master Management de l'innovation 03/10/2023 - xx/xx/2024 Contexte Le problème est le gaspillage alimentaire, qui cause de fortes répercussions environnementales, économiques et sociales négatives à l’échelle mondiale. La mauvaise gestion des produits alimentaires. La négligence des dates d’expiration. L’absence de moyens pratiques pour suivre et utiliser efficacement les produits alimentaires. Objectifs Aider les utilisateurs à réduire le gaspillage alimentaire en leur fournissant une application conviviale permettant de scanner des produits et de recevoir des rappels avant leur date d'expiration. Cela permet aux utilisateurs de mieux gérer leur inventaire alimentaire, d'économiser de l'argent et de contribuer à réduire le gaspillage alimentaire. Matériel Machines utilisées Construction (Fichiers, photos, code, explications, paramètres d'usinage, photos, captures d'écran...) Étape 1 ---- Étape 2 ---- Étape 3 ---- Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 05/10/2023 Travailler sur la questionnaire sous forme de google forms et d'entretien, rechercher sur comment avoir les informations (ex: la date d'expiration) en scannant le code-barre, l'etude sur la statut juridique, analyser les faiblesses des concurrents. CheckMate Informations Alix DELOBELLE, Jade MAHE, Sarah DELAPILLE, Muriel EL HELOU, Chloé EL KASIS Alix.delobelle@etu.sorbonne-universite.fr - jade.mahe@etu.sorbonne-universite.fr - sarah.delapille@etu.sorbonne-universite.fr - muriel.el_helou@etu.sorbonne-universite.fr - chloe.el_kassis@etu.sorbonne-universite.fr M1 - Management de l’Innovation 01/09/2023 - 15/05/2024 UE PPE Réaliser tout au long de l'année un projet d'innovation. Notre premier projet s'est porté sur le diabète et la réalisation d'une assiette permettant de déterminer le taux de glucose dans un plat donné. Cependant, ce projet n'a pas été validé, car trop complexe à réaliser et des projets similaires existent déjà. Les premières étapes de notre projet sont néanmoins disponible dans la partie 1 sur cette page. Depuis, nous nous sommes intéressées à un autre projet intitulé CheckMate. Dans la partie 2, vous trouverez l'évolution de notre projet. 1. GluciBody Contexte Le pourcentage de personnes atteintes de diabète ne cesse d’augmenter en France et dans le monde. Sur la proportion de personnes diabétiques, nous pouvons distinguer deux types de diabète : le diabète de type 1 et le diabète de type 2.En effet, le diabète de type 1 représente environ 10% des cas de diabète soit environ 300 000 personnes en France. Depuis une vingtaine d’années, le nombre de personnes atteintes de diabète de type 1 ne cesse d’augmenter, au rythme de 3 à 4 % par an.Notre cible est alors ces personnes atteintes de diabète de type 1 ou plus précisément le diabète insulino-dépendant. L’une des réelles difficultés des diabétiques insulino-dépendants est de connaître le taux de glucides dans les plats afin de pouvoir gérer les doses d’insuline à s’injecter. Objectifs Créer un dispositif un permet de déterminer la quantité de glucides dans un plat afin de pouvoir bien doser les injections d’insuline. Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 11/10/2023 Suite au go/no go du 04/10/2023, des questions se sont posés sur la faisabilité technique du projet. Chaque personne lis des articles de son côté afin d’avancer sur la question. Nous avons découvert l’existence d’une startup « goyalab » qui développe des spectromètres de petites tailles. Ainsi, nous avons envoyé un mail à l’association du diabète à Paris afin de mieux se renseigner sur le diabète et les besoins des personnes diabétiques. De plus, nous souhaitons passer au fablab afin de voir la faisabilité technique de notre idée. 2. CheckMate Contexte : Répondre à la problématique suivante : les gens possédant une porte à poignée à tirage (c'est à dire qui ne s'ouvre pas de l'extérieur sans clé), ayant oublié leur clés à l'intérieur de chez eux et restés enfermé à l'extérieur de leur logement. Objectif : Journal de bord : 19/12/2023 : réalisation d'un plan de financement K'Hair Paris Principe du projet : Dispositif discret favorisant la pousse des cheveux tout au long de la journée Porteuses du projet : Cassandra d'ALMEIDA, Louly NADJAR, Maéva DORMANT, Naima DIKA & Victoria MISSAMOU Lactose Safer Projet porté sur l'intolérance au lactose (ou gluten). Produit : touillette capable de détecter le lactose dans les différentes boissons, technique enzymatique et colorimétrique. Par : Yokhébed BAYEYE, Bintou SIDIBE DRAME, Kelly Luisiner, Charlotte FORGE, Soafaranirina DIAGNE.MATERRE PREMIÈRE Après sa licence de biologie et les connaissances qu’il a acquises, Sanjay APAVOU est sûr qu’elles pourront lui être utiles dans le projet.Dans ses projets, il a toujours été dynamique, à l’écoute et créatif pour tirer le projet, ainsi que son groupe, vers le haut. Quant à elle, Marya EL NOUEIRY est diplômée d’une licence de biologie. Motivée et ambitieuse, elle est capable de s’adapter facilement aux différentes situations qu’elle rencontre. Marya représente un atout précieux pour le projet, notamment grâce à son très fort intérêt pour le marketing et son envie de réussir dans tout ce qu’elle entreprend. Diplômée d’une licence en Sciences de la vie, Eloïse FILLEY a acquis des connaissances et des compétences solides en biologie, notamment en physiologie animale et végétale. Par ailleurs, elle est dynamique, curieuse et motivée, des qualités essentielles qui lui permettent de mener à bien les projets qu’elle entreprend et qu’elle mettra à profit tout au long du projet. Grâce à sa Classe Préparatoire aux Grandes Ecoles BCPST et à sa licence validées en biologie, Maélanne REVOL est en mesure d’apporter au groupe des connaissances pointues dans ce domaine. Ses nombreuses expériences en tant que cheffe de projets seront également utiles pour le bon déroulement du projet. Grégoire SIMON, quant à lui, a fait une licence de physique et a travaillé au cœur d’une Start-up innovante dans la réalisation même d’un produit. Il pourra apporter des connaissances en théorie physique mais également de la créativité au cours du projet afin de faire face aux problèmes auxquels le groupe rencontrera. Enfin, Soulaimane ZARIOUH possède une très bonne connaissance et compréhension des sciences en général. Doté d’une expertise en gestion de l'innovation et en chimie, il a également de l'expérience en entrepreneuriat, lui conférant une vision unique pour allier la recherche scientifique à la création de valeur dans le secteur des affaires Notre projet a pour objectif final de valoriser les épluchures de fruits et légumes produites par quelques brasseries dans la ville de Paris. En effet, la loi du 10 février 2020 relative à la lutte contre le gaspillage et à l'économie circulaire s’appliquera à partir du 1er janvier 2024 à l’ensemble des acteurs professionnels, incluant les restaurateurs, sans seuil minimum. Objectif du Projet : Explorer les utilisations potentielles des épluchures de légumes, souvent considérées comme des déchets, dans des applications de chimie et de biologie. Méthodologie : Préparation des Épluchures : Collecte de 400g d'épluchures de légumes, principalement constituées de carottes, oignons et choux. Processus de Mélange : Ajout de 670mL d'eau aux épluchures. Mise des épluchures et de l'eau dans un blender. Mélange du contenu pendant 4 minutes à la vitesse 4, pour obtenir une mixture homogène. Prélèvement pour Test 1 : Prélèvement de 250g de la mixture obtenue. Dénomination de ce prélèvement comme "Test 1". Filtration : Utilisation d'une maille métallique avec un maillage relativement large pour filtrer la mixture issue du Test 1. Cette étape vise à séparer les solides des liquides dans la mixture. Séchage : Placement du contenu filtré dans un four. Séchage à 50°C pendant une demi-heure. Résultat et Rendement : Poids final du contenu séché : 18g. Rendement du processus : Environ 20% (calculé sur la base du poids initial d'épluchures présent dans les 250g). Poursuite du Mélange : Suite au prélèvement pour le Test 1, le reste de la mixture dans le blender a été mélangé pendant 4 minutes supplémentaires à la vitesse 4. Prélèvement et Préparation pour Test 2 : Prélèvement de 100g de la mixture après le mélange supplémentaire. Mélange de ce prélèvement avec 150mL d'eau additionnelle dans une éprouvette graduée. Objectif du Test 2 : Observation de la séparation des phases par décantation dans le temps. Conditions de l'Expérience : Placement de l'éprouvette dans un réfrigérateur pendant 5 jours. Résultats Observés : Formation de trois phases distinctes après 5 jours : Phase Supérieure : Translucide, de couleur orangée. Phase Intermédiaire : Trouble, de couleur orangée avec des particules fines. Phase Inférieure : Majoritaire, contenant des particules plus grosses. Prélèvement et Analyse Microscopique : Échantillonnage de 2mL pour chaque phase séparée lors du Test 2. Observation au microscope révèle la présence de cellulose dans les deux phases inférieures. Filtration Rapide et Réduction de Volume : Application d'une filtration rapide pour diminuer la quantité d'eau dans le mélange. Réduction du volume total de 250mL à 150mL. Prélèvement pour Analyse Supplémentaire : Prélèvement de 50mL de ce mélange réduit pour des analyses futures. Filtration sous Vide et Séchage : Filtration du reste du mélange sous vide à l'aide d'un entonnoir de Büchner pour isoler les particules fines et grosses. Séchage des particules filtrées sur une plaque chauffante à 80°C. Préparation du Mélange avec Alginate de Sodium : Mélange de 50mL du prélèvement réservé précédemment avec 0,5g d'alginate de sodium (ce qui correspond à une concentration de 1% en masse/volume). Mélange effectué à l'aide d'un agitateur magnétique à 600 rpm sur une plaque chauffante à 60°C pendant 20 minutes, pour assurer la dissolution complète de l'alginate. Préparation de la Solution de CaCl2 : Dissolution de 6g de CaCl2 dans 200mL d'eau, formant une solution à 3% en masse/volume. Traitement du Premier Mélange avec CaCl2 : Prélèvement de 20g du mélange avec alginate de sodium. Placement dans un petit cristallisoir, puis submersion dans la solution de CaCl2. Préparation et Traitement du Deuxième Mélange : Aux 30g restants du mélange alginate, ajout de 5g des fibres isolées après le séchage du Test 1. Mélange soigneux jusqu'à obtention d'une homogénéité parfaite. Étalement de ce mélange dans un autre cristallisoir et submersion dans la solution de CaCl2. Aperçu vidéo https://photos.app.goo.gl/r9ihLCTmwD5HtCpr9 Analyse et Réflexions sur cette Phase : L'utilisation de l'alginate de sodium vise à créer une matrice gélifiée pouvant incorporer les fibres isolées. Le traitement avec la solution de CaCl2 provoque la gélification de l'alginate, une réaction chimique connue sous le nom de "gélification ionotrope". L'ajout de fibres dans le deuxième mélange a pour but d'explorer les interactions entre ces fibres et la matrice d'alginate, ainsi que l'impact sur les propriétés physiques du gel final. SerenIT Square Garden MU5CI803 - Optimisation et contrôle des procédés Documentations sur les projets expérimentaux de l'UE Responsable : jerome.pulpytel@sorbonne-universite.fr Descriptif de l'UE Un ingénieur chimiste doit Modéliser, Concevoir, Piloter et Améliorer les unités et opérations de transformation de la matière, afin de garantir la qualité de la production, la sécurité et l'efficacité des installations, la rentabilité économique, et de préserver les ressources et l'environnement. L'objectif de cette UE est de vous former à différents outils et concepts, dont certains relèvent d'aspects réglementaires, pour effectuer la régulation et l'optimisation des procédés chimiques. Le cours est divisé en 2 grandes parties :1/ Régulation et Automatisation 2/ Plans d'expériences et OptimisationRégulation de température et d'humidité pour une boîte de vieillissement de fromage Régulation de température et d'humidité pour une boîte de vieillissement de fromage. MU5Ci803 : Optimisation et contrôle des procédés (2023-2024) Fadela ABOUBEKER | Hadi BOUDJEMIA | Manel FEKKANE | Noursine MAHJOUB | Xin YU Groupe B Une chambre de vieillissement à fromage est un élément essentiel dans le processus de maturation d'un fromage. Le vieillissement du fromage repose sur des conditions de température et d'humidité spécifiques. En général, la température se situe entre 10 et 15°C et l'humidité entre 75 et 95%. L'utilisation d'Arduino offre une solution pour la surveillance et le contrôle de ces paramètres de manière précise et efficace. Notre projet vise à mettre en œuvre un système de régulation de température et d'humidité pour une boite de vieillissement de fromage. Cette initiative est portée par Fadela ABOUBEKER, Hadi BOUDJEMIA, Manel FEKKANE, Noursine MAHJOUB et Xin YU. Le projet est encadré par M. Jérôme PULPYTEL et a été développé dans le cadre de l'unité d'enseignement MU5Ci803 (Optimisation et contrôle des procédés) en Ingénierie Chimique, sous la responsabilité de M. Jérôme PULPYTEL. L'objectif principal de ce projet est de réguler la température et l'humidité à l'aide d'Arduino. Cette démarche s'inscrit dans le domaine de l'électronique et de la chimie, soulignant l'importance de la collaboration interdisciplinaire pour relever des défis technologiques complexes. Matériaux/Outils/Machines : 1 microcontrôleur Arduino 2 breadboards 1 DHT22 (permet de capter la température et l’humidité). Il permet de capter à une température entre 7 et 15°C et à une humidité entre 75 et 95% 1 écran LCD qui montrera la température et l’humidité en temps réel Câbles et fils de connexion 2 alimentations de 12V 2 relais 1 Peltier 1 ventilateur 1 plaque d'aluminium Eau Plaque en plexiglass Description du procédé : Le capteur DH22 mesure la température et l'humidité. La température de la chambre doit être comprise entre 7 et 15°C. Si la température dépasse la consigne de 15°C le Peltier est mis en route jusqu'à atteindre 11°C . Initialement, pour réguler l'humidité, nous avions pensé à utiliser le système suivant : si l'humidité est en dessous de 75% on met en route une pompe pour entrer l'air comprimé dans notre bécher d'eau afin de la faire buller et porter l'humidité à X%. Finalement nous avons utilisé un creuset rempli d'eau dans le fond de notre boite. Cette eau en s'évaporant augmente l'humidité. 02/11/2023 Après de nombreuses réunions afin de discuter de comment réguler la température et l'humidité, nous avons pensé à construire le schéma suivant. Finalement, ce schéma est irréalisable. En effet, il comporte de nombreuses incohérences (comme le fait que le circuit soit ouvert). De plus, nous voulions faire une boîte en plexiglass afin d'avoir un visuel. Or, celui-ci n'est pas conducteur de chaleur. Un circuit d'eau autour de la boîte n'aurait pas aidé au refroidissement à l'intérieur de la chambre. 30/11/2023 Aujourd'hui, nous avons effectué une simulation de notre projet sur Tinkercad et commencé à réaliser les branchements sur la breadboard. Malheureusement, nous n'avons pas pu les finaliser en raison d'un manque de matériel. Nous avons également discuté des aspects techniques de la régulation de l'humidité et de la température. Pour mieux visualiser la suite, nous avons convenu de fabriquer une maquette en carton. 07/12/2023 Nous nous sommes réunis pour fabriquer une maquette en carton de notre enceinte. Nous avons également discuté des moyens de réguler l'humidité, qui semble être notre principal défi. Nous avons opté pour un creuset rempli d'eau dans une boîte hermétique en polystyrène. Le polystyrène est un matériau isolant. Il est donc important que notre boîte soit construite dans ce matériau afin de conserver la température à l'intérieur. 14/12/2023 Nous avons découpé des plaques de polystyrène au cutter pour fabriquer la boîte. Pour l'esthétique, nous avons découpé une grille et des supports en plexiglas pour le présentoir. Nous les avons ensuite collés ensemble, mais la colle ne tenait pas suffisamment. 19/12/2023 Nous avons finalement utilisé du scotch double face pour fixer les plaques de polystyrène. Nous avons ajouté une boîte en bois pour protéger les plaques de polystyrène et créer une deuxième enveloppe pour isoler l'intérieur. Nous avons rencontré un problème avec des espaces entre les plaques de polystyrène découpées au cutter. Idéalement, nous aurions dû utiliser un fil chauffant pour les couper, mais l'appareil ne fonctionnait pas. 21/12/2023 Nous avons utilisé de la mousse polyuréthane pour combler les trous de notre enveloppe en polystyrène, achevant ainsi la construction de l'enveloppe isolante. Il ne nous reste plus qu'à fixer la porte (pour avoir un visuel sur l'intérieur) et à tester notre système de régulation. Pendant les vacances : Nous avons réalisé les branchements de notre circuit électronique et testé le code afin de voir si la régulation fonctionne. Nous avons donc fixé la température à 25°C afin de voir si une fois la température atteinte le ventilateur s'allume. Tout semble fonctionner. Cependant il nous manque un second relais pour le Peltier. Nous n'avons donc pas pu le tester. 19/01/2024 Nous avons obtenu le relais qui nous manquait. Cependant, un composant de l'alimentation ne fonctionnait plus et nous avons passé du temps à en identifier la source. Après résolution du problème, nous avons commencé à souder les composants. Nous avons également installé la porte avec une charnière fixée avec du scotch double face. 26/01/2024 Nous avons ajouté le module Peltier à notre circuit après avoir récupéré un deuxième relais. Cependant, le relais que nous avions initialement ne fonctionnait pas correctement, restant constamment en position NC (normalement fermé). Par conséquent, lors de l'envoi du signal d'activation, il ne basculait pas vers la position NO (normalement ouvert), rendant la régulation inefficace. Nous avons donc demandé un nouveau relais afin de retester notre configuration. Nous avons tenté de faire fonctionner simultanément les deux composants (ventilateur et Peltier) à l'aide d'un seul relais. Cependant, cela ne réussissait qu'en sens inverse, entraînant une aspiration de chaleur par le ventilateur au lieu de sa dissipation. En essayant de remédier à cela en inversant le sens d'alimentation (+ vers le -), nous avons endommagé le ventilateur. Contrairement à un ventilateur à courant alternatif, un ventilateur fonctionnant en courant continu ne peut pas opérer dans le sens inverse. Ainsi, nous avons dû récupérer un deuxième ventilateur pour poursuivre nos essais. Avec l'ajout du nouveau ventilateur et du second relais, une fois que nous avons reconfiguré ce dernier, le circuit s'est mis en marche. Le ventilateur et le module Peltier fonctionnent désormais en respectant les consignes. Cependant, le système de refroidissement ne parvient pas à abaisser la température en dessous de la température ambiante, qui est d'environ 20°C. Il est possible que pour atteindre cet objectif, une isolation totale (sans aucun trou ni source d'entrée d'air) et l'utilisation de plusieurs modules Peltier auraient été nécessaires.           Le résultat final : Nous avons réussi à concevoir une boîte de refroidissement dotée d'un circuit fonctionnel, maintenant la température à 22°C avec un peltier de petite taille. Toutefois, en reproduisant le même circuit et le même code avec un peltier plus imposant, ou en utilisant plusieurs peltiers recouvrant complètement la surface métallique (en haut), et un ventilateur plus puissant pour dissiper la chaleur, nous aurions aisément pu atteindre une température inférieure à 15°C. Pour réguler l'humidité, nous avons ajouté un fond d'eau, provoquant son augmentation. Circuit : Voici un schéma détaillé de comment nous avons configuré chaque composant dans notre circuit Arduino selon les étapes : Le DHT22 et l'écran LCD  : Ventilateur avec un relais : Peltier avec un relais : Le code ARDUINO : Voici le code que nous avons utilisé pour faire fonctionner notre circuit : #include "Wire.h" #include "LiquidCrystal_I2C.h" #include #define DHTPIN 13 #define DHTTYPE DHT22 #define RELAY 8 #define PELTIER 7 #define SEUIL_TEMP 20 DHT dht(DHTPIN, DHTTYPE); float hum; float temp; LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); void setup() { lcd.init(); lcd.backlight(); dht.begin(); pinMode(RELAY, OUTPUT); pinMode(PELTIER, OUTPUT); } void loop() { hum = dht.readHumidity(); temp= dht.readTemperature(); lcd.setCursor(0, 0); lcd.print("H: "); lcd.print(hum); lcd.print(" %"); lcd.setCursor(0 ,1); lcd.print("T: "); lcd.print(temp); lcd.print(" C"); if(temp >= SEUIL_TEMP) {   digitalWrite(RELAY, HIGH);   digitalWrite(PELTIER, HIGH); } else {   digitalWrite(RELAY,LOW);   digitalWrite(PELTIER,LOW); } } Les bibliothèques nécessaires pour le LCD et le DHT22 sont déjà disponibles. Le fonctionnement du ventilateur et du  Peltier est contrôlé par des relais que nous manipulons via la PIN correspondant au signal d'entrée. Conclusion : En conclusion, malgré un bon code Arduino et un circuit électronique fonctionnant, nous n'avons pas réussi à refroidir la chambre à fromage. Cela est dû à la taille de la boîte. En effet, la boîte a un trop grand volume pour être refroidie que par un seul Peltier. Celui-ci ne refroidit que un volume équivalent à sa taille. Pour notre projet, il aurait donc fallu utiliser plusieurs Peltier (au moins 4). Cependant, avec un creuset, l'humidité a augmenté dans la boîte. Ainsi, en attendant assez de temps, l'humidité souhaitée peut être atteinte. Remplisseur automatique de bouteille UE 803 - Optimisation et Contrôle des Procédés - Master 2 - Ingénierie Chimique Noms et Prénoms : Nicolas Laloy (nicolas.laloy.1@etu.sorbonne-universite.fr) Mohamed Hachcham (mohamed.hachcham@etu.sorbonne-universite.fr) Faysal Bellahouel (faysal.bellahouel@etu.sorbonne-universite.fr) Jakub Gontarz (jakub.gontarz@etu.sorbonne-universite.fr) Muhammad Aminibayat (Mohammad.aminibayat@etu.sorbonne-universite.fr) Cursus : Master de Chimie : Spécialité Ingénierie Chimique Date de début : 01/09/2023 Date de fin : 01/02/2024 Introduction : Ce projet a pour but de nous familiariser avec des notions et des équipements tournés vers l'automatisation et la régulation. Objectif : L'objectif est de réaliser un petit système qu'est le remplisseur automatique de bouteille. Il s'agit donc remplir plusieurs bouteilles de couleurs différentes avec le liquide associé à la couleur (par exemple : jus d'orange -> bouteille orange). Matériaux / Outils / Machines (le plus détaillé possible) 2 pompes 1 carte arduino et son câble 1.5 m de tuyaux 12 fils de connexion 1 relai pour l'arduino 1 adaptateur 1 alimentation 1 tapis roulant comprenant un moteur à courant continu 1 support en bois et aluminium 1 détecteur IR de position et le récepteur associé Plusieur gobelets (nombre indeterminé) Eau Construction (fichiers, photos, code, texte, paramètres d’usinage etc.) Journal de bord (étapes datées du projet) 06/11 - Choix du projet et conception : On a porter notre réflexion sur 2 projet type : compresseur de déchet automatique et un remplisseur de bouteilles automatique Figure 1: Schéma de compresseur automatique Figure 2 : Schéma de remplisseur automatique Nous avons débattu de différents schémas de conception pour les 2 projets. Après avoir demandé l’avis à notre référent, il nous à été conseillé de porter notre attention sur le remplisseur automatique. Partie journal de bord 13/11 - Listage du matériel nécessaire au deux projets / Audit de l’inventaire au FabLab : On a envoyé une première liste pour le matériel nécessaire au remplisseur de bouteille automatique. A la demande de notre référent, nous avons fait l’inventaire du matériel disponible au FabLab pour ensuite l’enlever de la liste du matériel nécessaire. Article Fournisseur Référence Prix Unitaire Quantité Montant HT A commander Pompes à débit fixe Lextronic WPM447 17.9€ 2 35.8€ Oui Carte shield Lextronic OPEN207 7.41€ 1 7.41€ Oui Alimentation 12V Lextronic² LEX-ALIM14 10€ 1 10€ Oui Capteur IR de proximité Fablab / / 1 / Non Support en aluminium et bois UE 803 / / 1 / Non Tapis roulant UE 803 / / 1 / Non Câbles UE 803 / / 15 Environ / Non Gobelets CROUS / 1€ 2 2€ Non Adaptateur alimentation Fablab / / 1 / Non Vis et boulons Fablab / / 10 / Non Breadboard Fablab / / 1 / Non Tuyaux en caoutchouc UE 803 / / 1 mètre / Non 20/11 - Récupération du matériel demandé : Nous avons récupéré une partie du matériel demandé après la réception d’un mail de Pr. Pulpytel demandant aux différents groupes de venir récupérer les différents composants déjà disponibles. Nous avons aussi décidé de remplacer la plaque tournante de la remplisseuse par un rouleau automatique disponible dans le stock de matériel. Nous somme ensuite aller au FabLab pour commencer à réfléchir à la conception de notre projet avec les éléments maintenant présent. Nous avons commencer par tester tout les composants nécessitant une alimentation à l'aide d'une batterie de 12V. Puis dans un premier temps pour pouvoir connecter les shields au moteurs des pompes et aux moteurs du tapis nous avons nous initié à la soudure avec l'aide du personnel du FabLab. 27/11 - Le tapis roulant étant trop glissant nous avons apporté des modifications pour provoquer plus de frottement entre le tapis et le rouleau. Faute de colorimètre il nous était impossible de mettre en place une régulation de la couleur du liquide en fonction de la couleur du gobelet. Nous avons branché les pompes et le moteur du tapis au relai le tout lié à la carte Arduino via une breadboard. 11/12 - Le support en aluminium à été récupéré. Une des pompes défectueuse à été échangé. L'ensemble de nos composants demande une alimentation supérieur à 9V ( pompes + moteur ). Nous avons donc choisi d'utilisé une alimentation de 12V branché à une prise de courant. Néanmoins afin d'éviter de griller les circuits de la carte Arduino et par problème de compatibilité de la sortie de l'alimentation nous avons utilisé un adaptateur pour relier l'alimentation directement à la breadboard. 22/12 - Nous avons fixé les pompes à notre support en découpant celui-ci à l'aide d'une perceuse avec un emboue scie cloche, et en serrant un fil en Aluminium, accroché au support par de petit trous, sur les deux pompes . 11/01 - Nous avons fixé la carte Arduino, la breadboard, le Shield ainsi que l'adaptateur de l'alimentation au support à l'aide de perceuse présente au Fablab : Afin d'amener le tuyau de liquide au gobelet nous avons ajouté un support à l'aide des chutes de bois présents au Fablab. Le tapis roulant étant trop volumineux nous le fixerons pas au support : Il ne nous reste plus que le code Arduino à fournir. Nous avons fait quelques tests en utilisant ChatGPT pour tester le fonctionnement de chaque composant seul. Après nous être assuré du bon fonctionnement de tout nos composants et après verification des liaisons entre la breadboard, l'Arduino et chaque composant (le terme composant étant relatif aux pompes, detecteur-recepteur IR et moteur faisant tourner le rouleau) Un test pour verifier le debit volumique des pompes a été fait en utilisant une éprouvette graduée emprunté au FabLab Chimie et un chronomètre (sur téléphone). Un temps de 7 secondes à été jugé suffisant pour que le débit de la pompe puisse remplir un gobelet. Quelques tests du système à partir de codes génerés par ChatGPT ou trouvés sur des forums sur le site d'Arduino (ainsi que d'autres sites internet) ont été effectués, sans succès. Cet échec étant dû au fait que les codes implantés au système ne réussissaient pas a transmettre le signal du detecteur-recepteur IR et à activer la pompe pendant 7secondes tout en arretant le moteur pour le rouleau. 12/01 - Nous avons réussi à configurer notre capteur IR à l'aide du site suivant : https://mataucarre.fr/index.php/2017/05/24/capteur-de-proximite-infra-rouge-fc-51-arduino/ Notre code est donc le suivant : int led = 8;int capteur = 3;int detection;const int moteurPin = 9;const int pompePin = 5;unsigned long activationTime = 0;const unsigned long dureeActivation = 7000;  // Temps d'activation de la pompe en millisecondes void setup() {  pinMode(led, OUTPUT);  pinMode(capteur, INPUT);  pinMode(moteurPin, OUTPUT);  pinMode(pompePin, OUTPUT);} void loop() {  // Lecture de la valeur de l'interface OUT du capteur  detection = digitalRead(capteur); // Si on détecte une personne, on allume la LED et active la pompe  if (detection == 0) {    digitalWrite(led, HIGH);    digitalWrite(moteurPin, LOW);    delay(1000);    digitalWrite(pompePin, HIGH);    delay(7000);    digitalWrite(moteurPin, HIGH);    digitalWrite(pompePin, LOW);    delay(2000);    // Enregistre le temps d'activation de la pompe    activationTime = millis();  } else {    // Si on ne détecte personne et que la pompe est encore active,    // on éteint la LED et la pompe après la durée d'activation spécifiée    if (millis() - activationTime < dureeActivation) {      digitalWrite(led, LOW);      digitalWrite(moteurPin, HIGH);      digitalWrite(pompePin, LOW);}}} Nous avons fixé le capteur IR avec une vis sur un bout de bois, ce bout de bois étant lui même collé à la courroie de tapis à l'aide d'une colle trouvée au FabLab. Partie Bibliographie/Ressources : -Nous nous sommes essentiellement basé sur le projet présenté sur le site ci-dessous afin d'avoir une idée globale : https://www.robotique.tech/tutoriel/systeme-de-remplissage-des-bouteilles-controle-par-arduino/ -Nous nous sommes aussi aidé de différentes vidéos YouTube ci-dessous pour avoir une idée plus précise concernant les branchement, le codage et le matériel nécessaire : https://www.youtube.com/watch?v=26YH8Mtsxzg&t=1004s https://www.youtube.com/watch?v=s5Z1mjQnKWY&t=437s -N'ayant pas forcément fait d'étude de codage, nous nous somme aidé de différents sites: https://www.robotique.tech/tutoriel/commander-une-pompe-a-eau-par-la-carte-arduino/ Pour le contrôles des pompes. https://www.arduino.cc/reference/fr/ Pour connaître les commandes de références d'Arduino. https://chat.openai.com/ L'IA ChatGPT afin de corriger nos erreurs de codeshttps://mataucarre.fr/index.php/2017/05/24/capteur-de-proximite-infra-rouge-fc-51-arduino/ Aide pour le codage du capteur IR Projet de régulation de température et de pH dans un réacteur UE MU5CI803-Optimisation et contrôle des procédés Groupe A Noms et Prénoms: CAZE Johanna (johanna.caze@etu.sorbonne-universite.fr) DEVIES Marie (marie.devies@etu.sorbonne-universite.fr) EL BAASI Eman (eman.elbaasi@etu.sorbonne-universite.fr) FAHLI Chaimae (chaimae.fahli@etu.sorbonne-universite.fr) SEROT Ludivine (ludivine.serot@etu.sorbonne-universite.fr) Cursus: Master 2 de Chimie- Parcours Ingénierie Chimique Date de début: septembre 2023 Date de fin:  1 février 2024 Introduction: Notre projet s'articule autour de l'objectif central visant à établir un système sophistiqué de contrôle pour maintenir de manière précise le pH et la température au sein d'un réacteur. Pour atteindre cet objectif, nous prévoyons d'intégrer des éléments clés tels qu'un capteur de température et une sonde pH, lesquels seront connectés à un pH-mètre pouvant être contrôlé par le biais de la plateforme Arduino. Cette approche permettra une surveillance constante et une régulation fine des conditions réactionnelles. Dans le domaine spécifique de la régulation du pH, notre choix stratégique repose sur l'utilisation ingénieuse de solutions de jus de citron (acide) et d'une base. Cette combinaison de substances réactives offre une solution flexible et adaptative, idéale pour maintenir le pH à des niveaux requis tout au long des différentes phases de la réaction. En termes de perspective, notre projet transcende les limites traditionnelles en fusionnant les expertises de l'électronique et de la chimie. Cette approche multidisciplinaire revêt une importance particulière, soulignant la nécessité d'une collaboration étroite entre ces deux domaines distincts. La convergence de ces compétences permettra d'atteindre de manière efficace et efficiente les objectifs fixés. En résumé, notre démarche intégrée aspire à créer une synergie entre les différentes disciplines, offrant ainsi un contrôle optimal des paramètres clés, tout en illustrant la capacité à naviguer harmonieusement entre les domaines de l'électronique et de la chimie pour la réussite de notre projet. Liste des composants La liste des composants essentiels pour notre configuration comprend les éléments suivants, chacun jouant un rôle crucial dans le processus de contrôle et de régulation du pH et de la température dans le réacteur : Contenants : Deux récipients distincts sont nécessaires, l'un destiné à l'acide et l'autre à la base. Cette séparation permet de maintenir les réactifs séparés jusqu'à leur mélange contrôlé dans le réacteur. Bécher : Le bécher sert de réacteur principal, accueillant le mélange pour lequel la régulation sera faite Tuyaux : D'une longueur d'environ 1 mètre, les tuyaux servent à acheminer les solutions acides et basiques du réservoir vers le réacteur, en pasant par les électrovannes. Sonde pH : La sonde pH est un dispositif de mesure qui évalue l'acidité ou la basicité de la solution dans le réacteur. Elle transmet ces données au système de contrôle. Capteur de pH analogique à gravité : Ce capteur de pH analogique à gravité complète la mesure du pH, formant un pH-mètre Sonde de température (DS18B20) : La sonde de température surveille en permanence la température à l'intérieur du réacteur, permettant un contrôle fin pour maintenir des conditions réactionnelles optimales. Électrovannes : Ces composants jouent un rôle crucial dans la régulation du flux des solutions acides et basiques, assurant ainsi un dosage précis dans le réacteur. Cartouche chauffante : La cartouche chauffante contribue au maintien de la température désirée dans le réacteur, favorisant ainsi des conditions de réaction stables. Transistor TIP 122: Le transistor intervient dans le contrôle électronique du circuit, assurant l'alimentation de la cartouche chauffante Carte Arduino : La carte Arduino fonctionne comme le cerveau du système, traitant les données des capteurs et activant les actionneurs en fonction des paramètres prédéfinis. Fils de connexion : Ces fils facilitent la connexion électrique entre les différents composants, assurant une communication fluide au sein du système. Modules relais : Les modules relais sont utilisés pour contrôler les électrovannes et d'autres dispositifs électriques, assurant ainsi une régulation précise. Câble d'alimentation : Ces câbles alimentent en énergie les électrovannes et la cartouche chauffante, assurant le bon fonctionnement de ces éléments clés du système. Breadboard : Plateforme de prototypage qui facilite le montage temporaire des composants électroniques Journal de bord: 15 octobre 2023: Choix du projet 31 octobre 2023 au 4 novembre 2023 : Listing du matériel nécessaire et différentes schématisations du projet 13 novembre 2023 : Rendez-vous avec le tuteur pour évaluer la faisabilité du projet et révision de la liste du matériel. Du 13 novembre 2023 au 22 novembre 2023 : Modification du schéma du procédé suite au rendez-vous et à l'évaluation du matériel disponible. 22 novembre 2023 : Récupération de la première partie du matériel à la plateforme d'ingénierie chimique. 27 novembre 2023 : Dépôt du matériel au Fablab. Du 27 novembre 2023 au 4 décembre 2023 : Recherche des bouts de code associés à chaque composant pour concevoir le code final. 14 décembre 2023 : Récupération du support à la plateforme d'ingénierie chimique. 15 décembre 2023 : Première séance au Fablab : découverte des lieux, du matériel à disposition, recherche du matériel nécessaire au projet (planche, vis, écrou, rondelle), découpe laser de la planche aux bonnes dimensions, listing du matériel manquant. 26 décembre 2023 au 7 janvier 2024 : Assemblage des bouts de code pour former un seul code Arduino. 8 janvier 2024 : Récupération de la deuxième partie du matériel et dépôt au Fablab. 8 janvier au 11 janvier 2024 : Modification du schèma et recherche de nouveaux codes, car le matériel nécessaire n'étant pas disponible, du matériel de substitution nous a été fourni. 11 janvier 2024 : Deuxième séance au Fablab : Au cours de cette séance, un assemblage des composants a été effectué et rangé dans une boîte afin de faciliter les branchements sur le support. La planche a également été fixée. Pour cela, il a fallu percer les trous dans le support et la planche à l'aide des perceuses mises à disposition au Fablab. 15 janvier 2024 : Troisième séance au Fablab La cartouche chauffante mise à disposition s'est avérée trop petite par rapport à la taille du bécher. Pour augmenter la surface de chauffe, une solution a été trouvée en plaçant une plaque métallique sur la cartouche. Pour ce faire, un carré de métal de 10*10 cm a été découpé dans une plaque de métal à l'aide d'une découpeuse à jet d'eau. Cette machine nécessitant une formation pour son utilisation, le personnel du Fablab ayant cette compétence a été sollicité pour découper la plaque. Ensuite, le processus de fixation des éléments a commencé. Deux trous ont été percés dans la planche en bois pour faire passer les tuyaux reliés aux réservoirs d'acide et de base. Parallèlement, des trous ont été réalisés dans les récipients d'acide et de base (bouteilles coupées en deux) pour fixer les tuyaux. Ensuite, les tuyaux ont été solidement fixés aux bouteilles et l'étanchéité a été assurée, car une fuite était survenue en raison d'un trou trop grand. Pour remédier à cela, de la pâte à fixe et un pistolet à colle ont été utilisés en solution de secours. Les électrovannes ont été fixées en perforant le support et en utilisant des colliers de serrage pour les maintenir en place. Ensuite, les récipients ont été solidement fixés sur la planche à l'aide de colle, reliés via des tuyaux en plastique aux électrovannes fixées avec des vis et des écrous. La cartouche chauffante a également été fixée sur le support pour éviter tout déplacement. Une fois la cartouche stabilisée, la plaque métallique a été fixée à l'aide de pâte à fixe, assurant un bon maintien. Des trous ont été percés dans la plaque du support pour faire passer les câbles des différents composants et faciliter leur connexion ainsi que pour fixer les électrovannes. La disposition de la carte Arduino et de la breadboard a été effectuée à l'arrière du support dans le but de réduire au maximum le risque de contact avec les liquides. 19 janvier 2024 : Quatrième séance au Fablab Au cours de cette séance, des ajustements ont été nécessaires, impliquant la création de trous supplémentaires pour faciliter le passage des fils de connexion, en particulier ceux destinés au contrôle des électrovannes. Le processus de câblage a été globalement accompli, à l'exception des électrovannes, pour lesquelles une problématique spécifique est survenue. Plus précisément, la difficulté résidait dans la manière de fixer les câbles de manière sécurisée sur les connectiques des électrovannes. Les autres composants, tels que le capteur de température, la cartouche chauffante, le transistor et l'opHmètre, ont été intégrés avec succès dans le système. Cependant, le défi actuel est de résoudre la question liée à la fixation des câbles pour assurer une connexion fiable avec les électrovannes, tout en maintenant l'intégrité du câblage global. 22 janvier 2024 : Cinquième séance au Fablab Au cours de cette session, nous avons réussi à connecter l'ensemble des composants, finalisant ainsi l'assemblage. En ce qui concerne les électrovannes, nous avons résolu le problème en utilisant des cosses électriques. De plus, des consolidations entre les câbles ont été nécessaires, car certains d'entre eux s'étaient débranchés entre les deux séances, assurant ainsi une connexion stable et fiable. 25 janvier 2024 : Sixième séance au Fablab Au cours de la séance, nous avons entrepris des tests visant à évaluer le bon fonctionnement de notre montage. Cependant, lors du remplissage des réservoirs d'acide et de base, une fuite a été constatée au niveau d'un des récipients. Cette situation nous a contraints à remplacer le récipient défectueux et à effectuer des travaux d'étanchéité. Suite à ces interventions, aucune fuite supplémentaire n'a été observée. Malheureusement, les résultats des tests se sont révélés non concluants, car ni la cartouche chauffante ni les électrovannes n'ont été activées pour assurer la régulation nécessaire. Ce constat soulève des interrogations quant au fonctionnement correct de ces composants essentiels de notre dispositif. Des investigations approfondies seront nécessaires pour identifier et résoudre les éventuels problèmes techniques rencontrés, afin d'optimiser les performances de notre montage expérimental. 29 janvier 2024 : Septième séance au Fablab Au cours de la séance, nous avons initié de nouveaux tests visant à évaluer l'efficacité de notre montage. Dans une première étape, nous avons effectué des essais indépendants sur le capteur de température et le capteur de pH pour vérifier leur réactivité. Nous avons identifié l'absence d'une résistance au niveau des connexions de la cartouche. Après son ajout, des résultats ont été obtenus. Ces résultats ont été obtenus en immergeant le capteur de température dans de l'eau du robinet légèrement chauffée. Pour le pH-mètre, les résultats ont été obtenus dans de l'eau de ville sans calibration préalable du capteur en raison de l'absence de solutions tampons. Par la suite, nous avons entrepris une série d'essais visant à élever la température de la cartouche et à activer l'ouverture des électrovannes. Malheureusement, ces deux tentatives ont rencontré des obstacles. Malgré nos efforts, la chauffe de la cartouche n'a pas produit les résultats escomptés, et les commandes visant à ouvrir les électrovannes n'ont pas été exécutées avec succès. Branchements: Code: #include #include const int phMeterPin = A0; // Broche analogique pour le pHmetre const int acidValveRelayPin = 8; // Broche pour le relais de l'électrovanne d'acide const int baseValveRelayPin = 9; // Broche pour le relais de l'électrovanne de base const int tempSensorPin = 2; // Broche pour le capteur de température DS18B20 const int heatingElementPin = 3; // Broche pour la cartouche chauffante const int tempThreshold = 25; // Température cible OneWire oneWire(tempSensorPin); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); pinMode(acidValveRelayPin, OUTPUT); pinMode(baseValveRelayPin, OUTPUT); pinMode(heatingElementPin, OUTPUT); } void loop() { // Mesure du pH float pHValue = analogRead(phMeterPin) * 0.0049; // Conversion en pH (ajuster selon le capteur utilisé) // Régulation du pH if (pHValue > 7.0) { digitalWrite(acidValveRelayPin, HIGH); // Ouvrir l'électrovanne d'acide digitalWrite(baseValveRelayPin, LOW); // Fermer l'électrovanne de base } else if (pHValue < 6.5) { digitalWrite(acidValveRelayPin, LOW); // Fermer l'électrovanne d'acide digitalWrite(baseValveRelayPin, HIGH); // Ouvrir l'électrovanne de base } else { digitalWrite(acidValveRelayPin, LOW); // Fermer l'électrovanne d'acide digitalWrite(baseValveRelayPin, LOW); // Fermer l'électrovanne de base } // Mesure de la température sensors.requestTemperatures(); float tempValue = sensors.getTempCByIndex(0); // Régulation de la température if (tempValue < tempThreshold) { digitalWrite(heatingElementPin, HIGH); // Allumer la cartouche chauffante } else { digitalWrite(heatingElementPin, LOW); // Éteindre la cartouche chauffante } // Affichage des valeurs Serial.print("pH: "); Serial.print(pHValue); Serial.print(" | Température: "); Serial.print(tempValue); Serial.println(" °C"); delay(1000); // Attendre 1 seconde entre chaque itération } Dans le cadre de cet exemple, la combinaison des bibliothèques OneWire et DallasTemperature offre une solution efficace pour la lecture simplifiée de la température à partir d'un capteur DS18B20 connecté à une broche de données spécifique sur une carte Arduino. La bibliothèque OneWire agit comme une couche de communication de bas niveau, permettant au microcontrôleur de dialoguer avec des dispositifs utilisant le protocole OneWire via une seule ligne de données. Elle gère les détails complexes du protocole, tels que l'émission de signaux de communication et la réception des réponses des dispositifs connectés. D'un autre côté, la bibliothèque DallasTemperature est construite au-dessus de OneWire et fournit des fonctions spécifiques pour simplifier l'interaction avec les capteurs de température de Dallas Semiconductor, en particulier le DS18B20. Elle encapsule les opérations nécessaires pour demander et recevoir les données de température du capteur, offrant ainsi une interface plus conviviale et orientée objet. Ainsi, l'utilisation conjointe de ces deux bibliothèques permet de bénéficier de l'efficacité de OneWire pour la gestion du protocole de communication à un seul fil, tout en profitant de la simplicité et de la spécificité apportées par DallasTemperature pour la lecture de la température avec un capteur DS18B20. 9 février 2024: Présentation du projet Le projet réalisé n'a pas fonctionné, cependant lors de cette séance nous avons pu mettre en évidence les causes possibles de ce disfonctionnement: Problème de connectique dans la breadboard de l'Arduino: en effet à l'aide d'un voltmètre nous avons pu voir que celui-ci avait une tension nulle. Problème de matériel: le matériel ayant déjà servi auparavant, il se peut que ceux-ci ne fonctionnait pas correctement (vannes, plaques chauffante, sonde pH et de température). Dosage Colorimétrique Arduino Esma MOCTAR SALEM; Ghida AL KHALIL; Imene HAMAZ; Iyad CHAHINE; Victor ELEONORE Projet E Le dosage est une technique permettant de déterminer la quantité de matière ou la concentration d'une entité chimique dans une solution connue. Les réactions de dosage sont des réactions rapide, totale et ou le réactif de la solution titrante (solution de concentration connue) doit réagir avec une unique espèce d'un solution titrée (solution de concentration inconnue). Le dosage colorimétrique est une technique permettant de repérer l'équivalence par un changement de couleur du milieu réactionnel. Le changement de couleur de la solution également que les réactifs ont été introduits dans les proportions stœchiométriques. L'objectif du projet est de réguler et d'automatiser un dosage colorimétrique acido-basique par Arduino. Il s'agira de titré de l'acide chlorydrique (HCl), par une solution de soude (NaOH) solution titrante de concentration connue. L'indicateur colorée utilisé est la phénolphtaléine. Pour réaliser le projet, le matériel suivant est utilisé: Burette Béchers Servomoteur Une photorésistance (pour mesurer l'intensité lumineuse) Capteur de couleur TCS34725 une LED pour mettre en évidence le changement de couleur 2 Résistances Microcontrôleur Arduino BreadBoard phénolphtaléine (indicateur coloré) I. Matériel Arduino La première partie du projet consiste à réaliser les branchements le moteur pas à pas, la LED, la photorésistance et les résistances sur le microcontrôleur Arduino. Après avoir réalisé un schéma de câblage sur Tinkercad, nous avons branché nos différents équipements sur Arduino. Figure 1: Schéma de câblage sur Tinkercad Après avoir branché nos appareils sur Arduino, différents langage informatique ont été mis sur Arduino afin de montrer que les différents équipements pouvait fonctionner indépendamment des autres. Il a donc été démontré que les appareils fonctionnait indépendamment des autres, cependant certains dysfonctionnement ont pu être mis en avant.: Le moteur pas à pas qui se bloque après avoir atteint une valeur seuil. Figure 2: Test de fonctionnement de la LED Nous avons trouvé un servo moteur mieux adapté à la plaque Arduino ainsi qu'aux pièces que nous possédons qui relient le moteur à la clé de robinet de la burette. Ainsi, voici notre montage: Figure 3: Montage de l'Arduino Après avoir rentré un langage informatique sur Arduino pour nous assurer que le servomoteur  fonctionnait. Le code que nous avons rentré consistait à faire tourner les pales du servomoteur en fonction de la valeur de l'angle (variables que nous rentrons dans le langage informatique). Après plusieurs essais, nous avons pu constater que le servomoteur fonctionnait et qu'il était apte à faire tourner le robinet de la burette. Enfin, nous avons vérifier l'état de fonctionnement de la photorésistance. Pour cela nous avons utiliser le code suivant pour la faire fonctionner : int photo = A0; // Déclaration de la photorésistance sur Arduinovoid setup() {  // put your setup code here, to run once:  Serial.begin(9600);  pinMode(photo, INPUT);} void loop() {  // put your main code here, to run repeatedly:  int lecture = analogRead(photo); // Lecture de la valeur enregistré par la photorésistance en fonction de l'intensité lumineuse  Serial.println(lecture); // Enregistrement la valeur sur Arduino (Les valeurs sont enregistrés en ligne} Ce code nous à permis de calibrer la photorésistance en fonction de l'intensité lumineuse. Ainsi, nous avons pu établir une corrélation entre les valeurs enregistrés par Arduino, et l'intensité lumineuse. Conditions dans laquelle se trouve la photorésistance Valeur enregistré par Arduino Conclusion -Boite en carton fermé Valeur aux alentours de 10 La photorésistance ne capte aucune lumière -Boite en carton en fermé troué pour faire passer un faisceau lumineux Valeur aux alentours de 170 -Photorésistance éclairé par une lampe torche de téléphone à une distance d'environ 3 à 5 cm Valeurs aux alentours de 975 -Lampe torche du téléphone collé à la photorésistance Valeurs supérieur à 1013 On est presque au maximum de l'intensité lumineuse pouvant être capté par la photorésistance -Photorésistance éclairée par la lumière ambiante du FabLab à 17h13 Valeurs aux alentours de 866   2.Impression 3D et Construction d'une boîte opaque Pour pouvoir tourner le robinet de la burette, un servomoteur n'est pas suffisant. En effet, nous avons dû adapter une clé de robinet sur la burette. Cette clé sera scotché aux pales du servomoteur afin de pouvoir faire tourner le robinet de la burette, et de verser la solution titrante dans la solution titrée. La clé de robinet à été réalisé à l'aide de l'impression 3D en utilisant du PFA. On a commencé par la réalisation du modèle 3D à l'aide du site "Onshape", un logiciel/site de design 3D. On a pu créer le modèle ci dessous représenté sur Onshape : Figure 4: Modèle 3D de la Clé de robinet Les dimensions ont été adaptés à la clé de robinet et au servomoteur qui sera lié à la clé. On note une longueur de 55 cm, et un diametre interne de 10,75 cm. On obtient par impression 3D le modèle suivant :                                                                                  Figure 5: Clé de robinet Dans le cadre du dosage il est nécessaire de mettre le bécher dans une boîte opaque pour que les valeurs affichés par la photorésistance ait du "sens". Autrement dit, il faut que la photorésistance capte uniquement la lumière issu de la source lumineuse (dans notre cas il s'agit d'une lampe de poche), et pas la lumière produit par les lumière de la salle ou de la hotte. Figure 6: Boîte opaque   3.Code Arduino En ce qui concerne le code Arduino, nous avons trouvé des codes séparés pour la LED (Fig ), la photorésistance (Fig ) et le servomoteur (Fig ), que nous avons testé afin de vérifier le bon fonctionnement du matériel. Le montage est installé, nous avons ensuite écris un code adapté à faire tourner notre système en prenant compte des trois unités simultanément. #include  // on inclut la bibliothèque servo Servo servoMoteur;   // on crée un objet servo appelé servoMoteur //set pin numbers//const won't changeconst int ledPin = 5;   //Déclaration de la LED sur ARDUINOconst int ldrPin = A0;  //Déclaration de la photorésistance void setup() { Serial.begin(9600);  pinMode(ledPin, OUTPUT);  //iLED en sortie  pinMode(ldrPin, INPUT);   //Photorésitance en entrée  servoMoteur.attach(6); // Servo moteur en position 9} void loop() { int ldrStatus = analogRead(ldrPin);   //Lecture de la valeur de la photorésistance  //Regarder si la valeur de la photorésistance est inferieur ou égale à <= x  //Si c'est le cas, la LED est éteinte le titrage commence  if (ldrStatus <=x) {   digitalWrite(ledPin, LOW);              //LED est eteinte    Serial.println();                       //Les valeurs de la photorésitance sont enrgistrés en ligne    servoMoteur.write(0);                   //Le servomoteur passe de l'angle 0 à un angle de 90°    delay(1000);  servoMoteur.write(90);   delay(1000);   digitalWrite(ledPin, LOW);   }  else {   digitalWrite(ledPin, HIGH);          //LED allumé au changement de couleur   Serial.println();    servoMoteur.write(0);                 // Le servomoteur repasse en position 0    delay(1000); }} II. Phase de test 1. Ouverture du robinet et calibration des solutions avant et après l'équivalence avec la photorésistance Les premiers tests d'ouvertures du robinets se sont montrés fructueux. On aurait pu craindre que les pales du servomoteur n'ait pas suffisamment de puissance pour faire tourner la clé de robinet, mais ce ne fut pas le cas. Nous avons aussi réaliser un test pour calibrer la photorésistance lors du changement de couleur dans la boîte opaque. Après de multiples tests, nous avons remarqué que plusieurs paramètres pouvait influencer la valeur analogique de la photorésistance comme par exemple l'agitation, la position du bécher par rapport à la source lumineuse. De plus, nous avons remarqué que les gammes des valeurs ne sont pas stables entre deux expériences. Nous en avons conclu qu'avant chaque expérience, il était important de calibrer la solution d'HCl seul avant de commencer le titrage. Cependant lors du titrage, nous n'avons pas remarqué de différences significatives entre la solution d'HCl, et la solution de couleur rose à l'équivalence après ajout de la soude. Ces résultats peuvent être expliqués par la position de la photorésistance, du bécher et de la source lumineuse. En effet, les propriétés optiques du bécher jouant une influence non négligeable sur la lumière capté par la photorésistance. Figure 7: Schéma de la position du bécher, de la photorésistance et de la source de lumière D'autres pistes ont alors été envisagés, comme par exemple placée la photorésistance au dessus de bécher. Cependant, cette piste à été abandonnée car la position de la source lumineuse étant situé tout en bas de la boite opaque, nous n'étions pas certain que la photorésistance puisse capter une intensité lumineuse suffisamment forte.  Autrement dit, les valeurs enregistrés par Arduino au niveau de la photorésistance aurait été très faible, ce qui aurait rendu difficile la détectabilité de la solution à l'équivalence (solution de couleur rose), et donc il aurait été plus compliqué d'arrêter le servomoteur lorsque l'on passe de la solution incolore à la solution de couleur rose. Au final, nous avons donc décider de remplacer la photorésistance par un capteur de couleur. Ce choix semble plus pertinent étant donné que notre dosage est basé sur le changement de couleur d'une solution à l'équivalence. 2. Utilisation du capteur de couleur Le capteur de couleur TCS 34725 est un capteur qui détecte les couleur rouge, vert et bleu ainsi que le blanc. L'utilisation du capteur de couleur sera basé sur le même principe que la photorésistance sauf que cette fois-ci, nous n'utiliserons pas de boite opaque, et que le capteur de couleur sera placé au dessus du bécher. Nous avons donc modifié le code du titrage pour que celui-ci soit en adéquation avec le capteur de couleur et non plus avec la photorésistance. Figure 8: Capteur de couleur 34725 RGB[1] #include #include "Adafruit_TCS34725.h"//on inclut le capteur de couleur dans la bibliothèque#include  // on inclut la bibliothèque servo #define SERVO_STOP_ANGLE 0 // on définit l'angle initiales des pâles du servomoteur comme étant 0°#define SERVO_START_ANGLE 90 // on définit l'angle de rotation des pâles du servomoteur comme étant de 90°Servo servoMoteur;   // on crée un objet servo appelé servoMoteur Adafruit_TCS34725 tcs = Adafruit_TCS34725 (TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); void setup() {Serial.begin(9600);servoMoteur.attach(9); // Servo moteur en position 9servoMoteur.write(SERVO_START_ANGLE); // Position initial du servomoteur. Postion des pâles ont un angle de 0°if (tcs.begin()) {Serial.println("Found sensor"); // Si le capteur de couleur est connécté à Arduino alors Found Sensor s'affiche avant de lançer le titrage } else {Serial.println ("No TCS 34725 found, check connections"); // Si le capteur de couleur n'est pas connécté à Arduino alors "No TCS 34725 found, check connections" s'affichewhile(1); } } void loop() {  uint16_t clear, red, green, blue; tcs.getRawData(&red, &green, &blue, &clear); // Calculer la moyenne des valeurs de couleur pour réduire le bruit  uint32_t sum = clear;  uint16_t colorData[3] = {red, green, blue};  for (int i = 0; i < 3; i++) {    sum += colorData[i];  }  uint16_t average = sum / 4; Serial.print("Clear: "); Serial.print(clear);  Serial.print(" Red: "); Serial.print(red);  Serial.print(" Green: "); Serial.print(green);  Serial.print(" Blue: "); Serial.println(blue); // Si la valeur de couleur claire (blanc) est situé en dessous de 450, alors le servomoteur s'arrête "changement de couleur détecté" s'affiche sur l'écran du PC  if (clear < 450) {    Serial.println("Changement de couleur détecté!");    servoMoteur.write(0);    delay(1000); } else {   // Sinon le servomoteur tourne d'un angle de 0 à 90°. Il reste en position 0° pendant 5 secondes, puis en postion 90° pendant 2 secondes      servoMoteur.write(0);     delay(5000);     servoMoteur.write(90);      delay(2000);   } } 3. Calibration du capteur de couleur Comme pour la photorésistance, il fallu calibrer le capteur de couleur en fonction des deux solutions que nous avons, et déterminer la valeur affichés sur le PC par la couleur claire (le blanc). Le choix du blanc comme variable est totalement arbitraire. En effet, nous aurions tout aussi bien pu prendre les valeurs rouge, vert ou bleu. Comme pour la photorésistance, nous nous sommes rendus compte que l'agitation avait une influence sur les valeurs numériques enregistrés par le PC. Cela signifie que comme pour la photorésistance, la calibration des solutions doit se faire sous agitation. Après de multiples essais, nous avons pu déduire une gamme de valeur pour chacune des solutions: Pour la solution de HCl incolore, la couleur claire se situe aux alentours 489 selon les valeurs enregistrés sur le PC Pour le solution à l'équivalence (couleur rose), la couleur claire se situe aux alentours de 400 selon les valeurs enregistrés sur le PC. Nous avons donc décidé dans le code que nous arrêterions le servomoteur dès que la couleur claire (clear) est inférieur à 450, sinon le servomoteur continue de tourner d'un angle de 0° vers un angle de 90°. Attention: Nous constatons bien une différence significative entre la solution incolore et la solution rose. En revanche, il est important de préciser que les valeurs que nous avons peuvent changer entre deux expériences. Il est donc très important avant chaque titrage de calibrer la solution de HCl seul, d'attendre que cette valeur se stabilise, puis de commencer le titrage. Il faudra donc certainement changer la valeur seuil inscrit dans le code. Enfin, il est important de dire que pour calibrer la photorésistance on fixe la position du servomoteur à 0° dans le code. Après deux tentatives nous avons réussi à automatiser un dosage colorimétrique sur Arduino en contrôlant l'ouverture du robinet de la burette et arrêtant de verser la solution titrante à l'équivalence. Bibliographie [1]Test Du Capteur de Couleur RGB TCS34725. https://www.yoctopuce.com/FR/article/test-du-capteur-de-couleur-rgb-tcs34725. Accessed 27 Jan. 2024. Tutoriel : Montage de support en aluminium et bois Les projets différents éléments de vos projets de 5C803 seront déposés sur un support en aluminium et bois, tel que sur la photo ci-dessous. Pour le montage, chaque groupe dispose des éléments suivants: 2 grandes barres (38 cm) 2 barres moyennes (33 cm) 3 petites barres (29 cm) 8 équerres vis de fixation avec butée (les quantités ne sont pas correctes sur la photo). Il vous faudra utiliser une clé hexagonale (clé Allen) de taille 3 2 planches en bois de 30x30 cm (épaisseur 6 mm). Vous pourrez ensuite visser (ou coller) vos différents éléments sur ces plaques. Le schéma de montage est le suivant: La 1ère étape consiste à assembler le socle. Notez que les équerres sont placés à l'extérieur du cadre. La 2ème étage consiste ensuite à monter la paroi verticale. Le support en aluminium est terminé, il ne reste plus qu'à rajouter les planches de bois. Régulation du procédé de l'élaboration du biodiesel Régulation de Température et de débit d'alimentation en réactifs pour la Production de Biodiesel Introduction La production de biodiesel représente une avancée significative vers une économie durable, offrant une alternative éco-responsable aux carburants traditionnels, réduisant les émissions de gaz à effet de serre et contribuant ainsi à la transition vers une énergie plus propre.Le procédé consiste à la transestérification des triglycérides pour la production de biodiesel intègre deux réservoirs, chacun contenant des triglycérides et du méthanol avec KOH. Les réactifs sont précisément régulés par des électrovannes, alimentant un réacteur chauffé à 60°C via un système de chauffage à effet Peltier. Cette approche assure des conditions de réaction optimales, favorisant une conversion efficace des triglycérides en biodiesel. Notre projet se concentre sur la régulation précise des paramètres clés du procédé. Sous la supervision de M. Jérôme PULPYTEL, notre équipe composée de Samy BOUACEM, Sihem BOUHROUM, Imane DADA, Mohammed MEBAREK AZZEM et Mohamed Amir FACI, et  a développé ce projet dans le cadre de l'unité d'enseignement MU5Ci803 (Optimisation et contrôle des procédés) Parcours Ingénierie Chimique. Matériel Utilisés 1 Microcontrôleur Arduino 1 Bread-board 1 Capteur de température au niveau du réacteur 1 Peltier 1 Capteur de niveau 3 Résistances 2 Boutons poussoir (ON/OFF) Câbles et fils de connexion 4 Sources d'Alimentation de 9V 1 Agitateur 4 Relais 4 Moteurs à courant continu 2 Réservoirs 2 électrovannes 1 Récipient comme un Réacteur Un Support 3 Plaques en plexiglass Produits Utilisés Triglycéride Méthanol KOH Description du Procédé Notre procédé se déroule en plusieurs étapes soigneusement orchestrées : Après avoir activé le bouton ON de la première vanne, elle s'ouvre, permettant au premier réactif d'alimenter le réacteur. Lorsque le niveau atteint X mm, le capteur envoie un signal pour que la vanne se ferme automatiquement. Le dispositif Peltier est activé, initiant le chauffage du réacteur à une température de 60°C. Une fois la température atteinte, on active le bouton ON de la deuxième vanne pour qu'elle s'ouvre afin d'alimenter le deuxième réactif. Simultanément, l'agitation du réacteur débute, assurant une homogénéité optimale de la réaction tout en maintenant la température constante à 60°C. Une fois le niveau Y mm atteint, le capteur de niveau envoie un signal pour que la deuxième vanne se ferme. Ces étapes séquentielles garantissent un contrôle précis du processus de transestérification, assurant une production efficace et cohérente de biodiesel. Protocole Expérimentale L'étape initiale consiste à introduire 200 ml d'huile alimentaire dans le récipient tricol. Ensuite, le milieu réactionnel est chauffé à 60 °C à l'aide d'un bain-marie. Les pastilles d'hydroxyde de potassium sont dissoutes dans le méthanol, La solution est introduite dans le ballon sous agitation Le système est ramené à la température ambiante Le milieu réactionnel est transféré dans une ampoule à décanter On laisse le mélange décanter jusqu'à la séparation des phases Entre temps, on fait l'analyse de l'huile, notamment en mesurant son indice d'iode et son indice d'acide. Avancement La progression de notre projet était par plusieurs séances de Travail : Première séance : Lors de notre première réunion, nous avons entamé une séance de brainstorming préliminaire pour fixer notre thème en évaluant la faisabilité du projet tout en définissant la méthodologie de travail. Au cours de cette séance, nous avons également élaboré un GRAPHSET détaillé de notre projet. Deuxième séance : Nous avons initié une simulation de notre projet sur Tinkercad et entamé la mise en place des connexions sur la breadboard. En parallèle, nous avons développé le support physique de notre projet. Troisième séance : Au cours de cette séance, nous avons découpé des plaques de matière PMMA d'un diamètre de 6 mm à l'aide de la machine à découper au laser. Ces plaques servent de support pour les deux réservoirs et le réacteur. Nous avons également installé les électrovannes de manière à assurer la propreté et l'ordre dans notre projet. Quatrième séance : Nous avons poursuivi en coupant une plaque pour intégrer les conduites des réactifs, le détecteur de température et le capteur de niveau dans le réacteur. En parallèle, le développement du code Arduino a commencé pour automatiser et réguler notre système. Cinquième séance : Au cours de cette séance, nous avons imprimé un agitateur à l'aide de l'imprimante en 3D. Nous avons également entamé la rédaction du rapport sur le Wiki tout en intégrant notre système d'automatisation derrière le support, garantissant ainsi une présentation soignée et bien structurée. Sixième séance : Nous avons procédé au branchement du câblage tout en finalisant le code qui automatisera et régulera notre système, qui est comme suite : #include // Inclusion de la bibliothèque mathématique #include // Inclusion de la bibliothèque OneWire #include "Ultrasonic.h" // Inclusion de la bibliothèque Ultrasonic lié au capteur ultrasonic #include // Inclusion de la bibliothèque DallasTemperature lié au capteur de température // Définition des broches pour les composants #define PELTIER 6 #define VANNE_A 4 #define VANNE_B 5 #define AGITATEUR 3 #define ONE_WIRE_BUS 13 // Broche utilisée pour la communication avec le capteur de température OneWire oneWire(ONE_WIRE_BUS); // Initialisation du bus OneWire DallasTemperature sensors(&oneWire); // Initialisation de la communication avec les capteurs de température Ultrasonic ultrasonic(11); // Initialisation du capteur ultrasonique sur la broche 11 void setup() { pinMode(PELTIER, OUTPUT); // Configuration de la broche du Peltier en sortie pinMode(VANNE_A, OUTPUT); // Configuration de la broche de la vanne A en sortie pinMode(VANNE_B, OUTPUT); // Configuration de la broche de la vanne B en sortie pinMode(AGITATEUR, OUTPUT); // Configuration de la broche de l'agitateur en sortie Serial.begin(9600); // Initialisation de la communication série à une vitesse de 9600 bauds sensors.begin(); // Initialisation des capteurs de température } void loop() { // Affichage de la température sensors.requestTemperatures(); Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print("C | "); // Affichage de la distance long RangeInMillimeters; RangeInMillimeters = ultrasonic.MeasureInMillimeters(); Serial.print("Distance : "); Serial.print(RangeInMillimeters); Serial.println(" mm"); digitalWrite(VANNE_A, HIGH); // Ouverture de la vanne A // Contrôle de la température avec le Peltier while (sensors.getTempCByIndex(0) <= 60) { digitalWrite(PELTIER, HIGH); // Démarrage du Peltier } // Contrôle des actions en fonction de la distance mesurée if (RangeInMillimeters <= 50) { digitalWrite(VANNE_A, LOW); // Fermeture de la vanne A digitalWrite(VANNE_B, HIGH); // Ouverture de la vanne B delay(2000); // Attente de 2 secondes (en millisecondes) digitalWrite(AGITATEUR, HIGH); // Démarrage de l'agitateur // Affichage de la température après ouverture de la vanne B sensors.requestTemperatures(); Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print("C | "); // Contrôle de la température avec le Peltier après ouverture de la vanne B while (sensors.getTempCByIndex(0) <= 60) { digitalWrite(PELTIER, HIGH); // Démarrage du Peltier } // Mesure de la distance après ouverture de la vanne B RangeInMillimeters = ultrasonic.MeasureInMillimeters(); Serial.print("Distance : "); Serial.print(RangeInMillimeters); Serial.println(" mm"); } // Contrôle des actions si la distance est inférieure à 35 mm if (RangeInMillimeters <= 35) { digitalWrite(VANNE_B, LOW); // Fermeture de la vanne B // Affichage de la température avant l'attente de 45 minutes sensors.requestTemperatures(); Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print("C | "); // Contrôle de la température avec le Peltier après fermeture de la vanne B while (sensors.getTempCByIndex(0) <= 60) { digitalWrite(PELTIER, HIGH); // Démarrage du Peltier } delay(2700000); // Attente de 45 minutes (en millisecondes) digitalWrite(AGITATEUR, LOW); // Arrêt de l'agitateur digitalWrite(PELTIER, LOW); // Arrêt du Peltier } delay(1000); // Attente de 1 seconde (en millisecondes) } Septième séance : Lors de cette séance, notre objectif principal était pour tester le bon fonctionnement de notre système. Nous avons identifié plusieurs problèmes, notamment : Une des vannes était initialement dans la position NO (Normally Open), mais nous l'avons rapidement remplacée par une autre. Nous avons également détecté des fuites dans les réservoirs et les vannes, et avons entrepris des ajustements pour les résoudre. Parallèlement, nous avons débuté la conception de la plaque de présentation de notre projet. Un code QR a été intégré, dirigeant vers notre projet sur le wiki, et les noms des membres de l'équipe ont été ajoutés, accompagnés du logo de notre faculté, en utilisant le software Adobe Illustrator. Huitième Séance : Lors de cette séance de test supplémentaire, nous avons rencontré des problèmes de code et de branchement. Nous avons pris le temps d'analyser ces problèmes afin d'apporter les ajustements nécessaires. Nous avons également utilisé la machine laser pour fabriquer notre plaque de présentation. Neuvième séance : Lors de cette séance, nous avons résolu avec succès les problèmes de branchement et de code, permettant ainsi au système de fonctionner correctement. Cependant, nous avons rencontré un obstacle lié au capteur de température que nous avons tenté de résoudre, mais malheureusement sans succès. En conséquence, nous avons modifié notre plan d'automatisation du projet. Désormais, nous avons programmé l'agitation et l'ouverture de la deuxième vanne lorsque le niveau atteint la marque L1 De même, pour le capteur de niveau, nous avons constaté qu'après le début de l'agitation,  il est difficile de mesurer le niveau des réactifs en raison de la perturbation causée par l'agitation. Par conséquent, il n'est pas possible de conditionner la fermeture de la deuxième vanne avec un niveau L2 comme prévu initialement. Nous avons donc décidé de programmer la fermeture de la deuxième vanne avec un temps d'attente de 30 secondes après l'ouverture de la deuxième vanne. Ces modifications sont illustrées dans le grafcet ci-dessous. A cet effet, le code a subi des modifications comme illustré ci-dessous. Il est à noter que le temps d'attente de 45 minutes a été réduit jusqu'à 30 secondes afin de permettre une visualisation et une représentation plus rapides de tout le travail. #include // Inclusion de la bibliothèque mathématique #include // Inclusion de la bibliothèque OneWire #include "Ultrasonic.h" // Inclusion de la bibliothèque Ultrasonic lié au capteur ultrasonic #include // Inclusion de la bibliothèque DallasTemperature lié au capteur de température // Définition des broches pour les composants #define PELTIER 6 #define VANNE_A 4 #define VANNE_B 5 #define AGITATEUR 3 #define ONE_WIRE_BUS 13 // Broche utilisée pour la communication avec le capteur de température OneWire oneWire(ONE_WIRE_BUS);    // Initialisation du bus OneWire DallasTemperature sensors(&oneWire); // Initialisation de la communication avec les capteurs de température // Initialisation du capteur ultrasonique sur la broche 11 Ultrasonic ultrasonic(11); void setup() { pinMode(PELTIER, OUTPUT); // Configuration de la broche du Peltier en sortie pinMode(VANNE_A, OUTPUT); // Configuration de la broche de la vanne A en sortie pinMode(VANNE_B, OUTPUT); // Configuration de la broche de la vanne B en sortie pinMode(AGITATEUR, OUTPUT); // Configuration de la broche de l'agitateur en sortie Serial.begin(9600);  // Initialisation de la communication série à une vitesse de 9600 bauds sensors.begin(); // Initialisation du capteur de température } void loop() { // Affichage de la température   sensors.requestTemperatures();   Serial.print("Temperature: ");   Serial.print(sensors.getTempCByIndex(0));   Serial.print("C  |  "); // Affichage de la distance   long RangeInMillimeters;   RangeInMillimeters = ultrasonic.MeasureInMillimeters();   Serial.print("Distance : ");   Serial.print(RangeInMillimeters);//0~10000mm   Serial.println(" mm"); digitalWrite(VANNE_A, HIGH); // Ouverture de la vanne A digitalWrite(PELTIER, HIGH); // Démarrage du Peltier // Contrôle des actions en fonction de la distance mesurée if (RangeInMillimeters <= 50) {   digitalWrite(VANNE_A, LOW); // Fermeture de la vanne A   digitalWrite(VANNE_B, HIGH); // Ouverture de la vanne B   delay(2000); // Attente de 2 secondes (en millisecondes)   digitalWrite(AGITATEUR, HIGH); // Démarrage de l'agitateur   delay(30000);  // Attente de 30 secondes (en millisecondes)   digitalWrite(VANNE_B, LOW); // Fermeture de la vanne B   delay(30000);  // Attente de 30 secondes (en millisecondes)   digitalWrite(AGITATEUR, LOW); // Arrêt de l'agitateur   digitalWrite(PELTIER, LOW); // Arrêt du Peltier } delay(1000); } Dixième séance : Lors de cette séance, nous avons testé notre projet d'automatisation, qui a fonctionné correctement à l'exception d'un problème avec l'intensité de l'agitation. En effet, celle-ci était excessive avec une alimentation de 12 V. Par conséquent, nous avons opté pour une solution en remplaçant cette alimentation par deux piles de 1,5 V chacune, ce qui fournit un voltage plus adapté et suffisant pour contrôler l'agitation. Traitement d'une eau trouble (mesure de turbidité) Informations Mohammed EL Amine CHOUAF(mohammed_el_amine.chouaf@etu.sorbonne-universite.fr) Loréna COPPET (lorena.coppet@etu.sorbonne-universite.fr) Sara Yasmine GAOUA (sarra_yasmine.gaoua@etu.sorbonne-universite.fr) Chaza TOUATI (chaza.touati@etu.sorbonne-universite.fr) Master 2 de Chimie parcours Ingénierie Chimique : MU5Ci - 803 Optimisation et contrôle des procédés Période: 11/12/2023 - 12/02/2024 Contexte On peut définir la turbidité comme la teneur en matériaux en suspension dans un liquide. En d'autres termes, on va mesurer la clarté d'un liquide. La nature de la suspension peut être diverse et variée. Dans notre cas, on souhaite traiter une eau trouble (synthétique) par filtration (sur une colonne contenant différentes couches filtrantes: gravier, sable fin et gros sable). Pour se faire on cherchera à mesurer en continu la turbidité du filtrat et ainsi instaurer une boucle de recyclage en fonction de la valeur obtenue et des critères définis et tout cela en automatisant le système (Arduino). Ce projet cumul deux disciplines que sont la chimie et l'automatisme. Le fait d'automatiser la filtration nous permet d'obtenir un résultat répétable, facilitant la recherche et le développement du procédé. Mode opératoire Objectif: Mesure en continu de la turbidité d’une eau trouble traitée par filtration. Alimentation de la colonne via une pompe électrique (pompe 1) Récupération du filtrat et mesure de la turbidité à l’aide d’une sonde (capteur de turbidité) Tant que la consigne n’est pas atteinte, recyclage du filtrat dans la colonne à l’aide d’une pompe (pompe 2) Contrôle du niveau d’eau dans la colonne et celui de la récupération du filtrat avec des capteurs de niveau Composants 2 pompes électriques 2 réservoirs 2 capteurs de niveau Une colonne de filtration (conçue à l'imprimante 3D) Filtres 1 capteur de turbidité Eau trouble synthétique 1 carte Arduino Branchements 2 alimentations 12 V 2 moteurs 2 agitateurs (conçus à l'imprimante 3D) Piles de 3 V Construction Étape 1 Plan du procédé Listing du matériel Étape 2 Construction de la maquette Recherche du code Connexion avec Arduino Étape 3 Éssais Journal de bord 16/10/2023 Choix du projet et du groupe de travail 27/10/2023 Réunion de projet:  définition des enjeux 04/11/2023 2ème réunion de projet: Réalisation du schéma du procédé et listing du matériel 08/11/2023 Entretien avec le tuteur afin d'affiner nos idées; discussion sur la faisabilité des réalisations; listing du matériel disponible 10/11/2023 Ajustement et correction du schéma suite à l'entretien 21/11/2023 Récupération du matériel  à Sorbonne Université - plateforme d'Ingénierie Chimique 23/11/2023 Rangement du matériel au Fablab dans une boite prévu à cet effet 05/12/2023 Récupération de gravier et sable (fin, moyen) nécessaire à la filtration     13/12/2023 Récupération du support en bois pour le montage du procédé 21/12/2023 1ère rencontre au fablab pour observer et découvrir le matériel disponible 22/12/2023 Montage du support en bois 28/12/2023 Code préliminaire: recherche du code Arduino pour chaque composant de notre procédé 08/01/2024 Impression de la colonne de filtration avec l'imprimante 3D disponible au Fablab Dimensions : il s'agit d'un entonnoir avec un grand diamètre externe de 14 cm, un grand diamètre interne de 13,5 cm, un petit diamètre externe de 2 cm, un petit diamètre interne de 1,3 cm, une hauteur totale de 21 cm, une hauteur du cône de 16 cm et une hauteur du tube de 5 cm 09/01/2024 Dimensionnement du support du filtre 19/01/2024 Fixation de la colonne sur le support en bois 22/01/2024 Impression 3D des mobiles d'agitation Dimensions : longueur arbre d'agitation 9 cm, diamètre hélice 3 cm                                   02/02/2024 Réalisation des essais de fonctionnement. Nous avons soulevé plusieurs points bloquants : - Absence de connecteur pour le capteur de turbidité - Défaillance du capteur de niveau de la colonne - Agitation du filtrat trop importante : il faudrait pouvoir piloter la fréquence de rotation du moteur à l'aide d'un potentiomètre 04/02/2024 Recherche du manuel du capteur de turbidité. Informations sur la relation entre le voltage et la turbidité du capteur (modèle sen0189) Cette courbe est la fonction de transfert de la tension en turbidité. Mesure de la turbidité de la solution d'alimentation : 3000 ntu (eau turbide) Détermination de la consigne : 1763 ntu (eau claire) 09/02/2024 Dernier montage Pour le montage final, nous avons gardé l'agitation seulement au niveau de l'alimentation et pas au niveau du bac de filtrat pour assurer une bonne mesure de niveau et de turbidité. Code #include <Wire.h> #include <rgb_lcd.h> const int relaisPompe1 = 3; // Broche de commande pour la pompe d'alimentation const int relaisRecyclage2 = 2; // Broche de commande pour la pompe de recyclage 2 const int trigPin = 5; // Broche de déclenchement pour capteur de niveau const int echoPin = 4; // Broche de réception pour capteur de niveau const int sensorPin = A0; // Broche pour le capteur de turbidité const int d1 = 2; // Seuil de distance pour le capteur de niveau const float TS = 1703; // Turbidité souhaitée void activerPompe(int relais, unsigned long duree); void activerCapteurNiveau(); int mesurerDistance(); float mesurerTurbidite(); void setup() { // Initialisation des broches des relais en sortie pinMode(relaisPompe1, OUTPUT); pinMode(relaisRecyclage2, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(sensorPin, INPUT); Serial.begin(9600); // Initialisation de la communication série } void loop() { // Déclencher la pompe 1 pendant 5 secondes activerPompe(relaisPompe1, 5000); // Attendre 10 secondes tout en mesurant la distance avec le capteur de niveau unsigned long startTime = millis(); while (millis() - startTime < 10000) { activerCapteurNiveau(); int distance = mesurerDistance(); if (distance == d1) { digitalWrite(relaisPompe1, LOW); // Arrêter la pompe si la distance atteint d1 float ntu = mesurerTurbidite(); // Si la turbidité est supérieure à la turbidité souhaitée, activer la pompe de recyclage 2 pendant 10 secondes if (ntu > TS) { activerPompe(relaisRecyclage2, 10000); } // Vérifier si la turbidité a atteint la valeur souhaitée (TS) pour arrêter le processus if (ntu == TS) { // Arrêter le processus return; } } delay(500); // Attendre un court laps de temps avant de refaire une mesure } // Attendre 5 minutes avant de répéter le processus delay(5 * 60 * 1000); // 5 minutes en millisecondes } // Fonction pour activer une pompe pendant une durée spécifiée void activerPompe(int relais, unsigned long duree) { digitalWrite(relais, HIGH); delay(duree); digitalWrite(relais, LOW); } // Fonction pour activer le capteur de niveau void activerCapteurNiveau() { // Envoyer une impulsion ultrasonique digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); } // Fonction pour mesurer la distance avec le capteur de niveau int mesurerDistance() { // Mesurer la durée du signal écho long duration = pulseIn(echoPin, HIGH); // Calculer la distance en centimètres int distance = duration * 0.034 / 2; // Afficher la distance mesurée Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); return distance; } // Fonction pour mesurer la turbidité float mesurerTurbidite() { float volt = 0; for (int i = 0; i < 800; i++) { volt += ((float)analogRead(sensorPin) / 1023) * 5; } volt = volt / 800; volt = round(volt * 100) / 100; // Arrondir à deux décimales float ntu; if (volt < 1) { ntu = 3000; } else { ntu = -1120.4 * volt * volt + 5742.3 * volt - 4353.8; // Utilisation de l'opérateur * pour élever au carré } delay(10); return ntu; } Régulation de la température d'une réaction exothermique simulée Régulation de la température d'une réaction exothermique simulée L’objectif de notre projet est de réguler la température à l’intérieur d’un réacteur à 20°C par la mise en place d’un système automatisé qui va selon les conditions activer une pompe pour permettre au fluide caloporteur de circuler et ainsi abaisser la température dans le réacteur. L’eau présente à l’intérieur du réacteur monte en température via l'introduction dans le réacteur d'une poche de gel autochauffante. L’objectif est donc de simuler une réaction exothermique et de contrôler la température du réacteur afin d’éviter tout emballement thermique. Noms et Prénoms : Halil Ayturk (halil.ayturk@etu.sorbonne-universite.fr) Taoufik Karrab (taoufaik.karrab@etu.sorbonne-universite.fr) Basile Linon (basile.linon-gervais@etu.sorbonne-universite.fr) Sofiane Meridji (Sofiane.meridji@etu.sorbonne-universite.fr) Date de début : 01/09/2023 Date de fin : 02/02/2024 Nous avons dans un premier temps fait un grafcet de notre projet pour décrire les différentes étapes de notre système de régulation pour pouvoir ensuite faire une liste des différents composants qui vont être demandés. Capteur de température numérique DS18B20 étanche × 1 Pompe × 2 Motor Shield V2.0 × 1 Arduino Uno × 1 Résistance pull-up de 4,7 kΩ × 1 Fils de liaison ~ 15 Résistance led × 1 Câble USB type A/B × 1 Alimentation de 12V X 1 Serpentin métallique X 1 Tuyaux X 4 fig.1 Tableau des différents composants électroniques utilisés Nous avons par la suite développé le système du capteur de température. Nous avons tout d’abord simulé sur Tinkercad le montage du circuit pour voir si le code que nous avions implémenté était opérationnel. fig.2A Schéma de montage du capteur de température étanche sur la carte arduino Fil noir (GND) Terre Fil jaune (DQ) Pin 2 Arduino et via une résistance de 4,7 kΩ à 5V Fil rouge (Vdd ) 5V fig.2B Tableau des connexions du capteur de température numérique Une fois le code validé via Tinkercard, nous avons assemblé le capteur de température sur la carte Arduino en utilisant des fils de liaisons. L’assemblage a été réalisé par soudage en utilisant de l'étain. Après avoir monté le circuit électrique, l'objectif était de déterminer si le capteur de température était directement fonctionnel ou si il demandait une étape de calibrage. Pour cela, nous avons implémenté un code qui avait pour rôle de mesurer la température du milieu et de l’afficher sur l'application Arduino. Le capteur de température DS18B20 intègrent des circuits de commande qui simplifient la programmation grâce à des bibliothèques préconfigurées, permettant ainsi de convertir le signal électrique en température. Un test qui consistait à mesurer la température du milieu à ensuite été réalisé (eau chaude, eau froide) en plongeant notre capteur dans un récipient avant de lire la température affichée puis de la comparer avec la valeur fournie par un thermomètre. Dans notre cas, le capteur de température était déjà calibré et prêt à l’emploi. Il a ensuite fallu réussir à faire fonctionner la pompe avec une alimentation supplémentaire de 12V sans endommager la carte Arduino. Nous avons donc décidé d’utiliser un “motor shield” qui est un dispositif conçu pour contrôler et alimenter des moteurs. Il s'agit d'une carte d'extension que l'on place sur une carte Arduino pour faciliter le contrôle des moteurs. Les motor shields intègrent des circuits de commande de moteurs et simplifient la programmation grâce à des bibliothèques préconfigurées, permettant ainsi de contrôler facilement la vitesse, la direction, et d'autres aspects des moteurs. Tout comme le capteur de température, la liaison entre la pompe et la carte arduino nécessite l’utilisation de fils de liaison et l’assemblage a été réalisé par soudage. Après assemblage du motor shield sur la carte arduino et montage du circuit électrique, nous avons testé la pompe en implémentant un code qui avait pour but d’activer la pompe pendant 2s puis de l’arrêter 5s et cela de manière répétitive. fig.3 Montage de la pompe sur le moteur 1 du shield motor La troisième étape était de réaliser le circuit électrique qui est la combinaison des deux premières étapes. Nous avons ensuite fusionné les deux premiers code en ajoutant une condition sur la température. La carte arduino avait donc pour rôle de faire fonctionner la pompe si et seulement si la température du milieu était supérieure à 20°C. Nous avons ensuite fait un test qui consistait à mesurer la température du milieu (eau chaude) pour voir si la pompe s'actionne bien lorsque la température était bien au-dessus de 20°C. Le code final est donc le suivant: #include #include #include "utility/Adafruit_MS_PWMServoDriver.h" #include #include // Pin de données du capteur DS18B20 const int pinDonneesDS18B20 = 2;  // Remplacez le numéro de la broche par celui que vous utilisez // Seuil de température pour activer la pompe (20°C) const float seuilTemperature = 20.0; // Création d'une instance OneWire pour la communication avec le capteur OneWire oneWire(pinDonneesDS18B20); // Création d'une instance DallasTemperature pour la gestion du capteur DallasTemperature sensors(&oneWire); // Initialisation du shield moteur Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // Création d'une instance du moteur 1 Adafruit_DCMotor *moteurPompe = AFMS.getMotor(1); void setup() { // Initialisation du port série Serial.begin(9600); Serial.println("Adafruit Motorshield v2 - Pompe Activation"); // Initialisation du capteur sensors.begin(); // Initialisation du shield moteur AFMS.begin(); } void loop() { // Demande au capteur de lire la température sensors.requestTemperatures(); // Lecture de la température en degrés Celsius float temperatureCelsius = sensors.getTempCByIndex(0); // Vérification si la lecture est valide if (temperatureCelsius != DEVICE_DISCONNECTED_C) { // Affichage de la température sur le moniteur série Serial.print("Température : "); Serial.print(temperatureCelsius); Serial.println(" degrés Celsius"); // Activation de la pompe si la température est supérieure au seuil if (temperatureCelsius > seuilTemperature) { moteurPompe->setSpeed(255);  // Vitesse maximale moteurPompe->run(FORWARD);   // Sens horaire Serial.println("Pompe activée !"); } else { moteurPompe->setSpeed(0);    // Arrêt du moteur Serial.println("Pompe désactivée"); } } else { Serial.println("Erreur de lecture du capteur"); } // Attente d'une seconde avant la prochaine mesure delay(1000); } Dans l'ordre d'assemblage nous avons monté tout d’abord le support qui nous a été fourni afin de fixer les différents composants. Une fois le support monté, nous avons fixé les pompes, la carte Arduino et le breadboard sur le support en perçant des trous. Nous avons ensuite pris les dimensions pour pouvoir couper les différents tuyaux dans lesquels le fluide caloporteur (eau) va circuler. Comme la double enveloppe ne nous a pas été fournie pour des raisons financières, nous avons initialement placé un bocal (réacteur) dans un bocal plus grand qui fait office de double enveloppe. Ce montage s'est montré concluant lors de nos tests mais après discussion avec les techniciens de la plateforme IC un serpentin métallique dans lequel le fluide caloporteur peut se déplacer à été récupéré et monté dans une tasse métallique simulant alors un réacteur ouvert avec passage de fluide caloporteur dans le milieu réactionnel. Régulation du pH (Projet C) Ahmed Hamza, Malek Sari, Naouel Azaiez, Yakoub Laidani, Malak Ben Hamida La régulation du pH I. Objectif du projet : Le projet consiste à réguler le pH d’une certaine solution (acide ou basique) en utilisant un programme Arduino. L’idée vient du problème du traitement des eaux qui est une étape primordiale avant de le rejeter dans l'environnement. Le traitement de l'eau se manifeste par une réaction entre l'acide chlorhydrique (HCl) et le carbonate de sodium (Na2CO3), pour produire du chlorure de sodium (NaCl), du dioxyde de carbone (CO2), et de l'eau (H2O)=> Elimination des ions carbonate dans l'eau. HCl+Na2CO3 ==> NaCl+CO2+H2O II.Description du projet: HCl est stocké dans le réservoir 1, et Na2CO3 dans le réservoir 2 Lorsque l'interrupteur est allumé, la vanne 1 s'ouvre, permettant le versement de HCl dans le réservoir   3. Puis, la vanne 1 se ferme après 3 secondes, et la vanne 2 s'ouvre, permettant le versement de Na2CO3 de dans le réservoir 3 durant 3 secondes. Ensuite, l’agitation commence. L’agitation dure 5 secondes. Ainsi, le mélange réagit, formant davantage de NaCl, CO2, et H2O. Un capteur de pH est accordé au milieu réactionnel. Le capteur de pH se met en marche et il s’arrête lorsque la valeur pH atteint une valeur autour de 7. Après la réaction, la vanne 3 s'ouvre et le vidange se fait dans le réservoir 4. III. Matériel utilisé : 4 réservoirs en plastique (2 réservoirs pour l’acide et la base, un réacteur, et un tank). 3 électrovannes associées à des relais. Une sonde de pH Carte pH-mètre reliée à l’Arduino 2  solutions étalons Un Arduino avec une plaque d’essai Des files et des tuyaux en plastique Interrupteur Un support en bois Une tige d’agitation associée à un moteur IV. Les appareils utilisés : Perceuse à colonne Scie électrique Des outils manuels ( pistolet à colle, perceuse, viceuse à main,…) Imprimante 3D V. Les étapes de construction : Étape 1 : Construction du supportNous avons utilisé 2 plaques en bois Étape 2 : Mise en place des réservoirsNous avons fixé d’abord les 2 réservoirs des solutions acide et base. Ensuite, nous avons fixéle réacteur et le tank en faisant des trous dans les petits plaques ajoutés. Enfin, nous avons fait des trous dans les réservoirs pour faire passer les tuyaux. Étape 3 : Mise en place des électrovannesNous avons placé les électrovannes à la sortie des deux réservoirs ainsi que le réacteur.Nous avons associé à ces dernières des relais. Étape 4 : Impression de la tigeNous avons fait le design de la tige en utilisant le logiciel Tinkercad, et ensuite nous avonsutilisé l'imprimante 3D. Enfin, nous avons relié la tige au moteur. Étape 5 : Montage finaleNous avons fait le montage total, nous avons relié les électrovannes, la sonde de pH,l’indicateur de niveau avec la plaque d’essai et cette dernière avec Arduino auquel nousavons associé le programme de régulation de pH. VI.Principe de fonctionnement : -L’électrovanne liée au réservoir de l’acide (HCl)s'ouvre quand l’interrupteur est ON, et doncl’acide se verse le réacteur (réservoir 3). -Aprés 3 secondes, l’électrovanne liée au réservoir de Na2CO3 s'ouvre, et doncla base se verse dans réacteur (réservoir 3).-La valeur de pH est mesurée par la sonde de pH. -Après 5 secondes de l’agitation et la valeur de pH s’affiche au fur et à mesure dans l’afficheur.-Dès que la valeur de pH atteint 7 , l’électrovanne liée au réacteur s’ouvre pour la vidange dans le tank. VII. Illustrations du projet Organisation des différents composantes du projet et commande du matériel (1séance) Préparation du support (3 séance)       Ecriture du code (2 séances) Cablage des composants avec la carte arduino (2 séances) Projet après la finalisation Test du code et rectification (Voir les 3 vidéos mis dans ce drive) https://drive.google.com/drive/folders/1Z9QvfrS876cZnwdwtNFdvtTpCLOnY27U VIII. Le code Arduino Code des vannes, du moteur et du pH: const int RELAY_PIN_VANNE1 = A5;  // Broche de l'Arduino connectée à la vanne 1 const int RELAY_PIN_VANNE2 = A4;  // Broche de l'Arduino connectée à la vanne 2 const int RELAY_PIN_MOTEUR = 13;  // Broche de l'Arduino connectée au relais du moteur #define PH_PIN A0  // Broche analogique à laquelle le capteur pH est connecté void setup() { pinMode(RELAY_PIN_VANNE1, OUTPUT); pinMode(RELAY_PIN_VANNE2, OUTPUT); pinMode(RELAY_PIN_MOTEUR, OUTPUT); Serial.begin(9600); } void loop() { // Contrôler les vannes en fonction du pH float pHValue = readPH();  if (isnan(pHValue)) { Serial.println("Erreur de lecture du capteur pH. Vérifiez la connexion."); } else { Serial.print("Valeur du pH : "); Serial.println(pHValue, 2);  // Affiche la valeur pH avec deux décimales  // Contrôler la vanne 1 si le pH est inférieur à 7 if (pHValue < 7) { digitalWrite(RELAY_PIN_VANNE1, HIGH); delay(5000);  // Ouvrir la vanne 1 pendant 5 secondes digitalWrite(RELAY_PIN_VANNE1, LOW); } delay(1000);  // Attendez 1 seconde entre les opérations des vannes // Contrôler la vanne 2 si le pH est supérieur à 7 if (pHValue > 7) { digitalWrite(RELAY_PIN_VANNE2, HIGH); delay(5000);  // Ouvrir la vanne 2 pendant 5 secondes digitalWrite(RELAY_PIN_VANNE2, LOW); } delay(1000);  // Attendez 1 seconde entre les opérations des vannes // Activer le moteur pendant 1 seconde digitalWrite(RELAY_PIN_MOTEUR, HIGH); delay(1000); digitalWrite(RELAY_PIN_MOTEUR, LOW); delay(1000);  // Attendez 1 seconde entre les opérations du moteur } delay(1000);  // Attendez une seconde entre les lectures pour éviter des lectures trop fréquentes } float readPH() { int rawValue = analogRead(PH_PIN); float voltage = (rawValue / 1024.0) * 5.0;  // Convertit la valeur analogique en tension float pHValue = 7 - (voltage - 2.5);  // Formule de conversion approximative, à calibrer selon le capteur   return pHValue; } Détail sur le code Arduino-La fonction analogRead() accepte un paramètre obligatoire : le numéro de brocheanalogique à lire.Dans notre cas d'une carte Arduino UNO, ce paramètre peut prendre la valeur A0.-La fonction analogRead() retourne un nombre entier (int) compris entre 0 et 1023. Ce nombre correspond à la tension mesurée, 0 = 0 volt, 1023 = tension alimentation = 5 volts (ou3V suivant les cartes Arduino).La mesure prend environ 100μs, il n'est donc pas possible de faire plus de 10 000 mesures parseconde.pH_sensorA = analogRead(sensorPin);pH_sensor=(float)pH_sensorA*5.0/1024; //convert the analog into millivoltpH_sensor=3.5*pH_sensor;//pH_sensor = pH_sensorA * (5.0 / 1024.0); // get the pH valueSerial.println(pH_sensor); // print the pH value to the serial monitor Détails et explications1. La sonde de pH : Précautions :Il faut utiliser une alimentation à découpage externe et une tension aussi proche que possible du + 5,00 V. Plus la tension est précise, plus la précision est élevée !Avant que l'électrode ne soit utilisée en continu à chaque fois, il faut la calibrer par la solution standard, afin d'obtenir des résultats plus précis. La meilleure température ambiante est d'environ 25 °C, et la valeur du pH est connue et fiable, proche de la valeur mesurée . Si nous mesurons l'échantillon acide, la valeur du pH de la solution standard doit être de 4,00. Si nous mesurons l'échantillon alcalin, la valeur du pH de la solution standard doit être de 9,18.Étalonnage de sous-section, juste pour obtenir une meilleure précision. Avant que l'électrode de pH ne mesure différentes solutions, nous devons utiliser de l'eau pour la laver (L'eau déminéralisée). Schéma du montage : Plaque d’essai-ArduinoTinkercad est un programme de modélisation 3D en ligne qui s'exécute dans un navigateur web, connu pour sa simplicité et sa facilité d’utilisation. Voici le schéma détaillé de notre montage. Système de détection de méthane CH4 Projet de régulation MUCI803 : Optimisation  Et Contrôle Des Procédésgroupe J Les membres du groupe : Addou Mohammed Abderrahim (mohammed_abderrahim.addou@sorbonne-universite.fr) Aggouni Nihad (nihad.aggouni@sorbonne-universite.fr) Djamaa Abdelmounaim (abdelmounaim.djamaa@sorbonne-universite.fr) Djaoui Salaheddine (salaheddine.djaoui@sorbonne-universite.fr) Seba Nesrine (nesrine.seba@sorbonne-universite.fr) Cursus:  Master 2 Chimie Parcours Ingénierie Chimique Date de début : septembre 2023 Date de fin : février 2024 Contexte Durant nos manipulations dans les laboratoires au sein de notre université, nous avons observé l’absence d’un dispositif qui mesure la concentration maximale des gaz extrêmement inflammables notamment le méthane (CH4); un gaz inflammable et potentiellement dangereux pouvant être présent dans divers environnements. Ainsi, la détection précoce des concentrations élevées de CH4 par un système adéquat est cruciale pour la sécurité et la prévention des risques liés aux gaz. Notre projet vise à répondre à cette problématique et consiste à mettre en place un système de détection de méthane en utilisant le microcontrôleur Arduino et en combinant le capteur du gaz spécifique (MQ4) avec un dispositif d'affichage (LCD) et un ventilateur pour dégager l’excès de gaz . Objectif L'approche principale consiste à utiliser un capteur du gaz spécifique au méthane (MQ4), capable de fournir des données précises sur les concentrations de CH4 dans l'environnement. Le capteur sera connecté à une carte Arduino, agissant comme le cerveau du système, capable de traiter les informations en temps réel. La concentration en temps réel (ppm) sera ensuite affichée sur un écran LCD avec l'indication de seuil (Normal; Danger; Très danger) selon sa valeur qui agira, quant à elle, sur la vitesse de rotation du ventilateur comme suit : plus le seuil est élevé, la vitesse de rotation du ventilateur augmente. Notre système sera conçu pour être modulaire et extensible, permettant une intégration facile d'autres capteurs de gaz (MQ2; MQ135) ou des systèmes d'alerte en cas de détection de niveaux de méthane dangereux (Alerte SMS). Matériels utilisés Pour le support de notre projet, nous avons utilisé : 1 planche de CP peuplier 3mm (dimensions 300*600mm) 2 plaques de plexiglas (dimensions 300*600mm) colle à bois 4 colliers de serrage blanc Cutter Des vis Des clous Tenaille Pour le volet Arduino : 1 Carte Arduino uno 3 Résistances 220 Ω 1 Écran LCD I2C 1 MOS module IRF520 1 Ventilateur DC 12V 1 Capteur MQ4 1 LED Rouge 1 LED Vert 1 Alarme piézo-électrique Prise DC Power Jack Câble d’alimentation externe 12V Bâton de colle Machines utilisées Trotec Speedy 100 Visseuse Perceuse Etapes de conception Étape 1 Après plusieurs échanges entre les membres du groupe, nous avons sélectionné l'idée de projet puis énuméré les composants nécessaires pour le concrétiser. Ensuite, à l'aide du logiciel Fritzing, nous avons créé un schéma détaillé du montage pour avoir une vision claire de la disposition des éléments. Étape 2 En deuxième étape, nous avons élaboré le code et nous l'avons testé en l'associant au schéma dans un environnement simulé. Cela nous a permis de voir comment les composants interagissent virtuellement avant de passer à la phase de réalisation physique. Étape 3 En dernière étape, nous avons construit l'enceinte et nous avons installé tous les composants en suivant le modèle de câblage préalablement élaboré. En fin, nous avons effectué quelques essais en utilisant un briquet. Journal du bord 25/11/2023 Première réunion d'équipe, durant laquelle nous avons exploré différentes pistes de projet et établi une liste d'options. Parmi ces choix, le projet de "système de détection de méthane CH4" s'est démarqué, reflétant notre orientation vers une solution novatrice en matière de sécurité industrielle. 29/11/2023 Une deuxième réunion d'équipe a permis à notre équipe de compiler la liste complète des composants et de rédiger un document descriptif détaillé du projet. Cette démarche visait à fournir à la tutrice une vue approfondie du projet en vue de valider nos plans et de progresser vers sa mise en œuvre. 30/11/2023 L'obtention de la validation de la tutrice sur notre projet. 10/12/2023 Notre première séance au FabLab où  nous avons pris le temps d'explorer toutes les machines disponibles et de comprendre leur principe de fonctionnement. Cette immersion nous a permis de nous familiariser avec les équipements du FabLab, jetant ainsi les bases pour les étapes à venir de notre projet. C'était un moment instructif où nous avons pu visualiser concrètement les possibilités offertes par ces machines et envisager comment les intégrer dans notre travail. 15/12/2023 La récupération de l'ensemble des dispositifs nécessaires et leur dépôt au FabLab. 19/12/2023 Une troisième réunion d'équipe a été faite à fin d'effectuer des recherches ensemble. Chacun a partagé ses découvertes, et des décisions ont été prises collectivement sur les différentes parties du projet. A la fin, un plan détaillé pour les prochaines étapes a été établi. 22/12 2023 Lors de notre troisième séance au FabLab, nous avons assemblé les supports que nous avions récupérés plus tôt dans la journée. Pendant cette session, nous avons également travaillé sur plusieurs schémas de câblage, en testant différentes façons de connecter les parties de notre projet. On a configuré le schéma optimal sur Fritzing.Cette séance a été vraiment importante pour améliorer notre compréhension pratique des composants et a marqué une grande avancée dans la réalisation de notre projet au sein du FabLab. Les vacances de Noël 2023 Notre équipe s'est investie dans le travail sur le code de notre projet. Après plusieurs recherches approfondies, nous avons réussi à construire un code complet pour notre système. le code: #include #include rgb_lcd lcd; const int colorR = 255; const int colorG = 0; const int colorB = 0; int buzzer = 7; int LEDR = 4; int LEDV = 13; int MQ4 = A0; int Fan = 3; int gasvalue; void setup() { pinMode(buzzer, OUTPUT); pinMode(LEDR, OUTPUT); pinMode(LEDV, OUTPUT); pinMode(Fan, OUTPUT); pinMode(MQ4, INPUT); lcd.begin(16, 2); lcd.setRGB(colorR, colorG, colorB); lcd.setCursor(0,0); lcd.print("Sorbonne U"); delay(1000); lcd.setCursor(0,1); lcd.print("CI 803"); digitalWrite(buzzer, HIGH); digitalWrite(LEDR, HIGH); digitalWrite(LEDV, HIGH); analogWrite(Fan, 255); delay(5000); lcd.clear(); lcd.setCursor(0,0); lcd.print("System ON"); delay(5000); digitalWrite(buzzer, LOW); digitalWrite(LEDR, LOW); digitalWrite(LEDV, LOW); lcd.setCursor(0,1); lcd.print("Calibration"); digitalWrite(LEDV, HIGH); delay(2000); digitalWrite(LEDV, LOW); delay(1000); digitalWrite(LEDV, HIGH); delay(2000); digitalWrite(LEDV, LOW); delay(1000); digitalWrite(LEDV, HIGH); delay(2000); digitalWrite(LEDV, LOW); lcd.clear(); delay(100); lcd.setCursor(0,0); lcd.print("Calibration"); lcd.setCursor(0,1); lcd.print("Complete"); delay(2000); } void loop() { int gasvalue = analogRead(MQ4); lcd.setCursor(0,0); lcd.print("GAS Level:"); lcd.setCursor(10,0); lcd.print(gasvalue); lcd.setCursor(13,0); lcd.print("ppm"); if (gasvalue <= 250) { analogWrite(Fan, 51) ; lcd.setCursor(0,1); lcd.print("NORMAL"); digitalWrite(buzzer,LOW); digitalWrite(LEDR,LOW); digitalWrite(LEDV,LOW); } else if (gasvalue <= 300) { lcd.setCursor(0,1); lcd.print("DANGER"); digitalWrite(buzzer, HIGH); digitalWrite(LEDR, HIGH); digitalWrite(LEDV, LOW); lcd.setCursor(0,1); analogWrite(Fan, 128); } else if (gasvalue > 300) { lcd.setCursor(0,1); lcd.print("VERY DANGER"); digitalWrite(buzzer, HIGH); digitalWrite(LEDR, HIGH); digitalWrite(LEDV, LOW); lcd.setCursor(0,1); analogWrite(Fan, 255); } delay(2000); lcd.clear(); } Les vitesses du ventilateur et leurs valeurs de PWM sont présentées dans le tableau suivant Concentration du gaz (ppm) Valeur PWM Vitesse du ventilateur (%) Seuil du danger inférieure à 250 51 20 Normal inférieure à 250 128 50 Danger supérieure à 300 255 100 Very Danger 22/01/ 2024 Lors de notre quatrième séance au FabLab, nous avons mis notre code à l'épreuve sur un schéma via Tinkercad. En le testant virtuellement, nous avons identifié des ajustements nécessaires et effectué des modifications pour optimiser son fonctionnement. Après plusieurs itérations, nous avons réussi à le faire fonctionner parfaitement dans l'environnement simulé. 26/01/ 2024 Lors de notre cinquième séance au FabLab, nous avons franchi une étape majeure en réalisant le câblage entre les différents composants de notre projet. Cette session a été dédiée à l'assemblage physique, où nous avons connecté chaque élément selon le schéma que nous avions planifié. Une fois le câblage terminé, nous avons testé le code que nous avions développé précédemment. Heureusement, le code a bien fonctionné lors de ces essais, marquant un moment de succès dans notre progression. 30/01/2024 Lors de notre sixième séance au FabLab, nous avons atteint la phase finale de notre démarche ,le montage. Le processus a débuté par la découpe de deux plaques de plexiglas, lesquels ont été utilisés pour fermer les deux côtés de l'enceinte que nous avons conçue. Ensuite, nous avons procédé à la fixation du ventilateur en perçant des trous dans la contre-plaque, utilisant des câbles pour assurer une fixation solide. Un trou a été créé en dessous pour installer l'alimentation, assurant ainsi une accessibilité pratique. L'écran a été positionné en haut de l'enceinte, fixé solidement par des vis. Pour le capteur, nous l'avons placé à l'entrée de l'enceinte sur une breadboard collée à la contre-plaque. À côté, deux LED, une verte et une rouge, avec l'alarme ont été fixées sur une autre breadboard. Et au cœur de tous les composants, nous avons installé l'Arduino, le fixant avec des vis pour assurer sa connexion à tous les autres éléments. 01/02/2024 Lors de notre dernière séance au FabLab, nous avons débuté en créant une plaque imprimée contenant les noms des membres de l'équipe, le titre du projet et le code QR menant à notre wiki. Cette plaque a été d'abord conçue sur un logiciel (Inkscape) avant d'être imprimée à l'aide d'une graveuse. Ensuite, nous avons fixé cette plaque sur le même côté que le ventilateur , puis on a connecté tous les câbles reliant les différents composants entre eux, et nous avons également testé le fonctionnement du système en utilisant un briquet contenant du CH4. et voici notre présentation finale de projet : Nous avons finis  la séance avec une présentation détaillée de notre projet à notre professeur. Nous avons partagé tous les aspects de notre travail, y compris les détails du montage, les essais effectués, et les résultats obtenus. Cette étape marquante a été l'occasion de mettre en lumière notre progression, les défis surmontés, et les réussites de notre projet, clôturant ainsi notre expérience enrichissante au FabLab. Contrôle de Réacteur de Synthèse de l'Acétate d'Éthyle Master 2 Chimie Parcours Ingénierie Chimique (IC) Projet MU5CI803 - Optimisation et contrôle des procédés Membres du Groupe : ALIOUT Hayem / BENAMOKRANE Faiza  Soulef / BOUZIDI Manel / DJEBBAR Meriem / FERHI Abderrahmane Introduction : L'acétate d'éthyle, aussi appelé éthanoate d’éthyle est un liquide utilisé comme solvant pour les vernis à ongles et certaines colles, en raison de sa faible nocivité et de sa volatilité importante, il est aussi utilisé dans l'industrie agroalimentaire dans certains arômes fruités. La synthèse de l'acétate d'éthyle est une réaction d'estérification relativement simple mais hautement efficace. Elle implique la réaction entre l'éthanol (alcool) et l'acide éthanoïque (acide acétique), conduisant à la formation de l'acétate d'éthyle et d'eau comme sous-produit. Objectif du projet : L'objectif de ce projet est de concevoir un réacteur permettant la synthèse d'acétate d'éthyle, tout en garantissant un contrôle précis de deux paramètres essentiels : la température de la réaction et le débit des réactifs. Réactifs utilisés : Éthanol (alcool) Acide éthanoïque (acide acétique) Matériel Utilisé : Capteur de température Détecteur de niveau (Ultrasonic Rnager) 2 électrovannes Un breadboard Une carte Arduino Uno 2 modules relais Tapis chauffant- Peltier Fils de connexion Tuyaux Alimentation ( 5 V pour l'arduino et 12 V pour les actionneurs ) Support en bois Appareils utilisés : Découpeuse Laser Outils manuels ( Pistolets à colle, pied à coulise..) Outils de soudure. Etapes de réalisation : Avant de procéder à la construction, nous avons élaboré un schéma préliminaire de notre procédé avec le système de controle associé: Figure 1 : Schéma du Système de Contrôle Notre système de controle comporte: Capteurs : Capteur de température (DS18B20) inclus dans le réacteur. Capteur de niveau (ultrasonic distance sensor v2.0 ) positionné dans le réacteur. Actionneurs : Système de chauffage ( Tapis Chauffant ) connecté au microcontroleur pour controler la température. Deux électrovannes connectées au microcontroleur pour ajuster le débit des réactifs. Microcontroleur : Arduino Uno R3 pour le traitement des données. Les étapes de construction sont les suivantes:        Etape 1 : Construction du support Figure 2 : Etape de construction du support Nous avons utilisé par la suite une plaque en bois de dimension : 30*30 cm. Etape 2 : Mise en place des deux réservoirs ( l'un pour l'acide et l'autre pour l'alcool ) et du réacteur Les deux réservoirs utilisés en plastique, étaient troués pour faire passer les tuyaux d'alimentation du réacteur, que nous avons fixé ultérieurement. Etape 3 : Cablage et Arduino Connecter le capteur de température au port numériques de l'Arduino. Connecter le tapis chauffant au module relais connecté à une sortie numérique de l'Arduino. Connecter les deux électrovannes au module relais connecté aux sorties numériques distinctes de l'Arduino pour contrôler leur fonctionnement. Alimenter l'Arduino avec une source d'alimentation stable. s'assurer que la mise à la terre (GND) de l'Arduino est connectée à la terre du système. Le schéma de câblage présenté dans la figure suivante : Figure 3 : Schéma de câblage (TinkerCAD)                                             Figure 4 : Etapes de cablage A la fin, nous avons aboutti au montage suivant : Figure 5 : Montage du procédé Etape 5 : Expériences en laboratoire Afin de mieux visualiser la réaction, ainsi que de ne pas détruire notre montage en réalisant directement les essais avec ce dernier, nous avons effectué des essais au laboratoire, où  la réaction d'estérification est facilement réalisable: Dans un Erlenmeyer, de 250 mL introduire un mélange équimolaire : 50 mL d'acide acétique et 50 mL d'éthanol. Porter le mélange à 80 °C dans un dispositif de chauffage à reflux pendant 45 minutes. Laisser refroidir le mélange réactionnel à l'air ambiant puis dans un bain d'eau froide. Verser le contenu du ballon dans une ampoule à décanter.Agiter prudemment quelques instants en dégazant régulièrement, puis éliminer la phase aqueuse. Recueillir la phase organique dans un bécher. Sécher cette phase puis filtrer. Recueillir le filtrat dans un erlenmeyer propre et sec. Figure 6 : Montage expérimental de synthèse d'acétate d'éthyle Etape 6 : Codes Arduino #include #include #include #include // Broches Arduino pour les composants #define electroVan1 0 #define electroVan2 1 #define chauffage 2 #define temperatureCapteur 3 #define niveauCapteurDigital 4 // Initialiser le capteur de température DS18B20 OneWire oneWire(temperatureCapteur); DallasTemperature sensors(&oneWire); // Initialiser le capteur ultrasonique Ultrasonic ultrasonic(4); void setup() { // Initialiser les broches pinMode(electroVan1, OUTPUT); pinMode(electroVan2, OUTPUT); pinMode(chauffage, OUTPUT); pinMode(niveauCapteurDigital, INPUT); Serial.begin(9600); sensors.begin(); } void loop() { // Lire la valeur du capteur de température DS18B20 sensors.requestTemperatures(); // Lire la valeur du capteur de niveau ultrasonique long RangeInMillimeters = ultrasonic.MeasureInMillimeters(); // Afficher la température et le niveau Serial.print("Température: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print("°C, Niveau: "); Serial.print(RangeInMillimeters); Serial.println(" mm"); // Effectuer des actions en fonction des valeurs des capteurs if (RangeInMillimeters > 40) { // Niveau du liquide n'atteint pas la cible, Activer les électrovannes pour verser les réactifs digitalWrite(electroVan1, HIGH); digitalWrite(electroVan2, HIGH); digitalWrite(chauffage, LOW); // Niveau du liquide atteint la cible, arrêter les électrovannes et activer le chauffage } else { digitalWrite(electroVan1, LOW); digitalWrite(electroVan2, LOW); digitalWrite(chauffage, HIGH); } if (sensors.getTempCByIndex(0) > 80) { // Température atteinte la cible, arrêter le chauffage digitalWrite(chauffage, LOW); Serial.println("Température 80°C ATTEINTE"); } delay(1000); } Présentation finale de projet : Figure 7 : Montage finale de systeme de contrôle Video de présentation : (cliquez sur le lien suivant) Video de présentation de systeme de contrôle Plaque gravée par découpe laser, elle présente les informations nécessaires de notre projet (le titre du projet, les noms des membres de l'équipe, et un code QR redirigeant vers notre page wiki...). Régulation de température grâce à un microcontrôleur Arduino et à un pont en H L298N Projet de régulation de température grâce à un microcontrôleur Arduino et un pont en H L298N réalisé dans le cadre de l'UE 5Ci803, année scolaire 2023-2024. Cette régulation peut être transposée à l'échelle industrielle, pour réguler la température d'un milieu réactionnel afin de contrôler le risque d'emballement thermique d'une réaction exothermique par exemple. Réalisateurs : Florent GALLERET Khaled SERHANE Christelle BERAUD Audrey Tessa TCHONLA TCHIBONSOU Matériel : Pompe Pont en H L298N Sonde de température DS18B20 Résistance 4.7 kOhm Microcontrôleur Arduino UNO Breadboard Alimentation 12V Fils électriques Tuyaux d'eau Bécher Plaque chauffante Eau fraîche Gaine thermique (cuivre) ________________________________________________________________________________________________________________________________________ Description du système Le système a refroidir est un système matérialisé par de l'eau portée à différentes températures placée dans un bécher dans lequel est placé une gaine thermique en cuivre et chauffé par une plaque chauffante. La pompe (ici symbolisée par Moteur) permet de pomper de l'eau fraîche d'un autre bécher, passant par les tuyaux d'eau et la gaine thermique. Le pont en H L298N permet de faire tourner le moteur à différents régimes lorsqu'on est plus ou moins éloigné de la température de consigne. Ici, nous avons défini plusieurs valeurs de température pour lesquelles différentes vitesses de pompage sont définies. En effet, plus on s'approche de la température de régulation, plus le moteur va tourner à régime réduit, pour finalement se couper (voir étape 3). Cet élément alimente l'ensemble du système en 12V grâce à l'alimentation. La sonde de température permet de mesurer la température à l'instant T dans le système. Le microcontrôleur Arduino permet de faire communiquer entre eux les éléments du montage et de relier l'ensemble des composants du système ensemble, par l'intermédiaire de la breadboard. ________________________________________________________________________________________________________________________________________ Connexion des éléments du système au microprocesseur Arduino Pour mettre en œuvre le système, nous connectons différents éléments (pont en H, microcontrôleur Arduino, pompe, sonde de température, résistance) à la breadboard afin qu'ils puissent communiquer entre eux. Ci-dessous un schéma du montage, correspondant aux éléments connectés aux broches dans le code (voir section suivante) ________________________________________________________________________________________________________________________________________ Développement du code pour microcontrôleur Arduino C'est le coeur de la régulation. Ce code permet de définir précisément la manière dont le système sera régulé. Ici, une température de consigne (T_regule) est définie à 28°C ainsi que différentes autres températures (delta1, delta2, delta3, delta 4 et delta5). Elles sont définies plus tard dans la boucle de configuration (void_setup) respectivement pour T_regule-3, T_regule-2, T_regule-1, T_regule+1_ Tregule+2 afin que le moteur tourne à différents régimes (régime maximal pour une température à plus de 2 degrés de la température de consigne, puis une diminution progressive du régime à mesure que l'on se rapproche de la température de consigne) pour finalement se couper lorsqu'il atteint T_regule-2. L'utilisateur voit directement sur l'interface Arduino IDE la température à laquelle est le système à l'instant T et la vitesse du moteur. /* Dépendance pour le bus 1-Wire */ #include float T_regule = 28.0; float delta1; float delta2; float delta3; float delta4; float delta5; float Temperature; #define borneENA 9 // On associe la borne "ENA" du L298N à la pin D9 de l'arduino #define borneIN1 8 // On associe la borne "IN1" du L298N à la pin D8 de l'arduino #define borneIN2 7 // On associe la borne "IN2" du L298N à la pin D7 de l'arduino #define vitesseMinimale 60 // Rapport cylique minimal du signal PWM, pour faire tourner le moteur au minimum de sa vitesse (en pratique, on évitera de trop approcher la valeur 0) #define vitesseMaximale 255 // Rapport cylique maximal du signal PWM, pour faire tourner le moteur au maximum de sa vitesse int vitesse; // Spécifie la vitesse de rotation du moteur, entre son minimum (0) et son maximum (255) <= signal PWM /* Broche du bus 1-Wire */ const byte BROCHE_ONEWIRE = 10; /* Code de retour de la fonction getTemperature() */ enum DS18B20_RCODES { READ_OK, // Lecture ok NO_SENSOR_FOUND, // Pas de capteur INVALID_ADDRESS, // Adresse reçue invalide INVALID_SENSOR // Capteur invalide (pas un DS18B20) }; /* Création de l'objet OneWire pour manipuler le bus 1-Wire */ OneWire ds(BROCHE_ONEWIRE); /** * Fonction de lecture de la température via un capteur DS18B20. */ byte getTemperature(float *temperature, byte reset_search) { byte data[9], addr[8]; // data[] : Données lues depuis le scratchpad // addr[] : Adresse du module 1-Wire détecté /* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */ if (reset_search) { ds.reset_search(); } /* Recherche le prochain capteur 1-Wire disponible */ if (!ds.search(addr)) { // Pas de capteur return NO_SENSOR_FOUND; } crc8(addr, 7) != addr[7]) { // Adresse invalide return INVALID_ADDRESS; } /* Vérifie qu'il s'agit bien d'un DS18B20 */ if (addr[0] != 0x28) { // Mauvais type de capteur return INVALID_SENSOR; } /* Reset le bus 1-Wire et sélectionne le capteur */ ds.reset(); ds.select(addr); /* Lance une prise de mesure de température et attend la fin de la mesure */ ds.write(0x44, 1); delay(800); /* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */ ds.reset(); ds.select(addr); ds.write(0xBE); /* Lecture du scratchpad */ for (byte i = 0; i < 9; i++) { data[i] = ds.read(); } /* Calcul de la température en degré Celsius */ *temperature = (int16_t) ((data[1] << 8) /* Vérifie que l'adresse a été correctement reçue */EPU-M9-SIM Description de l'UE Objectifs : Elaborer en équipe un concept d’innovation avec son modèle d’affaires sous contrainte de respect des objectifs de DD pour un problème utilisateur à formaliser Pédagogie : travail en groupe, méthodologie design thinking 18  heures de TD dont 2 séances au Fablab  Ruche - groupe ? : noms ? Santé connectée - groupe 3 : AMANGAR - POGGIA - PETITOT - CHEN Yasmine  AMANGAR -  Gabriel POGGIA - Victor PETITOT - Jacky CHENSanté connectée - groupe 1 : Kouakou, Wang, Gourdet, Semenzato Santé connectée - groupe 2 : Louis, Timothé, Denn, Adam, Ruche - groupe Paul Amaury Mélodie Matthieu Cyprien Ruche - Groupe 1 - Bertin, Faille, Ghilescu, Pailhous Elèves de Polytech Sorbonne en dernière année en spécialité Matériaux, nous avons eu comme projet dans l'UE "EPU-M9-SIM" management de l'innovation. Nous avions comme objectif de trouver une solution afin de garder une température convenable dans les ruches l'hiver et d'éviter la condensation lié à l'humidité. Durant cette séance, nous avons réalisé un prototype de notre projet : Ensuite nous avons sélectionné notre matériaux pour représenter notre protection en Gore-tex. Pot connecté On a fait l'impression 3D d'un pot avec 3 compartiments dans le but de réaliser un pot pour une plante qui va être arrosée automatiquement en fonction de l'humidité de la terre et du type de la plante : compartiment 1 : Electronique+Pompe compartiment 2 : Réservoir d'eau compartiment 3 : Plante UE MU5RBI10 - M2 SPI - Projets de Fin d'Etudes Détection avec Badge connecté MU4PY210 - Projets M1 Ondes stationnaires ultrason et lévitation de polystyrène Un modèle de documentation minimal pour tous les types de projets. Toutes les catégories ci-dessous doivent être renseignées, même de façon succincte.IMPORTANT : Merci de sélectionner le / les tags adéquats dans le menu de droite, et de ne pas créer de nouveau tag.Les fichiers sources doivent idéalement être joints à cette page grâce à l'icône trombone du menu de droite.Des hésitations sur comment bien documenter et utiliser l'interface ? Consultez le tutoriel "Comment documenter" Informations Ilayda SIMSEK (mail) M1 Physique fondamentale et applications (PFA) ; Adama DIOUF (mail) M1 PFA ; Nathan BARBE (Nathan.Barbe@sorbonne-universite.fr) M1 PFA ; Auguste MAILLOT (auguste.maillot@etu.sorbonne-universite.fr) M1 PFA CMI 24 janvier  - mars 2024 En présentiel les lundis, mardi et jeudi après-midi HORAIRES D'OUVERTURE FABLAB :  Lundi/Mardi/Jeudi/Vendredi 14h-18h30 Contexte Les ondes stationnaires sont présentes dans de nombreux aspects de la vie, influençant la musique, la couleur des choses. En effet les ondes stationnaires sont utilisées dans de nombreux domaines tels que : La médecine (imagerie médicale) Acoustique des salles (contrôle de réflexion et résonance) Manipulation des particules (manipulation des cellules biologiques) Procédé Lippman: première photographie en couleur (utilise les ondes stationnaires pour mesurer une épaisseur de couches mince, elle repose sur les interférences des ondes ultrasonores pour enregistrer les différentes couleurs, les filtres interférentiel sont utilisés pour sélectionner ou filtrer les ondes ultrasonores) C’est ce dernier exemple qui nous amène à la réalisation de ce projet, visant à exploiter une onde stationnaire ultrasonore, typiquement de 20 kHz avec des longueurs d’onde de 2 cm, pour créer un montage expérimental permettant de la produire et de la visualiser. On pourra, enfin, essayer de faire léviter des objets à travers les ventres et les nœuds de l’onde stationnaire obtenue, comme réalisé dans la vidéo Objectifs Ce projet vise à exploiter une onde stationnaire ultrasonore, typiquement de 20 kHz avec des longueurs d’onde de 2 cm, pour créer un montage expérimental permettant de la produire et de la visualiser. L’onde stationnaire sera créée entre un générateur et une plaque de verre, ajustable, avec sa visualisation réalisée par la diffusion de la lumière, nommée imagerie Schlieren. La réfraction due à l'inhomogénéité de l'air est rendue visible par notre configuration optique Schlieren à miroir unique. La réfraction peut être causée par des changements dans la densité, la température ou la pression de l'air immédiatement devant le miroir concave. Avec une caméra vidéo et un moniteur, nous pouvons voir des courants de convection chauds s'élevant d'une flamme de bougie ou, alternativement, de l'air froid descendant d'un verre d'eau glacée. Le jet d’air chaud d’un sèche-cheveux ordinaire est rendu spectaculairement visible. Le flux de gaz autres que l’air peut également être visualisé avec cette technique. Par exemple, l’hexafluorure de soufre gazeux est six fois plus dense que l’air et peut donc être visiblement versé d’une bouteille dans un verre comme s’il s’agissait d’un liquide. L'image suivante montre l'application de cette technique au montage que l'on souhaite réaliser, pour visualiser dans le fond les ventres et noeuds de l'onde stationnaire engendrée, et nous permettra de placer correctement les billes de polystyrène pour qu'elles restent en lévitation. Source : Acoustic Standing Waves and the Levitation of Small Objects, Harvard Natural Sciences Lecture Demonstrations. Théorie Blablabla c'est la théorie donc ça marche Matériel Nom de l'élément Description, dimensions, caractéristiques Lien Prix unitaire Quantité nécessaire Remarques source d'onde ultra sonore 40kHz 25kHz https://www.gotronic.fr/art-emetteur-a-ultrasons-tr4010t-18335.htm https://www.digikey.fr/fr/products/detail/cui-devices/CUSA-T601-150-2400-TH/16579211 3 euros 1 Le diamètre de la membrane a-t-il une grande incidence sur le diamètre du faisceau d'onde sonore émise ? sphere de polystyrene 4mm de diametre poids=1.5 https://www.billes-de-polystyrene.com/epsfr/billes-de-polystyrene-4-5-mm-170-litres-poufs-neige-isolation.html 35 En vrai pas besoin d'acheter un sac de 5L de billes de polystyrène, autant en choper au falab ou dans un labo Pince à noix (pour plaque de verre) Modèle 3 doigts, serrage 0-50 mm https://www.servilab.fr/catalogue/produits/pince-standard-modele-3-doigts A partir de 12.91 euros 1 Introuvable au fablab Miroir concave Grande distance focale https://www.edmundoptics.fr/p/127mm-dia-x-2032mm-efl-protected-aluminum-50-90-deg-off-axis-mirror/38569/ 185 euros 1 Très cher, et je me demande si c'est un miroir incliné comme sur la photo du produit. A voir si on peut en obtenir auprès d'Abhay ou du Fablabpl plaque de verre 15x15cm 1 Plexiglass, trouvable au fablab ou dans un labo BNC de sécurité Mâle/Mâle Longueur : 5 m https://www.boulanger.com/c/connectique/aggregationtype_facette_type_connectique_____concatener_valeur_liste~and/facette_type_connectique_____concatener_valeur_liste~ce2ble20bnc 24.95 2 Potence barre vertical de 50cm pour tenir le pince https://www.expondo.fr/steinberg-systems-support-de-laboratoire-pince-et-noix-d-assemblage-comprises-socle-en-verre-10030614?utm_source=google_shopping&utm_medium=organic&gad_source=1&gclid=CjwKCAiAlJKuBhAdEiwAnZb7lexPfRwtIk-Mkrj05NT0xFz-hZmya0oxVoG7_Uu6N7CWmnxsviMUzBoCyd0QAvD_BwE 30.99 Pas au fablab pincette Pince 3 doigts avec noix orientable 16/25 mm 1 une pincette +miroir+objectif dans notre box au Fablabs 1 carte d'acquisition avec GBF incorporé + ordinateur 1 A trouver Lentille Source lumineuse https://www.amazon.fr/Vamvo-projecteur-Compatible-Smartphone-Ordinateur/dp/B08CDBC5LK/ref=asc_df_B08CDBC5LK/?tag=googshopfr-21&linkCode=df0&hvadid=454677596790&hvpos=&hvnetw=g&hvrand=8234502793232416219&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1006094&hvtargid=pla-1018797426397&psc=1&mcid=fc122c183463399fafcc5b14fcc59ff0 55.49 mini vidéo projecteur Ecran Casque de protection auditive / https://www.manomano.fr/p/casque-manufrance-anti-bruit-reglable-snr-29db-taille-unique-9574387?product_id=9895213 16.50 euros 4 Machines & outils utilisées Découpeuse à jet d'eau ? Pour découper une lame de verre Découpeuse laser pour support un bois de l'expérience. Sources bibliographiques et références [1] https://sciencedemonstrations.fas.harvard.edu/presentations/schlieren-optics Mise en place du montage (Fichiers, sources documentaires, photos, code, explications, paramètres d'usinage, photos, captures d'écran...) Étape 1 Pour faire le montage experimental: on dispose un plaque de verre a une distance d d'une source d'onde ultra sonore.Le plaque de verre vas reflechir le son provenant de la source vers le bas; les ondes qui descendent interfernt de maniere constructive (les deux ondes sont en phase), avec les ondes qui montent vers le plaque de verre ce qui nous donnent des regions de hautes et de basse pression fixent. Étape 2 ---- Étape 3 ---- Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations 28/01/2024 Première réunion d'organisation à distance. Ordre du jour : Mise en place d'un calendrier en fonction des disponibilités de chacune et chacun. Clarification du sujet et du contexte de travail. Répartition du travail dans le temps et dans l'équipe Planification des jalons du projet Écriture d'un document pour le premier jalon du projet qui retranscrit la réunion en question. 31/01/2024 Première séance au Fablab prévue, malheureusement le lieu était fermé. Nous nous sommes donc retrouvés dans la salle de travail du couloir du master de physique pour avancer sur la recherche bibliographique préliminaire et sur l'inventaire expérimental. Nous avons mis en place cette page du wiki, et avec quelques difficultés à modifier la page à plusieurs, nous sommes arrivés à une première structure convaincante. Semaine du 29 Janvier Avancées sur l'aspect théorique ; création d'un script MATLAB modélisant une onde stationnaire et des forces de pression aux paramètres ajustables. syms z; syms t; mass = 0.0015; % marble's mass (kg) radius = 0.002; % marble's radius (m) V = (4/3)*pi*radius^3; % marble's volume z0 = 0.25; % initial position (m) kbT = 1.38*10^(-23)*293.15; % Boltzmann's constsnt time 293.15 K (20°C) Na = 6.022*10^(23); % Nombre d'Avogadro (mol^(-1)) M = 28.965*10^(-3); % molar mass of dry air at 1 atm, 20°C (kg.mol^(-1)) p0 = 101325; % pressure : 1 atm = 101325 Pa phi1 = 0; % phase at origin c = 343; % celerity of sound in the air (20°C, m/s) r = 1; % reflection coefficient; set to 1 (perfect mirror) dp = 1000000; % pressure variation pmax-p0 of the incident wave (Pa) L = 0.4; % distance inter-mirror (m) n = 8; % number of nodes to display l = L/(2*n+2); % position of the first node (m) t_span = linspace(0.01,1.01,1000); t_step = t_span(2)-t_span(1); k = 0.5*pi/l; w = c*k; zeros = linspace(l,L+l,n+2); % nodes positions + two more % phase shift for reflected wave is 0+phase of incident wave at z=L because of the acoustic impedance of the mirror > air incident_wave = dp*cos(k*z-w*t+phi1); incident_wave_handle = @(z,t) eval(simplify(incident_wave)); reflected_wave = r*dp*cos(-k*(z+L)-w*(t+L/c)+phi1); % Total wave p1 = incident_wave + reflected_wave; p1_handle = @(z,t) eval(simplify(p1)); F_p = -diff(p1,z); F_p_handle = @(z,t) eval(simplify(F_p)); % //----------// Euler clear Z Vz; Z = 0*ones(1,length(t_span)); Vz = 0*ones(1,length(t_span)); Z(1) = z0;plot(t_span, Z); Vz(1) = 0; for i = 1:length(t_span)-1 Vz(i+1) = t_step *(9.81*(-mass + V*(subs(subs(p1+p0,z,Z(i)),t,t_span(i)))*M/(kbT*Na)) + subs(subs(F_p,z,Z(i)),t,t_span(i))*V)/mass + Vz(i); Z(i+1) = t_step*Vz(i) + Z(i); end % //----------// for i = 1:(length(zeros)-1) xline(zeros(i), '--', 'HandleVisibility', 'off'); % Vertical line at x_values(i) with red dashed line end % Add images img1 = imread('radio_gen.png'); img2 = imread('mirror.png'); hold on; image(img1, 'XData', [-l, 0], 'YData', [-1.7*dp, 1.7*dp]); image(img2,'XData', [zeros(end-1), zeros(end-1)+l], 'YData', [-1.5*dp, 1.5*dp]); hold off; for tc = 1:length(t_span) tt = t_span(tc); yyaxis left; colororder([0, 0.5, 1]); fplot(p1_handle(z, tt), [0,(2*n+1)*pi/(2*k)+1], 'LineWidth', 2, 'DisplayName', 'p(z)'); ylabel('I(z); (V)'); ylim([-2*dp, 2*dp]); hold on; image(img1, 'XData', [-l, 0], 'YData', [-2*dp, 2*dp]); image(img2,'XData', [zeros(end-1), zeros(end-1)+l], 'YData', [-1.5*dp, 1.5*dp], AlphaData=0.8); fplot(incident_wave_handle(z, tt), [0,(2*n+1)*pi/(2*k)+1], '--', 'LineWidth', 1, 'DisplayName', 'A_i(z)') scatter(Z(tc), 0, 50, 'filled', 'MarkerFaceColor', 'black', 'DisplayName', 'marble'); % 1 pixel = 0.75 points hold off; yyaxis right; colororder([1, 0.6, 0]); fplot(F_p_handle(z, tt)/1000000, [0,(2*n+1)*pi/(2*k)+1], 'LineWidth', 2, 'DisplayName', 'F_p(z)'); ylabel('F_p(z); (N/cm^3)'); ylim([-2*100, 2*100]); xlabel('z (m)'); title(['t =' num2str(tt)]); xlim([-l, zeros(end-1)+l]); legend; % update screen drawnow end 07/02 On continue sur les recherches théoriques et les simulations MATLAB. L'inventaire est finalisé et nous avons contacté notre enseignant référent et le fablab pour savoir si certains éléments nécessaires à l'expérience sont déjà disponibles dans les locaux. Il  nous faut commencer rapidement le montage afin d'avoir le temps d'optimiser et d'avoir des résultats convaincants d'ici au 17 février. Galerie photos English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension English Korean Japanese Chinese (Simplified) Chinese (Traditional) Vietnamese Indonesian Thai German Russian Spanish Italian French Copy Support This Extension Projet Système Embarqué EI-SE4 I7-IP1 Projet Agriflow Informations Membres de l'équipes : Christopher AL KHAWAND Lucas GAUVAIN Robert UT Victor ZHENG victor.zheng@etu.sorbonne-universite.fr Polytech EI-SE 4 Septembre 2023 - Janvier 2024 Contexte Agriflow est un système d'irrigation autonome qui a pour objectif d'être installé sur un toit végétal sur le campus de Sorbonne Université à Saint-Cyr. Objectifs Notre projet étant autonome, Agriflow fonctionne sur batterie et a donc besoin d'un panneau solaire pour recharger cette dernière. Ainsi, nous avons besoin d'imprimer deux pièces en 3D : Un support de fixation du panneau solaire Un support de fixation de batteries                                     Support de fixation de batterie                                                                        Support de fixation du panneau solaire Matériel Filament PLA Blanc Machines utilisées Imprimante 3D Construction Étape 1 Développer les deux pièces en 3D sur Fusion 360 Étape 2 Imprimer les pièces Étape 3 Ajouter les pièces a notre projet Journal de bord 11/12/2023 Développement de la pièces permettant de fixer le panneau solaire à notre poteau métallique. 12/12/2023 Ajout de la pièce de fixation du panneau solaire sur le projet. Développement en 3D du support de fixation de la batterie et lancement en impression de celui-ci.LU2ME113 - Conception, Simulation, Système Robotique Projet "KrakenRover" Informations SAMETOGLU Alper, MAFFIA Edoardo, ELIES Léo, SELMOUNE Massil alper_mehdi.sametoglu@etu.sorbonne-universite.fr L2 Mono-mécanique intensif 11 décembre 2023 - 17 janvier 2024 Contexte Pour la partie projet de cette UE, le but est la conception et réalisation d’une machine de marche. On a choisi de récréer la mécanisme de Jansen en modélisant un robot qui a 8 pattes. D'abord, on a conceptualisé le modèle sur SolidWorks dans nos séances de TP. Objectifs L'objectif de ce projet sera de réaliser le robot à 8 pattes et de faire son assemblage avec les pièces conçues au Fablab. On utilisera une combinaison de CP peuplier (les pièces principales) et du PLA (les pivots, pièces intermédiaires). Matériel PLA 1.7mm (noir) CP peuplier 3mm Machines utilisées Raise2 Pro, Trotec Speedy 360, Trotec Speedy 100 Construction Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 08/12/2023 Première jour au Fablab, on a essayé d'imprimer une pièce reliant le moteur à notre mécanisme principale mais il faudrait qu'on change l'épaisseur de la pièce et la forme des supports. Après trois lancements, on a succédé. Ensuite, on a découpé tous nos parties principales au découpeuse laser Trotec 360. 15/12/2023 On est revenu pour imprimer les pièces intermédiaires. On a exporté tous les fichiers SolidWorks vers STL, et envoyé les fichiers à l'imprimante. Malheureusement, pendant l'impression, l'extrudeur gauche à touché une pièce et a été débouché avec du matériau. Alors, on a relancé l'impression avec un radeau et jupe. 18/12/2023 Récupération des pièces de l'imprimante. 12/01/2024 Partie conception et rapport (en annexe) finie, on est revenu au Fablab pour refaire notre assemblage et découper des nouvelles pièces au cas où. Conception et réalisation d'un robot marcheur bipède Informations DROZD Aleksandra, DROZD Michal Aleksandra.Drozd@etu.sorbonne-universite.fr Michal.Drozd@etu.sorbonne-universite.fr L2 mono mécanique intensif 17/11/2023 - 08/01/2023 Contexte Dans le cadre de l'UE LU2ME113, nous avons un projet à réaliser qui consiste à concevoir, modéliser et simuler un robot marcheur. Nous avons choisi un robot bipède basé sur le mécanisme de Hoekens : Modélisation du robot sur le logiciel Solidworks : Simulation de la marche : Objectifs Après la conception et la simulation du robot sur Solidworks, nous avons eu la possibilité de créer un prototype de ce robot. Le châssis a été réalisé avec des composants MakerBeam. Les pièces restantes, comme les pattes et le mécanisme, ont été imprimées au FabLab sur imprimante 3D. Vidéo de la marche du robot : Matériel PLA noir 1,75 mm Machines utilisées Imprimante Raise 3D Pro 2 et Pro 2 plus Fer à souder Construction Étape 1 Impression des pièces Étape 2 Soudure à l'étain du circuit électrique du moteur (boîtier de piles, interrupteur et moteur) Étape 3 Assemblage du robot Étape 4 Corrections permettant d'améliorer la marche du robot. Journal de bord 05/12/2023 Impression de la première partie des pièces (Raise 3D Pro 2 Plus ; PLA noir) 15/12/2023 Impression de la deuxième partie des pièces (Raise 3D Pro ; PLA noir) et soudure à l'étain du circuit électrique (moteur, interrupteur, boîtier de piles) 21/12/2023 2 soudures refaites car elle se sont cassées (les câbles se sont rompus) 11/01/2023 Nous avons dû imprimer deux pièces permettant de stabiliser le deuxième axe horizontal (Raise 3D Pro 2 Plus ; PLA noir) 22/01/2023 Nous avons dû rallonger les deux liaisons pivot entre les deux longues bielles verticales et le pied. Lorsque le robot était sur une patte, le moment du poids du châssis le faisait basculer sur la patte. Cela était dû à un petit jeu au niveau des liaisons ce qui se traduisait par un déplacement latéral de la patte de 3 cm. Maintenant, la liaison est plus stable et il n'y a plus ce problème. 23/01/2023 Réimpression de 4 clips (2 pour chaque côté) permettant la liaison entre la patte et les longues bielles verticales. Les précédents s'étaient cassés lors de leur installation car ils étaient trop rigides. Nous les avons imprimés avec un taux de remplissage de 25% (contre 45% avant).Projet Marcheur (Tracteur) Informations Nassim BEN MAAMAR Nassim.ben_maamar@etu.sorbonne-universite.fr LU2ME113 - S1-23  Date de début - 17/11/23  Date de fin estimée - 09/01/24 Contexte Afin de valider notre UE de CAO on a conçu sur le logiciel SolidWorks un Marcheur avec un mouvement choisi, nous avons choisi le Jansen. Objectifs Notre objectif est de concevoir un marcheur robotique quadripède avec une cinématique basée sur le principe mécanique de Jansen. figure 1- Animation d'une patte ayant les propriétés mécanique du mécanisme Jansen Matériel PLA noir de diamètre 1,75mm Machines utilisées Raise3D pro 2 Construction Étape 1 : Conception des pattes de notre Marcheur Figure 2- Assemblage de la patte droite Étape 2 : Conception du premier prototype de notre châssis Figure 3- Première version du châssis Étape 3 : assemblage de notre marcheur Figure 4- Assemblage de la V1 du marcheur Étape 4 : Test de notre marcheur sur un sol Figure 5 : Test de notre marcheur sur un sol Étape 5 : Reconstruction de notre châssis afin qu'il soit solide après l'impression 3D                                                                Figure 6A- Mise en plan de notre châssis final                                Figure 6B- Photo de notre châssis final                                  Étape 6 : Impression en 3D des pièces nécessaires Figure 7 : modélisation de nos pièces en 3D sur le logiciel IdeaMaker. Étape 7 : Assemblage final de notre marcheur Figure 8 : Photo de l'assemblage final du marcheur Journal de bord : 17/11/2023 Premier jour, on a tout d'abord conçu un châssis "virtuel", c'est à dire avec des plans et des axes. Ensuite, on a réalisé l'assemblage d'une patte en prenant les mesures conseillées par wikipedia pour chaque bielles. Apres cela on a assemblé notre patte avec les plans/axes de notre châssis. Enfin on a terminé l'assemblage en rajoutant la patte gauche en faisant la symétrie de la patte droite par rapport au plan médian du châssis tout en rajoutant une contrainte pour que lorsqu'une patte avance, l'autre avance avec un décalage de 180° 24/11/2023 Ce jour là, on s'est occupé des roues arrière de notre marcheur, on à cherché sur le site Grabcad un fichier Solidworks avec les dimensions et l'assemblage d'une roue lego. Après cela on a assemblé les roues avec notre marcheur; on a tout d'abord relié nos roues au châssis avec des bielles que l'on assemblerait puis on s'est rendu compte que ca ne serait pas solide donc on a modifié le châssis de sorte à ce que nos roue soit relié directement a un support du châssis 01/12/2023 On a commencé par réaliser notre première version du châssis puis on a remplacé le châssis virtuel de l'assemblage par un vrai châssis. Ensuite, on réalise l'analyse de mouvement. La première fois ça n'a pas marché car on avait oublié de fixer le châssis. Enfin, après avoir fait l'analyse de mouvement, on a testé notre marcheur sur un sol pour avoir une image de la stabilité de notre marcheur et évité qu'il tangue. 08/12/2023 ce jour là, le professeur nous a recommandé de modifier notre châssis afin qu'il soit plus solide en rajoutant des congés et des nervures afin d'éviter les fissures, en plus de cela on a rajouté à notre assemblage le moteur et les clips des bielles pour avoir un aperçu total de notre prototype, ce qui nous a permis de constater que le clip qui relie le coupleur a la patte tapait le châssis c'est pourquoi on a décalé légèrement le coupleur du châssis. 18/12/2023 On a lancé l'impression en 3D des pièces nécessaires 21/12/2023 Après 27 heures d'impression, on débute l'assemblage de notre marcheur. Cependant lors de l'assemblage de nos premières bielles on constate que nos clips se sont cassés. On a donc limé les trous de nos bielles pour facilité l'entrée des clips et éviter de les casser. On a donc du relancer l'impression de quelque clips pour remplacer celles cassées. 22/12/2023 Nous avons réalisé l'assemblage des pattes avec le châssis et l'installation du moteur. Après cela, nous avons attaqué la partie éléctronique on a donc relié notre moteur à un interrupteur et l'interrupteur a la batterie et enfin la batterie avec le moteur à l'aide de fil que nous avons soudé.MU5EBB12 Projet de fin d'études Transformation de l'image en sons Canne Virtuelle pour utilisateurs Informations Prénom et nom Laurent LIN/ Thibault Jeannot/ Evan Bokobza Adresse mail laurent.lin.1@etu.sorbonne-universite.fr Cursus M2 SMR Date de début - Date de fin estimée (ou réelle) 2023-2024 Contexte Afin d'aider les utilisateurs à se déplacer dans un environnement rempli d'obstacles, nous avons créer une canne virtuelle permettant d'alerter les objets à une faible distance Objectifs La canne virtuelle est composé d'un circuit arduino permettant de transcrire la distance issue de la caméra RGBD et d'envoyer l'information pour faire vibrer l'un de nos vibrateurs. [Ajouter au moins une image de votre projet] Matériel Maquette 3D Arduino Vibrateurs Bouton Caméra RGBD Transistors Machines utilisées Trotec Speedy 100 Construction (Fichiers, photos, code, explications, paramètres d'usinage, photos, captures d'écran...) Étape 1 Souder le dispositif Étape 2 ---- Étape 3 ---- Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 11/01/2024 Test pour souder les fils 18/01/2024 Dispositif soudé sauf pour le bouton Canne Virtuelle pour utilisateurs Aide à la pratique sportive : squats Guitar project Atelier Fablab -Licence Sciences de la Terre LU3ST062 L'Atelier Fablab propose à des équipes de 2 ou 3 étudiants de développer une approche de modélisation analogique et numérique autour d'un problème de Sciences de la Terre. Le but est de mettre au point, améliorer et utiliser des maquettes (non-dimensionnées) puis des modèles analogiques (dimensionnés) pour mettre en évidence un processus ou évaluer un paramètre critique. La discussion porte ensuite sur le passage des conclusions aux échelles géologiques. Concrètement la réalisation des montages passe par l'utilisation des ressources du Fablab (impression 3D, conception assistée par ordinateur ... ) et d'outils d'interfaçage (Arduino, MATLAB ... ) pour l'extraction de données des expériences. Macroscope polarisant simplifié (M. Chassé) Projet macroscope polarisant ( année 2023-2024 2ème semestre ) Etudiants : LEROUX-BAILLY Nicolas L3 Majeure Sciences de la Vie mineure Sciences de la Terre nicolas.leroux-bailly@etu.sorbonne-universite.fr               AZARIOUH Sarah L3 Majeure Sciences de la Vie mineure Sciences de la Terre sarah.azariouh@etu.sorbonne-universite.fr Objectif du projet Ce projet a pour objectif de crée un macroscope polarisant simplifié qui doit être un support d'enseignement pour expliquer le fonctionnement et l'utilité de l'observation d'objet par polarisation dans le cadre d'ue de L1 de géologie. Pour cela notre maquette doit répondre à plusieurs problématique:                                                                                                                                                          - Etre facile à comprendre et aller à l'essentiel (par exemple ne pas parler du fonctionnement du grossissement  sur ce type de microscope) afin de faciliter le transfert de connaissance                                                                                                                                  - Ne pas être trop lourd ou trop encombrant car il faut que les étudiants puisse les manier tout en travaillant                                      - Etre solide afin de ne pas se casser à chaque fois qu'un étudiant fasse tomber le macroscope                                                            - Ne pas être trop cher                                                                                                                                                                              - Pouvant être facilement construit car s'il y a un accident il faut que le macroscope soit prêt pour le prochain cours    Comment nous avons fait Nous avons donc fait un macroscope en 8 pièces séparées : 4 supports fait à l'impression 3D, dont 2 qui sont identiques celui pour le polariseur et celui pour le porte objet , il y a aussi le support de l'analyseur étant presque identique à ces derniers et enfin le support de la lampe. Les 4 autres pièces sont les 2 coques où sont collé l'analyseur ou le polariseur avec celle du polariseur ayant une languette pour pouvoir tourner lorsqu'elle est sur son support, il y a une plaque de plexiglass qui sert de porte objet et enfin une lampé qui a été acheté sur internet. Il y a aussi un sticker qui sera collé sur le support du polariseur Machine et logiciel utilisés Mais pour faire ce macroscope on a dut utilisé des machines et des logiciels.                                                                                        Le principal logiciel  que l'on a utilisé est Openscad un logiciel open source qui permet de faire des formes 3D ou 2D avec un programme simple ( pas besoin de formation ) . C'est forme pourront ensuit être exporter sous différent format svg dxf ... pour le 2D stl … pour le 3D . Lien du site: OpenSCAD - Downloads Nous avions décider de faire un macroscope avec l'impression 3D car cela nous semblait être le plus simple et que cela nous intéressait. Pour cela on utilise un logiciel gratuit nommé idea maker qui permet de faire que les dossier en format stl puisse être lu par l'imprimante et permet de faire des modification sur les modèle 3D pour un bonne impression. Ce logiciel est présent sur les ordinateurs du Fablab donc il n'est pas nécessaire de le téléchargé même si cela peut être utile pour se préparer à l'impression. Lien des tutos  sur le Fablab IdeaMaker | Wiki FablabSU (sorbonne-universite.fr)  Lien du site: ideaMaker Download Center Les imprimantes 3D sont des Raise 3D pro plus. Lien des tutos sur le Fablab 🧵 Imprimantes Raise3D ... | Wiki FablabSU (sorbonne-universite.fr) Pour découper le film polarisant et la plaque de plexiglass nous avons besoin d'un logiciel de dessin vectoriel  nommé in inkscape . Les ordinateurs du fablab l'ont  mais téléchargé ce logiciel peut être une bonne idée car le passage de openscad à inkscape peut être problématique et c'est mieux de vérifié s'il n'y aura pas d'erreur  Lien des tutos sur le Fablab :Inkscape | Wiki FablabSU (sorbonne-universite.fr) Lien du site : Dessiner en toute liberté | Inkscape Pour la coupe du plexiglass on a utilisé la découpeuse laser trotec speedy 360. Lien des tutos sur le Fablab : 💥 Découpeuse laser Tro... | Wiki FablabSU (sorbonne-universite.fr) Nous avons utilisé pour la découpe du film polarisant le plotter de découpe graphtec cutting pro cependant vu le fait qu'il n'est  pas nécessaire de faire des découpes extrêmement précises l'utilisation d'un compas et d'un ciseaux est largement suffisant Lien des tutos sur le Fablab :✂️ Plotter de découpe ... | Wiki FablabSU (sorbonne-universite.fr) Pour le sticker nous avons utilisé la plotter de découpe sihouette caméo 2. Pour cela nous avions besoin d'utiliser le logiciel sihouette studio Lien du site : Logiciels Silhouette (silhouettefr.fr) A partir de ce logiciel on peut faire la découpe  en connectant notre ordinateur à la machine Lien des tutos ( pas vraiment à jour) sur le Fablab : ✂️ Plotter de découpe ... | Wiki FablabSU (sorbonne-universite.fr) Problèmes rencontrés : Le principal problème que nous avons rencontré est que les imprimantes 3D ont un taux d'impression sans problème technique trop faible pour que les impressions puisse être faites assez rapidement de manière constante ce qui fait que certaines semaines ont été consacrées à des réimpressions car nos modèles originaux étaient déféctueux. Un autre problème est que nous ne pouvons pas faire imprimer tout les pièces en une seule session d'impression ce qui limite la facilité de construction de notre maquette Enfin les pieds des support n'étaient pas assez résistant et se cassait trop facilement . Nous avons essayé de régler ce problème sur IdeaMaker en allant sur le menu "modifier" en haut tout en ayant notre pièce sélectionné puis sur ajouter un modificateur en choisissant de préférence un cylindre puis en dessous de modifier les paramètre de chevauchement en cliquant sur le plus puis en cochant remplissage -densité du remplissage et ensuite ou  a sélectionné un remplissage de 70%. Semainier / Carnet de Bord : 26/01/24 - Semaine 2 Nous avons réfléchis à une première version de notre macroscope polarisant et à comment le fabriquer. Le microscope polarisant est un macroscope optique composé d’un détecteur, de lentilles et de filtre polarisants. La lumière est un ensemble d’ondes ayant une infinité de directions. Le premier filtre a pour rôle de sélectionner une orientation préférentielle pour celle-ci. Lorsque les deux filtres sont perpendiculaires, aucune onde ne peut passer. Le principe de notre macroscope repose sur l’utilisation de minéraux biréfringents et de trouver un moyen de comprendre cette propriété essentielle en minéralogie. Lorsqu’un échantillon biréfringent est placé sur le trajet de la lumière, il va séparer l’onde lumineuse incidente en deux ondes de polarisation et de retard différents : on dit qu’elles sont destructives. Le polariseur laisse passer la partie des ondes dont la polarisation a été modifiée par l’échantillon et lui seul. L’objet devient alors visible. Essayons de faire varier l’orientation de l’échantillon : nous remarquerons que l’objet apparait complètement noir à chaque tour de 90° : il s’agit de l’extinction. Cette caractéristique rend possible chez certains objets la détermination de la direction d’alignement des molécules qui les composent. Si maintenant nous faisons varier l’épaisseur de l’objet, les ondes transmises sont modifiées, ce qui change les interférences après le passage dans le deuxième filtre et donc la couleur de l’image reçue. Cette propriété, accompagnée d’un tableau regroupant les propriétés optiques de chaque minéral, permet d’identifier de façon plus ou moins précise la composition d’une roche. Ce macroscope permet de visualiser et caractériser les échantillons biréfringents. Dessin : prototype de notre macroscope simplifié Notre première idée est de créer des pièces permettant le support des différents filtres, et de les accrocher ensemble avec des tiges en métal. Nous pensons également créer un étui hermétique à la lumière afin de mieux rediriger celle-ci vers notre échantillon. Problème pour cette semaine : trouver les bonnes pièces pour faire un premier essai Semaine 3 : Premier modèle open scad: très brouillon qui a plutôt servi d'outil pour permettre de s'habituer au logiciel. Code du modèle Schéma molette et code : la molette a pour but de modifier la hauteur du support d’échantillon afin de recréer une expérience de « focus » comme dans un microscope classique. Schéma et code du support de la lampe il ne suffit que de modifier la taille Semaine 4 : Cette semaine, nous avons modéliser la première pièce de notre macroscope sur OpenScad : le support de lampe. Nous disposons de lampes LED circulaires. Nous avons réaliser cette structure permettant de la maintenir en place, avec un rebord comportant des orifices visant à accueillir les autres plateaux. impression du support de la lampe qui prend au total 12 h modélisation sur open scad Et le code (échelle 1 = 1mm ) Semaine 5 : Impression 3D du support de la lampe A améliorer pour la semaine prochaine : augmenter la taille du trou central  rajouter 1mm d'épaisseur du fond des cylindres extérieurs modèle 3D du support polarisateur réalisé sur OpenScad : et le code associé : Semaine 6 : Cette semaine, nous avons choisi de changer de directive par rapport à notre projet initial. Au lieu de créer 4 plateaux reliés par des tiges, nous avons choisis l’imprimer des supports pour les différents filtres et d’incorporer à chacun d’entre eux des pieds et des orifices afin de pouvoir les empiler, tout en gardant la possibilité de les manipuler séparément. Voici le modèle de notre premier support, ici pour le filtre polarisant : et le code associé : De même pour le support de l’analyseur, situé au sommet de notre macroscope : Semaine 7 : Cette semaine, nous avons imaginer les porte-filtres pour l’analyseur (droite) et le polariseur(gauche). L’analyser n’a pas pour objectif d’être tourner, nous l’avons donc fait rond afin qu’il s’insère dans le support. L’autre porte une languette afin de pouvoir tourner le filtre polarisant à des angles allant de 0° à 90°. L’objectif était ensuite d’incorporer des aiments afin de maintenir les filtres en place. Coque de polarisateur et d'analyseur Semaine 8 : Impression au FabLab de nos coques support de filtres Nous rencontrons un problème avec le support à polariseur : la languette triangle, en plus d’être fragile, n’est pas assez ergonomique et il est difficile de tourner le filtre une fois arrivés aux valeurs de 35-45°. Nous avons donc revu la forme de notre support : Egalement, nous avons pensé à un système simplifié afin d’ajouter des graduations sur nos supports. Etant donné que la polarisation est définie par un angle, cela est essentiel. Plutôt que de modéliser les graduations directement à partir du logiciel OpenScad, nous avons pensé à des bandes adhésives à plastifier et à coller sur le support. Reste à savoir si il est plus cohérent de partir de 0 ou d’avoir le 0 au centre; et si nous aurons 90° ou 180° au total. Nous avons aussi imprimer le support du polarisateur Semaine 9 : Nous avons essayé d’imprimer les pièces après améliorations au FabLab. Sans succès, nous avons seulement relancer les impressions afin de les récupérer après les vacances d’Avril. Voici le support de la lampe Le support de la lame est le même modèle que celui du polarisateur et le support de l'analyseur est le même que celui du  polarisateur sauf qu'il n'a pas de trou au dessus Semaine 10 : Nous avons récupérer nos impressions, mais malheureusement il y a eu une erreur d’impression qui nous a demander de relancer les 3 pièces manquantes à notre macroscope, qui sont le support de filtre polarisant avec languette modifiée, et les supports d’analyseur et de lamelle. Ensuite, nous nous somme rendu au FabLab afin d’utiliser la découpeuse vinyle Speedy3600 pour découper un rond de plexiglass qui nous servira de support de lamelle. Nous avons ensuite découper nos filtres et les avons assembler aux supports. Nous avons relancer les impressions qui n’avaient pas marché. Semaine 11 : Une nouvelle erreur d’impression est survenue sur nos pièces. Nous devons à nouveau réimprimer les 3 pièces manquantes à notre macroscope. Mouvement des plaques tectoniques Informations Prénom et nom : Malou MARTIN et Cloé SPADACCINI Adresse mail : malou.martin@etu.sorbonne-universite.fr et cloe.spadaccini@etu.sorbonne-universite.fr Cursus : Licence L3, Sciences de la terre, LU2ST062 Fablab. Chef de projet: Jeffrey POORT : jeffrey.poort@sorbonne-universite.fr Date de début - Date des dernières modifications : 19/01/2024 - 10/05/2024 Poster https://www.canva.com/design/DAGF3LNjDw0/9q0c8dGZrUtvaDqHx10yrQ/view?utm_content=DAGF3LNjDw0&utm_campaign=designshare&utm_medium=link&utm_source=editor Introduction Dans le cadre de l'UE LU3ST062, nous devons réaliser un projet. Pour la fête de la science, Jeffrey Poort souhaite présenter une maquette d'un globe terrestre pour illustrer le déplacement des continents au cours du temps, notamment de la Pangée à aujourd'hui. La Pangée était un supercontinent qui regroupait les sept continents actuels (Asie, Afrique, Amérique du Nord, Amérique du Sud, Antarctique, Europe et Australie). Ils se sont regroupés au Permien, lors de l'orogenèse hercynienne, qui s'est achevée il y a environ 260 millions d'années. Au Trias supérieur, il y a environ 210 millions d'années, la Pangée a commencé à se fracturer. Depuis, les continents ont continué à se déplacer. Cela fait maintenant 10 millions d'années que la configuration de la Terre est proche de celle que nous connaissons actuellement. Nous devrons représenter les différents stades de cette séparation et des déplacement des continents au fil du temps. Objectifs L'objectif est de mettre en mouvements les divers continents et ainsi les visualiser à l’aide d’une maquette en forme de globe. Pour réaliser cette maquette, nous devrons faire une sphère aimantée qui servira de base pour la terre. Nous utiliserons Blender, un logiciel de modélisation 3D, pour l'impression des continents. Les continents seront des éléments aimantés et interactifs pour permettre aux utilisateurs d'explorer le mouvement des continents. Développement du projet Nous avons choisi d'utiliser une thermoformeuse pour réaliser rapidement une sphère fine et légère. Pour cela, nous avons utilisé un moule de pâtisserie en demi sphère métallique. Nous avons alors obtenu deux demi-sphères en plastique transparent que nous avons découpé et poncé puis peint avec une peinture aimantée et une peinture bleue. Les demi sphères n'étaient finalement pas assez aimantées par la peinture. Nous avons utilisé des pièces de monnaie fixées à l'intérieur des demi sphères à l'aide de colle chaude puis pour sécuriser le tout, nous avons versé de la résine époxy sur les pièces. Pour maintenir la sphère sur son support, nous avons réalisé une tige grâce à OpenScad. L'impression 3D a échoué trois fois avant d'obtenir une tige parfaite, lisse et aux bonnes dimensions. Elle passe par le pôle Nord et Sud de la sphère et donc par les trous réalisés dans les demis sphères. Chaque extrémité de la tige possède une cavité pour accueillir le corps de la vis. À des fins esthétiques, au pôle Nord, il y a un capuchon d'environ 1cm recouvrant la tête de vis. Nous utilisons deux vis différentes pour les 2 extrémités. Celle qui relie le socle et la tige est plus longue et large pour pouvoir passer dans le support en bois et la tige. La vis du pôle Nord est courte et trapue. Le support est constitué d'une planche de bois avec un trou en son milieu pour fixer la tige et donc la sphère. Pour les continent, nous devons les modéliser sur Blender pour pouvoir les imprimer. La modélisation a été longue et compliquée. En effet, nous avons suivi différents tutoriels disponibles sur YouTube. Nous avons obtenu une représentation de la terre avec des continents reconnaissables mais déformés, écrasés sur les longitudes et allongés sur les latitudes. Pour l'impression, il fallait séparer chaque continent les uns des autres. Pour le premier essai d'impression, nous avons choisi l'Afrique. Nous l'avons importé en format STL dans IdeaMaker. Nous avons importé notre modèle de globe à la taille de notre maquette, puis nous avons redimensionné l'Afrique à imprimer afin qu'elle corresponde à la taille de l'Afrique sur le globe. Cela permettra qu'elle s'emboite parfaitement sur la surface de la sphère. Une fois imprimé, nous avons constaté que la représentation n'était pas juste. Pour que les continents tiennent sur la sphère, nous avons fait des trous à la perceuse avec une mèche et un fraisoir dans l'essai d'impression de l'Afrique. Ainsi, nous avons vu qu'il fallait deux aimants pour que le continent tienne sur les demi-sphères. Nous avons donc essayé de faire une modélisation conforme à la réalité. Après de nombreux essais, nous avons réussi à obtenir une représentation réaliste des continents. Faute de temps, nous n'avons pas pu finalisé cette modélisation et donc l'impression des continents. Ainsi, la maquette est constituée de deux demi sphères indépendantes mais aimantés. Pour avoir un support complet, il ne restera plus qu'à assembler les demi sphères et visser la planche à la tige. Pour assembler les demi sphères, il faudrait imprimer une nouvelle tige qui possède un coche sur lequel la sphère inférieure reposerait ou trouver un autre moyen de fixer les deux sphères entre elles. De plus, il faudrait re percer le pôle sud dans la sphère qui est maintenant recouvert par la résine époxy. Pour l'impression des continents, la deuxième modélisation est à revoir, afin d'obtenir des continents proportionnels. Vous trouverez la progression du projet plus en détail dans l'annexe ci-dessous. Annexes Jour 1 (26/01/24) : détermination du projet. Quelques questions sont essentielles pour déterminer la direction à prendre dans la création du modèle du mouvement des plaques tectoniques : Quelle échelle pour les continents/plaques ? La chronologie ? De la Pangée à aujourd’hui ? Les continents ou les plaques tectoniques entières ? Le futur supercontinent ? Un matériau de préférence? Pour commencer, nous proposons de créer un modèle simplifié du mouvement des plaques tectoniques en utilisant une sphère comme base. Sur cette sphère, nous pourrons fixer des "continents" qui pourront pivoter autour de leurs pôles eulériens respectifs. Le pôle eulérien est le centre de rotation permettant de décrire les mouvements des continents à la surface d'une sphère, représentant ainsi la Terre. Pour la prochaine séance, après de nombreuses réflexions, nous avons choisi un moule de pâtisserie de 18 cm de diamètre. Jour 2 (02/02/24) : construction de la sphère Nous avons utilisé le moule pour réaliser un premier test de thermoformage afin de créer une sphère. Il était nécessaire d'avoir un objet en forme de sphère ou de demi-sphère capable de résister à la chaleur et au vide créé par la thermoformeuse. Le résultat de ce premier test n'est pas satisfaisant. Les demi-sphères présentent des ondulations sur le dessus, et le démoulage a été difficile, endommageant la structure. De plus, le découpage effectué à l'aide d'un ciseau à tôle a donné un rendu hétérogène. Nous avons réalisé un deuxième essai en utilisant un matériau transparent et avons utilisé du WD-40 pour faciliter le démoulage. Cette fois-ci, la demi-sphère était de meilleure qualité, sans ondulations dues à un mauvais maniement de la machine (la vitesse du levier était trop faible et hésitante). Lors de la première manipulation, la machine a surchauffé le plastique car nous l'avons laissé trop longtemps. Le plastique s'est mal moulé avec des plis et des bulles à la surface lors de la première tentative. Heureusement, les essais suivants étaient une réussite. Pour découper les demi-sphères, nous avons utilisé une Dremel puis une ponceuse afin d'obtenir un résultat net et homogène. Les bords ont été lissés pour ne pas se couper. Jour 3 (09/02/24) : support Maintenant que nous avons réalisé les demi-sphères pour représenter la Terre, il faut que nous réfléchissons à la manière de les maintenir en position verticale sur un support. Nous avons envisagé un support en bois avec un système de fixation qui représentera les pôles Nord et Sud : Sur OpenSCAD, nous avons conçu une baguette qui traversera les pôles Nord et Sud et qui sera fixée sur un support en bois. Après avoir discuté avec Jeffrey Poort, nous avons clarifié les attentes du projet. Finalement, l'objectif de cette maquette est de représenter le mouvement des plaques/continents de la Pangée à aujourd'hui, et inversement. Nous avons donc décidé d'opter pour un système d'aimants, où la sphère ainsi que les continents seront aimantés, ce qui permettra leur mouvement. Nous pourrons également indiquer sur la sphère les pôles eulériens par des dessins ou autre. Pour la prochaine séance, notre objectif sera de mettre en place la sphère sur son support et de la peindre avec une peinture magnétique. Nous pourrions également appliquer une couche de peinture bleue supplémentaire pour uniformiser la sphère esthétiquement et en représentant les océans. Jour 4 (16/02/24) : blender Les pièces imprimées pour le support n'étaient pas dans les bonnes dimensions, car le diamètre du cylindre était confondu avec son rayon. Nous les avons donc modifiées pour obtenir les pièces aux dimensions souhaitées. Durant le reste de la séance, nous avons tenté de créer une sphère avec les continents en relief sur Blender en suivant une vidéo Youtube. Malheureusement, nos multiples essais n'ont pas été concluants. Nous prévoyons donc de réessayer lors de la prochaine séance. Jour 5 (01/03/24) : encore blender Nous avons tenté à nouveau de créer une sphère avec des continents en relief sur Blender. Après de nombreux essais, nous avons enfin réussi à obtenir une sphère des continents en relief. Cependant, afin de pouvoir imprimer en 3D les continents seuls, nous avons dû retirer la sphère, ce que nous avons réussi à faire. Malheureusement, nous avons rencontré un problème avec la projection : le Groenland a été coupé, l'Antarctique n'est pas correctement représenté, et le nord des continents a été déformé ou écrasé. L'impression des pièces du support a été un échec en raison de leur taille trop importante pour la machine. De plus, contrairement aux autres machines du FabLab où le socle reste immobile pendant l'impression, la machine de Pierre fait bouger le socle. Malheureusement, toutes les machines du FabLab sont actuellement en maintenance. Par conséquent, nous envisageons de les imprimer la prochaine fois. Jour 6 (08/03/24) : trous Voici les résultats de nos trois essais d'impression 3D pour le support de la sphère. Le premier essai (en noir) est trop volumineux. Le deuxième essai (en haut sur la photo de gauche) n'est pas à la bonne taille car la machine l'a écrasé pendant le processus d'impression. Enfin, le troisième essai (en bas) n'est pas imprimé entièrement, mais il correspond aux bonnes dimensions. Il a été imprimé horizontalement. Après avoir terminé de poncer la deuxième demi-sphère, nous avons procédé à la création des trous pour permettre le passage de la tige à travers la structure. Le principal défi était de localiser le sommet de la demi-sphère et son centre afin d'obtenir un trou parfaitement centré. Après avoir essayé différentes méthodes sans succès (notamment à vu d'oeil), nous avons opté pour l'utilisation d'un laser et d'une règle. Malou a ensuite réalisé deux trous de tailles différentes : un pour faire passer une vis (4mm de diamètre) et un autre (10mm) pour permettre le passage de la tige entière afin de fixer la base. Parallèlement, nous avons récupéré une planche de bois pour en faire le support. Des manipulations futures seront nécessaires pour embellir la planche et réduire le risque d'échardes. Finalement, nous avons repris le modèle sur Blender. Nous avons réussi à séparer chaque continent ou plaque tectonique les uns des autres. Cependant, quelques obstacles étaient toujours présents. Lors de la séparation des continents, nous avons remarqué la présence de morceaux sélectionnés à l'intérieur d'autres continents. Les Amériques étaient bien indépendantes, mais l'Eurasie, l'Inde et l'Afrique nécessitaient encore un peu de travail, car certaines zones présentaient des creux. Pour résoudre cela, il suffira lors de notre prochaine séance de remplir les zones manquantes. À la fin de cette session, nous avons pu exporter des plaques telles que l'Afrique ou l'Inde au format STL, adapté à l'impression 3D. Nous avons également vérifié avec l'aide de Pierre que la taille des continents n'était pas excessive. Ce paramètre pourra être ajusté une fois que la modélisation des plaques sera terminée. Nous espérons également pouvoir perforer les emplacements des aimants lors des prochaines étapes du projet. Jour 7 (15/03/24) : toujours des trous et peinture La tige définitive pour le support est maintenant prête. Elle a été imprimé à haute définition et donc elle a une surface lisse. Nous avons terminé de percer les trous à la perceuse pour pouvoir insérer les vis à l'intérieur. De plus, nous avons trouvé une vis appropriée pour fixer la tige sur la planche de bois. Nous avons commencé par percer un trou dans la planche avec un diamètre correspondant à celui de la vis (3,5 mm), puis nous avons réalisé un second trou pour permettre à la tête de la vis de s'insérer dans le support. Cependant, la vis n'était pas parfaitement droite dans la planche car nous avons commencé par percer le trou le plus petit. Par conséquent, nous allons récupérer une autre planche et commencer par percer le trou pour la tête de vis afin d'assurer une fixation plus précise. La structure est presque finie, et il ne reste plus qu'à peindre et assembler les demi-sphères. Lors de notre premier essai, nous avons utilisé une demi-sphère que nous avions brièvement poncée avec du papier de verre. Cependant, le résultat était identique à celui de la demi-sphère non poncée. Nous avons donc décidé de ne pas poncer les demi-sphères finales. De plus, compte tenu du fait que les aimants ne tenaient pas bien avec une seule couche de peinture magnétique, nous prévoyons d'appliquer plusieurs couches sur les demi-sphères finales. Ainsi, nous avons commencé par peindre les demi-sphères avec une première couche de peinture magnétique, que nous avons répétée trois fois pour assurer une bonne adhérence des aimants. Ensuite, nous avons appliqué une couche de peinture bleue pour représenter les océans. De plus, nous avons continué de séparer les continents sur Blender pour leur futur impression. Jour 8 (22/03/24) : continents La peinture magnétique s'est avérée insuffisamment forte pour maintenir les aimants en place. Nous avons donc décidé d'opter pour un système avec un aimant à l'intérieur de la sphère et un autre sur sa surface. Cependant, nous avons identifié un problème potentiel : si les aimants à l'intérieur tombent et se fixent ensemble une fois la sphère assemblée, cela pourrait poser des difficultés. Finalement, nous envisageons d'utiliser des pièces de monnaie de 1, 2 et 5 centimes. En effet si elles tombent, elles ne s'aimanteront pas ensemble. Après consultation avec Jeffrey Poort, nous envisageons également de coller une feuille magnétique autocollante ou un film ferreux autocollant à l'intérieur des sphères afin d'améliorer la tenue des aimants. La séparation des continents sur Blender est désormais terminée, ce qui signifie que nous pouvons passer à l'impression. Cependant, nous rencontrons actuellement des problèmes d'échelle. Nos tentatives pour ajuster l'échelle sur IdeaMaker, le logiciel d'impression 3D, ainsi que directement sur Blender, n'ont pas abouti. Pour résoudre ce problème, nous avons essayé de mesurer la circonférence d'un globe terrestre, puis la taille des continents un par un. En utilisant un produit en croix, nous avons tenté d'arriver à la taille des continents que nous souhaitons imprimer sur le globe que nous avons fabriqué. Cependant, les continents sur Blender ne sont pas parfaitement ronds, ce qui signifie qu'ils ne s'adapteront pas parfaitement à la forme de notre globe. Le résultat n'a pas été concluant. Nous prévoyons de finaliser les dossiers des continents à la bonne échelle la semaine prochaine afin de pouvoir les imprimer. Jour 9 (29/03/24) : encore des trous et première impression 3D Nous avons réalisé notre premier essai d'impression 3D pour l'Afrique. Pour cela, nous avons utilisé IdeaMaker. Tout d'abord, nous avons ouvert le modèle du globe au format STL, puis nous l'avons redimensionné à la taille désirée, soit un diamètre de 18 cm. Ensuite, nous avons importé le modèle de l'Afrique séparément dans le même document et l'avons également redimensionné pour qu'elle soit à la même échelle que celle du globe. Étant donné que l'Afrique présente une forme courbée, nous avons ajouté des supports pour garantir une impression optimale. Cette opération d'impression devrait durer environ 6 heures. Nous découvrirons donc le résultat mardi (2/04). Nous avons récupéré une nouvelle planche de bois pour le support. Pour percer le trou destiné à la vis, nous avons commencé par utiliser une mèche à bois de 4 mm de diamètre, puis nous avons utilisé un foret fraisoir afin que la tête de la vis puisse s'encastrer parfaitement dans la planche. Nous n'avons pas pu obtenir les feuilles aimantées que nous souhaitions placer à l'intérieur de la sphère. Après discussion avec Pierre et Loïc, nous avons encore des interrogations concernant la fixation des aimants et donc des continents. Nous avons identifié plusieurs possibilités : - Utiliser des aimants à l'intérieur et à l'extérieur de la sphère. Cependant, si les aimants tombent à l'intérieur de la sphère, ils pourraient s'aimanter ensemble, ce qui compliquerait leur séparation si la sphère est scellée. - Coller des pièces de monnaie à l'intérieur. Cependant, cette option nécessiterait un grand nombre de pièces. - Appliquer de la peinture magnétique à l'intérieur et éventuellement à l'extérieur de la sphère. - Coller les feuilles aimantées à l'intérieur. Nous résoudrons ce problème dans les futures séances. Après une heure d'impression, l'Afrique a échoué. Nous avons rencontré un problème au niveau des supports, qui sont tombés car ils n'étaient pas solidement fixés entre eux. Par conséquent, nous avons décidé d'ajouter un radeau pour permettre aux supports de se fixer dessus et ainsi éviter tout mouvement indésirable. Jour 10 (5/04/24) : toujours des impressions 3D Nous avons réussi à imprimer en 3D l'Afrique, mais malheureusement, elle est déformée, ne ressemblant plus à sa véritable forme géographique. Cette déformation pourrait être due à un problème lors de l'impression, provoquant un étirement dans le sens de la longueur et un rétrécissement dans celui de la largeur. Cependant, il est également possible qu'il y ait eu un problème au niveau de la modélisation dans Blender. Afin de résoudre ce problème, nous avons entrepris de remodéliser le globe terrestre en utilisant de nouvelles méthodes et techniques. Pour l'instant, les résultats ne sont pas concluants, mais nous poursuivons nos efforts pour trouver une solution satisfaisante. Le problème d'aimantation de la sphère n'est pas résolu. Au moins, nous avons à présent l'Afrique comme continent référent pour déterminer la quantité d'aimants nécessaire afin de maintenir les continents en place sur la sphère tout en intégrant des pièces de monnaie à l'intérieur. Au début, nous avons opté pour un petit aimant, car nos aimants standard ont un diamètre de 12 mm et nous ne disposions pas d'une mèche correspondante. Par conséquent, nous avons essayé avec un aimant plus petit (8 mm), compatible avec la taille de la mèche dont nous disposions. Malheureusement, celui-ci s'est révélé inefficace. Nous avons alors entrepris de percer un trou avec une mèche de 10 mm, puis de l'élargir avec un foret fraisoir, et enfin de nettoyer les résidus avec un cutter. Cependant, même avec ces ajustements, l'insertion de l'aimant nécessitait encore l'usage d'un maillet, endommageant ainsi la structure de l'Afrique et entraînant un enfoncement excessif de l'aimant, réduisant ainsi son efficacité. Face à ces difficultés, nous avons finalement décidé de superposer deux aimants, ce qui a augmenté la force magnétique tout en réduisant la distance entre la pièce et la sphère. Néanmoins, ce processus s'est avéré long et coûteux en aimants. Pour les prochains continents, une fois que nous aurons résolu ces problèmes, nous envisageons d'utiliser une mèche de 12 mm et une pince adaptée. En conclusion, grâce à l'utilisation de deux aimants de plus grande taille et à l'insertion des pièces à l'intérieur, nous avons réussi à maintenir l'Afrique en place sur la sphère ! Jour 11 (26/04/24) : fixation béton Nous avons finalement opté pour la fixation des pièces de monnaie à l'intérieur des sphères. Cependant, nous ignorons si le champ magnétique des aimants est altéré par les passages à travers les pièces. Pour résoudre cette incertitude, nous utilisons l'Afrique imprimée précédemment (jour 10) que nous découpons en deux à l'aide d'une scie. Nous pourrons ainsi observer le comportement des plaques et, par extension, des aimants. Les deux morceaux de l'Afrique s'emboîtent parfaitement. Les aimants conservent les mêmes caractères. Maintenant, nous devons coller les pièces à l'intérieur des sphères. Initialement, nous avons utilisé un petit pistolet à colle, mais nous avons rapidement épuisé notre réserve de colle. Nous nous sommes donc rendus au Fablab pour utiliser des pistolets à colle, malheureusement il y en avait que de grande taille, ce qui était moins pratique. Bien que les deux demi-sphères s'emboîtent correctement, les pièces risquent toujours de se détacher, donc nous sommes à la recherche de solutions pour les fixer de manière plus sécurisée et définitive. Une hypothèse que nous envisageons est d'utiliser de la résine époxy pour solidifier les pièces et fixer les sphères entre elles. Nous prévoyons de mettre cette idée à l'essai lors de notre prochaine et dernière séance pour finaliser notre projet. Jour 12 (03/05/24) : fixation résine Pour notre dernière séance, nous avons utilisé de la résine epoxy pour fixer définitivement les pièces. Sur la demi sphère inférieure, nous avons bouché le trou pour le support à l'aide de scotch. Nous avons utilisé 75mL de résine et 10mL de durcisseur que nous avons mélangé suivant les instructions données par le fabricant. Puis nous avons versé la moitié du mélange dans chaque demi sphère que nous avons réparti de manière homogène en pivotant les sphères. Il y a 12 heures de temps de séchage donc en théorie, il ne reste plus qu'à assembler les demi sphères et le support. Documentation Charles DeMets a fait un travail de recherche «Effect of recent revisions to the geomagnetic reversal time-scale on estimates of current plate motions” qui explique la vitesse et l’angle de rotation des plaques. L'article de Peter Bird "An updated digital model of plate boundaries" inclut un document avec les limites des plaques en longitudes-latitudes qui pourrait nous servir pour créer les limites des plaques pour la maquette. (https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2001GC000252) Pour la modélisation, on utilisera OpenScad pour pouvoir imprimer les formes. Animations des déplacements des continents sur http://scotese.com Vidéo YouTube pour faire un globe avec des continents : https://www.youtube.com/watch?v=Jxx-vQ425wc Code OpenScad pour la tige et le capuchon: h_cyl=210; r_cyl=5; h_vis=17; r_vis=1.9; h_cyl2=15; r_cyl2=10; h_vis2=5; r_vis2=2; r_vis3=7; //axe N-S difference() {   cylinder(h_cyl, r=r_cyl, center=false, $fn=180);   translate([0, 0, h_cyl-h_vis]) cylinder (h_vis, r=r_vis, center=false, $fn=180);   translate([0, 0, 0]) cylinder (h_vis, r=r_vis, center=true, $fn=180); }   //axe capuchon translate([80, 0, 0]) difference() {   cylinder(h_cyl2, r=r_cyl2, center=false, $fn=180);   translate([0, 0, h_cyl2-h_cyl2]) cylinder (h_cyl2, r=r_vis2, center=false, $fn=180);   translate([0, 0, 0]) cylinder (h_vis2, r=r_vis3, center=false, $fn=180); } EMRiver Modèle analogique d'un système fluviatile : trouver un sable accessible Lola Asensio, Jade Montagne Introduction Dans le cadre de cette UE, notre but était de modéliser un cours d'eau afin d’illustrer l'effet du tri des particules dans un système laminaire, pour rendre le phénomène accessible aux L1 notamment. Les points clés à démontrer étaient que l’eau a un rôle important dans le transport des particules, et que le transport dépend de la taille de celles-ci, ce qui va créer un tri granulométrique. Pour rappel, dans la nature, ce sont les plus gros grains qui sédimentent en premier. Dans ce but, des étudiants de Fablab des années passées avaient tenté d’élaborer un modèle analogique de sable en s’inspirant du projet EMRiver. C’est un projet lancé par une société américaine avec une table et du sable en plastique recyclé recréant les propriétés du quartz et ayant l’avantage d’être coloré selon la taille de ses grains. Ils ont réussi à reproduire l’installation proposée par le projet, en utilisant le substitut de sable vendu par EMRiver. Le souci, c’est que ce sable coûte très cher, que le dispositif est complexe et trop volumineux… d’où notre problématique, à savoir comment modéliser le transport des grains à moindre coût, dans une maquette simplifiée et diminuée ? I. Pistes et matériel Nous avons essayé de trouver un moyen de modéliser ce transport sans avoir recours à ces particules tout en y intégrant une différence de coloration selon la granulométrie comme proposé par EMRiver. L'intérêt de cette coloration est qu’elle permet de comprendre que les grains sont plus ou moins bien transportés par le courant en fonction de leur taille. Nous avions alors 2 pistes : ou bien tenter de produire nous-mêmes des particules en recyclant du plastique, ou réessayer d’utiliser du sable naturel. On dit réessayer, parce que nos prédécesseurs avaient fait une tentative mais ils avaient rapidement écarté cette option la jugeant inesthétique. En dehors du problème de coût, nous pouvons signaler que les particules d’EMRiver ne suivent pas un schéma de sédimentation classique, à savoir que ce sont les plus petits grains qui sédimentent en premier. C’est pourquoi nous avons décidé de redonner une chance au sable naturel, plus précisément du quartz, parce qu’il ne coûte pas cher, que ses propriétés sont connues et que nous espérons qu’il suive un schéma de sédimentation classique. Voici brièvement le fonctionnement de la maquette inspirée du travail de nos prédécesseurs : Nous avons utilisé une bassine de dimension 90 x 60 x 30 cm, en la remplissant de sable sur 50 cm et en laissant 40 cm de vide vers la bonde, afin de conserver une épaisseur de sable de 5 cm, permettant ainsi le tracé d’une rivière. La maquette fonctionne de la manière suivante : Il faut placer la bassine sur une table afin de pouvoir disposer en dessous deux bacs, l’un pour la décantation et l’autre pour la pompe, dans lesquels on aura préalablement versé et réparti 6 litres d’eau pour une dizaine de kilogrammes de sable. Il faut faire en sorte que la sortie d’eau soit au-dessus du bac de décantation, et placer dans l’autre bac la pompe reliée à un tuyau lui-même en connexion avec l’arrivée d’eau. Il faut mettre le sable dans la bassine et le mélanger pour homogénéiser la granulométrie, sans le tasser. Nous avons fait le choix de tracer au préalable un méandre pour guider l’eau, et d’ajouter une pente en mettant une planche de 2,5 cm de hauteur du côté de l’arrivée d’eau, sous les 10 premiers centimètres de la bassine. Sous l’entrée d’eau, nous avons placé un EDU (Energy Dissipator Unit), qui est une pièce qui réceptionne l'eau sortant du bec verseur et diminue son énergie cinétique. Ensuite, il suffit de brancher la pompe au moteur et de le régler à la valeur choisie. II. Méthodes et calculs Nous voulions que tous nos grains soient transportés par la vitesse maximale applicable à notre cours d’eau, qui correspond à l’arrivée d’eau. C’est pourquoi nous avons entrepris la démarche suivante : Nous voulions trouver une vitesse de moteur et une taille de particules adéquates pour assurer un transport laminaire. En effet, il s’agit d’un mouvement ordonné des particules d’un fluide qui permet de considérer que la vitesse du transport est uniforme, même en prenant en compte les changements dus à la pente ainsi qu’aux forces s’appliquant sur les grains comme la poussée d’Archimède, la gravité et les frottements ayant lieu tout le long du cours d’eau. Pour ce faire, il nous fallait trouver un débit à la fois suffisant pour un régime laminaire, et à la fois applicable sur notre construction dont la pompe a une puissance limitée. Après plusieurs essais, nous avons observé que l’eau circulait sans abîmer la pompe à une puissance du moteur de 45. Cette dernière est associée à un débit mesuré de 30 mL/s. En supposant que la rivière obtenue fasse en moyenne 0,5 cm de haut pour 5 cm de large, la section vaut 2,5 cm². Alors, la vitesse, donc le débit divisé par la section, vaut 12 cm/s. Pour s’assurer que le régime est laminaire, nous avons besoin du nombre de Reynolds qui permet d’établir la nature du régime. S’il est compris entre 500 et 2000, on pourra considérer que le régime est laminaire. Pour calculer ce nombre, il faut multiplier la largeur de la rivière par la vitesse du courant, et diviser le tout par la viscosité du fluide, ici l’eau douce (Re = LV/𝛎). La largeur de notre rivière était d’environ 5 centimètres, et la viscosité du fluide était connue, soit de 0,1 cm²/s. On a ainsi pu trouver un nombre de Reynolds de 600, compris entre 500 et 2000. Le système est bien laminaire. A partir de ces données, nous avons finalement utilisé le diagramme de Hjulström pour déterminer la taille de nos grains de quartz. Ce dernier illustre le transport des grains en fonction de la vitesse du fluide. Il montre que plus les grains sont gros, moins ils seront transportés. S’ils sont trop petits, ils restent en suspension. Notre but était d’obtenir une taille moyenne permettant le transport. Avec cette vitesse de fluide de 12 cm/s, nous avons obtenu une taille de particules de sable comprise entre 0,5 mm et 2 mm. Finalement, pour distinguer les grains selon leur taille, il fallait au moins deux couleurs différentes. Pour ce faire, nous avons fait plusieurs expériences pour colorer le sable. Nous avons aussi cherché du sable naturellement coloré, et avons tamisé beaucoup de sable pour obtenir la granulométrie choisie en quantité suffisante. III. Résultats Les résultats de nos expériences de coloration nous ont montré que l’encre de Chine et le bleu de méthylène n’étaient pas adaptés. En revanche, nous avons sélectionné un sable d’aquarium vendu comme naturellement coloré qui, en réalité, s’avérait artificiellement coloré. En contact avec de l’acétone, il se décolore. Néanmoins, il fonctionne pour notre expérience, c’est pourquoi nous avons choisi ce sable, de tailles allant de 0,5 à 1 mm. Nous avions un deuxième type de sable, de 1 à 2 mm, lui aussi du quartz mais de couleur claire (blanc à marron). La bassine à notre disposition était noire, ne permettant pas l’observation optimale des grains foncés. Nous l’avons donc colorée en bleu pour créer un contraste avec nos grains. Nous avons fait plusieurs essais probants : le sable était bien transporté, même si, dans les faits, cette maquette n'illustrant pas pleinement les événements géologiques dans ses dimensions temporelles et spatiales, nous avons à nouveau obtenu ce transport inversé, c’est-à-dire que les petites particules se déposent en premier. En plus de ce transport, nous avons pu observer une érosion au niveau des rives concaves, et la formation de méandres abandonnés et d’un delta. https://www.youtube.com/watch?v=bq6eCxD2WLE Conclusion Pour conclure, avec ce sable naturel, nous obtenons des résultats similaires aux particules du modèle d'EMRiver. Nous pensons donc avoir répondu à la problématique initiale : voilà un sable à la fois peu coûteux, coloré, qui permet de montrer un granoclassement et ce de manière simplifiée et reproductible. En perspective, pour passer d’une maquette à un réel modèle, il faudrait faire varier un paramètre à la fois et observer les conséquences sur le comportement des grains. Pour cela, on peut facilement faire varier la pente, mais aussi modifier le tracé, comme par exemple la forme du méandre réalisé préalablement, notamment sa longueur d’onde. On peut ajouter de l’eau en début d’expérience qui représenterait la mer en aval du cours d’eau. On peut aussi envisager, même si c’est plus complexe, de faire varier la vitesse maximale de l’eau mais pour cela il faudrait une pompe plus performante au risque d’être rapidement limités. On peut arriver à un débit maximal de 40 mL/s, soit une vitesse de 15 cm/s, en restant en régime laminaire. Dans ces conditions, on pourrait faire varier la taille des grains mais en ayant seulement 1 mm de plus afin d’assurer un transport selon le diagramme de Hjulström. En effet, on ne peut diminuer la taille des grains car quand ils sont plus petits que 0,5 mm, ils flottent. Ce modèle peut très bien être reproduit avec une classe, la maquette est relativement transportable et la rivière prend seulement quelques minutes à réaliser un tri granulométrique. Nous pensons qu'il serait peut-être judicieux d'en disposer plusieurs dans la salle, afin que tout le monde puisse observer et expérimenter. Il faudrait alors prévoir 4 fois plus de matériel, donc de nouveau fabriquer les pièces nécessaires (pour en savoir plus sur la conception de la table en-elle même nous vous renvoyons au wiki de nos prédécesseurs), acheter du sable et le tamiser, afin d'obtenir environ 40 kg de grains de la taille souhaitée. En effet, même en commandant des grains censés faire la taille adéquate, il semblerait que la taille réelle des grains par rapport à celle indiquée sur l'emballage ne coïncide pas toujours. Cette activité est assez longue (nous estimons un kg de sable trié par heure par tamis), mais nous recommandons de vérifier la taille des grains achetés car, comme dit plus haut, elle ne peut presque pas dépasser les 2 mm, et doit rester supérieure à 0,5 mm. A savoir qu'une maquette peut, selon nous, être réutilisable pour plusieurs années, bien que quelques pièces pourraient nécessiter un remplacement de temps en temps, comme la pompe ou un tuyau. Le sable pourra certainement être utilisé pendant un certain temps à condition qu'il soit étalé en fin d'usage dans la bassine pour sécher, au risque d'y voir des organismes s'y développer. Nous pouvons préciser que, en l'espace de plusieurs semaines et en utilisant régulièrement ce dispositif, nous n'avons rencontré aucun de ces problèmes. Bibliographie : 1. « Emriver Stream Tables & Hydraulic Flumes ». Emriver, https://emriver.com/. 2. Dodds John, Baluais Gérard. Caractérisation de la taille des particules. Sciences Géologiques. Bulletin, tome 46, n°1-4, 1993. Minéraux finement divisés, sous la direction de Jacques Yvon. pp. 79-104. 3. Miedema, Sape. Dredging Processes, The Loading Process of a Trailing Suction Hopper Dredge. Delft University of Technology. 2012. 4. Kathy Lazard, Amaury Leroy, Dan Rebibo et Alice Saugrain. “Modèle analogique sable”. Wiki des projets de l’UE Fablab. 2022-2023. https://wiki.fablab.sorbonne-universite.fr/BookStack/books/projets-due-2022-2023/page/modele-analogique-sable 5. Référence du sable noir : Aquarium gravier noir, Sable de quartz. 2 kg ; 0.6-1.2 mm. Wyskont. Remerciements : Nous tenons tout d'abord à remercier Loïc Labrousse pour son apport pédagogique et scientifique, ainsi que Pierre Théry pour sa disponibilité et son savoir-faire. Nous remercions également Laurence Le Callonnec pour son investissement dans l'identification de notre sable. Poster : Carnet de bord :          Afin de rendre accessible le phénomène de sédimentation des rivières, notamment aux L1, notre but est de modéliser un cours d'eau suffisamment élaboré pour illustrer l'effet du tri des particules dans un système laminaire. Les modèles précédents nous permettent de réutiliser un mécanisme efficace pour reproduire le système aquifère. Notre priorité est de trouver un substitut au sable d'EMRiver, qui est très coûteux. Dans le meilleur des cas, nous aimerions avoir un mode de dépôt similaire à la sédimentation naturelle du sable (les grosses particules sédimentent en premier).          L'argument de nos prédécesseurs contre l'utilisation du sable était son manque d'esthétisme. Cependant, il semblerait qu'ils aient comparé le sable non coloré avec le sable vendu par EMRiver, et donc teinté. Nous pouvons essayer de créer du sable naturel avec une coloration résistante à l'eau. Cela permettrait peut-être d'une part, de montrer aux L1 comment le sable sédimente réellement, et d'autre part de pallier le problème des mauvaises tailles du sable EMRiver (en effet, chaque particule colorée ne fait pas forcément la taille indiquée). Pour résumer, nous allons devoir trouver du sable, voire en synthétiser, et créer un système de coloration pour illustrer notre modèle. Séance 1 : Introduction rédigée, visite et découverte des différents substituts utilisables, ébauches d'idées pour la prochaine séance (sachant que nous devrions avoir l'opportunité d'utiliser un bac en plastique et non en bois pour limiter les fuites): Tout d'abord, pour bien visualiser les processus naturels, nous utiliserons du sable naturel de granulométrie variée (gravier à limon). Ensuite nous essaierons de reproduire le modèle avec des broyats de plastique recyclé (avantageux puisqu'ils sont déjà colorés, désavantageux puisqu'ils ne suivent pas le schéma de sédimentation classique). Si nous finissons par utiliser du sable naturel, il faudra prendre en compte premièrement la densité des grains, mais aussi leur colorimétrie (à savoir si nous pouvons directement avoir du sable naturellement teint ou s'il faudra le colorer artificiellement). - Utiliser différents sables naturellement colorés, que nous pourront tamiser pour trier les gros grains des petits Séance 2 :          Afin de s’assurer de la faisabilité de nos expériences, il nous faut définir les conditions dans lesquelles elles doivent se dérouler. Nous voulons travailler dans un régime laminaire, à savoir non-turbulent, tout en assurant le transport de notre sable pour ce modèle. Pour ce faire, nous utiliserons le diagramme de Hjulstrom qui illustre l’influence de la granulométrie des particules sur leur transport et leur vitesse de sédimentation. DOI:10.13140/2.1.4220.4483           Nous cherchons un débit pour lequel les grains érodent et sédimentent sous un régime laminaire. Pour cela, nous avons besoin du nombre de Reynolds qui permet d’établir la nature du régime (si le nombre de Reynolds est compris entre 500 et 2000, on pourra considérer que le régime est laminaire). Re = LV/𝛎 avec 𝝂 = la viscosité connue de l’eau douce. Comme nous travaillons avec de l’eau douce à température ambiante (~20°C), 𝝂 = 10^-6 m²/s. Nous trouverons la vitesse générale du fluide grâce au diagramme, et la longueur vaut 5 cm (qui correspond approximativement à la largeur attendue de notre rivière)En supposant que nos grains de sable sont de tailles comprises entre 0,5 et 5mm, nous avons cherché sur le diagramme quelle vitesse correspondrait au transport des tailles minimale et maximale des particules. Nous trouvons alors une vitesse de fluide minimale, pour un grain de 0,5 mm, de 3cm/s et une vitesse maximale, pour un grain de 5mm, de 20cm/s.Sachant que la viscosité est de 10⁻6 m²/s, alors que les deux autres données sont en cm et cm/s, il faut la convertir en cm²/s. Ainsi, comme 1m²/s = 10⁴ cm²/s, alors la viscosité de l’eau douce vaut 10⁻2 = 0,1 cm²/s. Re(min) = ((5x3)/0,1) = 150 Re(max) = ((5x20)/0,1) = 1000 Pour un grain de 5mm, nous trouvons une vitesse de fluide minimale de 20cm/s et maximale de 70cm/s. On a: Re(min) = ((5x20)/0,1) = 1000 Re(max) = ((5x70)/0,1) = 3 500 Comme Re(min) du grain de 0,5mm vaut 150<500 et que Re(max) du grain de 5mm vaut 3500>2000, nous pouvons exclure ces deux valeurs extrêmes de nos expériences. De plus, il s’avère que la vitesse minimale permettant le transport d’un grain de 5mm est égale à la vitesse maximale permettant le transport d’un grain de 0,5mm. C’est pourquoi nous pensons que cette vitesse de 20cm/s, ayant pour nombre de Reynolds = 1000, caractéristique d’un régime laminaire, serait une vitesse adéquate pour notre expérience.La vitesse étant définie, nous pouvons calculer le débit de la rivière modélisée. De plus, Q = S x v avec Q le débit, S la section de la rivière (son aire) et v la vitesse du fluide v = 20 cm/sSupposons que la rivière obtenue fasse en moyenne 0,5 cm de haut pour 5 cm de large. Alors S = 2,5 cm².Le débit nécessaire au transport des particules sableuses et à un système laminaire correspond  donc à Q = 2,5 * 20 = 50 cm^3 /s. Pour obtenir le débit, on utilise le montage de nos prédécesseurs afin de mesurer le flux à la sortie d'eau. Pour la prochaine fois, on mesurera le débit expérimentalement en observant le temps nécessaire à l'obtention d'un litre d'eau. Ensuite, on divisera le volume par ce temps.Après cela, nous pourrons chercher à modéliser avec du sable, au moins deux sables différents pour avoir une idée de la vitesse du tri (si c'est bien faisable en deux heures, sachant que l'objectif premier est de réaliser cette expérience en TP). Séance 3 : Nous avons essayé de trouver un moyen d'adapter le système de l'an passé aux nouvelles contraintes (notamment dues au changement de bac, le précédent en bois ayant beaucoup de fuites). Nous avons essayé expérimentalement d'obtenir le débit adéquat de 50 cm3/s. Sachant que 1cm³ = 1mL, nous cherchons donc 50 mL/s.            Pour ce faire, nous avons fait un test avec la pompe, rattachée à un moteur auquel nous avions arbitrairement attribué la valeur de 45, et nous avons obtenu 30 mL/s, sachant que 1cm³ = 1mL, nous avons alors fait un test avec le moteur à 60. Nous avons obtenu 37 mL/s. Ensuite, nous avons monté le moteur à 70 et avons alors obtenu 40 mL/s. Les trois points obtenus semblant linéaire, nous les avons reportés graphiquement ci dessous : Graphique du débit ( mL/s ) en fonction de la puissance du moteur de la pompe Nous avons ainsi pu obtenir la puissance du moteur associée au débit de 50 mL/s. Nous avons trouvé le point D, pour lequel l’abscisse vaut 95. Expérimentalement, nous associons bien cette puissance a un débit de 50mL/s. Cependant, il s'est avéré que l'eau ne passait plus assez vite du contenu pour la décantation au contenu avec la pompe... Le système débordant d'eau, nous allons dorénavant baser nos recherches sur des grains de taille inférieure à 5 mm. Prenons en compte des sables compris entre 0,5 et 2 mm. Alors, comme vu précédemment, la vitesse de fluide pour pouvoir déplacer un grain de 0,5 mm est comprise entre 1 et 20 mL/s. De plus, nous pouvons voir que celle nécessaire au transport d'un grain de 2 mm est comprise entre 10 mL/s et 50 mL/s. Pour ménager la pompe, nous pourrons prendre la vitesse minimale de transport des grains de 2 mm, qui est donc égale à 10 mL/s. Vérifions qu'avec cette vitesse, nous sommes toujours en régime laminaire : Re(10) = ((5x10)/0,1) = 500, cette vitesse convient donc. Alors, le débit associé devra être égal à Q = S*v = 2,5*10 = 25 mL/s. En reprenant la droite obtenue plus haut, nous pouvons lire graphiquement la puissance du moteur nécessaire pour un tel débit : environ 30. Cependant, en testant expérimentalement, le débit est tellement faible que l'eau ne parvient pas jusqu'au bac... Nous avons essayé de retourner le problème : l'eau circule convenablement avec une puissance du moteur de 45. Cette dernière est associée à un débit de 30 mL/s (nous l'avons confirmé via des treplicats). Alors, la vitesse est de v = Q/S = 30/2,5 = 12 cm/s. Le système est bien laminaire, comme Re(12) = ((5x12)/0,1) = 600, donc entre 500 et 2000. De plus, cette vitesse de fluide peut transporter des grains de quartz compris entre 0,5 mm et 2 mm. Nous avons donc trouvé le débit adéquat, qui n'engendre pas de débordement et qui est assez élevé pour atteindre le bac et transporter les particules. Avant de pouvoir passer à la modélisation du réseau fluviatile, nous devons prendre 2 sables de couleurs différentes et les classer selon leurs tailles. C'est ce que nous avons commencé à faire, mais vu le temps nécessaire au tamisage, cela nous prendra certainement une séance. Séance 4 : Nous avons tamisé du sable marron de 0 à 2 mm pour obtenir des grains de 1 à 2 mm. Le processus prend beaucoup de temps et nous aurons besoin de davantage de séances pour avoir un tri satisfaisant. En parallèle, nous avons cherché en ligne un type de sable naturellement coloré afin de pouvoir obtenir un contraste dans les pigments une fois le modèle mis en place. Nous ne possédons actuellement qu'un type de sable constitué de grains majoritairement marrons et blancs. En cherchant, nous avons pu trouver des candidats potentiels, notamment du gravier d'aquarium noir de 0,6 à 1,2 mm coloré naturellement. Il reste à voir s'il est possible d'en commander en grandes quantités sachant qu'on n'est pas sûres que le résultat soit correct. Nous avons aussi utilisé de l'encre de Chine pour colorer du sable et voir si elle ne colorait pas l'eau. Comme elle doit sécher pour être insoluble, nous allons attendre la prochaine séance pour voir si nous obtenons du sable noir qui ne déteint pas. Si cela ne fonctionne pas, nous allons devoir commander du sable naturellement coloré comme le gravier d'aquarium présenté plus haut. Séance 5 : Nous avons reçu du sable coloré naturellement que nous allons pouvoir tamiser afin de vérifier que les tailles indiquées sont correctes. Le sable, après tamisage, fait entre 0,5 mm et 1 mm. Aussi, nous avons versé de l'eau sur le sable coloré à l'encre de chine afin de voir si cela colore le sable et résiste à l'eau. Le sable reste coloré, néanmoins l'eau prend la couleur également. Pour voir si le sable ne se décolore pas entièrement si on le laisse de manière prolongée exposé à l'eau, nous allons laisser une portion du sable coloré dans un tube avec de l'eau que nous vérifierons la fois prochaine. Sable coloré à l'encre de Chine Sables mis dans l'eau Le sable d'aquarium noir ne colore pas l'eau, par contre quelques grains sont trop fins et restent à la surface en formant des petits nuages. Nous avons tout de même essayé de reproduire notre modèle à petite échelle, avec une bassine miniature et des quantités de sable moindres. Nous avons mélangé notre sable noir, se situant entre 0,5 et 1 mm, avec le sable de quartz de 1 à 2 mm. Nous les avons placés dans la bassine et appliqué les instructions laissées par nos prédécesseurs : il fallait tasser les côtés et aplanir le milieu afin d'homogénéiser le flux. Nous avons tracé un petit méandre afin de diriger le cours d'eau, notre modèle étant trop petit pour parfaitement reproduire celui souhaité. Nous avons ensuite placé la pompe à eau et mis le moteur à 45, puis nous avons laissé l'eau couler selon cette construction : Cependant, il manquait une légère pente pour pouvoir obtenir un méandre plus facilement. Nous avons surélevé notre bassine avec une planche en bois : Avec ce modèle miniature, nous avons réussi à obtenir un tri satisfaisant, ce qui est encourageant pour la suite. En effet, nous observons un départ des grains et un tri au sein du cours d'eau. Il nous faut maintenant de plus grandes quantités de sable des deux types pour la prochaine fois, afin de les trier et de pouvoir tester à grande échelle pour notre modèle. https://youtube.com/shorts/JocE2WKhqmI Séance 6 : Nous avons récupéré le sable naturellement coloré en noir que nous avions laissé dans l'eau pendant une semaine, et il ne se décolore pas et ne colore pas l'eau non-plus. Il semble donc être un bon candidat pour notre sable de substitution.Nous avons effectué le même test pour du sable coloré à l'encre de Chine et au bleu de méthylène : les deux ont conservé leur couleur, mais ils colorent l'eau. Cela peut être utile au cas où nous aurions besoin de plus de couleurs. Aussi, nous avons reçu du gravier de 1 à 2 mm ainsi que plusieurs sacs de sable d'aquarium noir que nous allons tamiser  également. Le gravier étant mouillé, et comme nous ne pouvons pas le tamiser tant qu'il est humide (nous avons essayé de le faire sous l'eau mais les grains ne passent pas correctement), nous l'avons sécher avec un pistolet à air chaud : Suite à quoi nous avons pu trier les graviers avec les tamis de 1 mm et 2 mm. Nous avons également tamisé le sable noir, mais certains grains sélectionnés, qui font pourtant plus de 0,5 mm, flottent. Nous avons essayé de retirer ces particules, et avons décidé de les observer à la loupe binoculaire afin de mieux saisir ce phénomène, ce que nous ferons la séance prochaine. Séance 7 :Nous avons récupéré le sable au bleu de méthylène, mais il a moisi et a coloré l'eau. Quant à l'encre de Chine, elle colore toujours l'eau. Nous avons poursuivi notre tri grâce au tamis 2000 µm afin de récupérer le sable inférieur à 2 mm pour notre modélisation. Nous avons également décidé de poursuivre sur un modèle réduit. Cela nous permettra de passer moins de temps à tamiser et à diminuer les coûts concernant le sable, avec lequel nous voulions remplir une bassine 90 x 60 cm d'une profondeur de 30 cm. Nous n'avons cependant pas besoin d'une maquette aussi volumineuse pour illustrer le transport des particules, et allons donc utiliser une bassine plus petite. En transposant dans notre contenant actuelle, on a pu estimer qu'un récipient idéal ferait environ les dimensions de 60 x 40 x 15 cm. Nous avons estimé notre quantité de sable à une dizaine de kilogrammes. Pour rappel, nos prédécesseurs avaient conduits leurs expériences avec 11 kgs de sable synthétique pour une bassine de 75 x 50 x 10 cm. Donc nos prévisions semblent cohérentes et faisables. Séance 8 : Nous avons fait plusieurs essais dans notre bassine 90 x 60 x 30 cm, n'ayant pas d'autre alternative pour le moment. Afin d'obtenir un modèle observable et efficace, nous avons rempli la bassine sur 54 cm en laissant 42 cm de vide afin de conserver une épaisseur correcte, soit de 5 cm. Ces essais se sont avérés fructueux. D'ailleurs, nous pouvons observer l'avancée du sable qui forme un delta ainsi qu'un transport net des particules blanches. Nous pourrions conserver cette bassine, cependant les grains noirs ayant la même couleur que la bassine, il nous est difficile de visualiser leur transport. Voici une vidéo illustrant les résultats de cette séance : https://youtu.be/SicIo69D0q4?feature=shared Nous avons visualisé nos grains de sable noir à la loupe binoculaire : Séance 9 : Nous avons contacté Madame Laurence Le Callonnec, Maître de Conférence en sédimentologie à Sorbonne Université, qui nous a reçues dans le but d'identifier notre sable noir. Après observation à la loupe binoculaire, il lui a semblé que nos grains étaient colorés artificiellement. Afin de vérifier cela, nous avons versé de l'alcool sur un premier échantillon de sable, et de l'acétone sur un second échantillon. Quelques minutes plus tard, nous les avons observés à nouveau et les grains étaient déjà partiellement décolorés. Il semblerait donc qu'il s'agisse de quartz coloré artificiellement; cependant, il ne se décolore pas naturellement et ne pose pas problème quant à notre modélisation. Néanmoins, il montre un comportement étrange vis-à-vis de l'eau : les particules les plus fines flottent et forment un léger film à la surface. Nous avions au préalable enlevé la majorité de ces grains parasites. Nous pouvons préciser tout de même que les grains étaient vendus comme étant "naturellement colorés" sans produits chimiques ajoutés... Cependant, étant donné qu'il est aussi coûteux que le quartz non-coloré, nous considérons que nous pourrons le garder à l'avenir. Comme notre bassine est de couleur noire, le transport de nos grains est difficilement visualisable. Nous avons donc décidé de peindre le fond de notre bassine en bleu à la bombe : Nous allons devoir attendre que cela sèche pour refaire un essai. Séance 10 : Au bout d'une semaine, notre sable laissé dans l'acétone et l'alcool est entièrement décoloré. Mme Le Callonnec a identifié du quartz translucide, un peu de quartzite ainsi que quelques grains noirs opaques qui pourraient être des petits fragments de roches volcaniques. Nous avons mis 6 litres d'eau dans les réservoirs d'eau (bac de décantation et bac d'arrivée d'eau) et avons mis le moteur à 45 comme nous le faisions auparavant. Pour faciliter le transport des grains, nous créons une pente en ajoutant une planche de 2,5 cm de hauteur, que nous disposons sous les 10 premiers centimètres de la bassine. Dans cette même optique, nous rajoutons un peu de savon dans notre eau. Voici le résultat obtenu, filmé à l'aide d'un trépied : https://www.youtube.com/watch?v=bq6eCxD2WLE Microscope polarisant (moteur) Microscope polarisant moteur: Coordonnées: Agathe Carabin: Agathe.Carabin@etu.sorbonne-universite.fr, L3 Majeure Sciences de la Vie mineure Sciences de la Terre Mila Antossevitch: Mila.Antossevitch@etu.sorbonne-universite.fr , L3 Majeure Sciences de la Vie mineure Sciences de la Terre Introduction: Date de début: 26 janvier 2024 Date de fin: 3 mai 2024 Mission: Le microscope numérique VHX-7000 de Keyence permet d'observer et de prendre des images en haute résolution. Tous de fois, l'utilisation de ce microscope pour observer la polarisation sur des lames de roches en géoscience nécessite l'ajout d'un deuxième polariseur qui est, aujourd'hui, manquant au microscope. En effet un premier polariseur se trouve déjà au niveau des objectifs. Nous voulons donc, dans un premier temps, créer une bague contenant le polariseur que nous pourrions attacher à la lumière qui vient au dessous des lames observées. Dans un second temps, nous aimerions inventer une pièce qui permettrait d'observer la polarisation changeante. Pour que cela fonctionne, il faut pouvoir déplacer notre lame tout en la gardant centrée. Il faut donc que l'analyseur et le polariseur ne bougent pas. Pour cela nous aimerions créer un système motorisé qui contrôle la rotation qui serait lui-même contrôlé par une manette pour régler l'angle de rotation avec précision. Il faut tous de même garder à l'esprit que le système doit être adaptée à la morphologie du microscope : léger et petit. Méthodologie: Pour réaliser ces deux missions nous avons utilisé le logiciel de modélisation paramétrique OpenScad. Il permet de créer des objets en 2D et en 3D. Pour apprendre à s’en servir nous avons utilisé la cheat sheet. Cette dernière contient toutes les formules pour pouvoir modéliser les formes qui nous intéressent. C’est un codage basique où l’on définit nos paramètres comme le diamètre ou encore la hauteur de nos pièces. Il faut modéliser des formes simples pour pouvoir les assembler et créer une forme plus complexe. Par exemple pour des cylindres creux on code deux cylindres et on fait la différence d’un des cylindres sur l’autre. Une fois le code de la pièce prêt, nous pouvons l’enregistrer en format STL, puis le transformer en .gcode pour pouvoir imprimer les pièces avec le logiciel de tranchage IdeaMaker. Pour l’impression 3D nous avons utilisé les imprimantes du FabLab ainsi que celles de l'atelier de Pierre Thery. L’utilisation de ces imprimantes est plutôt simple grâce aux tutoriels du Wiki du FabLab. Nous avons aussi utilisé OpenScad en 2D pour pouvoir faire la découpe du film polarisant. Pour faire cette découpe nous avons utilisé la machine Graphtec Cutting Pro. Ici aussi nous nous sommes aidées du tutoriel du FabLab. Principe: Nous avons donc construit une première pièce en 3 parties différentes. Cette pièce doit s’attacher sur la lumière du bas du microscope. La première partie de cette pièce permet donc de l'insérer sur cette lumière. Elle est indépendante des deux autres parties. En effet, nous avons besoin de tourner manuellement la pièce pour visualiser correctement l’effet de polarisation avec les différents angles, ce que cette première pièce permet. Les deux autres parties permettent de maintenir le polariseur grâce à des vis et permettent une bonne prise en main. Celle du dessus est graduée pour pouvoir visualiser l’angle de rotation. Schéma de la première pièce contenant le polariseur Nous avons également commencé la deuxième partie du projet en réalisant une deuxième pièce. Il s'agit d'un bras qui permet d'agripper la plateforme, ce dernier sera relié à un moteur pas à pas, le plus petit possible, lui-même relié avec un engrenages et une crémaillère. Elles permettent donc la rotation de la platine pour observer le plus facilement possible la polarisation d'une lame de roche. Résultats et problèmes: La première pièce est donc imprimée et tous à fait prête à l'emplois. Tous de même nous avons rencontrée plusieurs problèmes. Tous d'abord nous avons mis un peu de temps à bien prendre en main OpenScad, l'outil étant complexe et nous, n'ayant jamais fait de code. Il y a eu notamment des problèmes de conversion entre les diamètres et les rayons. Lors de notre première impression, les longueurs que nous avions codé en rayon ont été imprimées en diamètre. Ces problèmes de conversion varient en fonction des logiciels de tranchage des imprimantes 3D utilisées : le problème est donc apparue plusieurs fois. Il faut également noter des problèmes d'impression (bulles dans le plastiques, pièces de travers, l'imprimante qui s'arrête au milieu de l'impression). Nous avons donc pris beaucoup de temps à réussir à produire la pièce finale de la première étape. De plus, après avoir testé la pièce, nous nous sommes rendues compte que faire 3 parties était peut être inutile. En effet la partie du bas ne sert pas à grand-chose car nous avons rajouté un rebord que nous ne pensions pas faisable au début du à la présence d'un pico sur le pourtour de la lumière. Grâce à ce rebord, la pièce fonctionne très bien sans la partie du bas. Pour découper le filtre nous avons eu des problèmes dans l’orientation de la feuille et dans le choix de la découpe (notre matière ne figurant pas). Nous avons donc dû faire deux découpes. Mais la feuille sort très bien découpée (il faut juste faire attention lors de la détache des pièces pour ne pas les abîmer). Au niveau de la seconde étape, nous n'avons pas eu le temps de finir notre pièce. Tous les éléments sont modélisées, une première impression du bras et de la crémaillère à été réalisée mais les dimensions n'étaient pas bonnes. Nous les avons donc modifiées et une impression suivante devra être faite. Perspectives: Il faudrait donc finir la deuxième étape du projet. Pour cela, réimprimer les pièces et les tester sur le microscope (modifier si besoin). De plus, il faudrait réussir à coder le moteur pas à pas pour pouvoir faire tourner la platine et réaliser le montage final contenant tous les éléments ajustée parfaitement à la taille du microscope pour ne pas risquée d'abimer ce dernier. Quelques modifications pourraient peut-être aussi êtres faites sur la première pièce. En effet vu que la partie du bas tournante est inutile il serait peut être judicieux de la supprimer ou de la fusionner avec la partie du milieu (en faisant des modifications au niveau des mesures puisque cette dernière est légèrement trop large pour la lumière). Annexe, journal de bord: 26/01/24 Première étape: Pour cette première étape, nous avons tout d'abord fait un schéma nous permettant de visualiser comment la pièce comportant le polariseur allait pouvoir être conçue. Voici le schéma ci-dessus. Nous devons maintenant réaliser ces différentes pièces en 3D grâce au logiciel Open Scad. 02/02/24 Premier test d'impression de l'anneau numéro un : temps d'impression 30min. Puis on essaye la pièce sur l'objectif pour ensuite faire les ajustassions. Nous avons imprimé notre pièce avec une imprimante 3D. Et nous avons obtenu ceci: Nous pouvons voir sur cette photo qu'il y a eu un probleme d'impression dû au fait que nous avions confondu diamètre et rayon. Nous avons donc fait les modifications sur le fichier pour la suite. De plus, nous sommes aller l'essayer sur l'objectif, il était un tout peit peu trop petit, nous avons donc modifier les mesures en ajoutant 200 microns à nos mesures. Nous avons continuer à modéliser la suite des anneaux: Il reste à modéliser les graduations autour du dernier anneaux. Nous pourrons ensuite imprimer toutes les pièces et vérifier qu'elles correspondent bien sur le microscope. 09/02/24: Nous avons aujourd'hui réalisé les graduations sur le dernier anneau et nous avons corrigé nos trous pour les vis sur les deux anneaux qui en ont besoin.  Nous devons maintenant imprimer ces pièces, réaliser un dessin pour pouvoir faire les trous de vis dans le film polarisant et tester nos pièces sur le microscope. Nous pourrons ensuite passer à la secondre étape du projet. 16/02/24: Nous avons récupérer les pièces imprimée. Petit problème: l'imprimante a confondue diamètre et rayon, les pièces sont donc trop grandes pour pouvoir être essayées sur le microscope. Mais grâce à celles-ci nous avons pu réviser nos mesures: l'épaisseur de l'anneau supérieur, en effet, il n'était pas assez épais et a donc cassé facilement. La taille des trous de vis (notamment ceux pour la tête de vis) étaient trop courts, nous avons donc résolus le problème. Finalement, nous avons augmentés nos jeux entre les pièces. Nous avons lancé une nouvelle impression. De plus, nous avons réalisé sur open scad, un dessin pour pouvoir créer les trous dans le polariseur et le découper en cercle. 01/03/24: Nous avons fait la correction des problèmes dus à la confusion diamètre/rayon avec OpenScad. Modification de l'épaisseur des anneaux qui étaient trop fins pour soutenir les trous de vis. Nous sommes allées tester l'impression sur les imprimantes du FabLab (qui nécessitaient une maintenance). Pour découper le polariseur nous avons pensé à une découpeuse vinyle. Pour utilisée celle du FabLab nous devons acheter des films polariseurs en format A4. Pendant l'impression 3D des pièces, nous sommes allées visualiser le microscope pour voir comment nous pourrions concevoir le bras mécanique qui permettra de faire tourner la plateforme. Il comportera donc une pièce aggripant la plateforme près de la lumière, une crémaillaire entourant le dernier anneau du microscope, un petit engrenage roulant sur la crémaillaire grâce à un moteur. Toutes ces pièces sont à concevoir en 3D sur OpenScad. Nous avons donc réalisé les mesures nécessaires. 08/03/24: Nous sommes allées récupérer nos pièces qui étaient en impression au Fablab. L'impression s'est très bien déroulée. Nous sommes donc allées les essayer sur le microscope. Il y a encore quelques modifications à effectuer sur le code. Nous devons diminuer les pièces en hauteur et rajouté du jeu pour pouvoir les passer autour de la lumière. Nous avons donc fait ces changements lors de cette séance. Nous sommes donc allées faire une nouvelle impression. Nous avons décider d'ajouter des petits rebords pour eviter de rayer le polariseur si jamais la vitre est mal mise. Les pièces ne sont pas très bien sorties. En effet, il y a eu des problèmes de bulles dans le plastique et nous avions oublié de changer quelques mesures. Nous avons donc fait les changements et nous ferons une nouvelle impression au Fablab plus tard. Finalement, nous sommes allées faire le découpage du film polarisant. Comme la découpeuse vinyle est grande nous faisons une impression en même temps que le groupe qui travaille sur l'autre microscope sur une feuille A4. Nous avons ici aussi rencontré quelques problèmes. Tout d'abord la feuille utilisée était collante, ce qui n'est pas ce que nous recherchons, et nous avons fait la découpe dans le mauvais sens de la feuille : les pièces n'étaient donc mal découpées. Nous ferons donc une nouvelle découpe la semaine prochaine avec la bonne feuille et sans les erreurs de position. 15/03/24: Nous avons fait imprimer durant la semaine les pièces avec les modifications que nous avions effectué la semaine dernière. Les pièces ont très bien été imprimées, mais elles étaient encore trop petites pour le microscope à cause selon nous de la dillatation du plastique lors de l'impression. Nous avons donc refait des modifications et nous ferons à nouveau imprimer les pièces dans la semaine. Le FabLab était fermé aujourd'hui. Nous n'avons donc pas pu faire la découpe de la feuille polarisante. Nous allons essayer de la faire avec l'autre groupe dans le courant de la semaine prochaine. Nous avons avancé sur la deuxième partie du projet. Nous avons commencé à créer le bras qui accrochera à la plateforme. Nous continuerons les modifications la semaine prochaine. 22/03/24: Nous avons imprimé une nouvelle fois les pièces. Nous avons pu les tester sur le microscope mais malheureusement elles ne passaient pas très bien. Nous pensons refaire d'autres petites modifications (car la pièce du bas est un peu trop large et est peut être inutile au final). Nous sommes allées faire la découpe du filtre avec l'autre groupe qui travaille sur l'autre microscope. La découpe s'est bien passée de notre côté, le film est entier et s'imbrique très bien avec les autres pièces. Nous avons donc notre pièce globale entière est presque finie. Nous avons de plus avancé sur le code de la deuxième partie, notamment le bras qui est terminé. Et nous avons commencé à coder une pièce qui entourerait le bas du microscope (portant un engrenage permettant la rotation). 29/03/24: Aujourd'hui, nous avons vissé les visses sur la première pièce et nous sommes allé l'essayer sur le microscope une nouvelle fois. La pièce passe et la polarisation fonctionne très bien. Nous n'avons donc plus à y toucher normalement. Les fichiers pour cette pièce sont: FabLab1 : le code pour la pièce inferieure FabLab3 : le code pour la pièce du milieu FabLabAnneauSup : le code pour la pièce superieure Film polarisant: le code pour la découpe du film polarisant Voici donc une image du Keyence obtenue d'une lame de roche avec la pièce installée : De plus nous avons continué à avancer sur la deuxième étape du projet. Nous avons ajouté l'engrenage sur la pièce qui entoure le bas du microscope ainsi que les trous pour pouvoir faire passer une vis pour serrer la pièce. De plus nous avons remodifié la barre pour pouvoir laisser plus de place pour le moteur. Et nous avons finis par réaliser le dernier engrenage qui sera surement à remodifier en fonction du choix du moteur. référence moteur: moteur pas-à-pas Johnson Electric, 12V, dia.de l'arbre 1.5mm, Code commande RS: 383-1267, Reference fabriquant: 53154, marque: Johnson Electric. (21,66 euros TTC) 53154 | Moteur pas-à-pas Johnson Electric, 12 V, dia.de l'arbre 1.5mm | RS (rs-online.com) 05/04/24: Nous avons lancé une impression des deux nouvelles pièces (bras et grand engrenage) au FabLab. Nous nous sommes rendu compte que la taille du bras avait été divisée par 2 par l'imprimante et nous devrons le réimprimer plus tard. Nous essayerons les pièces sur le microscope au plus vite. De plus nous avons commencé à essayer de coder le moteur. Nous avons rassembler toutes les pièces pour faire fonctionner le moteur: l'Arduino Mega 2560, un shield, un écran et un joystick (mais il nous faut un adaptateur pour le brancher sur le shield). Nous avons aussi cherché un code sur lequel s'inspirer. Pilotage d'un moteur pas à pas avec un joystick - RedOhm [GUIDE] Arduino moteur pas à pas 28BYJ-48 stepper + code, câblage (arduino-france.site) Arduino Editor 26/04/24: Nous avons fait réimprimer le bras pendant les vacances. Nous avons pu aller l'essayer avec l'engrenage au début de la séance. L'engrenage est un peu court autour du microscope, nous avons donc du augmenter le diamètre de la pièce. De plus, nous avons décidé d'augmenter la hauteur de cette pièce pour qu'elle soit plus stable. Dans ce même but nous pensons à possiblement mettre une bande de caoutchouc à l'intérieure pour éviter que la pièce ne glisse. Le bras était un peu court, nous avons donc décidé de l'augmenter. La petite attache au bout du bras était un peu trop grande et ne passait donc pas dans le trou. Nous l'avons limé et elle passe mieux, il faudra donc changer sa taille dans le code. Nous avons aussi décidé de faire la partie triangulaire, qui permet de répartir la force, plus grande pour mieux agripper la plateforme. Nous sommes allé chercher un nouveau moteur pas à pas au FabLab, qui serait plus petit que le précédent. Nous en avons trouvé un, voir ci-dessous: Avec ce nouveau moteur, nous devons adapter notre bras pour que l'on puisse les assembler. Nous voulons donc ajouter deux trous pour pouvoir maintenir le moteur. Il y aurait donc 3 trous au final, celui du milieu serait plus grand que les deux autres pour pouvoir faire passer la barre du moteur sur laquelle s'accrocherait un petit cylindre relié au deuxième engrenage. Nous avons donc également rajoutée le tube s'insérant sous la pièce ci-dessus (dans le trou prévue à cette effet) sur le deuxième engrainage. Bien sûr la taille de l'engrenage sera à réglé en dernier pour l'adaptée parfaitement au montage. Code commande RS: 383-1267 Référence fabricant: 53154 Marque: Johnson Electric TurboCocco - 3e génération Informations Contacts : Alexandre Legou (alexandre.legou@etu.sorbonne-universite.fr) Fanny Ludowicz (fanny.ludowicz@etu.sorbonne-université.fr) Etudes : L3 Sciences de la Terre Dates du projet : 26 janvier - 03 mai 2024 Encadrants : Responsables de l'UE LU3ST062 : Loic Labrousse et Pierre Théry Projet TurboCocco : Fabrice Minoletti Sommaire Introduction I. Objectifs du projet II. Journal de bord III. Projet et résultats finaux Présentation du capteur Déroulé du projet et résultats Composition du sédiment étudié Incertitudes Pistes non-abouties IV. Logiciels et machines utilisés V. Perspectives VI. Remerciements Bibliographie Introduction Dans le cadre de la recherche en paléoclimatologie, Fabrice Minoletti étudie les coccolithes présents dans les sédiments calcaires pour tenter de reconstruire les climats passés. Pour cela, une partie de son travail consiste à réaliser des filtrations de coccolithes à partir d’une suspension sédimentaire dans de l’eau. Un des problèmes rencontrés est la saturation potentielle du filtre, qui peut être liée à une trop grande quantité de matière mise en suspension et à l’accumulation de matière sur le filtre à cause d'une sédimentation trop importante. Ces deux variables sont difficiles à contrôler de manière optimale. Les projets FabLab des années précédentes ont permis de développer un système de moteur avec hélice permettant, automatiquement, de remettre les particules en suspension et de remettre de l’eau dans la colonne quand celle-ci était devenue insuffisante. Afin d’améliorer le processus de filtration, Fabrice nous a demandé d’élaborer un système permettant de connaître en temps réel la quantité/charge de sédiments (donc potentiellement estimer la quantité de coccolithes) présente dans la colonne, afin de permettre à l’expérimentateur de savoir quand est-ce qu’il faut en rajouter car toutes les particules ont été filtrées. Une autre utilisation serait de savoir quand rallumer le moteur pour remettre en suspension les particules qui s’accumulent en trop sur le filtre. Pour ce faire, nous avons élaboré un système de mesure, basé sur un capteur de turbidité. I. Objectifs En utilisant un capteur de turbidité, mettre en place un système de mesure en temps réel sous Arduino, qui soit adapté à une suspension sédimentaire. Caractériser et créer un modèle de la relation existante entre la turbidité et la charge sédimentaire d’une suspension sédimentaire donnée (ici pour un sédiment calcaire riche en coccolithes). Remarque : Les objectifs du projets se sont affinés au fur et à mesure étant donné qu’il était difficile de prévoir le temps que prendrait chaque étape et donc ce qu’il était réellement possible de faire. Il est possible de voir l’avancée et la modification de ceux-ci au cours des semaines via le journal de bord. II. Journal de bord Journal de bord détaillé 26/01/2024 : 1. Capteur de turbidité Caractéristiques du capteur : Operating voltage: 5V DC Operating Current: 40mA (MAX) Response Time: <500ms Insulation Resistance: 100M (Min) Output Method: Analog Analog output: 0-4.5V Digital Output: High/Low level signal (you can adjust the threshold value by adjusting the potentiometer) Operating Temperature: 5℃~90 ℃ Storage Temperature: -10℃~90℃ Weight: 30g Adapter Dimensions: 38mm*28mm*10mm/1.5inches *1.1inches*0.4inches Capteur non waterproof : maintenir la partie noire hors de l’eau Principe : Le capteur mesure la turbidité, ce qui nous permet d'obtenir une valeur de voltage. Quand la turbidité augmente, le voltage diminue. Mesure de la turbidité = mesure des particules en suspension avec rayon lumineux + détecteur de lumière réglé à 90° par rapport au faisceau -> modification de la quantité de lumière réfléchie en fonction de la quantité de particules en suspension 2. Projet Utilité du projet : résoudre des problèmes de filtration des coccolithes. Les particules se déposent au fond et saturent la membrane. Il faut donc détecter quand est-ce que cela arrive (i.e quand est-ce que la turbidité est trop faible) pour que le moteur soit allumé. Ce qu'on va devoir faire : créer un programme permettant de mesurer la turbidité en solution effectuer des mesures avec différents liquides (différentes granulométries, différentes natures des particules) vérifier qu'on obtient les mêmes résultats avec différents capteurs (si ce n'est pas le cas on a un problème) 02/02/2024 : 1. But à ce stade : Déterminer les valeurs seuils pour lesquelles il y a plus assez de particules en suspension i.e. la membrane est saturée donc il faut allumer le moteur et/ou ? Déterminer la quantité seuil de sédiments à mettre dans le tube pour ne pas saturer la membrane >Le tout avec différents échantillons de sédiments 2. Démarche : Déterminer comment le turbidimètre marche : Schéma explicatif du fonctionnement du capteur Schéma du fonctionnement du capteur (https://how2electronics.com/) > 2 broches se font face : l’une émettrice d’une source lumineuse, l’autre receveuse. La lumière émise se voit en partie réfléchie, ce qui est fonction de la turbidité du milieu extérieur entre les 2 broches. Le détecteur convertit la quantité de lumière transmise en une tension électrique comprise entre 0 et 5V. Plus le milieu est turbide, plus le voltage est bas Déterminer l’étanchéité du montage : Photo du tube monté avec le capteur de turbidité Notre premier montage a pour but de calibrer et déterminer la sensibilité du capteur dans différente conditions. Il est composé d’un tube en plastique de 28 mm de circonférence (la même que le pourtour du capteur) et du capteur, inséré par l’ouverture. En remplissant le tube d’eau jusqu’au détecteur, nous voulions tester l'étanchéité du système. Le système n’est pas complètement étanche mais apparemment suffisamment pour que ça marche à la verticale sans trop le retourner : les pertes d’eau sont minimes. Premières mesures dans différents milieux : En tout premier lieu, nous voulions déterminer l’ordre de grandeur des mesures effectuées dans différentes conditions. Conditions de mesure voltage (en V) Commentaires Air libre, salle éclairée 3.87 +/- 0.02 Si une source de lumière directe (flash de téléphone par exemple) est proche, les mesures peuvent augmenter d'environ 0,2 V. Sans lumière directe, mesures constantes. Eau de Paris 4.50 +/- 0.02 Tube à la verticale, capteur immergé jusqu'au haut des broches Les mesures du 09/02/2024 nous donnent des valeurs de 4,55 +/- 0,03 V. Il y a probablement des variabilités dans la composition de l’eau de Paris d’une semaine à l’autre. Eau de Paris avec tube retourné 4.70 On ne sait pas à quoi l'augmentation est due. Hypothèse : à hauteur maximale, l'eau à la base des broches du capteur réfléchie aussi une partie de la lumière vers le capteur. Tableau récapitulatif des mesures de turbidité du jour Indice de réfraction de l’air = 1,0002 Indice de réfraction de l’eau = 1,333 (à 20°C et 589,3 nm) 3. Objectifs pour la suite Déterminer les valeurs de mesure de la turbidité dans l’eau déminéralisé et eau minérale Comprendre comment marche le montage écran LCD/ Breadboard/ Arduino et le mettre en place Photo des premier tests Déterminer la sensibilité du capteur en fonction de la masse de sédiment en solution avec une solution « test ». Déterminer la réplicabilité des expériences/mesures Faire des mesures/avoir des données avec les sédiments de LIMAGNE. + BLANC de mesure Déterminer un protocole précis de mesure (quantité de solution = volume d’eau/volume sed) 09/02/2024 : 1. Problème avec l'écran LCD : l'éclairage s'allume mais seuls des rectangles blancs apparaissent, pas d'affichage autre, malgré différents codes testés. Problème à résoudre (tests avec un autre écran) 2. Mesures de turbidité : Eau minérale (Cristalline) : 4.57 V Eau déminéralisée (prélevée dans la demi-journée des tests : 4.51 +/- 0,1 V Tests avec eau déminéralisée + quantités variables de sédiments : 1ère mesure avec le bout d’une paille de sédiment dans un tube d’eau déminéralisée agité manuellement après ajout du sédiment : 4.46 +/- 0.02 V 2e essai avec une plus grande quantité de sédiment : Temps (en secondes) voltage (en V) 0 3.96 +/- 0.02 V 60 4.05 120 4.08 180 4.09 240 4.09 3e essai avec le même tube (après nouvelle agitation) : Temps (en minutes) voltage (en V) 0 3.85 17 4.25 26 4.28 35 4.45 3. Codes utilisés : Mesure de la turbidité : turbidité1 void setup() { Serial.begin(9600); //Baud rate: 9600 } void loop() { int sensorValue = analogRead(A0);// read the input on analog pin 0: float voltage = sensorValue * (5.0 / 1024.0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): Serial.println(voltage); // print out the value you read: delay(500); } Code à tester sur un nouvel écran LCD : Code Hello World LCD #include "Wire.h" #include "LiquidCrystal_I2C.h" LiquidCrystal_I2C LCD(0x27,16,2); // définit le type d'ecran lcd 16 x 2 void setup() { LCD.init(); // initialisation de l'afficheur LCD.backlight(); LCD.setCursor(1, 0); LCD.print("HELLO"); LCD.setCursor(8, 1); LCD.print("WORLD"); } void loop() { LCD.noDisplay(); delay(1000); LCD.display(); delay(1000); } 16/02/2024 : Pour aujourd’hui, nous avions plusieurs objectifs : Tester un nouveaux code donné par Pierre Théry, qui marche déjà sur un projet différent, pour voir si un de nos composants est défectueux. Trouver une solution pour exporter nos données de mesures dans le but d’en faire des graphiques. Au début, nous avons refait une mesure de turbidité « test » avec l’eau déminéralisée de la semaine dernière, il s’est avéré qu’on retrouvait, dans des conditions similaires, quasiment la même valeur, soit 3.86 V. On en conclut que si les conditions de mesures sont « identiques », alors les mesures ont une reproductibilité fiable (en tout cas avec de l’eau déminéralisée). Aussi, on s’est rendu compte qu’il n’était sans doute pas essentiel d’utiliser de l’eau distillée « fraîche », à chaque fois pour faire le blanc, car il y a manifestement très peu de différence. code « Pierre » fusionné avec « turbidité1 » #include LiquidCrystal_I2C lcd(0x3F, 16, 2); // Adresse I2C de l'écran LCD et les dimensions (16x2) const float VOLTAGE_REFERENCE = 5.0; // Tension de référence de votre Arduino en volts void setup() { Serial.begin(9600); //Baud rate: 9600 lcd.begin(16, 2); lcd.backlight(); // Allumer le rétroéclairage de l'écran LCD lcd.print("Voltage: "); lcd.setCursor(0, 1); delay(5000); // Attendre 2 secondes pour que l'écran LCD démarre avant de continuer } void loop() { int sensorValue = analogRead(A0);// read the input on analog pin 0: float voltage = sensorValue * (5.0 / 1024.0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V) Serial.println(voltage); // print out the value you read: // Afficher les valeurs sur l'écran LCD lcd.setCursor(7, 0); lcd.print(" "); // Effacer l'ancienne valeur lcd.setCursor(7, 0); lcd.print(voltage, 2); // Afficher le voltage avec 2 décimales lcd.setCursor(4, 1); lcd.print(" "); // Effacer l'ancienne valeur lcd.setCursor(4, 1); lcd.print(voltage, 2); // Afficher la voltage avec 2 décimales */ delay(5000); } Le code donné par Pierre, fusionné avec le code « turbidité1 » s’est avéré non fonctionnel sur notre montage, alors qu’il l’est sur son montage d’origine. De plus, nous avons déterminé que notre écran fonctionne (en le branchant sur le montage de Pierre). Reste alors l’hypothèse du câblage ou de la Breadboard défectueux(se). Vraisemblablement, il y a un problème matériel (ce qui est peu probable), ou de compatibilité entre le code et les entrées du capteur qu’on n'arrive pas à déterminer, même après un long temps passé dessus. En plus de trouver une solution pour l’écran LCD, qui nous fait pour l’instant perdre trop de temps, nous devons aussi déterminer comment exporter nos données. Pour ce faire, dans un premier temps on reprend le montage « simple » (qui marche), c’est-à-dire avec uniquement le capteur, connecté à l’Arduino avec le code « turbidité1 ».  Puis, plusieurs étapes sont nécessaires : On veut d’abord modifier le code pour que la prise de donnée se fasse de manière séquencée. C’est à dire que nous voulons, pour le traitement des données sur tableur, les rendre moins denses et plus adaptées à la période de mesure. Dans les 2 premières minutes : 1 mesure toute les 2 secondes (car après agitation la turbidité évolue vite dans un premier temps) De 2 à 15 minutes : 1 mesure toutes les 30 secondes (dans cette période, la turbidité varie moins) A partir de 15 minutes : 1 mesure toutes les 5 minutes (c’est la phase où la turbidité revient lentement à sa valeur d’origine) Via nos recherches, nous sommes arrivés à modifier le code d’origine vers celui ci : Code « turbidité1 » modifié pour prendre en compte le temps de mesure, et la prise de données séquentielle en fonction du temps // Déclaration des variables globales unsigned long previousMillis = 0; // Variable pour stocker le temps du dernier déclenchement de mesure int interval = 2000; // Intervalle initial de mesure (2 secondes) void setup() { Serial.begin(9600); // Baud rate: 9600 } void loop() { unsigned long currentMillis = millis(); // Permet d'obtenir le temps écoulé depuis le démarrage de la carte Arduino // Si le temps écoulé est supérieur à l'intervalle, il est temps de prendre une mesure if (currentMillis - previousMillis >= interval) { // Enregistrer le temps actuel comme dernier temps de mesure previousMillis = currentMillis; int sensorValue = analogRead(A0); // Lire la valeur du capteur de turbidité sur la broche analogique A0 float voltage = sensorValue * (5.0 / 1024.0); // Convertir la valeur lue en tension // Afficher la valeur de tension mesurée Serial.println(voltage); // Consignes pour changer l'intervalle de mesure en fonction du temps écoulé if (currentMillis <= 120000) { // Pendant les 2 premières minutes (120 000 millisecondes) interval = 2000; // Faire une mesure toutes les 2 secondes } else if (currentMillis <= 900000) { // Jusqu'à 15 minutes (900 000 millisecondes) interval = 30000; // Faire une mesure toutes les 30 secondes } else { interval = 300000; // Après 15 minutes, faire une mesure toutes les 5 minutes } } } On veut aussi modifier le code pour mettre en forme les données qui s’affichent dans le moniteur en série. Les données de temps et de voltage se doivent d’être précédées de leur nature en haut de colonne dans serial monitor, les deux colonnes séparées par un espace. -> Code inséré dans « void setup » : Serial.println("Temps (en s) Voltage (en V)"); // Titres des colonnes avec un espace -> Code inséré dans « void loop » : // Afficher la durée écoulée et la valeur de tension mesurée Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.println(voltage); Arrêter la période de mesure après un temps défini (ici test avec 2 minutes). -> Code inséré dans la loop : // Arrêter le programme après 2 minutes (120 000 millisecondes) if (elapsedTime >= 120000) { exit(0); // Arrêter l'exécution du programme } Code final pour l’instant avec modifications « Turbidité2 » // Déclaration des variables globales unsigned long startTime = 0; // Temps de démarrage du programme unsigned long previousMillis = 0; // Variable pour stocker le temps du dernier déclenchement de mesure int interval = 2000; // Intervalle initial de mesure (2 secondes) void setup() { Serial.begin(9600); // Baud rate: 9600 startTime = millis(); // Enregistrer le temps de démarrage Serial.println("Temps (en s) Voltage (en V)"); // Titres des colonnes séparées avec un espace } void loop() { unsigned long currentMillis = millis(); // Obtient le temps écoulé depuis le démarrage de la carte Arduino // Calcul du temps écoulé depuis le démarrage du programme unsigned long elapsedTime = currentMillis - startTime; // Si le temps écoulé est supérieur à l'intervalle, il est temps de prendre une mesure if (currentMillis - previousMillis >= interval) {   // Enregistrer le temps actuel comme dernier temps de mesure   previousMillis = currentMillis;   int sensorValue = analogRead(A0); // Lire la valeur du capteur de turbidité sur la broche analogique A0   float voltage = sensorValue * (5.0 / 1024.0); // Convertir la valeur lue en tension   // Afficher la durée écoulée et la valeur de tension mesurée   Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes   Serial.print(" ");   Serial.println(voltage);   // Consignes pour changer l'intervalle de mesure en fonction du temps écoulé   if (elapsedTime <= 120000) { // Les 2 premières minutes (120 000 millisecondes)     interval = 2000; // Mesurer toutes les 2 secondes   } else if (elapsedTime <= 900000) { // Jusqu'à 15 minutes (900 000 millisecondes)     interval = 30000; // Mesurer toutes les 30 secondes   } else {     interval = 300000; // Après 15 minutes, mesurer toutes les 5 minutes   } } // Arrêter le programme après 2 minutes (120 000 millisecondes) if (elapsedTime >= 120000) {   exit(0); // Arrêter l'exécution du programme } } Pour traiter nos données, on a découvert l’outil « serial plotter » sur Arduino, qui trace tout seul une courbe de mesure depuis l’initialisation du programme. Malheureusement, le format n’est pas du tout idéal. On s’est rabattu pour l’instant vers l’option : Exportation des données d’une période de mesure sur excel pour en faire un graphique. Effectivement, avec la relativement faible quantité de mesure qu’on obtient avec les modifications, c’est largement faisable. Surtout que le nombre de période de mesure ne sera pas conséquent. -> On a testé et ça marche assez bien ! Objectifs pour la suite : Trouver une solution pour l’écran LCD. Problème résolu le 19/02 : dans lcd.setCursor(), il fallait mettre (11, 0) pour que le premier chiffre apparaisse en 11e colonne et en 1ere ligne… les colonnes 1 à 10 de l’écran lcd étant occupée par le texte “turbidite:” Code "Turbidité 3" #include #include LiquidCrystal_I2C lcd(0x3F, 16, 2); // Adresse I2C de l'écran LCD et les dimensions (16x2) const float VOLTAGE_REFERENCE = 5.0; // Tension de référence de votre Arduino en volts const int SENSOR_PIN = A0; // Broche analogique à laquelle est connecté le capteur void setup() { Wire.begin(); lcd.begin(16, 2); lcd.backlight(); // Allumer le rétroéclairage de l'écran LCD lcd.print("Turbidite: "); delay(2000); // Attendre 2 secondes pour que l'écran LCD démarre avant de continuer } void loop() { int sensorValue = analogRead(SENSOR_PIN); // Lecture de la valeur analogique du capteur // Convertir la valeur analogique en tension float voltage = sensorValue * (5.0/1024.0) ; // Afficher les valeurs sur l'écran LCD Serial.println("voltage (v)"); Serial.println(voltage); Serial.println(); lcd.setCursor(11, 0); //affiche le voltage a la 11eme colonne lcd.print(" "); // Effacer l'ancienne valeur lcd.setCursor(11, 0); lcd.print(voltage, 2); // Afficher la turbidité en volts avec 2 décimales delay(500); // Délai entre chaque lecture pour éviter les rafraîchissements trop rapides } Tester la constance des mesures avec la même concentration de sédiment. Trouver comment exporter facilement des données sur Excel. Commencer à faire les prises de données « calibrations » à différentes concentrations de sédiments pour obtenir des graphiques. 01/03/2024 : 1. Nous avons tout d'abord commencé par insérer le code "turbidité 3" dans le code "turbidité 2" afin d'afficher les valeurs sur l'écran LCD mais aussi dans le logiciel Arduino : Code "turbidité 4" #include #include LiquidCrystal_I2C lcd(0x3F, 16, 2); // Adresse I2C de l'écran LCD et les dimensions (16x2) const float VOLTAGE_REFERENCE = 5.0; // Tension de référence de votre Arduino en volts const int SENSOR_PIN = A0; // Broche analogique à laquelle est connecté le capteur // Déclaration des variables globales unsigned long startTime = 0; // Temps de démarrage du programme unsigned long previousMillis = 0; // Variable pour stocker le temps du dernier déclenchement de mesure int interval = 2000; // Intervalle initial de mesure (2 secondes) void setup() { Wire.begin(); lcd.begin(16, 2); lcd.backlight(); // Allumer le rétroéclairage de l'écran LCD lcd.print("Turbidite: "); delay(2000); // Attendre 2 secondes pour que l'écran LCD démarre avant de continuer Serial.begin(9600); // Baud rate: 9600 startTime = millis(); // Enregistrer le temps de démarrage Serial.println("T V"); // Titres des colonnes séparées avec un espace } void loop() { unsigned long currentMillis = millis(); // Obtient le temps écoulé depuis le démarrage de la carte Arduino // Calcul du temps écoulé depuis le démarrage du programme unsigned long elapsedTime = currentMillis - startTime; // Si le temps écoulé est supérieur à l'intervalle, il est temps de prendre une mesure if (currentMillis - previousMillis >= interval) { // Enregistrer le temps actuel comme dernier temps de mesure previousMillis = currentMillis; int sensorValue = analogRead(A0); // Lire la valeur du capteur de turbidité sur la broche analogique A0 float voltage = sensorValue * (5.0 / 1024.0); // Convertir la valeur lue en tension // Afficher la durée écoulée et la valeur de tension mesurée Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.println(voltage); // Consignes pour changer l'intervalle de mesure en fonction du temps écoulé if (elapsedTime <= 120000) { // Les 2 premières minutes (120 000 millisecondes) interval = 2000; // Mesurer toutes les 2 secondes } else if (elapsedTime <= 900000) { // Jusqu'à 15 minutes (900 000 millisecondes) interval = 30000; // Mesurer toutes les 30 secondes } else { interval = 300000; // Après 15 minutes, mesurer toutes les 5 minutes } // Afficher les valeurs sur l'écran LCD lcd.setCursor(11, 0); //affiche le voltage a la 11eme colonne lcd.print(" "); // Effacer l'ancienne valeur lcd.setCursor(11, 0); lcd.print(voltage, 2); // Afficher la force en newtons avec 2 décimales delay(500); // Délai entre chaque lecture pour éviter les rafraîchissements trop rapides } // Arrêter le programme après 45 minutes (2 700 000 millisecondes) if (elapsedTime >= 2700000) { exit(0); // Arrêter l'exécution du programme } } Problème : le montage avec l'écran LCD modifie considérablement nos mesures de turbidité. Il y a probablement des interférences entre le capteur et l'écran. Nous décidons donc de ne pas utiliser l'écran LCD pour le moment (après tant de travail dessus !) et de nous limiter au montage "simple". 2. Nous avons ensuite cherché à exporter nos données afin de pouvoir tracer des courbes sur Excel. Pour cela nous avons téléchargé le logiciel CoolTerm (gratuit). Mode d'emploi : Upload le programme sur la carte Arduino reliée au capteur Ouvrir le logiciel CoolTerm puis aller dans Connection -> Capture to Text/Binary file -> Start. Cela permet d'enregistrer le fichier en version .txt Cliquer ensuite sur Connect Si la fenêtre Serial Monitor est bien fermée dans Arduino, les valeurs apparaissent sur le logiciel CoolTerm On peut arrêter les mesures en cliquant sur Disconnect. Il faut ensuite ouvrir le fichier .txt dans Excel en veillant à bien choisir les tabulations et les espaces comme séparateurs, afin d'obtenir les valeurs de temps et de voltage dans deux colonnes séparées. Après avoir remplacé les points par des virgules, on peut tracer la courbe Voltage = f(Temps). Un premier test avec le tube du 16/02 nous donne la courbe suivante : 3. Nous pouvons enfin passer à une vraie phase de mesures avec une quantité exacte de sédiment. Nous avons prélevé 0,52 mg de sédiment de Limagnes et l'avons inséré dans 52 mL d'eau fraîchement déminéralisée, afin d'obtenir une concentration équivalente à 1 mg de sédiment pour 100 mL d'eau. Problème : le capteur n'est pas assez précis pour mesurer une aussi faible concentration. Aucune variation, autre que celle par défaut du capteur, n'était donc observable. Après discussion avec notre encadrant, nous avons décidé de ne pas descendre en dessous de 1 mg/100 mL. Objectifs pour la suite : Réaliser une solution mère à Qmère = 2g/20mL de sédiment Effectuer des mesures pour Qlow = 1 mg/mL de sédiment Effectuer des mesures pour Qhigh = à déterminer pour que ce soit saturant Effectuer des mesures à différentes concentrations intermédiaires Tracer une courbe v = f(Q) : Hypothèses pour l'allure de la courbe Reproduire le processus sur différents sédiments ? 08/03/2024 : Pour aujourd’hui les objectifs étaient : Réaliser une solution mère à Qmère = 2g/20mL de sédiment, qui servira à effectuer des dilutions à différentes concentrations en sédiment. Effectuer des mesures pour Qlow = 1 mg/mL de sédiment Effectuer des mesures pour Qhigh = à déterminer pour que ce soit saturant Effectuer des mesures à différentes concentrations intermédiaires Tracer une courbe v = f(Q) But : Déterminer le lien entre la concentration de sédiment en solution et la valeur de la turbidité, pour définir la plage des conditions de mesure du capteur. 1. D’abord, nous avons donc réalisé la solution mère à Qmère = 0,1 g.L-1, soit 5,2 g de sédiment pour 52mL d’eau. Pour ce faire, nous avons suivi ce protocole : Broyer un échantillon de Limagne à l’aide d’un mortier en agate Peser exactement 5,2 g de broyat à l’aide d’une balance de précision Mesurer le volume que représente 5.2 g d’échantillon broyé à l’aide d’une éprouvette graduée.                                 V poudre mère = 5.5 mL Transvaser la poudre dans un bécher de 250 mL Ajouter exactement 46.5mL d’eau déminéralisée dans le bécher. Recouvrir le bécher de parafilm pour éviter l’évaporation de l’eau. 2. Une fois la solution mère obtenue, nous avons réalisé une série de calculs à l’aide d’Excel pour déterminer le volume à prélever pour réaliser les dilutions aux Q désirées. En sachant que C1*V1=C2*V2, on a V1=(C2*V2)/C1 > Avec C1=Qmère ; V1=volume à prélever ; Qdésirée ; V2=volume désiré dans un tube de mesure = 52mL Calculs de volume à prélever et de volume à compléter par de l’eau déminéralisée : 3. A la suite de cela, nous avons réalisé les premières mesures de turbidité à 4 concentrations différentes. En partant de notre mesure de la semaine dernière, à Q=1.10-5g.mL-1 qui n’avait pas influencé la turbidité de la solution (dans la limite de notre capteur), nous avons choisi de “déblayer” le terrain en faisant 3 autres mesures espacées d’un facteur 10, de concentration. → Cela correspond aux valeurs Q1, Q2 et Q3 dans le tableur. Protocole suivi pour réaliser ces mesures : Faire la mesure du blanc avec un tube de mesure rempli uniquement d’eau déminéralisée (52 mL) Prendre un autre tube de mesure vide. Agiter le bécher contenant la solution mère pour homogénéiser la solution. Prélever à l’aide d’une pipette de précision le volume de solution mère nécessaire pour obtenir la concentration en sédiment désiré. Dans un tube de mesure à bouchon bleu, ajouter le volume de solution mère prélevé. Compléter avec de l’eau déminéralisée pour obtenir un volume final de mesure d'exactement 52mL. Placer le capteur de turbidité sur le tube de mesure Lancer le programme pour effectuer une mesure toutes les 500 ms Agiter le tube de mesure pour homogénéiser Prendre la première mesure de voltage immédiatement après que le mélange a été effectué Blanc avec eau déminéralisée = 4.64 V Une fois les 3 mesures effectuées, nous avons tracé la courbe v = f(Q) Courbe obtenue : Cela nous donne une première idée de la relation concentration en sédiment-turbidité. On remarque que pour une concentration de 10-2 g.mL-1, le voltage mesuré (= 0,59 V) approche fortement du voltage pour une occlusion totale du capteur (qui avait été mesuré aux alentours de  précédemment). On va donc considérer que notre “Qhigh” est atteint Aussi, nous devons réaliser des mesures supplémentaires entre les Q1, Q2 et Q3 pour ajouter des points à notre courbe et avoir une meilleure idée de la relation Concentration-Voltage( = 1/turbidité). 4. Dans un deuxième temps, Fabrice nous a proposé de réaliser un frottis avec un petit volume de notre solution mère pour qu’on ait une meilleure idée des éléments qui la compose. Notamment, l’idée était d’obtenir un ordre de grandeur de la granulométrie. Après le frottis réalisé, on a pu observer la lame au microscope optique en lumière polarisée analysée. → Eléments observés : fragments de coccolithes coccolithes coccosphères amas de calcite Ordre de grandeur de la granulométrie : 5 μm (intervalle de 2μm pour les fragments à 50 μm pour les amas) Objectifs suivants : Réaliser des photos du frottis Compléter la courbe v=f(Q) avec des Qintermédiaires 15/03/2024 : Notre objectif du jour était de déterminer plusieurs Qintermédiaires afin de pouvoir tracer une courbe v = f(Q) ayant une allure plus proche de la réalité et de vérifier que notre valeur Qhigh est la bonne. 1. Tout d'abord nous avons dilué le volume de solution-mère restant Vmère restant = 46,23 mL car la quantité de dépôts dans le fond du bécher rendait le pipetage de plus en plus compliqué. Nous avons ainsi obtenu une solution-mère diluée de Vmère diluée = 100,78 mL et à Qmère diluée = 0,05 g/mL. 2. Nous avons ensuite préparé différents tubes à différentes charges de sédiments et mesuré le voltage dans chacun d'eux. Cela nous a donc permis de compléter la courbe v = f(Q) : On remarque que la courbe a une allure logarithmique inverse et non pas linéaire comme nous pouvions le penser avec nos mesures de la semaine dernière seulement. De plus, la mesure de turbidité effectuée à Q = 1,2 x 10-2 g/mL nous permet de confirmer que cela correspond bien à la valeur Qhigh pour laquelle le capteur est quasiment saturé. 3. Pour la suite, nous allons devoir effectuer de nouvelles mesures afin de vérifier que notre protocole est réplicable et que nous obtenons toujours la même courbe. Pour ce faire, nous avons décidé de préparer 11 solutions de concentrations variables qui devraient nous permettre d'obtenir une courbe propre : En préparant chaque solution 3 fois, nous pourrons ainsi déterminer l'écart-type sur chaque mesure de turbidité et vérifier que nos mesures sont reproductibles. Pour cela, nous allons préparer une nouvelle solution-mère à 0,025 g/mL. Nous allons donc utiliser 292 mL de solution mère minimum. Il nous faudra donc préparer un volume de solution-mère suffisant pour nous permettre de réaliser nos tubes dans des conditions optimales ainsi que d'utiliser un barreau aimanté pour avoir une solution homogène en permanence (et pas remuée manuellement comme nous l'avons fait jusque là). Ainsi, pour un volume Vmère2 = 400 mL, nous allons avoir besoin d'une masse de sédiments telle que m = Qmère,2/Vmère,2 = 10 g. Objectifs suivants : Réaliser un cache opaque noir afin de permettre d'avoir une turbidité à blanc fixe et indépendante des conditions lumineuses extérieures Déterminer un protocole fixe à effectuer pour les mesures Préparer une solution mère unique avec un grand volume que nous pourrons utiliser pour réaliser tous nos tubes d'une traite (dans un grand bécher et avec un barreau aimanté) Déterminer et préciser toutes les incertitudes, sources d'erreur et de variation de notre protocole 22/03/2024 : 1. Dans un premier temps, nous avons mis en place un protocole expérimental pour réaliser nos futurs courbes : Protocole expérimental A. Préparation de la solution mère Broyer l’échantillon de sédiment que l’on souhaite étudier dans un mortier en agate nettoyé Peser avec une balance de précision la masse de sédiment souhaitée Mettre la poudre dans une éprouvette graduée et mesurer le volume correspondant Transvaser la poudre dans un bécher Mesurer le volume d’eau déminéralisée à ajouter pour obtenir le volume final désiré pour la solution mère dans la même éprouvette graduée que pour l’étape 3 (cela permet de récupérer le reste de poudre) Ajouter l’eau dans le bécher contenant le sédiment Passer le bécher dans un bain à ultra son pour homogénéiser au maximum la granulométrie de la solution Recouvrir le bécher de parafilm pour éviter l’évaporation de la solution mère B. Préparation des tubes et mesures Prendre un tube approprié et le nettoyer avec de l’eau Δ et le sécher Faire le blanc (avec de l’eau Δ) dans les bonnes conditions (c’est à dire avec un cache en aluminum pour être dans le noir) et vérifer qu’on obtient un voltage de 4,52±0,02V répéter l’étape 1 Prélever le volume nécessaire de solution mère et le volume d’eau correspondant (cf tableur excel) et les ajouter dans le tube Positionner le capteur sur le tube (vérifier que les broches sont complètement immergées) Faire la mesure dans les bonnes conditions : mettre de l’aluminium autour du tube afin que ce soit complètement à l’obscurité agiter le tube 3 fois relever la mesure au moment où le tube est posé à la verticale Entrer la valeur de voltage mesurée dans le tableur excel répéter 2 fois les étapes 3 à 7 pour un même concentration Faire les étapes 3 à 8 pour toutes les concentration dans le but d’obtenir une courbe final avec un écart type pour chaque mesure Remarque : Nous avons choisi d'utiliser de l'aluminium pour assurer des condition sans lumière lors des mesures 2. Ensuite, nous avons réalisé la solution mère qui nous servira à réaliser les mesures nécessaires pour produire 3 courbes v=f(Q) Solution mère à 0.025g.mL-1 dans un volume de 400mL au total et pour une masse en sédiment de 10g : 3. A la suite de ça, nous avons réalisé la suite du protocole expérimental jusqu'à obtenir une première courbe. Mesure du blanc : 4.52 V Données obtenues pour la courbe 1 : Allure de la courbe 1 : Objectifs suivants : Réaliser les courbes 2 et 3 pour pouvoir avoir un écart-type identifier précisément toutes les sources d'erreurs du protocole faire des photos des montages pour les ajouter au wiki faire des photos du frottis de Limagne pour illustrer nos propos 19/03/2024 : 1. Notre objectif du jour était d'effectuer les mesures de turbidité restantes. Après discussion avec Fabrice Minoletti pour qui nous réalisons ce projet, nous avons décider de ne pas réaliser 3 fois les mesures pour chaque concentration mais d'en réaliser 10 à trois concentrations différentes afin de pouvoir déterminer un écart-type moyen en chaque point. Nous avons donc décider de réaliser ces mesures à Q3 = 5x10-4 g/mL, Q5 = 2x10-3 g/mL et Q7 = 4x10-3 g/mL car ces points sont situés dans la partie de la courbe où le capteur est très sensible à des changements de turbidité. Nous avons ainsi réutilisé le même protocole que la semaine dernière pour réaliser nos solutions filles et effectuer nos mesures avec un cache en aluminium. Nous avons obtenu les résultats suivant : L'écart-type moyen sur ces mesures est de 0.044 V ce qui est faible compte-tenu de la sensibilité de notre capteur. On peut donc en déduire que notre protocole est bien reproductible et que les variations sont faibles. De plus, l'écart-type est similaire à ces 3 concentrations donc nous pouvons supposer qu'il le sera également à d'autres charges sédimentaires. Ainsi, nous pouvons ajouter l'écart-type sur notre courbe v = f(Q) : Nous avons également tracé la courbe de tendance grâce à Excel. Celle-ci s'apparente à une polynomiale de degré 4 dont l'équation pourra être utilisé pour prédire le résultat de potentielles mesures à différentes concentrations et donc calibrer le capteur en g/mL de charge sédimentaire. 2. Nous avons par ailleurs réalisé un nouveau frottis avec notre solution mère, afin de déterminer précisément la nature des éléments présents dedans. Protocole frottis Prendre une lame de verre propre La lécher des deux côtés Poser la lame sur une plaque chauffante à 50°C Déposer quelques gouttes d'eau déminéralisée sur la lame Déposer quelques gouttes de solution dans l'eau et bien étaler en pipetant dedans Laisser sécher pendant au moins 10 minutes Mettre un point de colle optique sur une lamelle Déposer la lamelle sur la lame et mettre le tout sur la plaque chauffante en veillant à ce que la colle s'étale bien Mettre sous une lampe UV Nous avons ensuite observé le résultat de notre frottis au microscope et pu identifier les fragments présents dans notre solution. Éléments observés : Coccolithes de taille allant de 3,5 à 4 µm Coccosphères de 6-7 µm Oxydes de fer Photo du frottis de Ste Marguerite broyé puis passé aux ultrasons, observé au MO Objectifs suivants : Lister toutes les incertitudes de notre protocole Calculer la variance de nos mesures Mol affiche la concentration de la solution (équation de la forme Q = valeur numérique + résidu systématique) 05/04/2024 : 1. Nous avons commencé par lister toutes les sources d'incertitudes de notre protocole, dans un soucis de clarification. Liste des incertitudes : Notre solution-mère n’est pas parfaitement homogène : des grosses particules sédimentaires sont présentes dans le fond du bécher et en suspension. Ainsi, lors du pipetage, ces grosses particules ont une faible probabilité d’être pipettées, donc la solution dans le tube est toujours légèrement moins concentrée qu’en théorie. De plus, les grosses particules peuvent bloquer le cône de la pipette et donc modifier le volume prélevé (cette incertitude peut être enlevée en faisant suffisamment attention ?) Incertitudes liées à la pipette elle-même A chaque fois, nous avons rempli le tube jusqu’au trait de jauge. Le volume n’était donc pas parfaitement exact mais toujours suffisant pour que les broches du capteur soient totalement immergées, afin que les mesures se fassent dans des conditions optimales. La seule conséquence est donc liée à une faible variation de la charge sédimentaire dans notre tube. L’obscurité a été faite grâce à un cache en aluminium qui ne peut pas garantir une obscurité idéale. Pour avoir des conditions parfaites, il aurait fallu se mettre dans une pièce complètement noire ou créer un cache noir sur mesure. Un seul capteur a été utilisé. Nous n’avons donc pas testé la reproductibilité de notre protocole avec un autre capteur similaire Dans des conditions constantes, il y a une variation de 0,02 V environ, qui est dûe au capteur. incertitudes liées à l’expérimentateur Lecture de la mesure : les mesures se font toutes les 500 ms. Or on lit la mesure avec à plus ou moins une seconde d’écart près après le dépôt du tube dans le portoir. Cependant, cela ne change pas réellement la valeur de turbidité notée car il n’y a pas de variation significative dans les premières secondes. 2. Modélisation, sortie Arduino Il s'est avéré que notre équation de modélisation (polynôme d'ordre 4) pour notre courbe V = f(Q) présentait plusieurs inconvénients. D'abord, à la différence de modèles comme une exponentielle ou un logarithme, un polynôme d'ordre 4 ne peut pas être rapproché à une réelle signification physique (exemple : la décroissance radioactive pour une exponentielle). Aussi, il est presque impossible de résoudre l'équation. Nous voulions adapter notre programme sous Arduino pour que les mesures en volt soient automatiquement converties en charge sédimentaire. Or, il est impossible de trouver x dans l'équation modèle : y = 6*10^8x^4 - 2*10^7x^3 + 273764x^2 - 1685,8x + 4,5528 avec x = inconnue = charge sédimentaire ; y = Voltage. Une première approche serait de mettre la charge en ordonnée et le voltage en abscisse, ce qui rendrait la conversion possible en sortie Arduino. D'un autre côté, nous avons essayé d'adapter notre courbe au modèle exponentiel mais le logiciel Excel ne permet pas de modifier soi-même les paramètres. En passant par le logiciel R, nous voulions voir si le modèle exponentielle ajusté au maximum pourrait convenir. Code de la courbe sous R library(minpack.lm) library(ggplot2) y <- c(data3$Q) x <- c(data3$V) start_values <- c(a=4, b=2) fit <- nls(y ~ a * exp(b * x), start = start_values, algorithm = "port", control = nls.control(maxiter = 1000)) summary(fit) # plotting ggplot(data.frame(x, y), aes(x, y)) + geom_point(size=3) + geom_smooth(aes(x, predict(fit, newdata = data.frame(x))), se=FALSE, size=1, color="blue") + ggtitle("Suivi de la concentration en sédiment de Limagne en fonction du voltage") + xlab("Voltage (en V)") + ylab("[Limagne] (en g/mL)")+ annotate("text", x=3, y=0.0091, label="y = 0.0149441 * e(-1.2379691 * x)")+ theme_bw()+ theme(plot.title = element_text(hjust = 0.5)) install.packages("minpack.lm") install.packages("ggplot2") Figure obtenue sous R On obtient une modélisation assez satisfaisante avec cette méthode : c'est probablement ce modèle que nous allons retenir pour la suite. 3. Poster et présentation orale Nous avons commencé à réfléchir à la structure de notre poster, sous les conseils de Fabrice Minoletti Ebauche de structure du poster Objectifs suivants : Finaliser d'adapter la modélisation et le code Arduino Préparer le matériel pour une possible démonstration lors de la présentation orale Préparer notre poster de présentation 26/04/2024 : Notre objectif du jour était de finaliser notre modélisation afin de pouvoir mettre en place notre code Arduino final. 1. Modélisation de la courbe et détermination de l'équation Après avoir réétudié notre courbe v = f(Q), nous avons supposé qu'il est plus judicieux d'associer notre exponentielle modèle avec une droite. En effet, on peut remarquer que la première partie de la courbe suit bien une exponentielle mais que la seconde partie s'apparente plus à une droite. Pour cela, nous avons conservé notre équation de la forme y = ax + exp(bx) mais nous y avons ajouté une seconde partie avec l'équation d'une droite. Ainsi, on obtient une équation de la forme : y = ax + exp(bx) + cx + d avec y la charge sédimentaire en mg/mL et x le voltage en volts. La courbe ainsi obtenue sous R n'étant pas convaincante, nous avons rentré nos valeurs de charge sédimentaire, de voltage ainsi que notre équation dans Matlab. On obtient alors le graphique suivant dans lequel on voit que la courbe modèle correspond très bien aux valeurs expérimentales : Le logiciel nous a également déterminé les valeurs des différents paramètres de notre courbe avec leurs écarts-types. Ainsi, on obtient :     Valeur     Lower        Upper  a 0.0176      0.0152      0.0200b -3.1739    -3.7525    -2.5952c -0.0009     -0.0011    -0.0008d 0.0041      0.0035      0.0047 Le coefficient de régression R2 étant de 0.9986, c'est-à-dire très proche de 1, on en déduit que notre modèle est bien adapté à nos valeurs. On obtient donc l'équation suivante : Q = 0.018 * exp(-3.174 * voltage) - 0.0009 * voltage + 0.004 2. Adaptation du code Arduino Notre objectif est de créer un code Arduino permettant de déterminer la charge sédimentaire d'une suspension en fonction du voltage mesuré par le capteur. Pour cela, nous avons modifié le code préexistant afin d'y ajouter le calcul de la charge (=turbidité). Tout d'abord nous avons défini les limites de notre modèle au-delà desquelles notre modèle n'est plus valide car le capteur est saturé. const float MIN_VOLTAGE = 0.25; // Tension minimale pour le calcul de turbidité const float MAX_VOLTAGE = 4.45; // Tension maximale pour le calcul de turbidité Nous avons ensuite inséré l'équation de la turbidité que nous avons obtenue précédemment : // Utiliser l'équation de courbe modèle pour calculer la turbidité float turbidity = 0.018 * exp(-3.174 * voltage) - 0.0009 * voltage + 0.004; On indique ensuite au programme de vérifier que la valeur de tension est comprise dans notre intervalle. Si oui, il nous affiche le temps écoulé depuis le début des mesures, le voltage mesuré et la turbidité calculée. Sinon, le programme affiche un message "turbidité hors calibration" signifiant à l'utilisateur que le capteur n'est pas calibré pour mesurer une turbidité à ce voltage. Autrement, le voltage mesuré est trop faible ou trop élevé par rapport à la sensibilité du capteur. // Vérifier si la tension est dans la plage spécifiée if (voltage >= MIN_VOLTAGE && voltage <= MAX_VOLTAGE) { // Afficher la durée écoulée et la valeur de tension mesurée Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.println(turbidity, 5); //Aficher la valeur de la turbidité avec 5 décimales. La fonction serial.println permet d'aller à la ligne } else { // La tension est hors de la plage de calibration Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.println("turbidité hors calibration"); // Afficher la valeur de la turbidité avec 5 décimales } 3. Détermination de l'écart-type Nous souhaitons également déterminer un écart-type qui s'affichera sur le code pour chaque valeur de turbidité. Pour cela, nous sommes partis sur une première méthode : calculer l'écart-type σ en fonction des dérivées partielles en a, b, c et d, ce qui correspond à l'incertitude sur notre modèle et y ajouter l'incertitude sur nos propres valeurs : σy = (σa + ab * σb) * ebx + xσc + σd + (ab ebx + c) * σx Pour cela nous avons utilisé les valeurs obtenues sur Matlab pour calculer l'écart-type moyen sur a, b, c et d respectivement. On obtient : σ(a) 2,40E-03 σ(b) 5,79E-01 σ(c) 1,50E-04 σ(d) 6,00E-04 Pour σx, nous avons utilisé la valeur de l'écart-type moyen calculé le 19/03 soit 0, 04438 V. Cependant, après avoir installé cet écart-type dans Arduino afin qu'il soit calculé en chaque point, nous avons remarqué que les valeurs étaient beaucoup trop élevées pour que l'écart-type soit significatif. Nous avons donc choisi d'utiliser une autre méthode qui ne calcule pas l'écart-type en chaque point mais qui permet d'obtenir une valeur moyenne qui sera correcte à chaque fois. Nous avons ainsi utilisé la formule de la SCER (Somme des Carrés des Écarts résiduelle) qui permet de déterminer la dispersion des résidus. SCER = Σ(yobservé - ythéorique)2 Les ythéorique ont été obtenus grâce à l'équation de notre courbe tandis que les yobservé correspondent aux charges sédimentaires que nous avions mis en place lors de nos mesures. On trouve : SCER = 3.17 * 10-7 Cela nous permet de calculer l'écart-type des résidus d'après la formule : σ2 = SCER/(N-n) où N correspond au nombre d'échantillons (ici 11 mesures) et n le nombre de paramètres (ici 4 : a, b, c et d). On a donc σ = √(3.17 10-7 / (11-4)) = 2.13 * 10-4 g/mL 4. Insertion de l'écart-type dans Arduino Tout d'abord, nous avons rajouté une colonne correspondant à l'écart-type dans l'affichage de nos résultats : Serial.println("T V Q σ"); // Titres des colonnes séparées avec un espace Nous avons ensuite indiquer que nous voulons afficher la valeur de σ : // Vérifier si la tension est dans la plage spécifiée if (voltage >= MIN_VOLTAGE && voltage <= MAX_VOLTAGE) { // Afficher la durée écoulée et la valeur de tension mesurée Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.print(turbidity, 5); //Aficher la valeur de la turbidité avec 5 décimales. La fonction serial.println permet d'aller à la ligne Serial.print(" "); Serial.println(2.13E-04, 6); //Afficher l'écart-type avec 6 décimales On obtient alors le code suivant : Code Arduino Final pour calculer la turbidité en fonction du voltage mesuré #include const float VOLTAGE_REFERENCE = 5.0; // Tension de référence de votre Arduino en volts const int SENSOR_PIN = A0; // Broche analogique à laquelle est connecté le capteur const float MIN_VOLTAGE = 0.25; // Tension minimale pour le calcul de turbidité const float MAX_VOLTAGE = 4.45; // Tension maximale pour le calcul de turbidité // Déclaration des variables globales unsigned long startTime = 0; // Temps de démarrage du programme unsigned long previousMillis = 0; // Variable pour stocker le temps du dernier déclenchement de mesure int interval = 1000; // Intervalle initial de mesure (1000 millisecondes) void setup() { Serial.begin(9600); // Baud rate: 9600 startTime = millis(); // Enregistrer le temps de démarrage Serial.println("T V Q σ"); // Titres des colonnes séparées avec un espace } void loop() { unsigned long currentMillis = millis(); // Obtient le temps écoulé depuis le démarrage de la carte Arduino // Calcul du temps écoulé depuis le démarrage du programme unsigned long elapsedTime = currentMillis - startTime; // Si le temps écoulé est supérieur à l'intervalle, il est temps de prendre une mesure if (currentMillis - previousMillis >= interval) { // Enregistrer le temps actuel comme dernier temps de mesure previousMillis = currentMillis; int sensorValue = analogRead(A0); // Lire la valeur du capteur de turbidité sur la broche analogique A0 float voltage = sensorValue * (5.0 / 1024.0); // Convertir la valeur lue en tension // Utiliser l'équation de courbe modèle pour calculer la turbidité float turbidity = 0.018 * exp(-3.174 * voltage) - 0.0009 * voltage + 0.004; // Vérifier si la tension est dans la plage spécifiée if (voltage >= MIN_VOLTAGE && voltage <= MAX_VOLTAGE) { // Afficher la durée écoulée et la valeur de tension mesurée Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.print(turbidity, 5); //Aficher la valeur de la turbidité avec 5 décimales. La fonction serial.println permet d'aller à la ligne Serial.print(" "); Serial.println(2.13E-04, 6); //Afficher l'écart-type avec 6 décimales } else { // La tension est hors de la plage de calibration Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.println("turbidité hors calibration"); // Afficher la valeur de la turbidité avec 5 décimales } } } Nous avons réussi à atteindre notre objectif ! En utilisant le capteur et notre programme, l'expérimentateur pourra connaître la charge sédimentaire d'une suspension de sédiments de Limagne. Ce projet pourra être réutilisé pour des types de sédiments similaires ou être adapté sur d'autres sédiments. Objectifs suivants : Préparer le matériel pour une possible démonstration lors de la présentation orale Préparer notre poster de présentation III. Projet et résultats finaux 1) Présentation du capteur Nous avions à disposition un capteur de turbidité DFRobot - M021.00084. Caractéristiques techniques Voltage de fonctionnement : 5V Intensité du courant électrique en fonctionnement : 40mA (MAX) Temps de réponse : <500ms Méthodes de sortie : Sortie analogique: 0-4.5V Sortie digitale : Signal faible/fort (ajustable en adaptant le potentiomètre) Température de fonctionnement : 5℃~90℃ Température de stockage : -10℃~90℃ Poids : 30g Dimensions : 38mm*28mm*10mm Fonctionnement du capteur Représentation schématique du fonctionnement de la "tête" du capteur Une première broche contient un émetteur de lumière, l’autre un récepteur. La tension du système varie en fonction de la quantité de lumière transmise. Plus la turbidité du milieu extérieur (=entre les deux broches) est élevée, plus la tension électrique en sortie du capteur est faible. La tension électrique en volts est donc reliée négativement à la turbidité. Notons, qu’il est plus habituel de voir la turbidité quantifiée en NTU (Nephelometric Turbidity Unit). Nous n’avons cependant pas testé la correspondance entre le voltage mesuré par notre capteur et les NTU. De ce fait, toutes nos mesures et nos résultats sont pour l’instant à considérer uniquement avec ce capteur (jusqu’à ce que la relation volts-NTU soit caractérisée). Néanmoins, cela n’est pas censé avoir d’impact sur la relation que l’on a réussi à caractériser entre la charge de sédiment en suspension et la turbidité de la suspension. 2) Déroulé du projet et résultats Nous avons relié le capteur à une carte Arduino UNO de la manière suivante : Nous avons créé un premier programme sur Arduino qui nous a permis d’afficher la turbidité mesurée dans un tube rempli d’eau. turbidité1 void setup() { Serial.begin(9600); //Baud rate: 9600 } void loop() { int sensorValue = analogRead(A0);// read the input on analog pin 0: float voltage = sensorValue * (5.0 / 1024.0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): Serial.println(voltage); // print out the value you read: delay(500); } Nos premiers tests du capteur nous ont permis de mesurer la turbidité de différents milieux. Nous avons alors remarqué que la turbidité de l’eau de Paris variait d’une semaine à l’autre. Nous avons donc décidé de réaliser toutes nos mesures dans de l’eau déminéralisée, dont la turbidité nous est apparue comme constante : 4.51 +/- 0.1V. Nous avons également déterminé le volume exact à mettre dans les tubes afin que les broches du capteur soient complètement immergées mais sans que l’eau déborde lorsqu’on insère le capteur sur le tube, car le changement de volume influencerait la charge de notre suspension. En effectuant des mesures de turbidité dans des conditions constantes, il nous est apparu que les valeurs mesurées par le capteur varient de +/- 0.02 V. Cette variabilité devra être prise en compte pour n’importe quelle mesure effectuée avec ce capteur. Il était ensuite temps d’effectuer les premières mesures de turbidité en ajoutant du sédiment dans le tube. Nous avons commencé par insérer une quantité aléatoire de sédiment dans de l’eau déminéralisée. Nous avons suivi l’évolution de la turbidité dans ce tube au cours du temps et après agitation. De manière logique, la turbidité en haut du tube (où est inséré le capteur) diminue au cours du temps car les particules se déposent au fond. Nous savons donc que notre capteur fonctionne correctement. Cf entrée du 01/03/2024 dans le journal de bord pour plus d'informations Il a alors fallu déterminer la plage de sensibilité du capteur, c’est-à-dire les limites au-delà desquelles le capteur n’est plus suffisamment sensible pour mesurer correctement la turbidité associée à la charge sédimentaire. Pour cela, nous avons réalisé une solution mère très concentrée à Qmère = 0.1 g/L, puis nous avons effectué une série de dilutions afin d’obtenir une première courbe du voltage en fonction de la charge. Nous avons alors pu déterminer la limite supérieure (Qhigh) au-delà de laquelle la charge de la suspension est trop élevée pour que la turbidité soit mesurée correctement par le capteur, tout comme la limite inférieure Qlow. Les mesures doivent donc être réalisées pour des charges sédimentaires comprises entre 1 mg/mL et 12 mg/mL. Cf entrées des 8 et 15/03/2024 dans le journal de bord pour plus d'informations Nous avons ensuite dilué notre solution mère pour faciliter le pipetage. On a ainsi pu déterminer la turbidité des suspensions à différentes charges sédimentaires. Cela nous a permis de commencer à visualiser la relation entre la charge et la turbidité. Nous avons alors réalisé une nouvelle solution mère, en suivant un protocole précis, puis réalisé des dilutions à intervalles réguliers. Nous avons ainsi obtenu une courbe Q = f(v) ayant une allure exponentielle inverse. Cf entrée du 22/03/2024 dans le journal de bord pour plus d'informations Nous avons également décidé de vérifier le sérieux de cette courbe en réalisant des réplicats pour 3 charges données. Nous avons obtenu un écart-type moyen de 0.044 V, ce qui est très faible par rapport aux valeurs de voltage. On peut donc supposer que la courbe obtenue est fiable. Cf entrée du 19/03/2024 dans le journal de bord pour plus d'informations Puis, nous avons également associé notre courbe à un modèle de régression. Suite à différents tests, nous sommes parvenu à la conclusion que le modèle le plus proche de notre courbe est une exponentielle associée à une droite, de la forme y = ax + exp(bx) + cx + d avec y la charge sédimentaire en mg/mL et x le voltage en volts. On obtient un coefficient de régression de 0.9986 donc très proche de 1. Le modèle est donc bien adapté à nos valeurs. De plus, ce modèle d’exponentielle + courbe nous semble très satisfaisant car il nous permet d’obtenir une relation linéaire entre la charge et la turbidité dans l’ordre de grandeur qui sera utilisé par Fabrice Minoletti. Nous y avons également associé une valeur d’écart-type déterminée grâce à Matlab et l’équation SCER = Σ(yobservé - ythéorique)2. On obtient  σ = 2.13 * 10-4 g/mL. Enfin, nous avons adapté notre programme Arduino (cf 19/03)  afin d’en créer un permettant de déterminer automatiquement la charge sédimentaire d'une suspension en fonction du voltage mesuré par le capteur et en y associant l’écart-type. Cela permettra à n’importe quel expérimentateur de suivre la charge sédimentaire de la suspension au niveau de capteur en temps direct. Il saura ainsi quand rajouter du sédiment, de l’eau ou mettre le moteur en marche. Cf entrée du 26/04/2024 dans le journal de bord pour plus d'informations Code Arduino Final pour calculer la turbidité en fonction du voltage mesuré #include const float VOLTAGE_REFERENCE = 5.0; // Tension de référence de votre Arduino en volts const int SENSOR_PIN = A0; // Broche analogique à laquelle est connecté le capteur const float MIN_VOLTAGE = 0.25; // Tension minimale pour le calcul de turbidité const float MAX_VOLTAGE = 4.45; // Tension maximale pour le calcul de turbidité // Déclaration des variables globales unsigned long startTime = 0; // Temps de démarrage du programme unsigned long previousMillis = 0; // Variable pour stocker le temps du dernier déclenchement de mesure int interval = 1000; // Intervalle initial de mesure (1000 millisecondes) void setup() { Serial.begin(9600); // Baud rate: 9600 startTime = millis(); // Enregistrer le temps de démarrage Serial.println("T V Q σ"); // Titres des colonnes séparées avec un espace } void loop() { unsigned long currentMillis = millis(); // Obtient le temps écoulé depuis le démarrage de la carte Arduino // Calcul du temps écoulé depuis le démarrage du programme unsigned long elapsedTime = currentMillis - startTime; // Si le temps écoulé est supérieur à l'intervalle, il est temps de prendre une mesure if (currentMillis - previousMillis >= interval) { // Enregistrer le temps actuel comme dernier temps de mesure previousMillis = currentMillis; int sensorValue = analogRead(A0); // Lire la valeur du capteur de turbidité sur la broche analogique A0 float voltage = sensorValue * (5.0 / 1024.0); // Convertir la valeur lue en tension // Utiliser l'équation de courbe modèle pour calculer la turbidité float turbidity = 0.018 * exp(-3.174 * voltage) - 0.0009 * voltage + 0.004; // Vérifier si la tension est dans la plage spécifiée if (voltage >= MIN_VOLTAGE && voltage <= MAX_VOLTAGE) { // Afficher la durée écoulée et la valeur de tension mesurée Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.print(turbidity, 5); //Aficher la valeur de la turbidité avec 5 décimales. La fonction serial.println permet d'aller à la ligne Serial.print(" "); Serial.println(2.13E-04, 6); //Afficher l'écart-type avec 6 décimales } else { // La tension est hors de la plage de calibration Serial.print(elapsedTime / 1000); // Convertir les millisecondes en secondes Serial.print(" "); Serial.print(voltage, 3); // Afficher la valeur du voltage avec 3 décimales Serial.print(" "); Serial.println("turbidité hors calibration"); // Afficher la valeur de la turbidité avec 5 décimales } } } 3) Composition du sédiment étudié Pour toutes nos mesures, et en particulier pour la réalisation des solutions mère ayant permis d'aboutir à la courbe et à l'équation modèle finale, nous avons utilisé un seul sédiment de nature calcaire, que Fabrice Minoletti nous a gentiment fourni. L'échantillon est nommé "Ste Marguerite" et a été récolté dans le bassin de la Limagnes aux coordonnées 45°40N 3°13,4E. Nous avons observé plus en détail sa composition en réalisant un frottis que nos avons par la suite observé au microscope optique à très fort grossissement dans le laboratoire de Fabrice Minoletti. C'est un sédiment calcaire, riche en coccolithes allant de 3,5 à 4μm. Il contient également des coccosphères de 6-7μm et des oxydes de fer de taille variable. Photo du frottis effectué à partir de notre 2ème solution mère, observé au microscope optique en lumière polarisée circulaire, au grossissement x1575. 4) Incertitudes Nos incertitudes peuvent être liées à l’expérimentation en elle-même, comme l’homogénéité de notre solution-mère lors du pipetage ou les incertitudes sur le matériel comme les pipettes. Il y a également des incertitudes liées au capteur, à l’expérimentateur et à la lecture de la mesure. Liste des incertitudes Notre solution-mère n’est pas parfaitement homogène : des grosses particules sédimentaires sont présentes dans le fond du bécher et en suspension. Ainsi, lors du pipetage, ces grosses particules ont une faible probabilité d’être pipettées, donc la solution dans le tube est toujours légèrement moins concentrée qu’en théorie. De plus, les grosses particules peuvent bloquer le cône de la pipette et donc modifier le volume prélevé (cette incertitude peut être enlevée en faisant suffisamment attention ?) Incertitudes liées à la pipette elle-même A chaque fois, nous avons rempli le tube jusqu’au trait de jauge. Le volume n’était donc pas parfaitement exact mais toujours suffisant pour que les broches du capteur soient totalement immergées, afin que les mesures se fassent dans des conditions optimales. La seule conséquence est donc liée à une faible variation de la charge sédimentaire dans notre tube. L’obscurité a été faite grâce à un cache en aluminium qui ne peut pas garantir une obscurité idéale. Pour avoir des conditions parfaites, il aurait fallu se mettre dans une pièce complètement noire ou créer un cache noir sur mesure. Un seul capteur a été utilisé. Nous n’avons donc pas testé la reproductibilité de notre protocole avec un autre capteur similaire Dans des conditions constantes, il y a une variation de 0,02 V environ, qui est due au capteur. incertitudes liées à l’expérimentateur Lecture de la mesure : les mesures se font toutes les 500 ms. Or on lit la mesure avec à plus ou moins une seconde d’écart près après le dépôt du tube dans le portoir. Cependant, cela ne change pas réellement la valeur de turbidité notée car il n’y a pas de variation significative dans les premières secondes. 5) Pistes non-abouties Pour rendre notre système expérimental plus aboutit, nous avions voulu intégrer un écran LCD, permettant de lire en temps réel les mesures de turbidité. Nous avons atteint cet objectif la semaine du 01/03/2024 après plusieurs semaines de mise au point. Malheureusement, ce dispositif n'a pas été gardé, car le raccordement de l'écran au système initial induisait des perturbations de tension électrique, rendant les mesures trop imprécises et aléatoires. Cf entrées des semaines du 02, 09, 16/02/2024 et 01/03/2024 pour voir les étapes de mise au point du système avec l'écran LCD Lorsque nous avons voulu adapter un modèle de régression à notre courbe expérimentale finale, une première approche a été d'essayer sur le logiciel Excel le type de régression modélisant le mieux nos données. Il est apparu qu'un polynôme de degrés 4 était très adapté à notre courbe expérimentale. Cependant, on s'est aperçu qu'il était quasiment impossible de résoudre une telle équation, même avec de puissants logiciels. De plus, un tel modèle n'a aucune vraie signification physique, à la différence d'un modèle exponentielle avec la décroissance radioactive par exemple. On s'est alors tourné vers les logiciels R et MATLAB, nous laissant bien plus de contrôle que Excel, ce qui nous a permis au final de trouver très adéquat mêlant exponentiel et linéaire. Cf entrées des semaines du 19/03/2024, 5 et 26/04/2024 pour plus d'informations Une fois la régression trouvée, nous avions voulu évaluer et quantifier les incertitudes de celle-ci via le calcul des écarts-types dus au modèle, pour pouvoir l'intégré directement aux sorties du système de mesure expérimental sous Arduino. Pour cela, nous avons d'abord pensé avec l'aide de Loïc Labrousse à utiliser les écarts-types des facteurs respectifs de l'équation y = ax + exp(bx) + cx + d, donnés par MATLAB. Cette méthode nous demandait de passer par l'ajout des écarts-types en passant par les dérivées partielles respectives en chaque terme. Malheureusement, nous n'obtenions pas un résultat satisfaisant via cette méthode, on a donc préféré passer par la somme des carrés des écarts résiduels (SCER) comme vu en cours de statistiques de L3. Cf entrée de la semaine du 26/04/2024 pour plus de détails IV. Logiciels et machines utilisés Système de mesure de la turbidité : Logiciel Arduino Capteur de turbidité : DFRobot - M021.00084 Carte Arduino UNO 3 fils électriques mâle-mâle Câble USB-A vers USB-B Système d’expérimentation : Sédiment qu’on veut étudier Mortier en agate Balance de précision Eau déminéralisée Pipettes de 10 mL, 1 mL et 100 µL Béchers et éprouvettes graduées Tubes du diamètre exact du capteur (tubes en plastique de 50 mL par exemple) Cuve à ultrasons Papier aluminium Agitateur magnétique et barreau aimanté Analyse des résultats et statistiques : Excel Arduino R MatLab Frottis : Lame et lamelle Colle optique Banc (?) chauffant Lampe UV Microscope polarisant de haute qualité V. Perspectives Notre projet est une étape intermédiaire, avant l’application au dispositif de filtration de Fabrice Minoletti. En effet, il était nécessaire de caractériser la relation turbidité-charge sédimentaire en suspension pour comprendre les limites et la fiabilité du système, ou en somme, ce qu’il était possible de faire. Par la suite, il faudrait adapter notre système de mesure au dispositif expérimental de filtration. Dans ce sens, il sera nécessaire de bien choisir l’emplacement du capteur dans la colonne de filtration pour que les mesures de turbidité aient un sens. Une des difficultés sera d’allier l'hélice/moteur de remise en suspension des particules avec notre capteur. De plus, nous avons principalement étudié comment la turbidité évoluait en fonction de différentes charges, avec des mesures effectuées dans une solution homogène. Sur ce point, le dispositif de la colonne de filtration diffère, car il y a peu de chances pour que la suspension soit homogène (reste à tester). Par conséquent notre équation modèle ne serait pas adaptée à des mesures dans des conditions non homogènes. Cependant, il est possible qu’on puisse considérer la suspension comme homogène lorsque l’hélice de remise en suspension est en route, en particulier vu que les charges ajoutées dans le dispositif sont petites (à tester). D’un autre côté, notre équation-modèle est uniquement adaptée à un type de suspension : avec le sédiment de Limagnes. Il faudrait donc envisager d'établir une équation de régression pour chaque sédiment à filtrer. Enfin, il faudrait adapter le système/code et déterminer comment savoir quand remettre en suspension les particules en fonction de la turbidité mesurée (possibles automatisation du programme entre autres). VI. Poster VII. Remerciements Nous tenons à remercier vivement Fabrice Minoletti pour son aide et sa disponibilité tout au long de ce projet. Merci également à Loïc Labrousse de nous avoir accompagné dans la mise en place et l’analyse de nos résultats, ainsi qu’à Pierre Théry, sans qui nous n’aurions pas pu mener à bien toute la partie technique de TurboCocco. Bibliographie : Projet TurboCocco 2021-2022 : https://wiki.fablab.sorbonne-universite.fr/wiki/doku.php?id=wiki:projet:turbococo_arthur_manon_elise#dokuwiki__top Projet TurboCocco 2022-2023 : https://wiki.fablab.sorbonne-universite.fr/BookStack/books/projets-due-2022-2023/page/turbococco-v2 Comment mesurer la turbidité en labo ? :  https://kalstein.eu/comment-mesure-t-on-la-turbidite-en-laboratoire/ Capteur de turbidité : https://wiki.dfrobot.com/Turbidity_sensor_SKU__SEN0189 Lien avec référence du capteur + vidéo explicative du fonctionnement :  https://www.dfrobot.com/product-1394.html DIY Turbidity Meter using Turbidity Sensor & Arduino : https://how2electronics.com/diy-turbidity-meter-using-turbidity-sensor-arduino/ Ecran LCD avec Arduino : https://docs.arduino.cc/learn/electronics/lcd-displays/?_gl=1*1w37mui*_ga*NDQ0ODIxMjg0LjE3MDY4Nzc5NDM.*_ga_NEXN8H46L5*MTcwNjk1Nzk3Mi4zLjEuMTcwNjk1Nzk5OC4wLjAuMA..*_fplc*Zk51eHJHaXZxM2tLSzQlMkYzczMzS1B6Wm5uZnZpSFh6Nk4xUzdsZUI3STZIUmdmOWF2JTJCb25IMSUyQkZiY0x0aGdpUUpXUmk5T0dwcTZ3a2dSOUxDWmJqR3pMcms4UXFFQ1F5VjhvUmxYUjkyTkRydXdLblZtOVVnTXFkTXpYTnpnJTNEJTNE Cours Arduino : https://arduino.developpez.com/tutoriels/cours-complet-arduino/ Programmation : https://arduino.developpez.com/tutoriels/cours-complet-arduino/?page=programmer-arduino Liste de tous les éléments de syntaxe Arduino : https://www.arduino.cc/reference/fr/ Bibliothèque Arduino : https://www.arduino.cc/reference/en/libraries/ Statistiques et Modélisation de L3 : LU3SV614 Cours Correlation/Regression - Lorette NOIRET et Dominique LAMY Pockmarks - Adele GIOBBINI et Audrey ROUCHON Coordonnées : Projet de Matéo Françoise, conduit par Adèle Giobbini et Audrey Rouchon, en collaboration entre le FabLab de Biologie-Chimie et le FabLab de Géosciences. Adele Giobbini : Adele.giobbini@etu.sorbonne-universite.frAudrey Rouchon : Audrey.rouchon@etu.sorbonne-universite.fr Mission : Au cours de ce projet FabLab, il nous a été demandé de recréer un modèle analogue aux Pockmarks, faisable en laboratoire pour le présenter lors d’un TP-TD de L1. Un modèle analogique est un mopdèle physique, qui a une fonction explicative et qui permet aussi de prédire le processus naturel. C’est donc une substitution de la réalité, une représentation simplifiée du processus afin de le décrire. Un pockmark est une dépression, une sorte de cratère qui se forme au fond des océans lorsque du gaz (du méthane) remonte à la surface des sédiments. Il existe deux types de pockmarks : le premier type est causé par la décomposition de la matière organique par des bactéries anaérobies; le deuxième type est causé par la déstabilisation des hydrates de méthane. En effet, il arrive que des hydrates de méthane, un composé solide résultant de la cristallisation de méthane et d’eau, se forment dans les sédiments marins, recoupant les strates. Lorsque ces hydrates de méthane sont stables, ils restent solides. Mais, suite à un changement de pression, ceux-ci libèrent le méthane « piégé » dans une cage de glace, qui remonte dans les sédiments, formant des « pockmarks ». Schéma d’un hydrate de méthane, aussi appelé clathrate de part sa forme quadrillée et « cage ». https://acces.ens-lyon.fr/acces/thematiques/CCCIC/ressources/litho_point4 Profil sismique du lac Baikal, Sibérie. La BGHSZ (Base of the gas hydrates occurrence zone) observée est le niveau présentant des hydrates de gaz (Baptist et al., 2002). On voit qu’elle recoupe les sédiments. Méthodologie : Pour cela, nous avons effectué des expériences ayant pour but de mimer cette remontée de gaz dans les sédiments. Nous avons testé plusieurs configurations pour arriver à obtenir des pockmarks : pour les gaz, nous avons utilisé une mélange effervescent, c’est-à-dire un mélange de carbonate de potassium (K2CO3) et d’acide citrique (C6H8O7). Pour avoir un résultat avec un pH neutre, nous avons calculé le coefficient stœchiométrique : la masse molaire de l’acide citrique est de 176 g/mol et la masse molaire du carbonate de potassium est de 138 g/mol. Il y a environ un facteur de 0,8 : nous avons donc mis 1 gramme d’acide citrique pour 0,8 gramme de carbonate de potassium. Pour le sédiment marin, nous avons utilisé dans un premier temps uniquement du sable, puis nous avons mélangé du sable et de l’argile verte. Nous avons effectué 27 expériences. Les expériences 11 à 27 ont été effectuées de la même façon, en faisant varier un facteur : la quantité de sédiment. Nous avons utilisé lors de ces expériences : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable argile verte (illite) seringue de 60 mL trépied règle papier maryse D’un côté, nous avons mélangé l’acide citrique et le carbonate de calcium pour faire un mélange effervescent. D’un autre côté, nous avons mélangé du sable et de l’argile verte. Nous avons tapissé le fond du cristallisoir avec le mélange effervescent, mélangé avec un peu de sable et d’argile. Puis, nous avons versé la fin du mélange sable et argile pour mimer les sédiments. Enfin, pour activer la réaction effervescente, nous avons ajouter un volume variable d’eau, versé à la seringue. La réaction a été filmée pour chaque expérience à l’aide d’un trépied et d’un téléphone. Pour chaque expérience, lorsque nous avons obtenu des pockmarks, nous avons pu calculer le diamètre de chaque pockmark, puis le diamètre moyen par expérience. Nous avons aussi calculer le diamètre moyen d’une image de pockmarks de la Mer Morte, que nous avons comparé à nos expériences. Principe : Lorsque l’eau entre en contact avec le mélange effervescent, du gaz, ici du CO2, est libéré. Celui-ci remonte dans le mélange sable-argile (dans les sédiments). Lorsqu’il atteint la surface, il déplace des sédiments, laissant ainsi un « cratère », un pockmark. Pour que ce pockmark reste en place et soit défini, nous avons mélangé de l’argile et du sable : le sable permet une certaine perméabilité (pour que l’eau et l’air circulent), et l’argile permet de maintenir en place le pockmark (sans argile, le pockmark se refermait instantanément). Dans la nature, le principe est différent : le gaz libéré est du méthane (CH4) et ce n’est pas l’eau qui active la réaction. Résultats et problèmes: Nous avons réussi à obtenir des pockmarks ! Chaque vidéo d’expérience a été mise sur un Google Photo, accessible grâce à ce lien :  https://photos.app.goo.gl/Ua3B5z9h9E5kqokC9 Expérience Diamètre moyen (en mm) sauf dernière ligne en m Densité (mm2) sauf dernière ligne en m2 Densité en pourcentage 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 8 50,3 0,89% 7 5,125 93,65 1,65% 8 6,1 246,83 4,35% 9 - - - 10 4,75 269,95 4,76% 11 5,83 85,02 1,5% 12 6 195,48 3,52% 13 5,267 65,68 1,16% 14 5,48 144,22 2,54% 15 4,01 156,36 2,755% 16 4,625 141,61 2,49% 17 5,2 133,3 2,35% 18 4,9 94,42 1,66% 19 - - - 20 - - - 21 4,7 124,97 1,76% 22 5 39,26 0,55% 23 4,39 145,09 2,05% 24 5,1 170,6 2,41% 25 5 19,63 0,28% 26 5 100,13 1,41% 27 5,5 169,05 2,39% Pockmarks naturels 5,85 1105,56 4,04% Détail des expériences : 1 : 8g de carbonate de potassium pour 10g d’acide citrique + quantité non définie de sable. Eau versée au bécher. 2 : 4g de carbonate de potassium pour 10g d’acide citrique + quantité non définie de sable « kinétique ». Eau versée au bécher modifié (cf annexe). 3 : 0,8g de carbonate de potassium pour 1g d’acide citrique + quantité non définie de sable. Eau versée au bécher. 4 : 0,8g de carbonate de potassium pour 1g d’acide citrique + 42g d’argile et 84g de sable. Eau versée à la seringue.5 : 1g de carbonate de potassium pour 0,96g d’acide citrique + 50g d’argile et 100g de sable humide. Eau versée à la seringue. 6 : 2g de carbonate de potassium pour 1,92g d’acide citrique + 50g d’argile et 75g de sable. Eau versée à la seringue. 7 : 2g de carbonate de potassium pour 1,92g d’acide citrique + 50g d’argile et 100g de sable. Eau versée à la seringue. 8 : 2g de carbonate de potassium broyé pour 1,92g d’acide citrique broyé + 50g d’argile et 100g de sable. Eau versée à la seringue. 9 : 2g de carbonate de potassium broyé pour 1,92g d’acide citrique broyé + 25g d’argile et 100g de sable. Eau versée à la seringue. 10 : 2g de carbonate de potassium broyé pour 1,92g d’acide citrique broyé + 37,5g d’argile et 75g de sable. Eau versée à la seringue. 11 / 12 / 13 / 15 / 16 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 37,5g d’argile et 75g de sable. Eau versée à la seringue. 14 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé. Le mélange effervescent est mis au centre du cristallisoir + 37,5g d’argile et 75g de sable. Eau versée à la seringue. 17 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 46,875g d’argile et 93,75g de sable. Eau versée à la seringue. 18 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 28,125g d’argile et 56,25g de sable. Eau versée à la seringue. 19 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 75g d’argile et 150g de sable. Eau versée à la seringue. 20 : pas d’effervescent + 37,5g d’argile et 75g de sable. Eau versée à la seringue. Pour les expériences suivantes, nous avons utilisé un nouveau cristallisoir, un peu plus large. 21 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 37,5g d’argile et 75g de sable. Eau versée à la seringue. 22 / 25: 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 18,75g d’argile et 37,5g de sable. Eau versée à la seringue. 23 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 37,5g d’argile et 75g de sable. Eau versée à la seringue. 24 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 75g d’argile et 150g de sable. Eau versée à la seringue. 26 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 28,125g d’argile et 56,25g de sable. Eau versée à la seringue. 27 : 4g de carbonate de potassium broyé pour 3,84g d’acide citrique broyé + 46,875g d’argile et 93,75g de sable. Eau versée à la seringue. Lorsque l’on fait varier les paramètres, nous observons : Que du sable : les pockmarks se forment mais ne tiennent pas. Trop d’argile : si on met plus qu’un tier d’argile dans le sédiment, l’eau ne pénètre pas correctement et n’allait pas activer totalement la réaction effervescente, le gaz s’accumule et forme des gros cratères. Change le pH de la solution finale. Trop de sédiments :  l’eau ne pénétrait pas correctement et n’allait pas activer totalement la réaction effervescente. De plus, l’eau pénétrait sur les côtés uniquement, et c’est donc ici que se formaient les pockmarks. Eau versée au bécher : remaniait le sédiment, et l’eau trouble ne permettait pas de voir les pockmarks. Trop d’effervescent : eau trouble et sédiments remanies. Pas assez de sédiments : sédiments remaniés et les pockmarks ne tenaient pas bien. Effervescent non broyés : les billes de carbonate et d’acide ne réagissaient pas totalement ensemble car elles n’entraient pas forcément en contact. Nous avons rencontré quelques problèmes : nous n’avons pas vraiment réussi à obtenir un modèle analogique des pockmarks car nous n’avons trouvé que très peu de documentation sur la taille des pockmarks en fonction de la profondeur de sédiment au dessus de la couche d’hydrate de méthane (ou de matière organique selon le type). Nous n’avons pas réussit à faire un modèle analogique : nous avons fait seulement une maquette. Une maquette est une représentation partielle d’un phénomène réel, ne respectant pas les paramètres physico-chimiques et mécaniques. Elle reste utile car elle représente tout de même le phénomène naturel, mais de façon plus simple, surtout lorsque nous n’avons pas toutes les informations nécessaires au modèle analogique. Pour que notre maquette soit modèle analogique, il aurait fallu : Même sédiment Même taille de couche d’eau au dessus du plancher océanique Même modalité de remontée de gaz Gaz sous la même profondeur de sédiment Même type de gaz Même paramètres physiques et chimiques (pression, température et salinité) Nous avons tenté de trouver ces informations dans la littérature, transmise par M. Françoise, M. Poort et lors de nos propres recherches. Nous avons trouvé un seul article mentionnant la profondeur et la couche d’eau, mais celle ci était variable et nous n’avions pas trouvé le diamètre des pockmarks associé à une certaine profondeur. Concernant le type de sédiment, il ne nous était pas possible d’aller chercher des sédiments de la Mer Morte, par exemple. Cela aurait demandé du temps et de l’argent que nous n’avions pas. Il était aussi compliqué de former en laboratoire une remonté de méthane : nous nous sommes rabattu sur du CO2. Même si ce n’est pas un modèle analogique mais seulement une maquette, cela peut tout de même nous permettre de comprendre comment se forment les pockmarks, du moins de façon pédagogique. De plus, nous avons vu qu’il était possible de recycler l’argile et le sable : il suffit de neutraliser la réaction pour se débarrasser de toute trace d’acide ou de base, de laisser décanter puis sécher le produit final (c’est-à-dire un mélange d’eau, d’argile et de sable). Le sable, plus dense que l’argile, se dépose en dessous de l’argile, créant une couche d’argile que nous pouvons récupérer et broyer à nouveau. Le sable, quant à lui, doit être lavé pour enlever les éventuels résidus d’argile, puis à nouveau séché pour être prêt à l’emploi. Cette expérience FabLab nous a aussi permis d’apprendre plusieurs choses : cela nous a appris à réfléchir par nous même, et à inventer un protocole, au lieu d’en suivre un. Nous avons été poussées à trouver des solutions, par exemple ajouter de l’argile dans le sable, broyer le mélange effervescent pour que la réaction se fasse mieux, comment verser l’eau… Nous avons aussi appris que l’argile verte, l’illite, avait un pH basique (pH de 8-9) : cela explique donc que nous n’ayons pas un pH neutre, malgré le fait que le mélange effervescent l’était. Il serait donc peut être intéressant d’adapter la quantité de base (ici, le carbonate de calcium), en fonction de la quantité d’argile, pour pouvoir recycler correctement l’argile et le sable. Perspectives : S’il est nécessaire de faire un modèle analogique, il est possible de demander à un autre groupe de reprendre notre projet et de réfléchir au dimensionnement. Notre maquette peut tout de même être utile et utilisée lors de la Fête de la Science ou éventuellement au cours d’un TD : il est simple à mettre en place, le matériel est facile d’accès (nous n’avons rien eu à commander) et peu coûteux. Si un éventuel futur groupe arrive à faire un modèle analogique, celui-ci pourrait être utile pour les chercheurs travaillant sur les pockmarks ou les hydrates de méthanes. Poster de fin de projet : Bibliographie : Cathles, L. M., et al. « The Physics of Gas Chimney and Pockmark Formation, with Implications for Assessment of Seafloor Hazards and Gas Sequestration ». Marine and Petroleum Geology, vol. 27, no 1, janvier 2010, p. 82‑91. Colin, Florent. Caractérisation des systèmes gaz/hydrates de gaz de la Mer Noire par imagerie sismique haute résolution remorquée en fond de mer (SYSIF), Characterisation of free gas/gas hydrate systems in the Black Sea based on deep-towed high-resolution multichannel seismic imaging (SYSIF). 2020. Dubois, Stanislas F., et al. « Role of Pockmarks in Diversity and Species Assemblages of Coastal Macrobenthic Communities ». Marine Ecology Progress Series, vol. 529, juin 2015, p. 91‑105. Harrington, P. K. « Formation of Pockmarks by Pore-Water Escape ». Geo-Marine Letters, vol. 5, no 3, septembre 1985, p. 193‑97. Kelley, Joseph T., et al. « Giant Sea-Bed Pockmarks: Evidence for Gas Escape from Belfast Bay, Maine ». Geology, vol. 22, no 1, 1994, p. 59. Riboulot, V., et al. « Initiation of gas-hydrate pockmark in deep-water Nigeria: Geo-mechanical analysis and modelling ». Earth and Planetary Science Letters, vol. 434, janvier 2016, p. 252‑63. https://acces.ens-lyon.fr/acces/thematiques/CCCIC/ressources/litho_point4 https://fr.wikipedia.org/wiki/Pockmark https://www.connaissancedesenergies.org/fiche-pedagogique/hydrates-de-methane https://www.sciencedirect.com/topics/earth-and-planetary-sciences/pockmark Annexes: 26/01/2024 : Les pockmarks sont des cratères (dépressions) situées sur le fond marin, pouvant atteindre 350m de diamètre, 35m de profondeur et une densité de 160/km2 (Belfast Bay, Maine). Ils sont formés par l’échappement de fluides/ gaz naturel biogénique vers la surface, créant ainsi des cratères. Matériel : cristallisoir bicarbonate de sodium NaHCO3 acide (citrique ?) C6H8O7 sable (pour sédiment effervescent) sable (+ argile) (pour fond marin) eau Protocole : Pour un kilogramme de sable effervescent : Dans un récipient, on mélange 100g d’acide citrique, 50g de bicarbonate de sodium et 850g de sable. Pour le sable « fond marin »: Nous allons tester différentes méthodes : du sable seul (de différentes granulométries) du sable fin avec de l’argile (nous testerons plusieurs proportions) Problème : si le fond du cristallisoir est tapissé de sable effervescent, le gaz risque de s’échapper vers les bords du cristallisoir et ne formera pas de pockmarks. Pour remédier à cela, nous laisserons une bande de sable non effervescent tout autour du sable effervescent, pour contrer cet effet. Nous testerons plusieurs largeurs de bande. Dans le cristallisoir, mettre 1 cm de sable effervescent (85% de sédiment, ici, le sable; 10% d’acide citrique et 5% de bicarbonate de soude) : en effet, la masse molaire de l’acide citrique est de 176,12 g/mol, et celle du bicarbonate de sodium est de 84 g/mol. On a donc presque un facteur de 1 à 2 (84 / 176,12 = 0,48), donc il faut presque deux fois plus de masse d’acide citrique que de bicarbonate de sodium pour respecter les coefficients molaires de la réaction acido-basique.                                                      NaHCO3 + R-COOH CO2 + H2O + RCOO− + Na+ On observe donc une libération de CO2, qui permet de reconstituer la libération de gaz, nécessaire à la formation des PockMarks. Puis, mettre 3 cm de sable fin  (pour reconstituer le fond marin). Enfin, recouvrir d’eau. Problème : pour filmer, toujours à la même hauteur et au même angle, il nous faut un trépied. 02/02/2024 : https://www.sciencedirect.com/topics/earth-and-planetary-sciences/pockmark A la place du bicarbonate de sodium, nous utilisons du carbonate de potassium (K2CO3). Cela change donc nos calculs car la masse molaire n’est pas la même : Masse molaire du carbonate de potassium : rien< Masse molaire de l’acide citrique : 176 g/mol Il y a environ un facteur de 0,8 : nous avons donc mis 1 gramme d’acide citrique pour 0,8 gramme de carbonate de potassium pour respecter le coefficient stœchiométrique. Protocole : Expérience : Pour cette première expérience, nous avons voulu tester si l’effervescent fonctionnait. Nous avons mélangé 8 grammes de carbonate de potassium et 10 grammes d’acide citrique. La réaction a fonctionné. Nous avons vérifié si tout l’acide avait été neutralisé, grâce au papier pH : affirmatif (pH de 6). Nous avons donc pu commencer l’expérience. Nous avons utilisé : béchers cristallisoir acide citrique carbonate de potassium eau minérale spatule cuillère microbalance papier pH aluminium sable Nous avons mis une couche de sable effervescent (un volume de mélange effervescent (acide citrique + carbonate de potassium) pour deux volumes de sable fin sec), puis une couche de sable fin sans mélange effervescent, que nous avons enfin recouvert d’eau :   Mélange effervescent + sable. Couche de sable effervescent + grosse couche de sable fin. On voit que ça efferve. Nous avons pu voir du positif : nous avons mis de l’effervescent sur tout le fond du cristallisoir et l’air ne s’est pas échappé sur les cotés L’air s’est bien échappé et est remonté à travers les sédiments à la fin de l’expérience, nous avons testé le pH : l’acide a bien été neutralisé car le pH était de 6. Cela signifie une que le sable, une fois séché, pourra être réutilisé pour cette expérience. Nous avons rencontrer certains problèmes : comment verser l’eau ? comment faire pour que l’eau ne soit pas trouble ? Sûrement trop de mélange effervescent pas vraiment de formation de pockmarks (certains petits « cratères ») Remontée d’une bulle. Vers la fin de la réaction effervescente, nous pouvons observer des marques à la surface du sédiment. 9/02/2024 : Le sable que nous avions laissé à sécher la semaine dernière est devenu un sable « kinétique » : les grains étaient cohésifs. Nous avons donc essayé avec ce sable là, car un problème que nous avions pu rencontrer avec le sable fin était que celui ci s’affaissait tout de suite sans laisser de cratère visible. Expérience : Pour cette deuxième expérience, nous avons mis moins d’effervescent car nous avions vu la semaine dernière que ça effervait trop. Nous avons mis 5g d’acide citrique et 4g de carbonate de potassium. Nous avons mis du sable kinétique, dans l’espoir de pallier à l’effet d’effondrement. Nous avons utilisé : béchers bécher avec du scotch (pour verser l’eau) cristallisoir acide citrique (5g) carbonate de potassium (4g) eau minérale spatule cuillère balance papier pH sable kinétique (recyclé de la semaine précédente) Pour les problèmes de versement d’eau, nous avons essayé de fabriquer un arrosoir avec un bécher et du scotch. Ça n’a pas vraiment fonctionné. Nous avons réessayé avec des plus gros trous, et c’est le prototype que nous avons utilisé pour l’expérience 2. Le versement était trop puissant et a remanié le sédiment : ça n’allait pas non plus. Les résultats, autrement, étaient sensiblement similaires aux expériences de la semaine. L’effervescence était toujours trop forte et le sable ne gardait toujours pas les cratères. Expérience : Pour cette troisième expérience, cette fois-ci avec du sable « normal » (non kinétique) qui avait été humidifié puis séché, mais qui était encore un peu humide ce qui fait qu’il était plus dense (on s’est dit que les cratères allaient peut être être plus visibles, mais surtout c’était plus pratique pour mieux répartir le mélange effervescent). Nous avons mis encore moins d’effervescent : 1g d’acide citrique et 0,8g de carbonate de potassium. Nous avons utilisé : béchers cristallisoir acide citrique (1g) carbonate de potassium (0,8g) eau minérale spatule cuillère balance papier pH sable légèrement humide Nous avons fait comme précédemment : nous avons mélangé le mélange effervescent avec du sable pour la partie inférieure puis nous avons recouvert d’une bonne couche de sable. Nous avons essayé une autre technique pour verser l’eau : juste le bréchet, sans scotch, mais très rapidement. Cela a un peu remanié les sédiments supérieurs, ils se sont redéposés ensuite de façon non uniforme : ce n’est pas une bonne technique non plus. Résultats : Comme précédemment, le sable ne tenait pas : les cratères ne se formaient pas. La forme que nous pouvons observer est due au versement de l’eau. Par contre, la dose d’effervescent était correcte. En effet, l’eau en surface était donc moins trouble et nous voyons mieux ce qu’ils se passait. Nous avons essayé une autre fois de créer un arrosoir : ça ne coulait pas super bien mais il aurait pu être utile. Par contre… … nous l’avons cassé avant d’avoir pu le tester. Nous avons donc abandonné l’idée arrosoir pour trouver des alternatives. Nous avons essayé avec une seringue et cela semble fonctionner plutôt bien. Expérience : Pour cette quatrième expérience, nous avons cherché à trouver une alternative au sable uniquement : nous avons mélangé donc 1/3 d’argile (42g) avec 2/3 de sable (84g). Nous avons aussi mis le mélange effervescent juste au centre. Nous avons utilisé : béchers cristallisoir acide citrique carbonate de potassium eau minérale spatule cuillère balance papier pH sable légèrement humide (84g) argile verte (illite) (42g) seringue Nous avons comme précédemment mis une couche de sable (ici mélangé à de l’argile) avec du mélange effervescent, puis une couche de sable- argile. Cette fois ci, sûrement à cause du fait que nous avions mis l’effervescent majoritairement au centre, un cratère/ volcan a été créé ! On peut voir le cratère formé, qui n’est pas parfait mais c’est un début. L’argile permet de garder la forme du cratère, et l’eau pénètre tout de même. C’est peut être un peu trop impressionnant pour un pockmark. Problèmes : il faut changer la dose de notre mélange effervescent car pas la bonne masse molaire Il faut trouver comment recycler le sable-argile notre modèle ne représente pas super bien la réalité car en réalité, les pockmarks sont plutôt des dépressions liées à l’affaissement du sédiment (car la glace fond et laisse un trou), et non pas des cratères. Il est difficile de mesurer le pH dans notre dernière expérience, l’eau de surface étant verte car mélangée à l’illite, le papier pH devient vert (il faudrait attendre plusieurs heure que l’argile sédimente: flemme). 16/02/2024: Nous avons recalculé notre équation pour le mélange car nous avons changé de carbonate sans revérifier l’équation. Nous nous sommes rendu compte que les coefficients stœchiométriques avaient changé et qu’il fallait 3 moles de carbonate de potassium pour 2 moles d’acide citrique. Il faut donc mettre 0,96g d’acide pour 1g de carbonate, plutôt que 1g d’acide pour 0,8g de carbonate comme nous faisions précédemment. 3 K2CO3 + 2 C6H8O7 <-> 2 C6H5K3O7 + 3 H2O + 3 CO2 La masse molaire du carbonate de potassium est de 138,2 g/moles et celle de l’acide citrique est de de 192,1. Pour refaire l’équation en respectant les coefficients, il faut donc 414,6 grammes de carbonates et 384,2 d’acide, soit 1g de carbonate et 0,96 d’acide pour environ 2 grammes d’effervescent. Nous avons calculé pour 2 grammes d’effervescents car nous avons vu dans les expériences précédentes que c’était la quantité la plus adapté pour le moment. Nous avons aussi lavé l’argile-sable de la semaine précédente, et comme le sable est plus gros et sédimente plus vite, nous avons pu faire un tri granulométrique à l’eau (malheureusement, nous n’avons pas pu conserver tout l’argile, uniquement l’argile de surface). Expérience : Pour cette cinquième expérience, nous allons donc utiliser ces nouvelles quantité pour le mélange effervescent, et garder la même proportion d’argile - sable (1/3 et 2/3). Nous allons cependant mettre du mélange effervescent partout sur le fond (et non pas que au centre). Nous avons utilisé 50g d’argile pour 100g de sable humide de la semaine précédente Nous avons utilisé : béchers cristallisoir acide citrique carbonate de potassium eau minérale spatule cuillère balance papier pH sable légèrement humide (100g) argile verte (illite) (50g) seringue Mélange sable-argile : l’argile n’a pas été broyée assez finement, nous avons tout de même essayé comme car : mais le relief en lien avec la réaction a été quelque peu cachée par ces gros cailloux de surface. La façon dont j’ai versé l’eau a aussi laissé une trace en surface : cette expérience n’a pas très bien fonctionné. Il n’y a cette fois ci sûrement pas assez d’effervescent ou trop de sédiments : même si nous avons mis du mélange effervescent partout sur le fond, nous n’avons observé de cratère qu’au centre (2 cratères). Nous avons utilisé un autre papier pH, qui, avec notre nouvelle équation, nous permet d’obtenir une réaction à pH 8 ! A gauche, pH de l’acide citrique. Au centre, pH de l’expérience 5 (à la fin de l’expérience). A droite, pH du carbonate de potassium. Pour régler le problème de l’argile, nous l’avons tamisée et nous avons re-broyé les gros cailloux. Nous avons aussi mélangé le reste d’argile de la semaine précédente à notre poudre d’argile (recyclage ou quoi). Expérience : Pour cette sixième expérience, nous avons doublé les doses de mélange effervescent (2g de carbonate de potassium et 1,92g d’acide citrique). Pour la partie inférieure, nous avons mélangé le mélange effervescent avec 25g de sable humide. Puis, nous avons mis 75g de sable sec et 50g d’argile pour la partie supérieure. Nous avons utilisé : béchers cristallisoir acide citrique (1,92g) carbonate de potassium (2g) eau minérale spatule cuillère balance papier pH sable légèrement humide sable sec argile verte (illite) seringue Résultats : Nous avons eu un problème : sans l’argile, le sable humide a déjà réagit avec le mélange effervescent (car avant l’argile absorbait l’humidité). Nous avons observé un seul cratère : cela est du peut être au fait que nous n’avions pas mis d’argile dans la couche inférieure et que donc une couche « de gaz » s’est formée entre nos deux couches. Il serait peut être utile de broyer notre mélange effervescent : nous nous sommes rendu compte que toutes les billes de carbonate de potassium n’étaient pas en contact avec toutes les billes d’acide citrique, et que donc a la fin de notre réaction, lorsque nous mélangions, la réaction recommençait. Nous avons eu un pockmark de diamètre moyen de 8mm. Expérience : Pour cette septième expérience, nous avons utilisé uniquement du sable sec pour contrer l’effet de l’effervescent qui commençait avant avec le sable humide. Nous avons aussi mis de l’argile partout pout homogénéiser les deux couches et éviter qu’une couche de gaz se forme entre les deux. Nous avons mis 100g de sable sec et 50g d’argile. Nous en avons versé une petite partie pour faire le fond (avec des l’effervescent mélangé) puis le reste par dessus. Nous avons utilisé : béchers cristallisoir acide citrique (1,92g) carbonate de potassium (2g) eau minérale spatule cuillère balance papier pH sable sec (100g) argile verte (illite) (50g) seringue On voit des pockmarks ! On a 5 pockmarks d’un diamètre moyen de 5,125 mm. Nous avons toujours ce problème de gaz qui reste coincé, mais tout de même un peu moins. Expérience : Pour cette huitième expérience, nous avons essayé de faire un réplicat de l’expérience précédente : même quantité de mélange effervescent (broyé au mortier), même quantité d’argile-sable, nous avons versé l’eau de la même façon. Nous avons utilisé : béchers cristallisoir acide citrique (1,92g) (broyé) carbonate de potassium (2g) (broyé) eau minérale spatule cuillère balance papier pH sable sec (100g) argile verte (illite) (50g) seringue Problèmes : L’eau a eu du mal à descendre jusqu’au mélange effervescent et nous avons eu pas mal de gaz coincé : peut être utiliser moins d’argile la prochaine fois car cela fait une couche trop étanche, à la fois pour l’eau et pour le gaz. Résultats : Nous avons tout de même eu quelques cratères au début, qui se sont vite transformés en un seul gros cratère à cause du gaz coincé. On peut tout de même calculer le diamètre des pockmarks : il y en a 5 d’un diamètre moyen de 6,1mm. 01/03/2024 : Nous avons réussi à récupérer le sable d’il y a 3 semaines (sable mélangé avec de l’argile avec l’argile qui a pu être extraite lors de la séance précédente): Voici une comparaison entre nos pockmarks et les pockmarks trouvés dans la nature : Pockmarks de « Role of pockmarks in diversity and species assemblages of coastal macrobenthic communities » - Dubois et al. (2015). Photo des pockmarks que nous avons obtenus en laboratoire (expérience sept). En arrivant au labo, nous avons mis a chauffer le mélange sable-argile de la séance précédente, pour essayer de récupérer l’argile sèche d’un coté, et le sable de l’autre. Puis, nous avons re-broyé de l’argile. Expérience : Pour cette neuvième expérience, nous avons utilisé 2g carbonate de potassium et 1,92 d’acide citrique. Nous broyons aussi ce mélange effervescent pour l’homogénéiser (éviter que certains grains de carbonate de potassium et d’acide citrique ne se touchent pas). Nous allons aussi essayer de mettre moins d’argile pour contrer la couche de gaz qui se forme : 25g d’argile pour 100g de sable. Nous allons donc faire : une couche sable-argile-mélange effervescent broyé une couche sable-argile Nous avons utilisé : béchers cristallisoir acide citrique (1,92g) (broyé) carbonate de potassium (2g) (broyé) eau minérale spatule cuillère balance papier pH sable sec (100g) argile verte (illite) (25g) seringue Nous avons donc fait mis ces deux couches dans un cristallisoir et nous avons versé l’eau avec la seringue. Résultats : Les résultats n’étaient pas phénoménaux : nous n’avions pas assez d’argile pour que les pockmarks tiennent. Problème : plus assez d’argile. Les bulles n’étaient pas très fortes. La réaction a été neutralisée. Expérience : Pour cette dixième expérience, nous avons diminué de 25% les quantités de sédiment : 100g de sable -> 75g 50g d’argile -> 37,5g Nous avons utilisé 2g de carbonate de potassium et 1,92g d’acide citrique. Nous avons fait une couche sable-argile-effervescent et une autre couche plus épaisse sable-argile. Nous avons utilisé : béchers cristallisoir acide citrique (1,92g) carbonate de potassium (2g) eau minérale spatule cuillère balance papier pH sable sec (75g) argile verte (illite) (37,5g) seringue Résultats : La quantité de sédiment nous semble plutôt correcte, le gaz restait moins coincé (il avait moins de trajet à remonter). Problème : notre méthode pour verser l’eau fait arriver l’eau d’abord sur les cotés. C’est donc là que se sont formés les pockmarks (qui se sont donc formés plus vite car ils avaient moins de sédiment à remonter). L’eau ne descends pas jusqu’en bas. Il faut donc qu’on trouve un moyen pour que l’eau soit uniformément repartie. Nous avons quand même eu des pockmarks, d’un diamètre moyen de 4,75mm. La réaction a été neutralisée. Expérience : Pour cette onzième expérience, nous avons mis 75g de sable et 37,5g d’argile. Nous avons mis cependant le double de l’effervescent. Nous avons aussi essayé de mieux verser l’eau avec la seringue. (Protocole témoin que nous utiliserons jusqu’à la fin des nos expériences) Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable sec (75g) argile verte (illite) (37,5g) seringue Résultats : Nous avons réussi à obtenir de super pockmarks. Problème : L’eau ne s’est pas uniformément réparti (elle a atteint seulement le centre). Nous avons eu 3 pockmarks d’un diamètre moyen de 5,83mm. La réaction a bien été neutralisée (papier pH à 8). Nous allons essayer de la refaire la semaine prochaine. Nous avons aussi recyclé notre argile-sable. La mixture de la séance précédente que nous avions mis à sécher au « four » n’a pas vraiment bien séché : nous l’avons remélangé à notre mélange sable-argile de aujourd’hui. 08/03/2024 : En arrivant au FabLab de Géosciences, nous avons vu que l’argile et le sable que nous avions laissé sécher une semaine n’ont pas bien séché : nous avons mis à sécher au dessiccateur l’argile (pendant 2h à 75°C) Aujourd’hui, nous allons essayer de refaire l’expérience 11. Expérience : Pour cette douzième expérience, nous avons mis 75g de sable et 37,5g d’argile, avec un mélange effervescent à 4g de carbonate de potassium et 3,84g d’acide citrique. Nous avons utilisé une plus grande seringue (de 60mL). Nous avons aussi récupéré un trépied et une règle pour filmer et faire les mesures. Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable séché recyclé de la semaine précédente (75g) argile verte (illite) (37,5g) seringue de 60 mL trépied règle papier Nous avons broyé le mélange effervescent. Nous avons mis une couche de sédiment très fine (pour homogénéiser) puis une couche de sédiment mélangé avec du mélange effervescent, puis une couche de sédiment sans effervescent à nouveau et enfin de l’eau (autant d’eau que de sédiment). Résultats : Sable qui commence à être mouillé par l’eau : les pockmarks commencent à apparaître. Les pockmarks de l’expérience douze après avoir enlevé l’eau. Nous avons eu 7 pockmarks d’un diamètre moyen de 6mm. Problème : L’eau a eu du mal à atteindre le sédiment car nous l’avions un peu tassé (pour mimer le poids de l’eau mais fail un peu). Nous avons mesuré le pH : la réaction a été neutralisée. Expérience : Pour cette treizième expérience, nous avons essayé de faire la même chose mais en tassant moins le sédiment. Nous avons mis 75g de sable et 37,5g d’argile, avec un mélange effervescent à 4g de carbonate de potassium et 3,84g d’acide citrique. Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable séché recyclé de la semaine précédente (75g) argile verte (illite) (37,5g) seringue de 60 mL trépied règle papier Nous avons broyé le mélange effervescent. Nous avons mis une couche de sédiment très fine (pour homogénéiser) puis une couche de sédiment mélangé avec du mélange effervescent, puis une couche de sédiment sans effervescent à nouveau et enfin de l’eau (autant d’eau que de sédiment). Résultats : Problème : Cette fois ci, l’eau s’est mal répartie : l’eau va d’abord sur les cotés et donc c’est là que les pockmarks se sont formés. Pockmarks de l’expérience 13 : les pockmarks sont sur le coté. Nous avons eu 3 pockmarks d’un diamètre moyen de 5,267mm. Pour cette quatorzième expérience, nous avons mis l’effervescent au centre, pour éviter les pockmarks sur les cotés (sur les cotés, ils sont trop écrasés et donc mesurer leur diamètre est compliqué. Nous avons broyé le mélange effervescent. Nous avons mis une couche de sédiment très fine (pour homogénéiser) puis une couche de sédiment mélangé avec du mélange effervescent (au centre) et du mélange sable-argile sur le pourtour, puis une couche de sédiment sans effervescent à nouveau et enfin de l’eau (autant d’eau que de sédiment). Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable séché recyclé de la semaine précédente (75g) argile verte (illite) (37,5g) seringue de 60 mL trépied règle papier Mélange sable+argile+mélange effervescent au centre et sable+argile sur le pourtour. Nous avons moins tassé, mais l’eau à toujours eu du mal à aller jusqu’en bas. On observe des pockmarks sur les cotés tout le même. Il y a 6 pockmarks d’un diamètre moyen de 5,48mm. La réaction a été neutralisée (à peu près). Une fois retournées au FabLab de Géosciences, nous avons pu retrouver l’argile que nous avons laissé 3h au dessiccateur à 75°C. L’argile est - presque - pure : nous pouvons donc la réutiliser. Il reste à nettoyer l’eau. 15/03/2024 : Nous avons commencé par aller au FabLab de Géosciences pour voir si le mélange argile-sable avait séché. Et en effet, nous avons pu retirer l’argile qui s’est décollée du sable. Nous l’avons ensuite mélangé à l’argile que nous avions aussi récupéré en la dessicant la semaine dernière et nous les avons broyé pour retrouvé de l’argile prête à l’emploi ! Puis, nous avons lavé le sable (dans lequel il restait un tout petit peu d’argile, mais qui n’était pas réutilisable) et laissé à sécher. Nous pouvons donc ainsi réutiliser le sable. Ensuite, nous nous sommes rendues au FabLab de Biologie, nous nous avons assemblé le trépied pour filmer les expériences. Pour toujours filmer nos expériences sous le même angle, nous avons préparé un repère en plastique, avec deux cercles pour les pieds du trépied, et un grand pour le cristallisoir. En effet, la semaine passée, de l’eau était tombée sur notre repère en papier, et l’avait déformé. Afin d’éviter de nouveau de problème, nous en avons fait un en plastique. Nous pouvons passer à une nouvelles expérience, où nous allons reproduire les expériences de la semaine dernière pour avoir des replicas pour ensuite étudier le diamètre des pockmarks. Nous allons calculer le diamètre en fonction de la hauteur de sédiment. Pour cette quinzième expérience, nous utilisons de d’argile recyclée et du sable (non recyclé). Nous avons broyé le mélange effervescent. Nous avons mis une couche de sédiment très fine (pour homogénéiser) puis une couche de sédiment mélangé avec du mélange effervescent, et enfin une couche de sédiment sans effervescent. Nous avons ajouté de l’eau avec la seringue (autant d’eau que de sédiment). Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75g) argile verte recyclée des séances précédentes (illite) (37,5g) seringue de 60 mL trépied règle papier Notre sédiment fait 1,5 cm de haut environ. Nous avons essayé de mettre autant d’eau que de sédiment. Mais le problème est que l’eau a toujours du mal à infiltrer correctement le sédiment et la réaction n’a pas pu se faire entièrement. Les pockmarks sont un peu flous mais nous en avons eu beaucoup. Nous observons 9 pockmarks d’un diamètre moyen de 4,01mm. Expérience : Pour cette seizième expérience, nous utilisons de d’argile recyclée et du sable (non recyclé). Nous avons broyé le mélange effervescent. Nous avons mis une couche de sédiment très fine (pour homogénéiser) puis une couche de sédiment mélangé avec du mélange effervescent et enfin une couche de sédiment sans effervescent. Nous avons ajouté de l’eau avec la seringue (autant d’eau que de sédiment). Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75g) argile verte recyclée des séances précédentes (illite) (37,5g) seringue de 60 mL trépied règle papier maryse Nous avons eu l'idée d'utiliser désormais une maryse pour vider et nettoyer les béchers et le cristallisoir lors de nos expériences. En effet, le sable rayait fortement les verreries et produisait un bruit très désagréable. Nous avons fait exactement la même expérience que précédemment. Résultats : Le sédiment était aussi aux alentours de 1,5 - 1,6 cm. Nous observons 8 pockmarks d’un diamètre moyen de 4,625mm. Avec nos diverses photos, nous pouvons maintenant calculer le diamètre et la densité des pockmarks. Nous avons pu voir que les expériences 1, 2, 3, 4, 5, et 9 ne sont pas exploitables. En revanche, les 6, 7, 8, 10, 11, 12, 13, 14, 15, 16 sont exploitables pour mesurer et observer des pockmarks ! De plus, les expériences 11, 12, 13, 14 et 15 ont été effectuées avec le même protocole. 22/03/2024 : Nous avons commencé par vider l'eau stagnante au dessus de notre mélange sable-argile, afin que celui-ci soit sec pour la prochaine semaine. Nous avons ensuite mis à sécher notre argile que nous avons fait décanter, sans sable, dans le dessiccateur à 75°C pour 3 heures. Nous sommes ensuite passées aux calculs de proportion de pockmarks par rapport à la surface totale du cristallisoir. Le cristallisoir ayant un diamètre de 8,5 cm, son rayon est de 4,25 cm ou 42,5 mm. Nous avons aussi mesuré les diamètres des pockmarks, ainsi que leur diamètre moyen. Son aire est donc égale à (42,5)²*π = 5674,5mm² Calculs proportion expérience 6 : Un seul pockmarks de 8mm de diamètre, avec un diamètre moyen de 8mm : 4²*π= 50,3mm² 50,3/5674,5*100= 0,89% de surface couverte par les pockmarks pour l'expérience 6. Aire moyenne des pockmarks : 50,3 mm² Calculs proportion expérience 7 : Quatre pockmarks de 3, 8, 4, et 5.5 mm de diamètre, avec un diamètre moyen de 5,125mm : 1->1.5²*π= 7mm² 2->4²*π= 50.3mm² 3->2²*π= 12.6mm² 4->2,75²*π= 23.75mm² 7+50.3+12.6+23.75=93.65mm² de pockmarks. 93.65/5674.5*100= 1.65% de surface occupée par les pockmarks. Aire moyenne des pockmarks : 93.65/4 = 23,41 mm² Calculs proportion expérience 8 : Cinq pockmarks de 9, 4, 7, 11.5, et 6 mm de diamètre, avec un diamètre moyen de 6,1 mm : 1->4.5²*π= 63.61mm² 2->2²*π= 12.6mm² 3->3.5²*π= 38.48mm² 4->5.75²*π= 103.87mm² 5->3²*π= 28.27mm² 63.61+12.6+38.48+103.87+28.27=246.83mm² de pockmarks. 246.83/5674.5*100= 4.35% de surface occupée par les pockmarks. Aire moyenne des pockmarks : 246,83/5 = 49,37mm² Calculs proportion expérience 10 : Dix pockmarks de 5, 5, 5, 6, 6, 4, 4, 4.5, et 7mm de diamètre et un avec une forme particulière ressemblant à un rectangle de 15*5 mm de coté. Le diamètre moyen des pockmarks est d’environ 4,75mm. 1->2,5²*π= 19.63mm² 2->2,5²*π= 19.63mm² 3->2,5²*π= 19.63mm² 4->3²*π= 28.27mm² 5->3²*π= 28.27mm² 6->2²*π=12.57mm² 7->2²*π=12.57mm² 8->2.25²*π=15.90mm² 9->3.5²*π=38.48mm² 10->15*5=75mm² car respecte plus la forme d'un rectangle. 19.63+19.63+19.63+28.27+28.27+12.57+12.57+15.90+38.48+75=269.95mm² de pockmarks. 269.95/5674.5*100= 4.76% de surface occupée par les pockmarks. Aire moyenne des pockmarks : 269,95/10 = 26,995 mm² Calculs proportion expérience 11 : Il y a 3 pockmarks de 4, 6, et 7.5 mm de diamètre, d’un diamètre moyen de 5,83mm : 1 -> 2²*π = 12,57 mm² 2 -> 3²*π = 28,27 mm² 3 -> 3,75²*π = 44,18 mm² 12,57 + 28,27 + 44,18 = 85,02 mm² 85,02/5674,5 * 100 = 1,5 % de surface occupée par les pockmarks. Aire moyenne des pockmarks : 85,02/3 = 28,34 mm² Calculs proportion expérience 12 : Il y a 7 pockmarks de 6, 6, 7, 5.5, 5.5, 5.5, et 6.5 mm de diamètre, d’un diamètre moyen de 6mm : 1 -> 3²*π = 28,27 mm² 2 -> 3²*π = 28,27 mm² 3 -> 3,5²*π = 38,48 mm² 4 -> 2,75²*π = 23,76 mm² 5 -> 2,75²*π = 23,76 mm² 6 -> 3,25²*π = 33,18 mm² 7 -> 2,75²*π = 23,76 mm² 28,27 + 28,27 + 38,48 + 23,76 + 23,76 + 33,18 + 23,76 = 199,48 mm² 199,48/5674,5 * 100 = 3,52 % de surface occupée par les pockmarks. Aire moyenne des pockmarks : 199,48/7 = 28,49 mm² Calculs proportion expérience 13 : Il y a 3 pockmarks de 5, 5, 5.8 mm de diamètre, d’un diamètre moyen de 5,267 mm : 1 -> 8,5²*π = 19,63 mm² 2 -> 2,5²*π = 19,63 mm² 3 -> 2,9²*π = 26,42 mm² 19,63 + 19,63 + 26,42 = 65,68 mm² 65,68/5674,5 * 100 = 1,16 % de surface occupée par les pockmarks. Aire moyenne des pockmarks : 65,68/3 = 21,89 mm² Calculs proportion expérience 14 : Il y a 6 pockmarks de 4.7, 5.2, 5.5, 5.5, 5, et 7 mm de diamètre, avec un diamètre moyen de 5,48mm: 1 -> 2,35²*π = 17,35 mm² 2 -> 2,6²*π = 21,24 mm² 3 -> 2,75²*π = 23,76 mm² 4 -> 2,75²*π = 23,76 mm² 5 -> 2,5²*π = 19,63 mm² 6 -> 3,5²*π = 38,48 mm² 17,35 + 21,24 + 23,76 + 23,76 + 19,63 + 38,48 = 144,22 mm² 144,22/ 5674,5 * 100 = 2,54 % de surface occupée par les pockmarks. Aire moyenne des pockmarks : 144,22/6 = 24,03 mm² Calculs proportions expérience 15 : Il y a 9 pockmarks de 2.7, 4, 4.5, 2.5, 6, 5.5, 5.6, 4.8, et un pockmark rectangulaire de 7,5x3 mm. Ils ont un diamètre moyen de 4,01mm : 1 -> 1,35²*π = 5,73 mm² 2 -> 2²*π = 12,57 mm² 3 -> 2,25²*π = 15,9 mm² 4 -> 1,25²*π = 4,91 mm² 5 -> 3²*π = 28,27 mm² 6 -> 2,75²*π = 23,76 mm² 7 -> 2,8²*π = 24,63 mm² 8 -> 2,4²*π = 18,09 mm² 9 -> 7,5*3 = 22,5 mm² 5,73 + 12,57 + 15,9 + 4,91 + 28,27 + 23,76 + 24,63 + 18,09 + 22,5 = 156,36 mm² 156,36/5674,5 * 100 = 2,755 % de surface occupée par les pockmarks. Aire moyenne des pockmarks : 156,36/9 = 17,37 mm² Diamètre moyen des pockmarks : 3,956 Calculs proportion expérience 16 : Il y a 8 pockmarks de 5, 3, 4, 6.9, 5, 3.8, 4.5 et 4.8 mm de diamètre, d’un diamètre moyen de 4,625mm : 1 -> 2,5²*π = 19,63 mm² 2 -> 1,5²*π = 7,06 mm² 3 -> 2²*π = 12,57 mm² 4 -> 3,45²*π = 37,39 mm² 5 -> 2,5²*π = 19,63 mm² 6 -> 1,9²*π = 11,34 mm² 7 -> 2,25²*π = 15,9 mm² 8 ->  2,4²*π = 18,09 mm² 19,63 + 7,06 + 12,57 + 37,39 + 19,63 + 11,34 + 15,9 + 18,09 = 141,61 mm² 141,61/5674,5 * 100 = 2,49 % de surface occupée par les pockmarks. Aire moyenne des pockmarks : 141,61/8 = 17,7 Diamètre moyen des pockmarks : 4,74 mm Nous obtenons un diamètre moyen de pockmarks de 5,798mm. Nous avons ensuite voulu comparer ces données avec des données de la littérature : « Role of pockmarks in diversity and species assemblages of coastal macrobenthic communities » - Dubois et al. (2015). Nous avons utilisé une image de pockmarks de Dubois et al. 2015, et nous avons utilisé la même méthode que pour nos expériences. Le carré que nous avons sélectionné fait 171x160 m = 27 360 m² Il y a 34 pockmarks, d’un diamètre moyen de 5,85 m : 1 -> 7m -> 38,48m²2-> 5,5m -> 23,76m²3-> 2,5m -> 4,91m²4-> 2,5m -> 4,91m²5-> 4m -> 12,57m²6-> 11m -> 95,03m²7-> 4m -> 12,57m²8-> 6,2m -> 30,19m²9-> 3,5m -> 9,62m²10-> 6,5m -> 33,18m²11-> 6,5m -> 33,18m²12-> 8m -> 50,3m²13-> 4,5m -> 13,9m²14-> 7m -> 38,48m²15-> 7,5m -> 44,18m²16-> 7m -> 38,48m²17-> 6,5m -> 33,18m²18-> 8m -> 50,3m²19-> 6,5m -> 33,18m²20-> 6,2m -> 33,18m²21-> 3m -> 7,06m²22-> 7m -> 38,48m²23-> 4,5m -> 15,9m²24-> 7m -> 38,48m²25-> 9m -> 63,62m²26-> 8m -> 50,3m²27-> 4,5m -> 15,9m²28-> 4,5m -> 15,9m²29-> 5,5m -> 23,76m²30-> 5,5m -> 23,76m²31-> 10m -> 78,53m²32-> 5,5m -> 23,76m²33-> 6m -> 28,27m²34-> 13m -> 137,73m² La surface recouverte de pockmarks est de 1105,56m². 1105,56/27 360 * 100 = 4,04% de surface occupée par les pockmarks. On peut voir qu’on est un peu dans les mêmes ordres de grandeurs qu’avec nos expériences (pour la densité et pour les diamètre moyens). On peut voir que Malheureusement, c’est car, dans la nature, les pockmarks sont très nombreux et petits proportionnellement à nos expériences modèles. 29/03/2024 : Nous avons recyclé le mélange sable-argile que vous avions laissé la semaine dernière. Puis, nous nous sommes renseigné sur les pockmarks « naturels » et les nôtres, et nous avons essayé de voir si notre modèle est analogue à ce que nous trouvons. Malheureusement, il nous manque beaucoup de données. Nous avions vu la semaine dernière que nos pockmarks étaient plus gros et moins nombreux que dans la nature. C’est peut être lié à la nature et à la profondeur de notre sédiment. En effet, nous avons un mélange sable-argile. Nous sommes arrivés à une proportion de 1 part de sable pour 1/2 part d’argile car si nous mettons trop d’argile, l’eau ne circule plus, et si nous n’en mettons pas assez, les pockmarks ne se forment pas. Nous allons essayer de faire varier la hauteur de sédiment pour voir si cela va impacter la taille de nos pockmarks. Expérience : Pour cette dix-septième expérience, nous avons essayé d’avoir une hauteur de cm de 2cm, contre 1,5cm habituellement. Nous avons donc ajouté x0,25 notre sédiment pour avoir 0,25 fois plus de sédiment : nous nous retrouvons avec environ 2cm de sédiment. Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75 + 18,75 = 93,75 g) argile verte recyclée des séances précédentes (illite) (37,5 + 9,375= 46,875g) seringue de 60 mL trépied règle papier maryse Résultats : Nous avons obtenu exactement le même nombre de pockmarks que pour les expériences précédentes (11 à 16, où le protocole est le même) : nous en avons 6, alors que en moyenne nous avons 6 pockmarks par expérience (à partir de l’expérience 11). Les pockmarks de cette expérience ont un diamètre moyen de 5,2mm (contre 5,202mm). Ajouter du sédiment n’a pas réduit le nombre de pockmarks ni agrandit la taille. Expérience : Pour cette dix-huitième expérience, nous avons mis 0,25 fois moins de sédiment, pour avoir 1cm de sédiment. C’est ce que nous avons obtenu. Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75-18,75 = 56,25g) argile verte recyclée des séances précédentes (illite) (37,5- 9,375 = 28,125g) seringue de 60 mL trépied règle papier maryse Résultats : Nous avons obtenu environ autant de pockmarks que pour les expériences précédentes : nous en avons 5, alors que en moyenne nous avons 6 pockmarks par expérience. Les pockmarks de cette expérience ont un diamètre moyen de 4,9mm (contre 5,202mm). Enlever du sédiment n’a pas augmenté le nombre de pockmarks, cela a peut être un peu diminué leur taille. 05/04/2024 : Cette séance, nous allons continuer nos expériences, pour avoir un sédiment de 3cm et un sédiment de 0,75cm. Expérience : Pour cette dix-neuvième expérience, nous avons mis 2 fois plus de sédiments qu’habituellement, pour avoir une épaisseur de sédiment de 3cm (contre 1,5cm habituellement). Nous avons utilisé : béchers cristallisoir acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75 * 2 = 150g) argile verte recyclée des séances précédentes (illite) (37,5 * 2 = 75g) seringue de 60 mL trépied règle papier maryse Résultats : Nous observons un craquèlement et une remonté gazeuse bizarre : nous nous demandons si cela est lié au sédiment en lui-même, vu que l’eau ne semble pas avoir atteint l’effervescent. Nous avons malheureusement cassé (😞) le cristallisoir que nous utilisions depuis le début. Nous en avons trouvé un autre, un peu plus grand. Nous avons pris sa mesure pour pouvoir ultérieurement l’utiliser lors du calcul des pockmarks. Nous avons cherché à faire une expérience témoin, sans effervescent, pour voir si la remontée gazeuse était en lien avec l’effervescent ou non. Nous avons donc versé 75g de sable avec 37,5g d’argile uniquement dans le cristallisoir. Nous avons du utiliser un nouveau cristallisoir vu que l’autre s’est cassé. Notre sédiment est aussi aux alentours de 1,4 cm, juste un peu plus petit qu’avec l’ancien cristallisoir. Expérience :  vingtième expérience (témoin). Nous avons utilisé : béchers cristallisoir (le nouveau) eau minérale spatule cuillère balance sable (75g) argile verte recyclée des séances précédentes (illite) (37,5g) seringue de 60 mL trépied règle papier maryse Résultats : Nous avons observé une remonté de gaz qui a formé un cratère, mais qui n’est pas homologue aux pockmarks que nous trouvons lorsque nous ajoutons de l’effervescent. Ce gaz est en moins grande quantité et est plus disparate, ne permettant pas (ou presque) la formation de pockmarks. Expérience : Pour cette vingt-et-unième expérience, nous avons aussi cherché à refaire notre expérience de base, mais dans le nouveau cristallisoir pour voir si nous observions des différences. Nous avons utilisé : béchers cristallisoir (le nouveau) acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75g) argile verte recyclée des séances précédentes (illite) (37,5g) seringue de 60 mL trépied règle papier maryse Résultats : Nous observons 7 pockmarks, de diamètre moyen de 4,7 mm. Expérience : Pour cette vingt-deuxième expérience, nous cherchons à avoir un sédiment de 0,75cm : nous allons donc mettre moitié moins de sable et d’argile. Nous avons utilisé : béchers cristallisoir (le nouveau) acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75/2 = 37,5g) argile verte recyclée des séances précédentes (illite) (37,5/2 = 18,75g) seringue de 60 mL trépied règle papier maryse Résultats : Le très fin sédiment, face à l’effervescent, a été remué et a beaucoup trop effervé. 2 pockmarks ont pu se former mais le sédiment a été très remanié. Ils ont un diamètre moyen de 5mm. Expérience : Pour cette vingt-troisième expérience, tout pareil, nous avons à nouveau refait l’expérience de base, pour avoir des réplicats. Nous avons utilisé : béchers cristallisoir (le nouveau) acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75g) argile verte recyclée des séances précédentes (illite) (37,5g) seringue de 60 mL trépied règle papier maryse Nous observons 9 pockmarks, d’un diamètre moyen de 4,39mm. 26/04/2024 : Aujourd’hui, nous allons refaire les expériences des séances précédentes, pour avoir une reproductibilité : 2 fois plus de sédiment : 3cm 2 fois moins : 0,75 cm Expérience : Pour cette vingt-quatrième expérience, nous refaisons l’expérience 19, c’est-à-dire que nous allons chercher à avoir 3 cm de sédiment. Nous avons utilisé : béchers cristallisoir en plastique acide citrique (3,84g) (broyé) carbonate de potassium (4g)(broyé) eau minérale spatule cuillère balance papier pH sable (75 * 2 = 150g) argile verte (illite) (37,5 * 2 = 75g) seringue de 60 mL trépied règle papier maryse Résultats : En utilisant exactement les memes doses, nous avons eu 2,7cm de sédiment et non 3 cm. Peut être est-ce parce que le nouveau cristallisoir a des dimensions différentes. Nous avons eu 8 pockmarks, d’un diamètre moyen de 5,1 mm. Expérience : Pour cette vingt-cinquième expérience, nous allons refaire l’expérience 22, c’est à dire que nous allons mettre moitié moins de sédiment, donc 0,75 cm. Nous avons utilisé : béchers cristallisoir (le nouveau) acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75/2 = 37,5g) argile verte recyclée des séances précédentes (illite) (37,5/2 = 18,75g) seringue de 60 mL trépied règle papier maryse Résultats : On au eu quelques pockmarks mais pas des masses non plus. On a pu calculer les diamètre d’un seul pockmark. Nous avons eu donc 1 seul pockmarks d’une diamètre de 5mm. Nous avons pris le pH de l’expérience 24 pendant que nous faisions la 25e. Nous avons vu que le pH était basique. En effet, normalement, nous avons un pH de 8 à la fin de chaque expérience. Nous avons donc considéré que nos réactions étaient neutralisées. C’est peut être aussi car le papier pH est un outil difficile à manipuler, surtout dans une solution colorée par l’argile verte. Or, lorsque nous mettons plus de sédiment, on voit que notre réaction à plus de mal à se neutraliser. De plus, en arrivant au FabLab de géosciences, nous avons vu que l’argile de la séance passée avait réagit bizarrement : nous pensons que c’est le carbonate qui a réagit : Nous pensons que cela a quelque chose à voir avec l’agile (illite), qui doit elle aussi réagir avec l’acide. Nous avons donc fait plusieurs petites expériences. Nous avons mis de l’argile dans l’eau et avons pris le pH : pH 10. Nous avons mis de l’acide dans de l’eau : pH 2. Nous avons mis de l’acide dans de l’eau, mais en présence d’argile : pH 5. Nous voyons donc que l’illite est très basique ! Donc c’est normal que plus nous mettons d’argile (comme par exemple pour avoir 3 cm de sédiment), plus il est difficile de neutraliser la réaction, comme nous l’avons vu pour les expériences 19 et 24. De gauche à droite : Eau et argile ; Eau, argile et acide citrique ; Eau et acide. Il serait donc peut être judicieux d’adapter la quantité d’acide à la quantité d’illite, si nous voulons recycler les déchets. Nous ne pensons pas que le pH de notre solution puisse avoir un effet sur les pockmarks. C’est plutôt l’épaisseur de sédiment qui va impacter leur création. 03/05/24 : Pour cette dernière séance, nous avons à nouveau testé les expériences 18 et 17, c’est-à-dire que nous avons voulu avoir 0,25x moins de sédiment et 0,25x plus. Expérience : Pour cette vingt-sixième expérience, nous avons mis 0,25x moins de sédiments. Nous avons utilisé : béchers cristallisoir (le nouveau) acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75x0,75 = 56,25g) argile verte recyclée des séances précédentes (illite) (37,5x0,75 =28,125g) seringue de 60 mL trépied règle papier maryse Résultats : Nous avons observé 5 pockmarks (pour une moyenne de 6) d’un diamètre moyen de 5mm. Expérience : Pour cette vingt-septième expérience, nous avons mis 0,25x plus de sédiments. Nous avons utilisé : béchers cristallisoir (le nouveau) acide citrique (3,84g) (broyé) carbonate de potassium (4g) (broyé) eau minérale spatule cuillère balance papier pH sable (75+18,75 = 93,75g) argile verte recyclée des séances précédentes (illite) (37,5+ =46,875g) seringue de 60 mL trépied règle papier maryse Résultats : Nous avons observé 7 pockmarks (pour une moyenne de 6) d’un diamètre moyen de 5,5mm. Vibra sense https://wiki.fablab.sorbonne-universite.fr/BookStack/books/sismometre-vibra-senseProjet ROB3 2024 Chapitre pour le projet Polytech Sorbonne / ROB3, de février à mai 2024. Enseignants : Lilian Carillet, Guillaume Morel. Le sujet du projet ROBOT ECRIVAIN 1. Objectifs L’objectif principal de ce projet est de concevoir et réaliser un système robotique, c’est-à-dire sa partie mécanique, sa motorisation, sa commande et son interface de pilotage. Le cahier des charges fourni précise les fonctions que doit réaliser le système et les contraintes qu’il doit respecter. Pour les étudiants, l’objectif est au moins autant d’apprendre par la pratique les bases de la gestion d’un projet (c’est-à-dire la façon de s’organiser en équipe pour atteindre un objectif donné avec des moyens donnés) que d’aboutir à un prototype fonctionnel. 2. Cahier des charges Le but général est de faire un robot capable de dessiner avec un crayon sur un support plan horizontal. 2.1 Fonctions à réaliser Le robot doit être fixé ou posé sur une plaque horizontale carrée de 250mm par 250mm. Il doit être capable de réaliser deux exercices : 1) Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support différentes figures imposées de difficulté croissante : a. Une ligne de 5cm de long, b. Une ligne pointillée de 5cm de long, c. Un cercle de 2.5cm de rayon, d. Un cercle pointillé de 2.5cm de rayon. Le tracé de chacune des figures doit être réalisé en 10 secondes +/- 0.2 secondes. 2) Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support, un dessin imposé dans un carré de 5cm par 5cm. Le déplacement de l’organe terminal du robot devra être piloté par un joystick. Il est possible que la figure soit discontinue, et donc il faut prévoir de pouvoir relever le crayon du support horizontal sur lequel on écrit. Une fonction supplémentaire, optionnelle , peut être réalisée : Être capable de modifier la vitesse de déplacement du robot via l’interface. 2.2 Fonctions contraintes Les contraintes imposées sont : Respect des règles d’utilisation du FABLAB de Sorbonne Université au sein duquel vous travaillerez, en particulier la charte des FabLab du MIT. Cela implique que vous travaillerez sur le WIKI du FABLAB pour documenter votre projet. Il y a une bonne documentation ici pour savoir comment utiliser le WIKI. Utilisation de composants (moteurs, contrôleurs, boutons, éléments de guidage, alimentation stabilisée, boutons, etc.) parmi un ensemble imposé. Une liste de composants utilisables est disponible au paragraphe 4. Fabrication des pièces grâce à : Machine à découpe LASER. Imprimantes RAISE 3D PRO2. Ces machines du FABLAB de sont pas toutes accessibles tout le temps ni en même temps. C’est une contrainte qu’il vous faut intégrer dans la gestion de votre projet (par exemple, privilégier la découpe LASER qui est très rapide, lorsque c’est possible). Un objectif est de minimiser la quantité de matière utilisée pour réaliser le projet. Programmation en C utilisant la chaîne de développement Arduino IDE. 3. Organisation Les étudiants sont organisés en groupe de 3 dans la mesure du possible. Chaque groupe bénéficie de 6 séances encadrées tout au long du semestre. En dehors des séances encadrées, il est possible d’accéder au FABLAB en accès libre les lundis, mardis, jeudis et vendredis de 14h à 18h30. Pour cela il faut s’adresser au FABLAB. Le suivi des objectifs est un élément essentiel de la gestion de projet. Il a pour but de situer l’avancement du projet. Pour ce premier projet réalisé dans le cadre de votre cursus, des objectifs intermédiaires sont fixés par l’équipe enseignante afin d’éviter des erreurs de planification liées à l’inexpérience. Les objectifs sont ici exprimés en termes de livrables, qui sont les suivants : 3.1 Avant le début de la deuxième séance : o Remise d’un dossier de conception préliminaire. Il s’agit d’un dossier qui précise les choix généraux faits pour la solution que vous allez mettre en œuvre. o Remise d’un diagramme de GANTT : il s’agit d’un schéma qui précise qui-fait-quoi-quand. 3.2 Cinq jours après la fin de la troisième séance Remise d’un dossier de conception détaillée. Il s’agit d’un dossier qui précise tous les choix technologiques faits. Ce dossier contient notamment la CAO, les schémas électriques de connexion et les algorithmes de commande. Lorsqu’un dossier de conception détaillé est bien fait, en principe, le reste du projet consiste à réaliser le prototype en se référant à ce dossier. 3.3 Au plus tard 2h avant la fin de la dernière séance : o Démonstration finale de réalisation des deux exercices. Comme le timing est très serré, si des objectifs intermédiaires ne sont pas atteints, l’équipe enseignante fournit à l’équipe projet une solution type qui permet de poursuivre le projet selon le déroulement prévu. 4. Liste des composants et matériels disponibles Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de protoypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. 5.     Liste des fichiers fournis Ressources CAO.zip contient les fichiers Solidworks pour les deux modèles de servomoteurs datashetts.zip contient les documentations de quelques-uns des composants fourni Présentation initiale Sur cette page, vous pourrez trouvez les slides de la présentation qui vous est faite lors de la première séance (voir fichier joint).Quelques liens utiles vers des tutos, docs, etc. 1. Programmation Arduino Documentation officielle Arduino Référence Arduino : https://www.arduino.cc/reference/en/ Bibliothèque servo : https://www.arduino.cc/reference/en/libraries/servo/ Utilisation des interruptions : https://www.arduino.cc/reference/en/language/functions/interrupts/interrupts/ https://www.arduino.cc/reference/en/language/functions/externalinterrupts/attachinterrupt/ Divers tutoriels et exemples. Il existe des exemples dans l'IDE (Fichiers > Exemples) : https://docs.arduino.cc/built-in-examples/ https://docs.arduino.cc/tutorials/ 2. Schéma électrique Utilisation de résistances de rappel : http://wiki.t-of.info/Arduino/R%C3%A9sistanceDeRappel Utilisation de boutons poussoirs : https://docs.arduino.cc/built-in-examples/digital/StateChangeDetection Utilisation d'une LED : https://docs.arduino.cc/built-in-examples/basics/Fade 3. Tutos Solidworks M. Carillet vous a préparé un petit tuto pour préparer la découpe laser : https://youtu.be/IkJtQY5cAtI Et un autre qui porte sur la création de l'empreinte du palonnier : https://youtu.be/PK6qqXcBA3c PROJET ROB de Maroua, Marco, Yanis Projet Maranis : Un robot écrivain Informations Membres : Maroua Hriouit Yanis Sadoun Marco Grandclaude Mail: maroua.hriouit@etu.sorbonne-universite.fr yanis.sadoun@etu.sorbonne-universite.fr marco.grandclaude@etu.sorbonne-universite.fr Polytech ROB 3 Année 2023-2024 7 février 2024 - 22 mai 2024 Contexte et objectifs : Définition et objectifs du projet :  Un robot qui dessine Dans le cadre de nos études en robotique, on est amené à concevoir un robot capable de dessiner a l’aide d’un crayon fixé à l’extrémité terminale du robot. L'objectif principal de ce projet consiste à élaborer et mettre en œuvre un système robotique complet, englobant sa composante mécanique, son système de motorisation, son dispositif de commande, ainsi que son interface de pilotage. Le cahier des charges fourni définit de manière détaillée les fonctions que le système doit exécuter et les contraintes auxquelles il doit se conformer. Pour nous, étudiants, ce projet offre l'opportunité d'acquérir une expérience professionnelle en gestion de projet, en mettant particulièrement l'accent sur le travail en équipe. Il nous permettra également de mettre en pratique tout ce que nous avons étudié tout au long du premier semestre, y compris la conception et la modélisation, le calcul des modèles géométriques direct et inverse, ainsi que la programmation en C. Et enfin apprendre à manipuler des machines d’impression 3D et découpe LASER. Lors de notre première séance, nos professeurs nous ont fourni une description fonctionnelle détaillée des besoins  et contraintes pour notre projet. C'est sur cette base que nous avons construit et développé notre plan de travail. Voici un résumé de ces exigences clés : Description fonctionnelle des besoins : 1 - Dessin Précis : Le robot doit être capable d'exécuter des dessins précis définies en 10 secondes +/- 0.2 secondes conformément aux spécifications fournies, en respectant les dimensions et les formes définies : a. Une ligne de 5cm de long, b. Une ligne pointillée de 5cm de long, c. Un cercle de 2.5cm de rayon, d. Un cercle pointillé de 2.5cm de rayon. 2 - Dessiner, en utilisant un crayon fixé à l'extrémité du bras robotique, un motif prédéfini sur le plan de la plaque de support, dans un carré de dimensions 5 cm par 5 cm. Le déplacement du bras robotique sera contrôlé par un joystick. Il est à noter que la figure peut être discontinue, ce qui implique la nécessité de pouvoir soulever le crayon du support horizontal au besoin. 3 - Une fonctionnalité supplémentaire pourrait être mise en œuvre : La possibilité de régler la vitesse de déplacement du robot à travers l'interface. Moyens à disposition : - Un crayon - Interface de commande : - Une carte arduino UNO avec câble USB-B ; - Un joystick ; - Une platine de prototypage ; - Alimentation régulée 5V ; - Câbles, LEDs, boutons poussoirs, résistances. - Motorisation : - Deux servomoteurs HS422 180° ; - Un servomoteur Emax ES08A 180°. - Mécanique : - Matière PLA pour impression 3D ; - Feuilles medium : 3mm et 6mm d’épaisseur ; - Vis et écrous : M2, M2.5, M3, M4.     - Roulements et axes de diamètre 4mm. Diagramme de Gantt : 💭 Remarque Importante : Il est important de noter que notre diagramme de Gantt est un outil vivant. Comme le projet progresse, nous pouvons nous attendre à ce qu'il soit ajusté et modifié pour refléter l'évolution de nos plans et la réalité de notre progression. Cette flexibilité nous permettra de rester réactifs et adaptatifs face aux défis et aux opportunités qui se présenteront. Etape 1 : Propositions de réalisation et analyse des risques 🔍⚙️ Solution 1 : Robot voiture Principe : Comme première solution, l'idée consiste d'utiliser une voiture à deux roues sur laquelle seront fixés nos deux moteurs. Ensuite, nous envisageons de positionner une forme cylindrique sur la voiture, à l'intérieur de laquelle sera intégré un engrenage. Cette configuration permettrait la translation du stylo selon l'axe z, offrant ainsi une méthode mécanique pour réaliser les mouvements nécessaires à notre robot. Croquis :                                                               figure 1 : croquis du robot voiture Schéma cinématique :                                                          figure 2 : schéma cinématique du robot voiture Contraintes: Compte tenu des moteurs utilisés, cette solution ne sera pas viable. En effet, les servomoteurs n'effectuent qu'une rotation de 180 degrés, ce qui signifie que pour parcourir une certaine distance D, il faudra effectuer n tours de 360 degrés. Cela nous obligerait à utiliser un diamètre de roues très important, entraînant des complications liées aux calculs et aux glissements. Solution 2 : robot cartésien Principe : Ce robot serait conçu pour se déplacer suivant un système de coordonnées en X et Y, offrant une grande précision dans un espace bidimensionnel. La particularité de ce robot réside dans sa capacité à effectuer des translations le long de deux axes distincts : horizontal (axe X) et vertical (axe Y). Pour ce faire, le robot serait équipé de rails horizontaux et verticaux, permettant des mouvements fluides et contrôlés dans ces deux directions. Croquis  : figure 3: croquis du robot cartésien Schéma cinématique : figure 4 : schéma cinématique du robot cartésien Contraintes : Manque de matériel pour les translations : Nous ne disposons pas des composants nécessaires, tels que des courroies, pour réaliser les translations efficaces sur les axes X et Y. L'absence de ces éléments essentiels est un obstacle à la construction de ce système . Complexité de fabrication des rails : La conception et la réalisation des rails, essentiels pour les déplacements précis du robot, nous semblent particulièrement complexes, surtout avec les seuls servomoteurs disponibles. Incapacité de mouvement sur l'axe Z : Avec les composants actuels, le robot ne serait pas capable de lever le crayon le long de l'axe Z. Cette limitation rend impossible la réalisation de tracés en pointillés, une des exigences clés du cahier des charges. Bien que conceptuellement intéressante, la solution du robot cartésien se heurte à des contraintes matérielles et techniques qui compromettent sa faisabilité dans notre contexte actuel. Solution 3 : Robot constitué d'axe en série Principe : Le robot envisagé se caractérise par une structure à axe en série. Il intègre un châssis stable comme base principale, sur lequel est fixé un bras articulé. Ce bras se compose de trois segments (bielles), chacun connecté au suivant via une liaison pivot, permettant ainsi une gamme étendue de mouvements. La dernière bielle est directement soudée à un adaptateur, conçu pour maintenir fermement un stylo. La stabilité et la précision du mouvement des bielles seront assurées par l'intégration de roulements. Parallèlement, un support de feuille sera installé, aligné dans le même plan que le châssis du robot, afin de faciliter l'interaction précise du stylo avec le papier. Croquis : figure 5 : croquis du robot à axe en série Schéma cinématique :           figure 6 : schéma cinématique du robot à axe en série Avantages : Cinématique simple : La structure à axe en série offre une cinématique plus facile à concevoir et à programmer, grâce à une chaîne cinématique linéaire et moins complexe. Risques et défis : Stabilité structurelle : Ces robots peuvent présenter des problèmes de stabilité, surtout lors de la manipulation de charges ou lors de mouvements rapides. Précision dans les positions extrêmes : La précision peut diminuer aux extrémités de la portée du robot, où les effets de la gravité et de la flexion des composants sont plus prononcés. Solution 4 : Robot à trois rotations Principe  : Ce concept de robot s'inspire directement de la morphologie humaine, intégrant trois axes de rotation pour imiter les mouvements naturels du corps. En faisant une analogie avec le corps humain, la gestion de la hauteur de la pince (qui agirait comme une main) est assurée par deux rotations principales : une au niveau de l'« épaule » et une autre au niveau du « coude », correspondant respectivement aux rotations 2 et 3 du système. Cette configuration permet une manipulation verticale précise et polyvalente de la pince. Pour compléter la gamme de mouvements, une troisième rotation est ajoutée au niveau du « poignet », offrant la capacité de torsion. Cette troisième rotation apporte une flexibilité supplémentaire, essentielle pour des tâches complexes nécessitant une orientation fine de la pince. Croquis : figure 7 : croquis du robot à  3 rotations Schéma cinématique :                                 figure 8 : schéma cinématique du robot à trois rotations Avantages : Fabrication plus efficace : L’ensemble des pièces peuvent être réalisé en découpe laser ce qui permet une production plus rapide et précise des pièces. Inconvénients : Stabilité du stylo : Assurer que le stylo reste précisément à la position voulue durant les mouvements complexes. Complexité du modèle cinématique inverse : La gestion des trois rotations (épaule, coude, poignet) rend le calcul du modèle cinématique inverse complexe, crucial pour la précision des mouvements du robot. Solution 5 : Robot avec bras parallèles Principe : Le concept envisagé ici est celui d'un robot à bras parallèle à deux axes. Afin de gérer les déplacements verticaux du stylo le long de l'axe Z, le système sera doté d'un mécanisme pignon-crémaillère. Ce dispositif garantit une transition douce et maîtrisée du stylo, évitant ainsi les saccades ou les décalages qui pourraient compromettre la qualité du tracé.(le stylo montera et descendra avec une fluidité et une régularité qui permettront de maintenir une qualité de dessin constante). Comme pour le modèle à axe en série, les points de pivot au niveau des "coudes" du robot seront équipés de roulements. Croquis :                                         figure 11: croquis détaillé de notre robot à bras parallèles Schéma cinématique :                                        figure 12 : schéma cinématique du robot à bras parallèles Avantages : Solidité structurelle : Les robots parallèles offrent une grande solidité et stabilité, ce qui est avantageux pour des tâches nécessitant de la précision et de la force. Cinématique simplifiée possible : En configurant les bras du robot pour former un parallélogramme avec les axes de servomoteurs alignés, il est possible de simplifier la cinématique, facilitant ainsi la programmation et le contrôle. Risques et défis: Complexité cinématique initiale : Sans cette simplification, la cinématique des robots parallèles peut être initialement plus complexe, nécessitant une compréhension approfondie des systèmes mécaniques. De plus , il faut s’assurer que les rotations des servomoteurs de 180° permettent de couvrir l’ensemble de la surface souhaitée. Solution retenue Suite à une analyse approfondie des différentes options, notre équipe a décidé de privilégier la conception d'un robot parallèle pour la suite du projet. Cette décision s'appuie sur plusieurs facteurs clés : Conformité au cahier des charges : Le robot parallèle répond efficacement aux exigences spécifiées dans le cahier des charges. Sa structure offre la précision et la solidité requises pour les tâches prévues, tout en permettant une gamme de mouvements adaptée à nos besoins. Faisabilité technique : Avec les composants et les ressources à notre disposition, la réalisation d'un robot parallèle est non seulement possible mais également pratique. La possibilité de simplifier sa cinématique en configurant ses bras en parallélogramme facilite sa programmation et son contrôle, rendant le projet plus gérable dans le cadre de nos contraintes techniques et temporelles. Nota bene : Le nom  de notre robot sera "Maranis"; il est formé en combinant les prénoms Maroua, Marco, et Yanis. Il symbolise l'union de nos efforts et la collaboration au cœur de notre projet... Etape 2 : Conception Détaillée de Notre Projet 🌟🛠️💡 A) calculs Mécaniques 🛠️ À cette étape, nous nous sommes concentrés sur les aspects techniques du projet en abordant la modélisation mécanique appliquée aux bras de notre robot. Notre objectif ? Détailler les modèles géométriques, à la fois direct et inverse, que nous avons développés. En effet, ces modèles sont cruciaux pour préciser la position de l'effecteur du robot. L'utilisation de ces modèles géométriques nous offre la capacité de réguler avec exactitude la position et l'orientation de l'effecteur, en se basant sur les angles des articulations. Cette précision est fondamentale pour diverses applications dans les domaines de la robotique et de l'automatique, où la manipulation et le positionnement exacts sont primordiaux. A - Modélisation du problème figure 13 : schéma cinématique du robot à bras parallèles Configuration des Moteurs et Simplification Géométrique : Les moteurs de notre robot sont disposés l'un au-dessus de l'autre, mais orientés en sens inverse. Cette configuration particulière permet d'aligner les axes des moteurs, réduisant ainsi l'espace entre deux corps liés et simplifiant de ce fait le modèle géométrique et son inverse. En effet, en alignant les corps opposés à une longueur égale (les quatre bras mesurant la même taille dans notre cas), nous transformons le système en un parallélogramme. Cette transformation apporte plusieurs relations internes utiles au système, liant les angles et les diagonales. Modélisation et Références du Système :                                                                                                                            Nous définissons un repère galiléen 𝑅0 = (𝑥0 , 𝑦0 , 𝑧0 ) associé au bâti (0). Le robot est composé de quatre bras : les bras 2 et 4 mesurant une longueur 𝐿1, tandis que les bras 1 et 3 ont une longueur 𝐿2.                                                                - Le bras 1 est en liaison pivot autour de l'axe (𝑂0, 𝑧0) avec le bâti. L'angle formé est noté θ1 = (𝑥0, 𝑥1) = (𝑦0, 𝑦1).           - Le bras 2, aussi en liaison pivot autour de l'axe (𝑂0, 𝑧0) avec le bâti, a un angle θ2 = (𝑥0, 𝑥2) = (𝑦0, 𝑦2).                           - Le bras 3 est en liaison pivot autour de l'axe (𝑂3, 𝑧0) avec le bras 2. L'angle α3 = (𝑥2, 𝑥3) = (𝑦2, 𝑦3) est défini, avec le bras 3 restant horizontal et parallèle à l'axe 𝑥0.                                                                                                                       - Le bras 4, en liaison pivot autour de l'axe (𝑂4, 𝑧0) avec le bras 1, n'est pas visible dans notre modèle simplifié puisque n’intervenant pas dans nos calculs . L'effecteur du robot se trouve au point P et a  pour coordonnées (𝑥, 𝑦) dans ce système. Cette modélisation permet de comprendre clairement la structure mécanique du robot et facilite la programmation et le contrôle de ses mouvements. B - Modèle géométrique direct Dans notre projet robotique, nous avons élaboré un modèle géométrique direct qui se base sur des principes de trigonométrie fondamentaux, rendant sa détermination relativement simple. Ce modèle utilise des formules basiques pour calculer les positions du robot. On rappelle que notre modèle se base sur un parallélogramme.  📐Or, dans un parallélogramme, les côtés opposés sont égaux et les angles adjacents sont complémentaires. De plus, les diagonales se coupent en leur milieu et forment des triangles rectangles avec les côtés du parallélogramme. Nous pouvons donc utiliser ces propriétés pour établir des relations entre les longueurs des bras . Dès lors : Pour un robot standard avec des bras de longueurs différentes, les coordonnées x et y de l'effecteur peuvent être exprimées comme suit : x = L1 sin(θ2) - L2 sin(θ1) y = L1 cos(θ2) +L2 cos(θ1) Cependant , nous avons spécifiquement choisi de travailler avec un losange, où ( L = L1 = L2 ). Cette approche réduit la complexité des calculs et permet une meilleure compréhension de la cinématique du robot. Avec cette simplification, notre modèle géométrique direct se résume à des formules plus simples : x = L (sin(θ2) - sin(θ1)) y = L (cos(θ2) + cos(θ1)) 💭 Remarque :"Pour le détail des calculs, veuillez consulter le PDF intitulé 'Calcul Modèle Géométrique', joint en annexe." Nous avons pu valider notre modèle géométrique direct en utilisant SolidWorks. Après avoir conçu une version simplifiée de notre robot et défini des angles pilotes, nous avons simulé plusieurs positions pour obtenir les coordonnées x et y via le logiciel. La comparaison de ces résultats avec ceux calculés par nos formules mathématiques a montré une correspondance notable, validant ainsi la fiabilité de notre modèle géométrique. figure 14: capture d'écran de notre teste du modèle géométrique direct sur SolidWorks C- Modèle géométrique Inverse : L’élaboration du modèle géométrique inverse est une étape essentielle pour le contrôle précis de notre robot. Ce modèle nous permet de calculer les angles nécessaires aux moteurs pour positionner l'effecteur à un point spécifique (x, y) dans l'espace. Pour commencer, nous avons établi l'angle α1 en utilisant la fonction arctangente, qui est dérivée du rapport entre les côtés opposé et adjacent d'un triangle rectangle formé par les coordonnées de l'effecteur : α1 =Arctan(x/y) Ensuite, nous avons appliqué le théorème de Pythagore au triangle rectangle ayant pour longueur 𝑥, 𝑦 𝑒𝑡 𝑙 pour déterminer la longueur de l'hypoténuse l en fonction des coordonnées x et y : 𝑙 = √(x^2+y^2) En utilisant la propriété fondamentale des triangles selon laquelle la somme des angles internes est égale à 180°, nous avons déduit une relation entre les angles α3 et α2: α3 = 180°-2*α2  et  α2=90°-α3/2 Enfin, grâce à la loi des cosinus ou la formule d'Al-Kashi, nous avons pu exprimer α3 en termes des longueurs des bras L1 , L2 et de l’hypoténuse 𝑙 : α3= arccos((L1^2+L2^2-𝑙^2)/(2 L1 L2))Ces relations nous permettent de déterminer les angles des moteurs: θ1=α2-α1  et   θ2=α2+α1 Toutefois, grâce à notre simplification du modèle par un losange ; longueur 𝐿 = 𝐿1 = 𝐿2. On obtient les relations suivantes : α1 =Arctan(x/y) α2=90°-α3 /2 α3= arcos((2L^2-𝑙^2)/2L^2) θ1=α2-α1 θ2=α2+α1 Avec ces formules, nous avons en main un système complet qui nous permet de calculer les angles des moteurs pour positionner précisément l'effecteur à un point (x, y) dans l'espace, en considérant les bras de longueur égale. D - Modélisation de la translation : Notre mécanisme de translation axiale s'appuie sur un agencement pignon-crémaillère. La crémaillère présente un diamètre de base Bbase 41,25 mm. En prenant en compte un module de conception m de 1,5, nous procédons au calcul du diamètre effectif Deff qui sera utilisé dans les calculs suivants . Le diamètre effectif est calculé comme suit : Deff = Bbase + 2,5 m=41,25+2,5×1,5=45 mm Le calcul du diamètre effectif s'appuie sur des données initiales issues de nos premières simulations réalisées sur SolidWorks, en particulier pour le mécanisme pignon-crémaillère. Il est important de noter que ces chiffres, bien que précis dans le cadre de nos simulations initiales sont susceptibles d'évoluer et d'être ajustés au fur et à mesure de l'avancement de notre projet et à mesure que de nouvelles données seront recueillies et analysées. Le lien entre le nombre de révolutions complètes Nrev du servomoteur Emax ES08A et l'angle de déplacement θ est donné par la relation : Nrev=θ/360° La position verticale z de la plaque mobile peut être déduite à partir de θ en utilisant l'équation : z=Nrev *Deff * pi ⟹ z=θ/360° * Deff * pi Ceci nous conduit aux expressions des modèles géométriques de translation axiale : z=θ/360° * Deff * pi ( modele direct)θ=(360°*z)/(Deff * pi ) ( modèle inverse) Ces équations nous fournissent un moyen précis pour établir la position verticale de la plaque en se basant sur l'angle de rotation du servomoteur et, à l'inverse, pour calculer l'angle nécessaire pour atteindre une position verticale déterminée. B) conception CAO 🖥️✏️📐: Nous passons maintenant à la phase de modélisation des composants de notre robot. Nous utiliserons SolidWorks pour cette tâche, un outil de CAO parfait pour transformer nos plans en modèles numériques. C'est une étape importante pour rendre nos idées concrètes et fonctionnelles. Notre création robotique est une interprétation du robot pantographe, caractérisée par une conception où les axes de deux servomoteurs convergent, orchestrant les mouvements des bras et en conséquence, la trajectoire du stylo. La structure du robot est articulée autour de trois sous-ensembles principaux: Le bâti : Formant la fondation du robot, ce premier sous-ensemble est chargé d'accueillir et de stabiliser les deux servomoteurs principaux. Ces moteurs sont essentiels pour actionner les mouvements latéraux et longitudinaux, conférant au robot une capacité de translation précise sur le plan 2D. Les Bras et le Porte-Stylo : Ce sous-ensemble représente les membres actifs du robot. Attachés aux servomoteurs, les bras articulés du robot sont la clé de sa capacité à dessiner. Ils suivent avec fidélité les instructions de mouvement pour guider le stylo sur la surface dédiée. , Le Mécanisme de Translation Verticale : Incorporant un système de pignon et crémaillère, ce troisième sous-ensemble enrichit le robot d'une fonctionnalité verticale. Il permet à la surface de dessin de s'élever ou de s'abaisser, donnant au robot la faculté de ponctuer le papier de dessins en pointillés ou de lever le stylo entre les points, conformément aux spécifications techniques préétablies. -  Idées Créatives pour la Conception des Pièces 🎨🔩                                                                   .            figure 14 : Idée de bâti pour la modélisation                                   figure 15 : Idée de bras pour la modélisation                                                     figure 16 : Idée de plaque élévatrice pour la modélisation -  le Développement des Pièces 🛠️: Figure 17 : Capture d’écran de notre conception de robot sur solidWorks A) Bâtis : Notre bâti est composé de quatre pièces différentes. Nous avons créé des logements pour les deux servomoteurs grâce aux dimensions qui nous ont été fournies. Notre bâti assure ainsi le maintien en position des deux servomoteurs grâce à des liaisons appuis-plan réalisées par un épaulement. La mise en position est assurée par des vis qui seront installées lors du montage de nos pièces. Figure 18 : Epaulement et montage des moteurs sur le bâti B) Bras:  L'assemblage du bras de notre robot se compose de quatre pièces distinctes : deux demi-bras, l'un côté moteur et l'autre côté effecteur, ainsi qu'un support cylindrique qui nous permettra de loger notre marqueur. Pour assembler les deux demi-bras, nous utiliserons un roulement à billes et un axe en métal afin d'assurer la liaison pivot. Figure 19: assemblage des bras Demi-bras 1: (coté moteur) Ce demi-bras est une bielle qui permet la  liaison directe entre le servomoteur et le reste du bras robotique. Il est fixé au servomoteur via un système de vis.De l’autre côté de la pièce, un enlèvement de matière circulaire a été creusé pour laisser de la place à un roulement à bille. Figure 20 : demi-bras 1 Demi-bras 2 : (cote effecteur) Ce demi-bras est conçu pour tenir et manipuler l'effecteur, ici un marqueur.À une extrémité, ce demi-bras présente un creux compatible avec la liaison pivot, permettant une rotation fluide et un alignement précis avec le premier demi-bras. L'autre extrémité est spécialement élargie pour former un anneau, dans lequel est placé le cylindre creux tenant le marqueur. Figure 21 : demi-bras 2 💭 Remarque : La pièce mentionnée ici se trouve en deux exemplaires dans l'assemblage du robot. Les extrémités en forme d'anneau de ces deux composants sont disposées l'une sur l'autre, créant ainsi une superposition alignée. Ces deux bras sont alors connectés l'un à l'autre par l'intermédiaire d'une pièce cylindrique, le support du stylo , dont nous détaillons la conception et la fonction dans la suite de notre présentation. Support du stylo Le support à marqueur est constitué d’un cylindre creux et d’un rebord rectangulaire qui assure un contact appui plan avec l’anneau d’une des bielles, ce qui évite que le support ne glisse. Il est essentiel que les bras puissent tourner autour de ce cylindre, d'où la nécessité d'une liaison pivot avec un léger jeu entre le cylindre et les deux demi-bras côté effecteur. Sur le bord du cylindre, un trou a été aménagé pour permettre l'insertion d'un axe. Cet axe sert à maintenir et ajuster la position du marqueur à l'intérieur du support. Un écrou fixé sur cet axe garantira que le marqueur reste stable et en place dans le cylindre.                   Figure 22 : Support du marqueur C) Plaque montante: Afin de soulever le stylo et exécuter les motifs de dessin spécifiés dans notre cahier des charges, nous avons choisi d'implémenter un mécanisme de pignon-crémaillère. Ce système est conçu pour élever la plaque sur laquelle le dessin est effectué. Pour la conception de ce mécanisme, nous avons utilisé l'outil Toolbox de Solidworks, un choix stratégique qui nous a permis de modéliser avec précision et efficacité le système pignon-crémaillère adapté à nos besoins spécifiques tout en gagnant du temps . Cet outil nous a offert la flexibilité nécessaire pour ajuster les paramètres de conception . Il est important de veiller à la cohérence du module utilisé pour le pignon et la crémaillère, car ils doivent impérativement être identiques pour assurer un fonctionnement correct et efficace. Pour notre projet, nous avons opté pour un module de 1,5. Ce choix garantit une compatibilité parfaite entre le pignon et la crémaillère, essentielle pour une transmission de mouvement fluide et précise. Figure 23 : plaque montante Dans notre conception, nous avons soigneusement intégré une encoche dans la plaque de dessin spécifiquement conçue pour y loger la crémaillère (pour renforcer la fixation de la crémaillère sur la plaque, nous prévoyons d'ajouter des points de colle aux emplacements stratégiques.) Par ailleurs, pour garantir la stabilité de la plaque de dessin, nous avons conçu une pièce supplémentaire ( petit pied représenté en noir sur la figure 21).  Cette pièce est spécialement élaborée pour accueillir un axe .L'insertion de cet axe dans la pièce conçue assure un maintien ferme et stable de la plaque, une caractéristique essentielle pour la précision et la qualité des dessins réalisés par le robot. Enfin , pour maintenir en place l'ensemble des pièces précédemment évoquées, nous allons découper uneplaque sur laquelle nous allons assembler toutes ces pièces. ChatGPT - Processus de Fabrication 🏗️⚙️ Nous avons choisi la découpe laser pour fabriquer la majorité nos pièces. Cette décision découle de plusieurs raisons. Tout d'abord, la découpe laser offre une précision  remarquable dans la réalisation de pièces, permettant des finitions nettes et détaillées. De plus, elle est rapide et efficace, rendant le processus de fabrication plus rapide comparé à l'impression 3D, qui peut prendre plus de temps pour produire des objets complexes. La découpe laser excelle également dans la découpe de matériaux variés, offrant une flexibilité dans le choix des matériaux adaptés aux besoins spécifiques du projet. En outre, elle est souvent plus économique pour la production en série de pièces, offrant une alternative rentable par rapport à l'impression 3D, notamment pour des applications où la solidité mécanique et la précision sont essentielles. Toutefois , nous avons opté pour l'impression 3D pour la fabrication des pieds qui servent de support à notre plaque de dessin, ainsi que pour le support cylindrique destiné à accueillir le stylo. Cette décision est motivée par la complexité de la conception de ces pièces et leur épaisseur importante , qui rendent leur fabrication difficile avec la découpe laser disponible à Polytech. L'impression 3D offre la flexibilité et la précision nécessaires pour réaliser ces composants aux formes spécifiques et aux dimensions requises. Notre modélisation Solidworks est accessible en annexe dans le fichier zip "solidworksRobot.zip" Nos fichiers DXF et SVG, préparés pour la découpe laser, sont également disponibles dans "solidworksRobot.zip" . C) Etude électrique ⚡🔌 Dans cette section, nous détaillons l'architecture électronique de notre robot, en mettant l'accent sur le matériel, l'alimentation et la connectique. Le matériel utilisé : Le cœur de notre système de commande est une carte Arduino Uno. Elle est configurée pour contrôler trois servomoteurs : deux servomoteurs HS422 et un servomoteur Emax ES08A. De plus, nous intégrons trois boutons-poussoirs et un joystick pour assurer une interaction utilisateur intuitive, en particulier pour la commande manuelle du stylo. La visualisation de l'état du système et des modes de fonctionnement est rendue possible par l'utilisation de LED : deux pour signaler l'activation des fonctions principales et une troisième pour indiquer le type de trait (continu ou pointillé). Les connexions électriques entre ces composants sont établies à l'aide d'une plaque de prototypage. L'alimentation : Le système robotique est alimenté directement par une carte Arduino Uno, car les besoins en tension et en courant sont compatibles avec ses capacités ( suffisamment faibles). Pour garantir une source d'énergie stable et fiable, nous utiliserons le chargeur standard de l'Arduino, branché via sa prise jack, assurant ainsi le fonctionnement optimal de notre robot. Connectique des Éléments à l’Arduino : Le tableau ci-dessous récapitule la connexion des divers composants aux pins correspondants de la carte Arduino Uno : Le joystick: Le joystick est un composant clé pour la deuxième fonctionnalité attendue, à savoir le contrôle manuel du déplacement du stylo dans un carré de 5 cm de côté. Il dispose de trois sorties : un bouton poussoir et deux potentiomètres fournissant des valeurs analogiques entre 0 et Vcc. Ces valeurs sont traduites en pourcentages de vitesse pour chaque axe, variant de -100% à +100%, permettant ainsi un contrôle précis et réactif du mouvement du stylo. Schéma électrique : Pour la réalisation du schéma électrique et le câblage de notre solution robotique, nous avons choisi d'utiliser le logiciel Tinkercad. Cet outil en ligne s'est révélé être un choix judicieux. En effet, le logiciel offre une large gamme de composants électroniques virtuels qui peuvent être facilement glissés et déposés dans le schéma, permettant ainsi une représentation précise de notre configuration matérielle. figure 24 : Illustration du câblage de notre robot 💭 Remarque : Ici ,le joystick est imité avec deux potentiomètres et un bouton-poussoir, en raison de l'absence de joystick dans le logiciel. Nous avons également inclus un bloc d'alimentation temporaire pour tester la conformité électrique du circuit, qui ne sera pas inclus dans le montage final. figure 25: Schéma électrique de notre robot D) Algorithmes de commande 📊💻 Les Bibliothèques utilisées: La bibliothèque `Servo.h` est un composant essentiel de l'environnement de développement Arduino, spécialement conçue pour la commande des servomoteurs. Cette bibliothèque intègre un ensemble de fonctions destinées à simplifier la gestion des signaux PWM, qui sont important  pour le contrôle précis de la position et de la vitesse des servomoteurs. Parmi les fonctions offertes par `Servo.h`, on retrouve : - `attach()` : pour lier un servomoteur à une broche spécifique. - `write()` : pour définir la position du servomoteur en degrés. - `read()` : pour lire la position actuelle du servomoteur. - `writeMicroseconds()` : pour un contrôle plus fin en spécifiant la durée de l'impulsion. - `detach()` : pour libérer la broche associée au servomoteur. - 'pinMode()' : pour donner le mode d’entrée ou de sortie de la broche spécifiée. Grâce à cette bibliothèque, il est possible de gérer simultanément plusieurs servomoteurs de manière autonome, ce qui est indispensable pour la complexité de notre projet. Développement d'algorithmes secondaires : Notre programme intègre diverses fonctions secondaires qui permettent de faire fonctionner les fonctions principales. Une fonction de détermination des coordonnées actuelles basée sur les angles des servomoteurs, conformément au modèle géométrique du robot. Une fonction de calcul des angles requis pour les servomoteurs afin d'atteindre un point cible, suivant le modèle géométrique inverse. Une fonction spécifique pour localiser le point le p lus proche sur un cercle de rayon 2,5 cm, centré sur la surface de travail, par rapport à la position actuelle du stylo. Une fonction de calcul du point de départ optimal pour tracer une ligne de 5 cm de longueur à l'intérieur d'un carré de 5 cm de côté. Une fonction d'estimation de l'intervalle d'angles possibles pour les segments de 5 cm débutant au point actuel, tout en restant dans les limites du carré prédéfini. Une fonction de commande qui ajuste la hauteur de la plaque de dessin, permettant ainsi au stylo de toucher ou de se retirer de la surface, facilitant de ce fait la création de motifs continus ou en pointillés. Le fonctionnement général de notre algorithme : La logique centrale de notre programme est  conçue pour réagir aux signaux des boutons poussoirs, initiant ainsi des actions prédéfinies correspondantes. - Fonction de Dessin de Cercle : La première opération programmée est le dessin d'un cercle. Cette fonction débute par la localisation du point initial du cercle. Une fois ce point identifié, elle positionne le stylo pour débuter le tracé et entreprend ensuite le parcours circulaire, complétant un tour complet de 360 degrés. - Fonction de Traçage de Ligne : La seconde fonction a pour objectif de tracer une ligne droite de 5 cm à l'intérieur d'une zone carrée de dimensions égales. Le programme dirige d'abord l'effecteur vers le point de départ le plus approprié à l'intérieur de ce carré. Il utilise ensuite une routine secondaire pour générer une orientation aléatoire, mais admissible pour le tracé, avant de procéder à l'exécution du tracé de la ligne. - Fonction de Contrôle Manuel : La troisième fonctionnalité offre un contrôle manuel du mouvement du stylo via un joystick. Les signaux issus des potentiomètres du joystick sont convertis en un pourcentage de vitesse, qui peut varier de -100% à 100% pour les deux axes du plan. - Fonction de Navigation Autonome : Enfin, une fonction de navigation autonome est implémentée pour déplacer le robot vers un point cible prédéterminé. Cette fonction calcule les angles nécessaires pour chaque servomoteur afin de diriger précisément le stylo vers le point désigné. Notre algorithme est entièrement accessible dans le document joint, intitulé "code robot maranis.ino". Le pseudo code de notre programme est également accessible dans le document joint, intitulé "Les différents pseudo-codes du programme.pdf" E) Test de notre modèle électrique-informatique ⚡🖥️ Pour valider notre modèle électrique et informatique, nous avons effectué une simulation sur le simulateur Arduino Wokwi. Les résultats se sont révélés concluants : les servomoteurs réagissent conformément à nos attentes, en réponse aux signaux des boutons poussoirs et du joystick en mode manuel. Cette simulation est accessible ici, permettant ainsi de tester et d'expérimenter notre conception directement. F) Montage et test du robot  🛠️🤖✔️ Nous avons consacré la troisième séance à la fabrication des différentes pièces de notre robot. Pour garantir que notre plaque verticale soit bien droite, nous avons ajouté une autre plaque de guidage afin de nous assurer que nos deux axes métalliques soient parfaitement parallèles.                                                                                                                        figure 26: Photo de notre première version de robot Lors de l'exécution de notre code, la translation selon l'axe Z, assurée par la plaque de dessin pour réaliser les pointillés, fonctionnait parfaitement.                                                                                                                                      figure 27: Gif de la montée de notre plaque de dessin Cependant, nous avons constaté que nos bielles ne se déplaçaient pas comme prévu. Ce dysfonctionnement était dû à la grande défectuosité des petits servomoteurs qui contrôlaient le mouvement des bielles, présentant une erreur d'environ 30 % par rapport aux performances attendues. 💭 Remarque : Après plusieurs recherches, nous avons découvert que ces servomoteurs fonctionnaient de 0 à 280 degrés, et non de 0 à 180 degrés comme mentionné dans la documentation. Malheureusement, notre montage ne permettait pas simplement de remplacer ces moteurs par des plus grands. Néanmoins, nous n'avons pas baissé les bras et avons décidé de repartir de zéro afin de concevoir un modèle nous permettant d'utiliser de grands servomoteurs pour les bras de notre robot et un petit servomoteur pour le mouvement de translation. __________________________________________________________________________________________________ Proposition de Réalisation du nouveau Robot :🤖🔧 A) Principe de Conception : Dans le cadre du développement de cette nouvelle version de notre robot, l'objectif principal a été de concevoir un système où les composants sont agencés de manière optimale pour que les plaques puissent à la fois supporter le poids des servomoteurs et minimiser le gaspillage de matériel. Pour ce faire, nous avons opté pour une approche de réutilisation des composants existants tout en éliminant les éléments devenus superflus. Nous avons commencé par démonter la partie supérieure de l'ancien robot, tout en conservant ses bras, ce qui nous a permis de réduire les coûts et de limiter l'impact environnemental associé à la production de nouvelles pièces. Par la suite, nous avons procédé à la réduction dimensionnelle des deux axes de guidages  qui permettaient auparavant à la plaque dessin de se lever, en optant pour une solution plus compacte et efficace. Nous avons choisi d'utiliser uniquement le palonnier d'un petit servomoteur pour réaliser le mouvement de translation de la plaque (retirant ainsi le mécanisme de pignon-crémaillère). Cette modification a non seulement simplifié la conception globale, mais elle a aussi contribué à alléger le robot.                                              figure 28 : dessin de l'allure de notre nouvelle version de robot écrivain Cette approche révisée offre donc une structure plus légère et économiquement viable, tout en conservant l'efficacité et la fonctionnalité requises pour les tâches que le robot est destiné à accomplir.  B)  Schéma cinématique : figure 29 : schéma cinématique de notre nouveau  robot C) Conception Détaillée de Notre Nouveau Robot : 1- Calcul Mécanique : Pour analyser la mécanique du système, nous avons étudié les deux triangles, O1BP et O2AC, où P représente le point d'intersection entre la droite BC et celle passant par O1. Cela nous a permis de calculer les différents paramètres nécessaires pour notre conception. Grace à la formule d’Al Kashi on a : α = arcos((l12 – l42 + O1P2)/(2L1*OP1)) avec OP1 = √((-a+x)^2+y^2) β = arctan(y / (a-x)) θ1= π – (α - β) δ = arcos( (l22 – l32 + O2C2)/ 2*l2*O2C) avec O2C= √(a+x)2-y2 et ϒ = arctan (y/(a+x)) Donc θ2 = δ + ϒ 2- Conception CAO: Le nouveau robot est composé de trois sous-ensembles principaux : Le Bâti : Plus compact, il héberge deux grands servomoteurs pour les mouvements latéraux et longitudinaux, permettant une navigation précise sur le plan 2D. Les Bras et le Porte-Stylo : Les bras du robot sont articulés et reliés aux servomoteurs, permettant des mouvements fluides. Le porte-stylo, situé à l'extrémité des bras, maintient fermement un stylo. Le Mécanisme de Translation Verticale : Permet l'ajustement de la hauteur de la plaque pour réaliser les pointillés. 3- Développement des pièces : 1) Bâti : Notre bâti est constitué de deux éléments distincts. Sur la plaque horizontale nous avons créé des logements pour les deux servomoteurs grâce aux dimensions qui nous ont été fournies. Notre bâti assure ainsi la mise en position  des deux servomoteurs grâce à des liaisons appuis-plan réalisées par un épaulement. Le maintien en position  est assurée par des vis qui seront installées lors du montage de nos pièces. figure 30 : capture d'écran SolidWorks de notre bâti 2) Bras : L'assemblage des bras de notre robot conserve la configuration du modèle précédent, constitué de quatre pièces distinctes. Cela inclut deux demi-bras, l'un attaché côté moteur et l'autre côté effecteur, ainsi qu'un support cylindrique conçu pour tenir un marqueur. Pour relier les deux demi-bras, nous employons un roulement à billes accompagné d'un axe en métal, formant ainsi une liaison pivot robuste et fiable. Cette conception permet une rotation fluide et précise                                                 figure 31 : capture d'écran SolidWorks de l'assemblage de nos bras 3) Plaque Montante : Pour faciliter la translation verticale selon l'axe Z, nous avons équipé une plaque horizontale d'un petit servomoteur. Cette plaque est solidement maintenue par trois axes parallèles, assurant ainsi une bonne  stabilité et  précision  lors des mouvements verticaux. Le palonnier du servomoteur est spécifiquement utilisé pour élever et abaisser la plaque de dessin.                                            figure 32 : capture d'écran SolidWorks de notre nouvelle plaque de dessin En raison d'un bug sur la plateforme qui nous empêche de déposer nos dossiers ZIP, notre nouvelle modélisation SolidWorks est accessible sur le drive via le lien suivant : Accéder à la modélisation SolidWorks. 4- Processus de fabrication  🏗️⚙: Cette technique est privilégiée pour sa précision, sa rapidité et sa capacité à produire des coupes nettes et exactes, ce qui est essentiel pour assurer l'alignement correct et le fonctionnement fluide de toutes les parties mécaniques du robot. En complément, certaines pièces spécifiques sont fabriquées à l'aide de l'impression 3D, une méthode choisie pour sa flexibilité et sa capacité à créer des formes complexes qui seraient autrement difficiles à réaliser avec des méthodes traditionnelles. D) Etude électronique : L'étude électrique de notre nouveau robot suit le même schéma que celui du modèle précédent. Cette continuité nous permet de capitaliser sur les connaissances et les expériences antérieures, garantissant ainsi la fiabilité et l'efficacité des systèmes électriques déjà éprouvés. Seuls les pins utilisés pour les branchements électroniques ont été modifiés dans la conception actuelle. Voici un tableau qui résume les broches (pins) utilisées dans le code Arduino, leurs numéros, et à quoi elles correspondent : E) algorithme de commande: Développement d’algorithmes secondaires : - Fonction de détermination des coordonnées : Calcul les coordonnées actuelles du robot en fonction des angles des servomoteurs, basée sur le modèle géométrique du robot.- Fonction pour tracer un cercle : Ajuste les angles des servomoteurs en utilisant la fonction de détermination des coordonnées pour tracer un cercle précis.- Fonction pour tracer une ligne horizontale : Active lorsque le bouton poussoir b10 est enfoncé, elle commande le robot pour tracer une ligne horizontale.- Fonction pour tracer une ligne pointillée : Lorsque le bouton connecté à la broche b8 est enfoncé, cette fonction alterne les positions de monServo3 (petit servomoteur qui est contrôlé en vitesse) pour créer une ligne pointillée.- Fonction pour tracer un cercle pointillé : Active par le bouton poussoir b7, elle alterne monServo3  entre 70 et 110 degrés pour tracer un cercle pointillé, incluant des temporisations pour chaque segment. Nous avons également réalisé un organigramme détaillé de notre code afin de structurer et visualiser clairement les différentes fonctions et leur enchaînement avant de procéder à la programmation.                                        figure 33 : Organigramme de notre code pour faire fonctionner le robot Voici notre nouveau code : float angle_effecteur=180-105; // initialisation des variables d'entree float l1=5; //moteur pas colorie droite float l4=7; //bielle droite float l2=5; // bielle gauche float l3=7; // bielle gauche float l5=0; float a=1.5; // distance moteur centre int axeX=A0; // pin A0 int axeY=A1; // pin A1 int BOUTON = 2; //bouton joystick pour monter float cpt =0; float posx=0; float posy=0; float an=0; // Définition des positions pour le joystick float haut=80; float bas=90; // Définition des broches pour les boutons int b10=10; int b11=11; int b8=8; int b7=7; int b10_stat=0; int b11_stat=0; int b8_stat=0; int b7_stat=0; #include Servo monServo1; Servo monServo2; Servo monServo3; void setup() { Serial.begin(9600); monServo1.attach(5); monServo2.attach(6); monServo3.attach(9); // Configuration des broches pour les capteurs de position et le bouton pinMode (axeX, INPUT); pinMode (axeY, INPUT); pinMode(BOUTON,INPUT_PULLUP); pinMode (b10, INPUT_PULLUP); pinMode (b11, INPUT_PULLUP); pinMode (b7, INPUT_PULLUP); pinMode (b8, INPUT_PULLUP); an=bas; } void loop() { b10_stat=digitalRead(b10); b11_stat=digitalRead(b11); b7_stat=digitalRead(b7); b8_stat=digitalRead(b8); // ----------------cercle------------------------- if (b11_stat==LOW){ // Déplacement des servomoteurs monServo2.write(180-theta2(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5)))); monServo1.write(180-theta1(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5)))); monServo3.write(110); delay(400); monServo3.write(90); delay(200); for(float x=-2.5;x<=2.5;x=x+0.1){ // Afficher la valeur retournée par la fonction theta1 et la valeur de x sur le moniteur série Serial.print(theta1(x,x));Serial.print(" "); Serial.println(x); // sqrt((2.5*2.5)-(x*x)) calcule la coordonnée y d'un point sur un cercle de rayon 2.5 monServo2.write(180-theta2(x,8+sqrt((2.5*2.5)-(x*x)))); monServo1.write(180-theta1(x,8+sqrt((2.5*2.5)-(x*x)))); delay(10); } for(float x=2.5;x>=-2.5;x=x-0.1){ Serial.print(theta1(x,x));Serial.print(" "); Serial.println(x); monServo2.write(180-theta2(x,-sqrt((2.5*2.5)-(x*x))+8)); monServo1.write(180-theta1(x,-sqrt((2.5*2.5)-(x*x))+8)); delay(10); } delay(2000); monServo3.write(70); delay(400); monServo3.write(90); } // ---------------ligne------------------------ if(b10_stat==LOW){ // Positionner les deux servomoteurs en utilisant les fonctions theta1 et theta2 monServo2.write(180-theta2(-2.5,8)); monServo1.write(180-theta1(-2.5,8)); monServo3.write(110); delay(400); monServo3.write(90); delay(200); for(float x=-2.5;x<=2.5;x=x+0.1){ monServo2.write(180-theta2(x,0+8)); monServo1.write(180-theta1(x,0+8)); delay(50); } delay(1000); monServo3.write(70); delay(400); monServo3.write(90); } // ---------------ligne pointillé------------------------ if(b8_stat==LOW){ monServo2.write(180-theta2(-2.5,8)); monServo1.write(180-theta1(-2.5,8)); monServo3.write(110); delay(400); monServo3.write(90); delay(200); cpt=0; an=haut; for(float x=-2.5;x<=2.5;x=x+0.1){ monServo2.write(180-theta2(x,0+8)); monServo1.write(180-theta1(x,0+8)); // controler le servomoteur 3 pour monter et descendre la plaque cpt=cpt+0.1; Serial.println(cpt); if(cpt>=1.0 && an==haut){ monServo3.write(110); delay(400); monServo3.write(90); an=bas; cpt=0; delay(700); } if(cpt>=1.0 && an==bas){ monServo3.write(70); delay(400); monServo3.write(90); an=haut; cpt=0; delay(700); } delay(10); } delay(1000); monServo3.write(70); delay(400); monServo3.write(90); } // ---------------cercle pointille ------------------------ if(b7_stat==LOW){ monServo2.write(180-theta2(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5)))); monServo1.write(180-theta1(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5)))); monServo3.write(110); delay(400); monServo3.write(90); delay(200); cpt=0; an=haut; for(float x=-2.5;x<=2.5;x=x+0.1){ Serial.print(theta1(x,x));Serial.print(" "); Serial.println(x); monServo2.write(180-theta2(x,sqrt((2.5*2.5)-(x*x))+8)); monServo1.write(180-theta1(x,sqrt((2.5*2.5)-(x*x))+8)); cpt=cpt+0.1; if(cpt>=1.0 && an==haut){ delay(500); monServo3.write(70); delay(400); monServo3.write(90); an=bas; cpt=0; delay(700); } if(cpt>=1.0 && an==bas){ delay(500); monServo3.write(110); delay(400); monServo3.write(90); an=haut; cpt=0; delay(500); } delay(10); } for(float x=2.5;x>=-2.5;x=x-0.1){ Serial.print(theta1(x,x));Serial.print(" "); Serial.println(x); monServo2.write(180-theta2(x,-sqrt((2.5*2.5)-(x*x))+8)); monServo1.write(180-theta1(x,-sqrt((2.5*2.5)-(x*x))+8)); cpt=cpt+0.1; if(cpt>=1.0 && an==haut){ delay(500); monServo3.write(70); delay(400); monServo3.write(90); an=bas; cpt=0; delay(500); } if(cpt>=1.0 && an==bas){ delay(500); monServo3.write(110); delay(400); monServo3.write(90); an=haut; cpt=0; delay(500); } delay(10); } monServo3.write(70); delay(400); monServo3.write(90); } // ---------------joystick------------------------ if(b10_stat==HIGH && b8_stat==HIGH && b7_stat==HIGH && b11_stat==HIGH){ float X=analogRead(axeX)+15; // CHANGER LE DECALAGE float Y=analogRead(axeY)+8; double convx=((X*0.2)/1023)-0.1; double convy=((Y*0.2)/1023)-0.1; Serial.println(" "); Serial.print(" posx= ");Serial.print(posx);Serial.print(" posy= ");Serial.print(posy); Serial.print(" theta1= ");Serial.print(theta1(posx,posy-1)); Serial.print(" theta2= ");Serial.print(theta2(posx,posy-1)); if(posx>=2.5 && convx>=0){ convx=0; } if(posx<=-2.5 && convx<=0){ convx=0; } if(posy>=2.5 && convy<=0){ convy=0; } if(posy<=-2.5 && convy>=0){ convy=0; } posx=posx+convx; posy=posy-convy; monServo2.write(180-theta2(posx,posy+8)); monServo1.write(180-theta1(posx,posy+8)); if(!digitalRead(BOUTON) && an==haut){ Serial.println("--------------BOUTON-------------- "); monServo3.write(110); delay(400); monServo3.write(90); an=bas; delay(350); } else if(!digitalRead(BOUTON) && an==bas){ Serial.println("--------------BOUTON-------------- "); monServo3.write(70); delay(400); monServo3.write(90); an=haut; delay(350); } delay(50); } } // Fonction pour calculer l'angle du premier servo float theta1(float xp,float yp){ // Implementation du modele geometrique inverse pour calculer theta1 et theta2 float theta; float O1P=sqrt((-a+xp)*(-a+xp)+(yp)*(yp)); float b=(((l1*l1)-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0) )+(O1P*O1P))/(2*l1*O1P)); float alpha=acos(b)*180/M_PI; float beta=atan(((yp)/(a-xp)))*180/M_PI; if(xp>a){ theta=180-(90+(90+beta)+alpha); } else{ theta=180-(beta+alpha); } return theta; } // Fonction pour calculer l'angle du deuxième servo float theta2(float xp,float yp){ float theta2; float O1P=sqrt((-a+xp)*(-a+xp)+(yp)*(yp)); float omega=(acos(((O1P*O1P)-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0))-(l1*l1))/(-2*(sqrt(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0)))*l1))*180.0/M_PI)+acos((-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0))+(l5*l5)-(l4*l4))/(-2*l4*(sqrt(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0)))))*180.0/M_PI; float omega_bis=omega-theta1(xp,yp)-angle_effecteur; float O2C=sqrt((a+(xp+l5*(cos(omega_bis*M_PI/180.0))))*(a+(xp+l5*cos(-omega_bis*M_PI/180.0)))+(yp+l5*sin(-omega_bis*M_PI/180.0))*(yp+l5*sin(-omega_bis*M_PI/180.0))); float alpha2=acos((((l2*l2)-(l3*l3)+(O2C*O2C))/(2*l2*O2C)))*180/M_PI; float beta2=atan(((yp+l5*sin(-omega_bis*M_PI/180.0))/(a+xp+l5*cos(-omega_bis*M_PI/180.0))))*180.0/M_PI; if(xp<-a){ theta2=90+(90+beta2)+alpha2; } else{ theta2=beta2+alpha2; } return theta2; } Voici un résumé des principales fonctions de ce code Arduino utilisant des servomoteurs pour dessiner avec des mouvements contrôlés par un joystick : 1. Initialisation (`setup`):   - Configure les communications série et attache les trois servomoteurs à leurs broches respectives (5, 6 et 9).   - Initialise les broches du joystick et des boutons comme entrées, avec certaines configurées pour utiliser des résistances de pull-up. 2. Boucle principale (`loop`):   - Lit l'état des boutons pour déterminer quel dessin exécuter (ligne, cercle, ligne pointillée, cercle pointillé).   - Pour chaque type de dessin, le code ajuste les positions des servomoteurs pour créer les formes désirées en utilisant les fonctions `theta1` et `theta2` qui calculent les angles nécessaires pour chaque servomoteur basés sur la géométrie du système. 3. Dessin de cercles et de lignes:   - Cercles : Le code parcourt une série de points sur le périmètre d'un cercle et ajuste les angles des servomoteurs pour suivre cette trajectoire.   - Lignes : Des mouvements linéaires sont générés en ajustant progressivement les angles des servomoteurs pour déplacer l'effecteur d'un point à un autre en ligne droite. 4. Dessin en pointillé:   - Pour les lignes et les cercles en pointillé, le code alterne entre des positions hautes et basses de l'effecteur pour créer l'effet de pointillé, utilisant un compteur (`cpt`) pour gérer le timing de ces mouvements. 5. Contrôle par Joystick:   - En dehors des dessins, si aucun bouton n'est pressé, le joystick contrôle directement les positions des servomoteurs via des lectures analogiques, permettant un contrôle manuel de la position de l'effecteur. 6. Calcul des angles (`theta1`, `theta2`):   - Ces fonctions calculent les angles nécessaires pour les servomoteurs basés sur la géométrie du bras robotique (longueurs des bielles, distances entre les pivots, etc.), en utilisant la trigonométrie pour résoudre les configurations du mécanisme. F) Montage et test du nouveau robot  🛠️🤖 Suite à l'assemblage des différentes pièces de notre robot, nous avons procédé à l'exécution de nos programmes. Les tests ont démontré que le robot était capable de réaliser avec succès toutes les tâches spécifiées dans le cahier des charges.                                                                                                                            figure 34: Photo de notre deuxième version de robot Voici quelques images GIF illustrant les dessins réalisés par notre robot, conformément aux spécifications demandées:                                                                                        figure 35: Réalisation d'une ligne de 5cm de long                                                                                        figure 36: Réalisation d'un cercle de 2.5cm de rayon                                                                                figure 37: Réalisation d'une ligne pointillée de 5cm de long Pour visionner l'ensemble des dessins réalisés par le robot, y compris le cercle en pointillés et le joystick, vous pouvez accéder à la vidéo sur notre drive en cliquant sur le lien suivant: Visionner la vidéo. Conclusion: Au cours de ce projet, nous avons mis en pratique les connaissances théoriques acquises durant notre formation, les transformant en solutions concrètes et fonctionnelles. Cette expérience nous a non seulement permis de voir nos calculs et théories prendre vie, mais aussi de comprendre une réalité cruciale du génie : l'imprévisibilité des défis techniques. En tant que futurs ingénieurs, nous avons appris que les obstacles imprévus sont une constante dans notre domaine et qu'ils se présenteront régulièrement tout au long de notre carrière. L'important est de persévérer, d'adapter nos approches et de continuer à innover malgré les difficultés. Comme le disait Winston Churchill, « Qui ose, gagne », une leçon de résilience  qui nous guidera dans notre future pratique professionnelle. Journal de Bord - Évolution du Projet Robotique 🤖 📅 Jeudi 7 Février 2024 Formation des Groupes : Les équipes ont été créées, favorisant une belle diversité de compétences et d'expériences. Brainstorming : Séance intense de brainstorming en groupe. Des idées variées ont été proposées, allant de concepts innovants à des applications pratiques pour le robot. Choix des Idées : Avec tant d'idées intéressantes, la difficulté principale était de se concentrer sur les plus réalisables. Trouver un consensus a pris du temps mais a été enrichissant. Heureusement, l'orientation des professeurs a été cruciale; ils nous ont guidés pour éviter de tomber dans des pièges ou de concevoir des prototypes irréalistes. Planification Initiale : La mise en place d'un plan d'action initial a été un peu chaotique🚨, avec plusieurs opinions sur la direction à prendre. Après discussion, nous avons décidé de fusionner certaines idées pour créer un concept de robot plus cohérent et réalisable. Nous avons ainsi établi un plan d'action plus structuré pour la prochaine séance, en se concentrant sur des objectifs spécifiques.🚀 💡 Note pour la Prochaine Séance Se concentrer sur l'élaboration d'un prototype de base pour le robot avec calculs précis des modèles cinématiques. Affiner les rôles au sein de l'équipe pour une efficacité accrue. 📅 Jeudi 21 Février 2024 🔧 Répartition des Tâches Aujourd'hui, nous avons réparti les tâches pour booster notre efficacité. Tandis qu’un travaillait sur la  modélisation CAO sur SolidWorks, les autres se sont concentrés sur le modèle électronique pour Arduino et la création du code informatique pour assurer les mouvements adéquats du robot. Électronique et Informatique La partie électronique-informatique est maintenant réalisée et fonctionnelle. Un grand pas en avant pour notre projet ! Réflexion sur la Création des Pièces Nous avons décidé des matériaux à utiliser et de l'épaisseur souhaitée pour nos pièces. Les mesures clés, comme la longueur des bielles formant le bras et du bâti, ont été déterminées. Première expérience avec la machine à découpe laser. Nous avons identifié certaines contraintes : principalement, le laser est plus adapté pour graver que pour faire de gros trous, pour éviter d'enflammer le matériau. Nos pièces seront conçues pour s'emboîter, à la manière des petites boîtes à idées du FabLab, avec des encoches pour faciliter la fixation. Retour sur le Modèle Géométrique Moment de discussion enrichissant avec le professeur à propos de nos calculs géométriques. Cette révision nous a permis d'affiner notre approche. 🔜 Prochaines Étapes Notre objectif pour la prochaine séance est d'avoir terminé la modélisation afin de la soumettre aux professeurs pour validation. Nous envisageons de commencer la fabrication des pièces avec la découpe laser. 📅 Jeudi 29 Février 2024 🔍 Modèle Géométrique sur SolidWorks: Nous avons testé et validé notre modèle géométrique direct sur SolidWorks. Discussion et Solution avec le Professeur 🗣️ Nous avons eu une discussion productive avec notre professeur sur la façon de fixer notre robot, étant donné que nous ne pouvons pas le fixer directement au sol. Après un brainstorming constructif, nous avons trouvé une solution ingénieuse : créer une plaque qui servira de support stable pour le robot, où il pourra être fixé à l'aide d'une MAP . Finalisation et Assemblage Virtuel des Pièces Nous avons finalisé la conception des différentes pièces sur SolidWorks et commencé l'assemblage virtuel. Cela nous a donné une première vision concrète de la façon dont les pièces s'emboîteront dans la réalité. Prochaine Étape : Fabrication Réelle 🏗️ Notre objectif est d'avoir déjà fabriqué nos pièces avec la découpe laser et l'imprimante 3D pour la prochaine session.En effet,  notre conception inclut beaucoup de pièces différentes, ce qui signifie un temps de fabrication assez long. On veut s'y prend à l'avance pour ne pas être pris de court et assurer une progression fluide du projet.                                                 📅 Mercredi 24 Avril - Refonte du Modèle Géométrique 😊 Aujourd'hui, nous avons entamé la refonte du modèle géométrique du robot. Après avoir analysé les performances de la première version, nous avons identifié plusieurs améliorations potentielles. Les calculs ont été révisés pour optimiser la structure et la fonctionnalité des composants. Une journée productive qui pose les bases solides pour les étapes suivantes! 📅 Mercredi 30 Avril - Modélisation sur SolidWorks 😄 Nous avons commencé la modélisation du robot sur SolidWorks. Cela implique de transposer nos calculs géométriques en un modèle 3D précis. Chaque pièce a été conçue avec attention pour garantir l'intégration et la compatibilité des différents sous-ensembles. C'est toujours impressionnant de voir le projet prendre forme visuellement! 📅 Vendredi 3 Mai - Codage Arduino 🧐 Le développement du code Arduino pour contrôler notre robot a débuté aujourd'hui. Nous avons intégré des fonctions pour la détermination des coordonnées, le tracé de lignes et de cercles, ainsi que la gestion de l'interface utilisateur via des boutons. Des tests préliminaires montrent une bonne réactivité des commandes, mais quelques ajustements sont encore nécessaires. 📅 Mercredi 15 Mai - Assemblage du Robot 🛠️ L'assemblage des différentes pièces du robot a été réalisé aujourd'hui. Tout s'emboîte parfaitement, grâce à la précision de notre modélisation sur SolidWorks. Chaque composant a été vérifié et ajusté pour assurer un fonctionnement fluide. Demain, nous passerons aux tests complets - un moment crucial! 📅 Jeudi 16 Mai - Tests du Robot et Finalisation 🎉 Une journée intense de tests! Nous avons exécuté plusieurs cycles pour vérifier la stabilité et la précision des mouvements du robot. Après quelques petits ajustements dans le code Arduino et la calibration des servomoteurs, notre robot fonctionne comme prévu. C'est une réussite et un grand soulagement de voir le robot accomplir les tâches du cahier des charges. Un excellent moyen de conclure notre projet! 📅 Mercredi 22 Mai - Présentation du Projet Robotique 🎓 Un support visuel pour la présentation est accessible en annexe sous le nom de "Diaporama Présentation Robot Écrivain".         3      Projet de : Ayoub, Julie, Joachim Dossier de conception préliminaire : Informations Prénoms et noms : Ayoub HADJAB Joachim PERRIN Julie MAUGUIT Adresses mail : ayoub.hadjab@etu.sorbonne-universite.fr joachim.perrin@etu.sorbonne-universite.fr Cursus : 1ere année cycle ingénieur en Robotique à Polytech Sorbonne Date de début - Date de fin : Mercredi 7 Février 2024 jusqu'au Mercredi 22 Mai 2024 Cahier des charges Définition du projet : Le projet robotique de ce semestre est de concevoir et réaliser une solution qui répond aux différentes consignes données ci-dessous : Tracer différentes figures prédéfinies dans un carré de 5cm x 5cm, en 10 secondes. Une ligne droite de 5 cm Une ligne pointillée de 5 cm Un cercle de 2,5cm de rayon Un cercle pointillé de 2,5cm de rayon Reproduire un dessin imposé (mais inconnu à l’avance) à l’aide d’un joystick dans un carré de 5cm x 5cm Contrôle au moyen d’un joystick Objectifs du projet Pour répondre aux consignes du projet, nous avons réfléchi à trois différentes solutions de système robotisé. Les trois peuvent être réalisables mais deux des solutions sont plus complexes à concevoir et réaliser. PAS UTILE ICI Description fonctionnelle des besoins Fonction contrainte (externe au robot) : s’adapter au stylo Fonction contrainte (externe au robot) : s’appuyer sur la table Fonction principale (robot) : dessiner les formes/dessins demandés Moyens à disposition Pour réaliser notre solution, nous aurons besoin des procédés de fabrication suivants : - L’impression 3D afin de faire la liaison entre le moteur et le stylo et réaliser la translation du stylo pour avoir contact entre le stylo et le sol ou non - Le laser afin de faire les différents axes (corps plutôt ? ) qui sont reliés aux 2 autres moteurs. Le matériel à disposition est : Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de prototypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. Diagramme de Gantt Propositions de réalisation   Première solution : 2 degree of freedom Writer Robot (arm) Le robot écrivain à deux degrés de liberté est un système conçu pour manipuler un stylo ou un crayon sur une surface plane afin de dessiner ou d'écrire. Il se compose généralement d'un bras robotisé doté de deux articulations qui lui permettent de se déplacer dans deux directions différentes : horizontalement et verticalement. Fonctionnement de cette solution : Contrôle de la position : Les deux gros servomoteurs sont utilisés pour contrôler la position des deux axes du bras robotisé. Chaque moteur est relié à une articulation du bras, ce qui permet de déplacer le stylo sur la surface de manière précise et contrôlée. Le contrôle de la position se fait en coordonnées polaires. Contrôle du contact du stylo : Le petit servomoteur est utilisé pour la fonction de contact ou non du stylo, est intégré à un mécanisme de crémaillère. Ce mécanisme est conçu pour abaisser ou lever le stylo en fonction des instructions données au robot. Avantages : Structure simple et compacte, facilitant la conception, la fabrication et la maintenance. Coût de production potentiellement plus bas en raison de sa simplicité. Contrôle relativement simple en raison du nombre limité de degrés de liberté. Adapté aux applications où l'espace est restreint en raison de sa compacité. Inconvénients : Capacité limitée à réaliser des mouvements complexes ou des dessins détaillés en raison du nombre restreint de degrés de liberté. Moins précis et moins polyvalent que les robots avec plus de degrés de liberté. Limitations dans la portée des mouvements en raison de sa conception. Peut ne pas être adapté pour des tâches nécessitant une grande précision.   Deuxième solution : Cette solution serait composée de deux axes liés aux 2 gros moteurs par des paliers lisses, et un petit moteur avec son axe qui commande la position de l’effecteur (entre les 2 états possible : contact ou non-contact). Fonctionnement de cette solution : L'effecteur se trouve à la jonction de deux axes, lesquels sont contrôlés par les deux servomoteurs. la liaison entre les axes et le bâti permet aux axes de glisser. De cette façon, on peut modéliser ce système comme deux droites de longueur variables dont le croisement dans le plan de la feuille se trouve être la position du stylo. De la même façon que pour la première solution, le troisième servomoteur est utilisé pour contrôler le contact entre la feuille et le stylo. Une roue folle de guidage est donc nécéssaire pour soutenir l'effecteur. Inconvénient : Les liaisons n'étant pas parfaites, cette solution requiert une attention particulière aux forces de frottements. Des calculs complexes (pas en coordonnées cartésiennes ou polaire) Structure difficile à déplacer Manque de précision Avantage : Pas beaucoup d’utilisation de matières Mais d’après les différents inconvénients, on se rend bien compte qu'il est compliqué de réaliser cette solution.   Troisième solution : Procédé pantographe La construction d’un pantographe commence par relier deux paires de bras – une paire longue et une paire courte – bout à bout avec une articulation pivotante, formant une paire de formes en V flexibles. Les extrémités libres des bras courts sont reliées par des articulations pivotantes aux centres des bras longs, formant un parallélogramme ou une forme de losange, avec deux bras s’étendant depuis les côtés supérieurs du losange. Un stylet est placé sur le pivot au bas du diamant et un stylo est attaché à l’extrémité d’un bras. L’extrémité de l’autre bras est verrouillée dans une position fixe pendant la copie. Pour contrôler la position du stylo par rapport à la surface de l'écriture. Notre approche repose sur l'utilisation d'un servo-moteur modifié et d'un mécanisme d'engrenage pour permettre deux modes de fonctionnement distincts. Description du Système : Dans notre configuration, nous avons retiré l'hélice du servo-moteur, ne conservant que l'arbre moteur (nous avons jugé que les forces en jeu sont assez faibles pour ne pas se soucier de l’effort transmis directement sur l’arbre moteur). Sur cet arbre moteur, nous avons fixé une roue dentée préalablement conçue à l'aide de logiciels de modélisation 3D tels que SolidWorks. Cette roue dentée est essentielle pour la transmission du mouvement à un système d'engrenage plus complexe. Fonctionnement : Le système d'engrenage que nous avons mis en place permet deux modes de fonctionnement distincts du stylo :   - Mode d'Écriture : Dans ce mode, le stylo est en contact direct avec la surface de l'écriture (feuille). Le robot est alors simplement en appuie sur la surface de contact et le troisième servomoteur n'est pas engagé.   - Mode Repos : Contrairement au mode d'écriture, dans ce mode, le stylo est légèrement surélevé par rapport à la surface de l'écriture, évitant ainsi tout contact. Pour ce faire, le petit servomoteur est réglé de manière à soulever le robot par la base (avec un système de levier). Avantages : grande polyvalence d’échelle pour les bras comparée à aux deux premières solutions envisagées, celle-ci permet d'alleger la partie mobile car les trois moteurs sont à la base du robot. OUI Inconvénients : Les équation de mouvement ne sont pas simple à determiner. SI Solution choisie : Finalement, nous avons décidé de choisir le procédé pantographe. En effet, celui-ci nous semble le plus adapté car c'est celui qui présente le moins d'inconvénients. Partie mécanique : L'origine de mon repère est le point O = P1 Dans cette partie nous allons calculer le modèle géométrique inverse de notre robot. Le modèle géométrique inverse est un concept crucial en robotique qui permet de déterminer les positions et orientations des moteurs nécessaires de notre robot pour atteindre une position spécifique avec son effecteur. En d'autres termes, il s'agit de calculer les angles des articulations en fonction des coordonnées de l'extrémité du robot dans l'espace. Dans le cadre de notre projet de conception d'un robot écrivain, nous avons utilisé le modèle géométrique inverse pour contrôler précisément les mouvements de notre robot. Notre approche pour calculer ce modèle géométrique inverse consiste à diviser le pentagone formé par notre robot en trois triangles, puis à appliquer le théorème d'Al-Kashi dans chaque triangle. Plus précisément, nous avons décomposé la structure du pantographe en trois triangles pour simplifier le calcul des angles nécessaires pour positionner l'extrémité du robot. La fonction atan2 est une fonction trigonométrique qui donne l'angle en radians entre l'axe x positif et un point donné dans le plan xy, en tenant compte des signes des coordonnées x et y pour déterminer le quadrant dans lequel se trouve le point. Pour une explication détaillée des calculs effectués pour obtenir le modèle géométrique inverse de notre robot pantographe, veuillez consulter le document disponible à l'adresse suivante : https://www.cim.mcgill.ca/~haptic/pub/GC-QW-VH-IROS-05.pdf Conception XAO : La base avec les trois moteurs La base est composée de deux plateaux, celui du bas est fixe par rapport au plan de travail et le second est mobile, guidé verticalement par deux axes. Sur le plateau du haut sont fixés les deux petits servo moteurs qui contrôlent la position du stylo sur le plan de la feuille. Le gros servo moteur est fixé sur le plateau du bas et entraine la pièce ci-dessus, que nous avons conçu pour que la hauteur du point de contact avec le plateau du haut varie selon l'angle du moteur. Cette architecture permet de soulever toute la partie supérieure du robot d'1cm en actionnant le moteur inférieur. Cette action coupe le contact entre le stylo est la surface de dessin. Les bras Nos bras sont composés de 4 bielles. Deux bielles sont reliées au moteur par l'empreinte des palonniers . De plus, nous avons de chaque côté, les deux bielles qui sont reliées par un roulement à bille. Ces 4 bielles, nous les fabriquons avec la découpe laser. Enfin, nous avons le support du bouchon, que nous avons fait avec l'imprimante 3D. Montage Comme indiqué par la coloration sur les image de SolidWorks ci-dessus, nous avions conçu nos pièces pour utiliser en majorité des plaques de médium mais aussi deux pièces plastique. Nous avons donc utilisé la découpeuse laser et les imprimantes 3D. Une fois que l'on avait réalisé nos pièces, il a fallut faire des ajustement. D'abord, le guidage par les deux axes était difficile car le contacte était trop court et la liaison se comportait comme une linéaire annulaire. Nous avons donc ajouté des bouts de tube pour assurer le guidage, étant donné que le jeu entre l'axe et le tube était relativement grand, nous avons choisi une pièce de longueur importante. Nous avons aussi observé que le medium se dégradait rapidement  autour de plusieurs liaisons. Nous avons donc utilisé de la colle entre le tube et le medium pour renforcer la liaison de l'axe, et ajouté du scotch râpeux sur un des roulement à billes pour contrebalancer le jeu créé. Après avoir monté le robot, nous avons constaté que le moteur inférieur n'était pas au meilleur emplacement, nous avons donc percé de nouveaux trous dans le plateau inférieur pour le repositionner plus proche de la liaison glissante. Projet ROB (Amel, Clarence, Adrien) Réalisation d'un système robotisé "Robot écrivain" Informations Prénoms et noms : Amel HADDADI Clarence PFISTER Adrien MILLE Adresses mail : amel.haddadi@etu.sorbonne-universite.fr adrien.mille@etu.sorbonne-universite.fr clarence.pfister@etu.sorbonne-universite.fr Cursus : 1ere année cycle ingénieur en Robotique à Polytech Sorbonne Date de début - Date de fin estimée (ou réelle) : 07/02/2024 - 22/05/2024 Contexte Ce projet est le sujet de notre UE Robotique. (https://wiki.fablab.sorbonne-universite.fr/BookStack/books/projets-due-2023-2024/page/le-sujet-du-projet) Objectifs L'objectif de ce projet est de réaliser un système robotisé : sa partie mécanique, son actionnement, sa commande et son interface de pilotage. Ce système doit être dessinateur puisqu'il doit répondre à deux exercices : Le premier consiste à tracer différentes figures prédéfinies dans un carré de 5cmx5cm en 10 secondes : Une ligne droite de 5cm, une ligne pointillée de 5cm, un cercle de rayon 2,5cm et un cercle pointillé de 2,5cm. Le deuxième consiste à reproduire un dessin imposé (inconnu) à l'aide d'un joystick dans un carré de 5cmx5cm. 2.L'objectif pour chacun d'entre nous est de réussir à bien s'organiser au sein de l'équipe, la gestion du temps et apprendre les bases de la gestion projet dans le but de parvenir à concevoir un mécanisme robotisé fonctionnel. I - Conception préliminaire : 1. Cahier des charges Le but est de concevoir un robot capable de dessiner sur un support plan horizontal : a. Une ligne de 5cm de long. b. Une ligne pointillée de 5cm de long. c. Un cercle de 2.5cm de rayon. d. Un cercle pointillé de 2.5cm de rayon. e. Un dessin imposé (Le déplacement de l'organe terminal devra être piloté par un joystick) Une fonction supplémentaire : Être capable de modifier la vitesse de déplacement du robot via l’interface. 1.1 : Contraintes Plusieurs contraintes nous ont été imposées dans la réalisation de ce projet , on les énumère ci-dessous : Les dessins imposés : Ligne, cercle en continu et en discontinus. Le temps fixé pour le dessin : 10 secondes. Utilisation de composants (moteurs, contrôleurs, boutons, éléments de guidage, alimentation stabilisée, boutons, etc.) parmi un ensemble imposé. Programmation en C utilisant la chaîne de développement Arduino IDE. Interface de pilotage: Joystick. Contrainte sur les machines du fablab (Machine à découpe LASER, Imprimantes RAISE 3D PRO2) qui ne sont pas toutes accessibles tout le temps ni en même temps. 1.2 : Matériel Pour accomplir ce projet, nous disposons d'une liste de composants et de matériels disponibles : Un crayon Interface de commande : Une carte Arduino UNO avec câble USB-B; Un joystick: Une platine de prototypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm 1.3 : Machines utilisées Afin de réaliser ce projet, nous disposons des machines du fablab permettant la fabrication des pièces  à savoir : Machine à découpe LASER. Imprimantes RAISE 3D PRO2. 2. Diagramme de Gantt Afin d'organiser au mieux nos séances de travail, et pour que l'équipe soit productif vis à vis de notre projet, nous avons réalisé un diagramme de Gantt, qui sera un outil de répartition des tâches et un calendrier prévisionnel . (En attachement le diagramme de Gantt) Figure(1) : Diagramme de Gantt 3. Propositions de réalisation Afin de réaliser ce projet, et répondre au cahier des charges, nous avons essayé de discuter plusieurs solutions et propositions avant de choisir la plus adéquate et la plus convenable. Parmi les solutions que nous avons proposées, on y trouve : Système 3P (inspiré du fonctionnement d'une imprimante 3D) : Un système sur deux rails (pignon/crémaillère) permettant la translation en x, en y et en z d'un support pour le stylo. figure(2) : Schéma cinématique système 3P Points forts : Résolution simple des modèles géométriques direct et inverse en utilisant la convention "Denavit-Hartenberg" (ou pas) Pièces compatibles avec le procédé découpe laser (Gain de temps). Bonne précision et simplicité de contrôle. Point faibles : Complexité des guidages en translation. Pas de limit switch dans le matériel disponible, ce qui peut rendre cette solution risquée (aucun autre moyen que les calculs pour vérifier si l'on est arrivé au bout du rail). Solution peu compacte.    2. Système 2RP (en partie inspiré du robot Fanuc) : Un système comportant deux rotoïdes dans le plan pour les déplacements en x et en y, ainsi qu'une liaison prismatique pour gérer la hauteur du stylo. Figure (3) : Schéma cinématique système 2RP Points forts : Résolution simple des modèles géométriques direct et inverse en utilisant la convention "Denavit-Hartenberg". Points faibles : Problème de stabilité lié à la présence de deux servo-moteurs éloignés du bâti (en plus de l'effecteur), ce qui pourrait entraîner un risque de flexion. Vigilance nécessaire avec l'espace de travail pour éviter les problèmes de singularité possibles. 3. Système à structure parallèle (pantographe) : Système à deux bras en parallèle se rejoignant au niveau de l'effecteur (stylo). Fifure(4): Schéma cinématique structure parallèle Points forts : Structure légère, pas de problème de flexion. Résistance aux vibrations. Réduction de l'inertie. Points faibles : Complexité de la cinématique : pour ce système on ne peut pas appliquer la convention de "Denavit-Hartenberg". (On peut tout de même s'en sortir avec un peu de géométrie). 4. Système à une rotation et une translation (RP) Figure(5): Schéma cinématique système RP Points forts : Résolution simple des modèles géométriques direct et inverse en utilisant la convention "Denavit-Hartenberg". Points faibles : Tout comme la solution inspirée du Fanuc, on pourrait avoir des problèmes de flexion lorsque l'effecteur se situe au bout du rail. 4. Solution choisie Après réflexion, nous avons choisi la solution du système à structure parallèle car c'est la solution qui nous a paru la moins contraignante et la plus sûre pour répondre au cahier des charges fourni. Afin d'éviter d'avoir des problèmes d'ajustement avec le stylo entre glissant pour monter ou descendre, et serré pour être maintenu, nous avons imaginé une solution différente pour gérer la hauteur du stylo vis à vis de la feuille. Effectivement, nous avons pensé à utiliser une solution pignon/crémaillère pour régler la hauteur de la feuille directement, qui sera donc sur un support léger (pour que la charge soit supportable pour le servomoteur). Figure(6): Croquis à main levé de la solution Nous avons également pensé à une autre solution se basant sur le même concept, le changement apporté est au niveau des deux bras partant de deux points différents dans la solution précédente à deux bras partant du même point  pour cette autre solution dans le but de simplifier les calculs. (à en discuter davantage afin de choisir la meilleure option). Figure(7) : Croquis II - Conception détaillée : Dans cette partie, nous nous intéressons à la mécanique du robot en terme d'élaboration des modèles géométriques direct et inverse, de la CAO réalisée et le choix des pièces. Nous traiterons également la partie électronique en évoquant le schéma électrique et le câblage effectué. Et pour finir nous élaborons quelques algorithmes de commande afin de coder la solution proposée.  Après réflexion, nous avons choisi le système où les deux moteurs n'ont pas le même axe, et nous avons changé notre solution précédente afin que la solution pignon/crémaillère assure la translation du stylo et non la translation de  la feuille, nous avons choisi cette solution car nous la trouvons plus simple et nous économise en matière de fabrication. 1. Modèles géométriques direct et inverse, et Jacobienne : Afin de pouvoir déterminer la position du stylo en fonction de l'angle des servomoteurs, et inversement, nous avons calculé les modèles géométriques directs et indirects de notre système. Ces deux modèles seront nécessaires dans la partie algorithmique dans le but de dessiner les formes désirées. Etant donné les contraintes du cahier des charges concernant la vitesse d'exécution des différents exercices, nous auront également besoin de la Jacobienne pour déterminer les vitesses de rotation des servomoteurs. Pour être plus précis, nous aurons besoin de la Jacobienne inverse, permettant de calculer ces vitesses angulaires à partir de la vitesse de l'effecteur souhaitée, mais nous pourrons pour cela nous servir de fonctions dans la partie algorithmique. 1.1 : Modèles géométriques direct et inverse 1.2 : Jacobienne 2. Conception mécanique : Pour faire la CAO de notre système, nous nous sommes servis du logiciel SolidWorks et nous avons fait de sorte que la majorité des pièces puissent être réalisées par le procédé de découpe laser. En effet, cela sera pour nous un gain de temps conséquent lors de la réalisation. En revanche, certaines pièces devront tout de même être faites par impression 3D  par soucis de simplicité, elles sont différenciées dans le modèle 3D par un gris plus foncé. Avant de passer à la modélisation sur SolidWorks, nous avons essayé de faire quelques croquis à main levé de nos pièces, en choisissant des dimensions ainsi que le procédé de fabrication. Figure(8) : Croquis des pièces à concevoir Figure(9) : Croquis des pièces du bâti à concevoir Afin d'expliquer cette modélisation, on peut diviser ce système en 3 sous-assemblages, qui sont le bâti, le pantographe (bielles) permettant les mouvements en x et y, et le support du stylo, permettant une translation selon z. Figure(10): Conception du robot sur SolidWorks 2.1 : Bâti Nous avons pensé à une structure emboitée en montage serré composée de 4 pièces qui seront réalisées en découpe laser. Figure(11) : Assemblage du Bati 2.2 : Pantographe Les deux premières bielles mises en mouvement par les servomoteurs sont vissées sur ces derniers, et elles seront fabriquées par impression 3D du fait de l'empreinte du palonnier les rendant inconcevables par découpe laser. La transmission des efforts est ici assurée par les palonniers encastrés dans les bielles. Figure(12): Assemblage Bielle, palonnier et servomoteur Le guidage en rotation de ces deux premières bielles avec les deux suivantes se fait à l'aide d'un tube en acier dans lequel passera une vis associée à un écrou. Figure(13) : Guidage en rotation des bielles Ensuite, dans le système d'origine que nous avions imaginé, un problème se posait au niveau de l'effecteur du fait des deux bielles de même hauteur. C'est pour cela que nous avons remplacé l'une d'entre elles par une chape, pour pouvoir ensuite réaliser le dernier pivot. Afin de pouvoir réaliser cette pièce par découpe laser, nous l'avons divisée en 3 pièces, qui seront simplement assemblées par des vis avec écrous. Figure(14) : Chape Enfin, pour la dernière liaison de bielles au niveau de l'effecteur, l'axe assurant un guidage en rotation sera cette fois un tube dans lequel le stylo pourra glisser librement. Ce tube contenant le stylo, il ne pourra pas être fixé avec le même système que les bielles précédentes. En effet, il sera vissé à la partie inférieure de la chape, grâce à une extrusion de matière le long de cette dernière, suffisamment important pour que l'écrou inséré au milieu ne soit pas un obstacle à l'autre bielle. Figure(15) : Guidage en rotation au niveau de l'effecteur 2.3 : Support stylo Pour la pièce de support au système permettant le maintient et le mouvement vertical du stylo, c'est la partie supérieure de notre chape qui réalise cette fonction. De ce fait, la pièce a été modifiée de sorte à pouvoir y placer précisément et fixer le servomoteur ainsi que la crémaillère, par l'intermédiaire de deux pièces encastrées par serrage. Il est toutefois important de noter que la crémaillère n'est pas totalement fixe, puisqu'il reste la translation selon z, mais cette translation est limitée comme nous le verrons juste après. De plus, un enlèvement de matière a été réalisé de sorte à ne pas bloquer le palonnier, qui ne sera pas gêné non plus par la bielle au niveau inférieur. En effet, d'après nos calculs, la variation d'angle nécessaire pour entraîner la translation de la crémaillère de quelques millimètres est suffisamment faible. Figure(16) : Partie supérieure de la chape                            Figure(17) : Assemblage de la chape, du servomoteur et de la crémaillère Afin de garantir le mouvement vertical du stylo, nous avons utilisé le système de pignon/crémaillère (module 1.5), avec une crémaillère d'assez faible dimension, étant donné que le stylo doit simplement pouvoir être légèrement surélevé afin d'arrêter de dessiner. On peut par ailleurs observer deux vis sur la capture d'écran ci-dessous qui permettent de limiter la translation de la crémaillère. Ces vis ont donc à la fois pour objectif d'empêcher le contact entre le pignon et la crémaillère de disparaître, mais également de fixer cette dernière.             Figure(18) : Pignon/Crémaillère Finalement, pour le maintien serré du stylo, nous avons décidé d'utiliser un clip, qui sera encastré dans la crémaillère. Figure(19) : Clip 3. Schémas électroniques : Pour cette partie de conception électronique, nous nous sommes servis du logiciel TinkerCad, afin de faire à la fois le schéma de câblage et le schéma électrique. 3.1 : Schéma de câblage Notre schéma électronique se constitue donc d'une carte Arduino Uno qui permettra le contrôle des 3 servomoteurs, et d'une platine d'essai permettant notamment de relier les différents composants à l'alimentation et la masse. On retrouve sur cette platine 4 boutons pressoirs correspondant aux 4 figures prédéfinies à tracer, qui sont chacun reliés à une broche numérique. Une résistance de 10 kOhm est associée à chaque bouton poussoir pour diminuer l'intensité de courant électrique les traversant. Pour ce qui est de la petite platine d'essai sur laquelle se trouvent deux potentiomètres et un bouton poussoir, elle représente en réalité un joystick, puisque ce composant n'est pas disponible sur ce logiciel. Cette représentation se justifie par le fait que le joystick analogique possède deux potentiomètres qui déterminent la position du joystick sur les axes X et Y. Ces deux sorties seront donc reliées à des broches analogiques (tension variant entre 0V et 5V). Le joystick possède également un bouton, qui, lorsqu’il est relâché, laisse le joystick revenir en douceur à la position centrale. Pour finir, les 3 servomoteurs sont connectés à des broches numériques PWM (Pulse Width Modulation), puisque c'est la largeur des impulsions envoyées qui va déterminer la position de l’arbre de sortie. 3.2 : Schéma électrique 4. Algorithme de commande : #include /*Paramètres ServoMoteur*/const int pinServo1 = 8;const int pinServo2 = 9;const int pinServo3 = 10;Servo servo1;  // servomoteur au point A (bras gauche)Servo servo2;  // servomoteur au point B (bras droit)Servo servo3;  // servomoteur qui lève et baisse le stylo/*Paramètres Bouton poussoir*/const int button1 = 3;  // Pin digital pour le bouton poussoirconst int button2 = 4;const int button3 = 5;const int button4 = 6;int buttonState1;  // état du bouton poussoir (HIGH ou LOW)int buttonState2;int buttonState3;int buttonState4;/*Paramètres Joystick*/const int SW_pin = 2;  // Pin digital pour indiquer la postion du bouton poussoir du Joystickint buttonStateSW;     // état du bouton poussoir du Joystickint Pen;               // 1 si le stylo touche le papier, 0 sinonconst int X_pin = A0;  // Pin analogique pour la coordonnée Xconst int Y_pin = A1;  // Pin analogique pour la coordonnée Yfloat joyX, joyY;      // Variables pour les valeurs données par le joystick à potentiomètre 2 axes/*Paramètres du Modèle Géométrique*/float Ex, Ey;                 // coordonnées cartésiennes du stylofloat theta1, theta2;         // correspondent respectivement à l'angle theta A et theta B du modèle géométriqueconst float angleHIGH = 100;  // angles de servo3 correspondants aux positions basses et hautes du styloconst float angleLOW = 110;const float D = 80;        // distance entre deux servomoteurs 1 et 2 en mmconst float L = 90;        // longueur d'un bras en mmconst float centerX = 40;  // coordonnées du centre du carré 50mm x 50mmconst float centerY = 140;const float R = 25;              // rayon de cercle en mmconst float Xmin = centerX - R;  // cadrer un carré de 50mm x 50mmconst float Xmax = centerX + R;const float Ymin = centerY - R;const float Ymax = centerY + R;/*Paramètres Vitesse*/String message;               // chaîne de caractères pour stocker la commande reçue à partir du moniteur sérieint speed;                    // vitesse de mouvement pendant le mode Joystick                              // allons de 0 à 5 // 0 : pas de mouvement, 1 : très lent, 3 : moyen, 5 : très rapideint pause;                    // le temps de pause à chaque mouvement pendant le mode Joystick                              // plus le nombre est petit, plus la rotation est rapideconst int autoPause = 50;     // la pause pendant les modes automatiquesconst int transitTime = 300;  // le temps de passage de servo1,2.write() à servo3.write() (et inversement) void setup() {  /*Initialisation Servomoteur*/  pinMode(pinServo1, OUTPUT);  pinMode(pinServo2, OUTPUT);  pinMode(pinServo3, OUTPUT);  servo1.attach(pinServo1);  servo2.attach(pinServo2);  servo3.attach(pinServo3);  servo3.write(90);  delay(transitTime);  theta1 = servo1.read();  theta2 = servo2.read();  calculatePosition(theta1, theta2);  GoToPoint(centerX, centerY);  /*Initialisation Bouton poussoir*/  pinMode(button1, INPUT_PULLUP);  // INPUT_PULLUP lie l'entrée à 5V avec une résistance interne de 10kOhm  pinMode(button2, INPUT_PULLUP);  pinMode(button3, INPUT_PULLUP);  pinMode(button4, INPUT_PULLUP);  buttonState1 = digitalRead(button1);  buttonState2 = digitalRead(button2);  buttonState3 = digitalRead(button3);  buttonState4 = digitalRead(button4);  /*Initialisation Joystick*/  pinMode(SW_pin, INPUT_PULLUP);  buttonStateSW = digitalRead(SW_pin);  pinMode(X_pin, INPUT);  pinMode(Y_pin, INPUT);  /*Configuration du moniteur série*/  Serial.begin(9600);  Serial.setTimeout(1);  // définit le nombre maximum de millisecondes d'attente pour les données série  /*Configuration de la vitesse*/  Serial.println("\nVeuillez régler la vitesse (0 à 5): ");  message = "";  setSpeed();  servo3.write(angleHIGH);  Pen = 0; delay(1000);} void loop() {  /*Réglage de la vitesse*/  if (Serial.available() > 0) {    setSpeed();  }  /*Mode de pilotage par Joystick*/  if (digitalRead(SW_pin) != buttonStateSW)  // si le bouton1 est appuyé  {    PenUpDown();    delay(500);  }  joyX = analogRead(X_pin);  // lire les valeurs de potentiomètre  joyY = analogRead(Y_pin);  if (joyX > 700 && Ex < Xmax) {    Ex += 0.1;  }  if (joyX < 300 && Ex > Xmin) {    Ex -= 0.1;  }  if (joyY > 700 && Ey > Ymin) {    Ey -= 0.1;  }  if (joyY < 300 && Ey < Ymax) {    Ey += 0.1;  }  calculateAngle(Ex, Ey);  servo1.write(theta1);  servo2.write(theta2);  delay(pause);  /*Tracer une ligne*/  if (digitalRead(button1) != buttonState1)  // si le bouton1 est appuyé  {    Serial.println("Tracer une ligne");    servo3.write(angleHIGH);  // lever le stylo    delay(transitTime);    GoToPoint(Xmin, Ey);  // aller au point le plus gauche    delay(transitTime);    servo3.write(angleLOW);  // baisser le stylo    delay(transitTime);    while (Ex < Xmax) {  // déplacer horizontalement le stylo vers la droite par millimètres      Ex++;      calculateAngle(Ex, Ey);      servo1.write(theta1);      servo2.write(theta2);      delay(autoPause);    }    delay(transitTime);    servo3.write(angleHIGH);  // lever le stylo    Pen = 0;    delay(transitTime);  }  /*Tracer un cercle*/  if (digitalRead(button2) != buttonState2) {    Serial.println("Tracer un cercle");    servo3.write(angleHIGH);  // lever le stylo    delay(transitTime);    float theta = 0;    float startX = centerX + R * cos(theta);    float startY = centerY + R * sin(theta);    GoToPoint(startX, startY);  // aller au point de l'angle de 0 rad    delay(transitTime);    servo3.write(angleLOW);  // baisser le stylo    delay(transitTime);    while (theta < 2 * PI) {  // allons de 0 rad à 2*pi rad      theta = theta + 0.1;    // augmenter l'angle de 0.1 rad      Ex = centerX + R * cos(theta);      Ey = centerY + R * sin(theta);      calculateAngle(Ex, Ey);      servo1.write(theta1);      servo2.write(theta2);      delay(autoPause);    }    delay(transitTime);    servo3.write(angleHIGH);  // baisser le stylo    Pen = 0;    delay(transitTime);  }  /*Tracer une ligne pointillée*/  if (digitalRead(button3) != buttonState3) {    Serial.println("Tracer une ligne pointillée");    servo3.write(angleHIGH);    delay(transitTime);    GoToPoint(Xmin, Ey);    Ex = Xmin;    delay(transitTime);    servo3.write(angleLOW);    Pen = 1;    delay(transitTime);    while (Ex < Xmax) {      Ex++;      if ((int)Ex % 5 == 0)  // lever ou baisser le stylo tous les 5 mm      {        PenUpDown();      }      calculateAngle(Ex, Ey);      servo1.write(theta1);      servo2.write(theta2);      delay(autoPause);    }    delay(transitTime);    servo3.write(angleHIGH);    Pen = 0;    delay(transitTime);  }  /*Tracer un cercle pointillé*/  if (digitalRead(button4) != buttonState4) {    Serial.println("Tracer un cercle pointillé");    servo3.write(angleHIGH);    delay(transitTime);    float theta = 0;    float startX = centerX + R * cos(theta);    float startY = centerY + R * sin(theta);    GoToPoint(startX, startY);    delay(transitTime);    servo3.write(angleLOW);    Pen = 1;    delay(transitTime);    while (theta < 360) {          // allons de 0° à 360°      theta = theta + 1;           // augmenter l'angle de 1°      if ((int)theta % 15 == 0) {  // lever ou baisser le stylo tous les 15°        PenUpDown();      }      Ex = centerX + R * cos(radians(theta));      Ey = centerY + R * sin(radians(theta));      calculateAngle(Ex, Ey);      servo1.write(theta1);      servo2.write(theta2);      delay(15);    }    delay(transitTime);    servo3.write(angleHIGH);    Pen = 0;    delay(transitTime);  }} /* Loi entrée/sortie du modèle géométrique direct*/void calculatePosition(float x, float y) {  /*Ajuster à l'angle des servos*/  x = 180 - x;  y = 180 - y; x = radians(x);  y = radians(y);  float Dx = L * cos(x);  float Dy = L * sin(x);  float Cx = D + L * cos(y);  float Cy = L * sin(y);  float P = sqrt(pow(Cx - Dx, 2) + pow(Cy - Dy, 2));  float alpha1 = acos(P / (2 * L));  float alpha2 = atan((Cy - Dy) / (Cx - Dx));  Ex = Dx + L * cos(alpha1 + alpha2);  Ey = Dy + L * sin(alpha1 + alpha2);} /* Loi entrée/sortie du modèle géométrique inverse*/void calculateAngle(float x, float y) {  float n = sqrt(pow(x, 2) + pow(y, 2));  float m = sqrt(pow(D - x, 2) + pow(y, 2));  float alpha1 = acos(n / (2 * L));  float alpha2 = acos(m / (2 * L));  float beta1 = atan(y / x);  float beta2 = atan(y / (D - x));  theta1 = alpha1 + beta1;  theta2 = PI - (alpha2 + beta2);  theta1 = degrees(theta1);  theta2 = degrees(theta2); /*Ajuster à l'angle des servos*/  theta1 = 180 - theta1;  theta2 = 180 - theta2;}/*Lever ou baisser le stylo*/void PenUpDown() {  if (Pen == 1)  // si le stylo touche le papier  {    servo3.write(angleHIGH);  // lever le stylo    Pen = 0;  } else  // sinon  {    servo3.write(angleLOW);  // baisser le stylo    Pen = 1;  }}/*Réglage de vitesse*/void setSpeed() {  speed = 0;  while (speed == 0) {    while (!Serial.available()) {      delay(1);  // attandre de recevoir la commande de l'utilisateur    }    while (Serial.available()) {      delay(2);  // délai pour permettre au buffer de se remplir      if (Serial.available() > 0) {        char c = Serial.read();        message += c;      }    }    Serial.print("La vitesse : ");    Serial.print(message);    if (message != "0\n") {  // si la vitesse commandée n'est pas de 0      speed = message.toInt();      pause = (int)(10 - speed * 2);      Serial.println(pause);    }    message = "";  }}/*Aller au point désigné*/void GoToPoint(float x, float y) {  while (Ex < x - 0.1 || Ex > x + 0.1 || Ey < y - 0.1 || Ey > y + 0.1) {    if (Ex < x && Ex < Xmax) {      Ex += 0.1;    }    if (Ex > x && Ex > Xmin) {      Ex -= 0.1;    }    if (Ey < y && Ey < Ymax) {      Ey += 0.1;    }    if (Ey > y && Ey > Ymin) {      Ey -= 0.1;    }    calculateAngle(Ex, Ey);    servo1.write(theta1);    servo2.write(theta2);    delay(1);  }}/*Vérification de fonctionnalités*/void check() {  Serial.println("Coordonnées");  Serial.println(Ex, 4);  Serial.println(Ey, 4);  Serial.println(theta1, 4);  Serial.println(theta2, 4);  Serial.println("Etats des boutons");  Serial.println(digitalRead(button1));  Serial.println(digitalRead(button2));  Serial.println(digitalRead(button3));  Serial.println(digitalRead(button4));  Serial.println("Etat du joystick");  Serial.println(digitalRead(SW_pin));  Serial.println(analogRead(X_pin));  Serial.println(analogRead(Y_pin));  delay(1000);} 4. Fabrication : Nous avons procédé à la fabrication de nos pièces en utilisant différentes technologies en fonction de leur géométrie. Certaines pièces ont été fabriquées par impression 3D, tandis que d'autres ont été découpées au laser. Pour cette phase de fabrication, nous avons utilisé les machines du FabLab et suivi les documentations fournies. Nous avons ainsi appris à utiliser les logiciels Inkscape pour la découpe laser et Ideamaker pour l'impression 3D, sur lesquels nous avons importé les mises en plan de nos pièces. Ces outils nous ont permis de préparer nos fichiers de conception. Par ailleurs lors de la fabrication, nous avons remarqué quelques soucis techniques, pour cela nous avons dû revoir quelques aspects de la CAO. Certaines dimensions ont dû être légèrement modifiées, quand bien même dans la majeure partie des cas, limer un peu les pièces était suffisant. En revanche, la modification la plus importante concerne la liaison pignon - crémaillère, puisque nous avons réalisé que nous avions fait l’erreur de ne pas prévoir de guidage pour la translation de la crémaillère. Pour pallier cela, nous avons donc ajouté un pilier au sein de la crémaillère, collé à la bielle inférieure, évitant ainsi les degrés de liberté non désirés. figure(20) Pour ce qui est des liaisons pivots, l’écrou assurant la MAP étant en contact avec la bielle, celui-ci était entraîné en rotation et se dévissait légèrement, créant du jeu. Pour résoudre ce problème, quand bien même l’idéal aurait été de prendre cela en compte dans la CAO, nous avons usé d’écrous freins, qui ont pour avantage de ne pas se dévisser. On peut finalement noter que pour certaines pièces réalisées par découpe laser telles que les pièces du bâti, certaines parties de la MAP n’étaient pas présentes dans la CAO, ce qui s’explique par le fait qu’elles ont été collées entre elles. Après avoir fabriqué toutes les pièces, nous les avons toutes assemblées afin de réaliser notre robot final et par la suite exécuter le programme et faire des tests afin de vérifier son bon fonctionnement. 5. Tests : Après avoir finalisé l'assemblage de notre robot, nous avons réaliser les tâches demandées dans le cahier de charge en exécutant le code : une ligne droite de 5cm, une ligne pointillée de 5cm, un cercle de 2.5cm et un cercle en pointillé de rayon 2.5cm.  Nous avons également essayer de reproduire un dessin à l'aide d'un joystick. Résultat : ces tâches ont été réalisées avec succès par le robot. 6. Conclusion et points d'amélioration : Pour conclure, ce projet nous a permis de mettre en pratique nos différents acquis théoriques  au cours de notre formation, nous montrant également l'importance de la théorie avant sa concrétisation. À travers ce projet, nous avons pu atteindre nos objectifs initiaux en concevant un système robotique divisé en quatre axes : mécanique, actionnement, commande et interface de pilotage. De plus, ce projet nous a permis de comprendre l'importance du travail en équipe. Nous avons appris à nous organiser au sein du groupe en répartissant et synchronisant les tâches, afin de gérer le temps et les délais du projet. En nous entraidant face à chaque difficulté, nous avons relevé tous les défis possibles, démontrant ainsi que l'union fait la force. Ce projet nous a également donné l'occasion de découvrir et de maîtriser un nouvel environnement de travail, le FabLab, ce qui nous a permis d'accéder directement aux technologies de fabrication. Si jamais nous devions refaire ce projet, certaines améliorations seraient nécessaires. Tout d’abord, nous avons manqué de rigueur dans le dimensionnement des pièces, ce qui a conduit à un système surdimensionné. Concernant les bielles, il est important de bien délimiter l’espace de travail du robot pour éviter les singularités. Le problème provient également de l'épaisseur excessive de nos pièces, qui aurait pu être réduite. Un autre point à améliorer est celui des liaisons pivots entre les bielles, pour lesquelles l’utilisation de roulements aurait permis de réduire les frottements. En somme, ce projet a été une expérience enrichissante, nous permettant d’appliquer nos connaissances théoriques, de travailler efficacement en équipe et de nous familiariser avec des technologies de pointe, tout en identifiant des domaines où nous pouvons encore progresser. Projet ROB3 : Joshua , Grigor , Dilhan Présentation du projet Informations NOM PRENOM : Hauzay Joshua Pelibossian Grigor Emir Dilhan ROB 3 adresses mail : - dilhan.emir@etu.sorbonne-universite.fr - grigor.pelibossian@etu.sorbonne-universite.fr - joshua.hauzay@etu.sorbonne-universite.fr 7 février 2024 - mai 2024 Contexte Dans le cadre de l’UE projet robotique Objectifs Concevoir un système robotique :• Sa partie mécanique• Son actionnement• Sa commande• Son interface de pilotage2. Savoir s’organiser en mode projet :• Répartir et synchroniser les tâches• Suivre l’avancement avec des objectifs intermédiaires• Fournir la documentation technique• Respecter un calendrier préétabli3. Maîtriser le fonctionnement du FabLab Cahier des charges : Tracer différentes figures prédéfinies dans un carré de 5cm x 5cm, en 10 secondes. Une ligne droite de 5 cm Une ligne pointillée de 5 cm Un cercle de 2,5cm de rayon Un cercle pointillé de 2,5cm de rayon Reproduire un dessin imposé (mais inconnu à l’avance) à l’aide d’un joystick dans un carré de 5cm x 5cm Contrôle au moyen d’un joystick Matériel : Voici la liste du matériel donné (imposé) par nos responsables de projet : Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de protoypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. Ressources CAO.zip contient les fichiers Solidworks pour les deux modèles de servomoteurs téléchargeable via le lien suivant : https://wiki.fablab.sorbonne-universite.fr/BookStack/link/1279#bkmrk-ressources-cao.zip-c datashetts.zip contient les documentations de quelques-uns des composants fourni téléchargeable via le lien suivant : https://wiki.fablab.sorbonne-universite.fr/BookStack/link/1279#bkmrk-ressources-cao.zip-c Présentation des différentes solutions envisagées : Première solution : Notre première solution consistait en un robot constitué d'un servomoteur à la base en rotation autour de Z et de 2 servomoteurs sur le bras en rotation autour de Y Cette solution est la première auquel nous avons pensé. Elle s'inspire très fortement du FANUC que nous avons pu manipuler lors de notre TP en Robotique expérimentale au 1er semestre. Cependant, nous l'avons très vite abandonné car le robot n'était pas capable d'effectuer les mouvements nécessaires à la création d'un dessin (en plus d'être éventuellement trop lourd au bout du bras). Deuxième Solution : Comme deuxième solution, nous avons pensé à un robot à 2 degré de liberté constitué de 2 servomoteurs en rotation selon Z dont un à la base et l'autre au centre du bras, et d'un servomoteur en rotation selon Y pour contrôler la pose du feutre sur la feuille de dessin. Cette solution possède de nombreux avantages, tels que la facilité de conception, de production et de calcul de position (le problème à résoudre n'est que plan dans ce cas). Cependant, la précision de ce bras articulé est inférieure comparé notamment à la solution suivante. Troisième solution : La troisième solution consiste à créer un pignon crémaillère afin d'effectuer des déplacements directement selon les axes x, y et z. Cette solution possède plusieurs avantages tels qu'une précision accru par rapport à la solution précédente, ainsi qu'un paramétrage des mouvements simplifié. Cette solution possède cependant d'autres inconvénients par rapport à la deuxième solution, tels que des frottements élevés risquant d'abimer les composants ou encore un calcul du modèle géométrique inverse plus compliqué (les rotations sont convertis en translation). Solution retenue : Pour mener à bien ce projet, nous avons opté pour la seconde solution. Nous prévoyons ainsi l'utilisation de trois servomoteurs, dont deux seront dédiés à la manipulation du stylo, tandis que le troisième sera chargé de soulever le stylo. Notre approche implique l'assemblage d'une base, sur laquelle nous fixerons un servomoteur équipé d'un palonnier. Ce dispositif dirigera la première partie de notre robot. Nous fixerons ensuite le palonnier sur le premier bras pour assurer son orientation. Ce bras, conçu de manière extrudée, permettra la fixation d'un second servomoteur, assurant la direction du deuxième bras du robot. Nous avons également besoin d'une extrémité qui servira à porter notre stylo. GANTT: https://docs.google.com/spreadsheets/d/1rBMSOXjBwbDXSA9WxZV4CNlc4wGikqxUgBZ74uLwpI0/edit?usp=sharing Calcul mécanique : Nous nous servons de ce schéma afin d'effectuer nos calculs: On sait que : En utilisant les formules trigonométriques, on trouve alors : (sur le schéma, L1 et L2 sont représenté par l1 et l2) De plus, on note : Ainsi, on détermine   et   : Atan2 est une fonction mathématique très utilisé et comprise par le code Arduino. Schéma électronique : Pour garantir un positionnement précis des servomoteurs, l'intégration d'une carte Arduino est nécessaire. Voici la représentation du circuit électrique : Ce schéma intègre trois servomoteurs en position et 4 bouton-poussoir, destiné à basculer entre les modes automatique et manuel ainsi que pour choisir le dessin voulu. Nous avons décidé de rajouter aussi 3 LEDs afin de montrer le mode de fonctionnement dans lequel le robot est (manuel ou automatique) et si on est en mode automatique, quel figure il dessine : Je vais maintenant détailler le schéma électronique. La carte Arduino est alimenté en 5V. L'alimentation et la masse sont relié à la plaque Labdec. Chaque servomoteur est relié à l'alimentation, à la masse et à un PIN digital (1 PIN par servomoteur, les PINs 3,5 et 6) sur la carte Arduino. Chacun des quatre boutons est relié à la masse, ainsi qu'à l'alimentation avec une résistance de 1 ㏀ et à un PIN digital (1 PIN par bouton-poussoir, les PINs 2,7,8 et 9) sur la carte Arduino.  Chaque LED est relié à un PIN digital avec une résistance de 1 ㏀ (1 PIN par LED, les PINs 10,11 et 12). Le joystick est relié à l'alimentation ainsi qu'à la masse, mais aussi à 2 PINs analogique(Les PINs A2 et A3). Modélisation 3D des pièces : Afin de réaliser la solution choisi, nous aurons besoin de plusieurs composants. Nous avions pensé à 4 composants, une base ainsi que 3 bras articulé. Les deux bras intermédiaires vont être fait par découpage laser tandis que la base et le support de l'effecteur seront en impression 3D. Nous pensions faire un contrepoids afin de maintenir l'équilibre du robot, ou encore créer des pieds à la base afin d'annuler le moment créé par le poids des moteurs et du stylo, cependant, la solution consistant à remplir la base avec des matériaux lourds à été privilégié car plus facile à mettre en place. Nous avons préconisé la création d'une base circulaire car plus stable que des bases carrés ou triangulaires. Le premier moteur est placé au niveau de la base et supportera le poids du reste de la structure (mise à part la base). Le deuxième moteur sera placé au bout du premier et du deuxième bras. Nous avons aussi dû modéliser un nouveau palonnier afin de convenir au besoin de notre robot car celui présent n'est pas adapté. En ce qui concerne le support du stylo, au lieu de placer le moteur au bout du deuxième bras intermédiaire, nous avons décidé de le placer au centre et ce dans une logique de réduction du moment. Pour ce faire, nous avons dû allonger la longueur du dernier bras. De plus, le stylo sera retenu tout simplement par une vis inséré dans un écrou au bout du dernier bras. Cependant nous nous sommes rendus compte que la base réalisé en 3D n'était pas nécessaire et nous avons donc modélisé une base à partir de découpage laser et collage. On obtient ce résultat: Fonctionnement: Ce premier sous-assemblage correspond à la base de notre robot, dans lequel nous allons ajouter du contrepoids. Ces derniers permettront d'éviter que le robot ne se déplace de manière intempestive. Au centre de cette base, se trouve notre servomoteur principal. Celui-ci aura pour rôle de diriger le premier bras du robot. Afin de maintenir ce servomoteur en place, nous avons modélisé un socle en bois. La taille de ce socle a été minutieusement étudiée, afin de correspondre exactement à celle du servomoteur. Cela permettra une mise en position précise et efficace. Toutefois, il est important de noter que le maintien en position n'est pas nécessaire dans ce cas précis. La raison de notre changement de base, pour passer d'une base en 3D à une base en bois, s'explique simplement. En effet, nous avons opté pour cette solution en raison du temps que cela nous permettait de gagner. La création des pièces pour la base en bois s'est faite en à peine quelques heures, alors que si nous l'avions réalisée via impression 3D, cela nous aurait pris beaucoup plus de temps. Ainsi, le choix d'une base en bois s'est avéré être la solution la plus efficace et la plus rapide pour notre projet. Ce sous-assemblage ci-joint correspond au premier bras de notre robot. Nous avons opté pour cette forme particulière pour une raison de poids. En effet, elle est plus légère qu'un rectangle tout en offrant la même rigidité.Le premier bras est doté d'un trou circulaire qui sert de liaison avec le servomoteur principal situé dans la base du robot. En outre, le premier bras possède également un trou rectangulaire qui correspond exactement à la taille d'un petit servomoteur. Ce trou a été conçu pour insérer ce servomoteur secondaire, qui sera chargé de manipuler le deuxième bras du robot. Cette conception permet une intégration facile et rapide du servomoteur, tout en évitant un maintien en position inutile Voici le dernier sous-assemblage de notre robot, qui correspond au deuxième bras. Ce bras est similaire au premier bras en ce qui concerne le trou circulaire pour la liaison avec le bras précédent. Cependant, il possède des trous rectangulaires sur toute sa longueur, qui sont destinés à accueillir une pièce de support pour le servomoteur qui va soulever le stylo. Nous avons donc modélisé un support pour le stylo, dans lequel nous avons laissé une ouverture de la forme du palonnier. Cela permettra au servomoteur de soulever et d'abaisser le stylo avec précision. De plus, nous avons prévu un trou supplémentaire dans le support pour permettre un réglage facile du stylo utilisé. Ainsi, notre robot pourra s'adapter à différents types de stylos sans nécessiter de modifications majeures. Montage: A partir de cette modélisation nous avons pu commencer l'assemblage du robot, pour cela nous avons imprimé le support du stylo via l’impriment 3D Nous avons effectué le découpage laser et collage de chaque assemblage individuellement (socle, bras 1 et bras 2), puis on les a assemblés pour obtenir finalement comme résultat final avec les branchements : Code Arduino : organigramme : Root (Arduino Program: Servo Control with Potentiometer) Bibliothèques Servo math.h Variables globales Objets Servo myservo1 myservo2 myservoZ Pins d'entrée potx poty bouton_mode boutonstylo bouton_dessin bouton_lancerdessin Pins de sortie ledmode led_dessin led_pointille Constantes servo1 servo2 servoZ a1 a2 Autres variables calibrage **Fonction setup() Initialiser les pins Attacher les servos Initialiser la communication série Fonction loop() Boucle principale de contrôle Calibration et contrôle du mode dessin Fonctions auxiliaires Goto(float x, float y) lever_stylo(int i) Fonctions de dessin trait() trait_pointille() cercle() cercle_pointille() allumer_led(int n) dessin() joystick() Documentation utilisateur : Monter le robot : · Brancher le robot comme indiqué sur le schéma électrique · Alimenter le montage en branchant l’alimentation · Une fois l’alimentation branchée les moteurs vont se mettre en place : Il vous faut monter les bras alignés du coté ou l’axe du servo moteur est le plus proche du bord. · Appuyez sur le premier bouton pour finaliser le montage. Placer le stylo : · Appuyez sur le dernier bouton pour baisser le support de feutre · Le Premier bouton permet de changer de mode · Lorsque la led bleue est allumée on est dans le mode joystick · Lorsqu’elle est éteinte on est en mode dessin · Les led rouges permettent de choisir le dessin en appuyant sur le 2ème bouton, elles indiquent en binaire le dessin sélectionné : ·  0= trait , 1 = trait pointillé, 2 = cercle, 3 = cercle pointillé Le 3ème bouton permet de lancer le dessin. Projet ROB3 - Robot écrivain : Bastien Antonin Antonin Informations COUQUE Bastien bastien.couque@etu.sorbonne-universite.fr Étudiant Robotique 3-A Polytech Sorbonne CHAUVET Antonin antonin.chauvet@etu.sorbonne-universite.fr Étudiant Robotique 3-A Polytech Sorbonne CENSIER Antonin antonin.censier@etu.sorbonne-universite.fr Étudiant Robotique 3-A Polytech Sorbonne Date de début de Projet :   8 Janvier 2024 Date de fin du Projet :  30 mai 2024 Sommaire Contexte Objectifs Matériel Machines utilisées Gantt Fonctionnement Résultats Dossier de conception détaillé Construction Journal de bord Contexte Ce projet de robotique s'inscrit dans le cadre de nos études en Robotique, plus précisément pour notre projet du deuxième semestre de notre première année. Ce projet est pour chacun de nous le premier projet robotique. Objectifs Les objectifs de ce projet nous ont été donnés par nos responsables d'UE et sont précisés via le lien suivant : https://wiki.fablab.sorbonne-universite.fr/BookStack/books/projets-due-2023-2024/page/le-sujet-du-projet Nous les résumés ci-dessous : L'objectif principal de ce projet est de concevoir et réaliser un système robotique, c'est-à-dire sa partie mécanique, sa motorisation, sa commande et son interface de pilotage. Les fonctions que notre système robotique doit être capable de réaliser sont : - Tracer, avec l'aide d'un crayon fixé sur l'organe terminal du robot une ligne de 5 cm de long, une ligne pointillée de 5cm de long, un cercle de 2,5 cm de rayonne, un cercle pointillé de 2 ,5 cm de rayonne. - Le tracé de chacune des figures doit être réalisé en  10 secondes  +/- 0,2 secondes. - Tracer, avec l'aide d'un crayon fixé sur l'organe terminal du robot, un dessin imposé dans un carré de 5cm par 5cm. Le déplacement de l'organe terminal du robot devra être piloté par un joystick . Il est possible que la figure soit discontinue, et donc il faut prévoir de pouvoir relever le crayon du support horizontal sur lequel on écrit. Une fonction supplémentaire, optionnelle , peut être réalisée : Être capable de modifier la vitesse de déplacement du robot via l'interface. L'objectif reste avant tout d'apprendre par la pratique les bases de la gestion d'un projet (c'est-à-dire la façon de s'organiser en équipe pour atteindre un objectif donné avec des moyens donnés) que d' aboutir à un prototype fonctionnel Photo du Robot Matériel Voici la liste du matériel donné (imposé) par nos responsables de projet : Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick : Une platine de prototypage; Alimentation régulée 5V ; Câbles, LED, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles moyennes : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. Les ressources CAO.zip contiennent les fichiers Solidworks pour les deux modèles de servomoteurs téléchargeables via le lien suivant : https://wiki.fablab.sorbonne-universite.fr/BookStack/link/1279#bkmrk-ressources-cao.zip-c datashetts.zip contient les documentations de quelques-uns des composants fournis téléchargeables via le lien suivant : https://wiki.fablab.sorbonne-universite.fr/BookStack/link/1279#bkmrk-ressources-cao.zip-c Machines utilisées Les machines mises à notre disposition sont celles du Fablab. Nous pouvons utiliser les découpes laser et les imprimantes 3D (Nous n'en avons pas encore utiliser pour le moment) Gantt Fonctionnement Le robot comporte deux boutons et un joystick pour réaliser 5 fonctions, de ce fait il y a des combinaisons pour lancer les différents dessins. Le joystick doit être placé de sorte que ses broches soient vers nous. Ligne continue : BOUTON 2 Cercle continue : BOUTON 1 Ligne pointillée : Joystick vers la droite puis maintenir BOUTON 2 Cercle pointillé : Joystick vers la droite puis maintenir BOUTON 1 Joystick : Joystick vers la gauche Monter / descendre l'effecteur : BOUTON 2 Sortir du mode Joystick : BOUTON 1 Résultats Voici le résultat de notre travail en vidéo : Ligne droite : vidéo ligne continue Ligne pointillée : vidéo ligne pointillée Cercle : vidéo cercle continue Cercle pointillé : vidéo cercle pointillé Joystick : joystick vidéo Dossier de conception détaillé Modélisation Conception globale du robot : Le mouvement est réalisé par deux bielles pour le déplacement dans le plan et un effecteur qui supportera le stylo qui se déplacera selon l'axe Z pour réaliser le mouvement en fonction de l'axe vertical. Robot modélisé : La plaque sous l'effecteur correspond à la zone d'écriture du robot Toutes les pièces du robot sont réalisées en découpe laser, à l'exception des trois pièces qui constituent l'effecteur, qui sont réalisées en impression 3D. Pour la base et les bras, les bielles sont montées serrées entre elles pour constituer le robot, et les 3 servomoteurs sont vissés sur les bielles. La base contient la carte Arduino. Comme on le voit sur l'image, le robot écrira sur le côté par rapport à la base pour éviter la singularité lorsque les deux parties du bras sont colinéaires. Cela permet également d'éviter les problèmes de collision du robot lorsqu'il écrit proche de la base. Guidage : Le guidage de l'effecteur est réalisé par deux bielles dans lesquelles coulisse l'effecteur pour effectuer le mouvement de haut en bas : Le stylo est maintenu par la bague inférieure qui maintient le stylo à la bonne hauteur et la bague supérieure qui pince le stylo pour éviter qu’il ne bouge. La première partie du bras est reliée par deux roulements à la base, ils sont montés serrés dans les bielles. Il y a une rondelle entre le roulement et le support de la base sur lequel est boulonné le bras pour que la partie du roulement intérieur soit reliée exclusivement au support de la base. Sachant que l’extérieur du roulement est relié à la bielle avec le montage serré, cette rondelle permet de mouvement la rotation du roulement. La seconde partie du bras est reliée à la première partie du bras par le même principe que la première partie. Des roulements et des rondelles sont utilisés. La partie supérieure est boulonnée et la partie inférieure est guidée par la vis qui tient le palonnier dans le servomoteur, nous allons utiliser une vis plus longue pour prendre dans la vis les deux bielles pour se viser dans le servomoteur 2. Cela permet de combiner la transmission d’effort avec le guidage. Cela est possible avec des contraintes contenues sur cette liaison, c’est pour cela que nous n’avons pas utilisé cette méthode de transmission d’effort pour la première partie du bras. Transmission des efforts Pour la première partie du bras : un servomoteur est vissé à la base, nous utilisons un palonnier circulaire pour relier la transmission du servomoteur à la bielle. Ce palonnier circulaire permet de visser 6 vis dans la bielle depuis le palonnier. Pour le second servomoteur, la transmission est réalisée avec le guidage du servomoteur, l’adhérence permet la transmission. Pour la mise en mouvement de l’effecteur selon l’axe vertical : Le servomoteur met en mouvement un palonnier avec un axe glissé dans une fourchette sur l’effecteur. Lorsque le servomoteur tourne, le palonnier va entraîner l’effecteur avec lui, qui réalisera un mouvement vertical. Nous ferons courir les fils des servomoteurs le long des bielles pour aller jusqu’à la base pour être reliés à la carte Arduino. Tous les ajustements ont été réalisés pour les différents montages et les cotes ont été reportées sur les fichiers SolidWorks. Voici les fichiers SolidWorks : modélisation.zip Voici les fichiers pour la découpe laser des pièces : decoupe plaque de 3mm.svg decoupe plaque de 6mm.svg Voici les fichiers pour l'impression 3D : Fichier ideaMaker : fichier idea.idea Fichier d'impression : impression3D.gcode impression3D.data Haut du formulaire Schéma électrique Modèle géométrique Organigramme de programmation Organigramme_Code.svg Code Arduino Voici le code Arduino : code_ardu.ino Construction Étape 1 Imprimer et découper toutes les pièces à partir des fichiers de découpe et du fichier d'impression 3D placé dans la partie dossier de conception détaillé. Étape 2 Assembler les différentes pièces à partir du fichier Solidworks qui contient le robot complet (dossier de conception détaillé). Il est possible de réaliser le montage dans le sens suivant : monter les deux bielles séparément assembler les deux pièces assemble monter l'effecteur monter la base du robot sauf la plaque supérieur pour faciliter le montage du bras assembler le bras monté avec la base monter la plaque supérieur de la base Étape 3 Réaliser le câblage à partir des schémas de câblages. Étape 4 Téléverser le code (dossier de conception détaillé) dans la carte Arduino. Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 08/02/2024 La première étape de notre projet était de poser sur une feuilles toutes nos idées. Trois solutions ont eu le mérite d'être schématisées.  Bien qu'elles répondent toutes à la même problématique, chaque solution possède ses propres inconvénients et avantages. Le but de cette étape était d'analyser les propriétés de chaque solutions, se projeter au niveau des problèmes de conception enfin de choisir la solution la plus adaptée à nos compétence et au problème final. La première solution serait un robot à deux roues, avec en un point du châssis, son effecteur. Il y aurait un moteur pour chaque roue ainsi qu'un moteur pour lever et baisser l'effecteur. Seulement ce robot nous pose quelques problèmes : précision de l'odométrie : les roues des robots peuvent glisser ou patiner ce qui entraîne des erreurs dans la mesure du déplacement. utilisation de servomoteurs pour contrôler la rotation des roues : nos servomoteurs peuvent réaliser seulement un demi tour ce qui rend difficile son utilisation pour réaliser plusieurs tours de roue. positionnement sur la feuille, il est influencé par l'endroit où nous le posons Cette option propose néanmoins des points forts : Compact possibilité d'expansion au delà de la feuille Peu de matériel La deuxième solution est un bras, constitué de deux articulations, une base et un effecteur. Il y aurait donc un moteur par articulation. Pour répondre au cahier des charges il faudrait aussi permettre une translation sur la hauteur afin de contrôler le contact entre l'effecteur et la feuille. Voici les avantages que présente cette option : Guidages des déplacements dans le plan de la feuille simplifiés comparés aux autres Utilisation des servomoteurs simplifié modèle géométrique de la position de l'effecteur simplifié Positionnement simplifié Et voici ses défauts : guidage de la translation selon l'axe z La dernière solution imaginée est inspirée du fonctionnement d'une imprimante 3D. Le déplacement de l'effecteur se consiste de deux translations dans le plan et une dernière perpendiculaire au plan. La première consiste a déplacer l'effecteur suivant un rail horizontal et la seconde consiste à déplacer le rail précédent sur un second rail horizontal. Ces deux mouvements permettent le mouvement dans le plan pour écrire. Le mouvement de translation permettant la montée est descente de l'effecteur est réalisé par un autre moteur sur l'axe de l'effecteur. Nous avons pensé à trois différents moyen de transmissions d'effort pour déplacer les chariots : Bielle manivelle Roue et rail denté Système de courroie Avantages : paramétrage des mouvements simples à concevoir positionnement global Inconvenants : guidage transmissions des efforts (servomoteur) Le premier choix ne nous semble pas optimal principalement à cause du manque de précision de l'odométrie mais aussi le manque de précision lors du positionnement du robot, cette solution ne sera donc pas celle choisie. Le troisième choix présente des avantages mais les guidages et la transmission d'effort nous semble problématique à concevoir avec l'utilisation de servomoteur qui ne peuvent pas réaliser de tours complets. Le second choix nous semble le meilleur compromis pour répondre à notre problème grâce à une bien meilleure précision comparé au premier choix ainsi qu'aux guidages et transmissions d'efforts moins complexes que ceux du troisième choix. Cependant, nous devront réfléchir au placement des servomoteurs et au guidage de la translation selon la hauteur. Nous choisissons donc le choix deux pour ce projet 15/02/2024 Schéma électronique : Notre schéma électronique comporte la carte arduino, la platine de prototypage ainsi que les boutons poussoirs, les servomoteurs, 2 potentiomètres (qui sont normalement le joystick mais le logiciel sur lequel nous avons crée notre schéma électronique ne le proposait pas en bibliothèque) et les résistances (et câbles). Nous utilisons donc nos 3 servomoteurs ainsi que 5 boutons poussoirs (changé par la suite par 2 boutons poussoirs seulement). Ces boutons poussoirs nous serviront à déterminer le mode de fonctionnement du robot selon lequel des boutons a été appuyé. Il y a donc 5 boutons pour le trait continu, le trait pointillé, l'arc de cercle continu, l'arc de cercle pointillé, et le guidage par un joystick. Le câblage du bouton poussoir est décrit dans la documentation ci-contre : https://docs.arduino.cc/built-in-examples/digital/Button/ En résumé, un fil lie l'alimentation 5V à la platine, un autre la masse et un troisième par d'une broche numérique de la carte arduino à une patte du bouton. Ensuite, nous connectons une patte directement à l'alimentation sur la platine et l'autre à travers une résistance de 10Kohm et vers la masse.Pour le branchement des servomoteurs, nous avons suivis la méthode expliquée dans ce site : https://www.volta.ma/comment-controler-les-servomoteurs-avec-arduino/arduino/ Il est expliqué :"il vous suffit de connecter trois fils: alimentation, masse et signal. Le fil d’alimentation est généralement rouge et doit être connecté à 5 V." "Le fil de terre est généralement noir ou marron et doit être connecté à la broche de terre de l’Arduino." "Le fil de signal est généralement jaune, orange ou blanc peut être connecté à l’une des broches numériques de l’Arduino." Dans notre cas, nous avons bien veillés à connecter nos servomoteurs sur les broches numériques PWM (Pulse Width Modulation) car les servomoteurs sont contrôlés en envoyant un signal PWM à la ligne de signal du servo et la largeur des impulsions détermine la position de l’arbre de sortie. Cependant, il n'est pas forcément nécessaire de le brancher aux pins PWM spécifiques car la bibliothèque Servo d'Arduino nous permet de contrôler un servo à partir de n'importe quelle broche numérique. Le fonctionnement du PWM est détaillé dans la documentation suivante : https://docs.arduino.cc/learn/microcontrollers/analog-output/ Enfin, le joystick a été représenté par 2 potentiomètres car le joystick analogique est un bouton monté sur une charnière avec deux potentiomètres. L’inclinaison du bouton fait tourner les potentiomètres et modifie la tension de sortie, ce qui permet de contrôler le degré de déviation du bouton par rapport au point central et, grâce à cela, de contrôler l'angle des servomoteurs. Modélisation Nous avons réalisé la modélisation du robot à l'aide du logiciel SolidWorks. Nous avons commencé par dimensionner le bras. Celui-ci est composé de deux parties que nous avons nommées pour la suite : la partie reliant la base à la seconde partie du bras sera appelée « bras », et la seconde partie, qui relie le bras à l’effecteur, sera appelée « avant-bras ». Ces deux parties seront réalisées à l’aide de deux bielles superposées et fabriquées par découpe laser. La liaison de ces deux bielles superposées est réalisée par une bielle de liaison qui sera montée serrée dans les deux bielles. La liaison du bras avec l'avant-bras sera réalisée par des roulements et un boulonnage. La base du robot sera également réalisée en découpe laser pour concevoir une sorte de boîte, comme on peut le voir sur la première version de la modélisation du robot sans l’effecteur. Ce support est composé de plaques de 3 mm d’épaisseur pour les plaques inférieure et supérieure, ainsi que la plaque du fond de la base. Il contiendra des plaques de 6 mm d’épaisseur pour les plaques latérales qui supporteront également les plaques de 6 mm d’épaisseur pour soutenir le bras et le servomoteur 1. Cette base permettra aussi de contenir le microcontrôleur. Ce qui nous a posé le plus de problèmes a été le positionnement des servomoteurs. Nous avons choisi, pour des raisons d’encombrement, d’utiliser un Hitec HS422 pour la rotation du bras (servomoteur 1) et deux FT90MR pour la rotation de l’avant-bras (servomoteur 2) et la translation selon l’axe vertical de l’effecteur (servomoteur 3). Le servomoteur 2 est fixé grâce à un support monté serré sur l’avant-bras, le servomoteur 3 est également fixé avec un support monté serré mais lui sur le bras. Le servomoteur 1 est fixé sur une plaque de 6 mm dans la base. Explication du guidage : Pour l’avant-bras : la liaison est réalisée au bras avec l’aide de roulements. Pour la bielle supérieure, elle sera boulonnée avec le roulement et pour la bielle inférieure, le guidage du servomoteur sera utilisé pour viser la bielle. La bielle sera vissée avec le roulement et le servomoteur, pinçant ainsi le roulement et le palonnier. Pour le bras : le guidage est indépendant du servomoteur, contrairement à l’avant-bras. Le guidage est réalisé avec des roulements et un boulonnage. Pour la transmission des efforts : Pour l’avant-bras : l’axe du servomoteur sert de guidage, donc la transmission de l’effort est réalisée en même temps que le guidage. Pour le bras : nous utilisons un palonnier cylindrique, avec 4 axes montés serrés dans la bielle qui se glisse dans les trous du palonnier. Effecteur : Pour la conception de l’effecteur, notre première réflexion était de pouvoir tenir le feutre, via une mise en positon (MIP) et un maintien en position (MAP). Nous nous sommes servis du décalage d’épaisseur entre la partie inférieur et le supérieur du feutre pour faire un anneau de butée qui assure la MIP. Un autre anneau est nécessaire pour assurer que le stylo ait une fixation linéaire et non annulaire. Ce second anneau se trouve plus haut et nous avons pensé à réaliser un serrage avec un système écrou/vis afin de réaliser la MAP. Pour que l’effecteur se déplace à la verticale il fallait lui laissait un degré de liberté mais tout de même le guider. Pour ceci nous avons utilisé la partie qui relie l’anneau inférieur et supérieur que nous avons élargi latéralement. Le but était d’ensuite venir fixer sur les bielles deux plaques aux formes complémentaires pour réaliser un guidage glissière. La dernière problématique était de faire bouger l'effecteur. Pour cela, nous utilisons la rotation du servomoteur selon l'axe x, auquel est fixé un palonnier avec un petit cylindre enfoncé à son extrémité. Il nous suffisait ensuite d'emprisonner cet axe à l'arrière de notre effecteur, entre deux « plaques » qui lui permettent le mouvement en x (qui est nous inutile mais inéluctable) et surtout qui guiderons l'effecteur selon z. Calcul nécessaire : Soit L la distance entre axe palonnier/cylindre, O l'angle de rotation dans le sens inverse trigo : alors z = Lsin(O) et x = Lcos(O). 28/02/2024 Lors de cette séance, nous avons réalisé des tests de découpe laser. Lors de ces tests, nous nous sommes rendus compte que des pièces de 3 mm d'épaisseur manquaient de rigidité. Nous avons donc choisi d'utiliser principalement des pièces découpées au laser de 6 mm d'épaisseur. Après cette conclusion, nous avons donc dû réaliser des modifications sur la modélisation. Toujours dans le cadre des tests de découpe laser, nous avons réalisé des essais sur les ajustements entre une bielle et un roulement, ainsi qu'entre deux bielles qui doivent être montées serrées. Voici une photo des pièces de tests assemblées avec le bon ajustement : Toutes les cotes avec les ajustements sont à retrouver dans les fichiers SolidWorks. 03/07/2024 Lors de cette séance nous avons imprimé toutes les pièces de notre robot et entamé l'assemblage du robot. Les pièces emboités sont également collées avec de la colle à bois pour consolider le robot en plus du montage séré. En parallèle nous avons commencé à programmer la carte Arduino. Nous avons également réalisé quelques tests avec les moteurs pour prendre en main la programmation de ces derniers. 02/05/2024 Lors de cette séance nous avons terminé le montage du robot. Puis nous avons programmé les différentes fonctions pour remplir le cahier des charges. Nous avons également modifié le câblage en utilisant 2 boutons poussoirs au lieu de 5, rendant le tout plus compact. Ainsi on utilise un même bouton pour effectuer plusieurs fonctions en se servant du joystick en parallèle : Ligne continue : BOUTON 2 Cercle continue : BOUTON 1 Ligne pointillée : Joystick vers la droite puis maintenir BOUTON 2 Cercle pointillé : Joystick vers la droite puis maintenir BOUTON 1 Joystick : Joystick vers la gauche Monter / descendre l'effecteur : BOUTON 2 Sortir du mode Joystick : BOUTON 1 Projet ROB3 : Mathys CLAUDEL, Sarah EL ZEGHENDY, Romain DARDE Projet ROB3 S6 ROBOT ÉCRIVAIN Informations Mathys CLAUDEL mathysclaudel@gmail.com Sarah EL ZEGHENDY sarah.el_zeghendy@etu.sorbonne-universite.fr Romain DARDE romaindarde.rd@gmail.com Date de début : 08/02/2024 - Date de fin : 02/05/2024 Contexte Nous disposons des différentes machines présentent au Fablab, avec une boîte de matériels bien précis et limité. Nous devrons répondre au cahier de charge imposé (Cahier des Charges) et faire toutes les étapes nécessaires pour obtenir un système robotisé. Objectifs L’objectif principal de ce projet est de concevoir et réaliser un système robotique, c’est-à-dire sa partie mécanique, sa motorisation, sa commande et son interface de pilotage. Le cahier des charges fourni précise les fonctions que doit réaliser le système et les contraintes qu’il doit respecter. I. Cahier des charges: Le robot doit être capable de réaliser deux exercices : 1) Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support différentes figures imposées de difficulté croissante : a. Une ligne de 5cm de long, b. Une ligne pointillée de 5cm de long, c. Un cercle de 2.5cm de rayon, d. Un cercle pointillé de 2.5cm de rayon. Le tracé de chacune des figures doit être réalisé en 10 secondes +/- 0.2 secondes. 2) Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support, un dessin imposé dans un carré de 5cm par 5cm. Le déplacement de l’organe terminal du robot devra être piloté par un joystick. Il est possible que la figure soit discontinue, et donc il faut prévoir de pouvoir relever le crayon du support horizontal sur lequel on écrit. II. Matériels: Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de prototypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. III. Machines utilisées: Découpe laser GANTT I. Conception préliminaire 1.1- Solutions proposées Voici nos trois solutions proposées: Première solution: Nous avons tout d'abord pensé à un système robotisé qui a le même mode de fonctionnement qu'une machine 3D. Schéma : Risques : Beaucoup de matériels et matières nécessaires à la conception Complexité élevée Taille du robot importante Deuxième solution: C'est un robot mobile, qui se déplace en transportant notre stylos pour effectuer le dessin demandé. Risques : Précision faible Connaissance de la position du robot à chaque instant Les servos moteurs fournis ne sont pas adaptés Troisième solution: Nous avons choisi de faire une base fixe avec un bras robotique horizontale auquel s'attache au bout notre effecteur : la pointe du stylo. 1.2- Solution Choisie Nous avons opté pour la troisième solution, qui nous paraît la plus accessible en terme de temps et de complexité. En effet, la première solution demandais une conception d'un système comportant des pièces complexes et en grands nombres afin de réaliser les différentes translations voulues sans pour autant nous garantir une précision et une fiabilité élevée. De plus, cette solution aurait nécessité du matériel en plus de ce qui était fourni, nous avons donc décidé de l'éliminer. D'autre part, le robot mobile qui nous paraissait comme une bonne idée, ne nous permettra pas de savoir la position exacte de notre stylo. Nous aurions dû utiliser des moteurs continus à la place des servomoteurs. Pourtant, même avec ça, la stabilité (le glissement) du robot lors du déplacement n'aurait pas été garantie. De ce fait, nous avons choisi la troisième solution qui certes demandera de nombreux calculs (changements de base, articulations...). Cependant, ayant déjà réalisé des calculs similaires durant nos cours, nous partons avec une longueur d'avance et donc du temps gagné pour l'optimisation de notre robot. Bien qu'il nous faudra être rigoureux afin de ne pas mettre notre robot dans des positions de singularité auquel cas ce dernier sera bloqué. II. Conception détaillée Vous trouverez en pièces jointes notre assemblage SolidWorks des différentes pièces. Sur cet assemblage (Assem2 dans notre fichier Solidworks), vous pourrez consulter les différentes mesures ainsi que la façon dont chaque pièce a été réalisée. 2.1- Conception mécanique 2.1.1- Base du robot: En premier lieu, nous avons créé la base de notre robot sur laquelle la main du robot viendra se poser. Nous avons également dû trouver une solution pour stabiliser la base afin d'éviter qu'elle ne tombe une fois le stylo relevé, en utilisant deux languettes. Nous avons décidé d'assembler notre base en montage serré, en emboîtant chaque partie de la base dans l'autre, tout en prévoyant des trous pour la sortie des fils des servomoteurs. Il fallait aussi penser à laisser quelques millimètres de plus en longueur pour le trou du servomoteur afin d'éviter les problèmes lors du montage du servomoteur sur notre base. Pour concevoir notre base, nous avons utilisé du MDF de 6 mm d'épaisseur et avons utilisé la machine de découpe du fablab. La base de notre robot sera placée sur notre feuille où nous allons dessiner. Nous avons laissé suffisamment d'espace pour notre zone de dessin, un carré de 5x5 cm. 2.1.2- Première partie du bras: Pour la conception de notre bras, nous avons décidé que chaque partie de notre bras sera faite en deux plaques différentes, chacune de 3 mm d'épaisseur, qui seront fixées ensemble par des vis. La partie inférieure contient l'empreinte du palonnier qui viendra se loger à l'intérieur. Et la partie supérieure du bras contiendra juste un trou pour fixer le servomoteur et quatre autres trous qui viendront se fixer au palonnier à l'aide d'axes pour éliminer tout jeu. Dans les deux parties du bras, nous avons le trou où viendra se loger le second servomoteur avec les trous pour le fixer. Ainsi que deux autres trous pour fixer les deux plaques entre elles. Partie inférieur du bras:                                                                                                                 Partie supérieur du bras:                                       2.1.3- Deuxième partie du bras: Cette deuxième partie est également constituée de deux plaques différentes, chacune de 3 mm d'épaisseur. Nous utilisons la même méthode de fixation pour les palonniers et les deux parties du bras que précédemment. En revanche, pour positionner notre troisième et dernier servomoteur, nous utilisons cette fois deux encoches où le servomoteur viendra se visser. Partie inférieur du bras:                                                                                                        Partie supérieur du bras: Assemblage avec le servomoteur: 2.1.4- Troisième partie du bras: Pour la troisième partie, nous avons également décidé de diviser le bras en deux parties, chacune ayant une épaisseur de 3 mm. Nous utilisons également la même méthode que précédemment pour la fixation du palonnier. De l'autre côté du bras, nous allons simplement percer un trou dans les deux parties du bras pour accueillir le support du stylo. Partie inférieur du bras:                                                                                                        Partie supérieur du bras: 2.1.5- Stylo: Pour le stylo, nous avons fait le choix de ne pas utiliser un système de glissière, mais simplement de le relever vers le côté à l'aide du servomoteur. Certes, cela laissera des traces sur notre feuille, mais cela n'impacte pas l'objectif principal de notre projet. Pour cela, le support de notre stylo contient un trou pour accueillir notre stylo d'une part. L'autre partie de notre stylo vient se positionner dans le trou dédié à cet effet dans le bras, et sera fixée à une pièce carrée par une vis et un écrou, qui servent juste à éliminer tout jeu. 2.1.6- Tests support stylo: Lors de la dernière séance de conception, plusieurs tests ont été effectués sur le support du stylo pour vérifier si le diamètre choisi était suffisant pour la position souhaitée de notre support sur le stylo. En effet notre stylo possède une forme en cône, c'est-à-dire que son diamètre change selon sa hauteur. 2.1.7- Découpe laser Pour la découpe laser, nous utilisons la machine du Fablab. Pour pouvoir découper à partir de notre pièce SolidWorks, il faut enregistrer chaque pièce de notre robot individuellement sous un fichier DXF. Ensuite, à l'aide du logiciel Inkscape, nous importons notre pièce enregistrée sous un fichier DXF. Ensuite, nous sélectionnons notre contour et choisissons la couleur Rouge 255 RGB et 1 px. Une fois tout cela fait, nous pouvons enregistrer notre fichier sous un fichier SVG sur une clé USB. Enfin, nous allons sur l'ordinateur du Fablab, importons notre fichier et suivons le tutoriel d'utilisation de la machine du Fablab pour lancer la découpe. Vous trouverez en pièces jointes, dans un dossier zip, tous nos fichiers SVG si vous souhaitez reproduire les mêmes pièces que nous avec les mêmes dimensions. 2.1.8- Calcul du modèle géométrique direct et inversé Le problème est traité comme un problème plan, ainsi nous traiterons uniquement les coordonnées X et Y. l1 et l2 correspondent aux différentes longueurs des bras de notre robot. Attention, à noter que les bras l2, l3 et l4 forment une classe d'équivalence, c'est-à-dire que ces derniers sont fixes. Ainsi, nous avons uniquement 2 pivots d'axes (O1, z0) et (O2,z0) sans compter la pivot qui sert uniquement à surélever le stylo de notre feuille de papier. Le point P correspond à notre effecteur, c'est-à-dire la pointe de notre stylo. Ce dernier étant décalé par rapport au bras l2, nous avons décidé de calculer l'angle de décalage entre l'axe x2 du bras l2 et et l'axe nommé x2' qui correspond à l'axe entre le point O2 et le point P de l'effecteur. Ainsi, afin d'alléger les calculs, ces derniers ont été menés avec l'angle θ2' puis à la fin nous nous ramènerons à l'angle réel θ2 du servo moteur. Modèle Géométrique direct : (coordonnées de l'effecteur (Xp et Yp) en fonction des angles des servo moteur (θ1 et θ2)) exprimé dans le base R0 : (x0, y0, z0). Xp = l₁cos(θ₁) + l₂cos(θ₁+θ₂') = l₁cos(θ₁) + l₂cos(θ₁+(θ₂ - Δθ₂)) Yp = l₁sin(θ₁) + l₂sin(θ₁+θ₂') = l₁sin(θ₁) + l₂sin(θ₁+(θ₂ - Δθ₂)) Modèle Géométrique inverse : (angles des servo moteur (θ1 et θ2) en fonction des coordonnées de notre effecteur (Xp et Yp)). 2.2- Conception électronique Notre système électronique se divise en deux parties clés : la commande, gérée par la carte Arduino UNO, et l'alimentation. L'utilisateur communique avec la carte Arduino via un joystick. Les servomoteurs HS422 et FT90M agissent comme les bras du système : le HS422 contrôle les mouvements principaux, tandis que le FT90M contrôle le mouvement du stylo. Une alimentation de 5V garantit une tension stable pour les moteurs et alimente à la fois la carte Arduino et les servomoteurs. Pour faire notre schéma électrique on a utiliser le logiciel KiCad: 2.3- Conception logiciel Logigramme       Ligne                                     Ligne Pointillée                             Cercle                                 Cercle Pointillé                Joystic                             Mouvement du stylo                            Pointillé Code arduino : Initialisation des différentes constantes nécessaires Implémentation du modèle géométrique dans arduino Fonction déplacement avec en arguments la position souhaitée du stylo Xp et Yp Fonction ligne : Fonction rond : Fonction carré : (4 lignes pour former carré) Fonction Joystick : Initialisation du robot : Boucle principale du code arduino : Phases de test : 2.4- Résultat final et conclusion Vous pourrez aussi trouver une vidéo en pièce jointe du fonctionnement de notre robot. Ce projet a été une expérience extrêmement enrichissante, malgré les nombreuses difficultés rencontrées en cours de route. En travaillant avec les différentes machines et le matériel du Fablab, nous avons pu développer un système robotisé répondant aux exigences du cahier des charges. Défis et Solutions Complexité de la Conception: La conception du robot, notamment le bras articulé, a demandé de nombreux calculs et ajustements. Nous avons choisi la solution la plus accessible en termes de temps et de complexité, bien qu'elle ait nécessité des calculs rigoureux pour éviter les singularités en s'appuyant sur le modèle géométrique. Précision des Mouvements: Assurer la précision des mouvements du robot, notamment pour dessiner les figures imposées, a été un défi majeur. Grâce à des tests rigoureux nous avons pu améliorer notre système pour obtenir les résultats souhaités. Compétences Développées Compétences Techniques: Nous avons amélioré nos compétences en conception mécanique, en programmation Arduino, et en utilisation de logiciels comme SolidWorks et KiCad. Travail d'Équipe: La collaboration a été essentielle pour surmonter les obstacles techniques. Chaque membre de l'équipe a apporté son expertise, ce qui a permis de créer un système cohérent et fonctionnel. Gestion de Projet: La gestion du temps et des ressources a été cruciale. Le respect du Gantt nous a aidés à rester organisés et à suivre les étapes du projet de manière structurée. Réflexion et Créativité: Le fait de réfléchir par nous-mêmes à une solution nous a beaucoup aidés en tant qu'ingénieurs. Trouver des solutions innovantes aux problèmes posés est la base de l'ingénierie. Ce processus de réflexion et de création nous a permis de développer des compétences essentielles, telles que la pensée critique et la résolution de problèmes, qui sont inestimables pour notre avenir professionnel. Le robot est capable de réaliser les deux exercices imposés avec succès, traçant des figures avec précision dans le temps imparti.Projet ROB3 : Fares, Ilyes, Albéric Projet ROB3 : Ilyes Elotreuch, Fares Charni, Albéric Fasquelle Informations Polytech Sorbonne - Spécialité Robotique - Projet de 3eme année Contact des membres de l'équipe : Albéric Fasquelle alberic.fasquelle@etu.sorbonne-universite.fr Ilyes Elotreuch ilyes.elotreuch@etu.sorbonne-universite.fr Fares Charni fares.charni@etu.sorbonne-universite.fr Introduction Dans le cadre de ce projet de robotique nous avons à réaliser un robot écrivain. Une vidéo de démonstration est disponible à la fin de cette page. Celui-ci dispose de plusieurs fonctions et mode qui participe à la complexité de ce projet. En premier lieu nous avons le mode manuel qui pilotera le robot à l'aide d'un joystick afin de dessiner ce que l'on souhaite. De plus notre robot dispose de quatre fonctions supplémentaires qui dessinerons de manière automatique une cercle et une ligne. Le présent document détaille les exigences du projet, les différentes étapes de sa réalisation, ainsi que les ressources et les échéances qui nous guideront tout au long de ce processus. Cahier des charges Dans ce cahier des charges, nous sommes chargés de concevoir un robot capable de réaliser des dessins sur une surface plane. Nous devons lui permettre d'accomplir différentes tâches, telles que tracer des lignes et des cercles de longueurs et de rayons spécifiques dans un temps défini. De plus, il doit être en mesure de reproduire un dessin particulier dans un carré donné, tout en étant contrôlé par un joystick pour son mouvement. Nous pouvons envisager d'ajouter une fonctionnalité supplémentaire pour ajuster la vitesse du robot selon les besoins. Les contraintes incluent l'utilisation exclusive des équipements du FABLAB de Sorbonne Université, le choix des composants prédéfinis, la fabrication des pièces avec des machines spécifiques, et la programmation en C via l'IDE Arduino. Notre objectif sera également de minimiser la quantité de matériau utilisé pour ce projet. 1. Conception préliminaire Dans cette section, nous présentons trois solutions potentielles pour la conception et la réalisation du robot écrivain, en tenant compte des exigences du cahier des charges et des contraintes spécifiées. Chaque solution est accompagnée de schémas, ainsi qu'une explication pour faciliter la compréhension. Nous avons retenu une proposition parmi les trois proposé ci dessous en fonction du cahier des charges et de nos préférences personnelles. Solution 1 : La première solution utilise pour les mouvements dans le plan horizontal de la feuille un mécanisme en boucle fermée à 4 barres, 5 liaisons pivots, dont deux sont motorisées. Voir une explication de son fonctionnement sur ce site . Pour les mouvements verticaux, on produit une translation verticale de la base qui soulève l'ensemble du robot. Nous nous sommes inspiré du robot Cozmo WeDraw pour la création de cette solution. Voir ici (minute 2:25 de la vidéo) Solution 2 : Notre deuxième solution est un bras robotique classique utilisant les servomoteurs en série afin de déplacer le bras selon les axes X et Y. Le troisième servo est utilisé ici pour soulever l'effecteur. Cette solution possède certains avantage comme une configuration cinématique assez simple. Cependant, elle présente des risques de stabilité structurelle, surtout lors de mouvements rapides. De plus, la précision du robot peut être compromise aux extrémités au niveau de l'effecteur, en raison des effets de la gravité et de la flexion des composants(notamment des servomoteurs). Solution 3 : Notre 3eme solution s'appuie sur un principe de guidage linéaire, à la manière des imprimantes 3D en retirant la composante Z. Un dispositif de guidage supporte le crayon et se déplace le long de rails des guidages pour réaliser les dessins sur la plaque support. Cette solution utilise deux rails de guidage ainsi que des courroies pour déplacer l'effecteur selon l'axe X et Y. Pour soulever le stylo nous ajoutons un servomoteur au niveau du stylo. Cette solution ne sera pas retenu en raison des contraintes matériels. Choix de la solution L’idée 3 à été écarté des possibilités en raison des composants disponibles. Solution Avantages Inconvénients Idée 1 -Facilité de conception -Esthétique -Précision : pas de contraintes mécanique trop importante sur l'axe des servomoteurs -Possibilité d'une écriture du code plus complexe en raison de la forme. Idée 2 -Mise en place simple -Architecture simple -Pas de contrainte potentielle sur les composants -Possiblement difficile à réaliser car la contrainte mécanique sur l'axe d'un des servomoteur. -Pas spécialement beau Idée 3 - modèle cinématique facile à réaliser -Guidage difficile à réaliser au niveau des courroies -Composant non disponibles: courroie, rails de guidage -possibilité de perte de précision lors des déplacements à causes des roulements Nous avons décidé après l'étude des différentes solution de sélectionner la première proposition. D'une part puisque nous trouvions le design  agréable et original. Et d'autre part pour certaines raisons pratiques cités ci-dessus. Ensemble des tâches à réaliser pour la conception du robot : Voici dessous l'ensemble des tâches réaliser lors des différentes étapes de la réalisation de ce projet. Diagramme de Gantt : Voici ci dessous le diagramme de Gantt prévisionnel du projet. Celui-ci est amené à être modifié selon l'avancement du projet. 2. Conception détaillé du robot 2.1 Schéma électronique : Pour la réalisation du schéma électronique, nous avons tout d'abord fait la liste de tout le matériel nécessaire à la bonne conception de celle-ci. La carte électronique est segmenté en plusieurs parties: Nous avons  tout d'abord l'élément central, l'Arduino. Il s'agit du microcontrôleur, c'est à dire le "cerveau" de la carte. Celui-ci est relié à chaque composant afin de les faire fonctionner entre eux. Ensuite nous avons la partie des servomoteurs visualisés ici par des autocoms. Nous avons également ajouté une partie debug pour la partie des 4 modes à réaliser. Nous avons ajouter un bouton pour activer ou non les modes. Et nous avons ajouter une led rgb pour deux intérêts, d'une par pour pouvoir afficher l'état ou l'avancement du mode en court, il s'agit donc d'une aide pour debug. Et il y a également un côté esthétique. Enfin nous avons l'alimentation et le joystick modélisé également par des autocoms. Pour modélisé la carte nous avons fait le choix d'utiliser le logiciel KiCad pour deux raisons. LA première est que ce logiciel a déjà été utilisé par certains membres du groupe. Et la seconde pour son côté pratique qui nous permettra si le temps nous le permet d'imprimer une carte électronique(PCB). Pour rendre le projet encore plus attrayant. 2.2 Équations de mouvement du robot Dans cette section, nous nous concentrerons sur la manière pratique de gérer le mouvement du robot dessinateur. Notre objectif est de comprendre comment convertir les coordonnées souhaitées de la pointe du stylo sur la surface de dessin en mouvements précis des articulations du robot. Pour ce faire, nous aborderons les principes de base de la cinématique directe, qui nous permettent de déterminer la position du stylo en fonction des angles des articulations du robot. Ensuite, nous explorerons le modèle géométrique inverse, une méthode essentielle pour programmer le mouvement du robot avec précision et efficacité. Ce modèle nous permettra d'établir les équations qui relient les coordonnées de la pointe du stylo aux angles des articulations du robot, fournissant ainsi un cadre pratique pour contrôler le mouvement du robot dessinateur dans diverses situations. Modèle géométrique inverse Nous avons ensuite réalisé une esquisse de notre robot sur SolidWorks pour vérifier les équations. En rendant les cotations des angles pilotées, nous pouvons introduire une position de la pointe du stylo, et obtenir les angles correspondants, avec la prise en compte des longueurs des bielles du robot. On observe que les valeurs concordent avec celles données par les équations. Nous avons ensuite fait un code python pour calculer les valeurs des angles à partir de la position de la pointe du stylo: On observe que les valeurs obtenues avec SolidWorks concordent avec celles obtenues par les équations. On peut valider le modèle géométrique. On prendra en particulier pour simplifier les calculs une structure de losange formée par les bielle 1 2 3 et 4 . 2.3 Conception de la structure du code et de l'interface Pour structurer notre code, nous avons d'abord conçu l'interface utilisateur à l'aide du matériel fourni.Cette interface permet de répondre aux exigences du cahier des charges en assurant un changement dynamique entre différents modes de dessins et une interruption rapide du processus en cas de besoin. Logigramme de l'interface : Notre interface est composé du bouton démarrage, du joystick et d'un bouton de changement de mode. On a choisit, pour rendre notre interface plus compacte d'implémenter le système suivant, où l'appui sur le bouton changement de Mode suivi d'un mouvement du joystick permettra de changer entre 4 modes. L'appui sur le joystick permet par ailleurs d'interrompre ou de reprendre de manière aisée et rapide le dessin. Détaillons le logigramme du code pour le mouvement du stylo et le changement de l'état Stylo levé/Stylo bas : Changement de position : On voit que les nouvelles valeurs des angles dépendent d'elles mêmes.On implémentera lors de nos tests 2 codes différents pour le calcul de la nouvelle position: Le premier calculera les nouvelles positions à partir des positions actuelles -> Plus rapide Le deuxième utilisera la dichotomie pour résoudre l'équation du mouvement ->Plus précis mais calcul très coûteux Changement d'état : Le guidage du moteur 3 ainsi que l'angle de la rotation pour le changement de l'état restent à définir. 2.4 Écriture du code A partir de ce logigramme nous avons réalisé la création du code (deplacement_robot_final.ino en pièce-jointe). En résumé, ce code permet de contrôler un bras robotisé à trois servomoteurs via un joystick, avec des modes spécifiques pour tracer des lignes et des cercles. Il utilise des calculs de cinématique inverse pour déterminer les angles des servomoteurs nécessaires pour atteindre des positions spécifiques. Voici une explication de son fonctionnement : Initialisation: Les broches pour les LEDs RGB, les servomoteurs, le joystick et un bouton de sélection de mode sont définies. Les servomoteurs sont attachés à leurs broches respectives et initialisés à des positions spécifiques. Les LEDs RGB sont également configurées pour indiquer les états et les sélections de mode. Variables et paramètres: Les limites de lecture du joystick et de mouvement du robot sont définies. Les dimensions géométriques des bras du robot (longueurs des segments) sont définies. Les variables pour stocker les positions actuelles du robot sont initialisées. Fonctions de mouvement: calculate_theta_1 et calculate_theta_2 : Calculent les angles des servomoteurs nécessaires pour atteindre une position donnée (x, y) en utilisant la cinématique inverse. move_in_line et move_in_line_disc : Permettent au robot de tracer des lignes droites, continues et discontinues respectivement. move_in_circle_half1, move_in_circle_half2, move_in_circle_half1_disc, move_in_circle_half2_disc : Permettent de tracer des cercles continus et discontinus. Fonction principale (loop): Lecture des valeurs du joystick. Si le bouton de sélection de mode est activé, le code entre dans un mode de sélection où différentes couleurs de LED indiquent les différents modes. Selon la position du joystick, un mode est sélectionné. En mode 1 et 2, le robot trace une ligne droite continue ou discontinue en fonction du mode sélectionné. Si aucun mode n'est activé, le joystick contrôle directement les mouvements du robot en temps réel, avec un lissage pour les mouvements. Détails des modes: Mode 1 : Tracer une ligne droite. Mode 2 : Tracer une ligne droite discontinue. Mode 3 et 4 : Tracer un cercle continu Mode 4: Tracer un cercle discontinu. LED de validation: Les LEDs RGB changent de couleur pour indiquer la sélection et le fonctionnement des différents modes. Voici un détail des fonctions utilisées : Fonction move_in_line Cette fonction permet au robot de se déplacer le long d'une ligne droite en plusieurs étapes. Initialisation des paramètres: x_start et y_start définissent le point de départ de la ligne. length est la longueur de la ligne. steps est le nombre de segments en lesquels la ligne sera divisée. l_1, l_2, l_3, l_4, l_5 sont les paramètres géométriques du robot. Calcul des incréments de déplacement: step_size est la distance à parcourir à chaque étape. time_per_step est le temps alloué pour chaque étape. Boucle de déplacement: Pour chaque étape i, les nouvelles coordonnées x_p et y_p sont calculées en fonction du point de départ et de l'incrément de déplacement. Les angles theta_1 et theta_2 sont calculés pour positionner les servomoteurs en utilisant les fonctions calculate_theta_1 et calculate_theta_2. Les servomoteurs sont déplacés aux angles calculés. Un délai est introduit pour attendre jusqu'au moment approprié pour la prochaine étape. Fonction move_in_circle_half1 et half2 Cette fonction permet au robot de se déplacer le long d'un arc de cercle en plusieurs étapes. L'association de move_in_circle_half1 et half2 permet de faire un demi cercle supérieur puis un demi cercle inférieur ce qui donne un cercle complet. Initialisation des paramètres: center_x et center_y définissent le centre du cercle. radius est le rayon du cercle. steps est le nombre de segments en lesquels le cercle sera divisé. l_1, l_2, l_3, l_4, l_5 sont les paramètres géométriques du robot. Calcul des incréments de déplacement: time_per_step est le temps alloué pour chaque étape. angle est l'angle incrémental en radians pour chaque étape. Boucle de déplacement: Pour chaque étape i, les nouvelles coordonnées x_p et y_p sont calculées en utilisant les équations paramétriques du cercle. Les angles theta_1 et theta_2 sont calculés pour positionner les servomoteurs en utilisant les fonctions calculate_theta_1 et calculate_theta_2. Les servomoteurs sont déplacés aux angles calculés. Un délai est introduit pour attendre jusqu'au moment approprié pour la prochaine étape. Gestion du temps et découpage en étapes Les fonctions utilisent une méthode de découpage en étapes pour créer un mouvement fluide et précis. Le mouvement est divisé en un nombre défini d'étapes (steps), et chaque étape est exécutée en un intervalle de temps déterminé (time_per_step). Voici comment cela fonctionne: Calcul du temps total et du temps par étape: Le temps total pour effectuer le mouvement est défini (par exemple, 9800 ms pour move_in_line). Le temps par étape est calculé en divisant le temps total par le nombre d'étapes. Boucle de contrôle temporelle: Pour chaque étape, le programme calcule les nouvelles positions et les angles correspondants. Les servomoteurs sont déplacés aux positions calculées. Le programme utilise une boucle while pour attendre jusqu'au moment approprié pour passer à l'étape suivante, en vérifiant constamment l'heure actuelle (millis()) par rapport au temps de début et au temps alloué pour chaque étape. Nous avons remarqué que du à l'encombrement du robot et les limites des angles des servo-moteurs, nous ne pouvons pas atteindre toutes les positions. Ainsi nous avons restreint le robot à une zone de dessin : 1) Dessin de la ligne continue de 5 cm: // Tracer une ligne droite horizontale dans le sens des x négatifs void move_in_line(double x_start, double y_start, double length, int steps, double l_1, double l_2, double l_3, double l_4, double l_5) { double step_size = length / steps; // double time_per_step = 10000.0 / steps; // 10 secondes (10000 ms) divisé par le nombre de steps unsigned long total_time = 9800; // Temps total en millisecondes (10 secondes) unsigned long time_per_step = total_time / steps; unsigned long start_time = millis(); // Start time for (int i = 0; i <= steps; i++) { double x_p = x_start - i * step_size; //Tracer la ligne dans le sens des x négatifs double y_p = y_start; double theta_1 = calculate_theta_1(x_p, y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(x_p, y_p, theta_1, l_1, l_2, l_3, l_4, l_5); // Convertir les angles en degrés double theta_1_deg = theta_1 * 180 / M_PI; double theta_2_deg = theta_2 * 180 / M_PI; // Déplacer les servos aux angles calculés servo1.write(theta_1_deg); servo2.write(180 - theta_2_deg); // Afficher les angles actuels dans le moniteur série Serial.print("Step "); Serial.print(i); Serial.print(": Theta_1 = "); Serial.print(theta_1_deg); Serial.print(", Theta_2 = "); Serial.println(theta_2_deg); // delay(time_per_step); // Délai pour chaque étape // Attendre jusqu'au temps approprié pour le prochain pas unsigned long current_time = millis(); unsigned long next_step_time = start_time + (i + 1) * time_per_step; while (current_time < next_step_time) { // Boucle while remplace le delay current_time = millis(); } } // Vérification finale du temps écoulé unsigned long actual_end_time = millis(); Serial.print("Temps total: "); Serial.println(actual_end_time - start_time); } 2) Dessin de la ligne discontinue de 5 cm: // Tracer une ligne droite discontinue void move_in_line_disc(double x_start, double y_start, double length, int steps, double l_1, double l_2, double l_3, double l_4, double l_5) { servo3.write(115); double step_size = length / steps; unsigned long total_time = 9800; // Temps total en millisecondes (10 secondes) unsigned long time_per_step = total_time / steps; unsigned long start_time = millis(); // Start time for (int i = 0; i <= steps; i++) { double x_p = x_start - i * step_size; // Tracer la ligne dans le sens des x négatifs double y_p = y_start; double theta_1 = calculate_theta_1(x_p, y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(x_p, y_p, theta_1, l_1, l_2, l_3, l_4, l_5); // Convertir les angles en degrés double theta_1_deg = theta_1 * 180 / M_PI; double theta_2_deg = theta_2 * 180 / M_PI; // Déplacer les servos aux angles calculés servo1.write(theta_1_deg); servo2.write(180 - theta_2_deg); // Lever et abaisser le stylo pour créer une ligne discontinue if (i % 10 < 5) { servo3.write(90); // Abaisser le stylo } else { servo3.write(100); // Lever le stylo } // Afficher les angles actuels dans le moniteur série Serial.print("Step "); Serial.print(i); Serial.print(": Theta_1 = "); Serial.print(theta_1_deg); Serial.print(", Theta_2 = "); Serial.println(theta_2_deg); // Attendre jusqu'au temps approprié pour le prochain pas unsigned long current_time = millis(); unsigned long next_step_time = start_time + (i + 1) * time_per_step; while (current_time < next_step_time) { // Boucle while remplace le delay current_time = millis(); } } // Vérification finale du temps écoulé unsigned long actual_end_time = millis(); Serial.print("Temps total: "); Serial.println(actual_end_time - start_time); } 3) Dessin du cercle continu de rayon 2.5 cm: // Utiliser les équations paramétriques d'un cercle pour calculer les positions des points autour du cercle void move_in_circle_half1(double center_x, double center_y, double radius, int steps, double l_1, double l_2, double l_3, double l_4, double l_5) { unsigned long total_time = 4800; // Total time in milliseconds (10 seconds) unsigned long time_per_step = total_time / steps; unsigned long start_time = millis(); // Start time for (int i = 0; i <= steps; i++) { // Calcul des coordonnées x et y pour le cercle double angle = 1 * M_PI * i / steps; // Angle en radians double x_p = center_x + radius * cos(angle); double y_p = center_y + radius * sin(angle); double theta_1 = calculate_theta_1(x_p, y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(x_p, y_p, theta_1, l_1, l_2, l_3, l_4, l_5); // Convertir les angles en degrés double theta_1_deg = theta_1 * 180 / M_PI; double theta_2_deg = theta_2 * 180 / M_PI; // Déplacer les servos aux angles calculés servo1.write(theta_1_deg); servo2.write(180 - theta_2_deg); // Afficher les angles actuels dans le moniteur série Serial.print("Step "); Serial.print(i); Serial.print(": Theta_1 = "); Serial.print(theta_1_deg); Serial.print(", Theta_2 = "); Serial.println(theta_2_deg); // Attendre jusqu'au temps approprié pour le prochain pas unsigned long current_time = millis(); unsigned long next_step_time = start_time + (i + 1) * time_per_step; while (current_time < next_step_time) { current_time = millis(); } //delay(time_per_step); } // Vérification finale du temps écoulé unsigned long actual_end_time = millis(); Serial.print("Temps total: "); Serial.println(actual_end_time - start_time); } // Utiliser les équations paramétriques d'un cercle pour calculer les positions des points autour du cercle void move_in_circle_half2(double center_x, double center_y, double radius, int steps, double l_1, double l_2, double l_3, double l_4, double l_5) { unsigned long total_time = 4800; // Total time in milliseconds (10 seconds) unsigned long time_per_step = total_time / steps; unsigned long start_time = millis(); // Start time for (int i = 0; i <= steps; i++) { // Calcul des coordonnées x et y pour le cercle double angle = 1 * M_PI * i / steps; // Angle en radians double x_p = center_x - radius * cos(angle); double y_p = center_y - radius * sin(angle); double theta_1 = calculate_theta_1(x_p, y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(x_p, y_p, theta_1, l_1, l_2, l_3, l_4, l_5); // Convertir les angles en degrés double theta_1_deg = theta_1 * 180 / M_PI; double theta_2_deg = theta_2 * 180 / M_PI; // Déplacer les servos aux angles calculés servo1.write(theta_1_deg); servo2.write(180 - theta_2_deg); // Afficher les angles actuels dans le moniteur série Serial.print("Step "); Serial.print(i); Serial.print(": Theta_1 = "); Serial.print(theta_1_deg); Serial.print(", Theta_2 = "); Serial.println(theta_2_deg); // Attendre jusqu'au temps approprié pour le prochain pas unsigned long current_time = millis(); unsigned long next_step_time = start_time + (i + 1) * time_per_step; while (current_time < next_step_time) { current_time = millis(); } //delay(time_per_step); } // // Position finale double x_f = center_x - radius * cos(M_PI / 6); double y_f = center_y - radius * sin(M_PI / 6); double theta_1_f = calculate_theta_1(x_f, y_f, l_1, l_4, l_5); double theta_2_f = calculate_theta_2(x_f, y_f, theta_1_f, l_1, l_2, l_3, l_4, l_5); // Convertir les angles en degrés double theta_1_deg_f = theta_1_f * 180 / M_PI; double theta_2_deg_f = theta_2_f * 180 / M_PI; // Déplacer les servos aux angles calculés servo1.write(theta_1_deg_f); servo2.write(180 - theta_2_deg_f); // Vérification finale du temps écoulé unsigned long actual_end_time = millis(); Serial.print("Temps total: "); Serial.println(2*(actual_end_time - start_time)); } 4) Dessin du cercle discontinue de rayon 2.5 cm: void move_in_circle_half1_disc(double center_x, double center_y, double radius, int steps, double l_1, double l_2, double l_3, double l_4, double l_5) { unsigned long total_time = 4800; unsigned long time_per_step = total_time / steps; unsigned long start_time = millis(); for (int i = 0; i <= steps; i++) { double angle = 1 * M_PI * i / steps; double x_p = center_x + radius * cos(angle); double y_p = center_y + radius * sin(angle); double theta_1 = calculate_theta_1(x_p, y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(x_p, y_p, theta_1, l_1, l_2, l_3, l_4, l_5); double theta_1_deg = theta_1 * 180 / M_PI; double theta_2_deg = theta_2 * 180 / M_PI; servo1.write(theta_1_deg); servo2.write(180 - theta_2_deg); if (i % 10 < 5) { servo3.write(90); // Stylo en bas } else { servo3.write(100); // Stylo en haut } Serial.print("Step "); Serial.print(i); Serial.print(": Theta_1 = "); Serial.print(theta_1_deg); Serial.print(", Theta_2 = "); Serial.println(theta_2_deg); unsigned long current_time = millis(); unsigned long next_step_time = start_time + (i + 1) * time_per_step; while (current_time < next_step_time) { current_time = millis(); } } unsigned long actual_end_time = millis(); Serial.print("Temps total: "); Serial.println(actual_end_time - start_time); } void move_in_circle_half2_disc(double center_x, double center_y, double radius, int steps, double l_1, double l_2, double l_3, double l_4, double l_5) { unsigned long total_time = 4800; unsigned long time_per_step = total_time / steps; unsigned long start_time = millis(); for (int i = 0; i <= steps; i++) { double angle = M_PI + M_PI * i / steps; double x_p = center_x + radius * cos(angle); double y_p = center_y + radius * sin(angle); double theta_1 = calculate_theta_1(x_p, y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(x_p, y_p, theta_1, l_1, l_2, l_3, l_4, l_5); double theta_1_deg = theta_1 * 180 / M_PI; double theta_2_deg = theta_2 * 180 / M_PI; servo1.write(theta_1_deg); servo2.write(180 - theta_2_deg); if (i % 10 < 5) { servo3.write(90); // Stylo en bas } else { servo3.write(100); // Stylo en haut } Serial.print("Step "); Serial.print(i); Serial.print(": Theta_1 = "); Serial.print(theta_1_deg); Serial.print(", Theta_2 = "); Serial.println(theta_2_deg); unsigned long current_time = millis(); unsigned long next_step_time = start_time + (i + 1) * time_per_step; while (current_time < next_step_time) { current_time = millis(); } } unsigned long actual_end_time = millis(); Serial.print("Temps total: "); Serial.println(actual_end_time - start_time); } 5) Dessin en mode manuel (avec le joystick) : void loop() { // Lire les valeurs du joystick int vrxValue = analogRead(VrxPin); int vryValue = analogRead(VryPin); // Inverser la valeur du joystick pour l'axe Y vryValue = joystickMax - vryValue; // Vérifier si le joystick est centré (dans la tolérance) bool joystickCentered = (abs(vrxValue - (joystickMax / 2)) < joystickCenterTolerance) && (abs(vryValue - (joystickMax / 2)) < joystickCenterTolerance); if (!joystickCentered) { // Mapper les valeurs du joystick aux coordonnées (xp, yp) double target_x_p = map(vrxValue, joystickMin, joystickMax, minX, maxX); double target_y_p = map(vryValue, joystickMin, joystickMax, minY, maxY); // Lissage des mouvements current_x_p += (target_x_p - current_x_p) * smoothingFactor; current_y_p += (target_y_p - current_y_p) * smoothingFactor; } double theta_1 = calculate_theta_1(current_x_p, current_y_p, l_1, l_4, l_5); double theta_2 = calculate_theta_2(current_x_p, current_y_p, theta_1, l_1, l_2, l_3, l_4, l_5); // Convertir les angles de radians en degrés int angleServo1 = int(theta_1 * 180 / M_PI); int angleServo2 = 180 - int(theta_2 * 180 / M_PI); Serial.print("Theta_1 = "); Serial.println(theta_1 * 180 / M_PI); Serial.print("Theta_2 = "); Serial.println(theta_2 * 180 / M_PI); servo1.write(angleServo1); servo2.write(angleServo2); delay(100); } 2.5 Conception mécanique du robot La conception mécanique du robot écrivain est essentielle pour assurer sa stabilité, sa précision et sa facilité d'utilisation. Pour la réalisation de celui-ci nous nous sommes inspiré du Wedraw de Cozmo que nous avons trouvé original. Notre robot est composé d'un corps principal sur lequel sont montés deux servomoteurs pour contrôler les bras. Les bras, joints au niveau de leur main, supportent le crayon utilisé pour le traçage des figures sur la surface de la plaque support. Description du Robot Le corps principal du robot est conçu pour abriter l'électronique de contrôle ainsi que les mécanismes de mouvement. Les deux servomoteurs, placés de manière symétrique de chaque côté du corps, assurent les mouvements des bras dans le plan horizontal de la feuille. À l'extrémité de chaque bras se trouve une articulation permettant le mouvement du crayon dans toutes les directions nécessaires pour dessiner les figures spécifiées dans le cahier des charges. Ci dessous notre vue 3D de notre robot. Les couleurs ont été apportés pour amener du contraste dans notre structure afin de mieux visualiser les composants. Choix des matériaux Lors de ce projet, nous avons fait le choix de privilégier certains matériaux. Nous avons choisi en priorité l'utilisation de la découpe laser pour la fabrication des pièces principales de la structure, notamment le corps principal du robot et les bras articulés. La découpe laser offre une grande précision dans la réalisation des pièces, permettant ainsi d'obtenir des assemblages parfaitement ajustés et une structure globalement robuste. De plus, ce processus de fabrication est rapide et efficace, ce qui nous permet de produire les pièces simplement. Quant aux pièces de l'effecteur, telles que le support du crayon et les éléments de fixation, nous avons opté pour l'impression 3D. Ce procédé nous offre une grande flexibilité dans la conception des pièces, nous permettant ainsi de réaliser des formes complexes. L'impression 3D est très utile pour les petites pièces mais peut vite devenir un problème si nous devions réaliser de grande pièce. C'est pour cela nous avons privilégier la découpe laser pour les pièces structurant notre projet. Choix de la structure général En ce qui concerne la disposition des composants mécaniques, nous avons décidé de placer les deux servomoteurs sur le même axe verticale. Cette disposition simplifie non seulement les équations de mouvement du robot, mais elle offre également une répartition uniforme des charges. Les bras du robot sont articulés à l'extrémité du corps principal, permettant ainsi une grande liberté de mouvement pour le crayon utilisé dans le traçage des figures sur la surface de la plaque support. Cette conception garantit également une précision optimale dans l'exécution des dessins. Celle-ci nous permet donc de séparer  la partie utilisateur du bras mécanique. Maintien de la structure Afin de maintenir la structure en place nous avons fait le choix de prendre des tiges filetés pour serrer la structure sur elle même. Des écrous maintiendrons le tout en place. Nous avons fait le choix de cette solution puisqu'elle présente plusieurs avantages. La première est la simplicité de mise en place. Et la seconde est le fait de pouvoir accéder facilement au composant si l'on veut faire de la maintenance. Nous avons besoin seulement de dévisser 4 écrous. Mécanisme de Relevage du Crayon Pour relever le crayon du support horizontal lorsqu'il n'est pas en cours d'utilisation, nous avons envisagé plusieurs solutions. Initialement, l'idée était de soulever le corps du robot, mais des préoccupations ont été soulevées quant à la capacité du servomoteur à supporter la charge de tout le système sans que la précision ne soit affecté. Nous nous sommes finalement rabattu sur la seconde solution. Nous avons donc placé un servomoteur au niveau du stylo qui viendra directement lever celui-ci sans avoir à relever l’ensemble de la structure. Afin de lever le stylo de manière linéaire nous avons fait le choix d'une glissière. Un principe souvent utilisé en mécanique et simple à mettre en œuvre. Voici ci dessous les différentes vu de l'intérieur de notre robot : Ci-joint le fichier SolidWorks du projet Montage final du robot : Le processus de montage et de réalisation de notre robot dessinateur a été conçu pour être simple et efficace, grâce à une planification minutieuse en CAO. Étape 1 : Préparation des Pièces Découpe Laser : Les pièces principales de la structure, comme le corps et les bras articulés, ont été découpées avec précision grâce à une machine de découpe laser. Impression 3D : Les petites pièces, telles que le support du crayon et les éléments de fixation, ont été réalisées par impression 3D pour permettre des conceptions complexes. Étape 2 : Assemblage de la Structure Principale Montage du Corps Principal : Les pièces découpées au laser ont été assemblées à l'aide de tiges filetées et d’écrous, permettant une structure stable et facilement démontable. Installation des Servomoteurs : Les deux servomoteurs ont été montés symétriquement sur le corps principal, simplifiant les équations de mouvement et assurant une répartition uniforme des charges. Étape 3 : Fixation des Bras et du Support de Crayon Fixation des Bras : Les bras articulés ont été fixés aux extrémités du corps principal, offrant une grande liberté de mouvement pour le crayon. Montage du Support de Crayon : Le support de crayon a été fixé à l’extrémité des bras. Un servomoteur supplémentaire permet le relevage du crayon via une glissière. Étape 4 : Intégration de l’Électronique Installation de l’Électronique de Contrôle : L’électronique de contrôle devait être loger dans le coeur du robot au cas ou nous aurions le temps d'imprimer notre propre carte électronique. Cependant cela n'a pas été possible et nous avons donc laisser l'électronique de côté. Connexion des Servomoteurs : Les servomoteurs ont été connectés au microcontrôleur pour contrôler les mouvements des bras et du crayon. Étape 5 : Tests et Ajustements Calibration Initiale : Après le montage, le robot a été calibré pour assurer la précision des mouvements. Tests de Dessin : Des tests de dessin ont été réalisés pour évaluer et optimiser les performances du robot. Pour conclure, le montage et la réalisation de notre robot dessinateur ont été simplifiés grâce à une conception CAO réfléchie, combinant découpe laser et impression 3D. Cette approche a permis d'obtenir une structure robuste, précise et facile à entretenir, capable de réaliser des dessins avec une précision très correcte. Simplicité de Montage et Démontage La conception CAO a été pensée pour simplifier le montage et le démontage du robot. Les assemblages par tiges filetées et écrous permettent d'accéder facilement aux composants pour la maintenance en ne dévissant que quelques écrous. Cela assure une intervention rapide et efficace, facilitant les ajustements et les réparations. Voici ci-dessous le résultat de notre robot monté: Bilan du travail de l'équipe Séance 1: Après avoir pris connaissance du sujet du projet, nous nous sommes directement mis à la recherche et à l'exploration de robots similaires existants pour s'en inspirer et nous aider à construire une idée concrète de notre but. On s'est également réparti les tâches grâce à un diagramme de Gantt et à une liste des objectifs à atteindre.Nous avons enfin entamé la CAO après avoir établi des sketchs du robot et nous avons également commencé à chercher les équations du mouvement, indispensables par la suite. Séance 2: Durant cette séance, on a réussi à finir, comme prévu la CAO, le schéma du branchement préliminaire ainsi que le calcul des équations du mouvement, adaptés à la structure "losange" de notre robot pour simplifier par la suite les programmes. On a ensuite commencé à s'interroger sur la logique suivie par notre robot surtout sur différentes manières de changer de mode. Après une bonne réflexion, pour prendre le moins d'espace possible et pour rendre les interactions plus rapides, on a décidé d'implémenter une interface permettant de contrôler le robot grâce à un seul bouton et du mouvement du joystick. On a pour cela établi les logigrammes correspondants. Séance 3: Lors de cette séance, on  a finalisé la conception du robot en prévoyant les solutions de guidages et de roulements à considérer pour le mouvement. Nous avons également commencé à coder tout d'abord en insistant sur une bonne structure du code pour simplifier les tests et la résolution d'éventuels bugs. On a aussi décidé d'utiliser la découpe laser pour la création de notre robot, vu qu'elle est plus rapide, économique et convenable quant aux dimensions et aux formes du robot. Séance 4 : Pendant cette séance, on a tâché de construire notre robot et de l'assembler. On a testé un premier code sur le robot mais en vain. En effet, une partie de notre modèle géométrique n'était pas assez adapté à la structure de notre robot, à cause des contraintes réelles du montage. À ce moment, on a décidé qu'il était judicieux de se partager la tâche de la programmation sur deux personnes, Ilyes, qui essaiera d'adapter le modèle géométrique aux contraintes réelles notamment celle de la zone de dessin grâce à des tests successifs et Fares, qui continuera à coder un programme final, complet, qui intègrera les résultats trouvés par Ilyes. Séance 5 : La dernière séance avant le rendu, on s'est retrouvé face à plusieurs problèmes notamment du côté de la programmation, vu que le programme complet ne fonctionnait pas , la zone de dessin étant très particulière, mais aussi du côté de l'assemblage du robot car certaines pièces n'étaient pas parfaitement faites par la découpe laser et on a eu besoin de les remplacer. Heureusement, on a pu, mais dans des programmes séparés, effectuer chacune des figures du cahier des charges , mais avec une certaine imprécision vu la nature expérimentale des constantes appliquées. Guide d'utilisation : Démarrage : brancher le câble Arduino. Le robot se met dans une position initiale (-50,100) par rapport à son repère. Mode de fonctionnement par défaut : le déplacement du joystick, c'est à dire que dès qu'on bouge le joystick si aucun autre mode n'est sélectionné alors le bras bougera en fonction de la position du joystick. Choix d'un mode spécifique de fonctionnement : Pour choisir un mode spécifique, il faut tout d'abord appuyer sur le bouton afin de dire que l'on veut choisir un mode. Une fois le bouton activer le mode de déplacement avec le joystick est mis en pause le temps du choix du mode. Pour chacun des modes la led RGB changera de couleur afin de savoir quel mode nous allons sélectionner. Pour sélectionner un mode il faut déplacer le joystick dans l'une des 4 directions.              →Vers le haut → Mode 1: Dessine une ligne de 5 cm en trait continu.              →Vers la bas → Mode 2: Dessine une ligne de 5cm en trait discontinu.              →Vers la droite → Mode 3: Dessine un cercle continu de 2.5 cm de rayon.              →Vers la gauche → Mode 4: Dessine un cercle discontinu de 2.5 cm de rayon. Après avoir sélectionner un mode, il faut le valider en rappuyant sur le bouton. Le mode se met donc en marche. A la fin de l'execution d'un mode le mode par défaut se remet en route. Bouton Pause : Appuyer sur le bouton du joystick, permet de mettre le stylo en position haute et donc de déplacer le stylo sans dessiner. Réappuyer sur le bouton permet de remettre le stylo ne position basse et de continuer le fonctionnement. Démonstration : Voici le lien youtube pour visionner notre démonstration de notre robot : https://youtu.be/blnAuUA3ipw Projet de ROB3 : Damien CORSET et Romane COUEDEL Informations CORSET Damien - damien.corset@etu.sorbonne-universite.fr COUEDEL Romane - romane.couedel@etu.sorbonne-universite.fr Date de début : 08/02/2024 - Date de fin : 30/05/2024 Introduction Le projet Robot Écrivain a pour objectif de concevoir un système robotique capable de dessiner sur une surface plane horizontale. En combinant les domaines de la mécanique, de l'électronique et de la programmation, notre équipe s'engage à relever ce défi. Pour ce faire, nous devons respecter un cahier des charges précis et utiliser les machines disponibles au FABLAB, ainsi qu'une liste de matériel prédéfinie. Ce projet représente une opportunité d'apprentissage, nous permettant de développer nos compétences en collaboration d'équipe et en utilisant des technologies avancées comme la découpe LASER et l'impression 3D. Cahier des charges Le robot doit être fixé ou posé sur une plaque horizontale carrée de 250mm par 250mm et doit être capable de réaliser les deux exercices suivants : Exercice 1 Le robot doit être capable de tracer différentes figures imposées dans le plan de la plaque support, avec un crayon fixé sur son organe terminal. Chaque figure doit être réalisée en 10 secondes, avec une marge d'erreur de +/- 0,2 secondes. Les chiffres imposés sont les suivants : Une ligne de 5 cm de long, Une ligne pointillée de 5cm de long, Un cercle de 2,5 cm de rayon, Un cercle pointillé de 2,5 cm de rayon. Exercice 2 Le robot doit être capable de tracer un dessin dans un carré de dimensions 5 cm par 5 cm, avec un crayon fixé sur son organe terminal. Le déplacement de celui-ci doit être contrôlé par un joystick. Il est important de noter que la figure à tracer peut être discontinue, ce qui signifie qu'il faut prévoir la possibilité de relever le crayon du support horizontal pendant le tracé. De plus, une fonctionnalité facultative consiste à offrir la possibilité de régler la vitesse de déplacement du robot via l'interface utilisateur. Cela permet d'ajuster la vitesse de tracé en fonction des besoins spécifiques de chaque dessin. Fonctions contraintes Les contraintes imposées pour le projet Robot Écrivain sont : Respect des règles d'utilisation du FABLAB de Sorbonne Université Utilisation de composants (moteurs, contrôleurs, boutons, éléments de guidage, alimentation stabilisée, boutons, etc.) parmi un ensemble imposé. Fabrication des pièces grâce au Machine à découpe LASER et Imprimantes RAISE 3D PRO2. Programmation en C utilisant la chaîne de développement Arduino IDE. Liste des composants et matériels disponibles Un crayon Interface de commande : Une carte Arduino UNO avec câble USB-B; Un joystick: Une platine de prototypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. Gantt Répartition du travail en équipe ici. I - Conception préliminaire Proposition 1: Cette proposition utilise un système comprenant un premier rail de guidage linéaire immobile, fixé à deux masses, auquel est ajouté un chariot. Un second rail, perpendiculaire au premier, est également présent. Sur ce rail mobile, un chariot est fixé, intégrant l'effecteur, ici un stylo. Ainsi, lorsque le rail mobile se déplace, le stylo se déplace selon l'axe y, et lorsque le chariot bouge, le stylo se déplace selon l'axe x, conformément au repère tracé sur le dessin. Un premier servomoteur est utilisé pour déplacer le chariot le long de l'axe y, et un second, fixé sur le chariot, contrôle les déplacements de l'effecteur le long de l'axe x. Enfin, un dernier servomoteur, plus petit, est monté sur le chariot afin de pouvoir abaisser ou relever le stylo. Inspiration : AxiDraw V3 Proposition 2: Dans la même idée que la proposition 1, cette proposition est constituée d’un chariot auquel est fixé le stylo, qui se déplace linéairement sur un rail de guidage mobile qui lui-même se déplace linéairement et repose sur deux autres rails immobiles.  Ce système est déjà commercialisé non pas pour faire du dessin mais plutôt pour de la gravure au laser.Pour les mêmes raisons que précédemment cette proposition ne sera pas notre choix final. Inspiration : Machine à Graver Laser Proposition 3: Le robot est composé d'un corps principal sur lequel est montés deux servomoteurs pour contrôler les bras. Les bras sont joints au niveau de leur main, où est fixé le crayon. Pour relever le crayon, nous avions pensé à soulever le corps du robot mais il est possible que le servomoteur ne supporte pas la charge de tout le système. Inspiration : Robot dessinateur Proposition 4: Cette idée reprend la proposition 3, mais au lieu de soulever le corps entier du robot pour relever le cayon, on met en place un mécanisme indépendant pour soulever uniquement le crayon. Le mécanisme se situe au niveau des principales articulations. Il existe tout de même un risque minime que l'ensemble soit trop lourd à porter pour les deux servomoteurs si les mains trop lourdes et/ou si la longueur des bras sont trop importantes. Cependant ces servomoteurs sont plus gros et plus puissants que celui qui se situe sur les mains. L'inconvénient de ce système se situe au niveau de la tenue du crayon, puisqu'il faut à la fois qu'il soit serré et qu'il soit glissant pour permettre le mouvement des pièces. Choix retenu: Cette solution reprend la proposition 4, sauf qu'on allonge l'avant bras sur lequel est fixé le servomoteur du crayon. Le crayon se trouve à l'extrémité de cet avant-bras où il est serré. Entre le crayon et le servomoteur qui le relève, les deux pièces se rejoignent ce qui permet le mouvement. II - Conception détaillée 2.1. Conception mécanique 2.1.1. Modélisation et vérification des ajustements Nous avons utilisé le logiciel de CAO SolidWorks pour modéliser l'ensemble du robot. Pour simplifier notre processus de conception et d'assemblage, nous avons divisé l'assemblage en plusieurs parties distinctes : Le premier sous-assemblage, nommé "base", est un boîtier abritant tous les composants électroniques, laissant les deux servomoteurs des bras visibles à l'extérieur. Sur le dessus de ce boîtier, se trouve le joystick, l'élément unique avec lequel l'utilisateur interagit. Pour faciliter le montage, des ouvertures sont prévues sur la plaque supérieure du boîtier pour permettre le passage des moteurs et la fixation du joystick. De plus, une ouverture latérale est réalisée pour permettre l'alimentation de la carte Arduino. La face inférieure du boîtier est constituée d'une plaque qui couvre entièrement la surface du robot, servant de support pour la feuille de dessin. Le deuxième sous-assemblage, appelé "effecteur", est mis en place par l'utilisateur à l'aide d'une vis, similaire au dispositif des compas, qui serre le stylo au système. Pour lever le stylo, un petit servo-moteur est fixé au bras le plus long, prévu avec des encoches pour permettre sa fixation. Des trous sont également prévus dans l'avant-bras pour fixer le mécanisme de levage du stylo, qui sera fabriqué en impression 3D. Séparer notre assemblage en plusieurs sous-assemblages simplifie l'identification et la manipulation de chaque composant individuel, favorise une meilleure collaboration entre les membres de l'équipe et simplifie la maintenance et les potentielles modifications ultérieures. Il convient de souligner que notre processus de conception a nécessité la réalisation de tests sur les pièces nécessitant un montage serré, afin d'ajuster avec précision les dimensions des composants. Les variations dues aux ajustements et aux tolérances des machines ont été prises en compte pour garantir un assemblage correcte du robot. Nous avons maximiser l'utilisation de la découpe laser pour la fabrication de nos pièces pour plusieurs raisons. Tout d'abord, la découpe laser offre une solidité, une précision supérieures et un avantage en termes de rapidité de production, nous permettant de concrétiser notre projet de manière efficace. De plus, cette méthode nous a permis de réduire les coûts matériels. L'ensemble des pièces ainsi que l'assemblage sont disponibles ici. Les fichiers de fabrication sont également disponibles aux formats DXF, SVG ou STL. 2.1.2. Schéma cinématique Ci dessous le schéma cinématique du robot : 2.1.3. Calcul du modèle géométrique direct et inverse Dans cette section, nous procédons au calcul du modèle géométrique direct et inverse pour notre système. Ces calculs sont nécessaires pour prédire le comportement du système. Références du Système :      Modèle Géométrique Direct : Le Modèle Géométrique Direct (MGD) permet de déterminer la position et l'orientation de l'effecteur final d'un robot en connaissant les valeurs des angles de ses articulations. En d'autres termes, il permet de prédire où se situera l'effecteur du système en fonction des positions de ses articulations. Détails des calculs du MGD Modèle Géométrique Inverse : D'autre part, le Modèle Géométrique Inverse (MGI) permet à l'inverse de calculer les valeurs des angles des articulations nécessaires pour atteindre une position spécifique de l'effecteur final. Autrement dit, il permet déterminer les mouvements que le système doit effectuer pour placer son effecteur à un endroit précis dans l'espace. Détails des calculs du MGI Pour valider nos résultats et assurer leur précision, nous avons utilisé les logiciels SolidWorks et MATLAB. SolidWorks a été employé pour récréer le modèle du système à l'aide d'une esquisse, tandis que MATLAB a été utilisé pour effectuer des simulations numériques à l'aide des équations trouvées précédemment. Les résultats de nos calculs sous Matlab ont été comparés avec les valeurs renvoyées par le logiciel SolidWorks. Les fichiers SolidWorks et MATLAB correspondants sont disponibles ici. 2.2. Conception électronique 2.2.1. Architecture électronique Dans notre conception électronique, nous distinguons deux aspects essentiels : l'électronique de commande, où la carte Arduino UNO joue un rôle central dans la gestion et la synchronisation des composants, et l'électronique de puissance. Le joystick, en tant qu'interface utilisateur principale, transmet les données d'entrée à la carte Arduino. Les deux servomoteurs HS422 et le servomoteur FT90MR servent d'actionneurs, les HS422 contrôlant les mouvements du système en x et y et le FT90MR en contrôlant la hauteur du stylo sur l'axe z. Une alimentation régulée de 5V assure une tension constante pour les moteurs. Cette alimentation régulée alimente à la fois la carte Arduino et les servomoteurs. Il est important de noter que la carte Arduino ne peut pas fournir des courants élevés à des actionneurs tels que les servomoteurs. Cette limitation peut compromettre le fonctionnement de la carte et entraîner des dysfonctionnements ou des dommages. C'est pourquoi en séparant la partie puissance de la partie électronique, nous évitons que la carte soit surchargée en courant ou détériorée. Nous avons fait le choix d'utiliser uniquement un joystick dans notre système, ce qui permet à la fois de naviguer dans les menus et de piloter manuellement le robot. Ce choix simplifie l'interface utilisateur et sera expliqué en détail dans la section sur la conception logicielle. 2.2.2. Schéma des connexions électriques Nous utilisons le logiciel KiCad pour réaliser le schéma des connexions. Il offre une interface conviviale et des fonctionnalités avancées pour la conception de circuits électroniques. Il nous permet de représenter de manière claire et précise les connexions entre les différents composants de notre système électronique. 2.3. Conception logicielle 2.3.1. Architecture du code du menu principal Code du menu principal (C++) #include #include #include "fonctions.h" #include "dessin.h" int initialisationIO(void) { pinMode(PIN_VRX, INPUT); pinMode(PIN_VRY, INPUT); pinMode(PIN_SW, INPUT); return 1; } int initialisationCom(void) { Serial.begin(921000); // Pour debug return 1; } Servo servo1; Servo servo2; Servo servo3; int initServo(void) { servo1.attach(PIN_SERVO_1); servo2.attach(PIN_SERVO_2); servo3.attach(PIN_SERVO_3); return 1; } void setup() { Serial.print("InitialisationCOM...\n"); if (!initialisationCom()) { Serial.print("Erreur...\n"); abort(); } Serial.print("InitialisationCOM reussie\n"); Serial.print("InitialisationIO...\n"); if (!initialisationIO()) { Serial.print("Erreur...\n"); abort(); } Serial.print("InitialisationIO reussie\n"); Serial.print("InitialisationSERVOS...\n"); if (!initServo()) { Serial.print("Erreur...\n"); abort(); } Serial.print("InitialisationSERVOS reussie\n"); controlServoCalibration(45, 52); Serial.print("Debut programme...\n"); } void loop() { switch (choixJoystick(2, 0.5, 60, true)) { case EXERCICE_1: Serial.print("Exercice 1\n"); exercice1(); break; case EXERCICE_2: Serial.print("Exercice 2\n"); exercice2(); break; default: Serial.print("Fin programme\n"); abort(); } } int choixJoystick(int nombreChoix, float triggerModule, int offset, bool BP) { int choix = 0; do { //Valeur brut des capteurs int rawValX = analogRead(PIN_VRX) - OFFSET_VRX; int rawValY = 1023 - analogRead(PIN_VRY) - OFFSET_VRY; // Conversions des valeurs bruts en valeur centrées entre -512 / +512 float ValX = float(map(rawValX, -OFFSET_VRX, (1023 - OFFSET_VRX), -1000, 1000)) / 1000.0; float ValY = float(map(rawValY, -OFFSET_VRY, (1023 - OFFSET_VRY), -1000, 1000)) / 1000.0; // Récupérations des données en coordonnées polaires float module = sqrt(ValX * ValX + ValY * ValY); int angle = atan2(ValY, ValX) * RAD_TO_DEG; // Ajustement pour rester dans notre plage angulaire 0-360° et module 0-1 if (module > 1.0) module = 1.0; if (angle < 0.0) angle += 360.0; // Interprétation du résultat if (module > triggerModule) { for (int i = 0; i < nombreChoix; i++) { if (i == 0) // Cas particulier choix 0 { if ((angle <= offset && angle >= 0) || (angle <= 360 && angle >= 360 - offset)) { choix = 1; break; } } else // Détermination du choix entre 1 et nombreChoix { int angleRef = i * (360.0 / nombreChoix); if (angle >= (angleRef - offset) && angle <= (angleRef + offset)) { choix = i + 1; break; } } } } _delay_ms(10); } while (choix == 0 || (digitalRead(PIN_SW) && BP)); // Tant qu'on a pas de choix ou bouton non appuyé return choix; } 2.3.2. Architecture du code "Exercice 1" Code "Exerice 1" (C++) // Fonction principale de l'exercice 1 int exercice1(void) { // Sélectionne une action en fonction du choix de l'utilisateur avec le joystick switch (choixJoystick(4, 0.5, 30, true)) { case LIGNE_CONTINUE: // Trace une ligne continue tracerLigne(5, 25, X_MAX, 25, 200, TRAIT_CONTINU); break; case CERCLE_CONTINU: // Trace un cercle continu tracerCercle(30, 25, 23, 360, TRAIT_CONTINU); break; case LIGNE_DISCONTINUE: // Trace une ligne discontinue tracerLigne(5, 25, X_MAX, 25, 200, TRAIT_DISCONTINU); break; case CERCLE_DISCONTINU: // Trace un cercle discontinu tracerCercle(30, 25, 23, 360, TRAIT_DISCONTINU); break; } // Affiche la fin de l'exercice dans la console série Serial.print("Fin exercice 1\n"); _delay_ms(1000); // Pause de 1 seconde return 1; } // Fonction pour tracer une ligne int tracerLigne(float xFrom, float yFrom, float xTo, float yTo, int steps, bool trait) { // Vérifie si les coordonnées sont dans les limites autorisées if (xFrom < X_MIN || xFrom > X_MAX || yFrom < Y_MIN || yFrom > Y_MAX) return -1; if (xTo < X_MIN || xTo > X_MAX || yTo < Y_MIN || yTo > Y_MAX) return -1; // Calcule les incréments pour chaque étape float xSteps = (xTo - xFrom) / float(steps); float ySteps = (yTo - yFrom) / float(steps); float q1, q2, compteur = 0; // Positionne le servo Z controlServoZ(85); _delay_ms(250); // Convertit les coordonnées en angles pour les servos XY inverseModeleGeom(xFrom, yFrom + OFFSET_Y, &q1, &q2); controlServoXY(q1, q2); _delay_ms(250); controlServoZ(95); // Boucle pour tracer la ligne for (float i = 0; i < steps; i++) { xFrom += xSteps; yFrom += ySteps; inverseModeleGeom(xFrom, yFrom + OFFSET_Y, &q1, &q2); controlServoXY(q1, q2); // Gère le trait discontinu si nécessaire if (trait) { if (compteur == 7) { controlServoZ(95); } else if (compteur == 10) { controlServoZ(85); compteur = 0; } compteur++; } _delay_ms(90); // (temps boucle + delay) * 50 = 10000ms avec temps boucle = 5ms (delay = 90 pour 10sec) } controlServoZ(75); // Ramène le servo Z à sa position initiale return 1; } // Fonction pour tracer un cercle int tracerCercle(float xFrom, float yFrom, float radius, int steps, bool trait) { float q1, q2, compteur = 0; float xTo = xFrom; float yTo = yFrom; controlServoZ(85); _delay_ms(250); // Positionne le servo XY pour commencer le cercle inverseModeleGeom(xFrom + radius, yFrom + OFFSET_Y, &q1, &q2); controlServoXY(q1, q2); _delay_ms(250); controlServoZ(105); // Boucle pour tracer le cercle for (int i = 0; i <= steps + 5; i++) { xTo = xFrom + radius * cos(i * (360.0 / steps) * DEG_TO_RAD); yTo = yFrom + radius * sin(i * (360.0 / steps) * DEG_TO_RAD); inverseModeleGeom(xTo, yTo + OFFSET_Y, &q1, &q2); controlServoXY(q1, q2); // Gère le trait discontinu si nécessaire if (trait) { if (compteur == 2) { controlServoZ(105); } else if (compteur == 4) { controlServoZ(85); compteur = 0; } compteur++; } _delay_ms(100); // (temps boucle + delay) * 90 = 10000ms avec temps boucle = 5ms (delay = 100 pour 10sec) } return 1; } // Fonction pour convertir les coordonnées (x, y) en angles pour les servos int inverseModeleGeom(float x, float y, float *q1, float *q2) { float O1E = sqrt(pow((x - D0), 2) + pow(y, 2)); float Alpha1 = atan2(y, x - D0); float Alpha2 = acos((pow(L1, 2) - pow((L4 + L5), 2) + pow(O1E, 2)) / (2 * L1 * O1E)); float Theta1 = Alpha1 + Alpha2; float Cx = (L4 / (L4 + L5)) * x + (L5 / (L4 + L5)) * (L1 * cos(Theta1) + D0); float Cy = (L4 / (L4 + L5)) * y + (L5 / (L4 + L5)) * (L1 * sin(Theta1)); float O2C = sqrt(pow((Cx - D0 - D1), 2) + pow(Cy, 2)); float Beta1 = atan2(Cy, (D0 + D1) - Cx); float Beta2 = acos((pow(L2, 2) - pow(L3, 2) + pow(O2C, 2)) / (2 * L2 * O2C)); float Theta2 = PI - (Beta1 + Beta2); *q1 = Theta1 * RAD_TO_DEG; *q2 = Theta2 * RAD_TO_DEG; return 1; } 2.3.3. Architecture du code "Exercice 2" Code "Exercice 2" (C++) int exercice2(void) { float x = 0, y = 0, q1, q2; float vitesse = 0.05; while (!digitalRead(PIN_SW)) ; // Anti rebond while (digitalRead(PIN_SW)) { // Valeurs bruts des capteurs int rawValX = analogRead(PIN_VRX) - OFFSET_VRX; int rawValY = 1023 - analogRead(PIN_VRY) - OFFSET_VRY; // Conversions des valeurs bruts en valeur centrées entre -512 / +512 float ValX = float(map(rawValX, -OFFSET_VRX, (1023 - OFFSET_VRX), -1000, 1000)) / 1000.0; float ValY = float(map(rawValY, -OFFSET_VRY, (1023 - OFFSET_VRY), -1000, 1000)) / 1000.0; // Récupérations des données en coordonnées polaires float module = sqrt(ValX * ValX + ValY * ValY); int angle = atan2(ValY, ValX) * RAD_TO_DEG; // Ajustement pour rester dans notre plage angulaire 0-360° et module 0-1 if (module > 1.0) module = 1.0; if (angle < 0.0) angle += 360.0; // Interprétation du résultat if (module > 0.2) { x = x + vitesse * module * cos(angle * DEG_TO_RAD); y = y + vitesse * module * sin(angle * DEG_TO_RAD); // Saturation numérique pour éviter dépassement if (x < X_MIN) x = X_MIN; if (x > X_MAX) x = X_MAX; if (y < Y_MIN) y = Y_MIN; if (y > Y_MAX) y = Y_MAX; inverseModeleGeom(x, y + OFFSET_Y, &q1, &q2); controlServoXY(q1, q2); } } Serial.println("Fin exercice 2"); _delay_ms(1000); return 1; } Le programme complet est disponible ici III - Réalisation                                                                                                                                                                                                                                                                 IV - Guide d'utilisation 1. Navigation dans le menu principal : Choix des exercices : Joystick à gauche ou à droite : Sélectionner l'exercice 1 ou 2. Joystick en position neutre et validation : Terminer le programme. Validation : Appuyer sur le bouton poussoir du joystick pour confirmer la sélection et entrer dans l'exercice choisi. 2. Exercice 1 - Tracé de figures : Sélection du mode de tracé : Joystick à droite : Tracé d'une ligne continue. Joystick vers le haut : Tracé d'un cercle continu. Joystick à gauche : Tracé d'une ligne discontinue. Joystick vers le bas : Tracé d'un cercle discontinu. Validation : Appuyer sur le bouton poussoir du joystick pour lancer le tracé de la figure sélectionnée. 3. Exercice 2 - Tracé libre : Déplacement et dessin : Joystick : Utiliser le joystick pour déplacer librement le robot dans le carré de 5 cm par 5 cm. Dessin : Le robot dessine tant que le joystick est déplacé. Fin du tracé : Appuyer sur le bouton poussoir du joystick pour arrêter le dessin et revenir au menu principal. 4. Retour au menu principal : Une fois un exercice terminé, le robot retourne automatiquement au menu principal. Le processus de sélection peut être répété pour lancer un autre exercice ou terminer le programme. V - Limite du projet Bien que le projet Robot Écrivain ait été une réussite, il est important de noter certaines limitations liées aux matériaux et aux composants utilisés : Précision du matériel : Servomoteurs : Les servomoteurs que nous avons utilisés ont une résolution d'1°, ce qui limite la précision des mouvements. Cela pose des défis pour le tracé de figures nécessitant une haute précision. Absence de homing : Le manque de capteurs de position initiale (homing) rend difficile le repositionnement exact du robot après une mise hors tension ou une interruption. Chaque redémarrage doit en théorie, nécessiter un recalibrage manuel. Capacités du microcontrôleur : Carte Arduino UNO : Notre système repose sur un microcontrôleur AVR à 16 MHz, avec un seul cœur. Cette architecture ne supporte pas le multitâche, ce qui signifie que les calculs et les tâches doivent être exécutés séquentiellement, ralentissant ainsi les performances globales. Limites de calcul : Les capacités limitées de calcul du microcontrôleur entraînent des délais supplémentaires, surtout lors de la gestion des calculs géométriques pour le tracé des figures. Un microcontrôleur plus puissant, comme un ESP32, aurait permis des calculs plus rapides et une gestion multitâche. Conception mécanique et matériaux : Découpe laser et impression 3D : Bien que ces méthodes offrent de la précision et de la rapidité, les matériaux utilisés (PLA pour impression 3D et medium pour découpe laser) ont leurs propres limitations en termes de rigidité et de durabilité. Encombrement et stabilisation : La structure du robot, en raison de la simplicité des matériaux et de la conception, peut manquer de la stabilité et de précision Ces limitations ont impacté la précision, la rapidité et la facilité d'utilisation du robot. Cependant, elles ont également fourni des opportunités d'apprentissage précieuses et ont mis en lumière les domaines à améliorer pour des projets futurs plus ambitieux. Nous envisageons que des améliorations, telles que l'utilisation de composants plus avancés et la conception de systèmes de retour de position (servomoteurs intelligents), pourraient considérablement augmenter les capacités de notre robot. Conclusion Le projet Robot Écrivain a été une expérience enrichissante, combinant mécanique, électronique et programmation pour créer un robot capable de dessiner sur une surface plane. En respectant un cahier des charges précis et en utilisant les ressources du FABLAB, nous avons surmonté plusieurs défis techniques. À travers les étapes de brainstorming, planification, modélisation CAO sur SolidWorks, et programmation en C++, chaque membre a contribué à la réussite du projet. Nos choix de conception, validés par nos professeurs ainsi que par des simulations et tests, ont assuré la précision et la fonctionnalité du robot. L'architecture électronique a optimisé la gestion de la puissance et des commandes via Arduino, tandis que le développement du code a permis le tracé précis de figures imposées et la gestion de l'interface utilisateur. Les tests finaux ont confirmé le bon fonctionnement du robot, accomplissant toutes les tâches requises. Ce projet nous a permis de développer des compétences techniques et de collaboration, constituant une base solide pour nos futures études et projets en ingénierie. Nous sommes fiers du travail accompli et des connaissances acquises tout au long de cette expérience. Journal de bord 08 février Découverte du projet : Présentation PowerPoint détaillant le cahier des charges du robot dessinateur. Formation des groupes : Les équipes ont été formées. Brainstorming : Séance de brainstorming, générant une variété d’idées et de projets différents. Choix d’un système : Sélection du robot le plus réalisable et efficace. Répartition des tâches : Création d’un diagramme de Gantt. Schéma électronique : Sélection des composants nécessaires 15 février Choix des matériaux : quels matériaux sont les plus adaptés en tenant compte des choix disponibles. Début de la modélisation solidworks. Schéma électronique : élaboration du schéma électronique sur Kicad. Modèle géométrique: Discussion autour de celui-ci en interne pour savoir comment le déterminer 28 février Finalisation de la modélisation solidworks Fabrication des pièces : Les premiers tests de fabrication ont été réalisés, notamment ceux liés à des ajustements (ex: les bras qui accueillent les roulements) Modèle géométrique: avec l’aide de nos professeurs nous avons pu déterminer le modèle géométrique 07 mars Fabrication des pièces: Création de toutes les pièces fabriquées à la découpeuse laser Assemblage: Le robot est entièrement monté sauf l’organe terminal Câblage + codage : On test de manière unitaire les composants 02 mai Fabrication des pièces: Impression des dernières pièces qui permettent de lever le crayon Assemblage:  le robot est monté entièrement Codage : exercice 1, exercice 2 30 mai Codage: Derniers ajustements du code. Projet ROB3: Rami, Yannis, Vasilis LineaScribe Robot Informations Membres Nom Prénom Email TOBBAL Yannis tobbalya@gmail.com ARIDI Rami rami.aridi@etu.sorbonne-universite.fr SKARLEAS Vasilis vasileios.skarleas@etu.sorbonne-universite.fr Cursus Polytech 3eme année | Spécialité: Robotique Délais Début: 14/02/24  |  Fin: 23/05/24 Projet final But, objectifs et contexte But Le but est de créer un robot capable de dessiner différentes formes sur une feuille de papier. Il doit pouvoir réaliser des formes préprogrammée ainsi qu'être contrôlé manuellement. Le robot est fixé sur un support carré horizontal comportant une zone de dessin de 10*10 cm. Il y a 2 exercice qu'il doit réussir. En outre, le robot faut être capable de répondre au cahier des charges disponible ici. Exercice 1Dessiner des formes prédéfinies Le robot doit être capable de réaliser en 10 +- 0.2 secondes: -Une ligne droite de 5cm-Une ligne droite de 5cm en pointillés-Un cercle de 2.5cm de rayon-Un cercle de 2.5cm de rayon en pointillés Exercice 2Permettre à un utilisateur de dessiner L'utilisateur doit être capable d'utiliser le robot pour dessiner la forme qu'il veut sur la zone de dessin. Le robot est contrôlé par un joystick qui doit donc être doté des fonctions utilisés dans l'exercice 1 (Déplacement, relever le stylo etc...) Besoins Il faut donc créer un robot qui: Maintienne un effecteur (le stylo) afin de dessiner Se déplace: Dans un plan horizontal: Créer les formes Verticalement: Dessiner ou non, pour les pointillés Enregistre des formes prédéfinies Soit capable d'être contrôlé précisément par le joystick Matériel Les moyens qu'on a à notre disposition sont les suivantes: Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de protoypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles MDF : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. Informatique Ressources CAO.zip contient les fichiers Solidworks pour les deux modèles de servomoteurs datasheets.zip contient les documentations de quelques-uns des composants fourni Machines utilisées Utilisation de l'impression 3D pour des pièces sophistiquée et éventuellement de la technologie de découpe laser pour les autres pièces. Matière consommée: MDF: 64 cm3 (Bras) + 302 cm3 (Tour): 366 cm3 total PLA: 7.3 cm3 (Effecteur) + 9 cm3 (Actionneur)  : 16.3 cm3 total Diagramme de GANTT Il y a un lien interactif qui est mis à jour à chaque modification via https://airtable.com/appVydj1BDLSFj432/shrm5Cjk0diMBPmgL Nota beneCe diagramme de GANTT est donnée à titre indicatif Project FabLab ROB3 Tasks (GANTT).pdf Étape 1: Brainstorming, idées de réalisation et analyse des risques Durant notre brainstorming: nous eûmes 5 idées que nous avons ultimement rejetées: Figure 1: Photo de notre tableau - juste pour démonstration. Explications sont disponibles ci-dessous Idée 1 - Robot de roues Principe: Un robot sur deux roues motorisées. Il peut faire de rotations en faisant tourner ses roues dans des directions opposées Le stylo est attaché au centre de de la plateforme. Les roues seraient contrôlées grâce aux 2 servomoteurs HS422 d'une façon similaire au robot E-PUC. Les servomoteurs sont connectés à la plateforme et aux roues via des biellettes ou des engrenages. Un servomoteur ES08A est utilisé pour contrôler le mécanisme de levée et de descente du stylo. Ce servomoteur est plus petit que les HS422 et peut être monté sur la plateforme à proximité du stylo. Croquis: Figure 2: Croquis du robot de roues (type voiture avec une bille pour la stabilisation) Avantages: Le robot est facile à contrôler avec un joystick (important pour la réalisation de l’exercice 2) Sa construction et modélisation est simple Inconvénients: On ne peut pas réaliser de trajectoires complexes. Le robot ne peut pas suivre des trajectoires complexes sans l'aide de capteurs odométrique. L'utilisation des servomoteurs empêcherait de faire rouler le robot indéfiniment. Cela ne serait pas un problème avec l'exercice 1. L'exercice 2 pourrait se révéler impossible à faire (Prenons par exemple un cas hyperbolique et fantaisiste: La forme à dessiner au joystick est une réplique de la Joconde. Le robot ne pourrait jamais faire ceci). Pour dépasser cet obstacle, il faudrait utiliser de roues avec une diamètre assez grande entraînant des complications aux glissements sur la surface. Idée 2 - Robot XY (cartésien) Principe: Un système similaire au fonctionnement d'une imprimante 3D: A l'aide d'un système de bielle manivelle, les deux servomoteurs HS422 commandent des liaisons glissières sur les axes x et y. La bielle tenant le stylo est elle même tenue par une bielle. Cette dernière se positionne sur la coordonnée de son axe, tandis que la bielle de l'effecteur choisit alors la deuxième coordonnée du point. Le servomoteur ES08A commande la levée et descente du stylo Croquis: Figure 3: Le croquis d'un robot cartésien Avantages: Cette solution ne présente pas de singularités dans sa configuration. De plus, les calculs sont simplifiés par le fait qu'on ne réfléchisse que sur le plan cartésien. Ce qui signifie qu'il peut atteindre toutes les positions du plan cartésien. Ce système permet un mouvement fluide et précis du stylo. Les calculs pour contrôler le robot sont simplifiés par le fait qu'on ne réfléchit que sur le plan cartésien sans faire ce changements de bases. Inconvénients: Le système de bielle-manivelle peut être plus lourd qu'un système à roues motorisées, ce qui peut affecter la performance du robot. Le système de bielle manivelle pourrait se révéler trop massif pour le robot. La solution consommerait beaucoup de matière Idée 3 - Scissors mecanism Principe: Inspirés du "Scissors mechanism", on voudrait attacher deux servomoteurs à la base du mécanisme et un système de commande d'actionneur au point "STYLO". Cette solution présente des avantages telles que : Croquis: Figure 4: Démonstration du mécanisme de ciseaux Avantages: Le mécanisme "Scissors" permet d'avoir un espace d'écriture plus grand que les systèmes à roues motorisées ou à bielle-manivelle. Cela est dû à la tendance du mécanisme à s'étendre. De plus, ce mécanisme est particulièrement adapté à la création de cercles. La rotation des bras permet de dessiner des cercles de différentes tailles avec précision. En outre, le mécanisme "Scissors" permet de dessiner des lignes droites très précises dans le sens du mouvement du stylo. Inconvénients: Malheureusement, cette solution présente également un inconvénient. Les mouvements étant plutôt révolutionnaires, créer des lignes droites verticales du stylo semble limité et dans certains cas extrêmes impossible. Idée 4 - Point d'intersection Principe: Le robot sera doté d'un mécanisme de ciseaux alimenté par deux servomoteurs positionnés aux coins de la base d'écriture. Chacun entraînera la rotation d'une poutre, permettant des mouvements de glissement dans les deux directions du vecteur r de rotation,. Le point d'intersection des deux poutres (créant ainsi une liaison glissière complexe) serait équipé du stylo, assurant une couverture totale de la feuille grâce à cette configuration ingénieuse. Croquis: Figure 5: Une conception de l'idée de point d'intersection Inconvénients: L'effort tangent au mouvement du stylo généré par une poutre sur l'autre serait extrêmement important, dépassant probablement les limites de faisabilité. La nécessité d'un glissement ultra-lisse, sans aucun frottement, et d'une précision extrême dans les mouvements représente un défi technique considérable. Idée 5 - Robot type SCARA Principe: On a pensé de faire un robot qui a deux axes de rotation verticales et une axe de rotation horizontale. En fait, il y aura deux rotations autour de deux axes Z (Z1 et Z2) verticales et une troisième rotation autour de Z3 qui est perpendiculaire au axe (Z2). Croquis: Figure 6: croquis du robot avec 2 dégrées de liberté Avantages: C'est un modèle connu du groupe, la partie mathématique est donc plus simple à réaliser Il y a beaucoup de manières de retirer de la matière avec une modélisation intelligente. Inconvénients: Poids excessive sur l'endroit du moteur 2, quelque chose qui pourrait impacter la précision de designs. Idéalement, on voudrait trouver une solution qui permettra de déplacer ce moteur sur le corps de la base principale du robot (où se trouve le moteur 1) en utilisant les outils qu'on a à notre disposition. Idée 6 - Robot parallélépipède Principe: Inspiré par le mécanisme du robot type SCARA, on avait une réflexion: "Pourquoi on ne déplace pas le moteur de la 2éme rotation (moteur2), sur le même axe de rotation qui celui du moteur 1. Le résultat du mouvement sera la même tout en ayant déplacé la majorité du poids sur le corps principale du robot. Croquis: Figure 7: Croquis du robot parallélépipède Avantages: Moins de poids sur les articulations mobiles du robot => meilleur précision par rapport l'idée d'avant. Inconvénients: Selon la manière d'expression du modèle géométrique direct, le calcul du modèle géométrique inverse pourrait être compliqué. La modélisation des quelques pièces unique pour la réalisation de ce type du robot pourrait augmenter le temps de fabrication et l'utilisation de matière. Solution retenue Ayant effectué une évaluation approfondie des différentes alternatives, notre équipe a choisi de privilégier le développement d'un robot type parallélépipède pour la prochaine étape du projet. Cette décision est basée sur plusieurs points clés : Robot de roues Pour s'assurer de la validité de la trajectoire, il faudrait l’équiper de capteurs odométrique. Nous ne disposons pas de ce matériel L'utilisation des servomoteurs empêcherait de faire rouler le robot indéfiniment. Cela ne serait pas un problème avec l'exercice 1. L'exercice 2 pourrait se révéler impossible à faire (Prenons par exemple un cas hyperbolique et fantaisiste: La forme à dessiner au joystick est une réplique de la Joconde. Le robot ne pourrait jamais faire ceci) Robot XY Le système de bielle manivelle pourrait se révéler trop massif pour le robot. La solution consommerait beaucoup de matière Robot "scissors" Selon la mécanique de la pièce, la création des lignes droites perpendiculaires du stylo n'est pas toujours possible à cause des mouvements révolutionnaires du mécanisme Les déplacement sont limités à des trajectoires bien précises, ce qui rend le contrôle au joystick frustrant. Robot intersection Il s'agit d'une idée très complète. Cependant, lorsque l'effecteur se trouve à l'extrémité des deux axes de guidage, il faut exercer une force massive pour l'en sortir et le faire revenir près des moteurs.Nous pourrions contourner ce problème en faisant en sorte que les axes soient bien plus grand que la zone de travail. Mais: Cela impliquerait un ajout de matière, et donc de masse Cela n'empêcherait pas un utilisateur au joystick de bloquer le robot Robot type SCARA Il s'agit de notre idée de départ de base, mais à la découverte de l'idée numéro 6 qui nous permettra de déplacer les deux moteur sur le corps de la base du robot, on a décidé de développer le robot type parallélépipède. Étape 2: Conception détaillée Modèle géométrique Nota beneOn avait déjà commencé l'analyse du modèle cinématique du robot de l'idée numéro 5 (type SCARA). Ci-dessous vous allez trouver l'option également de visualiser et voir le calcul qui était effectué pour ce robot, ainsi que pour le robot type parallélépipède (idée numéro 6).Les équations trouvées dans le modèle parallélépipède étant impossible à résoudre, on se base d'abord sur celles du SCARA tout en adaptant ces-dernières aux spécificités de notre modèle Robot type SCARA Cinématique Schéma Cinématique + Tableau DH Solid ai αi di+1 θi+1 0 0 0 h1 θ1 1 L1 -π/2 h2 θ2-π/2 2 0 0 L2 θ3 Les deux premières liaisons, pour 𝑖∈{1,..,2}, sont des liaisons pivot d’axe (𝑂𝑖,𝑧𝑖). La troisième liaison est une liaison pivot d'axe aussi selon z3. Modèle géométrique directe (complet) Calculant T0->1, T1->2, T2->effector, ainsi que T0->effector. Les résultas sont disponibles en PDF sur: Matrices de transformation homogene.pdf Modèle géométrique directe (simplifié) On peut aussi se concentrer uniquement sur les deux premières rotations car ce sont elles qui donneront la position finale du stylo. Après un moment donné pour écrire ou non, on peut configurer cela en programmation. De cette façon, nous pouvons simplifier le calcul comme ci-dessous : Les résultats sont disponibles en PDF sur: SCARA Simplified Robot.pdf Modèle géométrique inverse Ainsi selon le modèle géométrique directe et le la trigonométrie du systéme: Robot type parallélépipède Modèle géométrique directe Ci-dessous, vous trouverez l'approche mathématique du robot type parallélépipède pour sa modèle géométrique directe. Les résultats sont disponibles en PDF sur: Parallélépipède Robot.pdf Spécifications de notre modéle Avant trouver l'angle θ2 final, il faut procéder au choix de notre sens du plan, qui dépend de la configuration du robot et de l'angle θ1. Le calcul suivant nous permet d'obtenir la formule final de l'angle θ2: Schéma électronique Sur notre schéma électronique il y a un bouton qui permet de changer entre mode manuelle et mode automatique. De plus, il y a deux LED qui indiquent sur quel mode on est un moment donné. Par exemple si on est en mode manuelle, la LED bleue est allumée, sinon la LED verte est allumée. En outre, vous pouvez aussi trouver la connexion du joystick analogique dont on a besoin pour la réalisation de l'exercice 2. Il faut noter que le joystick à un fonctionnement de bouton intégré. On peut utiliser cette fonctionnalité pour contrôler plein de différentes choses, par exemple: Le stylo écrit ou pas. On fait un dessin avec le joystick qu'on visualise sur l'écran de l'ordinateur et on tape le bouton pour confirmer le dessin afin qu'il est créé par le robot. Figure 8: Schéma électronique V1.5.0 Une version optimisée pour plus de clarté et incluant les fonctions carré et joystick processing sera publiée prochainement Modélisation Notre objectif principal était de modéliser le robot selon un design à la fois compact et rigide. Un autre aspect important était de minimiser la quantité de matière utilisée et de réduire au maximum le temps de fabrication. Un modèle assemblé sur SolidWorks est disponible ci-dessous. Figure 9: Démonstration du mécanisme du robot LineaScribe Sous-assemblages Bâti support Articulations parallèles Pivot joint Pivot motor Axe d'effecteur Effecteur Bâti support C'est le corps principal du robot. Son objectif principal est de maintenir les deux moteurs sur le même axe de rotation. Il doit être capable de supporter les forces exercées par les moteurs vers les articulations parallèles ainsi que le retour des forces de frottement. Figure 10: Bâti support du robot avec les moteur assemblés Le bâti est entièrement créé en utilisant la découpe laser. Concernant la conception de la pièce, il faut noter que le plan du moteur du haut (moteur 1) est conceptualisé de manière à ne pas permettre le détachement des pièces tout en acceptant un stress excessif par les articulations principales du robot. Articulations parallèles (billettes) Elles sont également entièrement conceptualisées pour la découpe laser (3 couches différentes de 3 mm). Elles sont montées sur les pièces "pivot joint" et "pivot motor" en utilisant des roulements 7201 BEGAP. Elles sont: Billette Principale Billette Secondaire Pivot joint Son rôle et la précision d'application sont essentiels pour le bon fonctionnement du robot. Il nous permet d'obtenir la distance correcte en parallélisme, comme indiqué dans le design ci-dessous. Il est entièrement créé en utilisant la découpe laser (2 couches de 3 mm). Figure 11: Focalisation sur la pièce "pivot joint" Pivot motor C'est la seule pièce qui est modélisée pour l'impression 3D. Son rôle est le même que celui de la pièce "pivot joint". Elle est directement montée sur le moteur du bas (moteur 2). Pour renforcer la partie de la pièce qui recevra les forces de frottement du stylo, un triangle de renfort a été ajouté, comme vous pouvez le voir ci-dessous. Figure 12: Triangle de renfort de "pivot motor" L'axe centrique est un détail et il n'est pas requis pour le fonctionnement correct du mécanisme. Axe d'effecteur (billette Emax) Il s'agit de l'axe qui supporte l'outil de l'effecteur. Il est guidé par les axes parallèles et mis en position (MIP) par la pièce "pivot joint". Le moteur est mis en position grâce à "Pignon Servo Emax". C'est la plateforme sur laquelle on fixe le moteur Emax comme on peut observer ci-dessous : Figure 13: Billette Emax en assemblage avec le moteur 3 (Emax) Figure 14: Modèle d'un pignon servo Emax Effecteur L'outil de l'effecteur est l'élément terminal du robot qui entre en contact direct avec la surface d'écriture. Son rôle principal est de tracer des lignes en utilisant un stylo. Voici la deuxième pièce en impression 3D : Figure 15: La pièce qui va soutenir l'outil (le stylo dans notre cas) Solidworks Tous les fichiers et les fichiers d'assemblage sont disponibles sur: LineaScribe Robot.zip. Voici l'organisation des fichiers : Architecture : il s'agit d'un fichier squelette des différentes configurations. Si vous changez les dimensions des pièces présentes dans ce squelette, elles sont mises à jour dans tous les assemblages. Assemblage bras > Pièce Liaison Billette Principale - Billette Emax : C'est notre "pivot joint" Assemblage bras > ActionneurServo : C'est notre "motor joint" Assemblage bras > Billette * : ils sont les différents billettes du robot Assemblage bras > Pignon servo max : c'est pour la mise en position du moteur Emax commet on peut voir à la figure Assemblage bras > Liaison axe : il s'agit de l'assemblage complet du mécanisme qui va se visser sur les actionneurs. Assemblage > Assemblage1 : il s'agit de l'assemblage total du robot. Assemblage bras > Effecteur : C'est notre "effecteur" Fichiers SVG & STL batis.svg (MDF 6mm) pivot joint.svg (MDF 3mm) bilette1.svg - articulation parallèle 1 - billette principale (MDF 3mm) bilette2.svg - articulation parallèle 2 - billette secondaire (MDF 3mm) pivot motor.STL (3D Maker PLA 30% infill - no support) bilette3 et pignon EMAX.svg (MDF 3mm) Effecteur.STL (PLA 1.75mm) Modèle géométrique inverse: vérification D'après le calcul des robots de type parallélépipède et SCARA, nous avons développé un script sur MATLAB permettant de vérifier le calcul des coordonnées du plan cartésien x, y en fonction des angles θ1 et θ2. Notre analyse a permis de conclure que : Dans le cadre de la limitation de l'espace d'écriture de la plateforme, il existe parfois plusieurs solutions possibles pour atteindre une position spécifique. Il ne s'agit pas de singularités, mais plutôt de libertés de rotation autour des axes des moteurs. Cependant, le robot ne peut pas se placer à certains endroits en raison de la modélisation (support du moteur 1). Il est donc nécessaire de trouver une procédure permettant de choisir la solution du système qui est acceptable. Voici le fichier MATLAB: MGI_matlab.m Pour utiliser le fichier il suffit d'appeler la fonction MGI_matlab, et passer comme arguments les coordonnées x, y et L1 et L2 les longueurs des articulations du robot. On a ci-dessous le résultat lorsqu'on exécute la fonction pour obtenir les 4 sommets d'un carré (5cm) et qu'on entre les angles renvoyés dans notre esquisse du bras. Pre-requis Lors du montage du robot, les moteurs doivent être calibrés. Nous vous conseillons de mettre les moteurs en position 0 degré (servo 1) et 90 degrés (servo 2). Ensuite, levez le bras à une position de 90 degrés. Attention, servo1 et servo2 sont les références dans le code disponible ci-dessous. void setup() { ... servo1.write(0); servo2.write(90); ... } Pistes de programmation Organigramme: Programme principal (Setup+Loop) Ligne Droite Ligne Pointillées Cercle Cercle Pointillés L'organigramme des fonctions carré et joystick a changé récemment et sera posté plus tard Programmation Application du modèle géométrique inverse pour calculer les angles de contrôle de moteurs /* Takes a cartesien position (x,y) and updates the angles teta1 and teta2 that control the two motors (located on the same r) */ void get_angles(double x, double y, float L1, float L2, double* teta1, double* teta2){ //Distance between the center of the robot and the starting point of the writing area x+=dx; y+=dy; //Geometric inveresed model available under teh section "Robot type SCARA" co2 = (x*x+y*y-L1*L1-L2*L2)/(2*L1*L2); teta2prec = atan2((-sqrt(1-co2*co2)),co2); //The root decides the orientation according to the configuration //Calculating the angle 1 *teta1 = atan2(y,x) - atan2((L2*sin(teta2prec)),(L1+L2*cos(teta2prec))); teta2prec = teta2prec*180/pi; //rad to degrees *teta1 = *teta1*180/pi; *teta2 = *teta2*180/pi; //teta2 is the final corrected angle according to "Specifications de notre modele" available on the Robot's documentation -> voir wiki *teta2=-abs(teta2prec)+*teta1+180; *teta2 = 180-*teta2; } Control du stylo /* Controls the tool's position [choose between UP and DOWN] */ void pen_control(int control, int *penstate) //Down, up, swithc state { if (control == DOWN) //write with pen [pen is down] { servo3.writeMicroseconds(pen_down); *penstate=0; } if (control == DOWN_) //write with pen [pen is down] { servo3.writeMicroseconds(pen_down_); *penstate=0; } else if (control == UP) //disable writing [pen is up] { *penstate=1; servo3.writeMicroseconds(pen_up); } else if (control == UP_) //disable writing [pen is up] { *penstate=1; servo3.writeMicroseconds(pen_up_); } else if (control == SWITCH) //disable writing [pen is up] { switch(*penstate){ case 0: servo3.writeMicroseconds(pen_up); *penstate=1; break; case 1: servo3.writeMicroseconds(pen_down); *penstate=0; break; } } else { printf("An error occured on controling the pen\n"); } } Designer une ligne /* Draws a straight line in a specific length and to a given angle */ void straight_line(double *x_start, double *y_start, float length, double angle) { //Note: We divide the distance in multiple subpoints to be acquired. The greater the number, the most precision we can achieve of course with some limitations for (double i = 0; i < length*900; i++) { *x_start = *x_start + cos(angle)/900; //Current position + shift *y_start = *y_start + sin(angle)/900; get_angles(*x_start,*y_start,L1,L2,&teta1, &teta2); //calculation of motors' angles servo1.write(teta1); //Sending data to the motors servo2.write(teta2); delay(1); } } Designer une ligne en pointilles /* Designs a dotted line in a specific length */ void dotted_line(double *x_start, double *y_start, int length, double angle, float dot_length, float space_length) { float i=0; //control for the desired length while(i < length) { //get into writing position pen_control(DOWN_, &penstate); delay(100); straight_line(x_start,y_start,dot_length, angle); i=i+dot_length; //The length that should write a line if(i>=length) break; //Pen is on UP_ state pen_control(UP_, &penstate); delay(100); straight_line(x_start,y_start,space_length, angle); i = i + space_length; //adding the space that shouldn't write anything on the paper } } Designer un cercle /* Designing a circle in a specific radius and a specific starting point */ void circle(double x_center, double y_center, double angle_start, double angle, double radius, double *x, double *y, int init, int res) { //Placement in a specific starting point if(init==0){ *x = x_center + (radius * cos(radians(angle_start))); *y = y_center + (radius * sin(radians(angle_start))); get_angles(*x,*y,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); //Get into writing position pen_control(DOWN,&penstate); delay(500); } //Repetead calculation different points between a starting angle and a final angle for (double i = (angle_start*res); i < (angle*res); i++) { *x = x_center + (radius * cos(radians(i/res))); //Formula of finding the position of a point is based on the tan function decomposed in x and y axis *y = y_center + (radius * sin(radians(i/res))); get_angles(*x,*y,L1,L2,&teta1, &teta2); //Calculation of angles for the motors servo1.write(teta1); //Sending data to the motors servo2.write(teta2); delay(1); } } Designer un cercle en pointilles /* Designs a dotted circle in a specific radius and a specific starting point */ void dotted_circle(double x_center, double y_center, double angle_space, double angle_dot, double radius, double *x, double *y) { *x = x_center + (radius * cos(radians(0))); *y = y_center + (radius * sin(radians(0))); get_angles(*x,*y,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); //It's a recursive loop leading to a 360 degrees circle that calls circle function with a starting and final point double i=0.0; while(i < 360) { pen_control(DOWN_, &penstate); delay(200); circle(x_center, y_center,i, angle_dot+i, radius, x, y, 1, 10); delay(200); i = i + angle_dot; //update of the current position - required to verify of a circle of 360 degress has been designed if(i>=360) break; //Between delays we chage writing mode in order to create a dotted effect pen_control(UP, &penstate); delay(200); circle(x_center, y_center,i, (angle_space+i), radius, x, y, 1, 10); i = i + angle_space; delay(200); } } Designer un carre /* Designs a square of a given length and in a given angle */ void square(double *x, double *y, int length, int angle) { //Square is composed of four straight lines of a given length and they are vertical between them straight_line(x,y,length, radians(angle)); delay(1000); straight_line(x,y,length, radians(angle+90)); delay(1000); straight_line(x,y,length, radians(angle+180)); delay(1000); straight_line(x,y,length, radians(angle+270)); delay(1000); } Logique du Joystick en mode manuelle Mode manuelle permet à l'utiliser de contrôler le robot via le Joystick tout en appuyant sur un bouton qui permet de contrôler si le stylo est en mode d'écriture ou non. Cette fonctionnalité existe sur la boucle principale comme un mode de fonctionnement. Pour rentrer dans ce mode, il suffit de presser une seule fois sur le Joystick, de même pour en sortir. //Manual control of the robot using joystic if (buttonState5 == 0) { //Allows a smooth operation when a button is pushed (detect one time the tap) while (digitalRead(pinbutton1)==0){} digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=0.0; y=0.0; delay(500); get_angles(x,y,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); pen_control(DOWN,&penstate); delay(500); double coef= 0.0003; while(digitalRead(pinbutton1)==1){ //If the button is pressed then the effector is swithcing mode. For instance, if it was in writing position it goes UP and if it was UP then it gets into writing position. if (digitalRead(pinbutton5) == 1) { while (digitalRead(pinbutton5)==1){} pen_control(SWITCH,&penstate); } // Read analog values xtemp = int(512.0 - analogRead(pinx)); ytemp = int(512.0 - analogRead(piny)); // Apply dead zone for small movements if (abs(xtemp) <= 100) xtemp = 0; if (abs(ytemp) <= 100) ytemp = 0; // Update x and y coordinates x += xtemp * coef; y += ytemp * coef; Serial.print(x); Serial.print("\t"); Serial.println(y); get_angles(x,y,L1,L2,&teta1, &teta2); //calculate motors' angles servo1.write(teta1); //send data to the motors servo2.write(teta2); delay(10); } while (digitalRead(pinbutton1)==0){} digitalWrite(ledPin, LOW); pen_control(UP,&penstate); delay(500); } Logique du Joystick en Processing Les données sont traitées à l'aide d'un programme de traitement qui permet de pré-visualiser ce que vous souhaitez concevoir puis les données sont envoyées via le port série à la carte afin de contrôler les moteurs. /* Logig for joystick manipulation */ void Joystick(double *x, double *y) { int dimx=0; int t=0; //Sending mode on, sending joystick data to processing int out=0; int out1=0; while(out==0){ //We check if we read the values ​​of the Joystick where the user decided to stop (On verifie si on Lit les valeurs du Joystick ou l'utilisateur a decide d'arrete) if (Serial.available() > 0) { String response = Serial.readStringUntil('\n'); response.trim(); // Remove any leading or trailing whitespace if (response.equals("Done")) { //digitalWrite(13,LOW); break; // Stop sending data to processing } } //Reading Joysticks values xtemp = analogRead(pinx); ytemp = analogRead(piny); buttonval1 = 1-digitalRead(pinbutton1); buttonval2 = digitalRead(pinbutton2); //Sending Joysticks values to processing Serial.print(xtemp); Serial.print("\t"); Serial.print(ytemp); Serial.print("\t"); Serial.print(buttonval1); Serial.print("\t"); Serial.println(buttonval2); //This loop prevents the overlap of several values ​​given that the frequency of sending data from the Arduino is higher than the frequency of receiving processing (Cette boucle empeche le chevauchement de plusieur valeur etant donne que la frequence d';envoi de donne de l'arduino est plus eleve que la frequence de recoit de processing) //We therefore wait until the data is read by processing before sending another data (On attend donc jusqu'a ce que la donnee est bien lu par processing avant d'envoyer une autre donne) out1=0; while (out1 == 0) { //digitalWrite(13,LOW); if (Serial.available() > 0) { String response = Serial.readStringUntil('\n'); response.trim(); // Remove any leading or trailing whitespace if (response.equals("Done")) { out=1; //get out of the loop //checck andif we really get out of the loop check if it doesnt give another line of data after i wanted to start out1=1; } else if (response.equals("Received")) out1=1; // Exit while loop } } } //tab data double*** tab; //Receive tab dimensions while (true) { if (Serial.available() > 0) { String receivedString = Serial.readStringUntil('\n'); // Read until newline character //decode data int rowIndex = 0; int colIndex = 0; int depthIndex = 0; String buffer = ""; // Buffer to hold the float string //premier element int i = 0; while(1){ char c = receivedString.charAt(i); if (c == ',') { dimx = buffer.toInt(); buffer = ""; // Reset buffer } else if (c == ';') { t = buffer.toInt(); buffer = ""; // Reset buffer i++; break; } else { buffer += c; // Add character to buffer } i++; } if(t==1) digitalWrite(ledPin, LOW); tab = (double ***)malloc(t * sizeof(double **)); for (int l = 0; l < t; l++) { tab[l] = malloc(2 * sizeof(double*)); //tableau de donne for (int j = 0; j < 2; j++) { tab[l][j] = malloc(dimx * sizeof(double)); } } for (i; i < receivedString.length(); i++) { char c = receivedString.charAt(i); if (c == ',') { tab[depthIndex][rowIndex][colIndex] = buffer.toDouble(); colIndex++; buffer = ""; // Reset buffer } else if (c == ';') { tab[depthIndex][rowIndex][colIndex] = buffer.toDouble(); rowIndex++; colIndex = 0; buffer = ""; // Reset buffer } else if (c == '|') { tab[depthIndex][rowIndex][colIndex] = buffer.toDouble(); depthIndex++; rowIndex = 0; colIndex = 0; buffer = ""; // Reset buffer } else { buffer += c; // Add character to buffer } } // Capture the last float value tab[depthIndex][rowIndex][colIndex] = buffer.toDouble(); break; } } for (int j = 0; j < t; j++) { get_angles(tab[j][0][0],tab[j][1][0],L1,L2,&teta1, &teta2); //Position initiale servo1.write(teta1); servo2.write(teta2); delay(1000); pen_control(DOWN,&penstate); delay(500); for (int i = 0; i < dimx; i++) { double xt = tab[j][0][i]; double yt = tab[j][1][i]; if(xt!=-1 && yt!=-1){ get_angles(xt,yt,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(100); } } pen_control(UP,&penstate); delay(500); } } Initialisation void setup() { servo1.attach(9); // attaches the servo on pin 9 to the servo object servo2.attach(10); servo3.attach(11); //declarations of different button as input ports to detect actions pinMode(pinx,INPUT); pinMode(piny,INPUT); pinMode(pinbutton1,INPUT_PULLUP); pinMode(pinbutton2,INPUT); pinMode(pinbutton3,INPUT); pinMode(pinbutton4,INPUT); pinMode(pinbutton5,INPUT); //declaration of LED pin as an output port to send commands (control if it's switched on or off) pinMode(ledPin,OUTPUT); //Get into a default starting point get_angles(0.0,0.0,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); //straight_line(&x,&y,15, radians(45)); //Put the effector in UP position and stand by pen_control(UP,&penstate); //Start serial communication Serial.begin(9600); } Boucle principale void loop() { /* Simple implementations of existing functions for testing purposes. We have only one active every time. All the others has to be commented in order to observe the robot's mouvements */ int buttonState1 = digitalRead(pinbutton5); // Read button 1 state int buttonState2 = digitalRead(pinbutton2); // Read button 2 state int buttonState3 = digitalRead(pinbutton3); // Read button 3 state int buttonState4 = digitalRead(pinbutton4); // Read button 4 state int buttonState5 = digitalRead(pinbutton1); // Joystick int buttonState6 = digitalRead(pinbutton6); // Read button 5 state int buttonState7 = digitalRead(pinbutton7); // Read button 5 state //square(&x,&y,5, 0); if (buttonState1 == 1) { while (digitalRead(pinbutton5)==1){} // Button 1 pressed, perform straight line //start digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=0.0; y=0.0; delay(500); get_angles(x,y,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); pen_control(DOWN,&penstate); delay(500); //function straight_line(&x,&y,4, radians(90)); //end pen_control(UP,&penstate); delay(500); digitalWrite(ledPin, LOW); } if (buttonState2 == 1) { while (digitalRead(pinbutton2)==1){} // Button 1 pressed, perform straight line //start digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=0.0; y=0.0; delay(500); get_angles(x,y,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); pen_control(DOWN,&penstate); delay(500); //function dotted_line(&x, &y, 4, radians(90), 0.5, 0.5); //straight_line(&x,&y,5, radians(90)); //end pen_control(UP,&penstate); delay(500); digitalWrite(ledPin, LOW); } //circle if (buttonState3 == 1) { while (digitalRead(pinbutton3)==1){} // Button 1 pressed, perform straight line //start digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=1.0; y=1.0; //function circle(1, 1, 0, 360, 2.5, &x, &y, 0, 12); //straight_line(&x,&y,5, radians(90)); //end pen_control(UP,&penstate); delay(500); digitalWrite(ledPin, LOW); } //dotted circle if (buttonState4 == 1) { while (digitalRead(pinbutton4)==1){} // Button 1 pressed, perform straight line //start digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=1.0; y=1.0; //function dotted_circle(1, 1, 10, 10, 2.5, &x, &y); //end pen_control(UP,&penstate); delay(500); digitalWrite(ledPin, LOW); } //Joystick in processing if (buttonState6 == 1) { while (digitalRead(pinbutton6)==1){} digitalWrite(ledPin, HIGH); Joystick(&x,&y); digitalWrite(ledPin, LOW); } if (buttonState7 == 1) { while (digitalRead(pinbutton7)==1){} // Button 1 pressed, perform straight line //start digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=1.0; y=1.0; //function square(&x,&y,4, 0); //straight_line(&x,&y,5, radians(90)); //end pen_control(UP,&penstate); delay(500); digitalWrite(ledPin, LOW); } //Manual control of the robot using joystic if (buttonState5 == 0) { //Allows a smooth operation when a button is pushed (detect one time the tap) while (digitalRead(pinbutton1)==0){} digitalWrite(ledPin, HIGH); pen_control(UP,&penstate); x=0.0; y=0.0; delay(500); get_angles(x,y,L1,L2,&teta1, &teta2); servo1.write(teta1); servo2.write(teta2); delay(1000); pen_control(DOWN,&penstate); delay(500); double coef= 0.0003; while(digitalRead(pinbutton1)==1){ //If the button is pressed then the effector is swithcing mode. For instance, if it was in writing position it goes UP and if it was UP then it gets into writing position. if (digitalRead(pinbutton5) == 1) { while (digitalRead(pinbutton5)==1){} pen_control(SWITCH,&penstate); } // Read analog values xtemp = int(512.0 - analogRead(pinx)); ytemp = int(512.0 - analogRead(piny)); // Apply dead zone for small movements if (abs(xtemp) <= 100) xtemp = 0; if (abs(ytemp) <= 100) ytemp = 0; // Update x and y coordinates x += xtemp * coef; y += ytemp * coef; Serial.print(x); Serial.print("\t"); Serial.println(y); get_angles(x,y,L1,L2,&teta1, &teta2); //calculate motors' angles servo1.write(teta1); //send data to the motors servo2.write(teta2); delay(10); } while (digitalRead(pinbutton1)==0){} digitalWrite(ledPin, LOW); pen_control(UP,&penstate); delay(500); } } Améliorations possibles Il existe quelques améliorations qu'on pourrait effecteur pour que le prototype du robot LineaScribe soit plus performant et efficace. Ajouter des pieds anti-friction sur la base du robot. Conceptualiser un plan de design avec possibilité d'être monté sur le châssis du robot. Utilisez beaucoup moins de boutons pour basculer entre les différents modes de fonctionnement via la détection du nombre d'appuis sur un bouton par exemple. Pour obtenir un cercle parfait, il faudrait modifier l’angle d’écriture du stylo sur la moitié du cercle. De cette façon, il n’y aura pas de dimensionnement. Ceci s'explique par le fait que les coordonnées calculées concernent le point de montage de notre effecteur (outil) et non jusqu'au point de contact avec la surface du papier. Journal de bord / Calendrier Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations 14/02/2024 Discussion autour du Projet Robotique ROB3 - différents idées, décision, planning. 16/02/2024 Création du schéma cinématique, de la table DH. Etablissement d'un premier modèle géométrique 19/02/2024 Finalisation du dossier de conception préliminaire. Mise a jour du modèle géométrique et de la table DH, création du modèle géométrique inverse 22/02/2024 Début de modélisation des pièces du robot 24/02/2024 Recherche sur les méthodes de géométrie inverse du robot 02/03/2024 Finalisation de la partie modèle géométrique directe et inverse 08/03/2024 Impression des pièces du bâti support et on a lancé l'impression 3D du "pivot motor" 24/04/2024 Programmation des fonctions lignes et carré (pour tests) et connexion au joystick. 25/04/2024 Début de la fonction joystick. Assemblage et câblage définitif du robot. Programmation du cercle pour l'exercice 1 22/05/2024 Finalisation du joystick. Programmation de la fonction pointillés 23/05/2024 Finalisations du Joystick en mode Processing. Tests finaux et présentation.Projet ROB de Arnold, Evinia, Mathis Informations Membres de l'équipe Arnold AÏM Evinia ANASTASOPOULOU Mathis RENARD Adresses mail : arnold.aim@etu.sorbonne-universite.fr evanthia_virginia.anastasopoulou@etu.sorbonne-universite.fr mathis.renard@etu.sorbonne-universite.fr Cursus 1ere année cycle ingénieur en Robotique à Polytech Sorbonne Date de début - Date de fin 14/02/2024 - 23/05/2024 Présentation du Projet L'objectif de ce projet est de réaliser un petit mécanisme robotisé permettant de dessiner des formes géométriques simples définies à l'avance ou à l'aide d'un joystick manipulé par l'utilisateur en temps réel en utilisant des mécanismes prédéfinis. Pour la réalisation de ce projet nous respectons le cahier des charges défini par nos enseignants Guillaume MOREL et Lilian Carillet. Cahier des charges et fonctions à réaliser Le mais général est de faire un robot capable de dessiner avec un crayon. Le robot est fixé sur un support carré horizontal comportant une petite zone de dessin. Un objectif important est d'utiliser un minimum en quantité de matière pour la réalisation du projet. La programmation est fait en C et en utilisant la chaîne de développement Arduino IDE. Il y a 2 exercices que le mécanisme doit effectuer et un exercice/fonction optionnel. Exercices à réaliser Exercice 1 Avoir un code prédéfini pour que le mécanisme puisse tracer, en appuyant sur un seul button, les dessins suivants : Une ligne de 5 cm de long, Une ligne pointillée de 5cm de long, Un cercle de 2,5 cm de rayon, Un cercle pointillé de 2,5 cm de rayon. Le tracé de chacune des figures doit être réalisé en  10 secondes  +/- 0,2 secondes. Exercice 2 Dessiner une figure imposée dans un carré de 5cm par 5cm, tout en pilotant le mécanisme par un joystick. Dans cet exercice il faut prendre en compte que la figure peut être discontinue, auquel cas l'effecteur du robot devrait être capable de se relever du support horizontal auquel il écrit. Exercice 3 (optionnel) Ajouter une fonction supplémentaire qui sera capable de modifier la vitesse de déplacement du robot via l'interface. Matériel à notre disposition Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de protoypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. Réflexion Idée Robot sur roues Idée complexe à mettre en place, pas de roues à disposition donc fastidieux à construire plus compliquée de faire un circuit électrique propre à l'intérieur. Figure 1 : Idée de robot sur roues Idée Robot Type Imprimante 3D Transformation de pivot en translation trop compliqué à faire car création de chaines en 3D trop dur à modéliser/ imprimer en 3D. Aussi, cela entraine une utilisation non pertinente des servomoteurs. Figure 2 : Idée Robot Type Imprimante  3D Idée Robot Type FANUC Nous avons ici une bonne utilisation des servo-moteurs, facile à modéliser/imprimer/découper par les outils en service. Figure 3 : Idée Robot Type FANUC Décision finale Toutes les idées semblaient être plus ou moins possible à concevoir. Nous avons décidé, après argumentations, discussions auprès du professeur, de retenir cette dernière solution car elle va produire des résultats plus précises. Lien de notre diagramme de Gantt: https://docs.google.com/spreadsheets/d/1OmamPJELbAN48oTG1ooIXSrjbCt2yrp1qGpkE4TFLDg/edit?usp=sharing Calcul du modèle géométrique inverse Premier idées de calcul de modèle géométrique, inverse, jacobienne… Finalement s'avérant inutile car le calcul d'angle était déjà donné dans le cours.         Figures 4 à 8 : Calcul du modèle géométrique Les formules de calcul finalement retenues sont donc les suivantes : Figure 9 : Formules représentantes des angles Dans notre cas, il n'y a pas de bras violet, ni de bras rouge et vert en dessous. x' et y' deviennent juste x et y. Et theta3, alpha n'apparaissent plus dans le résultat final. Les angles du robot seront calculés dans une partie Matlab. Modélisation Figure 10 : Mécanisme robotisé Notre robot se compose d'un châssis principal qui stabilise notre premier moteur HS422 180°, ainsi que d'un second bâti support plus petit qui supporte le servomoteur EMAX ES08A 180°. Deux palonniers sont utilisés comme bras. Le premier palonnier (le plus long), intègre le second moteur HS422 180°, responsable du mouvement de l'effecteur. Nous avons décidé de positionner le servomoteur EMAX ES08A 180° à la sortie du premier servomoteur HS422 180° afin de contrôler à la fois les mouvements des bras du robot et leur rotation. Cette configuration et surtout cette rotation, nous permettra d'effectuer des dessins en pointillés en autorisant un mouvement vertical du stylo lorsque nécessaire (Figure 11). Figure 11 : Rotation des bras Décomposition des éléments Bâti support C'est le corps du robot. Il a été conçu pour maintenir notre premier servomoteur HS422 180° en place et il est capable de supporter le reste du robot. Le servomoteur permet la rotation du bras. Figure 12 : Bâti support Support petit servomoteur et support bras Ces deux petit supports qui sont liés entre eux via l'actionneur du servomoteur EMAX ES08A 180° nous permettent : d'avoir un support pour le servomoteur EMAX ES08A 180° de transmettre la rotation du premier moteur au reste du robot d'avoir un support pour le bras du robot qui le relie à l' EMAX ES08A 180° et donc au corps de tourner le bras du robot pour contrôler si l'effecteur (crayon) touche ou pas la surface du dessin Le support du petit servomoteur comporte l'empreinte du palonnier à la face du dessous (Figure 14) pour bien le relier au premier servo.  Nous avons décidé de placer un pont autour du servomoteur pour être sûr de son MAP avec le support. Nous avons aussi placé deux petits "freins" (Figure 15) pour que le servomoteur puisse bien maintenir son position. Le palonnier du petit servomoteur est relié avec une vis centrale et deux fils de fer (parce que certains trous du palonnier sont trop petits et ne permettent pas l'insertion d'une vis) au support du bras. Cela fait partie du MAP de cet ensemble. Figure 13 : Support petit servomoteur et support bras Figure 14 : Support servomoteur face du dessous Figure 15 : "Freins" (en bleu) Bras Le "main" du robot est composé de deux bras. Le premier (celui de gauche et donc celui qui est plus long, Figure 16) comporte le troisième servomoteur (HS422 180°) qui réalise la deuxième rotation de l'effecteur dont on a besoin.  Le deuxième bras (Figure 17) comporte l'empreinte du palonnier pour qu'il puisse être rélié au servomoteur ainsi qu'un trou pour positionner le crayon. Figure 16 : Bras long Figure 17 : Bras en extrémité Fabrication des pièces Toutes nos pièces sont fabriquées et prototypées en utilisant la méthode de découpe LASER Troctec Speedy 100. En effet, la précision de la machine permet d'obtenir des pièces précises et simples pour notre robot. Conception Nous avons procédé à l'assemblage du robot en utilisant des vis et des écrous, de la colle à bois et des fils de fer. Cependant, le système initial avait un problème assez inqiétant, en raison d'une surcharge supportée par le petit servomoteur. Pour remédier à ce problème, nous avons réduit la taille du bras en extrémité. Par la suite, afin de faciliter sa manipulation lors du processus de dessin, nous avons fixé le robot sur un support en bois à l'aide de colle. Figure 18 : Robot monté Schéma éléctronique Sur notre schéma éléctronique il y a 4 boutons, chacun d'entre eux s'occupant d'un dessin prédéfini et un joystick analogique qui s'occupe du mode manuel, qui est tout le temps activé. Nous branchons les moteurs qui reçoient le signal en PWM representé par les petites vagues à côté de chaque pin (9, 10 et 11) de l'ARDUINO. Figure 19 : Montage électronique Sur la Figure 21, nous pouvons visualiser le cablage qui a été fait en réalité et qui comporte tous les éléments éléctroniques dont nous avons besoin. Figure 20 : Système électronique Programmation Organigramme Figure 21 : Organigramme du programme Pour le code du joystick on est parti d'une base existante qui est celle du code de Nacim et de Mehdy qui nous ont envoyé eux mêmes. Nous avons ensuite modifié ce code pour l'adapter à nos besoins, notamment la partie utilisant le bouton switch du joystick. Tests du code et finalisation Le premier test du modèle géométrique n'étant pas concluant, nous avons décidé de réaliser plus de tests en amont afin de déterminer les potentiels problèmes rencontrés. En effet, le modèle géométrique utilisé par rapport à la réalité ne convenait pas et après plusieurs tests et retravail sur le bras en extrémité, les angles données par le modèle géométrique étaient corrects. Figure 22 : Dessins imposés par le cahier des charges (cercle plein et pointillé de diamètre 5cm, ligne pleine et pointillée 5cm) Vous pouvez consultez le schéma éléctronique de la Figure 20 ainsi que le programme de l'Arduino sur le lien suivant :  https://wokwi.com/projects/390879808315743233 Conclusion Nous avons pu au travers de ce projet une bonne partie de la conception d'un robot 2R simple qui avait pour but de dessiner certaines formes prédéfinies et d'être piloté manuellement. Ce projet nous a permis d'apprendre et de perfectionner chacun.e de connaissances et compétences, pour certain.e.s cela était plus axé sur l'éléctronique et l'informatique quant à d'autres ont préféré perfectionner leur comrehénsion de modélisation et conception d'un mécanisme via SolidWorks (logiciel utilisé). De plus, ce projet nous a initié à l'utilisation de certaines machines assez évoluées, mises à disposition grâce au FabLab SU, comme la Trotec Speedy100 et 360. Nous avons voulu, dans un souci de sobriété ne pas utiliser les imprimantes 3D qui utilisent plus d'énérgie et de matière dû à leur temps d'impression plus long (plusieurs heures). Pour finir, ce projet nous a permis de travailler en équipe et d'utiliser les forces de chacun.e et de pallier nos lacunes à travers cette expérience enrichissante aussi bien du point de vue des compétences et de connaissances. Projet ROB 3 : Mehdy ABDELKAMEL - Nacim TALAOUBRID Informations Mehdy ABDELKAMEL mehdy.abdelkamel@etu.sorbonne-universite.fr ROB3 Nacim TALAOUBRID nacim.talaoubrid@etu.sorbonne-universite.fr ROB3 Date de début de Projet :  14 Février 2024 Date de fin du Projet : 23 Mai 2024 Projet M.A.J.I.N, c'est un robot Mécanisé, Articulé avec un Joystick Interactif et Novateur. GANTT ci-joint dans "Attachments" Contexte Le but général est de faire un robot capable de dessiner avec un crayon sur un support plan horizontal. Objectifs L’objectif principal de ce projet est de concevoir et réaliser un système robotique, c’est-à-dire sa partie mécanique, sa motorisation, sa commande et son interface de pilotage. Le cahier des charges fourni précise les fonctions que doit réaliser le système et les contraintes qu’il doit respecter. Pour les étudiants, l’objectif est au moins autant d’apprendre par la pratique les bases de la gestion d’un projet (c’est-à-dire la façon de s’organiser en équipe pour atteindre un objectif donné avec des moyens donnés) que d’aboutir à un prototype fonctionnel. Fonctions à réaliser Il doit être capable de réaliser deux exercices : 1. Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support différentes figures imposées de difficulté croissante : a. Une ligne de 5cm de long, b. Une ligne pointillée de 5cm de long, c. Un cercle de 2.5cm de rayon, d. Un cercle pointillé de 2.5cm de rayon. Le tracé de chacune des figures doit être réalisé en 10 secondes +/- 0.2 secondes. 2. Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support, un dessin imposé dans un carré de 5cm par 5cm. Le déplacement de l’organe terminal du robot devra être piloté par un joystick. Il est possible que la figure soit discontinue, et donc il faut prévoir de pouvoir relever le crayon du support horizontal sur lequel on écrit. Une fonction supplémentaire, optionnelle , peut être réalisée : Être capable de modifier la vitesse de déplacement du robot via l’interface. Source : Le sujet du projet | Wiki FablabSU (sorbonne-universite.fr) Afin de concevoir au mieux ce robot, nous allons procéder en plusieurs étapes : 1. CONCEPTION PRÉLIMINAIRE : Pour commencer, nous devons choisir le type de robot que nous allons faire. Pour cela, nous allons établir et analyser les avantages et inconvénients de chacune de nos idées. Idée n°1 : robot basé sur le fonctionnement d'une imprimante 3D : Ce robot serait inspiré du système de guidage des imprimante 3D. Nous aurons 2 axes (X et Y), ainsi qu'un bloc à la jonction des 2 axes. Cela permettrait de guider notre stylo facilement. Avantages : pas beaucoup de contrainte sur le plan mécanique ou électronique Inconvénients : demande beaucoup de ressources pas très précis est encombrant Idée n°2 : robot écrivain sur une base mobile : On aurait une petite base mobile doté de quelques roues avec un stylo en dessous du robot. Avantages : facile à monter compact Inconvénients : mauvaise précision (odométrie) difficulté à bien se déplacer Idée n°3 : robot inspiré du modèle du FANUC : Ce robot serait un bras mécanique à 2 degrés dé liberté avec un stylo a son extrémité. Avantages : bonne précision plutôt compact Inconvénients : calcul à faire Idée n°4 : robot mélangeant les idées de la base mobile et de l'imprimante 3D : Ce robot est une amélioration de l'idée de l'imprimante 3D. Nous utilisons ici des "piliers" mobile limitant ainsi les matériaux à utiliser et facilitant la construction. Avantages : faciliter de production (2 fois le même module/tour) plutôt compact Inconvénients : pas du tout précis (il manque le guidage linéaire) Idée n°5 : robot à 2 bras opposés : Ce robot est inspiré du bras mécanique, le FANUC. Ici nous séparons les 2 servomoteurs présent dans l'unique bras en 2 bras mécanique. Cela permettra de faciliter les calculs de mécanique des bras mais également de faciliter la construction du robot. Avantages : Bonne précision Original Léger en ressource Inconvénients : Calcul à faire 2. CONCEPTION DÉTAILLÉ : Après avoir choisi le modèle de notre robot, nous devons maintenant le concevoir en profondeur en plusieurs autres étapes. Pour cela, nous avons cherché plusieurs inspirations sur internet. La vidéo qui a retenu notre attention est la vidéo youtube de   1. Conception des différentes pièces : Dans un premier temps notre objectif premier était de modéliser sur le logiciel Solidworks un premier modèle de notre robot qui se rapproche au plus du croquis initial. Nous avons donc réaliser ce premier modèle. Cependant nous faisons face a plusieurs problème. Premièrement le bâti dans ce modèle-ci ne peut être réaliser qu'avec une imprimante 3d, la pièce aurait donc pris plusieurs heures pour être réaliser et donc nous ne n'aurons pas pu effectuer des changements de dernières minutes sur les dimensions. De plus, la liaison entre la patte du moteur et le moteur n'est pas une liaison d'encastrement.    Conception finale Le bâti : Nous avons donc pris la décision de séparer les différentes parties du bâti afin de pourvoir réaliser la moitié de celui-ci avec la découpeuse laser. Il se compose de 3 parties : la première, qui sera réaliser avec l'imprimante 3d, (partie rouge) permettra de tenir la feuille d'écriture (partie bleu) et permettre la descente de la feuille grâce a une liaison pivot, la parti avec la feuille d'écriture sera aussi réaliser avec une imprimante 3d. Enfin nous avons la partie qui tiendra les moteurs, elles seront réaliser avec la découpeuse laser et elles seront attaché au la partie rouge grâce a un système vis/écrous. Les pattes : Nous avons décider de rajouter sur la patte du moteur une nouvelle pièce de même dimension avec uniquement un trou en son centre qui permettra de maintenir en position la pièce et le moteur. De plus pour avoir une liaisons pivot d'axe verticale entre les différents pattes nous utiliserons juste un seul roulement bille, un axe et une rondelle entre les deux pattes. Voici l'assemblage finale de notre robot (et en pièce jointe le fichier Solidworks correspondant) A présent nos seuls craintes reste les incertitudes sur les dimensions des différentes machines mais aussi la stabilité du robot (possibilité de basculer vers l'avant). Après plusieurs réflexions et conseils de nos professeurs nous avons pris la décision de modifier le bâti rouge. Les objectif sont de minimiser le nombre d’éléments en impression 3D et de solidifier le support du petit moteur. Nous obtenons donc la modélisation sur SolidWorks suivante : et le robot réel suivant :                             2. Schéma électrique : Pour concevoir le schéma électrique, nous devons savoir ce que notre robot doit faire, et le matériel a notre disposition. Matériels à dispositions : 3 Servomoteurs Boutons Arduino UNO Joystick Câbles (LEDs) Fonctionnalités du robots : Dessiner un cercle de rayon 2.5cm Dessiner une ligne de 5cm Dessiner ces figures en pointillés Dessiner avec un joystick Dessiner avec un joystick en pointillés D'après ces différentes informations, nous avons le schéma électrique suivant : Bouton Jaune : Trace un cercle Bouton Bleu : Trace une ligne Bouton Gris : Active le mode pointillé Bouton Rouge : Active le mode Joystick   3. Calculs mécanique : Pour les calculs mécaniques, nous reprenons les calculs vu en cours. Ils seront bien simplifié car ici nous voulons seulement un seul angle au lieu de 2. De plus, nous avons seulement à reprendre le calcul fait pour le premier servomoteur et déplacé le repère d'environ 14cm (distance qui sépare les 2 servomoteur) et ajouter 180° à l'angle obtenu. Nous sommes ensuite rendu compte que nous avions besoin d'un autre modèle mécanique car celui-ci était incomplet. Nous nous sommes donc inspirées du modèle géométrique inverse du groupe F.O.D. Néanmoins sur notre robot nous avons rajoute une petite bielle en plus afin d'accueillir le stylo, nous avons donc légèrement modifié les calculs afin d'obtenir le modèle géométrique finale !   4. Organigramme du code : Voici l'organigramme de notre programme, il n'est pas totalement conforme à ce que nous avons fait, c'était seulement pour avoir un ordre d'idée de la structure de notre programme.   5. Code détaillé : Le principe de notre code, est de placer des points sur notre repère qui seront visité par notre stylo. Pour cela, la première chose à faire avant de programmer les différentes fonctions de notre code, est de programmer notre calcul mécanique. Une fois, cette fonction achevé, nous pourrons faire appel à elle afin d'obtenir les coordonnées des points de passages. Nous avons donc cette fonction représentant notre calcul mécanique sur Arduino : Maintenant, nous devons décider du nombre de points de passage pour notre robot et demander a notre fonction de les faire décrire une figure particulière, soit un cercle, soit une ligne. Nous avons donc les 2 fonctions suivantes : Pour dessiner ces formes en pointillé, nous avons juste à combiner le mouvement de notre plateforme, possible grâce à notre petit servomoteur en définissant 2 niveau (Haut et Bas), et pour accéder à cette fonction, nous ajoutons une condition de plus. Nous obtenons ces fonctions : Enfin pour la fonction de déplacement avec le joystick, il suffit de récupérer les valeurs du joystick selon x et y, de les convertir afin d'obtenir une plage de valeur entre -0.1 et 0.1. Ensuite nous initialisons deux variables posx et posy a 0 et nous incrémentons ces deux variables par les valeurs que nous donne le joystick. Enfin à chaque tour de boucle nous demandons au stylo d'aller aux coordonnées posx et posy. Voici la fonction : Enfin, toutes les déclarations d'initialiser des différentes variables sont détaillé dans le code se trouvant dans "Attachments"   6. Tests : Durant nos tests, nous avons remarqué que nous avons fait plusieurs erreurs de conceptions. Tout d'abord, nous avons fait un trou de 3mm de diamètre sur notre pièce imprimé en 3D, mais a cause de l'incertitude d'impression, notre axe de 3mm ne convenait à notre pièce, nous avons donc utilisé la force pour le placé. Ensuite, nous avions un problème de stabilité dans notre robot. En effet, le robot ne tenait pas droit. Nous avons donc imaginé des support afin de stabiliser au mieux notre robot. Puis, nous avions un problème lié a notre servomoteur, que l'on peut contrôler qu'à l'aide de vitesse. Ce servomoteur permet de contrôler l'état de la plateforme de notre papier, ce qui était très contraignant car nous n'arrivions pas à bien le régler ce qui compromettait la qualité de nos dessins. Enfin, nous avions eu un problème de fonctions. Les dessins imaginé n'était absolument pas conforme à la réalité. Ce qui s'explique par le très petit nombre de point de passage que nous avions mis au départ. Il suffisait d'augmenter le nombre de point de passage afin d'améliorer la qualité de nos dessins. Finalement, nous avons réussi a nous adapter au mieux à toutes les contraintes et voici les vidéos de nos dessins : (TOUTES LES VIDEOS !!) Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 14/02/2024 Ce premier jour a été une journée de "brainstorming", nous avons rassemblé toutes nos idées et nous les avons confrontés afin de choisir le robot le plus adapté aux contrainte donnée. La décision finale est de construire sur le robot à 2 bras opposé. Il répond aux mieux a ce qui est demandé. 21/02/2024 Ce deuxième jour était tourné vers la réflexion de notre conception détaillé. Nous nous sommes également familiarisé avec certaines machines du FABLAB. Nous avons fait quelques tests sur découpeuse laser afin de voir si le robot était possible sur le plan mécanique. Enfin, les différentes tâches ont été répartis, Nacim a commencé la modélisation sur Solid Works et Mehdy a commencé le schéma électrique. 05/03/2024 Ce troisième jour a permis de vérifier nos travaux préparés en amont. Nous avons vérifié avec Mr Carillet le modèle 3D de notre robot. Nous avons également testé un début de code avec notre schéma électrique. Finalement, nous avons juste continué d'améliorer et peaufiner nos travaux. 18/04/2022 Maecenas interdum turpis sit amet rutrum elementum. Aenean eget accumsan ligula. Phasellus et scelerisque lectus. Cras vel venenatis nulla. Integer tristique non diam et molestie. Pellentesque condimentum enim arcu, in commodo nunc commodo vel. Integer vitae neque facilisis, mattis elit sit amet, gravida turpis. Maecenas lectus mauris, fringilla ut lectus eu, condimentum finibus tortor 🤩🤩🤩D DProjet Rob3 : Fatah,Oualid,Dounia (FOD : Fonctional Omnidirectional Drawing Robot ) I ) Préaumbule : 1) Membres de l'équipe : Identité Contacte Formation Mohamed El Oualid BOUDEMAGH mohamed_el_oualid.boudemagh@etu.sorbonne-universite.fr Polytech-Sorbonne ( ROB3 ) Fatah MSAID fatah.msaid@etu.sorbonne-universite.fr Polytech-Sorbonne ( ROB3 ) Dounia BAKALEM dounia.bakalem@etu.sorbonne-universite.fr Polytech-Sorbonne ( ROB3 ) Période du projet : 14/02/2024 au 23/05/2024 2) Indroduction, cadre et objectifs de la réalisation : Etant actuellement des étudiants en vue de devenir des ingénieurs roboticiens, nous sommes amenés à concevoir un robot en passant par toutes les étapes de modélisation et réalisation. Dans le cadre de ce projet, il s'agit d'un robot qui dessine sur une face 2D de dimension 25*25 mm. De ce fait, vous trouverez dans la suite de ce rapport notre cheminement pour mener à bien ce projet, cela comportera la conception de la partie mécanique, le système de commande, la motorisation, l'interface de pilotage et les différents codes informatiques pilotants. Ainsi, nous mettrons en pratique les connaissance acquises en programmation (langage C), en modélisation (SolidWorks), en calculs cinématiques (Modèles géométriques direct/indirecte). Par ailleurs, nous aspirons à consolider notre inventaire de Roboticien en apprenant le codage en Arduino, les impressions 3D et le découpage laser.assemblage_FOD_final.zip Enfin, nous nous engageons à prendre soin du matériel mis à notre disposition au sein du FablabSU, nous tenons également à remercier nos enseignants et le personnel qui nous encadront tout au long de notre projet. 3 ) Diagramme de Gantt (au 21/02/2024) et distribustion des rôles : II ) Cahier des charges : ( https://wiki.fablab.sorbonne-universite.fr/BookStack/books/projets-due-2023-2024/page/le-sujet-du-projet ) Le but général est de faire un robot capable de dessiner avec un crayon sur un support plan horizontal. 2.1 Fonctions à réaliser Le robot doit être fixé ou posé sur une plaque horizontale carrée de 250mm par 250mm. Il doit être capable de réaliser deux exercices : 1) Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support différentes figures imposées de difficulté croissante : a. Une ligne de 5cm de long, b. Une ligne pointillée de 5cm de long, c. Un cercle de 2.5cm de rayon, d. Un cercle pointillé de 2.5cm de rayon. Le tracé de chacune des figures doit être réalisé en 10 secondes +/- 0.2 secondes. 2) Tracer, avec l’aide d’un crayon fixé sur l’organe terminal du robot, dans le plan de la plaque support, un dessin imposé dans un carré de 5cm par 5cm. Le déplacement de l’organe terminal du robot devra être piloté par un joystick. Il est possible que la figure soit discontinue, et donc il faut prévoir de pouvoir relever le crayon du support horizontal sur lequel on écrit. Une fonction supplémentaire, optionnelle , peut être réalisée : Être capable de modifier la vitesse de déplacement du robot via l’interface. 2.2 Fonctions contraintes Les contraintes imposées sont : Respect des règles d’utilisation du FABLAB de Sorbonne Université au sein duquel vous travaillerez, en particulier la charte des FabLab du MIT. Cela implique que vous travaillerez sur le WIKI du FABLAB pour documenter votre projet. Il y a une bonne documentation ici pour savoir comment utiliser le WIKI. Utilisation de composants (moteurs, contrôleurs, boutons, éléments de guidage, alimentation stabilisée, boutons, etc.) parmi un ensemble imposé. Une liste de composants utilisables est disponible au paragraphe 4. Fabrication des pièces grâce à : Machine à découpe LASER. Imprimantes RAISE 3D PRO2. Ces machines du FABLAB de sont pas toutes accessibles tout le temps ni en même temps. C’est une contrainte qu’il vous faut intégrer dans la gestion de votre projet (par exemple, privilégier la découpe LASER qui est très rapide, lorsque c’est possible). Un objectif est de minimiser la quantité de matière utilisée pour réaliser le projet. Programmation en C utilisant la chaîne de développement Arduino IDE CE NE SONT PAS LES FONCTIONS CONTRAINTE DE L'OBJET, MAIS VOS CONTRAINTES DE REALISATION DU PROJET 4. Liste des composants et matériels disponibles Un crayon Interface de commande : Une carte arduino UNO avec câble USB-B; Un joystick: Une platine de protoypage; Alimentation régulée 5V ; Câbles, LEDs, boutons poussoirs, résistances. Motorisation : Deux servomoteurs HS422 180°; Un servomoteur Emax ES08A 180°. Mécanique : Matière PLA pour impression 3D; Feuilles medium : 3mm et 6mm d'épaisseur; Vis et écrous : M2, M2.5, M3, M4. Roulements et axes de diamètre 4mm. III ) Solutions Proposées : 1 ) Solution 1 : La voiture qui dessine L'une des idées explorées était de concevoir un robot sous forme de voiture capable d'écrire avec un stylo. Cependant, après avoir examiné les servomoteurs disponibles et les contraintes du projet, nous avons constaté que ces servomoteurs ne conviendraient pas pour tourner les roues de manière efficace en raison de leur limitation de rotation maximale à 180 degrés. De plus, les restrictions imposées, comme l'interdiction d'utiliser des outils externes tels qu'un hacheur pour la motorisation, et l'incapacité d'incorporer un système Bluetooth pour contrôler la voiture avec un joystick, ont été des obstacles significatifs. En raison de ces contraintes techniques et de conception, nous avons été contraints d'abandonner l'idée de la voiture robotique. Nous nous sommes plutôt concentrés sur des alternatives qui seraient réalisables dans le cadre des ressources et des contraintes du projet, tout en restant conformes au cahier des charges initial. 2 ) Solution 2 : Robot à deux rails :        Schéma non-contractuel du robot à deux rails                                       Source de la photo : (19) Technical Tushar - YouTube Fonctionnement : Le servomoteur 1 est collé sur le pignon 1 qui est lui même fixé sur la plateforme fixe. Ce premir système entraine la translation de la crémallière 1 selon x. Au bout de cette dernière, la plateforme mobile est fixé, cette plateforme se deplace donc selon x suivant la crémallière 1. Par ailleurs, le même mécanisme (servomoteur 2, pignon 2, crémallière 2) fixé sur la plateforme mobile entraine la traslation du stylo selon y. Enfin, le servomoteur 3 actionne la manivel permettant au stylo d'être ou non au contacte avec la feuille. Noter que les servomoteurs ne pouvant effectuer une rotation de 90° dans un sens et 90° dans l'autre, les pignons sont dimensionnés en conséquence (ici r = 2.5cm) permettant au stylo d'agir sur une surface de 7cm * 7cm. Avantages :                                                                                                                                                                               - Simplicité de conception, de réalisation et de calcul.                                                                                                     - Rigidité et solidité du système.                                                                                                                                           - Précision permettant au stylo de dessiner toute forme.                                                                                                 - Absence de singularité dans le cadre des 7 * 7 cm.                                                                                                         - Consommation assez raisonnable de ressources Limites :                                                                                                                                                                                  Une lubrification peut être envisageable.                                                                                                                      Frottements.                                                                                                                                                                    La plateforme tenant le stylo peut se pencher vers le sol à cause de son poids. 3 ) Solution 3: Robot à 3 rails : Nous avons pris cette photo afin d'illustrer nos explications dans "Fonctionnement". Cela dit, elle ne relète pas notre solution, puisque ici on voit des translations réaisées à l'aide de courroie alors que notre idée repose sur un mécanisme Servomoteur, pignon et crémallière comme décrit ci-contre. Source de la photo : Laser Engraver TT-5.5S Laser Wood Engraver - Two Trees (twotrees3d.com) Fonctionnement :Le fonctionnement demeure fondamentalement inchangé par rapport à la solution précédente. Simplement, ici le mécanisme servomoteur-pignon-crémalliere (sur le rail 1) entraine la translation du stylo selon y, et en face (sur le rail 2) on retrouve un roulement qui réalise le guidage permettant  au rail 3 de toujours être perpendiculaire aux rails 1 et 2. De plus, un autre mecanisme servomoteur-pignon-crémalliere permet au style de se deplacer selon x ( sur le rail 3). Enfin, le dernier servomoteur actionne la manivel permettant au stylo d'être ou non au contacte avec la feuille. Avantages :                                                                                                                                                                             - Absence de singularité dans le cadre des 7 * 7 cm.                                                                                                         - Calculs théoriques assez simples. Limites :                                                                                                                                                                                Le guidage n'est pas optimal ce qui peut engendrer la diagonalisation du rail 3.  Trop de ressources utilisées.                                                                                                                                        Conception, réalisation et montage assez fastidieux .                                                                                                Nécéssité absolue de lubrification (notamment le roulement). 4 ) Solution 4 : (Solution retenue ) : Robot a articulations : Pour la 3ème idée nous avons opté pour un robot qui utilise le principe du FANUC pour fonctionner , Le principe : le but de cette solution est d'atteindre le maximum de points dans un carrée , pour cela on va relier 2 bras sous forme de "L" avec 3 servos-moteurs , un pour le bras droit, un pour le bras gauche , un pour remonter les bras selon z , donc on aura au totale 3 mouvements selon  les 3 axes , chaque bout de bras sera relier a l'aide d'une articulation pivot et donc pour chaque mouvement du bras relier au moteur , l'autre bras suivra . Pour réaliser cela , nous reliant un repaire pour chaque bout de bras et à l'aide des matrices de DH on pourra donner directement les coordonnées articulaires pour la taches voulue et le microcontroleur calculera les angles nécessaire a faire pour le réaliser , cette solution est plus précise par rapport au 2 autres car on pourra atteindre n'importe quel point à l'aide de calcules Problèmes : Malgré l'efficacité de cette solution , elle pose un problème extrêmement contraignant qui est : les points de singularités, effectivement , contrairement, aux 2 autres solutions , les singularités sont atteintes très facilement ce qui donc nous limitera  dans le nombre de mouvement possibles , ces points de singularités sont atteint pour : les angles des 2 bras est de 180° et quand l'un des deux bras est totalement tendu , quand l'angles des bras atteins au meme temps 90°  AH BON ? VOUS l'AVEZ CALCULE ?                                                                       Croquis à main levée de la solution                                                                                      Exemple de la solution                                                            source de la photo : https://youtu.be/s5AP7tbfueg Pourquoi avons-nous gardé cette idée ? Cette idée est restée pour nous la plus réaliste et la plus efficace , effectivement , la réalisation de ce type de robot n'est pas très compliquée vue que pour le guidage on aura besoin que 2articulations pivot , et donc facile a réaliser , de plus , cette solution nous permet d'avoir plus de liberté car on pour pratiquement atteindre n'importe quelle point dans un carré si on envoie les bonne coordonnées articulaires , bien-sur tout en évitant les cas de singularités , donc au final, le vrai gros problème de cette solution serait la singularité qui est un problème qui théoriquement ne devrait pas être très dur a résoudre  si on le compare avec les solutions abandonnées . IV ). conception détaillée : 1)Schéma électrique et modèle géométrique : 1 .1).modèle géométrique (1er modèle)  : Les coordonnées articulaires sont nécéssaire pour qu'on puissent attendre les positions voulue par notre robot , et pour les trouver on a du calculer le modèle géométrique inverse de notre robot et nous avons ainsi trouver les équations qui relie les coordonnées articulaires aux paramètres de notre robot et aux paramètres de la position voulue . Cela a pu étre effectuer selon les étapes suivantes : Relier chaque corps du robot a un repaire Trouver les équations de contraintes qui relient les repaires Trouver les coordonnées voulue en fonction des angles articulaires Regrouper tout en équations Enfin après avoir dérivés les équations et  les avoir résolue nous obtenons les relations suivantes pour chaque coordonnées articulaire : Source : Cours de Mr.Morel de mécanique général Remarque : ici l3=0 Ensuite nous avons implémenter le résultat sur MATLAB pour effectuer le calcule des coordonnées articulaires Code de la fonction utilisée pour le calcule du modèle géométrique inverse 1.2).Modèle géométrique final : Après avoir réalisé le premier modèle géométrique, nous avons constaté rapidement qu'il comportait quelques erreurs, notamment parce qu'il était établi à partir d'un seul bras, ne prenant pas en considération le fait que les deux bras fonctionnent ensemble. À l'aide de Monsieur Carillet, nous avons élaboré un nouveau modèle, plus complet. Ce nouveau modèle prend en compte les mouvements des deux bras en parallèle. Le schéma ci-dessous illustre ce modèle géométrique amélioré, qui calcule les angles nécessaires pour les deux bras en fonction des coordonnées (x, y) et des longueurs des bras (l1, l2, l3, l4 et l5). Schéma du modèle utilisée Détails du calcule : 2 ) . Schéma électrique : Schéma électrique du FOD Composant Pin Bouton gris 2 Bouton bleu 3 Bouton noir 4 Bouton vert 7 Joystick X: A0 , Y : A1 , SW : 10 Servo droit 5 Servo gauche 6 Servo haut 9 SDA A4 SCL A5 3 ). Code : Dans cette étape, nous avons exploré deux méthodes distinctes. Pour la première méthode, nous avons utilisé MATLAB pour calculer les angles à donner aux servomoteurs, puis nous les avons intégrés directement dans notre code Arduino. Descriptif du code : Nous avons utilisé l'état de nos quatre boutons-poussoirs comme entrée pour pouvoir utiliser leurs états comme conditions pour nos différents modes de fonctionnement. En attribuant des actions spécifiques à chaque combinaison d'états des boutons, nous avons pu créer un système polyvalent capable de basculer entre différents modes de fonctionnement en fonction des préférences de l'utilisateur. Par exemple, un appui sur un seul bouton pourrait activer ou désactiver un mode spécifique. Cette approche nous a permis d'ajouter une dimension interactive à notre projet, offrant ainsi une expérience utilisateur plus riche et plus adaptée à divers scénarios d'utilisation. Bouton mode Bleu Tracer une ligne continue Vert Tracer une ligne en discontinue Rouge Tracer un cercle en continue Gris Tracer un cercle discontinue Rien contrôle avec joystick Tableau récapitulatif des modes disponible Pour les différents modes, nous avons calculé à chaque fois les angles nécessaires à donner à nos servomoteurs pour que les bras puissent atteindre un certain point. Pour ce faire, nous avons itérer notre calcul dans la fonction MATLAB et directement implémenté les angles dans notre code. En utilisant cette approche, nous avons pu déterminer les positions optimales des bras en fonction des différents modes de fonctionnement, en prenant en compte des variables telles que les coordonnées de destination et les longueurs des bras. Ces angles calculés ont ensuite été incorporés dans notre code Arduino, ce qui a permis au système de positionner les bras de manière précise et efficace en fonction du mode sélectionné par l'utilisateur. Cette méthode nous a offert une grande flexibilité pour adapter le comportement du système en fonction des besoins spécifiques de chaque mode. Code pour le tracé de la ligne continue Cependant, lorsque nous avons introduit le joystick dans notre système, nous avons réalisé que cette méthode limitait notre flexibilité et rendait impossible l'utilisation du joystick. C'est pourquoi nous avons opté pour la deuxième méthode, où nous effectuons les calculs directement dans le code Arduino. Cette approche nous permet d'obtenir les angles directement à partir du programme, ce qui simplifie l'intégration du joystick et offre une plus grande flexibilité dans le contrôle du système. Pour réaliser cela, nous avons implémenté dans notre code une fonction qui effectue le même calcul que celui que nous avions réalisé avec MATLAB. Cette fonction prend en compte les coordonnées de destination et les longueurs des bras, puis calcule les angles nécessaires pour positionner les bras de manière appropriée. Code de la fonction de calcule du modèle géométrique En incorporant cette fonction dans notre code Arduino, nous avons pu obtenir les angles requis directement à partir du microcontrôleur, sans avoir besoin de faire des calculs préalables dans MATLAB. Cela simplifie le processus et permet une exécution plus efficace des opérations, ce qui est particulièrement important dans un environnement en temps réel comme celui des systèmes embarqués. De plus, cela nous permet d'avoir un contrôle total sur le fonctionnement du système directement à partir du code Arduino, offrant ainsi une solution plus intégrée et autonome. Remarque : Pour la partie Joystick , elle est en cours de développement et doit être testée        Organigramme du programme A partir de cette organigramme nous avons commencer la creation du code . Le code comporte 5 partie : 1) d-Dessin de la ligne continue de 5 cm : 2) Dessin de la ligne discontinue  de 5cm : 3) Dessin du cercle de rayon 2.5 cm: 4) Dessin du cercle discontinue de rayon 2.5 cm : 5) Mode manuel (joystick) : Pour le mode manuel, le travail a été réalisé en collaboration avec les membres du projet robot "Majin". Ensemble, nous avons réfléchi à la manière de concevoir et de coder ce mode manuel. Et donc, nous avons pu commander notre robot en position et en vitesse. L'afficheur LCD : Après avoir finalisé le code, nous avons constaté qu'il manquait encore un élément essentiel à notre robot : une interface permettant de connaître en temps réel le mode de fonctionnement. Initialement, nous avions pensé utiliser des LED, mais cela encombrait notre montage et n'était pas intuitif pour une personne extérieure sans explications. C'est alors que nous avons eu l'idée d'ajouter un afficheur LCD. Comment ça marche ? Nous avons utilisé un afficheur LCD LiquidCrystal I2C. C'est un module pratique et facile à utiliser pour afficher des informations sur deux lignes de 16 caractères chacune. Il se connecte à une Arduino via le bus I2C et ne nécessite que 4 broches : Vcc, GND, SDA et SCL. SDA : se connecte à la broche A4 de l'Arduino pour recevoir les données. SCL : se connecte à la broche A5 de l'Arduino pour recevoir l'horloge. Vcc : se connecte à une source de 5V. GND : se connecte à la masse. Version final du code : #include #include LiquidCrystal_I2C lcd(0x27, 16,2); #define X_pin A0 #define Y_pin A1 #define sw 10 #define Bb 2 //Bouton Bleu #define Bv 3 //Bouton Vert #define Br 4 //Bouton Rouge #define Bg 7 //Bouton Gris //Etat des boutons int bouttonb_stat = 0; int bouttonv_stat = 0; int bouttonr_stat = 0; int bouttong_stat = 0; float Rx;//Cordonnée Actuel selon x float Ry;//Cordonnée Actuel selon y float Rxx;//Cordonnée a atteindre selon x float Ryy;//Cordonnée a atteindre selon y int angle_effecteur=0; //Definition des servos Servo droit; Servo gauche; Servo haut; //Valeur de sauvgarde d'états int haut_s=50; int bas_s=43; int etat=bas_s; float cpt=0; //Parametres du modele geometrique inverse float l1=7; float l4=8; float l2=7; float l3=8; float l5=3.5; float a=5; int cpts=0; int x_val; int y_val; int sw_val; //Modele geometrique inverse float theta1(float xp,float yp){ float O1P=sqrt((-a+xp)*(-a+xp)+(yp)*(yp)); float b=(((l1*l1)-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0) )+(O1P*O1P))/(2*l1*O1P)); float alpha=acos(b)*180/M_PI; float beta=atan(((yp)/(a-xp)))*180/M_PI; float theta=180-(beta+alpha); return theta; } float theta2(float xp,float yp){ float O1P=sqrt((-a+xp)*(-a+xp)+(yp)*(yp)); float omega=(acos(((O1P*O1P)-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0))-(l1*l1))/(-2*(sqrt(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0)))*l1))*180.0/M_PI)+acos((-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0))+(l5*l5)-(l4*l4))/(-2*l4*(sqrt(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0)))))*180.0/M_PI; float omega_bis=omega-theta1(xp,yp)-angle_effecteur; float O2C=sqrt((a+(xp+l5*(cos(omega_bis*M_PI/180.0))))*(a+(xp+l5*cos(-omega_bis*M_PI/180.0)))+(yp+l5*sin(-omega_bis*M_PI/180.0))*(yp+l5*sin(-omega_bis*M_PI/180.0))); float alpha2=acos((((l2*l2)-(l3*l3)+(O2C*O2C))/(2*l2*O2C)))*180/M_PI; float beta2=atan(((yp+l5*sin(-omega_bis*M_PI/180.0))/(a+xp+l5*cos(-omega_bis*M_PI/180.0))))*180.0/M_PI; float theta2=beta2+alpha2; return theta2; } //DEbut du programme void setup() { Serial.begin(9600); droit.attach(5); gauche.attach(6); haut.attach(9); pinMode(X_pin,INPUT); pinMode(Y_pin,INPUT); pinMode(sw,INPUT_PULLUP); pinMode (Bb,INPUT_PULLUP); pinMode (Bv,INPUT_PULLUP); pinMode (Br,INPUT_PULLUP); pinMode (Bg,INPUT_PULLUP); droit.write(90); gauche.write(120); haut.write(60); lcd.init();//initialisation de l'afficheur Lcd lcd.backlight();//Allumer le retro eclairage } void loop() { //initialisation des bouttons bouttong_stat = digitalRead(Bg); bouttonb_stat = digitalRead(Bb); bouttonr_stat = digitalRead(Br); bouttonv_stat = digitalRead(Bv); //Ligne continue if(bouttonb_stat==LOW){ haut.write(60); lcd.setCursor(1,0);//Position d'écriture dans l'afficheur lcd.print("Mode : Ligne ");//Ecriture dans l'afficheur haut.write(45); //Dessin d'une ligne de 5cm for(float i=-2.5;i<=2.5;i=i+0.0015){ droit.write(180-theta1(i,12)); gauche.write(180-theta2(i,12)); } delay(50); haut.write(60); droit.write(180-theta1(-2.5,12)); gauche.write(180-theta2(-2.5,12)); delay(1000); lcd.clear();//Effacer } //Ligne discontinue if(bouttonv_stat==LOW){ lcd.setCursor(1,0);//Position d'écriture dans l'afficheur lcd.print("Mode : Ligne ");//Ecriture dans l'afficheur lcd.setCursor(1,1);//Position d'écriture dans l'afficheur lcd.print("Discontinue ");//Ecriture dans l'afficheur //Dessin d'une ligne de 5cm for(float i=-2.5;i<=2.5;i=i+0.1){ droit.write(180-theta1(i,12)); gauche.write(180-theta2(i,12)); cpt=cpt+0.1; //Sauvegarde de l'état if(cpt>=0.1 && etat==bas_s ){ etat=haut_s; haut.write(haut_s); delay(700); } else if(cpt>=0.1 && etat==haut_s) { etat=bas_s; haut.write(bas_s); delay(700); } } haut.write(60); delay(50); droit.write(180-theta1(-2.5,12)); gauche.write(180-theta2(-2.5,12)); delay(1000); lcd.clear();//Effacer } //Cercle if(bouttonr_stat==LOW){ lcd.setCursor(1,0);//Position d'écriture dans l'afficheur lcd.print("Mode : Cercle ");//Ecriture dans l'afficheur haut.write(40); //Dessin du demi cercle superieur for(float x=-2;x<=2;x=x+0.009){ gauche.write(180-theta2(x,12+sqrt((2*2)-(x*x)))); droit.write(180-theta1(x,12+sqrt((2*2)-(x*x)))); delay(10); } //Dessin du demi cercle inferieur for(float x=2;x>=-2;x=x-0.009){ gauche.write(180-theta2(x,12-sqrt((2*2)-(x*x)))); droit.write(180-theta1(x,12-sqrt((2*2)-(x*x)))); delay(10); } delay(2000); lcd.clear();//Effacer } //Cercle discontinue if(bouttong_stat==LOW){ lcd.setCursor(1,0);//Position d'écriture dans l'afficheur lcd.print("Mode : Cercle ");//Ecriture dans l'afficheur lcd.setCursor(1,1);//Position d'écriture dans l'afficheur lcd.print("Discontinue ");//Ecriture dans l'afficheur cpt=0; etat=haut_s; //Dessin du demi cercle superieur for(float x=-2.5;x<=2.5;x=x+0.2){ gauche.write(180-theta2(x,12+sqrt((2.5*2.5)-(x*x)))); droit.write(180-theta1(x,12+sqrt((2.5*2.5)-(x*x)))); delay(10); cpt=cpt+0.1; //Sauvgarde de l'etat actuel if(cpt>=0.1 && etat==bas_s ){ etat=haut_s; cpt=0; haut.write(haut_s); delay(700); } else if(cpt>=0.1 && etat==haut_s) { etat=bas_s; cpt=0; haut.write(bas_s); delay(700); } } //Dessin du demi cercle inferieur for(float x=2.5;x>=-2.5;x=x-0.2){ gauche.write(180-theta2(x,12-sqrt((2.5*2.5)-(x*x)))); droit.write(180-theta1(x,12-sqrt((2.5*2.5)-(x*x)))); delay(10); cpt=cpt+0.1; //Sauvgarde de l'etat actuele if(cpt>=0.1 && etat==bas_s ){ etat=haut_s; cpt=0; haut.write(haut_s); delay(700); } else if(cpt>=0.1 && etat==haut_s) { etat=bas_s; haut.write(bas_s); delay(700); } } delay(2000); lcd.clear();//Effacer } //Mode manuel if (bouttonr_stat == HIGH && bouttonb_stat == HIGH && bouttonv_stat == HIGH && bouttong_stat == HIGH) { lcd.setCursor(1,0);//Position d'écriture dans l'afficheur lcd.print("Mode : Manuel ");//Ecriture dans l'afficheur // Lecture des valeurs du joystick sw_val=digitalRead(sw); Serial.println(sw_val); x_val = analogRead(X_pin); y_val = analogRead(Y_pin); //conversion Rx=map(x_val,0,1023,3,-3); Ry=map(y_val,0,1023,13.8,7); //Commande en vitesse if (Rxx < Rx) { Rxx += 0.01; if (Rxx > Rx) { Rxx = Rx; } } else if (Rxx > Rx) { Rxx -= 0.01; if (Rxx < Rx) { Rxx = Rx; } } if (Ryy < Ry) { Ryy += 0.01; if (Ryy > Ry) { Ryy = Ry; } } else if (Ryy > Ry) { Ryy -= 0.01; if (Ryy < Ry) { Ryy = Ry; } } droit.write(180-theta1(Rxx,Ryy)); gauche.write(180-theta2(Rxx,Ryy)); //Lever le stylo if(!digitalRead(sw) && etat==haut_s){ haut.write(45); etat=bas_s; delay(300); } else if (!digitalRead(sw) && etat==bas_s){ haut.write(60); etat=haut_s; delay(300); } delay(10); } } 3) Conception CAO : Dans une optique de sobriété et de démarche éco-responsable, nous avons imaginer la CAO se sorte à avoir l'intégralité des pièces en découpe laser donc en bois. Cela nous a évité les imprimantes 3D et de ce fait l'utilisation du plastique qui est nocif pour l'environnement . Nous avons procédé à la modélisation de notre robot à l'aide du logiciel SolidWorks. Cette conception peut être segmentée en deux principaux sous-ensembles : Le bâti : Cet ensemble abrite les deux servo-moteurs qui dirigent les deux bras, chacun composé de deux bielles.La table : Destinée à recevoir la feuille sur laquelle écrire, cette composante intègre un servo-moteur situé en dessous. Ce dernier est connecté à la table et permet de régler la hauteur du stylo pour l'écriture en basculant l'ensemble du bâti. Les détails de ce mécanisme sont explicités ci-dessous image du robot final Le bâti: du robot a été conçu en privilégiant la découpe laser comme méthode de fabrication principale. Il se compose de trois pièces qui s'emboîtent de manière adéquate, toutes adaptées à la découpe laser. La pièce centrale présente deux ouvertures destinées à recevoir les deux servomoteurs. Les bielles sont fixées aux servomoteurs au moyen d'une vis au centre, avec un trou additionnel permettant le vissage à l'hélice du moteur pour assurer le guidage. le Support Les liaisons entres les bielles : Comme évoqué précédemment dans notre documentation, le robot est constitué de quatre bielles. Pour les articulations entre ces bielles, nous avons opté pour l'utilisation de roulements associés à des vis pour assurer la fixation. Comme illustré dans l'image ci-dessous, l'une des bielles présente un trou de diamètre correspondant à celui du roulement externe, tandis que l'autre bielle possède un diamètre légèrement inférieur (correspondant au diamètre interne du roulement). Ces éléments sont ensuite solidement fixés à l'aide d'une vis et d'un écrou, soigneusement serrés. Nous avons également intercalé une plaque métallique entre le roulement et la vis afin de garantir la fluidité du mouvement.                                             Images qui illustrent les liaisons entres les bielles Emplacement et Réglage du Stylo dans le Mécanisme du Robot : Comme visible, l'une des bielles est préalablement équipée d'une extension et d'un orifice destiné à recevoir le stylo. Étant donné que cette pièce sera fabriquée en bois, nous aurons la possibilité d'ajouter ultérieurement un trou sur le côté pour insérer une vis permettant de régler la hauteur du stylo. bielle du stylo Le mécanisme pour lever le stylo consiste à fixer la bielle au moyen d'une vis sur l'hélice du servomoteur. Cette bielle est ensuite fixée sur une pièce émergeant du bâti. Les bâtis et la table sont ainsi reliés par deux liaisons pivot sur les côtés, comme illustré dans l'image. Pour réduire les frottements et faciliter le mouvement, nous prévoyons d'utiliser un morceau de cylindre inséré dans le trou de la table, lequel sera fixé à l'aide d'une vis et d'un écrou traversant le trou du bâti.       Mécanisme de Levage du Stylo : Illustration et Fonctionnement Fichiers SolidWorks :   assemblage_FOD_final.zip V ) Vidéos et photos démonstratives :                                                                                                     Physique Expérimentale Projet Robot Photon Projet Démarche Scientifique (Boite noire) - groupe D Tamiseur de sable Polytech MTX5 UE dédiée impression 3D pour la spécialité matériaux Modèle d'éprouvette ASTM_D638_Type_IV.stl📟 MU5MN045 - Projets prototypage Projets prototypage en groupe pour l'UE MU5MN045 - MMI Consignes Consignes du projet Faire une preuve de concept ou une maquette d’un projet que vous définirez vous-mêmes (choix du projet et thème: libres). Vous documenterez l'ensemble du processus Inclure au moins deux technologies vues en atelier : conception et impression 3D / conception 2D et découpe laser / électronique numérique Deux approches possibles : concevoir un objet qui ressemble à l’objet final (éventuellement à l'échelle) ou bien un système électronique qui simule le comportement de l’objet final (mais ça peut être les deux à la fois) Attendus de la documentation Les éléments suivants doivent apparaître dans la documentation de votre projet : définition du projet (besoin, utilisateurs, fonctionnalité principale, fonctionnalités secondaires) réflexions sur la problématique et veille sur l'existant lean canvas choix techniques gestion de projet: "minimum viable product", planification et répartition des taches croquis, dimensions liste du matériel fichiers de conception et étapes de création des fichiers (captures d'écran) / code photos et analyse des tests, essais, erreurs photos des étapes de réalisation du prototype, paramètres des machines photos de l'objet final réflexions de pistes d'amélioration ou d'évolution du projet sources des tutoriels, inspirations, ressources utilisées (à insérer au fil de la documentation) Les projets de l'année précédente : https://wiki.fablab.sorbonne-universite.fr/BookStack/books/projets-due-2022-2023/chapter/mu5mn045-projets-prototypageAnaelle - Manele - Chanel Humidificator Nous avons créé un humidificateur qui s'active avec un bouton. Matériel utilisé : 1 capteur : Grove - Water Automization 1 ampoule (avec sa résistance) 1 Arduino 1 Shield 1 bouton (avec sa résistance) 4 fils conducteurs Difficultés rencontrées : Difficulté à identifier l'état du capteur lorsque l'on appuyait sur le bouton Solution = nous avons installé une LED qui s'allume lorsque le capteur est activé Non compréhension du code au niveau de l'activation du LED : Pour activer la LED lorsque le capteur s'active, on a d'abord noté digitalWrite(led,HIGH), mais finalement il ne fonctionne que s'il est marqué digitalWrite(led,LOW) Problème toujours pas compris Code : Description du montage : Nous branchons le Shield sur l'Arduino Nous avons branché le capteur sur I2C Nous connectons le bouton et sa résistance au port 5V, au GND et au port 8 Nous connectons la LED et sa résistance au port 5V, au GND et au port 7 Nous déposons le capteur sur une surface d'eau Nous appuyons sur le bouton pour activer le système, le LED s'allume si le système est bien en marche Photos/video du montage Vidéo en pièce jointe ! Billore Flora/ Ruffie Marine/ Meunier Jade  Détecteur de Son avec LED Objectif :L'objectif de ce projet était de concevoir un système de détection de son à l'aide d'un capteur de son connecté à une carte Arduino, et d'utiliser des LED pour indiquer visuellement la présence ou l'absence de son. Plus précisément, nous voulions que la LED jaune reste allumée tant qu'un son était détecté, tandis que la LED rouge s'allumait lorsque aucun son n'était détecté. Matériel utilisé :Pour ce projet, nous avons utilisé les composants suivants :- Une carte Arduino Uno- Un capteur de son (microphone)- Deux LED (une jaune et une verte)- Des résistances pour limiter le courant traversant les LED- Des fils de connexion pour connecter les composants entre eux Déroulement :Nous avons commencé par connecter le capteur de son à l'Arduino et à écrire un code de base pour détecter les variations du niveau sonore. Ensuite, nous avons ajouté les LED et écrit le code pour les contrôler en fonction de la détection du son. Une des principales difficultés rencontrées a été de calibrer le seuil de détection du son afin d'éviter les fausses détections. Nous avons dû ajuster ce seuil plusieurs fois pour obtenir un comportement fiable du système. Une autre difficulté était de gérer le fonctionnement des LED en fonction de l'état du capteur de son. Nous avons dû prendre en compte les différents scénarios possibles, notamment lorsque le son était présent en continu et lorsque le son était intermittent. Projet 1 : Hugo / Hasir / Youssra / Ramage Compte Rendu du Projet 1 : Système de détection de force avec LED et émetteur de son Sujet : Le projet consistait à développer un circuit électronique utilisant un capteur de force Grove - Round Force Sensor (FSR402) pour allumer différentes LED (rouge, jaune, orange) en fonction de la pression appliquée à la seule de notre pouce. Jaune pour une faible pression (< 400), orange pour une pression moyenne (entre 400 et 700), rouge pour une forte pression (> 700). En outre, le circuit devait activer un émetteur de son IDUINO lorsque la pression était suffisamment forte pour allumer la LED rouge. Objectifs : Les principaux objectifs de ce projet étaient : Explorer l'interaction entre les capteurs de force et les systèmes d'affichage à LED. Intégrer un émetteur de son qui réagit à une pression élevée. Matériel : Arduino Uno Grove - Round Force Sensor (FSR402) LED rouge, jaune, orange Shield pour Arduino Breadboard Émetteur de son IDUINO (module à buzzer) Câbles de connexion Résistances 220 Ω Circuits : Deux circuits ont été testés : Le premier avec le capteur de distance Grove 80 cm Infrared Proximity Sensor. Le but était aussi de faire allumer les LED en fonction de la distance (cf difficultés) Le deuxième, et final, avec le capteur de force Grove - Round Force Sensor (FSR402), connecté à trois LED (rouge, jaune, orange) et un émetteur de son. Code : Le code final était conçu pour lire la valeur de pression du capteur de force et allumer la LED correspondante : Difficultés : Les principales difficultés rencontrées étaient : Le premier circuit a été abandonné car nous n'avons pas trouvé le moyen de conversion du voltage en distance. Nous avons du ajuster les seuils de pression pour une réponse précise à la force d'un pouce. Assurer une communication efficace entre le capteur de force et l'Arduino (déconnexion récurrente) Résultats : Le circuit final a fonctionné comme prévu. Les LED s'allumaient en fonction de la pression appliquée, et l'émetteur de son se déclenchait avec la LED rouge. Ce projet a démontré l'efficacité d'une interaction entre capteurs, Arduino et éléments de sortie, offrant un excellent terrain d'apprentissage pour les concepts de base de l'électronique et de la programmation embarquée. Zahra / Farah Capteur de Temperature avec LED Objectif : Le but de ce projet était de concevoir un système de détection de temperature à l'aide d'un capteur connecté à une carte Arduino, et d'utiliser des LED pour indiquer visuellement si la temperature est faible ou élevée. Notre objectif est de faire allumer la LED rouge lorsque la température détectée par le capteur est élevée, et allumer la LED bleu dans le cas où la température est faible Matériel utilisé : 1 capteur de température (max31850K) 2 LED (avec les résistances) : 1 bleu et 1 rouge 1 Arduino 1 Shield 4 fils conducteurs Difficultés rencontrées : Faute de programmation (oubli de ";" ou majuscules) Définition des valeurs limites entre chaud et froid Sensibilité du capteur Intégration du serialprint Code : Description du montage : Nous branchons le Shield sur l'Arduino Nous avons branché le capteur sur I2C Nous connectons le LED Bleu et sa résistance au port GND et au port 10 Nous connectons la LED Rouge et sa résistance au port GND et au port 9 Nous regulionsla Temperature du capteur en le mettant dans la paume de notre main Photos du montage : Résultat : Projet 2 : Hugo / Hasir / Youssra / Ramage Compte-rendu du Projet 2 : Conception d'un pot de fleur découpé au laser et d'une fleur imprimée en 3D Sujet : Notre projet consistait à concevoir et à fabriquer un pot de fleur en utilisant la découpe laser et une fleur en utilisant l'impression 3D. Objectif : Combiner ces deux techniques de conception pour créer un objet personnalisé. Processus de conception : Découpe laser : Choix du modèle : Utilisation de la bibliothèque de boîtes sur https://festi.info/boxes.py pour sélectionner un modèle de boîte se rapprochant d'un pot de fleur, puis réglage des paramètres pour obtenir le nombre de faces souhaité et un contour arrondi similaire à un pot. Préparation du fichier : Exportation du modèle choisi vers Inkscape. Modification des contours en rouge pour la découpe laser. Ajout d'une illustration de fleur avec citation, vectorisée avec un fond noir pour la gravure. Personnalisation avec des initiales gravées sous la forme d'un ambigramme sur le bas du pot. Découpe laser : On a utilisé du peuplier 6mm. Impression 3D : Conception des objets : en utilisant Tinkercad Conception du stigmate de la fleur (partie centrale) avec une sphère, puis réglages pour créer du relief. Conception des pétales à partir de sphères également modifiées pour obtenir une forme plus ou moins aplatie et une orientation vers le haut Conception d'une tige à partir d'un cône, ajusté aux dimensions du pot de fleurs. Assemblage des objets : Alignement de la tige avec le centre de la fleur. Ajustement pour que la tige s'insère dans le stigmate. Regroupement des objets Exportation du fichier final vers IdeaMaker pour impression. Impression 3D Difficultés rencontrées : Après la découpe, nous avons constaté que le patron n'était pas réglé à 6mm, ce qui a affecté l'assemblage des pièces du pot. Pour l'impression 3D, nous avons dû séparer les deux éléments (tige et fleur) et les poser à plat sur le plateau d'imprimante afin d'optimiser le temps d'impression et d'éviter d'avoir à imprimer un grand support pour faire tenir la fleur debout. De plus, le trou servant à emboîter la tige dans la fleur avait le même diamètre que la tige, ce qui a rendu difficile l'emboitement. Résultats : Nous avons obtenu un pot de fleurs en bois, correctement emboîté bien que non conforme aux attentes initiales. La gravure des initiales sont clairement lisibles, mais l'illustration et la citation restent un peu moins lisibles. Nous avons obtenus une fleur 3D en filaments verts, avec un support que l'on a retiré. Boite avec couvercle mécanique Auteurs : Cyrine Dhouib, Rayane Mekouar, Rouaa Talyss Informations Cyrine DHOUIB , Rayane MEKOUAR, Rouaa TLAYSS cyrine.dhouib@etu.sorbonne-universite.fr, rouaa.tlayss@etu.sorbonne-universite.fr, rayane.mekouar@etu.sorbonne-universite.fr M2 Management de l'innovation 2023/2024 Contexte Ce projet a pour but de concevoir concevoir des objets en utilisant une découpeuse laser et une imprimante 3D. Objectif Pour cela, nous avons pour objectif de concevoir une boite dont le couvercle serait un iris mécanique. La boite sera conçue avec une découpeuse laser tandis que le couvercle sera modélisé puis imprimé en 3D. Matériel et logiciels Planche de peuplier 6mm d'épaisseur Découpeuse laser Logiciel Inkscape Imprimante Raise 3D Pro Logiciel Fusion 360 Etapes Conception de la boite : Nous avons tracé le patron de notre boite à l'aide du site internet festi.info, nous avons ensuite importé ce patron sur Inkscape pour la personnalisé et pour tracer un trou sur le couvercle car nous voulons y intégrer notre couvercle imprimé en 3D. Suite à cela, nous avons découpé au laser une planche en bois (peuplier 6mm). Conception du couvercle Nous avons pour objectif de concevoir un Iris mécanique comme couvercle de la boite. L'iris permet de contrôler la taille d'une ouverture circulaire, similaire au diaphragme d'un appareil photo. Cet iris est composé de pétales qui peuvent s'ouvrir ou se fermer pour ajuster la taille de l'ouverture. Notre assemblage mécanique est composé donc composé de plusieurs pièces. Les pièces on été conçues à l'aide du logiciel de CAO Fusion 360. Afin d'assurer un bon assemblages des pièces, nous avons vérifié que la tailles des trous dans lesquels les pièces s'imbriquent soit supérieur à la taille nécessaire pour prendre en compte la marge d'erreur de l'imprimante 3D. Difficultés rencontrées Les difficultés rencontrées concernent principalement l'impression 3D : Des filaments de plastiques ont été ajoutés à nos pièce en raison d'une possible surchauffe de l'extrudeur par rapport au plastique utilisé. Certaines pièces étaient trop fragiles en raison de leur faible dimension, cela a ainsi entrainé quelques ruptures qui ont pu être corrigés sans endommager le mécanisme. Améliorations Il serait préférable d'imprimer l'ensemble des pièces déjà assemblé sur notre fichier 3D pour éviter les problèmes rencontrés. Flora Anaelle Manele Chanel - Kévin Le projet : Combinaison d'impression 3D et découpe laser pour la création de Kévin la mascotte de la promo : le pull imprimé en 3D et la tête en 2D découpé au laser Le matériel et logiciels : Le corps : Tinkercad Imprimante 3D PMMA coulé La tête : Inkscape Laser Plexiglass 3mm Difficultés rencontrées : Manque de maîtrise des logiciels : contour rouge sur Inkscape Mesures de l'encoche : trop grande dans le pull pour le cou trop fin Projet Final : Hugo / Hasir / Youssra / Ramage Compte Rendu du Projet Final : Vase autonome “Make flowers bloom again !” I. Définition et Analyse du projet Notre projet consiste à développer un vase innovant qui renouvelle automatiquement son eau. Il est équipé d'une électrovanne qui déclenche le transfert de l'eau sale vers un réservoir à intervalles réguliers. Dans ce réservoir, l'eau est filtrée grâce à des billes de filtrage, permettant ainsi de purifier l'eau avant qu'elle ne soit réintroduite dans le vase. Cette automatisation du renouvellement de l'eau vise à prolonger la vie des fleurs en maintenant un environnement propre et frais sans intervention manuelle. Ce vase autonome transforme un objet quotidien en un dispositif avancé, combinant praticité et technologie pour faciliter l'entretien des fleurs de manière efficace et esthétique. A. Quelques définitions Le besoin dans ce contexte se réfère à la nécessité de prolonger la durée de vie des fleurs en maintenant leur environnement d'eau propre et frais de manière autonome. Il s'agit de répondre à la nécessité des utilisateurs de maintenir des fleurs fraîches dans un vase sans avoir à changer manuellement l'eau régulièrement. Les utilisateurs sont ceux qui ont un intérêt à maintenir des fleurs fraîches dans un vase, mais qui peuvent trouver contraignant le besoin de changer régulièrement l'eau du vase. Cela peut inclure les propriétaires de maisons, les entreprises florales, les bureaux, etc. La fonction principale du vase est d'automatiser le renouvellement de l'eau filtrée des fleurs à intervalles réguliers. Cela est rendu possible grâce à un système de réservoir et des billes de filtrage. Le vase détecte le besoin de changement d'eau, draine l'eau sale dans le réservoir à travers le filtre pour la nettoyer, puis remplit le vase avec de l'eau propre. B. Réflexions sur la problématique et veille sur l'existant Notre projet, intitulé "Make flowers bloom again!", vise à révolutionner l'entretien des fleurs coupées avec un vase qui renouvelle automatiquement son eau. Cette innovation cherche à répondre à un problème quotidien : la corvée et souvent l'oubli de changer l'eau des vases, ce qui peut réduire considérablement la longévité et la fraîcheur des fleurs. Dans la phase de réflexion sur la problématique et la veille technologique de notre projet de vase autonome "Make flowers bloom again!", nous avons examiné divers systèmes d'arrosage automatique existants pour identifier les fonctionnalités qui pourraient être intégrées ou améliorées dans notre conception. Voici une synthèse des systèmes analysés : Nom du dispositif Description Illustration Systèmes d'irrigation goutte-à-goutte Ces systèmes, qui délivrent l'eau directement au niveau des racines via de petits tuyaux, sont très efficaces pour économiser l'eau. Ils peuvent être adaptés pour des installations intérieures ou extérieures. Toutefois, leur mise en place peut être complexe et laborieuse, nécessitant souvent des installations invasives comme le perçage ou le creusage​ Systèmes de mèches Utilisant des mèches absorbantes qui transfèrent l'eau d'un réservoir au sol à mesure que celui-ci s'assèche, ces systèmes sont simples à installer et à utiliser. Ils sont particulièrement adaptés pour arroser plusieurs plantes situées à proximité les unes des autres et pourraient être idéals pour un arrosage constant sans maintenance fréquente​ Pots auto-arrosants Dotés d'un réservoir d'eau sous le sol, ces pots utilisent la capillarité pour monter l'eau vers les racines des plantes lorsque nécessaire. Ils sont faciles à utiliser et nécessitent peu d'entretien, bien qu'ils puissent être onéreux et demandent un remplissage régulier du réservoir, surtout pour les grandes plantes ou dans des conditions climatiques chaudes​ Matériaux d'absorption par capillarité Certains systèmes emploient des matériaux ou tissus qui s'imprègnent d'eau d'un réservoir et l'acheminent vers le sol du pot de la plante. Faciles à installer, ils fournissent une hydratation uniforme et continue, ce qui aide à prévenir le sur ou le sous-arrosage. Cependant, ils ne conviennent pas à toutes les espèces de plantes, surtout celles qui préfèrent un sol moins humide​ En intégrant ces observations dans notre projet, nous visons à développer un vase qui non seulement automatise le renouvellement de l'eau mais assure également que celle-ci reste propre et fraîche, prolongeant ainsi la vie des fleurs avec minimal entretien. II. Planification et Stratégie A. Lean Canvas B. Nos choix techniques L'objectif de ce projet était de concevoir un objet innovant en utilisant l'électronique combiné à l'impression 3D et/ou la découpe laser. Nous avons opté pour l'électronique et l'impression 3D. L'enjeu était ainsi de : Concevoir un circuit électronique de filtrage (avec l'électrovanne) et d'arrosage (avec la pompe à eau) Concevoir un vase 3D autonome à deux compartiments (avec Tinkercard et IdeaMaker) en tenant compte à la fois de l'aspect esthétique et de la fonctionnalité technique : Le premier qui contient la fleur 3D dans lequel l'eau est remplie, en agençant l'électrovanne qui fait passer l'eau dans le second compartiment à intervalles de temps réguliers. Le second, qui est le réservoir et qui contient des filtres à billes, un bloc-filtre ouvert et une pompe qui permet de faire remonter l'eau filtrée dans le premier compartiment. C. La gestion de projet 1. Définition du Minimal Product Viable (MVP) : Le MVP est la version la plus simplifiée de notre produit qui inclut uniquement les fonctionnalités essentielles nécessaires pour qu'il soit opérationnel et capable de satisfaire les premiers utilisateurs. Notre MVP inclut les fonctionnalités essentielles suivantes : l'automatisation du renouvellement de l'eau en utilisant une électrovanne et une pompe, et des billes de filtrage pour maintenir l'eau propre, tout en veillant à minimiser les coûts de production. 2. Planification détaillée : Date Tâches 02/04 Réunion d'équipe 02/04 Vérification des matériaux pour le MVP 02/04 Conception du prototype initial du produit sous la forme de schéma 03/04 Développement du circuit électronique 03/04 Impression 3D du prototype de vase 29/05 Assemblage final des composants du vase 29/05 Test du système d'arrosage et de filtration 30/05 Finalisation et révision du MVP 30/05 Collecte des retours et des commentaires 3. Répartition des tâches : III. Conception et Développement L'élaboration de notre vase autonome "Make flowers bloom again!" commence par une étape cruciale : la création de croquis détaillés et la définition des dimensions du prototype : A. Circuit électronique 1. Le matériel utilisé : Arduino Uno : cœur du contrôleur, gérant la logique et les sorties vers les relais. Base shield : facilite la connexion des différents modules et capteurs à l'Arduino, réduisant les erreurs de câblage. Grove-2-Channel SPDT Relay : permet le contrôle de deux charges électriques, l'électrovanne et la pompe, offrant un moyen fiable de les activer ou désactiver. Electrovanne et pompe : les actuateurs dans notre système, l'un contrôlant le flux de liquides, l'autre augmentant la pression ou le volume de l'eau transportée. Câbles de connexion : utilisés pour connecter les éléments électroniques entre eux et assurer la transmission des signaux de commande. Tuyaux : assurent le transport des liquides contrôlés par l'électrovanne et propulsés par la pompe. 2. Le circuit : Nous avons développé un circuit électronique contrôlé par un microcontrôleur Arduino pour gérer simultanément une électrovanne et une pompe. Pour cela, nous avons attribué à l'électrovanne la broche numérique 4 et à la pompe la broche numérique 5 de l'Arduino. Ces broches sont configurées comme des sorties dans notre fonction setup(). Au démarrage du système, nous nous assurons que l'électrovanne et la pompe sont toutes deux éteintes. Cela est crucial car nos relais sont de type actif bas, ce qui signifie que l'application d'un signal bas (LOW) active les dispositifs connectés. En conséquence, nous envoyons un signal LOW à chaque broche pour garantir que l'électrovanne et la pompe restent désactivées au démarrage. Notre programme principal, contenu dans la boucle loop(), commence par un délai de 10 secondes avant de procéder à toute action. Nous activons ensuite l'électrovanne en envoyant un signal HIGH (qui la désactive en supposant un relais normalement fermé) et maintenons la pompe désactivée avec un signal LOW. Après un délai de 5 secondes, nous inversons les états : l'électrovanne est désactivée (signal LOW) et la pompe est activée (signal HIGH). Un autre délai de 5 secondes est observé avant de répéter le cycle. Cette séquence est conçue pour se répéter indéfiniment, permettant une automatisation efficace de tâches telles que l'irrigation ou la gestion des flux de liquides dans un système. 3. Les détails du code : // Définition des broches connectées au relais sur la base shield const int electrovannePin = 4; // Le canal du relais pour l'électrovanne est connecté à D4 const int pompePin = 5;        // Le canal du relais pour la pompe est connecté à D5 void setup() { // Initialisation des broches comme sorties pinMode(electrovannePin, OUTPUT); pinMode(pompePin, OUTPUT); // S'assurer que l'électrovanne et la pompe sont éteintes au démarrage digitalWrite(electrovannePin, LOW); // Supposons relais actif bas digitalWrite(pompePin, LOW); } void loop() { //Délai entre deux changements delay(10000); // Temps de durée d'attente entre les cycles // Activation de l'électrovanne et désactivation de la pompe digitalWrite(electrovannePin, HIGH); // Envoyer HIGH pour activer digitalWrite(pompePin, LOW); / Envoyer LOW pour désactiver delay(5000); // Durée d'activation de la vanne (à modifier selon le temps qu'on veut) // Activation de la pompe et désactivation de l'electrovanne digitalWrite(electrovannePin, LOW); // Envoyer LOW pour désactiver si le relais est de type actif bas digitalWrite(pompePin, HIGH); // Envoyer HIGH pour activer delay(5000); // Durée d'activation de la pompe (à modifier selon le temps qu'on veut) //Arret de tous digitalWrite(electrovannePin, LOW); // Envoyer LOW pour désactiver si le relais est de type actif bas digitalWrite(pompePin, LOW); } 4. Les difficultés rencontrés : Capacité de charge des relais : Nous avons dû nous assurer que les relais choisis étaient capables de supporter la charge électrique de l'électrovanne et de la pompe sans surchauffer ou échouer. Gestion des délais : La programmation des délais exacts entre l'activation et la désactivation des dispositifs a été un défi, surtout pour synchroniser le fonctionnement de l'électrovanne et de la pompe afin d'optimiser l'efficacité du système. La puissance : Le board Arduino est utilisé en 5V, donc le courant qu'il peut émettre aux autres composants est un courant de 5V. Or, pour avoir la puissance nécessaire afin de pomper l'eau jusqu'en haut de notre vase, on a besoin d'un courant minimum de 12V. Donc, on utilise un adaptabilités la pompe : Malheureusement, nous avons rencontré des problèmes avec la pompe qui ne fonctionnait pas comme prévu. L'eau ne remontait pas vers le premier compartiment du vase, même lorsque nous avons placé le tube lié à la pompe au même niveau horizontalement. Ce qui nécessite une réévaluation de la capacité de la pompe et peut-être de son emplacement ou de son mécanisme pour garantir qu'elle puisse efficacement transporter l'eau vers le haut, contre la gravité. B. Impression 3D 1. Les logiciels utilisés : Tinkercad : logiciel de modélisation 3D basé IdeaMaker : slicer qui prépare les modèles 3D en instructions d'impression 2. La modélisation du vase autonome Pour la modélisation du vase, nous avons conçu un système à deux compartiments qui facilite le renouvellement automatique de l'eau pour prolonger la vie des fleurs. Voici une description détaillée de notre démarche et des choix techniques : Conception des compartiments : Compartiment supérieur : Ce compartiment carré est spécifiquement conçu pour accueillir la fleur et est muni d'un fond incliné avec un trou qui permet à l'eau de s'écouler vers le compartiment inférieur. Le trou est au dimension de l'électrovanne contrôlée par le microcontrôleur, qui ouvre ce passage à intervalles réguliers pour permettre le transfert de l'eau vers le filtre. Compartiment inférieur : Ce réservoir carré et incliné également, contient les billes de filtrage, disposées de manière à maximiser l'efficacité du filtre à côté d'un bloc-filtre ouvert, qui est modelé pour faciliter le passage de l'eau tout en retenant les impuretés. La conception inclut ici aussi un trou spécifique pour la pompe, qui remonte l'eau filtrée vers le compartiment supérieur.     Paramètres d'impression 3D : Nous avons utilisé une imprimante 3D Pro 2 avec du filament PLA gris pour l'impression. Les paramètres étaient configurés comme suit : Qualité : Standard. Remplissage : 20%, ce qui offre une structure suffisamment solide pour accueillir l'eau sans fuite, tout en conservant une légèreté optimale. Hauteur de couche : 0.3 mm, pour une impression plus rapide tout en maintenant une bonne résolution. Nombre de coques : 3 pour renforcer les parois du vase et garantir une étanchéité adéquate. 3. Les difficultés rencontrées : Intégration des composants électroniques : Nous avons imbriqué les composants électroniques, y compris les relais pour l'électrovanne et la pompe, directement dans la structure du vase. Ces espaces devaient être conçus pour encapsuler parfaitement les composants, pour protéger les connexions électriques de l'humidité. Trou de l'électrovanne : La création d'un trou aux dimensions exactes pour l'électrovanne a été difficile en raison de sa forme non circulaire et complexe. Nous avons ainsi du limer le trou pour pouvoir faire entrer l'électrovanne, puis nous avons combler les espaces avec de la pâte à fixe pour éviter que l'eau ne s'échappe par les espaces créés. Inclinaison dans les compartiments : Assurer une inclinaison adéquate dans les compartiments pour un bon écoulement de l'eau sans stagnation a posé des défis. En effet, il fallait calculer et reproduire les mêmes angles d'inclinaison dans les deux compartiments pour favoriser un écoulement efficace tout en maintenant la stabilité du vase pour qu'il puisse tenir debout. Interruption dans l'impression 3D : Nous avons rencontré une interruption inattendue pendant l'impression, qui est peut-être dues à l'épuisement des filaments. IV. Évaluation A. Les résultats Circuit électronique : Le circuit conçu pour notre vase fonctionne correctement selon les paramètres établis. L'électrovanne réagit bien aux commandes du système, s'ouvrant et se fermant à des intervalles prédéfinis pour permettre le transfert d'eau. Cette partie du système répond donc aux attentes en termes de programmation et de synchronisation. Cependant, nous avons rencontré un problème significatif avec la pompe. Malgré le bon fonctionnement du circuit, la pompe ne parvient pas à remonter l'eau au premier compartiment du vase. Cette défaillance suggère un problème potentiel de capacité ou de positionnement de la pompe qui nécessite un ajustement technique pour assurer la montée de l'eau contre la gravité. Impression 3D et assemblage : En ce qui concerne l'impression 3D, les deux compartiments du vase s'emboîtent correctement et tous les composants électriques sont bien intégrés, à l'exception de l'électrovanne. Pour cette dernière, il a été nécessaire d'élargir le trou prévu dans le design initial et d'ajouter du remplissage pour éviter les fuites d'eau. Ces ajustements ont été effectués pour assurer l'étanchéité et le bon fonctionnement de l'électrovanne dans le système. B. Les pistes d'amélioration Pour améliorer notre produit, nous pourrions : Tester une pompe alternative, potentiellement plus puissante, pour vérifier si elle est capable de remonter l'eau au premier compartiment du vase. Examiner les possibilités de modification ou de remplacement des tuyaux pour améliorer le flux d'eau et faciliter le fonctionnement de la pompe. Explorer la conception d'un vase transparent pour permettre à l'utilisateur d'observer le processus de filtration de l'eau plus facilement. C. Les pistes d'évolution Sur le plan technique, il serait intéressant d'intégrer les éléments suivants : Des capteurs de niveau d'eau pour surveiller les niveaux dans le vase et dans le réservoir, permettant ainsi un contrôle précis du système. Un système d'alerte pour informer l'utilisateur en cas de problème ou de niveau d'eau bas, assurant ainsi un fonctionnement fiable et évitant les situations d'urgence. Une interface utilisateur conviviale permettant de régler les paramètres du système et de visualiser les données pertinentes sur l'état du vase et du système. Une batterie de secours pour garantir le fonctionnement continu du système en cas de panne de courant, assurant ainsi la stabilité et la fiabilité de l'ensemble. Sur le plan de l'évaluation du marché et des tests utilisateurs, il serait pertinent de : Intégrer les retours des tests utilisateurs et des études de marché dans le processus de développement du produit afin d'optimiser sa conception, ses fonctionnalités et son positionnement sur le marché, assurant ainsi son succès commercial et sa satisfaction clientèle. Sur le plan de la durabilité et de l'impact environnemental : Explorer des options pour rendre le produit plus écologique en utilisant des matériaux recyclés ou facilement recyclables dans sa fabrication. Considérer des solutions éco-responsables pour la gestion de l'eau, telles que la réutilisation des eaux grises ou la collecte des eaux de pluie pour alimenter le système. Évaluer les possibilités d'intégration de technologies d'économie d'énergie pour réduire la consommation électrique du système. Sur le plan de l'accessibilité et de l'inclusivité : Assurer une documentation claire et des instructions d'utilisation simples pour garantir que le produit soit facilement compréhensible et utilisable par tous les utilisateurs, quel que soit leur niveau de compétence technique. Bibliographie Sources des tutoriels, inspirations, et ressources utilisées tout au long du projet : Top 4 Convenient Automatic Watering Systems for Potted Plants (notsomodern.com) Pouring Sucess: The Ultimate Guide to The Best Automatic Watering System for Indoor Plants - The Plant Bible Projet final : Drop the Wipe - Flora, Chanel, Manele, Anaelle Problématique de départ: Nous avons observé l'inconfort des lunettes en temps de pluie. Des gouttes se deposent sur les lunettes troublant le champ de vision de celui ou celle qui les portent. Sans compter l'humidité qui crée une buée devant leurs yeux, rendant leur vue définitivement floue. La vision trouble n'est d'ailleurs pas le seul problème observé. Nous comptons également les inconvénients suivants : Perte de temps : afin de retrouver une vue appropriée, le porteur de lunette doit retrouver son chiffon spécifique aux lunettes afin de nettoyer ses verres Dégradation de l'humeur : en temps de pluie, le porteur de lunette doit effectuer cette action régulièrement, ce qui est susceptible de l'énerver et donc de le mettre de mauvaise humeur Le projet : Afin d'améliorer la qualité de vie des porteurs de lunettes, nous avons donc pour ambition de créer des essuies glaces pour lunettes, discrètes et esthétiques qui soit adaptable à toute paire de lunettes. Ces essuies glaces s'activeraient automatiquement lorsqu'il pleut. Néanmoins, les ressources à notre disposition étant limitées (que ce soit en terme de matériaux ou de compétences), nous ne pourrons créer qu'un prototype qui pourra prouver la faisabilité du projet mais qui ne sera que peu représentatif du produit final "discret et esthétique". Notre concurrent : Traitement hydrophobe chez l'opticien = environ 90€ par verre donc 180€ pour 2 verres Prix (pour 2 verres) : 2 Servo moteur = 10€ Capteur eau = 9€ Boîte = 5€ Base shield = 5€ Arduino = 30€ Total = 59€ Prix de vente = 80€ Inconvénients : Plus encombrant Avantages concurrentiels : Moins cher = notre produit vaut 100€ moins cher que notre concurrent. Plus original = pour compenser notre inconvénient, nous miserions notre stratégie marketing sur l'esthétique de notre produit final et une identité unique. Cible : Personne portant des lunettes âgé de 25 - 35 ans intéressé par la technologie et/ou les tendances, peut-être un peu excentrique. Personas : Professeure d'art plastique portant des lunettes avec un style décalé, de 30 ans au collège qui ne s'habille qu'en couleurs et qui s'attardent sur les tendances technologiques Un homme de 25 ans passionné par la technologie, jeune informaticien dans une start-up de Deep Tech Identité visuelle : Le matériel et les logiciels : Arduino : Arduino Base shield 3 fils Servo moteur Bibliothèque "Servo.h" Grove water sensor Découpe laser: inkscape festi.info / boxes.py MDF 3mm Déroulement du projet: Phase de réflexion: Nous avons tout de suite fait le lien entre le problème identifié et les essuies glaces des voitures. Nous étions donc confiant en ce qui concerne la proof of concept. Nous avions neanmoins la contrainte de la taille du servo moteur et du capteur dont nous avons tenu compte dans les schema si dessous. Il est donc important de preciser que ces schemas ne representent pas le produit final mais le prototype permettant de prouver la faisabilité du projet. Notre produit final serait en effet plus discret et plus esthétique. Concernant le design de la boite contenant le moteur, nous avons simplement pris en compte le format du servo moteur : Nous avons coupé un côté pour faire dépasser la partie tournante (l'hélice). Nous avons ajouté un trou pour laisser passer les fils connecteurs du moteur à la plaquette d'arduino. Le plus difficile a été de trouver l'emplacement idéal pour rendre le prototype le moins désagréable a porter possible tout en faisant en sorte que l'hélice accrochée au servo arrive sur le verre. Phase de conception: Nous avons commencé par le dur : l'arduino. En ce qui concerne le montage : Nous avons posé le base shield sur l'arduino Nous avons connecté le capteur à la base shield Nous avons connecté le servo moteur à la base shield Ensuite, le code : Après avoir défini : Le Servo ("monServo') L'angle actuel de monServo comme l'angle initial ("0") La vitesse de monServo ("Serial.begin(9600)") Le capteur d'eau ("WATER_SENSOR") Le capteur d'eau en tant qu'INPUT Nous procédons à la boucle ("loop") qui va permettre de faire tourner l'hélice à un certain angle lorsque le capteur détecte de l'eau : 1. On crée une fonction booléenne isExposedToWater() qui renvoie "true" si lorsque le capteur détecte de l'eau soit lorsque DigitalRead(WATER_SENSOR) == HIGH et false sinon. Difficulté rencontrée : le code ne fonctionne correctement que si on écrit DigitalRead(WATER_SENSOR) == LOW pour une raison qui nous échappe 2. L'hélice s'active si l'eau est détectée, donc nous commençons par mettre la condition "if(isExposedToWater())". 3. Si la condition est respectée, alors l'hélice passe de son angle initial 0 à un angle de 180° (monServo.write(180)) et l'action se fait avec un délai de 500 ms. L'étape suivante consiste à réaliser le support permettant d'accrocher le dispositif aux lunettes. Nous avons choisi de réaliser une boîte sur Inkscape via Boxes.py dont les dimensions correspondent exactement au servo moteur (et ainsi éviter que le servo moteur soit mobile dans la boîte). Nous rentrons les mesures du servo moteur sur le site Boxes.py en y ajoutant les 3 mm du matériau MDF + 1,5 mm de marge de sécurité. Nous obtenons les tous les côtés de notre boîte. Nous basculons ensuite à Inkscape pour faire les modifications nécessaires : Couper le Wall 3 pour faire dépasser la partie tournante du moteur. Ajouter un trou sur le bottom pour laisser passer les fils connecteurs du moteur à la plaquette d'arduino. Nous réalisons la boîte au découpe laser et assemblons tous les côtés. (Ci-dessous vue côté Wall 3, vue côté Wall 2 et vue du dessus)   Ci-dessous résultat avec le moteur dans la boîte : Prototype final : Perspective de développement : Essuies glaces pour lunettes de natation qui essuie l'eau restante à la sortie de l'eau Conception de lunettes avec essuies glaces intégré Projet Final : FollowBuddy de Rouaa, Cyrine, Zahra et Rayane Définition du projet - Nom et Logo du Projet - Besoin Suite à  plusieurs réflexions, nous avons choisi de créer : Follow Buddy, le chariot éco qui vous accompagne dans votre quotidien Faire du shopping avec vous ? Pourquoi pas !! Au lieu de laisser votre chariot loin de vous lorsque vous faites les magasins, Follow Buddy vous suit dans votre chemin et il est là pour récupérer toutes vos gourmandises :) - Utilisateurs Particuliers : N’importe quelle personne qui a besoin d’aide pour porter ses affaires peut utiliser FollowBuddy. Professionnels: Follow Budy est le partenaire idéal pour tout employé ayant besoin d'un assistant pour porter des charges lourdes. Notre robots pourrait accompagner des ouvriers sur un chantiers, des serveurs dans un restaurant, ou des gérants dans un hangar pour transporter des colis ! - Fonctionnalité principale Suivre la personne : Cette fonctionnalité permet au robot de suivre de manière autonome son propriétaire à travers un ensemble de capteurs intégrés, assurant une assistance personnalisée lors des courses. Porter les affaires des gens : Cette fonctionnalité permet au robot de porter les articles et sacs de courses, offrant une solution pratique pour transporter les achats tout en laissant les mains libres à son propriétaire Problématique et concurrence - Réflexions sur la problématique Et Chiffre clés ? Nous avons voulu faire quelque chose de sympa, cool et innovant, qui aide les gens. Nous avons voulu vous faciliter la vie, que vous soyez un ouvrier qui en a marre de porter ses outils, ou un serveur qui en peu plus avec le grand nombre d'assiettes … Veille sur l'existant Les chariots existent déjà  dans les magasins de cours tels que AUCHAN et Carrefour. Hors dans les centres commerciaux, c’est toujours des paniers qui nous sont donnés. Lean canvas Choix techniques Dans ce projet, nous nous sommes limités sur les matériaux à disposition dans le FabLab ; des matériaux simple et facile à trouver : chassis - piles - capteurs de son et d’infra rouge - carte arduino et son driver - bois - moteurs à courant continu. Gestion de projet Planning - Jalons - étapes : La gestion de projet pour notre projet de création du chariot Follow Buddy a été soigneusement planifiée et exécutée afin d'assurer une progression fluide et efficace à chaque étape du processus. Depuis le début, nous avons adopté une approche collaborative, en encourageant le brainstorming et la collecte d'idées parmi les membres de l'équipe. Nos réflexions ont débuté dès le 8 mars, où nous avons commencé à explorer différentes possibilités de conception et à définir les fonctionnalités clés du chariot. Au fil du temps, nous avons régulièrement revisité et ajusté nos idées, en tenant compte des commentaires de l'équipe et des conseils du professeur. Des modifications régulières ont été apportées à notre plan, notamment le 2 avril, le 23 avril et le 29 avril, où nous avons évalué notre progression, identifié les domaines nécessitant des ajustements et pris des décisions stratégiques pour améliorer notre prototype. Ces révisions ont été essentielles pour maintenir notre projet sur la bonne voie et garantir la qualité finale du produit. Chaque étape de notre projet a été soigneusement validée, à la fois par notre professeur et par notre équipe, pour assurer que nous restions fidèles à nos objectifs et que nous atteignions les résultats attendus. Par exemple, le 8 mars, nous avons vérifié la présence des matériaux nécessaires à la réalisation du chariot. De plus, le 2 avril, nous avons validé le prototype du design du chariot et de la boîte, tout en commençant à concevoir le plan de fonctionnement du robot et à rédiger le code associé. Nous avons ensuite procédé à la conception du plan de fonctionnement du chariot, en définissant comment nous voulions que le robot fonctionne et en rédigeant le code correspondant, le 23 avril et à nouveau le mois d'avril. Parallèlement, nous avons sélectionné la boîte idéale pour notre chariot et avons lancé la découpe laser le 23 avril. En révisant notre prototype le 29 avril, nous avons pris la décision d'ajouter une nouvelle boîte pour améliorer l'esthétique globale du chariot, démontrant ainsi notre capacité à réagir rapidement aux besoins du projet et à effectuer des ajustements en conséquence. Enfin, le 30 avril, nous avons imprimé en 3D les fruits destinés à être transportés par notre chariot et avons procédé à des tests approfondis pour évaluer la performance globale du prototype. Cette approche méthodique et itérative de la gestion de projet a été essentielle pour garantir le succès de notre initiative et pour assurer que nous atteignons nos objectifs de manière efficace et efficiente. Croquis Step 1 : Croquis de notre robot + le placement de notre carte arduino et les capteurs. Step 2 : Réflexion sur le positionnement des boîtes par dessus le robot, tout en vérifiant les bonnes dimensions. La première boîte sert à cacher notre circuit ( carte arduino, capteurs … ) et sera le support de la deuxième boîte, par dessus, qui sera ouverte du haut afin qu’on puisse déposer nos affaires dedans. Step 3 : Création de Follow Buddy Fichiers de conception et étapes de création des fichiers (captures d'écran) / code Notre programme Arduino a pour but de mesurer en temps réel la distance entre l'utilisateur et le robot et de commander les moteurs en fonction de cette distance. void loop() { digitalWrite(trigPin, LOW); //Lecture des données du capteur à ultrasons delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration*.0343)/2; buttonState = digitalRead(buttonPin); digitalWrite(ledPin, LOW); Right_Value = digitalRead(RIGHT); // lecture des données des capteurs infrarouges Left_Value = digitalRead(LEFT); Dans la boucle, nous commençons par définir le trigPin à basse tension pendant 2 microsecondes pour nous assurer que le signal est d'abord bas. Ensuite, nous le mettons à haute tension pendant 10 microsecondes, ce qui envoie une rafale sonique de 8 cycles depuis l'émetteur, rebondit sur un objet et atteint le récepteur (qui est connecté à la broche Echo).Lorsque les ondes sonores atteignent le récepteur, elles font passer la broche Echo à un niveau haut pendant la durée du trajet des ondes. Pour obtenir cela, nous utilisons une fonction pratique d'Arduino appelée pulseIn(). Elle prend 2 arguments, la broche à écouter (dans notre cas, la broche Echo), et un état (HAUT ou BAS). Cette fonction attend que la broche passe à l'état que vous avez indiqué, commence à chronométrer, puis arrête de chronométrer lorsqu'elle passe à l'autre état. En plus du capteur à ultrasons, le programme lit également les données des capteurs infrarouges pour détecter le changement de direction de l'utilisateur. if ((distance > 10) && (distance < 20)) { //CAS OU STOP M1_back(0); M4_back(0); } else if ((distance < 10)) { // CAS OU RECULE //Serial.println("BACKWARD"); M1_back(85); M4_back(85); } else if ((distance > 20) && (distance < 50)) { // CAS OU AVANCE //Serial.println("FORWARD"); M1_advance(85); M4_advance(85); } else if((Right_Value==0) && (Left_Value==1)){ M1_back(85); M4_advance(85); } else if((Right_Value==1) && (Left_Value==0)){ M4_back(85); M1_advance(85); } else { // AUCUN CAS DONC STOP //Serial.println("STOP"); M1_back(0); M4_back(0); } Une fois que les données sont lues, le programme commande les moteurs en vitesse et en direction pour déplacer le robot. Le robot avance si la distance mesurée est trop élevée et recule si la distance mesurée est trop faible. Dans le cas où le robot ne détecte pas d'objet devant (avec le capteur à ultra-son), les données des capteurs infrarouges sont prises en compte. Lorsqu'un objet est détecté par l'un des deux capteurs, le robot effectue une rotation en commandant les moteurs dans des directions différentes.  Photos des étapes de réalisation du prototype, paramètres des machines Découpe laser 2D  (Conception, Impression, Sortie de l'imprimante, assemblage) Électronique ( Circuit/montage, code, soudure,..) Les moteurs sont commandés avec un driver pour contrôler leur vitesse et leur direction de rotation. Le driver Quad DC Motor Driver Shield for Arduino est nous permet de commander les moteurs avec un code Arduino. Le driver étant un shield, il peut être placé sur la carte arduino qui en plus de commander les moteurs, lit les données des différents capteurs. La carte arduino est branché à trois capteurs : un capteur à ultrasons pour mesurer la distance de l’objet en face du robot, et deux capteurs infrarouges pour détecter la présence d’un objet sur les côtés. Photos/vidéos de l'objet final https://drive.google.com/drive/folders/15WulPTdGgrQLad1-m-jXKugjmOfmlhCv Demarche responsable du Projet Dans le cadre de notre projet, nous nous engageons fermement à adopter une approche responsable tout au long du processus de conception et de fabrication. Voici quelques-unes des initiatives clés que nous avons prises pour réduire notre empreinte écologique et promouvoir la durabilité : Utilisation d'un châssis recyclé provenant du Fablab Adoption de Piles Rechargeables Utilisation de chutes de bois récupérés Éviter l'Impression 3D Gourmande en Énergie En adoptant ces mesures, nous cherchons à créer un produit innovant tout en restant attentifs aux préoccupations environnementales et en contribuant à la construction d'un avenir plus durable Problèmes rencontrés Court- circuit Réglage de la sensibilité du capteur gauche Défaillance du système :  A cette échelle de prototype, les capteurs de suivi rencontrent quelques problèmes de précision ou de fiabilité, ce qui entraine des erreurs dans le suivi du client ou dans la navigation du chariot. Réflexions de pistes d'amélioration ou d'évolution du projet A grande échelle, le défaillance du système serait moindre, comme le capteur serait à la hauteur des hanches. Conception ergonomique : Des ajouts de poignées, d'une accessibilité suffisante aux compartiments de stockage pourraient améliorer l'expérience utilisateur. Amélioration de la sécurité : Explorer des moyens d'augmenter la sécurité du chariot, par exemple en ajoutant des capteurs de détection d'obstacles pour éviter les collisions ou en intégrant un système de verrouillage automatique pour prévenir le vol. Personnalisation de l'expérience utilisateur : Possibilité d'ajouter des fonctionnalités de personnalisation, telles que des options de réglage de la vitesse du chariot ou la possibilité de préprogrammer des trajets spécifiques, pour répondre aux besoins individuels des clients. PROJET FINAL BABYSAFE : Héloïse/Abisha/Khaïra/Farah CONCEPT BABYSAFE Besoin : éviter les brûlures chez les enfants dû à une température de biberon trop élevée. Utilisateurs : parents d'enfants Fonctionnalités : BABYSAFE est un capteur de température qui permet de déterminer la température du contenant d'un biberon. Cela permet de savoir quand le biberon a une température correcte pour la consommation d'un nourrisson/enfant. Le fonctionnement est simple : L'utilisateur pose le biberon sur le support. La température idéale d'un biberon étant de 37 degrés pour un enfant, BABYSAFE émet un signal lumineux vert (sur la LED1) lorsque la température est inférieure ou égale à 37 degrés. Lorsque la température est supérieure à 37 degrés, c'est à dire que la température du biberon présente un danger pour l'enfant, BABYSAFE émet un signal lumineux RGB (sur la LED2). Réflexion sur la problématique et veille sur l'existant : Il existe déjà des biberons dits "intelligents" qui ont un capteur de T° intégré dans le biberon, l'objectif de BABYSAFE est d'être utilisable et universel pour tous les biberons. BABYSAFE est adaptable à toutes tailles de biberon, ce qui permet d'être utilisé tout au long de la croissance du nourrisson. Lean canvas : Problème à résoudre : Comment savoir si le biberon à une température adaptée pour votre votre bébé ? Solutions existantes sur le marché : des chauffes biberons, des biberons avec control de température intégré Problème / Analyse concurrentielle : Biberons avec control de température intégré => Est adapté à un seul type de biberonPrix allant de 8 à 20 euros en moyenne mais le souci c’est qu’il faut acheter des nouveaux biberons à mesure que le bébé grandit → cela est donc trop coûteux. Chauffes biberons => Réchauffe les biberons Prix plus élevé de 20 à 150 euros mais nécessite une certaine préparation de l'appareil. ( + Difficultés de nettoyage, Problèmes de compatibilité) Notre solution coûtera moins cher qu’un chauffe-biberon et sera utilisable pour tout format de biberon. Notre proposition de valeur : Babysafe est bien plus qu'un simple appareil : c'est votre allié de confiance pour assurer le confort et la sécurité de votre bébé. En captant la température du biberon, Babysafe vous permet de savoir instantanément s'il est prêt à être servi, simplifiant ainsi votre quotidien de parent. Universel et facile à utiliser, il s'adapte à tous les types de biberons ne nécessitant aucune préparation fastidieuse. Et cerise sur le gâteau, Babysafe est proposé à un prix abordable, pour que chaque famille puisse bénéficier de cette tranquillité d'esprit. Marché Cible : les parents, les nounous, toute personne étant apte à s'occuper d'un bébé Valeur ajoutée : Adaptabilité à tout biberon et intuitif (et démocratiser l'utilisation d'un capteur de température pour biberon) Prix de vente : Stratégie de pénétration => Entrée sur un marché à forte concurrence par un positionnement avantageux sur le prix. Notre produit fera partie des moins chers du marché et sera placé sur un maximum de point de vente (fort volume à prix réduits => économie d'échelle). Choix techniques : - Température seuil de 37 degrés - 2 leds : 1 pour pour la led VERTE qui signifie que la température est bonne => biberon prêt à l'emploi - 1 led RGB pour indiquer que la température dépasse 37 degrés => danger pour bébé Gestion de projet: "minimum viable product", planification et répartition des taches : MVP : Le produit actuel est viable car il remplit sa fonction principale qui est d'avertir l'utilisateur lorsque le biberon est trop chaud mais nous pouvons l'améliorer avec différents tests techniques en prenant différents biberons qui ont des matériaux différents (plastique, verre...) afin de mieux capter une température plus fiable. Planification et répartition des tâches : Séance 1 : réflexion ensemble sur le choix du produit (brainstorming), croquis du produit et premières modélisations sur Tinkercad Séance 2 : finalisation de la modélisation sur Tinkercad, début de codage, début de la modélisation pour la découpe laser + impression du socle 3D en fin de séance (durée environ 3h) Séance 3 : Finalisation du code et proof of concept en faisant des tests avec des verres d'eau chaude et froide. Découpe au laser du socle et écriture du WIKI et PPT. Croquis, dimensions : Premier croquis de notre produit : l'idée de base était de réaliser une "bague" avec le capteur à mettre autour du biberon qui capterait la température. Deuxième croquis : l'idée de la bague était plus compliquée pour cacher les capteurs et pour ajuster les dimensions selon le biberon. L'idée du socle est parvenue par la suite, beaucoup plus simple pour intégrer le système électronique à l'intérieur du support et plus de problème pour les dimensions du biberon (ainsi adaptable universellement). Pour déterminer le diamètre du support, nous avons pris le diamètre d'un biberon universel qui est d'environ 6 cm, nous avons donc décidé de faire un support de diamètre supérieur à 6 cm. Par la suite comme nous voulons intégrer le système Arduino à l'intérieur du support, nous avons finalement mis un diamètre de 12 cm permettant ainsi d'intégrer le système Arduino ainsi que d'être adaptable à tous les biberons. Description de la modélisation du support MODELISATION 3D support BABYSAFE : Nous avons utilisé la modélisation 3D pour réaliser notre support BABYSAFE avec le logiciel TINKERCAD. Notre support doit pouvoir intégrer l'arduino, les différents fils, leds et le capteur. Pour réaliser notre support, nous avons donc pris en compte : - Les dimensions du système Arduino - Un espace sur le côté pour faire passer le fil d'alimentation de l'ordinateur à l'arduino - Réalisation de deux trous aux extrémités pour faire sortir les LEDS La maquette finale a donc les dimensions suivantes : diamètre de 12 cm, hauteur de 5cm L'impression a pris environ 3 heures. Améliorations possible du support : nous aurions pu faire les deux trous des extrémités un peu plus grand pour pouvoir faire passer les LEDS sans avoir à forcer, mais si nous réalisons le branchement par l'extérieur du support cela fonctionne très bien, donc nous n'avons pas modifié le support. DECOUPE LASER pour réaliser le couvercle sur le support : Nous avons réalisé une découpe laser en Plexi PMMA (provenant d'une chute) coulé 30 mm à poser sur notre support pour pouvoir poser le biberon. Pour ce faire, nous avons réalisé sur INKSCAPE un polygone en prenant en compte les dimensions du support, nous avons réalisé un creux rectangle sur le milieu pour pouvoir faire sortir le capteur et une gravure BABYSAFE pour brander notre produit. Partie Code Matériel utilisé : Arduino Shield 2 leds : une verte et une blanche Capteur température Fils Câble USB Objectif : Le but de notre produit "baby safe" est de détecter la température d'un biberon (pour bébé) pour éviter toute brûlure. Le principe est le suivant : lorsque le biberon est sur le support (capteur température) et que la led verte reste allumée, cela signifie que le biberon est prêt à l'usage (température ambiante, ok). Tandis que si la led verte s'éteint et que la led blanche clignote en RGB, cela signifie qu'il ne faut absolument pas donner le biberon au bébé car la température est trop élevée (supérieur ou égal à 37°C). Etapes de création du code , essais et erreurs : Notre code s'appuie sur le modèle du capteur d'humidité et de température. Nous avons donc utilisé la bibliothèque relative à ce modèle. Au départ, notre objectif était de réaliser tout le code de A à Z, mais nous nous sommes confrontés à de nombreuses erreurs et nous n'arrivions pas à allumer les LED avec la variation de température. Nous n'arrivions pas à capter les variations de température. Faute de temps et de connaissance, nous avons choisi de prendre pour support le code associé au capteur de température et d'humidité. Ainsi, nous nous sommes basés sur le code associé au capteur de température SHT35. Nous avons utilisé une boucle if pour reprendre le principe du "baby safe". Si la température est inférieur ou égal à 37°C alors le biberon est prêt à l'usage et le bébé ne risque rien et donc la led verte reste allumée. Alors que si la température du biberon dépasse strictement 37°C alors il ne faut pas donner le biberon au bébé car le biberon est trop chaud ! A partir de ce code, nous avons intégré nos différents éléments, notamment nos deux LEDs rouge et bleue. Au port associé sur notre Arduino /shield. Dans la fonction setup, nous avons configuré les deux LEDs en sortie et les avons programmées pour s'allumer. Puis dans la ‘voir loop’, nous avons ajouté nos conditions pour que les LEDs s'allument.Si la température est inférieure ou égale à 37 degrés, la LED verte s'allume, indiquant que le biberon est prêt, sinon elle s'éteint. Si la température est strictement supérieure à 37 degrés, la LED rouge s'allume, sinon elle s'éteint.Nous avons été confrontés à de petites erreurs telles que l'oubli d'intégrer la bibliothèque du capteur. Réflexions de pistes d'amélioration ou d'évolution du projet : Comme évoqué précédemment, il faudrait réaliser des tests avec différents matériaux de biberons (verre, plastique..) et voir si le capteur est fiable pour tous types de matériaux. Eventuellement mettre un capteur de mouvement pour que le dispositif s'allume lorsque le biberon est posé sur le socle. Adapter le produit aux personnes mal voyantes, avec une indication sonore lorsque la température est trop élevée. On pourrait rendre le format du support plus compact, en utilisant un autre type de système plus petit que l'Arduino, ce qui permettrait aux utilisateurs de transporter BABYSAFE plus facilement. Résultat Final Photo du montage final Vidéo de la démonstration Puzzle intéractif - Ruffié Marine- Celik Selin - Meunier Jade Revue de Projet - Puzzle Interactif Lumineux Définition du Projet Objectif Créer un puzzle interactif qui utilise la lumière comme mécanisme de retour pour aider les enfants de 2 à 5 ans à développer leurs compétences cognitives et motrices fines, tout en fournissant un outil éducatif attrayant et stimulant pour les enfants atteints de troubles cognitifs légers. Description du Projet Ce projet vise à développer un puzzle qui, grâce à des pièces équipées de capteurs Hall et de LEDs, offre un retour visuel lorsque les pièces sont correctement assemblées. Le puzzle sera conçu pour stimuler l'apprentissage par le jeu, en engageant les enfants dans une activité qui renforce la reconnaissance visuelle des formes et des couleurs, la résolution de problèmes, et la coordination œil-main. Fonctionnalités - Fonctionnalité Principale : Lorsque deux pièces spécifiques du puzzle sont placées correctement, une LED s’allume pour indiquer que l’assemblage est correct, offrant ainsi un retour immédiat qui encourage l'enfant et renforce l'apprentissage par le renforcement positif. - Fonctionnalités Secondaires : -  Adaptabilité : Le jeu sera conçu pour ajuster la difficulté en fonction du niveau de développement de l'enfant, permettant aux parents ou aux éducateurs de choisir entre différents niveaux de complexité. - Modes de jeu diversifiés : Le puzzle pourra être utilisé dans différents contextes de jeu, incluant des modes qui nécessitent une reconnaissance des formes ou des couleurs, ou des jeux plus libres qui encouragent la créativité. - Portabilité et Sécurité :Le puzzle sera fabriqué avec des matériaux sûrs et durables, facile à transporter et à utiliser dans divers environnements, tels que la maison, l'école ou lors de séances thérapeutiques. Bénéfices Attendus - Développement cognitif : Amélioration des capacités de reconnaissance des formes et des couleurs chez les jeunes enfants, ce qui est crucial dans les premières étapes du développement cognitif. - Compétences Motrices : Renforcement de la motricité fine grâce à la manipulation des pièces du puzzle. - Engagement Sensoriel :Stimulation visuelle grâce à l'utilisation de lumières LED qui attirent l'attention de l'enfant et maintiennent son intérêt. - Apprentissage par le Jeu : Encouragement de l'apprentissage autonome et interactif, qui est souvent plus efficace et mémorable que les méthodes d'enseignement traditionnelles. Veille sur l'Existant La veille technologique indique un intérêt croissant pour les jeux éducatifs intégrant la lumière et d'autres stimuli sensoriels. Des études récentes mettent en lumière l'efficacité des environnements interactifs lumineux dans les jardins d'enfants, qui améliorent la perception spatiale et facilitent l'apprentissage chez les jeunes enfants. En outre, diverses activités pédagogiques utilisant la lumière montrent que des jeux simples tels que ceux exploitant les ombres ou les couleurs peuvent enrichir considérablement l'expérience éducative des enfants, en renforçant la cognition, la reconnaissance des formes et des couleurs, et les interactions sociales à travers le jeu. Impact Potentiel Ce puzzle n'est pas seulement un jouet, mais un outil pédagogique qui pourrait être intégré dans des programmes éducatifs pour enfants en développement typique ainsi que pour ceux qui présentent des retards ou des troubles cognitifs. Il a le potentiel d'être développé en collaboration avec des spécialistes de l'éducation et des thérapeutes pour assurer qu'il répond aux besoins spécifiques de ces groupes. II. Lean Canvas III. Gestion de Projet Le prototype réalisé est un MVP : Version initiale avec deux capteurs Hall et une LED. Pour en arriver là nous avons dédié la première séance de travail de 3h à l'idéation, la conception et au développement d'un premier code simple. Nous avons testé les branchements et également testé quel type de capteur fonctionnait le mieux pour notre prototype. Nous avons aussi testé un prototype de boite pour lequel nous avions un problème de dimensions et de découpage car le paramètre de découpe n'avait pas été bien sélectionné. A la fin de cette première session de travail nous avions donc un code fonctionnel pour un capteur de magnétisme, des branchements fonctionnels pour un capteur et une version de boite pour le puzzle non utilisable. Nous avons donc profité de la deuxième session de travail pour ajuster le code aux deux capteurs. Aussi nous avons analysé ce qui n'avait pas fonctionné lors de notre première création de boite et avons reschématisé et redécoupé une boite avec un couvercle aux bonnes dimensions. Pour finir nous avons assemblé les éléments en les collant au pistolet à colle et amélioré la prise en main des pièces de puzzle en découpant une mini poignée dans du PMA transparent. Nous avons fini cette séance en testant notre prototype. IV. Documentation Des Étapes Avec Documentation technique Initiation du projet Afin de visualiser le matériel nécessaire et le chemin de conception que nous souhaitions entreprendre nous avons réalisé un croquis.  Composants : Arduino Uno Base Shield compatible avec l'Arduino 2 Capteurs Hall 1 LED Résistance de 220Ω Câbles de connexion Planche en bois de 3 mm Planche de Plexis Pistolet à Colle chaude Tests Initiaux du Circuit avec un Capteur Hall Documentation Technique : La première phase du projet a impliqué la mise en place d'un circuit de test avec un seul capteur Hall pour valider les premières lignes de code. Le capteur a été connecté à une Arduino, et le programme a été écrit pour lire les signaux du capteur et activer une LED en réponse à la détection d'un aimant. Commentaires d'Analyse des Erreurs : Lors des premiers tests, il a été nécessaire d'ajuster la sensibilité du capteur pour obtenir une détection précise et fiable. Les seuils initiaux n'étaient pas suffisamment sensibles, entraînant des réponses tardives ou incorrectes de la LED. Intégration d'un Deuxième Capteur Hall Documentation Technique : Une fois le fonctionnement du premier capteur validé, un second capteur Hall a été ajouté au circuit. Le code a été étendu pour inclure la gestion de deux entrées et pour permettre la détection simultanée des deux capteurs, ce qui est essentiel pour le fonctionnement du puzzle complet. Initialisation Les premières lignes définissent les broches auxquelles la LED et les capteurs Hall sont connectés sur la carte Arduino. `LED` est connectée à la broche numérique 12, `HALL1` au port analogique A0, et `HALL2` au port analogique A1. Les variables `tampon1` et `tampon2` serviront à stocker les valeurs cumulées des lectures des capteurs pour calculer une moyenne. `valeur1` et `valeur2` sont les moyennes des lectures pour chaque capteur. `i` est un compteur de lectures. Configuration Dans la fonction `setup()`, la communication série est initiée à une vitesse de 9600 bauds, ce qui permet d'envoyer des données vers le moniteur série de l'IDE Arduino. Les modes des broches sont configurés, avec la broche LED en sortie (`OUTPUT`) et les broches des capteurs en entrée (`INPUT`). Boucle Principale La fonction `loop()` est la boucle principale de l'exécution. Les capteurs sont lus et leurs valeurs ajoutées aux tampons. Le compteur `i` est incrémenté à chaque itération. Tous les dix cycles, les moyennes des lectures sont calculées en divisant les valeurs cumulées par 10. Les tampons et le compteur sont ensuite remis à zéro. - Les moyennes calculées sont imprimées sur le moniteur série. Cela permet de suivre en temps réel les valeurs mesurées par les capteurs. Une condition vérifie si les valeurs moyennes sont en dessous du seuil (dans ce cas, 200), ce qui indiquerait la présence d'aimants près des deux capteurs. Si les deux capteurs détectent un aimant, la LED est allumée (`HIGH`), sinon elle est éteinte (`LOW`). Ce code est conçu pour donner un retour visuel lorsque deux pièces de puzzle équipées de capteurs à effet Hall sont correctement positionnées. Il intègre aussi un élément de débogage (le moniteur série) qui aide à visualiser le processus de détection et à ajuster les seuils si nécessaire Commentaires d'Analyse des Erreurs (en rouge) : L'intégration du second capteur a nécessité des ajustements dans le code pour coordonner efficacement les entrées de deux capteurs. Des problèmes de synchronisation des signaux ont été observés, nécessitant une révision du timing et des seuils de détection dans le code. Par ailleurs le choix de moyenner les valeurs cumulées après plusieurs lectures grâce aux “tampons” s’explique des manières suivantes : L'utilisation d'un tampon et du calcul de moyenne plutôt qu'une simple boucle avec des conditions (`if`) est une méthode de programmation choisie pour plusieurs raisons techniques et pratiques qui améliorent la robustesse et la fiabilité du système : 1. Réduction du Bruit et des Fluctuations Les capteurs, particulièrement ceux à effet Hall, peuvent être sensibles aux interférences ou au bruit électromagnétique. La lecture directe peut donc être instable ou fluctuante. En accumulant les valeurs dans un tampon et en calculant ensuite leur moyenne, vous lissez les données en réduisant l'impact des variations ponctuelles et du bruit, ce qui mène à une lecture plus stable et fiable. 2. Précision Améliorée Le calcul de la moyenne sur plusieurs lectures permet d'obtenir une valeur représentative plus précise de l'état du capteur sur un intervalle de temps. Cela aide à éviter des déclenchements erronés de la LED en cas de lecture accidentelle ou exceptionnelle des valeurs élevées ou basses dues à un pic de bruit ou à une interférence momentanée. 3. Optimisation des Performances Les microcontrôleurs, comme ceux utilisés dans les cartes Arduino, ont des ressources limitées (comme la mémoire et la capacité de traitement). Le traitement par moyenne réduit le nombre de fois où la logique conditionnelle (les `if`) doit être évaluée et exécutée. Cela peut minimiser la charge de calcul et optimiser les performances du microcontrôleur en consommant moins de cycles de processeur 4. Stabilité du Système Dans les systèmes embarqués qui interagissent avec l'environnement physique, il est crucial de maintenir une certaine stabilité dans la réponse. Utiliser un tampon et une moyenne permet de filtrer les changements brusques et non désirés dans les données du capteur, assurant ainsi une réponse plus cohérente et prévisible du système. 5. Adaptabilité Cette méthode permet également une plus grande flexibilité pour ajuster la sensibilité du système. Modifier le nombre de lectures accumulées ou le seuil de déclenchement dans le calcul de la moyenne peut facilement adapter le comportement du système à différentes conditions ou à différents types de capteurs sans changer fondamentalement le code. En conclusion, choisir de calculer une moyenne plutôt que d'utiliser une simple logique conditionnelle directe est une décision de conception qui vise à améliorer la qualité globale des lectures du capteur et la réactivité du système, tout en assurant une intégration efficace et fiable dans l'environnement d'utilisation prévu. Découpe Laser des Pièces du Puzzle Documentation Technique : Parallèlement aux tests des circuits, la conception des pièces du puzzle a été finalisée et les pièces ont été découpées à l'aide d'une découpeuse laser. Cette méthode a permis de créer des pièces précises et esthétiquement satisfaisantes, adaptées au concept du jeu. Nous avons généré une boite de 15cm de largeur sur 15cm de longueur et de 8cm de hauteur d'abord grâce au site ABox - ABox - Boxes (festi.info) qui nous a permit d'avoir le model. Ensuite nous avons exporté le document au format .svg sur Inskcape afin de créer les empiècements des pièces de puzzle et de mettre les formes et contours en rouge pour la découpe laser. Ensuite le fichier a été importé dans le logiciel de découpe laser dans lequel nous avons pu sélectionner le matériau afin que la découpe soit réalisée correctement. Dans notre cas les pièces ont été découpées dans du peuplier et du MDF de 3mm. Commentaires d'Analyse des Erreurs : Le choix initial de l’épaisseur de bois pour la découpe a posé quelques problèmes, notamment dans les réglages. Il a été nécessaire de se reprendre à deux fois pour avoir le résultat souhaité. V-Assemblage Final et Tests d'Intégration Documentation Technique : Tous les composants électroniques, y compris les capteurs et les LEDs, ont été intégrés dans les pièces du puzzle. Des tests d'intégration ont été réalisés pour assurer que le puzzle fonctionnait comme prévu, avec des retours lumineux appropriés lors de l'assemblage correct des pièces. Commentaires d'Analyse des Erreurs : Des ajustements finaux des seuils de détection des capteurs ont été nécessaires lors des tests d'intégration pour garantir une réponse lumineuse cohérente et fiable. Des problèmes de connexions lâches ont également été identifiés et corrigés pour assurer la durabilité et la fiabilité du puzzle. VI-Bilan et Pistes d'Amélioration         Le MVP fonctionne car une fois le puzzle complété par les deux pièces, la LED s'allume et l'impact éducatif du puzzle est appuyé par divers ressources. Cependant en finalisant ce prototype nous envisageons l'intégration d'autres stimuli (auditifs, tactiles). Egalement le stimuli visuel pourrait être plus impactant comme par exemple en connectant l'Arduino en Bluetooth avec une ampoule google permettant d'allumer la lumière dans toute la pièce lors de la réalisation du puzzle.Dans le futur, de nouvelles fonctionnalités interactives pourraient être ajoutées. Le puzzle peut être adapté pour différents niveaux d'âge et capacités notamment avec davantage de pièces comprises dans le puzzle. A long terme, le stimuli visuel ou auditif pourrait même être ajouté à d'autres jeux interactifs. Sources et Inspirations- Tutoriels Arduino pour débutants. Recherches sur les bénéfices des jeux éducatifs multisensoriels : https://www.wonderbaby.org/ https://www.bloghoptoys.fr/qu-offrir-a-un-enfant-porteur-d-une-imc https://www.mdpi.com/ https://blog.arduino.cc/2017/03/10/an-interactive-lea-shapes-puzzle-for-visually-impaired-children/ Projet Fan 3000 : Alina PINTEA / Mathias BENEZETH / Mehdi CHAABI PROJET FAN3000 : Mathias BENEZETH / Alina PINTEA / Mehdi CHAABI I. Définition du projet (besoin, utilisateurs, fonctionnalité principale, fonctionnalités secondaires) Besoin : Le besoin principal de ce projet est de créer un dispositif de ventilation automatique capable de maintenir un environnement frais et confortable dans des espaces restreints ou mal ventilés. Cela répond à la nécessité de réguler la température ambiante pour assurer le confort des utilisateurs, en particulier lorsque la température dépasse un seuil critique. Utilisateurs : Les utilisateurs potentiels de ce produit peuvent être : Les particuliers vivant dans des régions chaudes ou des espaces confinés, comme des studios ou des bureaux sans climatisation. Les entreprises ou institutions cherchant à maintenir des conditions de travail confortables pour leurs employés. Les amateurs de bricolage ou les passionnés de technologies souhaitant expérimenter avec la conception et l'électronique. Fonctionnalité principale : La fonction principale de ce ventilateur intelligent est de réguler automatiquement la température ambiante en activant le ventilateur lorsque la température dépasse 30°C. Il fonctionne de manière autonome sans nécessiter d'intervention manuelle. Fonctionnalités secondaires (hypothétique) : En plus de la fonction principale, les fonctionnalités secondaires pourraient inclure : La possibilité de surveiller et d'afficher la température ambiante en temps réel. La capacité à ajuster la vitesse du ventilateur en fonction de la température. Une interface utilisateur conviviale pour la configuration et le contrôle du dispositif. II. Réflexions sur la problématique et veille sur l'existant Réflexions sur la problématique : Nous avons identifié le besoin crucial de maintenir des conditions de température confortables dans divers environnements, en particulier lorsque la température dépasse des niveaux de confort acceptables. Les solutions de ventilation traditionnelles nécessitent souvent une intervention manuelle pour être activées, ce qui peut être inefficace ou incommode dans certaines situations, notamment lorsque les occupants ne sont pas présents. Il existe une demande croissante pour des solutions de ventilation automatisées et intelligentes qui peuvent s'adapter aux conditions environnementales changeantes et offrir un confort constant. Veille sur l'existant : Nous avons examiné les solutions actuelles sur le marché, y compris les ventilateurs classiques et les systèmes de climatisation. Bien que ces options puissent offrir un certain niveau de confort, elles ne sont pas toujours adaptées aux besoins spécifiques de régulation de la température dans des espaces restreints ou sans climatisation. Nous avons également exploré les projets et les produits similaires développés par la communauté des fabricants amateurs et des innovateurs. Cela nous a permis de comprendre les approches techniques et les fonctionnalités les plus couramment utilisées dans ce domaine. Notre recherche nous a également amenés à découvrir des technologies émergentes telles que les capteurs de température et les microcontrôleurs, qui offrent de nouvelles possibilités pour la création de dispositifs de ventilation intelligents et autonomes. III. Leans Canvas Problème : Besoin de maintenir des conditions de température confortables dans des espaces mal ventilés ou sans climatisation, en particulier lorsque la température dépasse des niveaux de confort acceptables. Solution : Ventilateur intelligent activé automatiquement lorsque la température dépasse 30°C, offrant une ventilation efficace et autonome. Proposition de valeur unique : Confort constant : Fournit une ventilation automatique pour maintenir des conditions de température optimales sans intervention manuelle. Avantages clés : Automatisation : Réduit la nécessité d'interventions manuelles pour activer le ventilateur, offrant un confort continu. Adaptabilité : S'adapte aux conditions environnementales changeantes pour assurer un environnement confortable. Contrôle intelligent : Utilise des capteurs de température et une électronique numérique pour une régulation précise de la ventilation. Segments de clients : Particuliers vivant dans des zones chaudes ou des espaces confinés. Entreprises ou institutions cherchant à maintenir des conditions de travail confortables. Amateurs de bricolage ou passionnés de technologie cherchant des solutions innovantes. Canaux de distribution : Vente en ligne via un site Web dédié. Distribution via des partenaires de vente au détail. Promotion à travers les réseaux sociaux et les communautés en ligne de bricolage et de technologie. Relation client : Service client disponible pour répondre aux questions et fournir un support technique. Collecte de commentaires des clients pour améliorer les fonctionnalités et les performances du produit. Sources de revenus : Vente directe du produit. Modèles de tarification basés sur les fonctionnalités supplémentaires ou les services associés. Coûts clés : Coûts de développement du produit, y compris la conception, l'impression 3D et l'achat de composants électroniques. Coûts de fabrication et d'assemblage. Coûts de marketing et de promotion Métriques clés : Nombre de ventilateurs vendus. Taux d'adoption du produit. Taux de satisfaction client et retours positifs. Coûts d'acquisition client et retour sur investissement marketing. IV. Choix techniques Méthode vue en atelier choisies pour le projet : Impression 3D Le choix de l'impression 3D s'est avéré être la meilleure méthode pour assurer la faisabilité de notre projet. Nous avons ainsi pu imprimer en 3D un socle (pouvant accueillir l'Arduino). Pour la modélisation 3D, nous avons utiliser le logiciel TinkerCad, nous avons ensuite du passer le fichier sous le format STL afin qu'il soit lu et accepté par l'imprimante 3D du FABLAB. Mais également un mat (percé pour laisser passer le câblage et le moteur à courant continu) et les pales du ventilateur. Electronique numérique (Arduino) L'utilisation d'un Arduino nous a permit de réaliser un système automatisé avec capteur de température. V. gestion de projet: "minimum viable product", planification et répartition des taches : MVP :   2. Répartition des tâches : VI. Croquis, dimensions : VII. Liste du matériel : 1. Montage du circuit Arduino Base shield 3 fils Servo moteur Capteur de température 2. Imprimante 3D Tinkercad Clé USB VIII. Fichiers de conception et étapes de création des fichiers (captures d'écran) / code : Code : Nous avons codé l'Arduino afin que ce dernier (à l'aide d'un capteur de températures) soit capable de détecter si la température extérieur est supérieur ou non à 30°C. Si cette température, alors le moteur à courant continu s'active et tourne, si ce n'est pas le cas, ce dernier ne s'active pas. Cela nous permet d'obtenir un ventilateur autonome.   2. Branchement de l'Arduino : IX. Photos et analyse des tests, essais, erreurs : Par manque de temps nous n'avons pas pu réaliser d'autre essais et tests X. Photos des étapes de réalisation du prototype, paramètres des machines : Les paramètres de réalisation du prototype par l'imprimante 3D sont ceux de base indiqué dans le logiciel XI. Photos de l'objet final : XII. Réflexions de pistes d'amélioration ou d'évolution du projet : Pistes d'améliorations : Mieux modéliser notre support de ventilateur afin que l'Arduino ainsi que le moteur et les câbles passent à l'intérieur. Dans notre cas, après des soucis d'impression 3D, nous avons du reprendre notre support en le limant, le découpant et en le perçant afin de tout faire rentrer dedans. Nous aurions aussi pu ajouter des fonctionnalités supplémentaire à notre ventilateur, comme activer une LED en cas de température excessive ou de dysfonctionnement par exemple Modéliser les pales du ventilateur dans le bon sens (elle aspire l'air au lieu de le renvoyant) Choisir de réaliser le support du ventilateur à la découpeuse laser et non en impression 3D (gain de temps) Le projet pourrai être améliorer en réalisant un meilleur support (boitier du ventilateur), en augmentant la puissance du moteur de sorte que les pales tournent plus vite et refroidissent mieux. XIII. Sources des tutoriels, inspirations, ressources utilisées : Utiliser un VENTILATEUR en fonction de la température | ARDUINO #39 https://www.youtube.com/watch?v=OxIKGukcAQo Comment utiliser un ventilateur à une certaine température https://www.youtube.com/watch?v=mjpuNY300x8 Remerciements Khaira Le monsieur qui nous a prêter sa clé et a vérifier que l'impression se passait bien Mr. Stéphane Muller Le papa d'Alina Projet 2 : Conception d'une boîte à bijoux (Zahra & Farah) Projet d'UE UE COREPS MU4BM291 Concevoir et réaliser un projet scientifique Groupe Effet Antioxydant des graines de Chia Un modèle de documentation minimal pour tous les types de projets. Toutes les catégories ci-dessous doivent être renseignées, même de façon succincte.IMPORTANT : Merci de sélectionner le / les tags adéquats dans le menu de droite, et de ne pas créer de nouveau tag.Les fichiers sources doivent idéalement être joints à cette page grâce à l'icône trombone du menu de droite.Des hésitations sur comment bien documenter et utiliser l'interface ? Consultez le tutoriel "Comment documenter" Informations Varvara PROSVIRKINA et El Cheima Mhamedi Adresse mail: varvara.prosvirkina@etu.sorbonne-universite.fr et Cursus / Laboratoire / Association: Master 1 BMC tronc commun Date de début - Date de fin estimée (ou réelle) : 26/03/2024 - 01/06/24 Contexte Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec et mauris non ipsum tincidunt euismod. Donec sed accumsan sem. Proin odio sem, vehicula a suscipit et, efficitur quis diam. Nam in enim a ex bibendum ultricies. Suspendisse in mauris sit amet felis cursus condimentum. Objectifs Nulla imperdiet mattis neque non vehicula. Aliquam aliquam ac lectus non euismod. Nulla facilisi. Fusce fermentum enim magna, vel consectetur sem malesuada eu. Integer ac iaculis magna, dictum posuere neque. Sed pretium dignissim arcu, vel maximus felis cursus in. Ajouter au moins une image de votre projet Matériel 1 planche de CP peuplier 3mm (dimensions 300*600mm) scotch de peintre colle à bois cutter papier de verre grain moyen (80-100) Machines utilisées Trotec Speedy 100 Construction (Fichiers, photos, code, explications, paramètres d'usinage, photos, captures d'écran...) Étape 1 - Pré-experimentation ---- Étape 2 - Experimentation ---- Étape 3 - Rédaction de Poster ---- Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) Étape 1 - Pré-experimentation 26/03/2024 Prémier jour au fablab. Duis tincidunt mattis sollicitudin. Aenean posuere sapien a metus consectetur, ut blandit tellus finibus. Vivamus convallis tincidunt metus, ut fringilla eros gravida nec. Cras dignissim urna et vestibulum feugiat. Phasellus tempor, nunc quis lobortis volutpat, dolor arcu fermentum elit, in eleifend enim sem fringilla metus. 🚨 Donec quis libero vehicula, varius tortor quis, vehicula libero !!! Cras ultricies tempus ante gravida hendrerit. 11/04/2022 Phasellus in purus quis justo feugiat vestibulum quis eu lacus. 😎 Etiam maximus metus vel massa pharetra convallis. Curabitur vel nunc orci. Praesent dolor dui, laoreet non massa non, pellentesque vestibulum quam. Sed posuere, dui quis semper pulvinar, eros nibh commodo elit, nec auctor arcu est et purus. 18/04/2022 Maecenas interdum turpis sit amet rutrum elementum. Aenean eget accumsan ligula. Phasellus et scelerisque lectus. Cras vel venenatis nulla. Integer tristique non diam et molestie. Pellentesque condimentum enim arcu, in commodo nunc commodo vel. Integer vitae neque facilisis, mattis elit sit amet, gravida turpis. Maecenas lectus mauris, fringilla ut lectus eu, condimentum finibus tortor 🤩🤩🤩 02/04/2024 Jour 5 03/04/2024 Jour 6 L'extraction hydrosoluble et la farine de graines de chia a été réalisé vendredi 05/04 Final tous est congelé . 05/04/2024 Jour 7 L'extraction hydrosoluble et la farine de graines de chia a été réalisé vendredi 05/04 Final tous est congelé . 08/04/2024 Jour 8 10h24 Le retour au labo pour vérifier les résultats et travail fait la semaine dernière (pendant mon absence). Pas de cahier de labo sur moi car elle est tjs en possession de Cheima. Je retrouve 19 boites solides vides et 3 cultures liquides au frigo à 4°C. 14h08 Retour au laboratoire La relance de culture On a fait la mesure de la DO dans l'erlen avec D.O noté 1,2. On a obtenu le D.O de 0,3585 après les 2 mesures. Les calculs de DO final et Volume à prélever pour commencer semensement demain à 10H On obtient le résultats de Vi= 27,2 microlitres pour le volume de 100 mL pour avoir le DO=0,2 demain à 10H. Cellules sont mis à l'incubateur à 15H08 et ressorti pour l'ajout d'antiiotiques à 15H16 (100 microlitres). Remis sous l'agitation à 15H20. ! 15h55 La culture est mis dans l'incubateur à 28°C à la place de 30°C recommandé du à manque de place. La dilution de H2O2 Les concentrations à ajouter dans les cultures sont defini avant - 0mM 0,2mM 0,5mM 1mM. fait les ajout à partir de la solution mère de 100 mM (dilution fait à partir de solution de 9.2M par l'ajout de 109 microlitres dans 10 mL de l'eau sterile). 09/04/2024 Jour 9 10h05 - Arrivé au labo. On a mesuré la D.O de culture mis en route hier. D.O.= 0,15 On remis la cultute à l'incubateur pour encore 40 minutes. LU2ME112 Romarin - Conception d'un robot pour l'observation sous-marine Le projet RoMarin est un module d’enseignement proposé en seconde année de Licence de Mécanique à la Faculté des Sciences et Ingénierie de Sorbonne Université. Chaque année, jusqu’à 16 équipes de 2 étudiants, doivent concevoir, en partant de zéro, un drone sous-marin équipé de capteurs pour l’exploration de fond marins. Ce module d’apprentissage par projet a été crée par Didier Lucor en 2008 en s’inspirant librement du projet SeaPearch du MIT. Dans le cadre de la deuxième phase du projet, les étudiants sont amenés à faire évoluer l’équipement de leur robot afin de réaliser un objectif technique. Pour cela les étudiants peuvent laisser libre cours à leur imagination au moyen de logicels de conception assistée par ordinateur et fabriquer leurs propres mécanismes en utilisant des techniques d’impression 3D ou de découpe laser, ainsi que des environnements électroniques open-sources pour la robotique, tels que les plateformes Arduino, Raspberry Pi ou Beaglebone. C’est ainsi que plus d’une soixante de réalisations ont pu voir le jour depuis 2017, telles que l’équipement d’un RoMarin d’un sonar (Sondeur sur Seine), la construction d’un planeur autonome (Glider), ou l’élaboration RoMarin wifi (RoMarin du futur). Certaines de ces réalisations ont fait l’objet d’expérimentations en mer à l’Observatoire Océanologique de Banyuls en juin 2018 et 2019. Projet SonaROV : un robot sous-marin autonome Présentation du projet Informations Michal Drozd | Victor Rashed-Mohassel | Léo Élies michal.drozd@etu.sorbonne-universite.fr | victor.rashed-mohassel@etu.sorbonne-universite.fr | leo.elies@etu.sorbonne-universite.fr L2 Mécanique Mono-Intensif | L2 CMI Mécanique | L2 Mécanique Mono-Intensif 01/03/2024 - 03/05/2024 Contexte L'UE Romarin  est un projet de L2 qui consiste à concevoir un ROV (ou Remotely Operated Vehicle). Dans une première partie du projet, la structure du robot a été construite, ainsi que l'installation de toute la partie électronique a été effectuée (moteurs, capteurs de pression, température et luminosité, construction d'une télécommande). Dans un second temps, nous nous sommes penchés sur l'amélioration de ce premier robot sous-marin. Le but du projet était alors d'acquérir une donnée envoyée par des capteurs, de la traiter pour pouvoir piloter les moteurs. Le robot pourrait détecter un objet dans l'eau et se diriger vers lui automatiquement sans l'intervention d'un opérateur. Nous avons décidé de collaborer avec un autre groupe, qui s'est chargé de concevoir une pince robotique, permettant d'attraper l'objet détecté. Vous trouverez plus d'informations concernant le projet sur le site suivant : https://romarinsu.wordpress.com/ Objectifs Concevoir un système de détection d'objet L'assembler sur le robot (CAO) Réaliser l'asservissement du robot Étapes 1. Système de détection d'objets Nous avons décidé d'utiliser des capteurs à ultrasons fonctionnant dans l'eau. À l'aide de deux servomoteurs nous avons construit un système qui balaie l'espace (de gauche à droite et de haut en bas). De cette manière, pour chaque point de l'espace nous obtenons une distance. Il est donc possible de reconstruire une pièce en 3 dimensions par exemple. Nous avons utilisé 3 capteurs afin d'améliorer la précision. Cette étape consistait à concevoir ce système sur le logiciel Solidworks. Les capteurs latéraux font office de système anti-collision. Si une paroi, risquant de rentrer en collision avec le ROV est détectée, les moteurs sont coupés. 2. Impression des pièces sur imprimante 3D 3. Réalisation de l'asservissement du robot Le code a été réalisé en Arduino. Nous avons utilisé une carte Arduino UNO. Journal de bord 02/04/2024 Impression du support triangulaire qui sert à la disposition des 3 capteurs. Imprimante 3D : Raise 3D Pro 2 Plus Matériau : PLA Noir 13/05/2024 Impression de la pièce permettant la liaison avec la pince robotique d’un autre groupe. Imprimante 3D : Raise 3D Pro 2 Matériau : PLA Noir 16/05/2024 Modification du support triangulaire qui sert à la disposition des 3 capteurs et réimpression. L'ancien s'est cassé. Imprimante 3D : Raise 3D Pro 2 Matériau : PLA Noir Rapport détaillé https://romarinsu.wordpress.com/sonarov-2024/ Projet legorov Impression de piece de support en 3d nécéssaire à la réalisation d'une transmission par couplement magnétiqueLU3CI019 - Label Vert 2 Construction d'une biopile microbienne MFC Informations Membres du groupe : Elise BARRABES (elise.barrabes@etu.sorbonne-universite.fr) Adam CHABIRA (adam.chabira@etu.sorbonne-universite.fr)                                                    Jack EL HADDAD (jack.el_haddad@etu.sorbonne-universite.fr) Stefan KOLEV (stefan.kolev@etu.sorbonne-universite.fr) Santiago LABALE (santiago.labale@etu.sorbonne-universite.fr)                                                                              Cursus :       Double Majeure Chimie - Sciences de la Vie Date de début - fin :       Septembre 2023 - Mai 2024 Contexte Dans le cadre de l'UE Label Vert (LU3Ci019), nous avons développé un projet en lien avec la Chimie Verte. Nous avons choisi de concevoir et construire une biopile microbienne utilisant l'eau de la Seine comme source de bactéries. Objectifs Nous souhaitons obtenir un courant à partir de la biopile microbienne. Photographie des deux biopiles microbiennes Matériel Matériel pour la fabrication de la biopile : Cube PMMA 10cm de coté (x2) Plaque 3mm PMMA coulé maille en inox type 304 3,8 cm 50*50 Joint torique 90mm de diamètre (x4) tige fileté 1cm de diamètre de 1m écrous 1cm (x16) rondelle en métal (x16) tige en graphite 1cm de diamètre (x2) fils de graphite Membrane échangeuse d'ion WD 40 Pistolet à spray Câble pince crocodile (x4) Résistances de 1000 Ω (x2) Outils : Pistolet à colle et 1 tube Scie à métaux Pince coupante Perceuse Mèches de 1,1 ; 0,8 cm Scie-cloche de 74mm Clé de 17 ciseau à bois Marteau Verrerie chimique : Chauffe ballon vortex ballon de 100 mL Colonne à reflux béchers cristallisoir Produits chimiques : PVDF N,N-diméthylacétamide Glutéraldéhyde Charbon actif PVA PBS Machines utilisées Trotec Speedy 360 Perceuse à colonne CONSTRUCTION : (Fichiers, photos, code, explications, paramètres d'usinage, photos, captures d'écran...) Étape 1: Fabrication de la cellule -Percer le centre du cube à l'aide de la mèche de et de la scie cloche en utilisant la perceuse à colonne, et en enduisant préalablement la scie cloche de lubrifiant (WD40). Creuser des sillons de 3cm de profondeur puis extraire l'excédent de matière avec le ciseau à bois et le marteau. -Percer des trous aux 4 coins avec la mèche de 1,1cm à 0,75cm d'écart des bords. Percer un trou sur le dessus à 2,5cm du bord de 1,1cm de diamètre pour l'anode et un autre de 0,3cm de l'autre coté pour remplir et vider la cellule d'eau. -Découper au laser des faces en plaque de PMMA (carré de 10cm de coté avec des trous de 1.05 cm aux 4 coins).Percer 2 des 4 faces pour que les cathodes puissent être en contact avec l'extérieur. -Scier de la tige fileté (tiges de 12,5 cm de long). -Assembler la cellule grossierement pour s'assurer que tous les éléments s'assemblent bien. Étape 2: Fabrication de la cathode -Découpage de la maille en fer en disques de 8cm de diamètre -préparation d'une solution 10% de PVDF dans du N,N-diméthylacétamide puis ajouter 1.8 g de charbon actif à 6 mL de solution et étaler la préparation sur le disque jusqu'à avoir une couche de 2-3 mm d'épaisseur. -Déposer le disque dans un cristallisoir remplie d'eau distillé (préparation face à l'eau) et laisser reposer 8h (La cathode se conserve dans l'eau pour éviter qu'elle craque) Étape 3: Fabrication de la membrane maison -Dissoudre 2g de PVA dans 100 mL d’eau distillée à 85°C sous agitation magnétique. -Ajouter goutte à goutte 100 mg de Glutaraldéhyde, et continuer à agiter pendant 15 minutes. -Vaporiser la solution 8 fois sur la cathode pour obtenir une couche uniforme et épaisse en laissant sécher 15 min entre chaque couche. Etape 4: Fabrication de l'anode -Creuser des sillons sur toute la longueur de la tige de carbone, puis enrouler les fils de graphite autour de ces sillons Etape 5: Montage de la pile -Ouvrir la cellule et placer l'anode dans le trou prévu à cet effet et la fixer avec de la colle chaude. -Insérer les tiges filetées dans le cube et la face non percé en coinçant le joint entre les 2. Ensuite on visse les rondelles et les écrous. -Placer de l'autre coté la cathode (et la membrane), le joint et de la colle chaude avant de presser la face percé et de la serrer avec les vis -Préparer une solution 1:1 eau de la Seine:PBS et remplir la cellule. -Dégazer à l'aide d'un ballon remplie de diazote -Fermer le circuite en reliant la cathode à la résistance et l'autre pôle de la résistance à l'anode PROTOCOLE DE MAINTENANCE : Matériel : Béchers Éprouvette graduée 250 mL Pipette graduée 25 mL Spatule Coupelle Balance Agitateur magnétique + barreau aimanté Seringue Ruban adhésif D-glucose Tampon phosphate Eau de la Seine Ballon d'azote Multimètre Microscope optique Lames et lamelles Papier pH Mesures et observations à effectuer : Mesure du courant et de la différence de potentiel avec un multimètre avant maintenance. Mesure du pH de l'eau de la biopile avant maintenance à l'aide de papier pH. Observations des bactéries avant maintenance montées entre lame et lamelle au microscope optique. Préparation de la solution : Dans une éprouvette graduée de 250 mL, ajouter 200 mL d'eau de la Seine Ajouter ensuite 20 mL de tampon phosphate prélevé à l'aide d'une pipette graduée Verser le tout dans un bécher Peser 0.22g de D-Glucose Les ajouter dans le bécher Placer sur l'agitateur magnétique jusqu'à dissolution totale du glucose Vider la solution des piles : Enlever le scotch couvrant le trou À l'aide d'une seringue, prélever environ 110 mL d'eau de la biopile Vider le contenu dans un bécher Réitérer l'opération pour la deuxième biopile Remplir avec la nouvelle solution : À l'aide d'une seringue, prélever 110 mL de solution nouvellement préparée Remplir la biopile Réitérer l'opération pour la deuxième biopile Remarque : il faut faire attention à ne pas remplir trop vite pour ne pas mettre trop de pression Bullage avec de l'azote : Prendre un ballon d'azote et le fixer hermétiquement à une seringue Insérer la seringue dans trou et faire buller l'azote à un flux faible à modéré dans la biopile pendant environ 15-20min Réitérer l'opération pour la deuxième biopile Remettre du scotch sur le trou Journal de bord Avancée du projet à chaque étape, difficultés rencontrées, modifications et adaptations (facultatif pour les petits projets) 08/04/2024 Utilisation de la perceuse à colonne et des outils du Fablab prototypage (menuiserie) pour percer le cubeJack et Adam 09/04/2024 Utilisation de la perceuse à colonne et des outils du Fablab prototypage (menuiserie) pour percer le cubedécoupage des faces avec la Trotec 360Découpage de la maille de fer à l'aide d'une pince coupanteJack et Adam 10/04/2024 Perçage du 2ème cube à l'aide d'une scie-cloche acheté n'ayant pas de bordureCreusage de sillons sur les faces avec la Trotec 360 Découpage des tiges filetésJack et Adam 11/04/2024 Fabrication des cathodes au Fablab biologieFabrication des anodesJack et Adam 12/04/2024 Préparation de la membrane et application 15/04/2024 Montage de la pile 16/04/2024 Remplissage de la pile 17/04/2024 Maintenance effectuée par Jack. 18/04/2024 Maintenance effectuée par Santiago. 19/04/2024 Maintenance effectuée par Santiago. 22/04/2024 Maintenance effectuée par Adam et Elise. 23/04/2024 Maintenance effectuée par Stefan et Santiago. 24/04/2024 Maintenance effectuée par Elise. 26/04/2024 Maintenance effectuée par Adam, Jack, Santiago et Elise. 29/04/2024 Maintenance effectuée par Stefan. 30/04/2024 Maintenance effectuée par Adam et Elise. 03/05/24 Maintenance effectuée par Santiago et Elise. 06/05/24 Maintenance effectuée par Santiago et Elise. 07/05/24 Maintenance effectuée par Santiago et Jack. 17/05/24 Maintenance effectuée par Adam. RENDU DU PROJET : Lien de la vidéo montée résumant la fabrication de la biopile, les résultats obtenus et une partie de l'interview faite avec le Dr. Grégory Bataillou, un expert en biopiles à base de plantes et traitement des eaux usées : https://youtu.be/SLAV8Pdndgs?si=sH_8y_83jl91reCE Extraction du chitosane et élaboration d'un film alimentaire biosourcé Informations Lucie Granjeon (L), Stéphanie Siek (S), Rozelin Yilmaz (R) lucie.granjeon@etu.sorbonne-universite.fr ; stephanie.siek@etu.sorbonne-universite.fr ; rozelin.yilmaz@etu.sorbonne-universite.fr Licence 3 monodisciplinaire chimie 25/03/2024 - 12/04/2024 Contexte A l'heure où la chimie a besoin de se détacher du prétrosourcé et alors que 8 millions de tonnes de déchets de crustacés sont produits par an, la valorisation de ces déchets pour obtenir du chitosane est une alternative prometteuse. Ce biopolymère présente en effet de nombreuses propriétés et applications potentielles, notamment la capacité de former des films, ce qui ouvre la voie à des applications aussi bien dans le domaine de l'agroalimentaire que dans le domaine médical. Objectifs Montrer que les déchets alimentaires sont une source de biopolymères qui peuvent être une alternative aux films alimentaires en polyéthylène Tester et comparer la capacité du film à préserver un fruit par rapport au film en polyéthylène Évaluer la biodégradabilité du film et sa solubilité et comparaison avec les films en polyéthylène Matériel Papier pH Barreau aimanté Plats de cuisine en verre borosilicaté trempé Mixeur/broyeur de cuisine Boîtes de pétri en verre Fritté (porosité 1) Fiole à vide Coupelles de pesée Spatule Pipette graduée de 10 mL Fioles jaugées ( volume à adapter en fonction des besoins) Béchers en verre ( volume à adaptateur en fonction des besoins) Eprouvettes graduées ( volume à adapter en fonction des besoins) Micropipettes Flacons (contenance à adapter en fonction des besoins) Produits utilisés Chitosane de faible poids moléculaire (n° CAS : 9012-76-4) pastilles de NaOH (n° CAS : 1310-73-2) HCl 37% (n° CAS : 7647-01-0) Hypochlorite de sodium 14% Cl 2 en solution aqueuse (n° CAS : 7681-52-9) Acide lactique de qualité technique (n° CAS : 79-33-4) Glycérol anhydre (n° CAS : 56-81-5) acide acétique glacial pour analyses (n° CAS : 64-19-7) Machines utilisées Sorbonne fixe Centrifugeuse réfrigérée (modèle : Sirena ; fabricant : Afi) Etuve universelle ventilée 112 litres (300°C) (modèle : XUE112 ; fabricant : France étuves) Agitateur magnétique chauffant (fabricant : IKA RCT) Pompe à vide (modèle : N022AN ; fabricant : KNF) Balance d'analyse max 320 g à 0,1 mg (modèle : ABS 320-4M ; fabricant : Kern) Spectromètre FT-IR (modèle : Spectrum Two ; fabricant : PerkinElmer) Étapes du projet Étape 1 : Réaliser un film à partir de chitosane commercial (1)(3) Étape 2 : Extraire le chitosane des déchets de crevettes (2) Étape 3 : Réaliser un film à partir d'extrait de chitosane Étape 4 : Etude de la biodégradabilité (hors Fablab), de la capacité à préserver une banane (hors Fablab) et de la solubilisation du film dans l'eau Journal de bord 25/03/2024 : (R+L+S) Objectif : préparer une solution pour former des films à base de chitosane commercial en premier test pour avoir une idée de volume de solution à utiliser pour avoir une épaisseur de film satisfaisante ainsi que tester la façon de les décoller. Protocole suivi pour la formation de 3 films avec chitosane commercial : Préparer une solution acide dans une bécher en verre de 250mL : 100mL eau distillée + 2 mL acide lactique prélevé à la pipette graduée  masse d'eau pesée : 100,4154 g  → l'acide lactique est un peu visqueux Agitation magnétique de la solution pour homogénéiser (quelques minutes) Ajouter 1g de chitosane commercial et laisser sous vive agitation pendant 1h à température ambiante masse de chitosane pesée : 1,0019g → la solution passe de trouble à presque limpide et à une certaine viscosité Prélever 30 mL, 25 mL et 47 mL de solution à l'expériencette graduée et verser chacun de ces volumes dans des plats de cuisine en verre borosilicaté. Veiller à ce que la solution recouvre toute la surface du moule.  → Ayant un protocole pour 100mL de solution, nous avons choisi d'utiliser toute la solution pour préparer des films en testant différents moules et différentes épaisseurs Figure 1. Moules de cuisine en verres utilisés pour couler les 3 solutions de film. Laisser évaporer 48h à température ambiante sous la sorbonne. 26/03/2024 Hors Fablab (S) : Objectif : récupérer des déchets de crevettes et les faire sécher avant de commencer l'extraction de la chitine Mode opératoire suivi : Décortiquer 200g de crevettes entières cuites (penaeus vannamei) et récupérer les têtes et les carcasses. Effectuer 5 lavages avec de l'eau du robinet filtrée à température ambiante : immerger les carcasses dans un récipient et mélanger pendant 1 min, vider l'eau et recommencer.  → L'eau des premiers lavages est très rose et trouble et n'est quasiment plus colorée au bout du 5e lavage  → Le nombre de lavages a été déterminé en fonction de la couleur de l'eau de lavage Rincer à l'eau déminéralisée : placer les carcasses dans une passoire et verser de l'eau déminéralisée de façon à bien rincer. Egoutter et mettre à sécher : placer sur une plaque de four et mettre à sécher au four domestique dans les conditions suivantes : - consigne du four réglée sur 30°C, température à l'intérieur du four contrôlée avec un thermomètre : 25°C, durée : 4h  - consigne du four réglé sur 40°C, température à l'intérieur du four : 30°C, durée : 5h Durée totale du séchage : 9h → En milieu de séchage, les têtes ont été émiétées pour accélérer le séchage Résultat : masse de caracasse récupérée après séchage : 20g → quantité insuffisante par rapport à la quantité estimée pour obtenir au moins 1g de chitosane (environ 70g de déchets) Figure 2. Caracasses de crevettes après séchage 27/03/2024 (R) : Objectifs :   - préparer la solution de soude pour la 1ère étape de l'extraction                    - Décoller les films en chitosane et relancer une autre préparation Mode opératoire suivi pour la préparation de la solution de NaOH 2M  : → Un ratio solvant solide de 1:6 est nécessaire. En attendant la masse finale des déchets obtenus, nous avons préparé 250mL de solution de NaOH 2M (pour environ 40g de déchets séchés augmentés) Peser 17,664 g de pastilles de NaOH dans un flacon de 250mL Peser 220,82 g d'eau distillée dans un bécher Ajouter l'eau dans le flacon, boucher et agiter Démoulage des films réalisés le 25/03/2024 (chitosane commercial) : 25 mL : épaisseur trop fine pour pouvoir décoller le film 30 mL : pas assez épais donc cassant 47 mL : bonne épaisseur mais difficile de le décoller → préparation de nouvelles solutions à partir du chitosane commercial avec un peu plus de volume pour réussir à décoller Mode opératoire suivi pour la préparation d'une nouvelle solution de film avec le chitosane commercial : même protocole que celui du 25/03 répartition de la solution dans les moules :  - test de tremper la banane dans la solution → échec - 30mL de solution dans le moule de taille moyenne (20 x 30cm) - test de verser de la solution sur du papier cuisson → n'adhère pas  - 20mL dans une boîte de pétri en verre de 20cm de diamètre 27/03/2024 Hors Fablab (S) : Objectif : Récupérer plus de déchets de crevettes pour l'extraction Mode opératoire suivi : même protocole que le 25/03/2024 Température : consignée réglée sur 40°C, température à l'intérieur du four : 30°C Durée de séchage : 8h Résultats : masse de déchets avant séchage : 276g masse déchets après séchage : 39,104g  → même espèce de crevettes mais plus gros calibre. La masse récupérée est supérieure à celle estimée, nous avons donc besoin de repréparer de la solution de NaOH 2M pour la déprotéinisation 28/03/2024 (L) : Objectifs : - broyer les déchets de crevettes                   - repréparer une solution de NaOH 2M pour la déprotéinisation pour en avoir suffisamment Mode opératoire suivi pour la préparation de la solution de NaOH 2M pour 30 g de carcasses : Peser 13,331 g de pastilles de NaOH Peser 164,90 g d'eau distillée Additionner l'eau et la soude dans un même bécher Conserver la solution dans un flacon Broyage des déchets de crevettes : à partir d'un mixeur/broyeur de cuisine en plusieurs fois de façon à obtenir la poudre la plus fine possible. Résultat : Masse totale avant broyage : 59,104 g Masse totale de déchets récupérés après broyage : 58,836 g Figure 3. Poudre de déchets de crevettes sèches après broyage 29/03/2024 (R+S) : Objectifs : - 1ere étape de l'extraction : déprotéinisation                  - Démoulage des films préparés le 27 mars                   - rebroyer la poudre de déchets de crevettes pour qu'elle soit la plus fine possible Résultats du rebroyage de la poudre de crevettes : Figure 4. Poudre de déchets de crevettes après 2e broyage Mode opératoire suivi pour l'étape de déprotéinisation : Additionner la totalité de la poudre de déchets de crevettes et 350 mL de solution de NaOH 2M prelevés à l'expérience graduée (rapport solide solvant 1:6) dans un bécher en verre de 500mL Ajouter un barreau aimanté et laisser sous agitation pendant 1 h à 30°C sur un agitateur magnétique chauffant → mélanger assez épais et visqueux Filtrer sur fritté → la pompe chauffe rapidement et la solution bouche le fritté et manque de temps : tout rassembler dans un bécher recouvert de parafilm et choix d'une nouvelle méthode pour récupérer le solide la prochaine fois Figure 5. Montage utilisé pour la filtration Résultats du démoulage des films : film dans la boîte de pétri : difficultés à décoller, se déchirer film dans le plat de cuisine : bords un peu difficiles et bien collés mais décollage du film quasi entier réussi mode opératoire pour décoller le film : faire les contours du film avec un outil pointu puis à l'aide d'une pince en métal décoller délicatement un bord, terminer de tirer le film hors du moule à la main est plus simple et éviter de la casser. 02/02/2024 : (R) Objectifs : - fin de la déprotéinisation  - 2e étape de l'extraction : déminéralisation Mode opératoire suivi pour la fin de l'étape de déprotéinisation : filtration à l'aide d'un filtré → échec Centrifuger les solutions à 3500 tr/min pendant 20 minutes à 25°C Jeter le surnageant Récupérer le résidu solide et le laver à l'eau distillée jusqu'à pH neutre, centrifuger entre chaque lavage, 10 lavages réalisés, perte de produit masse obtenue : 44,99 g Mode opératoire suivi pour préparer la solution d'HCl 1.5M prélever 125ml d'HCl 37% mettre les 125 ml dans une fiole jaugée de 1 L. ajouter de l'eau distillée dans la fiole jusqu'au 2/3. agitateur Compléter jusqu'au trait de jauge avec de l'eau distillée. Mode opératoire suivi pour l'étape de déminéralisation : Ajouter tout le solide dans une solution de HCl 1.5M avec un ratio solvant solide de 1:12 Dans un bécher ajouter 44,99 g de la poudre de déchet de crevette, 540 ml de la solution de HCl à 1,5 M. Agiter pendant 1h à température ambiante Centrifuger les solutions à 3500 tr/min pendant 20 minutes à 25°C, jeter le surnageant la masse obtenue :  40 g mettre à l'étuve le produit obtenue à l'étuve à 85°C pendant toute la nuit 03/04/2024 (S) : Objectif :   - Etape de développement                  - Repréparer une solution de formation de film avec le chitosane commercial pour tester la reproductibilité Préparation de la solution de NaOCl 5% :  dilution de la solution par 2,5 Dans une éprouvette graduée de 25mL, verser 10mL de solution de NaOCl 14% et compléter jusqu'à 25mL avec de l'eau distillée Résultats de la déminéralisation après une nuit à l'étuve : masse obtenue : 2,1509g → grosse perte de produit bien supérieure à celle attendue.... Figure 6. Chitine obtenue après une nuit de séchage à l'étuve Mode opératoire suivi pour l'étape de fabrication : Mélanger la totalité de la poudre de chitine obtenue dans 25mL de solution de NaOCl 5% ( ratio solide : solvant de 1:10) Agiter pendant 30 min à température ambiante Figure 7. Solution décolorée après 30min d'agitation Centrifuger la solution pour récupérer le solide : 10 000rpm à température ambiante pendant 10 min Laver à l'eau distillée pour retirer l'excès de NaOCl puis recentrifuger pour récupérer le solide → la vitesse et la durée de rotation de l'étuve sont à adapter de façon à ce que le moins de solide possible reste dans le surnagent. Le retrait du surnagent se fait le plus délicatement possible et est terminé à la pipette pasteur en plastique de façon à perdre le moins de produit. Le reste d'eau difficile à éliminer sans trop perdre de produit est évaporé à l'étuve. Placer dans une boîte de pétri en verre et mettre à sécher à l'étuve à 85°C toute la nuit Résultats :  La réalisation a fonctionné Mode opératoire suivi pour la solution de formation du film :  même mode opératoire suivi que le 25/03/2024, solution coulée dans 2 boîtes de pétri en verre et un plat de cuisine 04/04/2024 (S) : Objectifs : - préparation d'une solution de NaOH 60% pour l'étape de déacétylation                  - Etape de déacétylation de la chitine en chitosane                  - Caractérisation IR de la chitine                   - préparation de solutions de films avec le nouveau protocole qui utilise du glycérol Mode opératoire suivi pour la préparation d'une solution de NaOH 60% : Peser 60g de pastilles de NaOH dans une fiole jaugée de 100mL Compléter au trait de jauge avec de l'eau distillée  → très exothermique !! Boucher et agiter → perte de volume donc rajouts réguliers d'eau distillée jusqu'au trait de jauge puis également juste avant l'utilisation de la solution Résultats de l'étape de fabrication après une nuit à l'étuve : La poudre est bien décolorée Figure 8. Chitine décolorée après une nuit à l'étuve masse obtenue : 1,5682g  → perte de masse attribuée au lavage par centrifugation et au transfert du tube à centrifuger dans la boîte de pétri Mode opératoire suivi pour l'étape de déacétylation : Dans un bécher, ajouter toute la chitine obtenue dans 15mL de solution de NaOH 60% prélevée à l'expériencette graduée (rapport solide : solvant 1:10) Agiter pendant 1 h à température ambiante avec un agitateur magnétique Figure 9. Solution de chitine dans NaOH 60% après agitation → La couleur de la solution est liée à la forte concentration en NaOH et non à l'échec de la fabrication. Centrifuger et laver le mélange à l'eau distillée jusqu'à pH neutre :  10 000rpm pendant 10min   → manque de temps, seulement 2 rinçages réalisés et pH encore très basique (14 avec papier pH) → durées et vitesses de centrifugation variables pour optimiser au mieux le temps et la quantité de solide récupérable au fond du tube → Les mêmes précautions que pour la fabrication sont prises pour éliminer le surnagent Placer le solide obtenu dans une boîte de pétri en verre et placer pendant une nuit à l'étuve à 85°C Mode opératoire suivi pour la préparation de films avec le nouveau protocole à base de glycérol :  Nous testons un autre protocole pour faire un film à partir de chitosane qui utilise du glycérol pour voir si nous arrivons mieux à le décoller (3) Dans une coupelle de pesée, peser 2g de chitosane commercial Dans un bécher en verre de 250mL : peser 0,6g de glycérol prélevé à la pipette pasteur en plastique  → très visqueux introduire dans le bécher 100mL d'eau distillée prélevée à l'expériencette graduée Ajouter dans le bécher 1mL d'acide acétique glacial à la micropipette Ajouter la poudre de chitosane commerciale dans le bécher Agiter pendant 1h à 60°C  → consigne de l'agitateur magnétique chauffant réglé à 65°C et 380 tr/min Verser 25mL dans une boîte de pétri en verre de 16cm de diamètre, 25mL dans une boîte de pétri en verre de 15cm de diamètre et 50mL de solution dans le plat de cuisine en verre de 20 x 30cm Manipulations concernant le séchage des films : moule de solution de film réalisé la veille placé 2h à l'étuve pour accélérer le séchage Caractérisation IR-ATR de la chitine : Nous repérons la bande caractéristique de la chitine : l'élongation CO amide à 1621,54cm-1 05/04/2024 : (L+S) Objectifs : - Caractérisation IR du produit obtenu après déacétylation - Démoulage des films préparés le 03 avril avec le 1er protocole (sans glycérol) Résultats de l'étape de déacétylation : masse obtenue après une nuit à l'étuve : 0,43g Figure 10. Chitosane obtenu après une nuit à l'étuve → la couleur vient de la soudure pas encore rincée Résultats de démoulage des films préparés le 3 avril (sans glycérol) : Film trop collant, décollage difficile en lambeaux  →  Nous avons noté que la meilleure façon de nettoyer les moules contenant du film que nous n'arrivions pas à décoller est de verser un peu d'eau dans le moule et de racler les parois avec un outil décollant ainsi le film en solubilisant dans l'eau. Cela nous a permis de démontrer une autre propriété des biofilms en chitosane : leur solubilité dans l'eau contrairement aux films en polyéthylène. Caractérisation IR ATR du produit obtenu :  rouge : spectre IR-ATR du chitosane commercial noir : spectre IR - ATR du chitosane extrait  → on note une bonne superposition des 2 spectres qui confirme que le produit obtenu est bien du chitosane. La bande amide à 1622cm-1 est plus intense sur l'extrait de chitosane que le commercial, il est donc moins déacétylé. Nous notons également la présence de "bandes supplémentaires" sur le chitosane extrait qui semble indiquer que celui-ci n'est pas parfaitement pur. 08/04/2024 : (L+S) Objectifs :  - Démoulage des films réalisés le 04 avril  - préparation de nouvelles solution de films avec et sans glycérol avec 0.5g de chitosane commercial pour choisir le protocole et tester les meilleures conditions avant la réalisation du film avec l'extrait de chitosane - terminer les rinçages du extrait de chitosane pour éviter que l'excès de base neutralise l'acide lors de la formation du film Démoulage des films :  Les films en glycérol se décollent beaucoup plus facilement comme le montre le vidéo :  https://youtu.be/W0EesuDGnuk Modes opératoires suivis pour la préparation de films avec 0,5 g de chitosane commercial : Avec glycérol : Masse de chitosane : 0,5 g Masse de glycérol : 0,15 g volume d'eau distillée : 25 mL prélevé à l'expériencette graduée Masse d'acide acétique : 250 μL prélevé à la micropipette Verser dans un bécher muni d'un barreau aimanté, le glycérol, l'eau distillée, l'acide acétique et le chitosane Agiter pendant 45 min à 380 tr/min tout en chauffant à 60°C Verser la solution dans la boîte de pétri en verre d'environ 10 cm de diamètre. Veiller à ce que la solution recouvre toute la surface du moule. Placer cette boîte à l'étuve pendant 3h à 45°C Sans glycérol : Masse de chitosane : 0,5 g Volume d'eau distillée : 50 mL prélevé à l'expériencette graduée Volume d'acide lactique : 1 mL (prélevé à la pipette graduée) → l'acide lactique est un peu visqueux Verser dans un bécher muni d'un barreau aimanté, l'eau distillée et l'acide lactique Agiter la solution pendant quelques minutes pour homogénéiser Ajouter le chitosane commercial et laisser sous vive agitation pendant 1h à température ambiante → la solution passe de trouble à presque limpide et à une certaine viscosité Verser la solution obtenue dans une boîte de pétri en verre d'environ 10cm de diamètre . Veiller à ce que la solution recouvre toute la surface du moule. Placer cette boîte à l'étuve pendant 3h à 45°C Mode opératoire suivi pour le rinçage du chitosane extrait : solubiliser la poudre de chitosane dans de l'eau distillée et l'introduire dans des tubes de centrifugeuse 10 min à environ 10 000 tr/min à température ambiante Vider délicatement le surnagent, contrôler le pH (papier pH) 3 rinçages effectués : pH final : 8-9 09/04/2024 : (L) Objectifs :   - décoller les films formés la veille et choisir le protocole à suivre                   - préparer une solution de formation de film à partir du chitosane extrait Décollement des différents films : Le film avec le glycérol se décolle plus facilement que celui sans glycérol. On choisit donc de réaliser le film à partir de notre chitosane avec le protocole comportant du glycérol Formation du film à partir de notre chitosane : Masse de chitosane : 0,43 g Masse de glycérol : 0,129 g Masse d'eau distillée : 21,5 g Masse d'acide acétique : 215 μL prélevés à la micropipette Verser dans un bécher muni d'un barreau aimanté, le glycérol, l'eau distillée, l'acide acétique et le chitosane Agiter pendant 45 min à 380 tr/min tout en chauffant à 60°C Verser la solution dans la boîte de pétri Placer cette boîte à l'étuve pendant 3h à 45°C 10/04/2024 : (L+S) Objectif :  - Voir si un film est obtenu avec le chitosane extrait Le solvant s'est évaporé et le chitosane a reprécipité → pas de film obtenu Figure 11. Chitosane qui a reprécipité dans la boîte de pétri sans ancien de film préparation d'une solution en réutilisant l'intégralité du solide reprécipité en laissant agiter 1h de plus et en ajoutant plus d'acide (15 gouttes supplémentaires) pour favoriser la solubilisation : meilleur aspect de la solution qui reste très différent de celle avec le chitosane commercial mais mélange quasi complètement homogène. Nous décidons aussi de ne pas placer la solution à l'étuve au cas où celle ci aurait été trop évaporée. 12/04/2024 : (S) Objectif :   voir les modifications de protocole ont permis d'obtenir un film avec le chitosane extrait Pas de film obtenu avec le chitosane extrait Figure 12. Chitosane qui a reprécité sans former de film → étude de la biodégradabilité et de la capacité à préserver une banane à partir des échantillons de films à base de chitosane commercial Conclusion : rendement de l'extraction : masse de poudre de départ/masse de chitosane obtenu = 0.43/58.836 = 0.7%  → rendement bien trop faible par rapport aux valeurs trouvées dans la littérature qui indique de 3 à 10% de chitosane dans les crevettes. Nous avons pu montrer qu'il est possible de faire des films alimentaires à partir de chitosane commercial et que le protocole qui utilise du glycérol est celui qui nous a permis d'obtenir les meilleurs résultats. Nous avons également réussi à extraire la chitine des déchets de crevettes et à la déacétyler partiellement en chitosane. Cependant, il serait utile de recommencer l'extraction en utilisant une autre technique que la centrifugation pour les rinçages et à partir d'une masse de déchets beaucoup plus importante pour que l'impact des pertes de masses lors des rinçages soit négligeable. De plus, l'étape de déacétylation est la plus cruciale et sensible aux conditions expérimentales. Il s'agit de l'étape la moins détaillée des publications que nous avons trouvées. Il pourrait être pertinent de tester de nouvelles conditions de déacétylation en jouant sur la concentration en NaOH et/ou la température dans le mais de mieux déacétylé le chitosane obtenu et réussir à ancien un film. Références : Cazón, P., Morales-Sánchez, E., Velázquez, G. et Vázquez, M. (2022). Mesure de la perméabilité à la vapeur d'eau des films de chitosane : une expérience en laboratoire sur les matériaux d'emballage alimentaire. Journal d'éducation chimique, 99(6), 2403-2408. https://doi.org/10.1021/acs.jchemed.2c00449 Aldila, H., Asmar, Fabiani, VA, Dalimunthe, DY et Irwanto, R. (2020). L'effet de la température de déprotéinisation et de la concentration de NaOH sur l'étape de désacétylation pour optimiser l'extraction du chitosane des déchets de carapaces de crevettes. Série de conférences IOP, 599(1), 012003. https://doi.org/10.1088/1755-1315/599/1/012003 Siripatrawan, U., Vitchayakitti, W. (2016). Améliorer les propriétés fonctionnelles des films de chitosane en tant qu'emballage alimentaire actif en les incorporant à la propolis, Food Hydrocolloids 61 (695-702) https://doi.org/10.1016/j.foodhyd.2016.06.001 Colorants biodégradables par revalorisation de déchets alimentaires Informations Membres : Clémentine BRUGG-FEKIR (clementine.brugg-fekir@etu.sorbonne-universite.fr) Émilie Phuong Loan DOAN (phuong_loan.doan@etu.sorbonne-universite.fr) Alicya REMY (alicya.remy@etu.sorbonne-universite.fr) Céline YE (celine.ye.1@etu.sorbonne-universite.fr) Cursus : L2 et L3 Chimie Monodisciplinaire Date de l'expérience réalisée : 29/03/2024 - 13/05/2024 Contexte La pollution des eaux dans le monde représente un enjeu actuel majeur, dont l'industrie textile en est responsable de 20%. Une des principales causes de cette pollution est l'utilisation de colorants, souvent composés de substances nocives pour l'environnement ainsi que la santé des êtres vivants. Développer des colorants biodégradables peut être une alternative viable à long terme. Nous souhaitons donc réaliser un colorant biodégradable à partir de peaux de betteraves[1], qui représente des déchets de l'industrie alimentaire, afin de les revaloriser. Objectifs Comparer les méthodes de teinture d'une laine par traitement soit de la laine, soit du colorant. Évaluer qualitativement la tenue des colorants après lavage. Matériels 500g de betteraves Balance Spatules Entonnoir à liquide Éprouvette de 500mL Éprouvette de 10mL Barreaux aimantés Büchner de porosité  4 et fiole à vide de 500mL 2 béchers de 600mL 2 béchers de 250mL Thermomètres Papier pH Machines utilisées Sorbonne fixe Balance d'analyse max 320 g à 0,1 mg (modèle : ABS 320-4M ; fabricant : Kern) Pompe à vide (modèle : N022AN ; fabricant : KNF) Agitateur magnétique chauffant (fabricant : IKA RCT) Construction Étape 1 - Extraction du colorant : Laver les betteraves et les éplucher, puis peser la masse d’épluchure obtenue. Dans un bécher de 1200mL, introduire un barreau aimanté et 100g d’épluchures de betteraves avec1000mL d’eau distillée Agiter pendant 1h à température ambiante. Filtrer la solution sur fritté de porosité  4. Étape 2 - Fonctionnalisation de la laine et coloration : Fonctionnalisation de la laine : Dans un bécher de 250mL, ajouter un échantillon de 40cm2 de laine. Ajouter 10mL d’acide acétique à l’aide d’une éprouvette graduée. Laisser reposer à 25°C pendant 30min. Teinture avec la laine traitée : Ajouter au bécher, 100mL de la solution colorée préparée précédemment. Chauffer le tout à 40°C pendant 2h. Étape 3 - Fonctionnalisation du colorant et coloration : Fonctionnalisation du colorant : Dans un nouveau bécher de 250mL, introduire un barreau aimanté et ajouter 100mL du colorantextrait précédemment. Ajouter de l’acide acétique jusqu’à obtenir pH=2. Laisser agiter à 25°C pendant 30min. Teinture avec le colorant traité : Ajouter un échantillon de 40cm2 de laine non traitée dans le bécher et chauffer à 40°C pendant 2h. Journal de bord 29/03/2024 Lavage et épluchage des betteraves. On obtient au final mépluchures betterave=127g On pèse à l'aide d'une spatule et d'une balance, mépluchures prélevés=100g qu'on divise par 2 parts égales afin de les transposer dans deux béchers de 600mL. On ajoute ensuite dans chacun des béchers 500mL d'eau prélevé à l'aide d'éprouvettes graduées. On laisse la solution homogénéiser en mélangeant le tout de manière régulière manuellement pendant 45 minutes. Nous étions censées effectuer cette étape avec des barreaux aimantés et des agitateurs magnétiques, mais dû à la taille des épluchures qui était trop importante, l'utilisation des barreaux était inadéquate et nous étions donc contraintes de le faire manuellement. Nous avions aussi dû réduire le temps de mélange causé par le manque de temps (fermeture du FabLab pour la journée). On laisse reposer notre solution au frigo pour éviter que les épluchures, et les colorant par la même occasion ne pourrissent. 03/04/2024 On reprend la solution que nous avions préparé la dernière fois et la filtrons à vide. On obtient alors notre colorant. On confectionne au crochet, deux échantillons de 40cm2 de laine blanche non traitée. Fonctionnalisation de la laine : Dans un bécher de 250mL, on ajoute l'un des deux échantillons de 40cm2 de laine. Puis, à l’aide d’une éprouvette graduée, on prélève Vacide acétique=10mL qu'on transvase dans le bécher. Et on laisse reposer à température ambiante pendant 30min. Fonctionnalisation du colorant : Dans un nouveau bécher de 250mL, introduire un barreau aimanté et ajouter 100mL du colorant extrait précédemment. On ajoute de l’acide acétique jusqu’à obtenir pH=2. Ici, nous avons ajouté environ 10mL pour atteindre ce pH. Et on laisse agiter à 25°C pendant 30min sous la sorbonne. 05/04/2024 Le dernier objectif de ce projet est maintenant de teindre notre laine avec notre colorant. La première teinte est réalisée avec le colorant fonctionnalisé et la laine non traitée: Nous allons nous munir d’un bécher de 250 mL afin de placer notre laine non traité et d’y verser le colorant fonctionnalisé. Par la suite le bécher est placé sur une plaque chauffante et à l’aide d’un thermomètre nous allons pouvoir surveiller le chauffage et le maintenir à 40°C durant 2h. Nous remuons assez régulièrement, de façon à coloré de manière homogène la laine. Nous avons rencontré des problèmes de chauffage. La plaque étant imprécise au début de la manipulation la plaque à chauffer beaucoup trop vite (90°C). Il a donc fallut ajuster le chauffage afin qu’elle n’atteigne pas plus de 40°C. Nous avons répéter le même protocoles pour la deuxième laine traitée avec le colorant non traité. Une fois le protocole terminé nous allons sécher nos laines et les laisser reposer à l’air libre durant plusieurs semaines pour laisser le temps au colorant de fixer le tissu. Laine traitée après la teinte (tache, coloration non homogène) laine non traitée (coloration homogène) 13/05/2024 La dernière étape de notre projet sera de tester la résistance au colorant après lavage de la laine traité et non traité. Une fois les laines récupérées nous les avons tachées (avec de la sauce soja) pour ensuite les lavées à la main (facilite l’observation des éventuelles rejet de colorant dans l’eau). laine traitée après séchage laine non traitée après séchage La lessive utilisée était une lessive classique vendu dans le commerce et nous avons lavé nos tissus dans une eau à 45°C (mesuré au thermomètre). L’objectif était de bien frotter afin de retirer la tache et une fois enlevée nous avons laissé sécher nos laines et observé leurs couleurs ainsi que l’homogénéité de leurs colorations. Finalement nos laines n’ont pas perdu de leurs colorations, le mordançage utilisé pour les deux techniques se révèle donc efficace. laine non traitée après lavage laine traitée après lavage Bibliographie [1] POPESCU Vasilica, et al. « Beta Vulgaris L. A Source with a Great Potential in the Extraction of Natural Dyes Intended for the Sustainable Dyeing of Wool ». Plants , vol. 12, n o 10, janvier 2023, p. 1933. www.mdpi.com, https://doi.org/10.3390/plants12101933 EPU-M6-AMO Conception et modélisation par éléments finis (MTX 3) Introduction à la modélisation 3D sous SolidWorks Calcul par éléments finis Projet de conception Porte clef/Vif d'or d'ANDRIA Esther esther.d_andria@etu.sorbonne-universite.fr DARBANE Sofia sofia.darbane@etu.sorbonne-universite.fr MTX3 Projet MTX Initiation à l'impression 3D Matériaux : Filament PLA, machine 1 (impression 3D) Journal de bord : -  30 avril : préparation du fichier et impression (porte clef + balle + 2 ailes vif d’or) Premier test pour s’approprier le matérielPièce d'échec BRILLANCEAU Mathilde mathilde.brillanceau@etu.sorbonne-universite.fr MTX3 Projet MTX Initiation à l'impression 3D Matériaux : Filament PLA, machine 1 (impression 3D) Journal de bord : -  30 avril : préparation du fichier (pièce d’ échec : roi)OUR GUITAR PROJECT (UE : MU5EEH12 DESIGNING MECHATRONIC SYSTEMS) OIP - Master Chimie Création QR Code à la graveuse laser Trotec 100 Cette gravure a été faite pour le Village du Futur Souhaitable dans le cadre de l’UE MU4CIOIP. Dans le cadre de notre projet dans l'ue de Chimie, La chimie au regard du numérique on a gravé un QR Code sur du peuplier 3 mm. Set up for virtual reality in BEES - Screen Holder