Aiuto!! Funzionamento motore 12v con inversione di marcia

Salve a tutti felice di conoscervi, sono entrato da poco a far parte del mondo di Arduino per riuscire a creare questo mio progetto, devo collegare un motore 12v che parte dal punto A e arriva al punto B invertendo il senso di marcia mediante dei switch di finecorsa per ritornare al punto A e quindi fermarsi..Io posseggo 2 Arduino uno, un modulo WB291111, un Modulo MR009-003.1 con 2 switch, un modulo 4 relè ed
un sensore Soil Moisture che sarà quello che avvierà il funzionamento del motore 12v..
Avete dei consigli su come posso programmare arduino? grazie.

Ciao, prima che passi un mod a "sgridarti" per la dimenticanza, potresti per cortesia presentarti nell'apposito thread ? ... Grazie.

>cicciozuc: ... come ti ha già indicato Etem, essendo il tuo primo post, nel rispetto del regolamento (… 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 il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

cicciozuc:
Avete dei consigli su come posso programmare arduino? grazie.

In che senso ? Dove hai difficoltà ? Dove ti sei fermato ? Di che consigli hai bisogno ?

Cerca di essere un po' più specifico relativamente a che problema stai incontrando ...

Guglielmo

Ciao gpb01 grazie per aver risposto, il mio progetto consiste nell'azionare un motore 12v che scorre lungo un binario mediante un sistema simile ad una carrucola quindi partendo dal punto A deve arrivare ad un punto B trovando un micro interruttore che dà il segnale di fermo e invertisce il senso di marcia del motore ritornando al punto A e quindi fermarsi,dovrà ripetere il suo ciclo al prossimo azionamento tramite un timer..
Tramite un modulo relè collegato con Arduino sono riuscito a farlo azionare ma ho bisogno di un input per fermarlo cioè il relè 1 aziona il motore avanti, riceve un input di fermo relè 1 si spegne ed aziona il relè 2 azionando il motore in senso contrario e fermandosi al punto A tramite un'altro input.. Capisco che è poco comprensibile quello che ho scritto ma non so come spiegarlo più chiaramente.. Accetto tutti i consigli grazie

  1. ti serve studiare come si usa la funzione millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ... è la base per le tue "temporizzazioni"

  2. Ti occorre una variabile che indichi la direzione ... avanti/indietro

  3. ti serve un pin digitale per rilevare il fine corsa

  4. ti serve un secondo pin digitale per rilevare l'inizio corsa

  5. ti servono un po' di pin per pilotare un ponte H che controla il motore avanti/indietro

SE ho capito bene quello che vuoi fare, il tutto è poi abbastanza semplice ...
... allo scadere del tempo parti "avanti", quando leggi sul pin il segnale di fine corsa, fermi ed inverti in "indietro", arrivi fino all'inizio corsa, ti fermi ed aspetti il prossimo periodo di tempo per ripartire.

Prova a buttare giù il codice e mettilo qui (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra), così poi lo commentiamo e lo correggiamo.

Guglielmo

Ciao grazie hai capito tutto...il codice che ho serve ad azionare il primo relè e lo apre per 10 secondi che sono indicativi perché sarebbero di più, quindi si chiude aspetta altri 10 sec ed apre il secondo relè 10 sec e lo chiude...per l'input sono in alto mare....ora vi posto il codice ma è ben lontano da quello che lei mi suggerisce

void setup(){  
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
} 
void loop(){  
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(10000);   
digitalWrite(7,HIGH); 
delay(10000); 
digitalWrite(8,LOW);
delay(10000);
digitalWrite(8,HIGH);
delay(10000)

Non ti servono i delay, per cominciare anche la millis lasciala indietro. Ti serve imparare a gestire i fine corsa. Comincia col mettere un pulsante, leggerlo e accendere spegnere un led col pulsante.
Ah, e poi, se lasci inserito sia il 7 che 8 fai un bel corto con gravi danni.
Comincia a comandare solo una uscita con solo un ingresso, quando ci riesci andiamo avanti

Scusate ho preso da questo link [u]https://www.progettiarduino.com/7-arduino-pulsante-e-led.html[/u] il codice per accendere un led tramite pulsante,quando dò lettura mi dà sempre errore eppure è un copia incolla senza che modifico nulla. Sapete il perché dell'errore

int ledPin = 13;
int bottone = 7;
int val = 0;
void setup() { 
  pinMode(ledPin, OUTPUT);
  pinMode(bottone, INPUT);
  } 
void loop(){ 

  val = digitalRead(bottone);
 
  if (val == 1){
    digitalWrite(ledPin, HIGH); 
  } 
  else { 
    digitalWrite(ledPin, LOW);
 }

No. Se non ci dici che errore ti da non possiamo capirne la causa.
Però azzardo ipotesi: hai fatto copia incolla
Prova a fare incolla come solo testo. O come si chiama per il tuo sistema operativo
Oppure ribatti tutto, su schetch nuovo nuovo
Tanto son poche righe

Problema risolto ho trovato questo nuovo sketch che sto studiando per capire la logica e funziona benissimo,,quando aziono il pulsante si accende il led ,se lo tengo premuto il led lampeggia se premo di nuovo si spegne.... Vorrei sapere come posso applicare questa logica al mio progetto sono un po confuso a riguardo. Questo è il codice;

//accensione LED con pulsante

#define LED 13      //indica al compilatore che il LED è collegato al pin 13
#define PULSANTE 2  //indica al compilatore che il PULSANTE è collegato al pin 2

int val = 0;        //variabile per salvare lo stato del valore di input

boolean stato = false;

void setup() {
  pinMode(LED, OUTPUT);      //imposta il pin LED come output
  pinMode(PULSANTE, INPUT);  //imposta il pin PULSANTE come input
}

void loop() {
  val = digitalRead(PULSANTE);    //legge il valore in input e lo salva in val
  
  //se si preme il pulsante e la luce è spenta, stato diventa 1
  if (val == HIGH) {
    stato = not(stato);
    delay(250);     //introduco un ritardo per risolvere il problema del rimbalzo del segnale
  }
  
  if (stato) {
    digitalWrite (LED, HIGH);     //accende il LED
  }
  
  else {
    digitalWrite (LED, LOW);     //spegne il LED
  }
}

Buon studio

Grazie, ho tolto il pulsante ed ho inserito un fine corsa per farmi un'idea ed il risultato ovviamente e lo stesso.
Adesso dovrei iniziare a capire il funzionamento del fine corsa di partenza primario cioè dove parte il motore 12v ed il fine corsa sec(quello di arrivo) dove mi inverte la polarità.. Mi spiego: parte una tensione di +12v arriva a finecorsa e inverte la tensione a -12v ritornando al punto di partenza,una volta arrivato al finecorsa di partenza ritorna a +12v e si ferma fino al prossimo input dato da un temporizzatore...accetto i vostri suggerimenti che per me sono ORO

Ho trovato online uno schema di un cancello automatico con finecorsa e sensori di prossimità e diciamo che corrisponde a quello che vorrei fare ovviamente togliendo il sensore di prossimità che non serve nel mio caso...secondo voi si può realizzare in maniera semplice rispetto ad un progetto di automazione di un cancello?

Scusa, ma non hai una schedina che ti inverte il senso della corsa?
E non fai prima a collegare il tutto così........ o vuoi usare anche la scheda di controllo motore ?

Posso fare come dici tu,ma quando arriva a fine corsa se non intervengo manualmente sull'interruttore della schedina il motore non inverte la marcia.. Ho pensato di rimediare con un piccolo attuatore lineare cioè, quando il motore arriva a fine corsa dà un segnale ad Arduino che attiva un attuatore in modo da poter spingere l'interruttore posto sulla scheda come se fosse fatto manualmente, lo stesso quando arriva al punto di partenza però riuscendo a fermarlo..come ho già detto parte dal punto A arriva al punto B inverte e si ferma al punto A per ripetere questo ciclo al prossimo input.... Questa idea sarebbe un pò rudimentale.

Un modulo l298 potrebbe essere una soluzione ma senza fine corsa mi spavento che possa uscire fuori asse...

ma quando arriva a fine corsa se non intervengo manualmente sull'interruttore della schedina il motore non inverte la marcia..

Premetto di non conoscere quella schedina... ma a vederla DEVE fare da invertitore di marcia..... e il pulsante dovrebbe servire solo a scegliere la direzione di marcia
Stavo scrivendo una cavolata..... ci sono solo i finecorsa in quella schedina, niente elettronica, quindi è come dici tu, devi premere il pulsante !! Che cavolata.

Ma il motore lo vuoi comandare con il L298 o con i Relè ?

Ciao.. Vanno bene entrambi purché posso gestirli con dei finecorsa.. è uguale al carrello di una stampante come funzionamento solo che deve compiere un ciclo e fermarsi.