Skip to main content

Projet Prototypage Chloé, Louly, Eloïse

Cours Arduino - Vendredi 7 février 2025

Introduction :

Raspberry Pi : petit ordinateur trĂšs puissant pilotĂ© par un microprocesseur qui ne fait que calculer, toutes les autres caractĂ©ristiques de l’ordinateur se trouvent autour avec systĂšme d’exploitation implantĂ© Ă  l’intĂ©rieur

→ Calculs : intelligence artificielle, musiques, console de jeu,

Arduino : Carte programmable pilotée par un microcontrÎleur (petit ordinateur dans une petite puce) qui contient de la rame, du rome, des processeurs, des entrées/des sorties

Board de dĂ©veloppement + IDE (logiciel) + BibliothĂšque de fonctions (accĂ©der aux fonctionnalitĂ©s) 

https://www.arduino.cc/

→ Automatisation de signaux numĂ©riques et analogiques (alimenter des led, des capteurs)

NumĂ©rique : 
  • 1/ Ă©tat haut 5V
  • 2/ Ă©tat bas 0V
Composant de base de l'arduino :

> LED : resistance trĂšs faible donc ajouter une resistance en sĂ©rie 

> Resistance : limitation du courant --> IntensitĂ© = U/R  (si la resistance ≈ 0 alors l'intensitĂ© est Ă  l'infini --> la LED grille)

> Condensateurs : pile qui compense les variations de courants 

> PotentiomÚtre : composant qui permet l'interaction arduino/utilisateur, sert à ajuster une valeur de résistance manuellement

> Transistors : interrupteur qu'on peut piloter avec la carte arduino à des tensions supérieures à celle à laquelle l'arduino fonctionne

> RĂ©gulateur : composant qui stabilise la tension d'alimentation fournie Ă  la carte 

TĂ©lĂ©chargement du code : 

> Indiquer la carte tĂ©lĂ©chargĂ©e : Arduino AVR Boards --> Arduino Uno 

> SĂ©lectionner le port de l'arduino --> COM3 Arduino Uno Capture d’écran 2025-02-07 Ă  11.07.11.png

Changer la vitesse de clignotement : 

> modifier la valeur dans : delay(xxx)


Faire clignoter une LED classique :

Code : 

Capture d’écran 2025-02-07 Ă  11.10.22.png


RĂ©sultat : 

Capture d’écran 2025-02-07 Ă  11.25.56.png
Fonctionnement du bouton en arduino :

Un bouton est un composant électronique utilisé pour déclencher une action lorsqu'il est pressé

Un bouton a 2 états :

> Appuyé (HIGH ou 1) --> Le circuit est fermé, un signal électrique passe

> Relùché (LOW ou 0) --> Le circuit est ouvert, aucun signal ne passe

Un bouton a au minimum 2 broches : 

> Une broche connectĂ©e Ă  une entrĂ©e numĂ©rique d’Arduino

> Une broche connectĂ©e Ă  la masse (GND), souvent avec une rĂ©sistance pull-up ou pull-down

Faire afficher bouton presser

Code : 

Capture d’écran 2025-02-07 Ă  11.44.29.png

Fonctionnement du potentiomĂštre : 

Un potentiomÚtre est une résistance variable avec trois broches :

> Broche 1 (VCC / +5V) → Alimentation positive.

> Broche 2 (Sortie / Curseur - Signal) → Donne une tension variable entre 0V et 5V.

> Broche 3 (GND / Masse) → Alimentation nĂ©gative.

Lorsque le bouton du potentiomÚtre est tourné --> la résistance interne change --> le tension en sortie est modifiée

Faire fonctionner un potentiomĂštre : 

Code : 

Capture d’écran 2025-02-07 Ă  12.03.12.png

RĂ©sultat : 

Variation de la tension 

image.png

Fonctionnement d'un capteur I2C : 

Un capteur I2C est un capteur qui utilise le protocole I2C pour communiquer avec un microcontrĂŽleur ou un ordinateur. C'est une maniĂšre simple et efficace de connecter plusieurs capteurs en utilisant seulement 2 fils

Notre capteur : Grove - Sunlight Sensor

Documentation : https://wiki.seeedstudio.com/Grove-I2C_High_Accuracy_Temp%26Humi_Sensor-SHT35/

image.png

> Ouvrir le code test : File>Examples>Grove_Sunlight_Sensor>SI1151

RĂ©sultat : 

AprĂšs passage de fils de couleurs devant le capteur. 

image.png

