Go Down

Topic: Aiuto!! Funzionamento motore 12v con inversione di marcia (Read 5496 times) previous topic - next topic

cicciozuc

Son andato in negozio e queste induttanze costano un botto, a casa in vecchie schede c'è li ho uguali alla foto che mi hai fatto vedere,  per il momento provo solo con i condensatori poi se il caso monto pure le induttanze che smonterò dalle schede... Il condensatore da 10000uf 63v è costato 8euro... Una domanda: attualmente ho un condensatore ceramico da 474(colore azzurro) sull'alimentazione del motore lo posso togliere e mettere l'elettrolitico o li metto tutti e due?

Etemenanki

i ceramici lasciali, male non fanno mai ... semmai aggiungi l'altro in parallelo ... poi per provare le induttanze le puoi anche recuperare da qualche vecchio alimentatore per PC scassato, tanto e' una prova ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

cicciozuc

 Gli induttori dell'alimentatore del PC hanno 5 contatti per lato e sono di quelli grandi, ho trovato questi due tipi, uno doppio e due singoli ma non sò la loro misura.. Allego foto.
Fammi sapere

cicciozuc

Questo è lo schema (fatto a mano) che domani monterò... Ho deciso di montare l'induttore grande con 5 fili per lato unendoli per formare un unico conduttore per lato...

Etemenanki

Nella prima foto, i due toroidi sulla destra non hanno solo due fili ? ... quelle sono induttanze singole, mi sembra, e se e' cosi, dovrebbero andare bene ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

cicciozuc

Ho montato quelli della seconda foto che hanno 5 fili per lato li ho uniti così da creare un unico filo,per ora sta funzionando ma ti darò conferma quando lo testerò durante tutto il giorno, se mi dici di mettere quelli più piccoli farò come dici tu... Ecco delle foto

cicciozuc

Comunico a tutti che il progetto "motore inversione'" funziona benissimo senza alcun errore testato tutto il giorno ogni 5 minuti. Con i suggerimenti di @Etemenanki ho risolto i problemi che ho avuto con i finecorsa e con il blocco del motore.. Avrei un ultimo quesito:
Se vorrei modificare lo sketch dei relè finecorsa e fare in modo che il motore compie due cicli separati quale variabile devo modifiare ? Ad esempio:
Il motore quando arriva al finecorsa di inversione si ferma e aspetta il prossimo start per ritornare al punto di partenza, quindi dovrà compiere un ciclo per volta. Vi posto lo sketch dei relè

Vorrei fare un ringraziamento particolare a @brunello22 per gli sketch e logica ed @Etemenanki per la parte elettrica, senza di voi sarei ancora in alto mare... Grazie infinite
Code: [Select]



#define in1 10
#define in2 11
#define fcS 13    //Finecorsa Sinistro ( posizione di reset iniziale )
#define fcD 12    //Finecorsa Destro
#define pin_sensore A0
byte stato_fc =  1 ;

void setup() {
  digitalWrite(in1, HIGH) ;
  digitalWrite(in2, HIGH) ;
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(fcS, INP
 UT_PULLUP);
  pinMode(fcD, INPUT_PULLUP);
  pinMode(pin_sensore, INPUT_PULLUP);
  while (digitalRead(fcS) == HIGH)  { // legge finecorsa sinistro
    digitalWrite(in2, LOW) ; // avvia motore indietro fino alla posizione iniziale
  }
  digitalWrite(in2, HIGH) ; // motore_stop
}

void loop() {
  if (digitalRead(pin_sensore) == 0 ) { // attende lo start
    delay(100);
    stato_fc = 1 ;
    digitalWrite(in1, LOW) ; // motore_avanti
    while (stato_fc != 0 ) {
      if (digitalRead(fcD) == 0 )   {
        digitalWrite(in1, HIGH); // motore_stop
        stato_fc = 0 ;
      }
    }
    delay(3000);
    stato_fc = 1 ;
    digitalWrite(in2, LOW) ; // motore_indietro
    while (stato_fc != 0 ) {
      if (digitalRead(fcS) == 0 )   {
        digitalWrite(in2, HIGH); // motore_stop
        stato_fc = 0 ;
      }
    }
    delay(100);
  }

}// fine loop

giannigreco1957

