Hello,
je m'amuse un peu avec l'Arduino.
Ici, je voudrais faire un ouvre porte automatique avec un Nema 17 (pour le couple et la précision) et des PIR pour la détection de mouvement de chaque côté de la porte.
Un ouvre-porte comme à l'entrée des grandes surfaces, quoi.
Mais applicable pour une moustiquaire dans mon cas.
Ca fonctionne nickel, je n'ai plus qu'à mettre une courroie sur le Nema pour entraîner la porte.
Mais pour que ce soit parfait, je dois encore entrer 2 paramètres :
- un pot pour régler la vitesse d'ouverture
- un paramètre pour lui dire que si le mouvement est interrompu par une nouvelle présence, il repart en mode ouverture.
J'ai mis le shéma de câblage ici : http://standon.be/WP3/ouvre-porte-automatique/
Si vous saviez me donner des pistes, ce serait génial.
#define stp 2
#define dir 3
#define MS1 4
#define MS2 5
#define EN 6
int PIRSensor = 9;
int ledOn = 13;
int ledOff = 12;
// Variables
char user_input;
int x;
int y;
int state;
void setup() {
Serial.begin(9600);
pinMode(PIRSensor, INPUT);
pinMode(ledOn, OUTPUT);
pinMode(ledOff, OUTPUT);
digitalWrite(PIRSensor, HIGH);
pinMode(stp, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(EN, OUTPUT);
resetEDPins(); // Remise a zero des pas
Serial.begin(9600); // Fenetre Serial pour debug
Serial.println("Systeme OK.");
Serial.println("Led Verte.");
Serial.println("En attente de passage.");
Serial.println("");
digitalWrite(ledOn, LOW);
digitalWrite(ledOff, HIGH);
}
void loop() {
digitalWrite(EN, LOW);
int buttonState = digitalRead(PIRSensor);
if(buttonState==0)
{
digitalWrite(ledOn, HIGH);
digitalWrite(ledOff, LOW);
ForwardBackwardStep();
}
else {
digitalWrite(ledOn, LOW);
digitalWrite(ledOff, HIGH);
resetEDPins();
}
}
// Reset de l'Easy Driver
void resetEDPins()
{
digitalWrite(stp, LOW);
digitalWrite(dir, LOW);
digitalWrite(MS1, LOW);
digitalWrite(MS2, LOW);
digitalWrite(EN, HIGH);
}
// Fonction avance-recule
void ForwardBackwardStep()
{
Serial.println("");
Serial.println("Signal recu");
Serial.println("Led Rouge.");
Serial.println("Mouvement moteur 2000 pas a gauche = 10 tours.");
Serial.println("");
for(x= 1; x<3; x++) // <3 = 1 tour a gauche un tour a droite
{
// lit la direction et la change
state=digitalRead(dir);
if(state == HIGH)
{
digitalWrite(dir, LOW);
Serial.println("Porte ouverte 5 secondes.");
delay (5000); //stop pendant 5 secondes
Serial.println("");
Serial.println("Mouvement moteur 2000 pas a droite = 10 tours.");
Serial.println("");
}
else if(state ==LOW)
{
digitalWrite(dir, HIGH);
}
for(y=1; y<2000; y++) // nombre de pas
{
digitalWrite(stp,HIGH); // Mise en route du moteur
delay(1);
digitalWrite(stp,LOW); // Continue le mouvement
delay(1);
}
}
Serial.println("Porte fermee.");
Serial.println("Led verte.");
Serial.println("");
Serial.println("En attente de passage.");
Serial.println("");
}