Incrementare ingressi e uscite pin su Arduino

Ciao a tutti.
Premetto che sono un nuovo utente di Arduino (ci combatto da 2 mesi circa).
Il mio problema è il seguente:

ho fatto un progetto che prevede i seguenti componenti:

  • micro servo motore SG90
  • ricevitore laser j34
  • alcuni led che si accendo e si spengono (diciamo 3 o 4 per capirci).

Inoltre su questo progetto sono previsti altri componenti (puntatore laser, scheda audio SD, 3 o 4 pulsanti etc.

Il mio progetto (inizialmente creato su Arduino UNO) funziona perfettamente, ma ora avrei la necessità di incrementarlo con altri 20 ricevitori e servo motori.

Utilizzando Arduino UNO ho praticamente quasi esaurito i vari pin (digitali e analogici) e quindi ho pensato di acquistare Arduino MEGA che ha a disposizione una cinquantina di pin.

Facendo due calcoli approssimativi, se per ogni gruppo di ricevitore-servo motore servono 2 pin + altri pin per i led, per fare 20 gruppi me ne occorrono più di 50.

So che si possono unire più Arduino ed assegnare ad ognuno una serie di compiti, ma so che esiste anche una scheda di espansione in-out.

La mia richiesta pertanto è: Cosa mi consigliate di fare nel mio caso?
Grazie

Buona sera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… 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

Potresti usare dei LED come i "neopixel" e comandarli tutti con una sola porta.

Grazie per la risposta che tengo in considerazione, ma credo che anche utilizzando i neopixel, i pin sono pochi per me (1 pin per neopixel + 1 pin per servo motore + 1 pin per sensore luce = 3 pin x 20 = 60 pin).

I neopixel li piloti tutti con un unico pin a patto che tu possa collegare l'uscita di ognuno di essi all'ingresso del successivo (o meglio ancora sfruttare le strip led neopixel che sono già collegati tra loro) a quel punto un pin di Arduino ti indirizza N led.
Prova a guadare come funzionano i neopixel magari fanno al caso tuo e ti risolvono il problema

Ho girato un po su internet riguardo i led Neopixel e per quanto riguarda i led potrei dire che avrei risolto il problema grazie alle vostre risposte, ma la domanda era un'altra, ovvero:

per gestire 20 servo motori e 20 rilevatori di luminosità (e tutto il resto compreso i led), cosa mi consigliate di utilizzare?

un computer quantico di ultima generazione :smiley:

Ciao, prova a dare un'occhiata a questo:

Credo sia quello che cerchi...

CrazyHorse80:
Ciao, prova a dare un'occhiata a questo:
https://www.futurashop.it/Allegato_PDF_IT/7305-OCTOPUS.pdf
Credo sia quello che cerchi...

prima bisognerebbe essere a conoscenza di come e cosa verrà attaccato a sto povero arduino, qual'è l'aggeggio finito, magari basta andare su un mega....

Patrick_M:
prima bisognerebbe essere a conoscenza di come e cosa verrà attaccato a sto povero arduino, qual'è l'aggeggio finito, magari basta andare su un mega....

Bhè, l'OP ha parlato di 20 servo, 20 rilevatori di luminosità e 20 led... Ha già detto che la MEGA non gli basta... Poi ha menzionato scheda audio, SD e qualche pulsante... Alla fine io gli ho dato un suggerimento che è quello di andare a vedere se quella scheda fa per lui, non mi sembra di aver sbagliato. In caso, me ne scuso...

e chi ti dice che hai sbagliato! :smiley: :smiley:

intendo che mi pare che non ci siano idee chiare da parte dell'OP su cosa deve fare... magari i 20 servo si devono muovere a gruppi di 5...
anche per i led pensava di dover usare un pin ogniuno... :wink:

CrazyHorse80:
Bhè, l'OP ha parlato di 20 servo, 20 rilevatori di luminosità e 20 led... Ha già detto che la MEGA non gli basta... Poi ha menzionato scheda audio, SD e qualche pulsante... Alla fine io gli ho dato un suggerimento che è quello di andare a vedere se quella scheda fa per lui, non mi sembra di aver sbagliato. In caso, me ne scuso...

E difatti non hai sbagliato minimamente e ti ringrazio nuovamente per il tuo suggerimento!
Come avevo scritto nei messaggi precedenti, il problema non era riferito ai LED, ma a PIN a disposizione.

Sicuramente la tua risposta è migliore di "un computer quantico di ultima generazione" che a mio avviso non ha nessun senso come risposta.

Per quanto riguarda invece il collegamento dei 20 servo motori ho trovato (ed acquistato) questo prodotto:
PCA9685 16-CHANNEL 12-BIT PWM SERVO MOTOR DRIVER I2C MODULE ARDUINO ROBOT PCE, che occupando un paio di pin mi gestisce il collegamento di 16 servo motori.

Pertanto diciamo che l'ultimo problema da risolvere sarebbe quello dei 20 ricevitori laser.

Pensi che sia possibile utilizzare la stessa scheda dei servo motori (una seconda scheda intendo dire) per collegare i ricevitori o ne esiste una più dedicata al caso?

Bhe, non sono ancora molto pratico e non so come devi collegare i ricevitori laser. Di quanti pin hai bisogno per quelli? Analogici o digitali? Se potessi postare uno schema sicuramente aiuterebbe anche gli altri a consigliarti.

criccroc:
Pensi che sia possibile utilizzare la stessa scheda dei servo motori (una seconda scheda intendo dire) per collegare i ricevitori o ne esiste una più dedicata al caso?

Qualsiasi scheda i2c con MCP23017 va bene per leggere 16 ingressi digitali (immagino stiamo parlando di tempi di risposta di qualche millisecondo e non più veloci).

CrazyHorse80:
Bhe, non sono ancora molto pratico e non so come devi collegare i ricevitori laser. Di quanti pin hai bisogno per quelli? Analogici o digitali? Se potessi postare uno schema sicuramente aiuterebbe anche gli altri a consigliarti.

Il concetto è questo:

Inizialmente ho fatto un progetto su Arduino UNO dove ho collegato un ricevitore laser (collegato ad una porta analogica, quindi pin A0, semplicemente per leggere un range di luminosità) che se viene illuminato aziona un servo motore (collegato al pin 9 ad esempio) ed eventualmente accende uno o più led per indicare visivamente che è stato illuminato.

Ora, se volessi creare 2 zone usando lo stesso concetto, avrei collegato il secondo ricevitore alla porta A1 e il servo motore al pin 10 (e cosi via). Quindi il laser illumina uno dei due ricevitori ed aziona il servo motore corrispondente.

Il mio dubbio iniziale (e da qui ho creato questo post) era che se volessi creare 20 postazioni, i pin di Arduino UNO sarebbero insufficienti. Pertanto con un Arduino MEGA avrei in parte risolto avendo più PIN a disposizione.

Ricordo che sono solo 2 mesi che sto utilizzando Arduino e quindi in base alle ricerche fatte fino a pochi giorni fa avevo pensato di connettere 2 o più Arduino dove ognuno si occupava di un compito.

Sapevo soltanto che esistevano delle schede i2c, ma non avevo ancora capito come funzionavano.

Poi grazie alle vostre risposte e a quello che ho trovato in rete ho capito che:

  1. per quanto riguarda i led, basta utilizzare i Neopixel (quindi posso accendere xx led in sequenza a mia scelta, utilizzando un solo pin).
  2. con PCA9685 16-CHANNEL posso pilotare 16 servo motori (al limite ne utilizzo due per arrivare a 20), sempre utilizzando un solo pin, e pilotare il servo motore corrispondente al sensore che viene illuminato.

Quindi stiamo a 2 pin. Ora se devo collegare su Arduino Mega altri componenti (pulsanti, display, etc) + 20 sensori (utilizzando 1 pin per sensore) non avrei problemi di ingressi, ma come dice Claudio_FF anche in questo caso posso utilizzare una scheda i2c.

Per concludere ed essere ancora più chiaro il risultato finale è pressapoco questo:
Se il laser illumina il sensore 1, attiva il servo motore 1 ed eventualmente accende i led 1-2-3.
Se il laser illumina il sensore 2, attiva il servo motore 2 ed eventualmente accende i led 4-5-6 e cosi via per tutti e 20.

Buona domenica a tutti.