Forum del Presepio Elettronico Multimediale (Il primo e unico) - Apertura chiusura portone arduino
Forum del Presepio Elettronico Multimediale (Il primo e unico)

Forum del Presepio Elettronico Multimediale (Il primo e unico)
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 FORUM del Presepio Elettronico Multimediale
 ELETTRONICA - Circuiti elettronici
 Apertura chiusura portone arduino
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 25 gennaio 2024 : 17:49:32  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Arduino..

Vorrei creare una apertura e chiusura di un portone..

come lo realizzereste voi???

1) motorino passo-passo con drive uln2003 + un finecorsa in chiusura par fare il reset di posizione ad ogni avvio giornaliero del presepe

2) motorino dc (orario/antiorario) con stop della corsa sul finecorsa di apertura e finecorsa di chiusura

ultima osservazione, nel caso di creazione di più portoni o finestre quale soluzione potrebbe essere la migliore?

io pensavo la soluzione 2, mettendo in serie il finecorsa con l'alimentazione cosi da arduino LI FACCIO PARTIRE TUTTI INSIEME e da soli si fermeranno ognuno con il proprio finecorsa...Stessa cosa per la corsa di ritorno... da arduino manterrò il segnale per un secondo in più dell'ultimo che si ferma, cosi sarò sicuro che tutti hanno compleatato la corsa

Grazieeee

Modificato da - marco.santilli in Data 25 gennaio 2024 17:51:43

Amministratore
Responsabile Forum


Prov.: Roma
Città: Roma


3514 Messaggi

Inserito il - 25 gennaio 2024 : 18:43:43  Mostra Profilo  Visita l'Homepage di Amministratore Invia a Amministratore un Messaggio Privato  Rispondi Quotando
Se hai diversi motori da azionare farli partire tutti insieme mi sembra brutto.
Io agirei così:
5 pin per controllare ogni motore quindi:
2 in input per i fine corsa
1 per l'iversione dell'alimentazione per il senso di rotazione
1 per alimentare il motore
1 in imput per il controllo 1=apre 0=chiude o viceversa
Per regolare entro un certo limite la velocità di apertra/chiusura puoi usare le uscite pwm.
Usando un solo pin per i fine corsa parallelandoli, con Arduino uno puoi controllare tre motori.

La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè.
In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè.
Albert Einstein
E’ meglio stare in silenzio ed apparire stupidi piuttosto che aprire bocca e togliere ogni dubbio.
Albert Einstein
L'uomo incontra Dio dietro ogni porta che la scienza riesce ad aprire.
Albert Einstein

Torna all'inizio della Pagina

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 25 gennaio 2024 : 19:48:30  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Citazione:
Messaggio inserito da Amministratore

Se hai diversi motori da azionare farli partire tutti insieme mi sembra brutto.
Io agirei così:
5 pin per controllare ogni motore quindi:
2 in input per i fine corsa
1 per l'iversione dell'alimentazione per il senso di rotazione
1 per alimentare il motore
1 in imput per il controllo 1=apre 0=chiude o viceversa
Per regolare entro un certo limite la velocità di apertra/chiusura puoi usare le uscite pwm.
Usando un solo pin per i fine corsa parallelandoli, con Arduino uno puoi controllare tre motori.



quindi useresti un motore normale non passo-passo

https://www.amazon.it/dp/B01CP18J4A?psc=1&ref=ppx_yo2ov_dt_b_product_details

ho:
+ 4 pin per uln2003
+ 1 pin x 5v uln2003
+ 1 pin gnd uln2003
+ 1 pin fine corsa
+ 1 pin gnd fine corsa


questo per un solo motore...



http://www.santillimarco.it/download/MotorePP01.mp4

Modificato da - marco.santilli in data 25 gennaio 2024 20:43:53
Torna all'inizio della Pagina

armandinoc
Membro

Prov.: Frosinone
Città: Casterlliri


41 Messaggi