Test 1 de fonctionnement du capteur I2C : 

Demande Ă  ChatGPT : "Peux-tu modifier le code ci-dessous pour que dĂšs que la luminositĂ© est supĂ©rieure Ă  10, la lampe LED s'allume:

#include "Si115X.h"

Si115X si1151;

/**
 * Setup for configuration
 */
void setup()
{
    Serial.begin(115200);
    if (!si1151.Begin()) {
        Serial.println("Si1151 is not ready!");
        while (1) {
            delay(1000);
            Serial.print(".");
        };
    }
    else {
        Serial.println("Si1151 is ready!");
    }
}

/**
 * Loops and reads data from registers
 */
void loop()
{
    Serial.print("IR: ");
    Serial.println(si1151.ReadIR());
    Serial.print("Visible: ");
    Serial.println(si1151.ReadVisible());

    delay(500);
}"

Code : 

image.png

image.png

Explication des modifications : 
1. Ajout de #define LED_PIN 3 pour dĂ©finir la broche de la LED.  
2. Initialisation de pinMode(LED_PIN, OUTPUT) dans setup().  
3. Lecture de la luminositĂ© visible avec si1151.ReadVisible().  
4. Condition if (visibleLight > 10) pour allumer ou éteindre la LED

RĂ©sultat : 

image.png

Test 2 de fonctionnement du capteur I2C : 

Demande Ă  ChatGPT : "Quand c'est supĂ©rieur Ă  15 je veux allumer ma LED rouge et quand c'est infĂ©rieur Ă  15 je veux allumer la lampe bleu. Modifie le Code et donne le montage: 

RĂ©ponse: D'accord ! Voici le code modifiĂ© pour :  
> Allumer la LED rouge si la luminosité *est supérieure à 15
> Allumer la LED bleue si la luminosité *est inférieure ou égale à 15

Montage
Matériel nécessaire :
- *Arduino avec Grove Base Shield*  
- *Capteur de lumiĂšre Si1151* (dĂ©jĂ  branchĂ© sur le port I2C du Grove Shield)  
- *LED rouge* (branchĂ©e sur *D3*)  
- *LED bleue* (branchĂ©e sur *D4*)  
- *2 rĂ©sistances de 220Ω*  
- *Fils de connexion*  

Schéma de cùblage :
1. *Capteur Si1151*  
   - DĂ©jĂ  connectĂ© au port *I2C* du *Grove Base Shield* (pas besoin de modification).  

2. *LED Rouge*  
   - *Anode (+) → D3*  
   - *Cathode (-) → GND (via rĂ©sistance 220Ω)*  

3. *LED Bleue*  
   - *Anode (+) → D4* "

Code :

cpp
#include "Si115X.h"

Si115X si1151;

#define LED_ROUGE 3  // Broche de la LED rouge
#define LED_BLEUE 4  // Broche de la LED bleue
#define SEUIL_LUMIERE 15  // Seuil de luminositĂ© pour le changement

void setup() {
    Serial.begin(115200);
    pinMode(LED_ROUGE, OUTPUT);
    pinMode(LED_BLEUE, OUTPUT);

    if (!si1151.Begin()) {
        Serial.println("Si1151 n'est pas prĂȘt !");
        while (1) {
            delay(1000);
            Serial.print(".");
        };
    }
    else {
        Serial.println("Si1151 est prĂȘt !");

 }
}

void loop() {
    int visibleLight = si1151.ReadVisible();  // Lire la valeur de la lumiĂšre visible

    Serial.print("LumiĂšre visible : ");
    Serial.println(visibleLight);

    if (visibleLight > SEUIL_LUMIERE) {
        digitalWrite(LED_ROUGE, HIGH);  // Allume LED rouge
        digitalWrite(LED_BLEUE, LOW);   // Éteint LED bleue
    } else {
        digitalWrite(LED_ROUGE, LOW);   // Éteint LED rouge
        digitalWrite(LED_BLEUE, HIGH);  // Allume LED bleue
    }

    delay(500);
}

Explication du Code : 
1. On dĂ©finit les broches des *LEDs rouge et bleue*.  
2. Dans la *loop(), on lit la luminositĂ© du capteur **Si1151*.  
3. Si la valeur est *> 15, la **LED rouge* s'allume et la *LED bleue* s'Ă©teint.  
4. Si la valeur est *≀ 15, la **LED bleue* s'allume et la *LED rouge* s'Ă©teint.  
5. Le code se met Ă  jour *toutes les 500ms*.  

