Skip to main content

Ryan Vicente

Projet porte-savon


Le but du projet 


Pour cette première semaine de cours, le premier mini-projet Ă  rĂ©aliser est un porte-savon imprimĂ© en 3D. Pour rĂ©aliser cette impression. Nous allons crĂ©er deux structures : 

  • Une base 'contenant' designĂ©e en 3D sur Tinkercad
  • Une grille Ă  dĂ©poser dans le contenant dĂ©signĂ©e en 2D sur InkScape

Le but est de créer une structure fonctionnelle qui permet à l'eau de s'écouler sans que le savon ne se ramolisse. Une fois les patrons réalisée, la structure sera imprimée à l'aide d'IdeaMaker.

La base du porte-savon


La base du porte savon est composée de plusieurs blocs de bases présents sur Tinkercad. Pour réaliser la structure de base :

  1. J'ai crĂ©er un cube allongĂ© ayant les bords arrondis 
  2. J'ai utilisé un second cube de perçage allongé ayant des bords droits afin de trouer le premier bloc (via une union) tout en laissant un fond

Il a Ă©tĂ© dĂ©cidĂ© de mettre en place un robinet sur l'un des angles de la structure afin de faciliter l'Ă©coulement de l'eau lors du versement de l'eau stagnante. Pour rĂ©aliser ce robinet il a fallu : 

  1. CrĂ©er un cylindre et le dĂ©poser dans l'un des coins de la base 
  2. CrĂ©er un second cylindre de perçage pour trouer le cylindre 

Le rĂ©sultat de ces premières opĂ©rations a donnĂ© : 

Capture d’écran 2023-02-14 à 11.11.46 AM.pngCapture d’écran 2023-02-15 à 12.37.09 PM.pngCapture d’écran 2023-02-15 à 12.37.20 PM.png

J'ai ensuite pu ajouter des cales pour placer la grille sur le porte-savon à l'aide de triangles rectangles placés sur la partie interne de la base :

Capture d’écran 2023-02-16 à 11.51.21 AM.png

Capture d’écran 2023-02-16 à 11.31.42 AM.png

La base a Ă©tĂ© rĂ©alisĂ©e en diffĂ©rentes versions : 

Avec porte-blaireau

Capture d’écran 2023-02-14 à 11.54.23 AM.png

Avec grille intégrée

Capture d’écran 2023-02-14 à 2.12.03 PM.png

Sans robinet et avec grille intégrée

Capture d’écran 2023-02-16 à 11.42.43 AM.png

Pour l'exercice, la version de base qui sera utilisĂ©e est la version classique avec robinet.

La grille du porte-savon


Afin de réaliser la grille du porte-savon j'ai utilisé InkScape. À l'aide de cette plateforme OpenSource et libre, j'ai pu réaliser le motif de ma grille en 2D, en utilisant des motifs de bases tels que le rectangle et le polygone.

  1. Créer un rectangle dans les mesures souhaitées
  2. Dessiner le motif souhaitĂ© Ă  l'aide des formes de bases disponibles 
  3. Une fois les formes superposées sur le rectangle à l'endroit adéquat, utiliser le booléen 'Différence' afin de soustraire le motif au rectangle et ainsi créer la grille

La grille mesure 110mm sur 80mm pour correspondre aux mesures de la plus part des savons 

Capture d’écran 2023-02-16 à 11.53.45 AM.png

Le document vectoriel (.svg) ainsi issu d'InkScape peut ĂŞtre extrudĂ© sur Tinkercad Ă  cĂ´tĂ© de la base du porte-savon.

Si la grille n'arrive pas Ă  s'uploader sur Tinkercad, il faut faire une capture d'Ă©cran de la grille 2D et faire passer cette capture d'objet matriciel Ă  vectoriel sur InkScape. Il faut ensuite uploader ce nouveau document sur Tinkercad.

Capture d’écran 2023-02-16 à 10.28.35 AM.png

Capture d’écran 2023-02-16 à 10.27.00 AM.png

Mesures en millimètres

Mise en impression 


