Autore |
Discussione |
|
marco.santilli
Nuovo Arrivato
17 Messaggi |
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
|
Modificato da - marco.santilli in Data 25 gennaio 2024 17:51:43
|
|
Amministratore
Responsabile Forum
Prov.: Roma
Città: Roma
3519 Messaggi |
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. |
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
|
|
|
marco.santilli
Nuovo Arrivato
17 Messaggi |
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 |
Modificato da - marco.santilli in data 25 gennaio 2024 20:43:53 |
|
|
armandinoc
Membro
Prov.: Frosinone
Città: Casterlliri
41 Messaggi |
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. |
ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!! |
|
|
marco.santilli
Nuovo Arrivato
17 Messaggi |
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
Membro
Prov.: Frosinone
Città: Casterlliri
41 Messaggi |
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 |
ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!! |
|
|
marco.santilli
Nuovo Arrivato
17 Messaggi |
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
Membro
Prov.: Frosinone
Città: Casterlliri
41 Messaggi |
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 |
ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!! |
|
|
marco.santilli
Nuovo Arrivato
17 Messaggi |
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
Membro
Prov.: Frosinone
Città: Casterlliri
41 Messaggi |
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. |
ma perchè tutti mi prendono per matto se inizio a parlare di presepi a febbraio???!!! |
|
|
marco.santilli
Nuovo Arrivato
17 Messaggi |
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
|
|
|
francescopaolo iacono
Nuovo Arrivato
Regione: Campania
Prov.: Napoli
Città: lacco ameno
23 Messaggi |
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
Nuovo Arrivato
17 Messaggi |
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
|
Modificato da - marco.santilli in data 29 gennaio 2024 18:11:10 |
|
|
francescopaolo iacono
Nuovo Arrivato
Regione: Campania
Prov.: Napoli
Città: lacco ameno
23 Messaggi |
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
|
|
|
francescopaolo iacono
Nuovo Arrivato
Regione: Campania
Prov.: Napoli
Città: lacco ameno
23 Messaggi |
Inserito il - 10 febbraio 2024 : 17:45:34
|
Grazie Marco |
|
|
|
Discussione |
|