Inserito il - 25 gennaio 2024 : 21:05:09  Mostra Profilo Invia a armandinoc un Messaggio Privato  Rispondi Quotando
Trovo più semplice usare i passo passo, sia perché è più facile regolare la velocità che il raggio di apertura.
Con i motori DC dovresti usare un ponte h per l'inversione orario antiorario e un regolatore di tensione per motori DC per la velocità, per non perdere la "coppia motore"
Con i MOSFET se abbassi troppo la tensione il motorino si ferma. Oppure devi usare dei motoriduttori da 1 giro/ minuto.
Sicuramente dovrai usare la funzione millis per gestire il tutto.

ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!!
Torna all'inizio della Pagina

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 25 gennaio 2024 : 21:19:47  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Citazione:
Messaggio inserito da armandinoc

Trovo più semplice usare i passo passo, sia perché è più facile regolare la velocità che il raggio di apertura.
Con i motori DC dovresti usare un ponte h per l'inversione orario antiorario e un regolatore di tensione per motori DC per la velocità, per non perdere la "coppia motore"
Con i MOSFET se abbassi troppo la tensione il motorino si ferma. Oppure devi usare dei motoriduttori da 1 giro/ minuto.
Sicuramente dovrai usare la funzione millis per gestire il tutto.



bene allora proseguo con i passo-passo
come ho messo nel video...

ora devo inserire il finecorsa per il reset di posizione...

una botta di conti al volo...
se per ogni motori mi occorrono circa 6 pin
se monto 2 portoni a 2 ante sono 2 motori dx e 2 motori sx
più 2 finestre altri 2 motori

totale 6 motori x 6 pin = 36 pin su arduino....

DOMANDA:
il presepe è circa 8 x 4 metri....
riesco a traspostare i segnali a tali distanze???
ad esempio un finecorsa che dista 6 metri da arduino...

grazie
Torna all'inizio della Pagina

armandinoc
Membro

Prov.: Frosinone
Città: Casterlliri


41 Messaggi

Inserito il - 25 gennaio 2024 : 22:00:58  Mostra Profilo Invia a armandinoc un Messaggio Privato  Rispondi Quotando
L'alimentatore del motore passo passo conviene prenderla da una alimentazione esterna ad Arduino e dovrai mettere il gnd delle alimentazioni esterne su gnd di Arduino altrimenti, vista la lunghezza non ti arriveranno i 5v.
Ti servono solo 4 PIN per la scheda del motore + 1 per il finecorsa.
Innanzitutto puoi mettere Arduino in posizione centrale rispetto al presepe per accorciare la lunghezza dei fili, comunque fai delle prove visto che li hai smontati. Altrimenti devi usare dei Arduino nano e metterli "dietro" la casa. Considera che anche i PIN analogici possono diventare digitali se non ti bastano i PIN oppure puoi usare finecorsa analogici tipo tcrt5000

ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!!
Torna all'inizio della Pagina

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 25 gennaio 2024 : 22:16:04  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Citazione:
Messaggio inserito da armandinoc

L'alimentatore del motore passo passo conviene prenderla da una alimentazione esterna ad Arduino e dovrai mettere il gnd delle alimentazioni esterne su gnd di Arduino altrimenti, vista la lunghezza non ti arriveranno i 5v.



ok perfetto...

Citazione:
Messaggio inserito da armandinoc


Ti servono solo 4 PIN per la scheda del motore + 1 per il finecorsa.
Innanzitutto puoi mettere Arduino in posizione centrale rispetto al presepe per accorciare la lunghezza dei fili, comunque fai delle prove visto che li hai smontati. Altrimenti devi usare dei Arduino nano e metterli "dietro" la casa.



ottima idea....
nel caso utilizzassi più arduini, come comunicano tra loro?
io userò il pc sempre connesso per controllare tutto il ciclo, musiche ed effetti ambiente.
quindi + cavi usb verso il pc

Citazione:
Messaggio inserito da armandinoc

Considera che anche i PIN analogici possono diventare digitali se non ti bastano i PIN oppure puoi usare finecorsa analogici tipo tcrt5000



