mirror of
https://github.com/modelec/pami.git
synced 2026-03-18 21:40:35 +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,
|
||||
"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": {}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,4 +12,3 @@
|
||||
platform = espressif32
|
||||
board = esp32dev
|
||||
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 <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 "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
|
||||
|
||||
Reference in New Issue
Block a user