mirror of
https://github.com/modelec/PAMI-2025.git
synced 2026-03-18 13:30:41 +01:00
correctifs sur les pins et le fonctionnement global
This commit is contained in:
19
diagram.json
19
diagram.json
@@ -54,21 +54,6 @@
|
|||||||
"top": 163.2,
|
"top": 163.2,
|
||||||
"left": -19.2,
|
"left": -19.2,
|
||||||
"attrs": { "text": "Obstacles" }
|
"attrs": { "text": "Obstacles" }
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "wokwi-hc-sr04",
|
|
||||||
"id": "ultrasonic2",
|
|
||||||
"top": 470.9,
|
|
||||||
"left": -357.9,
|
|
||||||
"rotate": 180,
|
|
||||||
"attrs": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "wokwi-text",
|
|
||||||
"id": "text2",
|
|
||||||
"top": 508.8,
|
|
||||||
"left": -182.4,
|
|
||||||
"attrs": { "text": "Capteur de chutes" }
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"connections": [
|
"connections": [
|
||||||
@@ -91,9 +76,7 @@
|
|||||||
["esp:16", "drv1:DIR", "blue", ["v9.6", "h144"]],
|
["esp:16", "drv1:DIR", "blue", ["v9.6", "h144"]],
|
||||||
["esp:4", "drv3:DIR", "blue", ["v19.2", "h-57.6", "v-201.6"]],
|
["esp:4", "drv3:DIR", "blue", ["v19.2", "h-57.6", "v-201.6"]],
|
||||||
["ultrasonic1:TRIG", "esp:18", "violet", ["v76.8", "h-221.2"]],
|
["ultrasonic1:TRIG", "esp:18", "violet", ["v76.8", "h-221.2"]],
|
||||||
["ultrasonic1:ECHO", "esp:5", "violet", ["v86.4", "h-240.8"]],
|
["ultrasonic1:ECHO", "esp:5", "violet", ["v86.4", "h-240.8"]]
|
||||||
["esp:15", "ultrasonic2:ECHO", "cyan", ["v0"]],
|
|
||||||
["esp:17", "ultrasonic2:TRIG", "cyan", ["v115.2", "h-38.4"]]
|
|
||||||
],
|
],
|
||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,20 +36,22 @@ struct Step
|
|||||||
#define M1_ENABLE_PIN 32
|
#define M1_ENABLE_PIN 32
|
||||||
|
|
||||||
// Moteur 2 - Droite
|
// Moteur 2 - Droite
|
||||||
#define M2_DIR_PIN 19
|
#define M2_DIR_PIN 21
|
||||||
#define M2_STEP_PIN 23
|
#define M2_STEP_PIN 25
|
||||||
#define M2_ENABLE_PIN 26
|
#define M2_ENABLE_PIN 27
|
||||||
|
|
||||||
// Capteur à ultrasons
|
// Capteur à ultrasons
|
||||||
#define TRIG_PIN 14
|
#define TRIG_PIN 15
|
||||||
#define ECHO_PIN 15
|
#define ECHO_PIN 14
|
||||||
|
|
||||||
// Capteur de chute
|
// Capteur de chute
|
||||||
#define FALL_TRIG_PIN 12
|
#define FALL_PIN 13
|
||||||
#define FALL_ECHO_PIN 13
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Le moteur 1 est en 32 microsteps, le moteur 2 est en 64 microsteps
|
||||||
|
#define MOTOR_MULTIPLIER 2 // Pour ajuster la vitesse des moteurs car ils ont des microsteps différents
|
||||||
|
|
||||||
// PINs pour le simulateur
|
// PINs pour le simulateur
|
||||||
#ifdef SIMULATOR
|
#ifdef SIMULATOR
|
||||||
|
|
||||||
@@ -68,8 +70,7 @@ struct Step
|
|||||||
#define ECHO_PIN 5
|
#define ECHO_PIN 5
|
||||||
|
|
||||||
// Capteur de chute
|
// Capteur de chute
|
||||||
#define FALL_TRIG_PIN 17
|
#define FALL_PIN 17
|
||||||
#define FALL_ECHO_PIN 15
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -77,8 +78,8 @@ struct Step
|
|||||||
#define R_SENSE 0.11f
|
#define R_SENSE 0.11f
|
||||||
#define CURRENT 800 // mA
|
#define CURRENT 800 // mA
|
||||||
// Adresses des drivers TMC2209
|
// Adresses des drivers TMC2209
|
||||||
#define DRIVER1_ADDR 0b00
|
#define DRIVER1_ADDR 0b01
|
||||||
#define DRIVER2_ADDR 0b01
|
#define DRIVER2_ADDR 0b10
|
||||||
|
|
||||||
// Constantes pour les roues
|
// Constantes pour les roues
|
||||||
#define WHEEL_DIAMETER 5.5 // cm
|
#define WHEEL_DIAMETER 5.5 // cm
|
||||||
|
|||||||
@@ -12,4 +12,3 @@
|
|||||||
platform = espressif32
|
platform = espressif32
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
framework = arduino
|
framework = arduino
|
||||||
lib_deps = teemuatlut/TMCStepper@^0.7.3
|
|
||||||
|
|||||||
67
src/main.cpp
67
src/main.cpp
@@ -1,17 +1,9 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <TMCStepper.h>
|
// #define SIMULATOR // Commenter cette ligne pour utiliser le matériel réel
|
||||||
|
// Définitions des constantes dans main.h
|
||||||
#define SIMULATOR // Commenter cette ligne pour utiliser le matériel réel
|
|
||||||
// Définitions des constantes dans main.h
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
// UART (bus unique)
|
|
||||||
HardwareSerial TMCSerial(1);
|
|
||||||
|
|
||||||
TMC2209Stepper driver1(&TMCSerial, R_SENSE, DRIVER1_ADDR);
|
|
||||||
TMC2209Stepper driver2(&TMCSerial, R_SENSE, DRIVER2_ADDR);
|
|
||||||
|
|
||||||
volatile int32_t speed_steps_per_sec = 0; // target speed (signed)
|
volatile int32_t speed_steps_per_sec = 0; // target speed (signed)
|
||||||
uint32_t last_step_time = 0;
|
uint32_t last_step_time = 0;
|
||||||
|
|
||||||
@@ -26,8 +18,9 @@ bool movementInProgress = false;
|
|||||||
// Chaque étape du scénario
|
// Chaque étape du scénario
|
||||||
Step scenario[] = {
|
Step scenario[] = {
|
||||||
{STEP_FORWARD, 20},
|
{STEP_FORWARD, 20},
|
||||||
{STEP_ROTATE, 90},
|
// {STEP_ROTATE, 90},
|
||||||
{STEP_FORWARD_UNTIL_FALL, 0}};
|
// {STEP_FORWARD_UNTIL_FALL, 0}
|
||||||
|
};
|
||||||
const int scenarioLength = sizeof(scenario) / sizeof(Step);
|
const int scenarioLength = sizeof(scenario) / sizeof(Step);
|
||||||
int currentScenarioStep = 0;
|
int currentScenarioStep = 0;
|
||||||
bool scenarioInProgress = false;
|
bool scenarioInProgress = false;
|
||||||
@@ -42,7 +35,6 @@ void stopMotors()
|
|||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
TMCSerial.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
|
|
||||||
|
|
||||||
pinMode(M1_STEP_PIN, OUTPUT);
|
pinMode(M1_STEP_PIN, OUTPUT);
|
||||||
pinMode(M1_DIR_PIN, OUTPUT);
|
pinMode(M1_DIR_PIN, OUTPUT);
|
||||||
@@ -54,27 +46,9 @@ void setup()
|
|||||||
pinMode(TRIG_PIN, OUTPUT);
|
pinMode(TRIG_PIN, OUTPUT);
|
||||||
pinMode(ECHO_PIN, INPUT);
|
pinMode(ECHO_PIN, INPUT);
|
||||||
// Capteur de chute
|
// Capteur de chute
|
||||||
pinMode(FALL_TRIG_PIN, OUTPUT);
|
pinMode(FALL_PIN, INPUT);
|
||||||
pinMode(FALL_ECHO_PIN, INPUT);
|
|
||||||
|
|
||||||
digitalWrite(M1_ENABLE_PIN, LOW);
|
|
||||||
digitalWrite(M2_ENABLE_PIN, LOW);
|
|
||||||
|
|
||||||
driver1.begin();
|
|
||||||
driver2.begin();
|
|
||||||
|
|
||||||
driver1.rms_current(CURRENT);
|
|
||||||
driver2.rms_current(CURRENT);
|
|
||||||
|
|
||||||
driver1.microsteps(16);
|
|
||||||
driver2.microsteps(16);
|
|
||||||
|
|
||||||
driver1.en_spreadCycle(false);
|
|
||||||
driver2.en_spreadCycle(false);
|
|
||||||
|
|
||||||
driver1.pwm_autoscale(true);
|
|
||||||
driver2.pwm_autoscale(true);
|
|
||||||
|
|
||||||
|
enableDrivers();
|
||||||
stopMotors();
|
stopMotors();
|
||||||
|
|
||||||
scenarioInProgress = true;
|
scenarioInProgress = true;
|
||||||
@@ -125,27 +99,28 @@ void updateSteppers()
|
|||||||
{
|
{
|
||||||
uint32_t now = micros();
|
uint32_t now = micros();
|
||||||
|
|
||||||
// Moteurs
|
// Moteur 1
|
||||||
if (speed_steps_per_sec != 0 && (steps_done < steps_target))
|
if (speed_steps_per_sec != 0 && (steps_done < steps_target))
|
||||||
{
|
{
|
||||||
uint32_t interval = 1000000UL / abs(speed_steps_per_sec);
|
uint32_t interval1 = 1000000UL / abs(speed_steps_per_sec);
|
||||||
if (now - last_step_time >= interval)
|
static uint32_t last_step_time1 = 0;
|
||||||
|
if (now - last_step_time1 >= interval1)
|
||||||
{
|
{
|
||||||
|
|
||||||
digitalWrite(M1_STEP_PIN, HIGH);
|
digitalWrite(M1_STEP_PIN, HIGH);
|
||||||
digitalWrite(M2_STEP_PIN, HIGH);
|
digitalWrite(M2_STEP_PIN, HIGH);
|
||||||
|
delayMicroseconds(2); // Short pulse width for step signal
|
||||||
digitalWrite(M1_STEP_PIN, LOW);
|
digitalWrite(M1_STEP_PIN, LOW);
|
||||||
digitalWrite(M2_STEP_PIN, LOW);
|
digitalWrite(M2_STEP_PIN, LOW);
|
||||||
delayMicroseconds(2);
|
last_step_time1 = now;
|
||||||
|
|
||||||
last_step_time = now;
|
|
||||||
steps_done++;
|
steps_done++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fin du mouvement ?
|
// Comptage des pas (on considère le moteur le plus lent pour terminer l'étape)
|
||||||
if (movementInProgress &&
|
if (movementInProgress && steps_done >= steps_target)
|
||||||
steps_done >= steps_target)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
stopMotors();
|
stopMotors();
|
||||||
movementInProgress = false;
|
movementInProgress = false;
|
||||||
Serial.println("Etape terminé");
|
Serial.println("Etape terminé");
|
||||||
@@ -178,9 +153,8 @@ long readDistanceCM(uint8_t trigPin, uint8_t echoPin)
|
|||||||
// Vérification de la distance du sol pour éviter les chutes
|
// Vérification de la distance du sol pour éviter les chutes
|
||||||
void checkFall()
|
void checkFall()
|
||||||
{
|
{
|
||||||
long fallDistance = readDistanceCM(FALL_TRIG_PIN, FALL_ECHO_PIN);
|
// On a fini notre chemin si on arrive en bout de table (détection de distance du sol)
|
||||||
// On a fini notre chemin si on arrive en bout de table (détection de distance du sol si plus de 5 cm)
|
if (digitalRead(FALL_PIN) == HIGH && movementInProgress)
|
||||||
if (fallDistance > 5.0 && movementInProgress)
|
|
||||||
{
|
{
|
||||||
stopMotors();
|
stopMotors();
|
||||||
movementInProgress = false;
|
movementInProgress = false;
|
||||||
@@ -196,8 +170,10 @@ void detectObstacles()
|
|||||||
{
|
{
|
||||||
lastObstacleCheckTime = now;
|
lastObstacleCheckTime = now;
|
||||||
|
|
||||||
|
#ifndef SIMULATOR
|
||||||
// On regarde la distance du sol
|
// On regarde la distance du sol
|
||||||
checkFall();
|
checkFall();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Si le robot tourne sur lui-même, on ne vérifie pas les obstacles
|
// Si le robot tourne sur lui-même, on ne vérifie pas les obstacles
|
||||||
if (lastDirection == RIGHT || lastDirection == LEFT)
|
if (lastDirection == RIGHT || lastDirection == LEFT)
|
||||||
@@ -273,6 +249,7 @@ void processScenario()
|
|||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
|
|
||||||
updateSteppers(); // Mise à jour des moteurs asynchrone
|
updateSteppers(); // Mise à jour des moteurs asynchrone
|
||||||
|
|
||||||
detectObstacles(); // Vérification des obstacles
|
detectObstacles(); // Vérification des obstacles
|
||||||
|
|||||||
Reference in New Issue
Block a user