diff --git a/diagram.json b/diagram.json index 0cf7fdd..3ca5f54 100644 --- a/diagram.json +++ b/diagram.json @@ -54,21 +54,6 @@ "top": 163.2, "left": -19.2, "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": [ @@ -91,9 +76,7 @@ ["esp:16", "drv1:DIR", "blue", ["v9.6", "h144"]], ["esp:4", "drv3:DIR", "blue", ["v19.2", "h-57.6", "v-201.6"]], ["ultrasonic1:TRIG", "esp:18", "violet", ["v76.8", "h-221.2"]], - ["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"]] + ["ultrasonic1:ECHO", "esp:5", "violet", ["v86.4", "h-240.8"]] ], "dependencies": {} } diff --git a/include/main.h b/include/main.h index 29196b4..300158e 100644 --- a/include/main.h +++ b/include/main.h @@ -36,20 +36,22 @@ struct Step #define M1_ENABLE_PIN 32 // Moteur 2 - Droite -#define M2_DIR_PIN 19 -#define M2_STEP_PIN 23 -#define M2_ENABLE_PIN 26 +#define M2_DIR_PIN 21 +#define M2_STEP_PIN 25 +#define M2_ENABLE_PIN 27 // Capteur à ultrasons -#define TRIG_PIN 14 -#define ECHO_PIN 15 +#define TRIG_PIN 15 +#define ECHO_PIN 14 // Capteur de chute -#define FALL_TRIG_PIN 12 -#define FALL_ECHO_PIN 13 +#define FALL_PIN 13 #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 #ifdef SIMULATOR @@ -68,8 +70,7 @@ struct Step #define ECHO_PIN 5 // Capteur de chute -#define FALL_TRIG_PIN 17 -#define FALL_ECHO_PIN 15 +#define FALL_PIN 17 #endif @@ -77,8 +78,8 @@ struct Step #define R_SENSE 0.11f #define CURRENT 800 // mA // Adresses des drivers TMC2209 -#define DRIVER1_ADDR 0b00 -#define DRIVER2_ADDR 0b01 +#define DRIVER1_ADDR 0b01 +#define DRIVER2_ADDR 0b10 // Constantes pour les roues #define WHEEL_DIAMETER 5.5 // cm diff --git a/platformio.ini b/platformio.ini index bcff6c8..4b30716 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,4 +12,3 @@ platform = espressif32 board = esp32dev framework = arduino -lib_deps = teemuatlut/TMCStepper@^0.7.3 diff --git a/src/main.cpp b/src/main.cpp index b9d7f0e..21ee26d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,17 +1,9 @@ #include -#include - -#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 "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) uint32_t last_step_time = 0; @@ -26,8 +18,9 @@ bool movementInProgress = false; // Chaque étape du scénario Step scenario[] = { {STEP_FORWARD, 20}, - {STEP_ROTATE, 90}, - {STEP_FORWARD_UNTIL_FALL, 0}}; + // {STEP_ROTATE, 90}, + // {STEP_FORWARD_UNTIL_FALL, 0} +}; const int scenarioLength = sizeof(scenario) / sizeof(Step); int currentScenarioStep = 0; bool scenarioInProgress = false; @@ -42,7 +35,6 @@ void stopMotors() void setup() { Serial.begin(115200); - TMCSerial.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN); pinMode(M1_STEP_PIN, OUTPUT); pinMode(M1_DIR_PIN, OUTPUT); @@ -54,27 +46,9 @@ void setup() pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); // Capteur de chute - pinMode(FALL_TRIG_PIN, OUTPUT); - 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); + pinMode(FALL_PIN, INPUT); + enableDrivers(); stopMotors(); scenarioInProgress = true; @@ -125,27 +99,28 @@ void updateSteppers() { uint32_t now = micros(); - // Moteurs + // Moteur 1 if (speed_steps_per_sec != 0 && (steps_done < steps_target)) { - uint32_t interval = 1000000UL / abs(speed_steps_per_sec); - if (now - last_step_time >= interval) + uint32_t interval1 = 1000000UL / abs(speed_steps_per_sec); + static uint32_t last_step_time1 = 0; + if (now - last_step_time1 >= interval1) { + digitalWrite(M1_STEP_PIN, HIGH); digitalWrite(M2_STEP_PIN, HIGH); + delayMicroseconds(2); // Short pulse width for step signal digitalWrite(M1_STEP_PIN, LOW); digitalWrite(M2_STEP_PIN, LOW); - delayMicroseconds(2); - - last_step_time = now; + last_step_time1 = now; steps_done++; } } - // Fin du mouvement ? - if (movementInProgress && - steps_done >= steps_target) + // Comptage des pas (on considère le moteur le plus lent pour terminer l'étape) + if (movementInProgress && steps_done >= steps_target) { + stopMotors(); movementInProgress = false; 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 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 si plus de 5 cm) - if (fallDistance > 5.0 && movementInProgress) + // On a fini notre chemin si on arrive en bout de table (détection de distance du sol) + if (digitalRead(FALL_PIN) == HIGH && movementInProgress) { stopMotors(); movementInProgress = false; @@ -196,8 +170,10 @@ void detectObstacles() { lastObstacleCheckTime = now; +#ifndef SIMULATOR // On regarde la distance du sol checkFall(); +#endif // Si le robot tourne sur lui-même, on ne vérifie pas les obstacles if (lastDirection == RIGHT || lastDirection == LEFT) @@ -273,6 +249,7 @@ void processScenario() void loop() { + updateSteppers(); // Mise à jour des moteurs asynchrone detectObstacles(); // Vérification des obstacles