Fantastico, sarebbe un finecorsa senza click fisico ma ad infrarossi...
bellissimo...
ci stavo ragionando oggi.... su come mettere un finecorsa fisico e se il portone o finestra riuscisse a premere il finecorsa...
con questo ad infrarossi zero sforzo fisico del motore...

Torna all'inizio della Pagina

armandinoc
Membro

Prov.: Frosinone
Città: Casterlliri


41 Messaggi

Inserito il - 26 gennaio 2024 : 01:56:06  Mostra Profilo Invia a armandinoc un Messaggio Privato  Rispondi Quotando
Puoi collegarli tramite porta i2c e vista la lunghezza del cavo puoi usare un modulo i2c.externder per far arrivare il segnale. Avrai un Arduino master che invia i comandi agli altri Arduino slave.
Non so come gestirai il progetto ma secondo me ti basterà collegare al PC solo l'arduino master

Sulle mie centraline uso un LCD per visualizzare cosa sta facendo Arduino e gestito il passare della giornata con la funzione millis

ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!!
Torna all'inizio della Pagina

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 26 gennaio 2024 : 17:44:03  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Citazione:
Messaggio inserito da armandinoc

Puoi collegarli tramite porta i2c e vista la lunghezza del cavo puoi usare un modulo i2c.externder per far arrivare il segnale. Avrai un Arduino master che invia i comandi agli altri Arduino slave.
Non so come gestirai il progetto ma secondo me ti basterà collegare al PC solo l'arduino master

Sulle mie centraline uso un LCD per visualizzare cosa sta facendo Arduino e gestito il passare della giornata con la funzione millis



inizio a sviluppare i test poi vedo...
potrei fare una centralina per luci e movimenti
una centralina che metto vicino alle case per apertura portoni e finestra cosi ho cavi max 2metri

l'importante ora simulare tutto e farlo funzionare

cosa intendi per funzione MILLIS????

io programmo in vb.net e uso arduino connesso
Torna all'inizio della Pagina

armandinoc
Membro

Prov.: Frosinone
Città: Casterlliri


41 Messaggi

Inserito il - 26 gennaio 2024 : 18:15:40  Mostra Profilo Invia a armandinoc un Messaggio Privato  Rispondi Quotando
Non so se sia uguale come programmazione cmq,
se devi fare più cose contemporaneamente, per esempio aprire un portone e chiudere una finestra non puoi usare il delay come pausa perché il delay blocca l'esecuzione del programma per la durata della pausa. Quindi se hai il delay di 1000 tra uno step e l'altro del motore passo passo in quel secondo non puoi azionare il motore della finestra. Con la funzione millis durante la pausa puoi fare svolgere altre righe del codice quindi puoi far funzionare la finestra mentre la porta di chiude.

ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!!
Torna all'inizio della Pagina

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 26 gennaio 2024 : 18:45:19  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Citazione:
Messaggio inserito da armandinoc

Non so se sia uguale come programmazione cmq,
se devi fare più cose contemporaneamente, per esempio aprire un portone e chiudere una finestra non puoi usare il delay come pausa perché il delay blocca l'esecuzione del programma per la durata della pausa. Quindi se hai il delay di 1000 tra uno step e l'altro del motore passo passo in quel secondo non puoi azionare il motore della finestra. Con la funzione millis durante la pausa puoi fare svolgere altre righe del codice quindi puoi far funzionare la finestra mentre la porta di chiude.




io utilizzo thread paralleli...
https://learn.microsoft.com/it-it/dotnet/standard/threading/using-threads-and-threading

esegue un blocco di istruzione a se, non nel ciclo principale...
se nel ciclo principale dai un delay o sleep nel mio caso, il thread parallelo continua a fare il suo lavoro...

lanci un processo a se dissociato dagli altri
Torna all'inizio della Pagina

francescopaolo iacono
Nuovo Arrivato



Regione: Campania
Prov.: Napoli
Città: lacco ameno


