Salve ragazzi, sto realizzando un modellino di un cancello automatico scorrevole. Il video fa vedere il funzionamento del programma:TEST_CANCELLO
I pulsanti sono solo per prova per poi sostituirli con le fotocellule e i finecorsa.
-1 pulsante apertura cancello
-2 pulsante finecorsa apertura cancello
-3 pulsante finecorsa chiusura cancello
-4 pulsante fotocellula
-5 pulsante chiusura cancello
-led bianco = lampeggiante
-led verde = apertura cancello
-led blu = chiusura cancello
Ora però ci sono diversi problemi nel programma:
-Quando il finecorsa di apertura va a 1 cioè quando il cancello e tutto aperto i relè non scattano subito ma dopo circa mezzo secondo/un secondo. Io vorrei però che appena FCA passa a 1 il relè vada a zero. Come posso risolvere questo problema?
-Quando il cancello si sta chiudendo e la fotocellula FC rileva qualche oggetto il cancello si deve fermare per due secondi per poi aprirsi nuovamente ovviamente con il lampeggiante sempre attivo! Come potrei fare per fargli fare questa cosa?
-Quando si attiva il finecorsa di chiusura (FCC), come in FCA, i relè non scattano istantaneamente.
-Quando il cancello è in fase di chiusura , se si preme il pulsante di apertura(PA) il cancello si arresta per due secondi per poi invertire la marcia e riaprirsi.
-Quando il cancello è nello stato di temporizzazione premendo il pulsante di chiusura il cancello si chiude immediatamente senza aspettare il tempo prestabilito per la chiusura automatica.
Mi potete aiutare con il programma? Consigli su come risolvere questi problemi e implementare le funzioni che ho detto prima? Ah prima che mi dimentico la scheda che ho io è a logica inversa quindi quando l'uscita e HIGH i relè sono LOW e viceversa
Questo è il codice che ho realizzato:
#define F1 2 //pin rele 1 per fase motore avanti
#define F2 3 //pin rele 2 per fase motore indietro
#define F3 4 //pin rele 3 per fase motore comune
#define H 5 //pin rele 4 per lampada lampeggiante
#define PA 12 //pulsante apertura cancello
#define PC 8 //pulsante chiusura cancello
#define FCA 11 //finecorsa apertura cancello
#define FCC 10 //finecorsa chiusura cancello
#define FC 9 //fotocellula per sicurezza
#define PAT 6 //pulsante apertura telecomando
#define PCT 7 //pulsante chiusura telecomando
int STATOP=0;
int STATOFCA=0;
int STATOFCC=0;
int STATOFC=1;
int STATOP1=0;
int RITARDO=0;
int STATO=0;
void setup() {
pinMode(F1, OUTPUT);
pinMode(F2, OUTPUT);
pinMode(F3, OUTPUT);
pinMode(H, OUTPUT);
pinMode(PA, INPUT);
pinMode(PC, INPUT);
pinMode(FCA, INPUT);
pinMode(FCC, INPUT);
pinMode(FC, INPUT);
pinMode(PAT, INPUT);
pinMode(PCT, INPUT);
digitalWrite(F1,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(F3,HIGH);
digitalWrite(H,HIGH);
}
void loop() {
if(digitalRead(PA)==1 || STATO==1 || digitalRead(PAT)==1) //TASTO P PREMUTO
{STATO=1;
if(digitalRead(FCA)==0) //
{digitalWrite(F1,LOW);
digitalWrite(F3,LOW);
digitalWrite(H,LOW);
delay(500);
digitalWrite(H,HIGH);
delay(500);
}
else
{STATO=3;
digitalWrite(F1,HIGH);
digitalWrite(F3,HIGH);
digitalWrite(H,HIGH);
}
}
if(digitalRead(PC)==1 || STATO==2 || digitalRead(PCT)==1) //CHIUSURA -----------------------------------------------------
{
STATO=2;
if(digitalRead(FCC)==0) //FCC NON attivato
{
digitalWrite(H,LOW);
delay(500);
digitalWrite(H,HIGH);
delay(500);
digitalWrite(F2,LOW);
digitalWrite(F3,LOW);
if(digitalRead(FC)==1) //Barriera fotocellula attivata
{
digitalWrite(F1,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(F3,HIGH);
delay(2000);
STATO=1;
}
}
else //FCC ATTIVATO
{
STATO=0;
digitalWrite(F1,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(F3,HIGH);
digitalWrite(H,HIGH);
}
}
if(STATO==3) //APERTO-TEMPORIZZAZIONE -------------------------------------------------
{
delay(10000);
STATO=2;
}
}