Luci intermittenti con relè

Salve a tutti, sto cercando di realizzare un robot dotato di motori, luci e suoni. Purtroppo xó mi è rimasto solamente un pin disponibile (la scheda che uso è l’Arduino UNO) e dovrei controllare 3 led (con accensione continua intermittente). Leggendo un po’ in giro credo che risolverei utilizzando un relè commutatore a 3 uscite, ma non essendo molto pratico in materia non vorrei aver detto una stupidaggine. Sono sulla strada giusta? Che tipo di relè dovrei usare? E nel caso stessi sbagliando, cosa mi consigliereste? Grazie mille a tutti

Mah io al posto tuo, dopo aver verificato che effettivamente non ci siano possibilità di ottimizzazione (es. invece di dedicare 3 pin digitali a 3 pulsanti, usare solo un input analogico e partitore resistivo, oppure se hai un display LCD prendere un adattatore I2C per usare solo 2 pin), passerei ad un Mega.

perché non utilizzare i neopixel, su un piedino ne puoi pilotare molto più di tre e ogni led può assumere qualsiasi colore tu voglia (beh quasi :slight_smile: )

Purtroppo non posso ottimizzare in quanto ho tre motori che usano 3 pin ciascuno , il modulo vocale che ne utilizza altrettanti e la scheda x il collegamento con il joystick che utilizza i rimanenti pin tranne 1 (utilizzando sia i pin digitali che analogici)

>IronTeo92: ... ma il suggerimento di -zef- non ti va bene ? I led WS2812 e simili (li trovi comunemente anche con il nome Adafruit di NeoPixel) sono LED "intelligenti, si collegano in serie ed usano 1 solo pin per la comunicazione. Con la apposita libreria ne comandi quanti ne vuoi (entro certi limiti dati dalla SRAM) decidendo, per ogni singolo led, intensità e colore.

Guglielmo

Hai l'i2c disponibile ?
puoi avere ancora 16 pin dispobibili. (tipo MCP23017 ma controlla la corrente di uscita, non li ho mai usati).

Si scusate ma dal cellulare a volte non mi visualizza tutte le risposte... effettivamente questi neopixel sembrano interessanti, adesso provo a documentarmi un po’

IronTeo92:
... adesso provo a documentarmi un po’

Vai sul sito di Adafruit ... c'è di tutto e di più ... inclusa la libreria per gestirli :wink:

Guglielmo

Ho qualche dubbio ancora; se tipo dovessi collegare tra loro qualche striscia da (per esempio) 10,15 e 20 led dovrei impostarlo come una striscia unica da 45 giusto? Un altro cosa, e se invece volessi creare una specie di display con tipo 60 led dovrei scrivere un codice per ognuno di loro?

Ne puoi collegare quanti ne vuoi (... come detto nei limiti della SRAM dato che ciascuno occupa 3 bytes per il suo buffer), alla libreria dici quanti sono e da codice li vedi come fossero singoli LED (... selezioni il numero di LED e dai la tripletta RGB per quel LED).

Guglielmo

Ma posso controllare più led con una sola riga di codice? Nel senso, metti che abbia 30 led e voglia accendere contemporaneamente i primi 10 rossi, poi gli altri 10 blu e gli ultimi 10 verdi , dovrei usare una riga per ogni led? O appunto con un unico comando riesco ad accederne di più contemporaneamente dato che userei lo stesso colore?

IronTeo92:
Ma posso controllare più led con una sola riga di codice? Nel senso, metti che abbia 30 led e voglia accendere contemporaneamente i primi 10 rossi, poi gli altri 10 blu e gli ultimi 10 verdi , dovrei usare una riga per ogni led? O appunto con un unico comando riesco ad accederne di più contemporaneamente dato che userei lo stesso colore?

Devi dire a ciascun pixel che colore deve assumere ma se il tuo interesse è farlo a gruppi di 10 con la libreria Adafruit puoi fare una cosa così:

for(byte i=0; i<10;i++)
{
  //Rosso
  strip.setPixelColor(i, 255, 0, 0, 0);
}

e ripeti il for (magari usi una funzione da te creata in modo che passando i parametri valorizzi i pixel
Alla fine usando il comando

strip.show();

Dici alla strip di visualizzare i colori impostati
Per maggio chiarezza puoi guardare qui

Ok dai mi sono abbastanza convinto, adesso provo ad ordinarli e farò varie prove