19 Messaggi

Inserito il - 29 gennaio 2024 : 18:01:16  Mostra Profilo Invia a francescopaolo iacono un Messaggio Privato  Rispondi Quotando
Ciao Marco mi passeresti se ti va lo Sketch? per l'apertura dei motori passo passo? grazie
Torna all'inizio della Pagina

marco.santilli
Nuovo Arrivato



17 Messaggi

Inserito il - 29 gennaio 2024 : 18:07:08  Mostra Profilo  Visita l'Homepage di marco.santilli  Rispondi Quotando
Citazione:
Messaggio inserito da francescopaolo iacono

Ciao Marco mi passeresti se ti va lo Sketch? per l'apertura dei motori passo passo? grazie




questo sul pulsante, creo un nuovo Thread e gli passo la funzione del motore avanti

Private Sub btnMotore01Avanti_Click(sender As Object, e As EventArgs) Handles btnMotore01Avanti.Click

        trdMotore01 = New Thread(AddressOf Motore1_Avanti)
        trdMotore01.IsBackground = True
        trdMotore01.Start()

    End Sub


la funzione per il motore in avanti, ho aggiunto funzioni interne per fare lo stop nel ciclo. l'ho usato per simulare un finecorsa
statoMotore01 = i --> lo uso per una progressiveBAR, puoi anche toglierlo, è solo un effetto grafico.
Dim Fase01 As Integer = Motore_1_01 (sono i pin)
Dim Fase02 As Integer = Motore_1_02 (sono i pin)
Dim Fase03 As Integer = Motore_1_03 (sono i pin)
Dim Fase04 As Integer = Motore_1_04 (sono i pin)


    Private Sub Motore1_Avanti()
        motore_attivo_01 = True
        Dim motor_Speed As Integer = 4


        Dim Fase01 As Integer = Motore_1_01
        Dim Fase02 As Integer = Motore_1_02
        Dim Fase03 As Integer = Motore_1_03
        Dim Fase04 As Integer = Motore_1_04


        For i = 0 To 100

            If motore_attivo_01 = True Then


                Application.DoEvents()
                statoMotore01 = i
                Application.DoEvents()

                FirmataVB1.DigitalWrite(Fase01, HIGH)
                FirmataVB1.DigitalWrite(Fase02, LOW)
                FirmataVB1.DigitalWrite(Fase03, LOW)
                FirmataVB1.DigitalWrite(Fase04, LOW)
                Thread.Sleep(motor_Speed)
                FirmataVB1.DigitalWrite(Fase01, LOW)
                FirmataVB1.DigitalWrite(Fase02, HIGH)
                FirmataVB1.DigitalWrite(Fase03, LOW)
                FirmataVB1.DigitalWrite(Fase04, LOW)
                Thread.Sleep(motor_Speed)
                FirmataVB1.DigitalWrite(Fase01, LOW)
                FirmataVB1.DigitalWrite(Fase02, LOW)
                FirmataVB1.DigitalWrite(Fase03, HIGH)
                FirmataVB1.DigitalWrite(Fase04, LOW)
                Thread.Sleep(motor_Speed)
                FirmataVB1.DigitalWrite(Fase01, LOW)
                FirmataVB1.DigitalWrite(Fase02, LOW)
                FirmataVB1.DigitalWrite(Fase03, LOW)
                FirmataVB1.DigitalWrite(Fase04, HIGH)
                Thread.Sleep(motor_Speed)
            Else
                Exit For
            End If

        Next
        motore_attivo_01 = False
        Invoke(New EventHandler(AddressOf Motore1_FineCorsaAndata))
    End Sub



invoke finale, non è altro una funzione che mi scrive in una listbox tutte le cose che ha terminato

   Private Sub Motore1_FineCorsaAndata()
        ListBox1.Items.Add("Portone 1: Fine apertura")
    End Sub

Modificato da - marco.santilli in data 29 gennaio 2024 18:11:10
Torna all'inizio della Pagina

