Buongiorno a tutto il forum,vi prego di leggere fino alla fine.
Oggi vi posto un problema che riscontro in questo progetto con sistema l298n.. Come da titolo e detto anche in post precedenti questo progetto fa muovere un carrello su rotaie tramite una fune avvolta in un avvolgitore collegato ad un motore 12v e prevede una direzione avanti e indietro tramite finecorsa,fino a qui tutto OK.
Nei vari test che ho fatto funziona bene ma capita più volte che il motore parte e dopo pochi giri (qualche secondo) si ferma senza completare il suo ciclo, e questo per me è grave perché quando il relè aziona il contatto per avviare il motore (ho messo 500 millisecondi per dare solo lo start) un altro relè aziona la pompa dell'acqua e se il motore si ferma rischio di far seccare la terra alle giovane piantine..
In entrata del ponte-h ho messo una alimentatore da 12,86v 1,66A con un condensatore da 470nf e nel motore uno da 10nf, all'uscita con motore avviato mi dà un calo di 2v (9,5 - 10v) assorbendo un max di 1,3 A.. In entrata del modulo ho messo un fusibile da 2,5A perché avevo questo disponibile ma cercherò di metterne uno da 1,5A... L298n funziona con la tensione del motore con il jumper della logica inserito..
Vi posto di nuovo lo sketch che ho messo anche nei post precedenti..
Spero che qualcuno sa il motivo di questo problema..
Grazie sempre
#define enA 11
#define in1 10
#define in2 9
#define fcS 13 //Finecorsa Sinistro ( posizione di reset iniziale )
#define fcD 12 //Finecorsa Destro ( inverte il motore )
#define pin_sensore A0
byte stato_fc = 1 ;
byte velocita = 128 ; // Velocita motore 0-255
void motore_avanti() {
analogWrite ( enA, velocita );
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
void motore_indietro() {
analogWrite ( enA, velocita );
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
void motore_stop() {
analogWrite ( enA, 0 );
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
}
void reset_motore() {
while (digitalRead(fcS) == HIGH) { // legge finecorsa sinistro
motore_indietro(); // avvia motore indietro fino alla posizione iniziale
}
motore_stop();
delay(1000);
}
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(fcS, INPUT_PULLUP);
pinMode(fcD, INPUT_PULLUP);
pinMode(pin_sensore, INPUT_PULLUP);
reset_motore(); // Motore si mette in posizione di start
}
void loop() {
if (digitalRead(pin_sensore) == 0 ) { // attende lo start
delay(100);
stato_fc = 1 ;
motore_avanti() ;
while (stato_fc != 0 ) {
int lettura = analogRead(A1); // Potenziometro
velocita=map(lettura,0,1023,100,255);
analogWrite (enA, velocita);
if (digitalRead(fcD) == 0 ) {
motore_stop();
delay(1000);
stato_fc = 0 ;
}
}
delay(100);
stato_fc = 1 ;
motore_indietro() ;
while (stato_fc != 0 ) {
if (digitalRead(fcS) == 0 ) {
motore_stop();
delay(1000);
stato_fc = 0 ;
}
}
delay(100);
}
}// fine loop