Skip to main content

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 cube
T = 10; 
// Épaisseur des arêtes
E = 1;
// Longueur du pavé
L = T + 2;  
// Diamètre de la sphère
D = 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ère
sphere(r=D/2, $fn=100);


image.pngimage.png


La sphère étant trop simplifiée, j'ai trouvé la commande $fn pour améliorer le lissage de celle-ci.

IdeaMaker

image.png

image.png

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

image.pngimage.png

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.image.png
    • 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.

image.pngimage.png

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

  1. 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.
  2. 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.

.

image.png

image.png

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
  }

}