« Art Sciences 2025/2026 E11 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 15 : | Ligne 15 : | ||
Tests du déroulage des hameçons. | Tests du déroulage des hameçons. | ||
Discussion avec Xilong sur le codage du moteur. | Discussion avec Xilong sur le codage du moteur. | ||
'''<u>Journée du Jeudi 29/01</u>''' | '''<u>Journée du Jeudi 29/01</u>''' | ||
Assemblage du circuit moteur et tests de la rotation. | Assemblage du circuit moteur et tests de la rotation. Nous avons utilisé les matériels suivants : Arduino Uno (génère les signaux de commande), module driver moteur BTS7960 (amplification de puissance / inversion du sens de rotation), moteur CC à réducteur 5840-31ZY (12 V, 12 tr/min), alimentation à découpage S-240-12 (fournit une tension continue de 12 V côté moteur). | ||
[[Fichier:Arduino.png|centré|vignette|120x120px|Arduino Uno]] | |||
[[Fichier:Driver BTS7960.png|centré|vignette|104x104px|Driver du moteur BTS7960]] | |||
[[Fichier:Moteur.png|centré|vignette|111x111px|Moteur 5840-31ZY]] | |||
[[Fichier:Alimentation.png|centré|vignette|120x120px|Alimentation à découpage S-240-12]] | |||
Instructions de câblage: Brancher l’entrée du S-240-12 sur la phase, le neutre et la terre, relier sa sortie V+/V- à l’alimentation moteur du BTS7960 (B+/B- ou +12V/GND), connecter les deux fils du moteur sur M+/M- (OUT1/OUT2), piloter le BTS7960 avec l’Arduino via RPWM/LPWM (vitesse et sens) et R_EN/L_EN (enable) en lui fournissant aussi VCC 5V et GND, avec une masse commune obligatoire : GND Arduino = GND BTS7960 = V- de l’alimentation. | |||
[[Fichier:Circuit moteur .jpg|vignette|centré|217x217px|Assemblage des composants]] | |||
Codage arduino: Le programme met en œuvre, via une simple boucle de machine à états, une séquence : démarrage en marche avant avec augmentation progressive de la puissance, fonctionnement à faible vitesse en marche avant pendant un certain temps, pause, démarrage en marche arrière avec augmentation progressive de la puissance, fonctionnement à faible vitesse en marche arrière pendant la même durée (ou une durée définie), puis nouvelle pause, en utilisant le PWM pour contrôler la vitesse et le temps de fonctionnement pour approximer la distance aller-retour. Voici le code de l'arduino ci-dessous. | |||
'''''<code>// BTS7960 : RPWM sur D5, LPWM sur D6, R_EN sur D7, L_EN sur D8</code>''''' | |||
'''''<code>const int RPWM = 5;</code>''''' | |||
'''''<code>const int LPWM = 6;</code>''''' | |||
'''''<code>const int REN = 7;</code>''''' | |||
'''''<code>const int LEN = 8;</code>''''' | |||
'''''<code>// Réglages de la vitesse lente (à ajuster en premier)</code>''''' | |||
'''''<code>int pwmSlow = 60; // PWM en vitesse lente : plus petit = plus lent (souvent 50~120)</code>''''' | |||
'''''<code>int pwmKick = 140; // PWM de démarrage : évite que le moteur ne démarre pas sous charge (souvent 120~180)</code>''''' | |||
'''''<code>unsigned long kickMs = 250; // Durée du “coup de boost” au démarrage (en ms)</code>''''' | |||
'''''<code>// La “longueur” est approximée par le temps de rotation (à adapter selon le besoin)</code>''''' | |||
'''''<code>unsigned long forwardMs = 8000; // Durée de rotation en sens avant (ex : 8 s)</code>''''' | |||
'''''<code>unsigned long reverseMs = 5000; // Durée de rotation en sens inverse (ex : 5 s)</code>''''' | |||
'''''<code>unsigned long pauseMs = 200; // Pause lors du changement de sens (mettre 0 si aucune pause)</code>''''' | |||
'''''<code>// États (machine à états) : démarrage avant, marche avant, pause, démarrage arrière, marche arrière, pause</code>''''' | |||
'''''<code>enum State { FWD_KICK, FWD_RUN, PAUSE1, REV_KICK, REV_RUN, PAUSE2 };</code>''''' | |||
'''''<code>State state = FWD_KICK;</code>''''' | |||
'''''<code>unsigned long t0 = 0;</code>''''' | |||
'''''<code>void enableDriver(bool en) {</code>''''' | |||
'''''<code> // Active/désactive le driver en mettant les deux broches Enable à HIGH/LOW</code>''''' | |||
'''''<code> digitalWrite(REN, en ? HIGH : LOW);</code>''''' | |||
'''''<code> digitalWrite(LEN, en ? HIGH : LOW);</code>''''' | |||
'''''<code>}</code>''''' | |||
'''''<code>void motorStop() {</code>''''' | |||
'''''<code> // Arrêt du moteur : PWM à 0 sur les deux voies</code>''''' | |||
'''''<code> analogWrite(RPWM, 0);</code>''''' | |||
'''''<code> analogWrite(LPWM, 0);</code>''''' | |||
'''''<code>}</code>''''' | |||
'''''<code>void motorRun(bool forward, int pwm) {</code>''''' | |||
'''''<code> // Commande du moteur :</code>''''' | |||
'''''<code> // forward = true -> sens avant (RPWM = pwm, LPWM = 0)</code>''''' | |||
'''''<code> // forward = false -> sens inverse (RPWM = 0, LPWM = pwm)</code>''''' | |||
'''''<code> if (forward) { // Sens avant</code>''''' | |||
'''''<code> analogWrite(RPWM, pwm);</code>''''' | |||
'''''<code> analogWrite(LPWM, 0);</code>''''' | |||
'''''<code> } else { // Sens inverse</code>''''' | |||
'''''<code> analogWrite(RPWM, 0);</code>''''' | |||
'''''<code> analogWrite(LPWM, pwm);</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code>}</code>''''' | |||
'''''<code>void setup() {</code>''''' | |||
'''''<code> // Configuration des broches en sortie</code>''''' | |||
'''''<code> pinMode(RPWM, OUTPUT);</code>''''' | |||
'''''<code> pinMode(LPWM, OUTPUT);</code>''''' | |||
'''''<code> pinMode(REN, OUTPUT);</code>''''' | |||
'''''<code> pinMode(LEN, OUTPUT);</code>''''' | |||
'''''<code> // Activation du driver et arrêt initial</code>''''' | |||
'''''<code> enableDriver(true);</code>''''' | |||
'''''<code> motorStop();</code>''''' | |||
'''''<code> // Initialisation de l'état : démarrage en sens avant</code>''''' | |||
'''''<code> t0 = millis();</code>''''' | |||
'''''<code> state = FWD_KICK;</code>''''' | |||
'''''<code> motorRun(true, pwmKick); // Démarrage en sens avant avec PWM plus élevé</code>''''' | |||
'''''<code>}</code>''''' | |||
'''''<code>void loop() {</code>''''' | |||
'''''<code> unsigned long now = millis();</code>''''' | |||
'''''<code> switch (state) {</code>''''' | |||
'''''<code> case FWD_KICK:</code>''''' | |||
'''''<code> // Phase de démarrage en sens avant (boost)</code>''''' | |||
'''''<code> if (now - t0 >= kickMs) {</code>''''' | |||
'''''<code> state = FWD_RUN;</code>''''' | |||
'''''<code> t0 = now;</code>''''' | |||
'''''<code> motorRun(true, pwmSlow); // Passage à la vitesse lente en sens avant</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code> break;</code>''''' | |||
'''''<code> case FWD_RUN:</code>''''' | |||
'''''<code> // Marche avant pendant forwardMs</code>''''' | |||
'''''<code> if (now - t0 >= forwardMs) {</code>''''' | |||
'''''<code> motorStop();</code>''''' | |||
'''''<code> state = PAUSE1;</code>''''' | |||
'''''<code> t0 = now;</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code> break;</code>''''' | |||
'''''<code> case PAUSE1:</code>''''' | |||
'''''<code> // Pause avant inversion de sens</code>''''' | |||
'''''<code> if (now - t0 >= pauseMs) {</code>''''' | |||
'''''<code> state = REV_KICK;</code>''''' | |||
'''''<code> t0 = now;</code>''''' | |||
'''''<code> motorRun(false, pwmKick); // Démarrage en sens inverse avec boost</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code> break;</code>''''' | |||
'''''<code> case REV_KICK:</code>''''' | |||
'''''<code> // Phase de démarrage en sens inverse (boost)</code>''''' | |||
'''''<code> if (now - t0 >= kickMs) {</code>''''' | |||
'''''<code> state = REV_RUN;</code>''''' | |||
'''''<code> t0 = now;</code>''''' | |||
'''''<code> motorRun(false, pwmSlow); // Passage à la vitesse lente en sens inverse</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code> break;</code>''''' | |||
'''''<code> case REV_RUN:</code>''''' | |||
'''''<code> // Marche inverse pendant reverseMs</code>''''' | |||
'''''<code> if (now - t0 >= reverseMs) {</code>''''' | |||
'''''<code> motorStop();</code>''''' | |||
'''''<code> state = PAUSE2;</code>''''' | |||
'''''<code> t0 = now;</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code> break;</code>''''' | |||
'''''<code> case PAUSE2:</code>''''' | |||
'''''<code> // Pause avant de revenir au sens avant</code>''''' | |||
'''''<code> if (now - t0 >= pauseMs) {</code>''''' | |||
'''''<code> state = FWD_KICK;</code>''''' | |||
'''''<code> t0 = now;</code>''''' | |||
'''''<code> motorRun(true, pwmKick); // Retour au démarrage en sens avant</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code> break;</code>''''' | |||
'''''<code> }</code>''''' | |||
'''''<code>}</code>''''' | |||
Discussion avec Thomas Ferreira sur finalité du projet. | |||
Discussion avec Thomas sur les calculs pour trouver le nombres de rotation que le moteur doit effectuer pour remonter et redescendre, correctement, la prise de la canne à pêche. | Discussion avec Thomas sur les calculs pour trouver le nombres de rotation que le moteur doit effectuer pour remonter et redescendre, correctement, la prise de la canne à pêche. | ||
Version du 29 janvier 2026 à 21:24
Journée du mardi 27/01
Le projet se compose d’une canne à pêche, remontant et redescendant une « prise » en boucle.
Pendant cette semaine nous essayerons de créer le circuit permettant la remontée et la descente que nous viendrons fixer au moulinet avec des pièces modélisées.
Discussion avec Chaymae sur les modules à acheter pour circuit moteur.
Hameçonnage de la canne à pêche et réalisation de la structure « amas » en coquillages ( percée des coquillages avant enfilage à la Dremel ).
Journée du mercredi 28/01
Tests du déroulage des hameçons. Discussion avec Xilong sur le codage du moteur.
Journée du Jeudi 29/01
Assemblage du circuit moteur et tests de la rotation. Nous avons utilisé les matériels suivants : Arduino Uno (génère les signaux de commande), module driver moteur BTS7960 (amplification de puissance / inversion du sens de rotation), moteur CC à réducteur 5840-31ZY (12 V, 12 tr/min), alimentation à découpage S-240-12 (fournit une tension continue de 12 V côté moteur).
Instructions de câblage: Brancher l’entrée du S-240-12 sur la phase, le neutre et la terre, relier sa sortie V+/V- à l’alimentation moteur du BTS7960 (B+/B- ou +12V/GND), connecter les deux fils du moteur sur M+/M- (OUT1/OUT2), piloter le BTS7960 avec l’Arduino via RPWM/LPWM (vitesse et sens) et R_EN/L_EN (enable) en lui fournissant aussi VCC 5V et GND, avec une masse commune obligatoire : GND Arduino = GND BTS7960 = V- de l’alimentation.
Codage arduino: Le programme met en œuvre, via une simple boucle de machine à états, une séquence : démarrage en marche avant avec augmentation progressive de la puissance, fonctionnement à faible vitesse en marche avant pendant un certain temps, pause, démarrage en marche arrière avec augmentation progressive de la puissance, fonctionnement à faible vitesse en marche arrière pendant la même durée (ou une durée définie), puis nouvelle pause, en utilisant le PWM pour contrôler la vitesse et le temps de fonctionnement pour approximer la distance aller-retour. Voici le code de l'arduino ci-dessous.
// BTS7960 : RPWM sur D5, LPWM sur D6, R_EN sur D7, L_EN sur D8
const int RPWM = 5;
const int LPWM = 6;
const int REN = 7;
const int LEN = 8;
// Réglages de la vitesse lente (à ajuster en premier)
int pwmSlow = 60; // PWM en vitesse lente : plus petit = plus lent (souvent 50~120)
int pwmKick = 140; // PWM de démarrage : évite que le moteur ne démarre pas sous charge (souvent 120~180)
unsigned long kickMs = 250; // Durée du “coup de boost” au démarrage (en ms)
// La “longueur” est approximée par le temps de rotation (à adapter selon le besoin)
unsigned long forwardMs = 8000; // Durée de rotation en sens avant (ex : 8 s)
unsigned long reverseMs = 5000; // Durée de rotation en sens inverse (ex : 5 s)
unsigned long pauseMs = 200; // Pause lors du changement de sens (mettre 0 si aucune pause)
// États (machine à états) : démarrage avant, marche avant, pause, démarrage arrière, marche arrière, pause
enum State { FWD_KICK, FWD_RUN, PAUSE1, REV_KICK, REV_RUN, PAUSE2 };
State state = FWD_KICK;
unsigned long t0 = 0;
void enableDriver(bool en) {
// Active/désactive le driver en mettant les deux broches Enable à HIGH/LOW
digitalWrite(REN, en ? HIGH : LOW);
digitalWrite(LEN, en ? HIGH : LOW);
}
void motorStop() {
// Arrêt du moteur : PWM à 0 sur les deux voies
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
}
void motorRun(bool forward, int pwm) {
// Commande du moteur :
// forward = true -> sens avant (RPWM = pwm, LPWM = 0)
// forward = false -> sens inverse (RPWM = 0, LPWM = pwm)
if (forward) { // Sens avant
analogWrite(RPWM, pwm);
analogWrite(LPWM, 0);
} else { // Sens inverse
analogWrite(RPWM, 0);
analogWrite(LPWM, pwm);
}
}
void setup() {
// Configuration des broches en sortie
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(REN, OUTPUT);
pinMode(LEN, OUTPUT);
// Activation du driver et arrêt initial
enableDriver(true);
motorStop();
// Initialisation de l'état : démarrage en sens avant
t0 = millis();
state = FWD_KICK;
motorRun(true, pwmKick); // Démarrage en sens avant avec PWM plus élevé
}
void loop() {
unsigned long now = millis();
switch (state) {
case FWD_KICK:
// Phase de démarrage en sens avant (boost)
if (now - t0 >= kickMs) {
state = FWD_RUN;
t0 = now;
motorRun(true, pwmSlow); // Passage à la vitesse lente en sens avant
}
break;
case FWD_RUN:
// Marche avant pendant forwardMs
if (now - t0 >= forwardMs) {
motorStop();
state = PAUSE1;
t0 = now;
}
break;
case PAUSE1:
// Pause avant inversion de sens
if (now - t0 >= pauseMs) {
state = REV_KICK;
t0 = now;
motorRun(false, pwmKick); // Démarrage en sens inverse avec boost
}
break;
case REV_KICK:
// Phase de démarrage en sens inverse (boost)
if (now - t0 >= kickMs) {
state = REV_RUN;
t0 = now;
motorRun(false, pwmSlow); // Passage à la vitesse lente en sens inverse
}
break;
case REV_RUN:
// Marche inverse pendant reverseMs
if (now - t0 >= reverseMs) {
motorStop();
state = PAUSE2;
t0 = now;
}
break;
case PAUSE2:
// Pause avant de revenir au sens avant
if (now - t0 >= pauseMs) {
state = FWD_KICK;
t0 = now;
motorRun(true, pwmKick); // Retour au démarrage en sens avant
}
break;
}
}
Discussion avec Thomas Ferreira sur finalité du projet.
Discussion avec Thomas sur les calculs pour trouver le nombres de rotation que le moteur doit effectuer pour remonter et redescendre, correctement, la prise de la canne à pêche.
Une pièce intermédiaire à été modélisée et imprimée en 3D pour lier le moteur au moulinet de la canne à pêche.
Une pièce à été modélisée et imprimée pour fixer le moteur sur la cane à pêche.
Une réflexion à été faite sur la fixation de la cane à pêche sur le mur.
La méthode utilisée sera d'emboiter deux planche en bois. Une en forme de triangle et une en forme de rectangle. La cane pourra être accrochée à la planche en forme de triangle avec des colliers de serrage pour qu'elle forme un angle. Le support global pourra être accroché au mur avec des vis.
Ces planches ont été découpée à l'aide de la ShopBot.
La pièce triangulaire à des tenons et la pièce rectangulaire a des perçages à la forme des tenons pour positionner les deux pièces et qu'elles s'emboitent correctement ensembles avant de les coller.