Ciao
ho necessità di pilotare un motorino(DC di quelli che normalmente sono nei gruppi ottici dvd o cd che trasformano con ingranaggi o viti senza fine il moto da rotatorio a lineare (verso alto e verso il basso) con due interruttori N.A. premendo i quali si ottiene il movimento (fin quando premuti) in un senso o nell'altro! sto provando con Arduino ed un L298N. Ma ho letto di problemi vari..Mi suggerite di usare una scheda come quella indicata oppure continuare con arduino o usare scheda 2 relè ma sempre pilotata da due interruttori ? perchè vorrei implementare in ogni caso due finecorsa per bloccare il motore quando raggiunti (sia in alto , sia in basso) ma che a quel punto consentano all'interruttore di muoversi nella direzione opposta (in pratica classici finecorsa per evitare che il motore nella corsa sbatta in altro o in basso contro il telaietto!.
mi piacerebbe sempre alla pressione degli interruttori anche far suonare una piccola scheda pilotata da arduino.....
Suggerimenti?

Grazie moltissime!
al momento ho il seguente codice Arduino
Code: [Select]
Code for ISD1820 Voice Recording Module
by eLab Peers (C) 2014.

Visit us at:
http://www.elabpeers.com

All rights reserved.

Wiring:
1.  VCC to 5V on Arduino board
2.  GND to GND on Arduino board
3.  REC to Pin 11 on Arduino board
4.  P-E to Pin 13 on Arduino board

*/

// Uso L293 con potenziometro e cambio moto avanti-retro ok

// setta pin
const int buttonPin1 = 2; // pulsante 1
const int buttonPin2 = 4; // pulsante 2
const int buttonPin3 = 1; // finecorsa 1 (X sar� sotituito dal numero di un pin digitale libero)
const int buttonPin4 = 2; // finecorsa 2 (y sar� sotituito dal numero di un pin digitale libero)
const int ledPin1 = 8; // LED controllo
const int ledPin2 = 9; // LED controllo
const int potPin = A1; // input potenziometro
const int in1Pin = 5; // L293 pin 2
const int in2Pin = 6; // L293 pin 7
const int motorPin = 3; //L293 pin 1 pwm

int buttonState1 = 0; // variabile per leggere stato pulsante 1
int buttonState2 = 0; // variabile per leggere stato pulsante 2
int buttonState3 = 0; // variabile per leggere stato finecorsa 1
int buttonState4 = 0; // variabile per leggere stato finecorsa 2
int potVal = 0;
int mapedPotVal = 0;
int Rec = 11;
int Play = 13;

void setup()
{
  // initializzo
  pinMode(potPin, INPUT);
  pinMode(motorPin, OUTPUT);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(Rec, OUTPUT);
  pinMode(Play, OUTPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
 
}
void loop()
{
  buttonState1 = digitalRead(buttonPin1); // Rileva stato pulsante 1
  buttonState2 = digitalRead(buttonPin2); // Rileva stato pulsante 2
  buttonState3 = digitalRead(buttonPin3); // Rileva stato finecorsa 1
  buttonState4 = digitalRead(buttonPin4); // Rileva stato finecorsa 2
  potVal = analogRead(potPin); // Rileva valore potenziometro
  mapedPotVal = map(potVal, 0, 1023, 0, 255); // Scala il risultato della lettura
  analogWrite(motorPin, mapedPotVal); // Output del valore della all�intergrato
 
  // leggo stato pulsante 1
  if (buttonState1 == HIGH) {
    // accendo LED avanti:
    // spengo LED indietro:
    // cambio direzione motore
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);
    digitalWrite(in1Pin,HIGH);
    digitalWrite(in2Pin,LOW);
    digitalWrite(Play, HIGH);
   
   
  }
  // leggo stato pulsante 2
  else if (buttonState2 == HIGH) {
    // accendo LED avanti:
    // spengo LED indietro:
    // cambio direzione motore
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,HIGH);
    digitalWrite(Play, HIGH);

   
  }
  else {
    mapedPotVal = 0;
    analogWrite(motorPin, mapedPotVal); // Output del valore della all�intergrato
    digitalWrite(Play, LOW);
  }
  // leggo stato finecorsa 1
  if (buttonState3 == HIGH) {
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,LOW);
    mapedPotVal = 0;
    analogWrite(motorPin, mapedPotVal); // Output del valore della all�intergrato
    digitalWrite(Play, LOW);
   
  }
  // leggo stato finecorsa 2
  if (buttonState4 == HIGH) {
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,LOW);
    mapedPotVal = 0;
    analogWrite(motorPin, mapedPotVal);
    digitalWrite(Play, LOW);

   }
 
  if ((buttonState1 == HIGH) && (buttonState2 == HIGH)) { // controllo che i due pulsanti non siano premuti contemporaneamente
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,LOW);
 
     //Stop audio
    digitalWrite(Play, LOW);
 
 }
}

gpb01

