molti motori con arduino

Ciao a tutti.
Premetto che io non son molto esperto di arduino. Ho un arduino uno e un arduino mega a disposizione. Per natale volevo creare un presepe automatizzato e per farlo mi servono 9 motori. Ho visto che arduino mega ha solo 14 uscite pwm e se dovessi usare i motori 28byj-48 mi servirebbero 36 uscite di arduino di cui 27 pwm. Avete una soluzione a questo problema, visto che oltre ai motori devo collegargli almeno una striscia a led e altre luci? Grazie

per quel tipo di motore non serve un'uscita PWM, bastano solo 4 uscite digitali, con la mega hai I/O a sufficienza per fare tutto.

Io ti consiglierei di usare dei micro servo, che richiedono 1 solo pin di controllo e oltretutto ti consentono anche di definirne la posizione assoluta: con gli stepper dovresti mettere tu qualche sensore di fine corsa, altrimenti ti trovi un pastore che colpisce selvaggiamente a testa in giù le sue pecore, e Melchiorre che sodomizza il cammello... :smiley:

Anche i classici SG90 vanno bene per quello che a te serve, costano due lire e con 9 pin in totale te la cavi, così ne hai altri per fare altre cose (es. attivare una micro pompa per la cascata, accendere/spegnere le luci in base all'ora del giorno, eccetera).
Che ne pensi?

PS: Con un UNO però hai solo 6 PWM, quindi penso che ti convenga comunque passare ad un Mega, oppure dividere i controlli su due Arduino Nano.

ciao

docdoc:
PS: Con un UNO però hai solo 6 PWM, quindi penso che ti convenga comunque passare ad un Mega, oppure dividere i controlli su due Arduino Nano.

I servo non si comandano in PWM ma in PPM.
Con la libreria Servo puoi comandare fino a 12 motori con Arduino Uno.

ciao
pippo72

pippo72:
I servo non si comandano in PWM ma in PPM.
Con la libreria Servo puoi comandare fino a 12 motori con Arduino Uno.

Si, è vero quello che dici :wink: non sono stato preciso, di fatto PPM è un PWM con un duty cycle "variabile" per il controllo dei servo, cosa che però non è semplice, per cui si usa la libreria Servo che permette di usare qualsiasi pin output non solo i PWM.

Quindi si, ho sbagliato a dire che con UNO puoi averne solo 6, meglio così.

docdoc:
Si, è vero quello che dici :wink: non sono stato preciso, di fatto PPM è un PWM con un duty cycle "variabile"

No, il PPM è una cosa diversa dal PWM, in PPM l'informazione viene veicolata sia dalla durata dell'impulso che dalla sua posizione, un singolo frame ppm può contenere più impulsi, in PWM puoi veicolare solo una singola informazione e dipende dal rapporto tra Ton e Toff (duty cycle).
Anche se un treno d'impulsi singoli PPM assomiglia ad un PWM, come forma d'onda, non portano le stesse informazioni.
Infatti la libreria servo gestisce fino a 12 device su un Atmeg328, puoi utilizzare qualunque gpio a piacere, e non usa i timer in modalità PWM per generare gli impulsi. :slight_smile:

astrobeed:
Anche se un treno d'impulsi singoli PPM assomiglia ad un PWM, come forma d'onda, non portano le stesse informazioni.

Si, ma infatti ho detto che il PPM è un PWM "a duty cycle variabile" ma che gestire queste variazioni per ogni impulso è praticamente complicato, per cui la libreria Servo lo risolve non usando affatto il PWM.

Ti ripeto che non è come dici tu, il PWM è un tipo di segnale diverso dal PPM, hanno caratteristiche diverse e modalità di controllo diverse, non puoi creare un vero PPM partendo dal PWM, per giunta nel PWM il duty cycle variabile è la norma visto che lo scopo è controllare qualcosa tramite la variazione del duty cycle. :slight_smile:
Esempio pratico, nei servo RC lo standard prevede un impulso con durata compresa tra 1 ms e 2 ms, pari a una deflessione di +/- 45°, ripetuto ogni 20 ms, all'interno di quei 20 ms puoi inserire fino a 8 impulsi distinti per controllare 8 differenti servo, prova a farlo col PWM se ci riesci. :slight_smile:
Arduino genera i segnali per i servo partendo da distinte generatrici PPM, sintetizzate con i timer, da ognuna delle quali è possibile ricavare 8 singoli canali, l'immagine allegata è quotata in % perché è l'analizzatore di stati logici è settato per fornire il valore 0-100% in funzione della lunghezza impulso, 0 = 0.5 ms, 100 = 2.5 ms (+/-90°), il limite di 12 servo sul 328 è dato da vari fattori, tra cui il limitato numero di timer disponibili.

Si, Astro, tu hai ragione, i dati che mostri non sono contestabili, ma io l'ho detto, e lo ripeto: lo so che PPM NON è un PWM, ma che è come un PWM "a duty cycle variabile" che varia "per ogni impulso", e che la libreria Servo "lo risolve non usando affatto il PWM".
Ti dò ragione, non per chiudere il discorso, ma perché inutile, le cose stanno come dici tu ma la mia è una "semplificazione".

Il punto chiave della questione è l'uso corretto dei termini, PPM != PWM. :slight_smile:
Che poi in rete trovi spesso citato il PWM come segnale di controllo per i servo è vero, però come ben sai la rete è piena di spazzatura copia e incolla senza nessuna verifica, cosa che porta facilmente a crearsi concetti sbagliati, peggio a scrivere codice o realizzare circuiti sbagliati, giusto per rimanere in tema software e elettronica, convinti di fare la cosa giusta.
Come ben sai non è raro vedere principianti collegare i led ad Arduino direttamente ad un pin senza resistenza perché lo hanno visto fare da qualche parte, se gli fai notare l'errore c'è pure il rischio che ti rispondono male, è successo, e ti citano il sito xyz, di un emerito sconosciuto, dove monta i led senza resistenze e tutto funziona "benissimo".
Confondere PPM e PWM non è una cosa grave, però io sono sempre dell'idea che i concetti devono essere spiegati corretti, sopratutto senza ricorrere a semplificazioni che possono trarre in inganno.

Si, si, dai astro, tutto chiaro, :wink: dai, torniamo al Presepe del nostro amico, e sentiamo che dice.

Premesso che il primo consiglio che gli darei e' di munirsi di un decente alimentatore separato per i motori (perche' 9 motori l'uscita dell'alimentazione di arduino non li regge, e lui non dice se usa un'alimentatore a parte per i motori, anche se spero di si ... :D)

Ma comunque non esistono gli expander per i servo ? ... con un MCP23017 ne controllerebbe 16 in I2C ... o meglio ancora, con una schedina gia fatta, dato che l'MCP23017 e' in SMD, e mi pare ci fossero schede simili sulla quindicina di Euro da sparkfun o adafruit, o roba del genere, che per di piu hanno gia anche la parte alimentazione ... o sbaglio ? :smiley:

Etemenanki:
Premesso che il primo consiglio che gli darei e' di munirsi di un decente alimentatore separato per i motori
...
dato che l'MCP23017 e' in SMD, e mi pare ci fossero schede simili sulla quindicina di Euro da sparkfun o adafruit, o roba del genere, che per di piu hanno gia anche la parte alimentazione ... o sbaglio ? :smiley:

Concordo perfettamente, la prima cosa (alimentazione separata) è assolutamente necessaria, per la seconda non li ho mai usati ma sicuramente semplifica la gestione hardware (non so lato software quali difficoltà possa incontrare, dipende dalla sua esperienza), ma prima aspettavo di sentire il parere dell'amico che ha chiesto consigli se gli va bene usare dei servo. Vediamo.

Presumo di si per un motivo abbastanza semplice ... se avesse voluto usarli per compiti continui, tipo ruota del mulino, pompa del laghetto, eccetera, gli sarebbero bastati normali motori con riduttore ad ingranaggi sempre collegati (o al massimo con on/off) ... lui invece parlava addirittura di passopasso, quindi immagino voglia usarli per movimenti ripetitivi ma controllabili dalla logica ... o almeno, e' l'unica ragione per cui dovrebbe collegarci un'arduino che mi venga in mente :wink:

A proposito di presepi "animati" ... mi e' tornato in mente uno che ho visto realizzato da un'artigiano del legno (chiamarlo "falegname" per i lavori che faceva e' troppo riduttivo) una trentina di anni fa ... parlo di una trentina di movimenti diversi, con ampiezze e tempi diversi, tutti realizzati con un'unico vecchio motore da girarrosto sotto il supporto, e credo un paio di centinaia fra camme, dischi scanalati, leve, molle, giunti, cerniere, ingranaggi di legno, tiranti ed assi in filo di ferro ... una cosa assolutamente impressionante, sia a livello meccanico che a livello di inventiva, perche' si era realizzato tutti i pezzi lui a mano, a tempo perso ... le uniche cose "elettriche" erano le lucine e qualche "fiamma" fatta con un po di lampade neon "flicker", e persino il "timer" delle luci era comandato dallo stesso motore attraverso un riduttore fatto di ingranaggi di legno e chiodini ... fuori di testa ...