Fonctionnement du servomoteur :

Un contrÎleur de moteur est un composant électronique qui permet de contrÎler avec précision le mouvement d'un moteur en recevant des commandes d'un microcontrÎleur/ordinateur et en ajustant la tension et le courant envoyés au moteur

Envoi d'un signal PWM : signal périodique sur lequel on fait varier la durée de l'impulsion par une alternance rapide entre un état "haut" (tension maximale) et un état "bas" (tension nulle)

Demande Ă  ChatGPT : Comment faire fonctionner un servomoteur FS90MG via une arduino. Donne moi le montage et le code associĂ©. 

RĂ©ponse: Pour faire fonctionner un *servomoteur FS90MG* avec un *Arduino*, voici ce dont tu as besoin :  

Matériel nécessaire :
- 1x Arduino (Uno, Mega, etc.)  
- 1x Servomoteur *FS90MG*  
- 1x RĂ©sistance de 330Ω (optionnel pour protĂ©ger le signal)  
- 3x CĂąbles de connexion  

Schéma de cùblage :
Le servomoteur *FS90MG* a *trois fils* :  
- *Rouge (VCC)* → *5V* de l'Arduino  
- *Marron ou Noir (GND)* → *GND* de l'Arduino  
- *Orange (Signal)* → *Broche D9* de l'Arduino  

⚠ *Remarque importante :* Si le moteur force trop, il est prĂ©fĂ©rable d’utiliser une alimentation externe 5V (et relier les GND ensemble).

Code : 
On utilise la bibliothĂšque *Servo.h* pour contrĂŽler le moteur.  

cpp
#include <Servo.h>

Servo monServo;  // CrĂ©ation d'un objet Servo

void setup() {
    monServo.attach(9); // ConnectĂ© Ă  la broche D9
}

void loop() {
    monServo.write(0);   // Position Ă  0°
    delay(1000);         // Attendre 1 seconde
    monServo.write(90);  // Position Ă  90°
    delay(1000);
    monServo.write(180); // Position Ă  180°
    delay(1000);
}

Explication du code :
1. **monServo.attach(9);** → Indique que le moteur est connectĂ© sur la broche *D9*.  
2. **monServo.write(angle);** → Permet de dĂ©finir un angle entre *0° et 180°*.  
3. **Les dĂ©lais (delay(1000);)** permettent d’observer chaque changement d’angle.  

RĂ©sultat : 

image.png

Devoir pour le lundi 3 mars - Test de fonctionnement du servomoteur : 

Demande à ChatGPT : "Comment faire tourner un servomoteur FS90MG. A chaque rotation une LED s'allume (soit rouge soit vert). Peux tu me donner le code et le montage associé sur arduino uno?

Matériel nécessaire :
- 1 Arduino Uno  
- 1 servo moteur FS90MG  
- 2 rĂ©sistances (220 ohms)  
- 1 LED rouge  
- 1 LED verte  
- CĂąblage (fils mĂąle-mĂąle)  

SchĂ©ma de montage : 
1. Connecte la broche de signal du servo (gĂ©nĂ©ralement orange) Ă  la broche *D9* de l’Arduino.  
2. Branche la broche de puissance (rouge) du servo Ă  *5V* et la masse (noire) Ă  *GND*.  
3. Connecte les LED :  
   - LED rouge :  
     - Anode (longue patte) Ă  *D3* via une rĂ©sistance de 220 ohms  
     - Cathode Ă  *GND*  
   - LED verte :  
     - Anode (longue patte) Ă  *D4* via une rĂ©sistance de 220 ohms  
     - Cathode Ă  *GND* "

Code : 

cpp
#include <Servo.h>

Servo monServo;
const int ledRouge = 3;
const int ledVerte = 4;

int position = 0;     // Position initiale du servo
bool ledState = false; // État LED : false = rouge, true = verte

void setup() {
  monServo.attach(9);           // Connecte le servo sur la broche 9
  pinMode(ledRouge, OUTPUT);   
  pinMode(ledVerte, OUTPUT);   
  digitalWrite(ledRouge, LOW);
  digitalWrite(ledVerte, LOW);

  Serial.begin(9600);
}

void loop() {
  // DĂ©place le servo entre 0° et 180°
  position = (position == 0) ? 180 : 0;

monServo.write(position);

  // Alterne les LEDs
  if (ledState) {
    digitalWrite(ledRouge, LOW);
    digitalWrite(ledVerte, HIGH);
  } else {
    digitalWrite(ledRouge, HIGH);
    digitalWrite(ledVerte, LOW);
  }

  ledState = !ledState; // Inverse l'Ă©tat

  Serial.print("Servo Ă  la position : ");
  Serial.println(position);

  delay(1000); // Pause d'une seconde entre les rotations
}