>giannigreco1957:   Buongiorno, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... 

... poi, in conformità al suddetto regolamento, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione Inglese del forum (post per di più scritto in Italiano, cosa non permessa) è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie. :)

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. ;)
Search is Your friend ... or I am Your enemy !

giannigreco1957

Buongiorno!
Chiedo scusa, ho postato la mia presentazione spero nel posto giusto! Grazie per la comprensione!

giannigreco1957

Ciao
ho necessità di pilotare un motorino(DC di quelli che normalmente sono nei gruppi ottici dvd o cd che trasformano con ingranaggi o viti senza fine....
In alternativa ho pensato di usare il Driver BTS7960 per sostituire una board L298N che è limitata in corrente e si blocca!!
Nel mio esempio in arduino piloto il motorino dc con due interruttori NA per le due direzioni e un potenziometro per vel.
Tuttavia uso solo tre pint di Arduino due digitali IN ad uno per il PWM!
Ho appena comprato la nuova scheda ho cercato su internet ma non trovo risposte, come posso usare il  Motor Driver BTS7960 per sostituire il L298N ?
lo schetch è ottimizzato per i tre pin....
Qualcuno riesce ad aiutarmi?
Grazie!

gpb01

>giannigreco1957: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce. Gli utenti da device "mobile" ringrazieranno per la cortesia ;)

Guglielmo

P.S.: Ho "tagliato" io il tuo quote ;)
Search is Your friend ... or I am Your enemy !

daysleeper

A naso c'è qualcos'altro che non quadra, il driver L298N ha 2A di corrente utile (nei moduli più diffusi). Se l'integrato va in protezione con un piccolo motorino da lettore cd il problema non è la poca corrente disponibile.

Onde evitare equivoci, parli del motorino che fa entrare e uscire il vassoio del cd, no?
Questo motorino è fatto per piccoli e sporadici movimenti, se lo alimenti costantemente a più di 2A mi sa che avrà una vita dell'ordine dei minuti.
Se è stupido ma funziona allora non è stupido.

giannigreco1957

A naso c'è qualcos'altro che non quadra, il driver L298N ha 2A di corrente utile (nei moduli più diffusi). Se l'integrato va in protezione con un piccolo motorino da lettore cd il problema non è la poca corrente disponibile.

Onde evitare equivoci, parli del motorino che fa entrare e uscire il vassoio del cd, no?
Questo motorino è fatto per piccoli e sporadici movimenti, se lo alimenti costantemente a più di 2A mi sa che avrà una vita dell'ordine dei minuti.
Grazie del consiglio concordo pienamente! l'idea era di fare solo una piccola dimostrazione una tantum di come con Arduino ed un motorino di recupero si possa trasformare il moto rotatorio in lineare. Non pensavo  ad un uso continuativo assolutamente, sono coscente che a tale scopo sarebbe utile un motore dimensionato ad hoc o meglio un piccolo attuatore lineare opportunamente pilotato. Esclusivamente per una piccola demo (con il concetto di open source e di riutilizzo di materiali) volevo per poco tempo pilotare con pulsanti il motorino nelle due direzioni e aggiungere ,sempre a scopo dimostrativo per la durata di un momento, anche due  finecorsa (solo per illustrarne l'utilizzo) data la corsa misera di soli due centimetri!.
Mi chiedeveo quale poteva essere per lo scopo la soluzione migliore ...ci sono anche quelle schedine per l'inversione di direzione di marcia ma arduino si presterebbe meglio per il mio sporadico scopo. Tu cosa suggeriresti ...?

daysleeper

Dunque, non sono sicuro di cosa ti serva di preciso ma per muovere un motore DC avanti e indietro, implementando anche dei finecorsa, non ti serve un arduino ma si può fare tranquillamente elettromeccanicamente con due relay e un interruttore come puoi vedere qui.

Se invece è obbligatorio usare arduino sono valide entrambe le strade, sia i 2 relay che l'L298N, uno ti da più corrente massima, l'altro un ipotetico controllo di velocità. Visto il motorino che intendi usare non hai nessun problema di gestione della corrente, i finecorsa li puoi volendo utilizzare con tutti e due i sistemi. Io starei sull'L298N ma solo perchè la scheda relay la utilizzerei per applicazioni più gravose (motori più grossi) e perchè, per una demo, potrebbe essere carino variare la velocità. Ma questi sono gusti.

Se dici che il driver ti va in protezione per sovracorrente (come fai a dire che si blocca per troppa corrente e non per altro?) io per prima cosa controllerei i cablaggi.
Se è stupido ma funziona allora non è stupido.

Go Up