Une fois les deux Ă©lĂ©ments regroupĂ©s sur le mĂŞme document Tinkercad (.stl), ils peuvent ĂŞtre modĂ©lisĂ©s en 3D sur IdeaMaker pour prĂ©parer l'impression 3D. L'impression sera alors modĂ©lisĂ©e sur un document .Gcode (langage des machines outils) : 

Capture d’écran 2023-02-16 à 11.15.32 AM.png

image-1676551808492.png

Caractéristiques d'impression

  • Afin d'imprimer le porte-savon, nous allons privilĂ©gier un remplissage Ă  10% afin d'apporter une certaine soliditĂ© Ă  l'objet qui sera utilisĂ© sans utiliser trop de matière (et ne pas rendre le coĂ»t de production trop Ă©levĂ©). 
  • Pour optimiser la rĂ©sistance et la duretĂ© du porte-savon, il est judicieux de l'imprimer en 3-4 coques.
  • Du point de vue de l'adhĂ©rence, il semblerait qu'il n'y ai pas besoin de mettre des supports (ou de bords) en place pour l'impression. 
  • La hauteur de la couche restera 0,25mm par dĂ©faut.
  • Temps d'impression estimĂ© : 6h 44min 49sec
  • CoĂ»t estimĂ© d'impression : 2,36€ 
  • QuantitĂ© estimĂ©e : 78,6g / 26,35m

Le prix moyen d'un porte-savon Ă©tant de 5€ il est possible de vendre le porte-savon au double du coĂ»t de production Ă  minima.

Documents sources (joints Ă  la page)


  • Grille du porte-savon (.svg)
  • Porte-savon (.stl)

RĂ©aliser un montage Ă©lectronique Arduino


Le but du projet 



Le deuxième cours consiste en l'apprentissage de l'Ă©lectronique Ă  travers la modĂ©lisation de circuit Arduino sur Tinkercad. Après avoir compris les bases de la conception Ă©lectronique, le but du cours est de pratiquer sur de vrais circuits Ă  l'aide de l'application Arduino afin de pouvoir automatiser des actions et apporter de la complexitĂ© et de nouvelles fonctionnalitĂ©s Ă  nos prototypes. Dans ce cours, nous utiliserons des Arduino Uno. L'ensemble des modalitĂ©s et convention relatives Ă  l'Arduino sont disponibles sur le lien 'Introduction Ă  l'Arduino' ci-joint.

La loi d’Ohm


La loi d'Ohm est la loi de base en Ă©lectronique. C'est une loi physique empirique qui lie l'intensitĂ© du courant Ă©lectrique traversant un dipĂ´le Ă©lectrique Ă  la tension Ă  ses bornes. Cette loi permet de dĂ©terminer la valeur d'une rĂ©sistance. 

U = R*I
  • U la tension aux bornes de la rĂ©sistance ;
  • I l’intensitĂ© du courant qui circule Ă  travers la rĂ©sistance ;
  • R la valeur de la rĂ©sistance.

Codes



#define LED 10
int compteur = 0;
void setup()
{
Serial.begin(9600); // permet de dire que l'on va initier une communication entre l'ordinateur et le circuit Ă  la vitesse 9600 
pinMode(LED, OUTPUT); // déclaration de la pin 10 comme sortie
}
void loop()
{
Serial.print("Debut de la boucle ");
Serial.println(compteur);
digitalWrite(LED, HIGH);
delay(1000); // ne rien faire pendant 1000ms
digitalWrite(LED, LOW);
delay(1000); // ne rien faire pendant 1000ms
compteur++; // incrémentation du compteur
}
  • Utiliser le format Java 
void setup() 
{
}

void loop() 
{
}
  • DĂ©finir une pin : Annoncer Ă  l'ordinateur sur quelle partie de l'Arduino (numĂ©ro de la pin connectĂ©e) est connecter le composant auquel nous allons donner des informations (ou duquel nous allons prendre les informations).
#define LED 10 
// La led est connectée sur la pin 10
  • Annoncer la communication entre l'ordinateur et le circuit 
Serial.begin(9600)
  • Utiliser une première fonction d'action
digitalWrite(LED, HIGH);
// Permet d'allumer la led `
delay(1000)
// Ne rien faire pendant 1000ms
Programme Bouton

#define BTN 8

void setup()
{
  pinMode(BTN, INPUT_PULLUP);
  
  Serial.begin(9600);
}

