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