0% ont trouvé ce document utile (0 vote)
3 vues3 pages

Contrôle moteur pas à pas avec boutons

Le document est un code Arduino pour contrôler un moteur pas à pas avec des boutons et des capteurs. Il inclut des fonctionnalités telles qu'un bouton d'arrêt d'urgence et un affichage sur un afficheur 7 segments. Le moteur se déplace vers le haut ou vers le bas en fonction des boutons pressés et des capteurs détectés.

Transféré par

babamariko008
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues3 pages

Contrôle moteur pas à pas avec boutons

Le document est un code Arduino pour contrôler un moteur pas à pas avec des boutons et des capteurs. Il inclut des fonctionnalités telles qu'un bouton d'arrêt d'urgence et un affichage sur un afficheur 7 segments. Le moteur se déplace vers le haut ou vers le bas en fonction des boutons pressés et des capteurs détectés.

Transféré par

babamariko008
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

// Broches boutons et capteurs

const int boutons[4] = {2, 3, 4, 5};


const int capteurs[4] = {6, 7, 8, 9};

// Moteur pas à pas via ULN2003


const int IN1 = 10;
const int IN2 = 11;
const int IN3 = 12;
const int IN4 = 13;

// Broches 74HC595
const int dataPin = A0;
const int latchPin = A1;
const int clockPin = A2;

// Bouton arrêt d'urgence


const int urgenceBtn = A3;

// Données pour afficheur 7 segments (anode commune)


byte digits[10] = {
B00111111, B00000110, B01011011, B01100110,
B01101101, B01111101, B01111111, B00000111,
B01111111, B01101111
};

int etageActuel = 0;
int etageCible = -1;
bool arretUrgence = false;

void setup() {
for (int i = 0; i < 4; i++) {
pinMode(boutons[i], INPUT);
pinMode(capteurs[i], INPUT);
}
pinMode(urgenceBtn, INPUT);

pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
arreterMoteur();

pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
update7Seg(etageActuel);
}

void loop() {
if (digitalRead(urgenceBtn) == HIGH) {
arretUrgence = true;
arreterMoteur();
return;
} else {
arretUrgence = false;
}

for (int i = 0; i < 4; i++) {


if (digitalRead(boutons[i]) == HIGH) {
etageCible = i;
}
}

if (etageCible != -1 && etageCible != etageActuel && !arretUrgence) {


if (etageCible > etageActuel) {
while (digitalRead(capteurs[etageCible]) == LOW) {
stepSequenceUp();
}
} else {
while (digitalRead(capteurs[etageCible]) == LOW) {
stepSequenceDown();
}
}
arreterMoteur();
etageActuel = etageCible;
etageCible = -1;

update7Seg(etageActuel);
}
}

// Séquences moteur pas à pas


void stepSequenceUp() {
const int steps[4][4] = {
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
for (int i = 0; i < 4; i++) {
digitalWrite(IN1, steps[i][0]);
digitalWrite(IN2, steps[i][1]);
digitalWrite(IN3, steps[i][2]);
digitalWrite(IN4, steps[i][3]);
delay(5);
}
}

void stepSequenceDown() {
const int steps[4][4] = {
{0, 0, 0, 1},
{0, 0, 1, 0},
{0, 1, 0, 0},
{1, 0, 0, 0}
};
for (int i = 0; i < 4; i++) {
digitalWrite(IN1, steps[i][0]);
digitalWrite(IN2, steps[i][1]);
digitalWrite(IN3, steps[i][2]);
digitalWrite(IN4, steps[i][3]);
delay(5);
}
}

void arreterMoteur() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}

// Affichage via 74HC595 + afficheur 7 segments


void update7Seg(int valeur) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, digits[valeur]);
digitalWrite(latchPin, HIGH);
}

Vous aimerez peut-être aussi