void loop()
{
  if( digitalRead(BTN) == LOW )
  {
    Serial.println("Button pressed");
  }
  
  delay(100);
}

Le programme Bouton fait intervenir un bouton dans le circuit. Cela permet d'introduire le code des boucles conditionnelles if.

Programme Buzzer

#define POT A0
#define BUZZ 9

void setup()
{
  pinMode(POT, INPUT);
  pinMode(BUZZ, OUTPUT);
  
  Serial.begin(9600);
}

void loop()
{
  int pot = analogRead(POT);
  Serial.println(pot);
  
  // int buzzfreq = map(pot, 0, 1023, 1000, 20000);
  
  // tone(BUZZ, buzzfreq);
  // delay(1000);
  // noTone(BUZZ);
}
Programme moteur

Pour tester en pratique nos connaissances acquises lors de la matinĂ©e de thĂ©orie. J'ai dĂ©cidĂ© de travailler sur la mise en place d'un circuit Ă©lectronique composĂ© d'un servomoteur (permettant une rotation de 180°). Le but de ce circuit est d'apprendre Ă  manipuler les composants Ă©lectronique et de se familiariser avec la recherche de code et de prendre en main la plateforme de programmation Arduino.

Le servomoteur a Ă©tĂ© branchĂ© Ă  l'Arduino selon les modalitĂ©s suivantes : 

  • L'alimentation V a Ă©tĂ© connectĂ©e au 5V de l'Arduino Ă  travers le breadboard
  • La masse GND a Ă©tĂ© connectĂ©e au ground de l'Arduino Ă  travers le breadboard
  • Le signal S a Ă©tĂ© connectĂ© Ă  la pin 8 de l'Arduino 

Capture d’écran 2023-03-07 à 7.25.31 PM.png

Sur cette photo il est possible de distinguer un quatrième câble marron qui sort du servomoteur. Ce câble permet de connecter une alimentation externe au servomoteur (ce qui n'est pas nécessaire ici.)

Le code suivant a Ă©tĂ© utilisĂ© pour faire tourner la tĂŞte rotative du servomoteur trois fois : 

  • De 0° Ă  90°
  • De 90° Ă  180°
  • De 180° Ă  0°
#include <Servo.h>  // on inclut la bibliothèque servo

Servo servoMoteur;   // on crée un objet servo appelé servoMoteur

void setup(){ 
  // on associe le servo Ă  la broche 2 d'Arduino
  servoMoteur.attach(8);
}
 
void loop(){
  // on déplace le servo à la position 0º
  servoMoteur.write(0);
  delay(1000);  // pause de 1 seconde
  
  // on déplace le servo à la position 90º
  servoMoteur.write(90);
  delay(1000);  // pause 1 seconde
  
  // on déplace le servo à la position 180º
  servoMoteur.write(180);
  delay(1000);  // pause 1 seconde
}
Programme Capteur & Moteur

Afin de complexifier l'exercice, il a été décidé de rajouter un capteur infrarouge au circuit afin d'activer le moteur lorsqu'un objet est détecté par le capteur. Pour cela, le capteur a été connecté à l'alimentation et à la masse de l'Arduino à travers le breadboard et le signal a été dirigé vers la pin 10 de l'Arduino.

Le code suivant a permis de mettre en place le montage afin de faire tourner le moteur quand un objet est détecter par le capteur :

#include <Servo.h>  // on inclut la bibliothèque servo
int inputPin = 10;               // choose the input pin (for sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status

Servo servoMoteur;   // on crée un objet servo appelé servoMoteur

void setup(){ 
  // on associe le servo Ă  la broche 2 d'Arduino
  servoMoteur.attach(8);
  pinMode(inputPin, INPUT);     // declare sensor as input
  Serial.begin(9600);
  Serial.print("calibrating sensor ");
}
 
void loop(){
  val = digitalRead(inputPin);  // read input value
  Serial.println(val);
  if (val == HIGH) { // check if the input is HIGH
    // on déplace le servo à la position 0º
    servoMoteur.write(180);
  } else {
    servoMoteur.write(0); // turn motor OFF
  }
}

Capture d’écran 2023-03-07 à 7.38.20 PM.png