correctifs sur les pins et le fonctionnement global

This commit is contained in:
dd060606
2025-05-28 13:27:51 +02:00
parent d728979256
commit e50d4b55da
4 changed files with 35 additions and 75 deletions

View File

@@ -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": {}
} }

View File

@@ -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

View File

@@ -12,4 +12,3 @@
platform = espressif32 platform = espressif32
board = esp32dev board = esp32dev
framework = arduino framework = arduino
lib_deps = teemuatlut/TMCStepper@^0.7.3

View File

@@ -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