Forum del Presepio Elettronico Multimediale (Il primo e unico)
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

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
Videos: Google videoYoutubeFlash movie Metacafe videomySpace videoQuicktime movieWindows Media videoReal Video
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
marco.santilli Inserito il - 25 gennaio 2024 : 17:49:32
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
14   U L T I M E    R I S P O S T E    (in alto le più recenti)
francescopaolo iacono Inserito il - 10 febbraio 2024 : 17:45:34
Grazie Marco
francescopaolo iacono Inserito il - 10 febbraio 2024 : 17:44:03
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


marco.santilli Inserito il - 29 gennaio 2024 : 18:07:08
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
francescopaolo iacono Inserito il - 29 gennaio 2024 : 18:01:16
Ciao Marco mi passeresti se ti va lo Sketch? per l'apertura dei motori passo passo? grazie
marco.santilli Inserito il - 26 gennaio 2024 : 18:45:19
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
armandinoc Inserito il - 26 gennaio 2024 : 18:15:40
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.
marco.santilli Inserito il - 26 gennaio 2024 : 17:44:03
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
armandinoc Inserito il - 26 gennaio 2024 : 01:56:06
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
marco.santilli Inserito il - 25 gennaio 2024 : 22:16:04
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...

armandinoc Inserito il - 25 gennaio 2024 : 22:00:58
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
marco.santilli Inserito il - 25 gennaio 2024 : 21:19:47
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
armandinoc Inserito il - 25 gennaio 2024 : 21:05:09
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.
marco.santilli Inserito il - 25 gennaio 2024 : 19:48:30
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
Amministratore Inserito il - 25 gennaio 2024 : 18:43:43
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.

Chiudi Finestra (termina)