Explications du code : 
- Le servo oscille entre 0° et 180°.  
- À chaque mouvement, l'Ă©tat des LEDs alterne : rouge, puis vert.  
- Le dĂ©lai de 1000 ms permet une rotation claire et un changement visible des LEDs.  

RĂ©sultat : 

Alternance LED rouge / LED verte selon la rotation du cerveau moteur 

image.png

Cours Arduino - Lundi 3 mars 2025

Conception 3D sur le site TINKERCAD : 

Création d'un support pour téléphone

1/ IdĂ©e 

  • DĂ©finition des dimensions et de la forme
  • Inclinaison pour un bon angle de vue
  • Large base pour assurer la stabilitĂ©
  • Ajout d’une butĂ©e pour Ă©viter que le tĂ©lĂ©phone glisse

2/ ModĂ©lisation 

  • CrĂ©ation d'une base rectangulaire solide
  • Ajout d’un plan inclinĂ© pour le support du tĂ©lĂ©phone
  • IntĂ©gration de 2 butĂ©es pour maintenir les 2 base rectangulaire en place
  • Perçage d'un trou dĂ©coratif en haut du rectangle pour allĂ©ger la structure

3/ RĂ©sultat 

Capture d’écran 2025-03-03 à 21.57.06.png

CrĂ©ation d'un objet de notre choix pour le cours de vendredi 7 mars 

1/ Conception de la structure

  • Base cylindrique pour reprĂ©senter le corps du moulin
  • Toit conique pour donner un aspect traditionnel
  • Ajout d’une porte et de fenĂȘtres circulaires 
  • Petit cylindre sur le cĂŽtĂ© du toit pour rajouter les pales du moulin

2/ Ajout des pales du moulin

  • CrĂ©ation d’un axe central avec un petit cercle
  • Ajout de quatre pales symĂ©triques en forme allongĂ©e
  • VĂ©rification de l’alignement et de la taille des pales pour un effet harmonieux
  • VĂ©rification des proportions entre le moulin et les pales.
  • CrĂ©ation d'un bout pour fixer les pales sur le cylindre prĂ©sent sur le toit. 

3/ RĂ©sultat 

Capture d’écran 2025-03-03 à 22.22.04.png

Impression 3D via le logiciel PRUSASLICER

1/ Exportation

  • Enregistrement des 2 modĂšles en format STL pour l’impression 3D
  • Ouverture des 2 modĂšles sur le logiciel 
  • Remplissage 20% 
  • Rajout de supports pour supporter le cylindre prĂ©sent sur le toit. 

2/ Résultats

Voici le résultat du support pour téléphone, que nous n'avons pas imprimé mais avec lequel nous avons pris en main le logiciel Prusaslicer :

capture-decran-2025-03-03-a-22-37-04.png

Voici maintenant le résultat de notre moulin, réglé via le logiciel Prusaslicer puis imprimé sur une imprimante 3D Prusa :

Capture d’écran 2025-03-03 à 22.11.12.png

WhatsApp Image 2025-03-06 Ă  09.35.05_c7229dc2.jpgWhatsApp Image 2025-03-06 Ă  09.35.05_6a830466.jpg

ProblĂšmes rencontrĂ©s & amĂ©liorations envisagĂ©es : 

Au moment de l'impression sur l'imprimante 3D PRUSA, les socles ne restaient pas fixés à la planche de support donc les impressions n'ont pas été abouties; le fil s'accumulaient au niveau du pistolet. Nous nous sommes rendus compte que nous n'avions pas configuré l'imprimante Prusa via le logiciel PrusaSlicer.

Voici les réglages que nous avons finalement utilisés :

Capture d’écran 2025-03-06 à 09.56.55.png

AprÚs plusieurs tentatives, nous avons finalement réussi à imprimer notre moulin.

Nous avons régalement mal modélisé le rayon du cercle portant les hélices. Il n'est pas parfaitement rond ce qui fait que la rotation n'est pas optimale. Néanmoins ce n'est pas un réel problÚme car il tourne malgré tout, ce qui était le but envisagé.

Pour finir, nous aurions préféré que le moulin soit plus "lisse". Nous saurons donc pour la prochaine fois que nous devrons réduire la hauteur de couche.