francescopaolo iacono
Nuovo Arrivato



Regione: Campania
Prov.: Napoli
Città: lacco ameno


19 Messaggi

Inserito il - 10 febbraio 2024 : 17:44:03  Mostra Profilo Invia a francescopaolo iacono un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da marco.santilli

Citazione:
Messaggio inserito da francescopaolo iacono

Ciao Marco mi passeresti se ti va lo Sketch? per l'apertura dei motori passo passo? grazie




questo sul pulsante, creo un nuovo Thread e gli passo la funzione del motore avanti

Private Sub btnMotore01Avanti_Click(sender As Object, e As EventArgs) Handles btnMotore01Avanti.Click

        trdMotore01 = New Thread(AddressOf Motore1_Avanti)
        trdMotore01.IsBackground = True
        trdMotore01.Start()

    End Sub


la funzione per il motore in avanti, ho aggiunto funzioni interne per fare lo stop nel ciclo. l'ho usato per simulare un finecorsa
statoMotore01 = i --> lo uso per una progressiveBAR, puoi anche toglierlo, è solo un effetto grafico.
Dim Fase01 As Integer = Motore_1_01 (sono i pin)
Dim Fase02 As Integer = Motore_1_02 (sono i pin)
Dim Fase03 As Integer = Motore_1_03 (sono i pin)
Dim Fase04 As Integer = Motore_1_04 (sono i pin)


    Private Sub Motore1_Avanti()
        motore_attivo_01 = True
        Dim motor_Speed As Integer = 4


        Dim Fase01 As Integer = Motore_1_01
        Dim Fase02 As Integer = Motore_1_02
        Dim Fase03 As Integer = Motore_1_03
        Dim Fase04 As Integer = Motore_1_04


        For i = 0 To 100

            If motore_attivo_01 = True Then


                Application.DoEvents()
                statoMotore01 = i
                Application.DoEvents()

                FirmataVB1.DigitalWrite(Fase01, HIGH)
                FirmataVB1.DigitalWrite(Fase02, LOW)
                FirmataVB1.DigitalWrite(Fase03, LOW)
                FirmataVB1.DigitalWrite(Fase04, LOW)
                Thread.Sleep(motor_Speed)
                FirmataVB1.DigitalWrite(Fase01, LOW)
                FirmataVB1.DigitalWrite(Fase02, HIGH)
                FirmataVB1.DigitalWrite(Fase03, LOW)
                FirmataVB1.DigitalWrite(Fase04, LOW)
                Thread.Sleep(motor_Speed)
                FirmataVB1.DigitalWrite(Fase01, LOW)
                FirmataVB1.DigitalWrite(Fase02, LOW)
                FirmataVB1.DigitalWrite(Fase03, HIGH)
                FirmataVB1.DigitalWrite(Fase04, LOW)
                Thread.Sleep(motor_Speed)
                FirmataVB1.DigitalWrite(Fase01, LOW)
                FirmataVB1.DigitalWrite(Fase02, LOW)
                FirmataVB1.DigitalWrite(Fase03, LOW)
                FirmataVB1.DigitalWrite(Fase04, HIGH)
                Thread.Sleep(motor_Speed)
            Else
                Exit For
            End If

        Next
        motore_attivo_01 = False
        Invoke(New EventHandler(AddressOf Motore1_FineCorsaAndata))
    End Sub



invoke finale, non è altro una funzione che mi scrive in una listbox tutte le cose che ha terminato

   Private Sub Motore1_FineCorsaAndata()
        ListBox1.Items.Add("Portone 1: Fine apertura")
    End Sub


Torna all'inizio della Pagina

francescopaolo iacono
Nuovo Arrivato



Regione: Campania
Prov.: Napoli
Città: lacco ameno


19 Messaggi

Inserito il - 10 febbraio 2024 : 17:45:34  Mostra Profilo Invia a francescopaolo iacono un Messaggio Privato  Rispondi Quotando
Grazie Marco
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:

Chiudi Finestra (termina)