Bonjour à tous !
J'ai entrepris la construction d'un petit automate animé par deux moteurs pas à pas.
étant maxi débutant, j'ai eu l'immense fierté de voir que l'ensemble a bien fonctionné !
..... pendant un temps !
- Soudainement l'un des moteurs à cesser de tourner. il se contente d'un "buzz".
moteur que j'ai testé indépendamment ensuite - avec succès, il réagit bien, - ce qui n'est pas le cas de son driver qui semble endommagé.
Voyez-vous une erreur dans le montage - ou dans le code - qui aurait pu causer sa perte ?
je me permet de vous solliciter, dans le rêve fou et la quête perpétuelle de vouloir apprendre de ses erreurs (et surtout d'éviter de les reproduire indéfiniment jusqu'au bout de sa vie).... ![]()
voici le matériel mobilisé
- deux pilotes pas à pas : DMT332T : User Manual
- une carte Arduino Every
- une batterie Makita 18v 4ah
- deux moteurs pas à pas : 17HS15-1684S-HG50
- un capteur Hall : KY-003
- une led smb 1w : https://am zn.eu/d/5EmXr09
- deux relais : KY-019
- un buzzer
- un convertisseur : LM2596S DC-DC Step down Modul
cablage_V2.pdf (431.1 KB)
////////////////////////////////////////
////////////////////////////////////////
// Include the AccelStepper library:
#include <AccelStepper.h>
int SENSOR = 7; // affectation du sensor Hall magnetic
#define PHOTO 5 // affectation LED - déclenchement photo
#define buzzer 6 // affectation du buzzer
int frequence[] = { 262, 330, 370, 440 }; // des notes
// MOTEUR - PAN
AccelStepper tourne(AccelStepper::DRIVER, 11, 10); // PUL , DIR
// MOTEUR - TILT
AccelStepper monte(AccelStepper::DRIVER, 9, 8); // PUL , DIR
void homing() {
monte.setMaxSpeed(1300);
monte.setAcceleration(3000);
// Set the target position:
monte.move(-3000);
monte.run();
}
////////////////
void positioning() {
monte.setMaxSpeed(300);
monte.setAcceleration(1000);
// Set the target position:
monte.move(1000);
monte.run();
}
////////////////
void bipbip() {
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(100);
digitalWrite(buzzer, HIGH);
delay(150);
digitalWrite(buzzer, LOW);
delay(100);
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
delay(100);
}
////////////////
void clic() {
delay(200); // Pause
digitalWrite(PHOTO, HIGH);
delay(50); // Pause
digitalWrite(PHOTO, LOW);
delay(1000); // Pause
}
////////////////
void clicetclac()
{
monte.setCurrentPosition(0);
for (int i = 0; i < 5; i++) {
tourne.setCurrentPosition(0);
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(2500);
monte.runToPosition();
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(5200);
monte.runToPosition();
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(8000);
monte.runToPosition();
clic();
delay(100); // Pause
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(11200);
monte.runToPosition();
clic();
////////////tourne !////////////////
delay(100); // Pause
tourne.setCurrentPosition(0);
tourne.setMaxSpeed(5000);
tourne.setAcceleration(2000);
tourne.move(4080);
tourne.runToPosition();
delay(500); // Pause
////////////////////////////
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(8000);
monte.runToPosition();
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(5200);
monte.runToPosition();
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(2500);
monte.runToPosition();
clic();
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
monte.moveTo(0);
monte.runToPosition();
clic();
////////////tourne////////////////
delay(100); // Pause
tourne.setCurrentPosition(0);
tourne.setMaxSpeed(5000);
tourne.setAcceleration(2000);
tourne.move(4080);
tourne.runToPosition();
delay(100); // Pause
}
}
////////////////
void tiltretour() {
{
monte.setMaxSpeed(5000);
monte.setAcceleration(2000);
// Set the target position:
monte.moveTo(2500);
// Run to target position with set speed and acceleration/deceleration:
monte.runToPosition();
}
}
////////////////
void setup() {
pinMode(PHOTO, OUTPUT);
bool capteurtilt = false;
pinMode(SENSOR, INPUT);
delay(200); // Pause
bipbip(); //master
delay(1000); // Pause
do
{
if (!capteurtilt) {
if (digitalRead(SENSOR) == HIGH)
// avancer un peu
homing();
else
// signaler position atteinte
capteurtilt = true;
}
}
while (!capteurtilt);
delay(300); // Pause
clicetclac(); // master
delay(500); // Pause
bipbip(); //master
delay(100); // Pause
tiltretour(); //master
delay(500); // Pause
}
void loop() {
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
delay(100);
{
for (int i = 0; i < 1; i++) {
tone(buzzer, frequence[i], 100);
delay(500);
}
}
delay(100);
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
delay(900);
}